-
Notifications
You must be signed in to change notification settings - Fork 21
/
core.cljs
67 lines (56 loc) · 2.69 KB
/
core.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
(ns nubank.workspaces.core
(:require-macros nubank.workspaces.core)
(:require [fulcro.client :as fulcro]
[fulcro.client.primitives :as fp]
[nubank.workspaces.card-types.test :as ct.test]
[nubank.workspaces.ui :as ui]
[nubank.workspaces.data :as data]
[nubank.workspaces.model :as wsm]
[nubank.workspaces.lib.local-storage :as local-storage]))
(defn init-card [card-id card]
(let [card (assoc card ::wsm/card-id card-id)]
(if (and (:mounted? @data/app*) (not (contains? @data/card-definitions* card-id)))
(fp/transact! (:reconciler @data/app*) [`(ui/load-card ~card)]))
(swap! data/card-definitions* assoc card-id card)))
(defn init-workspace [workspace-id {::wsm/keys [workspace-layouts] :as workspace}]
(let [workspace (assoc workspace
::wsm/workspace-static? true
::ui/workspace-title (pr-str workspace-id)
::ui/workspace-id workspace-id
::ui/layouts (local-storage/read-transit workspace-layouts))]
(if (:mounted? @data/app*)
(if (not (contains? @data/workspace-definitions* workspace-id))
(fp/transact! (:reconciler @data/app*) [`(ui/load-workspace ~workspace)])
(fp/transact! (:reconciler @data/app*) [`(ui/update-workspace ~workspace)])))
(swap! data/workspace-definitions* assoc workspace-id
workspace)))
(defn init-test [sym forms card-form]
(init-card sym (assoc (ct.test/test-card sym forms) ::wsm/card-form card-form))
; start ns test card
(let [test-ns (symbol (namespace sym))]
(if-not (contains? @data/card-definitions* test-ns)
(init-card test-ns (ct.test/test-ns-card test-ns))))
; start all tests card
(if-not (contains? @data/card-definitions* `ct.test/test-all)
(init-card `ct.test/test-all (ct.test/all-tests-card))))
(fp/defsc Root [this {:keys [ui/root]}]
{:initial-state (fn [_] {:ui/root (fp/get-initial-state ui/WorkspacesRoot @data/card-definitions*)})
:query [{:ui/root (fp/get-query ui/WorkspacesRoot)}]
:css []
:css-include [ui/WorkspacesRoot]}
(ui/workspaces-root root))
(defn mount
"Mount the workspaces enviroment, by default it will try to mount at #app node.
Use the selector string to pass a querySelector string to pick the mount node."
([] (mount "#app"))
([selector]
(swap! data/app* fulcro/mount Root (js/document.querySelector selector))))
(defn before-load
{:dev/before-load true}
[]
(reset! data/card-definitions-snap* @data/card-definitions*))
(defn after-load
{:dev/after-load true}
[]
(ui/refresh-active-workspace-cards (:reconciler @data/app*))
(reset! data/card-definitions-snap* @data/card-definitions*))