Skip to content

Commit bf0be73

Browse files
committed
Add gift list navigation.
1 parent bcb7639 commit bf0be73

File tree

10 files changed

+1733
-82
lines changed

10 files changed

+1733
-82
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
resources/public/js
2+
resources/public/css
23
node_modules
34
.cpcache
45
.shadow-cljs

Diff for: package-lock.json

+1,655-36
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+9-3
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
"description": "",
55
"private": true,
66
"devDependencies": {
7-
"@auth0/auth0-spa-js": "^1.6.5",
7+
"@auth0/auth0-spa-js": "^1.8.1",
8+
"node-sass": "^4.14.1",
89
"react": "^16.13.1",
910
"react-dom": "^16.13.1",
1011
"semantic-ui-react": "^0.88.2",
11-
"shadow-cljs": "^2.8.94"
12+
"shadow-cljs": "^2.9.8"
13+
},
14+
"scripts": {
15+
"css-build": "node-sass --omit-source-map-url sass/style.scss resources/public/css/style.css",
16+
"css-watch": "node-sass --omit-source-map-url sass/style.scss resources/public/css/style.css --watch"
1217
},
1318
"author": "Chris O'Donnell",
14-
"license": "MIT"
19+
"license": "MIT",
20+
"dependencies": {}
1521
}

Diff for: resources/public/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
66
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css" />
7+
<link rel="stylesheet" href="/css/style.css" />
78
</head>
89
<body>
910
<div id="app"></div>

Diff for: sass/style.scss

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.mgl_flex-container {
2+
display: flex;
3+
align-items: flex-start;
4+
}

Diff for: src/rocks/mygiftlist/client.cljs

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
[rocks.mygiftlist.routing :as routing]
66
[rocks.mygiftlist.model.user :as m.user]
77
[rocks.mygiftlist.type.user :as user]
8+
[rocks.mygiftlist.ui.navigation :as ui.nav]
89
[rocks.mygiftlist.ui.root :as ui.root]
910
[com.fulcrologic.fulcro.algorithms.normalized-state :refer [swap!->]]
1011
[com.fulcrologic.fulcro.algorithms.tempid :as tempid]
1112
[com.fulcrologic.fulcro.application :as app]
1213
[com.fulcrologic.fulcro.components :as comp]
14+
[com.fulcrologic.fulcro.data-fetch :as df]
1315
[com.fulcrologic.fulcro.routing.dynamic-routing :as dr]
1416
[com.fulcrologic.fulcro.mutations :refer [defmutation]]
1517
[clojure.core.async :as async :refer [go <!]]
@@ -45,9 +47,7 @@
4547
{:authenticated authenticated})])
4648
(routing/start!)
4749
(if authenticated
48-
(do (comp/transact! SPA
49-
[(routing/route-to
50-
{:path (routing/url->path js/window.location.pathname)})])
50+
(do (df/load! SPA [:component/id :left-nav] ui.nav/LeftNav)
5151
(let [{:keys [sub email]} (<! (auth/get-user-info))]
5252
(comp/transact! SPA [(m.user/set-current-user
5353
#::user{:id (tempid/tempid)

Diff for: src/rocks/mygiftlist/model/gift_list.cljs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
(action [{:keys [state]}]
99
(swap!-> state
1010
(assoc-in [::gift-list/id id] gift-list)
11-
(update-in [:component/id :created-gift-lists :created-gift-lists]
11+
(update-in [:component/id :left-nav :created-gift-lists]
1212
conj gift-list)))
1313
(remote [_] true))

Diff for: src/rocks/mygiftlist/ui/gift_list.cljs

+11-16
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
[com.fulcrologic.semantic-ui.collections.form.ui-form-input :refer [ui-form-input]]
1212

1313
[rocks.mygiftlist.type.gift-list :as gift-list]
14-
[rocks.mygiftlist.model.gift-list :as m.gift-list]))
14+
[rocks.mygiftlist.model.gift-list :as m.gift-list]
15+
[com.fulcrologic.fulcro.routing.dynamic-routing :as dr]))
1516

1617
(declare GiftListForm)
1718

@@ -71,19 +72,13 @@
7172

7273
(def ui-gift-list-form-panel (comp/factory GiftListFormPanel))
7374

74-
(defsc CreatedGiftList [_this {::gift-list/keys [name]}]
75-
{:ident ::gift-list/id
76-
:query [::gift-list/id ::gift-list/name]}
77-
(dom/li {} name))
78-
79-
(def ui-created-gift-list
80-
(comp/factory CreatedGiftList {:keyfn ::gift-list/id}))
81-
82-
(defsc CreatedGiftLists [_this {:keys [created-gift-lists]}]
83-
{:ident (fn [] [:component/id :created-gift-lists])
84-
:query [{:created-gift-lists (comp/get-query CreatedGiftList)}]
85-
:initial-state {:created-gift-lists []}}
86-
(dom/ul {}
87-
(mapv ui-created-gift-list created-gift-lists)))
75+
(defsc GiftList [_this {::gift-list/keys [name]}]
76+
{:query [::gift-list/id ::gift-list/name]
77+
:ident ::gift-list/id
78+
:route-segment ["gift-list" ::gift-list/id]
79+
:will-enter (fn [_ {::gift-list/keys [id]}]
80+
(dr/route-immediate [::gift-list/id (uuid id)]))}
81+
(dom/div
82+
(dom/h3 name)))
8883

89-
(def ui-created-gift-lists (comp/factory CreatedGiftLists))
84+
(def ui-gift-list (comp/factory GiftList))

Diff for: src/rocks/mygiftlist/ui/navigation.cljs

+22-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
(:require
33
[rocks.mygiftlist.authentication :as auth]
44
[rocks.mygiftlist.routing :as routing]
5+
[rocks.mygiftlist.type.gift-list :as gift-list]
56
[com.fulcrologic.fulcro.components :as comp :refer [defsc]]
6-
[com.fulcrologic.fulcro.dom :as dom]
7-
))
7+
[com.fulcrologic.fulcro.dom :as dom]))
88

