Skip to content

Commit e65826f

Browse files
committed
feat(frontend): modal auth UI WIP
1 parent 437b3b0 commit e65826f

File tree

3 files changed

+77
-39
lines changed

3 files changed

+77
-39
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
(ns parts.frontend.components.modal
2+
(:require
3+
[uix.core :refer [defui $]]))
4+
5+
(defui modal [{:keys [show title on-close children]}]
6+
(when show
7+
($ :div {:class "modal-overlay"}
8+
($ :div {:class "modal-container"}
9+
($ :div {:class "modal-header"}
10+
($ :h3 title)
11+
($ :button {:class "modal-close" :on-click on-close} "×"))
12+
($ :div {:class "modal-content"}
13+
children)))))

src/main/parts/frontend/components/system.cljs

+63-39
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
useEdgesState
99
Panel
1010
addEdge]]
11-
[uix.core :refer [defui $]]
11+
[uix.core :refer [defui $ use-state]]
1212
[clojure.string :as str]
1313
[parts.frontend.components.nodes :refer [node-types]]
1414
[parts.frontend.components.toolbar :refer [parts-toolbar]]
15+
[parts.frontend.components.auth :refer [auth-provider login-modal]]
1516
[parts.frontend.utils.node-utils :refer [build-updated-part]]
1617
[parts.frontend.context :as ctx]))
1718

@@ -51,6 +52,26 @@
5152
(defn- on-connect-callback [setEdges params]
5253
(setEdges #(addEdge params %)))
5354

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+
5475
(defui system [{:keys [nodes edges]}]
5576
(let [node-types (uix.core/use-memo (fn [] (clj->js node-types)) [node-types])
5677
[nodes setNodes onNodesChange] (useNodesState (clj->js nodes))
@@ -61,41 +82,44 @@
6182
on-connect (uix.core/use-callback
6283
#(on-connect-callback setEdges %)
6384
[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})))))))

src/main/parts/server.clj

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
{:post {:handler api.account/register-account}}]]
5959

6060
;; Systems routes
61+
;; TODO: Put these behind jwt-auth middleware once the UI is ready
6162
["/systems" {:swagger {:tags ["Systems"]}
6263
:middleware [middleware/jwt-auth]}
6364
["" {:get {:summary "List all systems for current user"

0 commit comments

Comments
 (0)