|
14 | 14 | (defn- check
|
15 | 15 | [app owner]
|
16 | 16 | (reify
|
| 17 | + om/IDidMount |
| 18 | + (did-mount [this] |
| 19 | + (set! (.-indeterminate (om/get-node owner)) (om/get-state owner :intermediate))) |
| 20 | + |
| 21 | + om/IDidUpdate |
| 22 | + (did-update [this prev-props prev-state] |
| 23 | + (set! (.-indeterminate (om/get-node owner)) (om/get-state owner :intermediate))) |
| 24 | + |
17 | 25 | om/IRenderState
|
18 |
| - (render-state [this {:keys [label id class-name title path disabled on-change checked-value unchecked-value toggle-value]}] |
| 26 | + (render-state [this {:keys [id path disabled on-change checked-value unchecked-value toggle-value]}] |
| 27 | + (html |
| 28 | + [:input {:type "checkbox" |
| 29 | + :id (name id) |
| 30 | + :disabled disabled |
| 31 | + :checked (checked? (utils/om-get app path) checked-value) |
| 32 | + :onChange (fn [e] |
| 33 | + (let [value (if (.. e -target -checked) checked-value unchecked-value) |
| 34 | + dest (get @(om/get-props owner) path)] |
| 35 | + |
| 36 | + (if toggle-value |
| 37 | + (if (contains? dest checked-value) |
| 38 | + (utils/om-update! (om/get-props owner) path (disj dest checked-value)) |
| 39 | + (utils/om-update! (om/get-props owner) path (conj dest checked-value))) |
| 40 | + (utils/om-update! (om/get-props owner) path value)) |
| 41 | + |
| 42 | + ;; TODO this is done to force a refresh |
| 43 | + (when (utils/atom? (om/get-props owner)) |
| 44 | + (om/set-state! owner ::force-refresh (not (om/get-state owner ::force-refresh)))) |
| 45 | + |
| 46 | + (when on-change (on-change value))))}])))) |
| 47 | + |
| 48 | + |
| 49 | +(defn- check-box |
| 50 | + [app owner] |
| 51 | + (reify |
| 52 | + om/IRenderState |
| 53 | + (render-state [this {:keys [label id class-name title path disabled on-change checked-value unchecked-value toggle-value intermediate]}] |
19 | 54 | (html
|
20 | 55 | [:div (-> {:class [class-name
|
21 | 56 | (when (checked? (utils/om-get app path) checked-value) "active")]}
|
22 | 57 | (merge (when title) {:title title}))
|
23 | 58 | [:label {:class ["om-widgets-label"
|
24 | 59 | (when disabled "text-muted")]
|
25 | 60 | :htmlFor (name id)}
|
26 |
| - [:input {:type "checkbox" |
27 |
| - :id (name id) |
28 |
| - :disabled disabled |
29 |
| - :checked (checked? (utils/om-get app path) checked-value) |
30 |
| - :onChange (fn [e] |
31 |
| - (let [value (if (.. e -target -checked) checked-value unchecked-value) |
32 |
| - dest (get @(om/get-props owner) path)] |
33 |
| - |
34 |
| - (if toggle-value |
35 |
| - (if (contains? dest checked-value) |
36 |
| - (utils/om-update! (om/get-props owner) path (disj dest checked-value)) |
37 |
| - (utils/om-update! (om/get-props owner) path (conj dest checked-value))) |
38 |
| - (utils/om-update! (om/get-props owner) path value)) |
39 |
| - |
40 |
| - ;; TODO this is done to force a refresh |
41 |
| - (when (utils/atom? (om/get-props owner)) |
42 |
| - (om/set-state! owner ::force-refresh (not (om/get-state owner ::force-refresh)))) |
| 61 | + (om/build check app {:state {:id id |
| 62 | + :path path |
| 63 | + :disabled disabled |
| 64 | + :on-change on-change |
| 65 | + :checked-value checked-value |
| 66 | + :intermediate intermediate |
| 67 | + :unchecked-value unchecked-value |
| 68 | + :toggle-value toggle-value}}) |
43 | 69 |
|
44 |
| - (when on-change (on-change value))))}] |
45 | 70 | label]]))))
|
46 | 71 |
|
47 | 72 | ;; ---------------------------------------------------------------------
|
|
64 | 89 | ;; ---------------------------------------------------------------------
|
65 | 90 | ;; Public
|
66 | 91 | (defn checkbox
|
67 |
| - [app path {:keys [label id title disabled class-name on-change onChange checked-value unchecked-value toggle-value] :as opts |
| 92 | + [app path {:keys [label id title disabled class-name on-change onChange checked-value unchecked-value toggle-value intermediate] :as opts |
68 | 93 | :or {class-name "checkbox"
|
69 | 94 | checked-value true
|
70 | 95 | unchecked-value false
|
71 | 96 | toggle-value false}}]
|
72 |
| - (om/build check app {:state {:label label |
73 |
| - :title title |
74 |
| - :id (or id path) |
75 |
| - :class-name class-name |
76 |
| - :checked-value checked-value |
77 |
| - :unchecked-value unchecked-value |
78 |
| - :toggle-value toggle-value |
79 |
| - :disabled disabled |
80 |
| - :on-change (or on-change onChange) |
81 |
| - :path path}})) |
| 97 | + (om/build check-box app {:state {:label label |
| 98 | + :title title |
| 99 | + :id (or id path) |
| 100 | + :class-name class-name |
| 101 | + :checked-value checked-value |
| 102 | + :unchecked-value unchecked-value |
| 103 | + :toggle-value toggle-value |
| 104 | + :intermediate intermediate |
| 105 | + :disabled disabled |
| 106 | + :on-change (or on-change onChange) |
| 107 | + :path path}})) |
0 commit comments