|
1 | 1 | (ns re-com.theme |
2 | | - (:refer-clojure :exclude [apply]) |
| 2 | + (:refer-clojure :exclude [apply merge]) |
3 | 3 | (:require |
4 | 4 | [reagent.core :as r] |
5 | 5 | [re-com.theme.util :as tu] |
|
28 | 28 | (let [result (theme props ctx)] |
29 | 29 | (if (vector? result) result [result ctx]))) |
30 | 30 |
|
| 31 | +(defn merge [a {:keys [base main user main-variables user-variables base-variables] :as b}] |
| 32 | + (cond-> a |
| 33 | + base-variables (assoc :base-variables base-variables) |
| 34 | + main-variables (assoc :main-variables main-variables) |
| 35 | + user-variables (update :user-variables conj user-variables) |
| 36 | + base (assoc :base base) |
| 37 | + main (assoc :main main) |
| 38 | + user (update :user conj user))) |
| 39 | + |
31 | 40 | (defn apply |
32 | 41 | ([props ctx themes] |
33 | 42 | (->> |
34 | 43 | (if-not (map? themes) |
35 | 44 | (update @registry :user conj themes) |
36 | | - (let [{:keys [base main user main-variables user-variables base-variables]} themes] |
37 | | - (cond-> @registry |
38 | | - base-variables (assoc :base-variables base-variables) |
39 | | - main-variables (assoc :main-variables main-variables) |
40 | | - user-variables (update :user-variables conj user-variables) |
41 | | - base (assoc :base base) |
42 | | - main (assoc :main main) |
43 | | - user (update :user conj user)))) |
| 45 | + (merge @registry themes)) |
44 | 46 | named->vec |
45 | 47 | flatten |
46 | 48 | (remove nil?) |
|
49 | 51 |
|
50 | 52 | (defn props [ctx themes] |
51 | 53 | (apply {} ctx themes)) |
| 54 | + |
| 55 | +(defn remove-keys [m ks] |
| 56 | + (select-keys m (remove (set ks) (keys m)))) |
| 57 | + |
| 58 | +(defn <-props [outer-props |
| 59 | + & {:keys [part exclude include] |
| 60 | + :or {include [:style :attr :class |
| 61 | + :width :min-width :max-width |
| 62 | + :height :min-height :max-height] |
| 63 | + exclude []}}] |
| 64 | + (fn [props ctx _] |
| 65 | + (let [outer-style-keys [:width :min-width :max-width |
| 66 | + :height :max-height :min-width :min-height] |
| 67 | + outer-attr-keys [:tab-index] |
| 68 | + outer-props (cond-> outer-props |
| 69 | + (seq include) (select-keys include) |
| 70 | + (seq exclude) (remove-keys exclude))] |
| 71 | + (cond-> props |
| 72 | + (= part (:part ctx)) |
| 73 | + (-> (merge-props (remove-keys outer-props (concat outer-style-keys outer-attr-keys))) |
| 74 | + (update :style clojure.core/merge |
| 75 | + (select-keys outer-props outer-style-keys)) |
| 76 | + (update :attr clojure.core/merge |
| 77 | + (select-keys outer-props outer-attr-keys))))))) |
0 commit comments