Skip to content

Commit 3af43a5

Browse files
Create and fetch categories
1 parent a8e83ec commit 3af43a5

7 files changed

Lines changed: 90 additions & 29 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
(ns villagebookUI.components.category-table)
2+
3+
(defn category-table
4+
[category]
5+
[:h5 (:name category)])
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
(ns villagebookUI.components.content-box
2+
(:require [reagent.core :as r]
3+
[villagebookUI.components.create-category :refer [create-category-form]]
4+
[villagebookUI.components.category-table :refer [category-table]]
5+
[villagebookUI.fetchers :as fetchers]
6+
[villagebookUI.store.categories :as category-store]))
7+
8+
(defn- category-active?
9+
[category categories]
10+
(or (= (category-store/get-selected) category)
11+
(empty? categories)))
12+
13+
(defn category-tab
14+
[categories category name]
15+
[:a.category-tab {:href "#"
16+
:key (:id category)
17+
:on-click #(category-store/set-selected! category)
18+
:class [(if (category-active? category categories)
19+
:active)]}
20+
name])
21+
22+
(defn content-box
23+
[org categories on-mount-cb]
24+
(on-mount-cb)
25+
(fn [org categories]
26+
[:div.content-box
27+
[:div.category-tabs
28+
(doall
29+
(for [category categories]
30+
[category-tab categories category (:name category)]))
31+
[category-tab categories :new "+ Add new"]]
32+
[:div.simple-card
33+
(if (category-active? :new categories)
34+
[create-category-form]
35+
[category-table (category-store/get-selected)])]]))

src/cljs/villagebookUI/components/create_category.cljs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,41 @@
22
(:require [reagent.core :as r]
33
[villagebookUI.helpers :as helpers]
44
[villagebookUI.components.utils :as utils]
5+
[villagebookUI.fetchers :as fetchers]
56
[villagebookUI.api.category :as api]
67
[villagebookUI.store.organisations :as org-store]))
78

