|
8 | 8 | useEdgesState
|
9 | 9 | Panel
|
10 | 10 | addEdge]]
|
11 |
| - [uix.core :refer [defui $]] |
| 11 | + [uix.core :refer [defui $ use-state]] |
12 | 12 | [clojure.string :as str]
|
13 | 13 | [parts.frontend.components.nodes :refer [node-types]]
|
14 | 14 | [parts.frontend.components.toolbar :refer [parts-toolbar]]
|
| 15 | + [parts.frontend.components.auth :refer [auth-provider login-modal]] |
15 | 16 | [parts.frontend.utils.node-utils :refer [build-updated-part]]
|
16 | 17 | [parts.frontend.context :as ctx]))
|
17 | 18 |
|
|
51 | 52 | (defn- on-connect-callback [setEdges params]
|
52 | 53 | (setEdges #(addEdge params %)))
|
53 | 54 |
|
| 55 | +(defui auth-status-bar [] |
| 56 | + (let [[show-login-modal set-show-login-modal] (use-state false) |
| 57 | + {:keys [logged-in email logout]} (uix.core/use-context ctx/auth-context)] |
| 58 | + ($ :div |
| 59 | + (when show-login-modal |
| 60 | + ($ login-modal |
| 61 | + {:show true |
| 62 | + :on-close #(set-show-login-modal false)})) |
| 63 | + |
| 64 | + (if logged-in |
| 65 | + ($ :span |
| 66 | + ($ :span {:class "user-email"} (str "🟢 " email)) |
| 67 | + ($ :button {:on-click (fn [] |
| 68 | + (.then (logout) (fn [_] nil)))} |
| 69 | + "Log out")) |
| 70 | + ($ :span |
| 71 | + ($ :span "🔴") |
| 72 | + ($ :button {:on-click #(set-show-login-modal true)} |
| 73 | + "Log in")))))) |
| 74 | + |
54 | 75 | (defui system [{:keys [nodes edges]}]
|
55 | 76 | (let [node-types (uix.core/use-memo (fn [] (clj->js node-types)) [node-types])
|
56 | 77 | [nodes setNodes onNodesChange] (useNodesState (clj->js nodes))
|
|
61 | 82 | on-connect (uix.core/use-callback
|
62 | 83 | #(on-connect-callback setEdges %)
|
63 | 84 | [setEdges])]
|
64 |
| - ($ :div {:style {:width "100vw" :height "100vh"} :class "system-view"} |
65 |
| - ($ (.-Provider ctx/update-node-context) {:value update-node} |
66 |
| - ($ ReactFlow {:nodes nodes |
67 |
| - :edges edges |
68 |
| - :onNodesChange onNodesChange |
69 |
| - :onEdgesChange onEdgesChange |
70 |
| - :onConnect on-connect |
71 |
| - :nodeTypes node-types} |
72 |
| - ($ MiniMap) |
73 |
| - ($ Controls) |
74 |
| - ($ Panel {:position "top-left" :class "logo"} |
75 |
| - ($ :img {:src "/images/parts-logo-horizontal.svg" :width 150})) |
76 |
| - ($ Panel {:position "top-right" :class "toolbar"} |
77 |
| - ($ parts-toolbar |
78 |
| - ($ :span "Add part: ") |
79 |
| - ($ :button |
80 |
| - {:on-click |
81 |
| - (fn [] |
82 |
| - (setNodes (add-node "unknown")))} |
83 |
| - "Unknown") |
84 |
| - ($ :button |
85 |
| - {:on-click |
86 |
| - (fn [] |
87 |
| - (setNodes (add-node "exile")))} |
88 |
| - "Exile") |
89 |
| - ($ :button |
90 |
| - {:on-click |
91 |
| - (fn [] |
92 |
| - (setNodes (add-node "firefighter")))} |
93 |
| - "Firefighter") |
94 |
| - ($ :button |
95 |
| - {:on-click |
96 |
| - (fn [] |
97 |
| - (setNodes (add-node "manager")))} |
98 |
| - "Manager"))) |
99 |
| - ($ Background {:variant "dots" |
100 |
| - :gap 12 |
101 |
| - :size 1})))))) |
| 85 | + |
| 86 | + ($ auth-provider {} |
| 87 | + ($ :div {:style {:width "100vw" :height "100vh"} :class "system-view"} |
| 88 | + ($ (.-Provider ctx/update-node-context) {:value update-node} |
| 89 | + ($ ReactFlow {:nodes nodes |
| 90 | + :edges edges |
| 91 | + :onNodesChange onNodesChange |
| 92 | + :onEdgesChange onEdgesChange |
| 93 | + :onConnect on-connect |
| 94 | + :nodeTypes node-types} |
| 95 | + ($ MiniMap) |
| 96 | + ($ Controls) |
| 97 | + ($ Panel {:position "top-left" :class "logo"} |
| 98 | + ($ :img {:src "/images/parts-logo-horizontal.svg" :width 150})) |
| 99 | + ($ Panel {:position "top-right" :class "toolbar"} |
| 100 | + ($ parts-toolbar |
| 101 | + ($ auth-status-bar) |
| 102 | + ($ :span " Add part: ") |
| 103 | + ($ :button |
| 104 | + {:on-click |
| 105 | + (fn [] |
| 106 | + (setNodes (add-node "unknown")))} |
| 107 | + "Unknown") |
| 108 | + ($ :button |
| 109 | + {:on-click |
| 110 | + (fn [] |
| 111 | + (setNodes (add-node "exile")))} |
| 112 | + "Exile") |
| 113 | + ($ :button |
| 114 | + {:on-click |
| 115 | + (fn [] |
| 116 | + (setNodes (add-node "firefighter")))} |
| 117 | + "Firefighter") |
| 118 | + ($ :button |
| 119 | + {:on-click |
| 120 | + (fn [] |
| 121 | + (setNodes (add-node "manager")))} |
| 122 | + "Manager"))) |
| 123 | + ($ Background {:variant "dots" |
| 124 | + :gap 12 |
| 125 | + :size 1}))))))) |
0 commit comments