99
(defsc LoginLogoutItem [_this {:ui/keys [authenticated]}]
1010
{:query [:ui/authenticated]
@@ -37,3 +37,23 @@
3737
(ui-login-logout-item login-logout)))))
3838

3939
(def ui-navbar (comp/factory Navbar))
40+
41+
(defsc CreatedGiftListItem [this {::gift-list/keys [id name]}]
42+
{:query [::gift-list/id ::gift-list/name]
43+
:ident ::gift-list/id}
44+
(dom/a :.item {:onClick #(comp/transact! this [(routing/route-to
45+
{:path ["gift-list" id]})])}
46+
(dom/div {} name)))
47+
48+
(def ui-created-gift-list-item (comp/factory CreatedGiftListItem {:keyfn ::gift-list/id}))
49+
50+
(defsc LeftNav [_this {:keys [created-gift-lists]}]
51+
{:query [{:created-gift-lists (comp/get-query CreatedGiftListItem)}]
52+
:ident (fn [] [:component/id :left-nav])
53+
:initial-state {:created-gift-lists []}}
54+
(dom/div :.ui.vertical.menu
55+
(dom/div :.item
56+
(dom/div :.header "Created Gift Lists")
57+
(mapv ui-created-gift-list-item created-gift-lists))))
58+
59+
(def ui-left-nav (comp/factory LeftNav))

Diff for: src/rocks/mygiftlist/ui/root.cljs

