(ns com.fulcrologic.rad.rendering.semantic-ui.controls.boolean-control (:require [com.fulcrologic.fulcro.components :as comp :refer [defsc]] [com.fulcrologic.fulcro.ui-state-machines :as uism] [com.fulcrologic.rad.options-util :refer [?!]] [com.fulcrologic.rad.report :as report] [taoensso.timbre :as log] #?(:cljs [com.fulcrologic.fulcro.dom :as dom] :clj [com.fulcrologic.fulcro.dom-server :as dom]) [com.fulcrologic.rad.control :as control] #?@(:cljs [[ch.lyrion.carbon.toggle.ui-toggle :refer [ui-toggle]]]))) (defsc BooleanControl [_ {:keys [instance control-key]}] {:shouldComponentUpdate (fn [_ _ _] true)} (let [controls (control/component-controls instance) {:keys [label onChange disabled? visible?] :as control} (get controls control-key)] (if control (let [label (or (?! label instance)) disabled? (?! disabled? instance) visible? (or (nil? visible?) (?! visible? instance)) value (control/current-value instance control-key)] (when visible? #?(:cljs (ui-toggle {:id (str (hash control)) :defaultToggled (boolean value) :labelA label :labelB label :onToggle (fn [_] (control/set-parameter! instance control-key (not value)) (when onChange (onChange instance (not value))))})))) (log/error "Could not find control definition for " control-key)))) (def render-control (comp/factory BooleanControl {:keyfn :control-key}))