89
(defn submit-create-category
910
[name fields]
10-
(api/create {:name name
11-
:fields (map #(second %) fields)}
12-
(:id (org-store/get-selected))
13-
#(helpers/show-alert-bottom! :success (str "Category " name " created"))
14-
#(helpers/show-alert-bottom! :error (:response %))))
11+
(let [org-id (:id (org-store/get-selected))]
12+
(api/create {:name name
13+
:fields (map #(second %) fields)}
14+
org-id
15+
#(do
16+
(fetchers/fetch-categories! org-id last)
17+
(helpers/show-alert-bottom! :success (str "Category " name " created")))
18+
#(helpers/show-alert-bottom! :error (:response %)))))
1519

1620
(defn new-field-key
1721
[fields]
1822
(-> fields last first inc))
1923

2024
(def new-field
21-
{:name "Name"})
25+
{:name "New column"})
2226

2327
(defn create-category-form []
2428
(let [name (r/atom "")
25-
fields (r/atom (array-map
26-
1 {:name "Name"}
27-
2 {:name "Cost"}))]
29+
fields (r/atom (array-map 1 new-field))]
2830
(fn []
2931
[:div
30-
[utils/input {:type "text"
31-
:class [:create-category-name]
32-
:placeholder "Category name"
33-
:on-change #(reset! name %)}]
3432
[:form.form-group
3533
{:on-submit #(do
3634
(.preventDefault %)
3735
(submit-create-category @name @fields))}
36+
[utils/input {:type "text"
37+
:class [:create-category-name]
38+
:placeholder "Category name"
39+
:on-change #(reset! name %)}]
3840
[:div.input-group.mb-3
3941
[:div.input-group-prepend
4042
[:span.input-group-text "Properties"]]
@@ -48,7 +50,7 @@
4850
:value (:name field)
4951
:on-change #(swap! fields assoc k {:name %})}]))
5052
[:div.input-group-append
51-
[:button.btn.btn-outline-secondary
53+
[:a.btn.btn-outline-secondary
5254
{:on-click #(swap! fields assoc (new-field-key @fields) new-field)}
5355
"+"]]]
5456
[:button {:type "submit" :class [:btn :btn-outline-primary]} "Create"]]])))

src/cljs/villagebookUI/components/main_content.cljs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
[villagebookUI.api.organisation :as org-api]
44
[villagebookUI.fetchers :as fetchers]
55
[villagebookUI.components.utils :as utils]
6-
[villagebookUI.components.create-category :refer [create-category-form]]
76
[villagebookUI.store.ui :as ui-store]
7+
[villagebookUI.store.categories :as category-store]
8+
[villagebookUI.components.content-box :refer [content-box]]
89
[villagebookUI.helpers :as helpers]))
910

10-
(declare navbar content-box delete-org-btn delete-org)
11+
(declare navbar delete-org-btn delete-org)
1112

1213
(defn main-content []
1314
(let [org (org-store/get-selected)]
1415
[:div.main-content
1516
[navbar org]
1617
(if org
17-
[content-box]
18+
[content-box org
19+
(category-store/get-by-org (:id org))
20+
#(fetchers/fetch-categories! (:id org) first)]
1821
[:h5 "Oops, page not found"])
1922
[utils/alert-bottom (ui-store/get-el-state :alert-bottom)]]))
2023

@@ -24,15 +27,6 @@
2427
[:h5 (:name org)]
2528
[delete-org-btn org]])
2629

27-
(defn content-box []
28-
[:div.content-box
29-
[:div.category-tabs
30-
[:a.category-tab {:href "#"} "Category 1"]
31-
[:a.category-tab {:href "#"} "Category 2"]
32-
[:a.category-tab.active {:href "#"} "+ Add new"]]
33-
[:div.simple-card
34-
[create-category-form]]])
35-
3630
(defn delete-org-btn
3731
[org]
3832
(if (= (:permission org) "owner")

src/cljs/villagebookUI/components/sidebar.cljs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
(:require [reagent.core :as r]
33
[villagebookUI.components.utils :as utils]
44
[villagebookUI.components.create-org :refer [org-creation-form]]
5-
[villagebookUI.store.organisations :as org-store]))
5+
[villagebookUI.store.organisations :as org-store]
6+
[villagebookUI.fetchers :as fetchers]))
67

78
(defn sidebar []
89
(let [creating-org (r/atom false)]
@@ -21,7 +22,8 @@
2122
[:li.item {:key id
2223
:class (if (= id (:id (org-store/get-selected)))
2324
[:active])}
24-
[:a.sidebar-link {:href (str "/orgs/" id)}
25+
[:a.sidebar-link {:href (str "/orgs/" id)
26+
:on-click #(fetchers/fetch-categories! (:id org) first)}
2527
[utils/patch (:color org)]
2628
(:name org)]]))
2729
[:li.item

src/cljs/villagebookUI/fetchers.cljs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
[villagebookUI.store.user :as user-store]
44
[villagebookUI.api.user :as user-api]
55
[villagebookUI.store.organisations :as org-store]
6-
[villagebookUI.api.organisation :as org-api]))
6+
[villagebookUI.api.organisation :as org-api]
7+
[villagebookUI.store.categories :as category-store]
8+
[villagebookUI.api.category :as category-api]))
79

810

911
(defn fetch-user! []
@@ -26,3 +28,15 @@
2628
:id
2729
(str "/orgs/")))))
2830
identity))
31+
32+
(defn fetch-categories!
33+
[org-id & [selector-fn]]
34+
(category-api/get-all
35+
org-id
36+
(fn [res]
37+
(category-store/add-all! org-id res)
38+
(when selector-fn
39+
(->> (category-store/get-by-org org-id)
40+
selector-fn
41+
category-store/set-selected!)))
42+
#(category-store/add-all! org-id nil)))

src/cljs/villagebookUI/store/categories.cljs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
(def categories
77
(r/cursor state [:categories]))
88

9+
(def selected-category
10+
(r/cursor state [:selected-category]))
11+
912
(defn add-all! [org-id category-list]
1013
(swap! categories assoc org-id (map #(keywordize-keys %) category-list)))
1114

@@ -15,5 +18,11 @@
1518
(defn get-by-org [org-id]
1619
(get @categories org-id))
1720

21+
(defn set-selected! [category]
22+
(reset! selected-category (keywordize-keys category)))
23+
24+
(defn get-selected []
25+
@selected-category)
26+
1827
(defn init! []
1928
(reset! categories {}))

0 commit comments

Comments
 (0)