+26-21
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
[rocks.mygiftlist.ui.navigation :as ui.nav]
55
[rocks.mygiftlist.ui.gift-list :as ui.gift-list]
66
[com.fulcrologic.fulcro.components :as comp :refer [defsc]]
7-
[com.fulcrologic.fulcro.data-fetch :as df]
87
[com.fulcrologic.fulcro.dom :as dom]
9-
[com.fulcrologic.fulcro.routing.dynamic-routing :as dr :refer [defrouter]]))
8+
[com.fulcrologic.fulcro.routing.dynamic-routing :as dr :refer [defrouter]]
9+
[rocks.mygiftlist.type.user :as user]))
1010

1111
(defsc LoginForm [_this _]
1212
{:query []
@@ -19,22 +19,17 @@
1919
{:onClick #(auth/login)}
2020
"Log in or sign up"))))
2121

22-
(defsc Home [_this {:ui/keys [gift-list-form-panel created-gift-lists]}]
23-
{:query [{:ui/gift-list-form-panel (comp/get-query ui.gift-list/GiftListFormPanel)}
24-
{:ui/created-gift-lists (comp/get-query ui.gift-list/CreatedGiftLists)}]
22+
(defsc Home [_this {:ui/keys [gift-list-form-panel]}]
23+
{:query [{:ui/gift-list-form-panel (comp/get-query ui.gift-list/GiftListFormPanel)}]
2524
:ident (fn [] [:component/id :home])
26-
:initial-state {:ui/gift-list-form-panel {}
27-
:ui/created-gift-lists {}}
25+
:initial-state {:ui/gift-list-form-panel {}}
2826
:route-segment ["home"]
29-
:will-enter (fn [app _]
30-
(df/load! app [:component/id :created-gift-lists]
31-
ui.gift-list/CreatedGiftLists)
27+
:will-enter (fn [_ _]
3228
(dr/route-immediate [:component/id :home]))}
3329
(dom/div {}
3430
(dom/h3 {} "Home Screen")
3531
(dom/div {} "Just getting started? Create a new gift list!")
36-
(ui.gift-list/ui-gift-list-form-panel gift-list-form-panel)
37-
(ui.gift-list/ui-created-gift-lists created-gift-lists)))
32+
(ui.gift-list/ui-gift-list-form-panel gift-list-form-panel)))
3833

3934
(defsc About [_this _]
4035
{:query []
@@ -57,21 +52,31 @@
5752
(loading-spinner))
5853

5954
(defrouter MainRouter [_ _]
60-
{:router-targets [Loading LoginForm Home About]}
55+
{:router-targets [Loading LoginForm Home About ui.gift-list/GiftList]}
6156
(loading-spinner))
6257

6358
(def ui-main-router (comp/factory MainRouter))
6459

65-
(defsc Root [_this {:root/keys [router navbar loading]}]
60+
(defsc Root [_this {:root/keys [router navbar left-nav loading] :as props}]
6661
{:query [{:root/router (comp/get-query MainRouter)}
6762
{:root/navbar (comp/get-query ui.nav/Navbar)}
68-
:root/loading]
63+
{:root/left-nav (comp/get-query ui.nav/LeftNav)}
64+
:root/loading
65+
{[:component/id :login-logout]
66+
[:ui/authenticated]}]
6967
:initial-state {:root/router {}
7068
:root/navbar {}
69+
:root/left-nav {}
7170
:root/loading true}}
72-
(if loading
73-
(loading-spinner)
74-
(dom/div {}
75-
(ui.nav/ui-navbar navbar)
76-
(dom/div :.ui.container
77-
(ui-main-router router)))))
71+
(let [authenticated (-> props
72+
(get [:component/id :login-logout])
73+
:ui/authenticated)]
74+
(if loading
75+
(loading-spinner)
76+
(dom/div {}
77+
(ui.nav/ui-navbar navbar)
78+
(dom/div :.mgl_flex-container
79+
(when authenticated
80+
(ui.nav/ui-left-nav left-nav))
81+
(dom/div :.ui.container
82+
(ui-main-router router)))))))

0 commit comments

Comments
 (0)