fulcro-rad-carbon/src/main/com/fulcrologic/rad/rendering/semantic_ui/controls/boolean_control.cljc

36 lines
1.6 KiB
Plaintext
Raw Normal View History

2020-06-01 04:01:59 +00:00
(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}))