Skip to content

Commit

Permalink
Add preliminary chars carousel widget
Browse files Browse the repository at this point in the history
Refs #69

Mostly just ensures sheets are loaded; styling to come... eventually
  • Loading branch information
dhleong committed Nov 17, 2018
1 parent 7571bf9 commit b3d965b
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/cljs/wish/sheets/dnd5e/campaign.cljs
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
(ns ^{:author "Daniel Leong"
:doc "Campaign-viewer for D&D 5e"}
wish.sheets.dnd5e.campaign)
wish.sheets.dnd5e.campaign
(:require [wish.views.campaign.chars-carousel :refer [chars-carousel]]))

(defn char-card [c]
[:div.character
(:name c)])

(defn view
[section]
[:div
[chars-carousel char-card]
"TODO Campaign"])
19 changes: 19 additions & 0 deletions src/cljs/wish/subs.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
(reg-sub :sheets-filters :sheets-filters)
(reg-sub :sheet-sources :sheet-sources)

; sheets
(reg-meta-sub :meta/sheet :sheet)
(reg-meta-sub :meta/sources :sources)
(reg-meta-sub :meta/kind :kind)
Expand All @@ -110,6 +111,9 @@
(reg-meta-sub :meta/items :items)
(reg-meta-sub :meta/equipped :equipped)

; campaigns
(reg-meta-sub :meta/players :players)

(reg-sub
:active-sheet-source-ids
:<- [:meta/sources]
Expand Down Expand Up @@ -705,3 +709,18 @@
(when (and sheet-id
(not (contains? my-sheets sheet-id)))
(into #{sheet-id} source-ids))))


; ======= Campaign-related ================================

(reg-sub
:campaign-members
:<- [:meta/players]
:<- [:sheets]
(fn [[char-sheet-ids sheets]]
(->> char-sheet-ids
(map (fn [id]
(or (assoc (get sheets id)
:id id)
{:id id})))
(sort-by :name))))
1 change: 1 addition & 0 deletions src/cljs/wish/subs_util.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
(:page db))]
(let [[page args] page-vec]
(case page
:campaign (first args)
:sheet args
:sheet-builder (first args)

Expand Down
45 changes: 45 additions & 0 deletions src/cljs/wish/views/campaign/chars_carousel.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
(ns ^{:author "Daniel Leong"
:doc "campaign.chars-carousel"}
wish.views.campaign.chars-carousel
(:require [wish.util :refer [<sub >evt]]
[wish.views.error-boundary :refer [error-boundary]]))

(defn- sheet-loader [sheet]
[:div "Loading " (:name sheet) "..."])

(defn- sources-loader [sheet]
[:div "Loading " (:name sheet) "..."])

(defn- char-sheet-loader
[sheet-id content-fn]
(let [sheet (<sub [:provided-sheet sheet-id])]
(if (:sources sheet)
(if-let [source (<sub [:sheet-source sheet-id])]
; sheet is ready; render!
[error-boundary
[content-fn sheet]]

(do
(>evt [:load-sheet-source! sheet (:sources sheet)])
[sources-loader sheet]))

; either we don't have the sheet at all, or it's just
; a stub with no actual data; either way, load it!
(do
(>evt [:load-sheet! sheet-id])
[sheet-loader sheet]))))

(defn chars-carousel [chars-card-view]
(if-let [members (seq (<sub [:campaign-members]))]
[:div.carousel-container
[:div.carousel

(for [c members]
^{:key (:id c)}
[:div.card
[char-sheet-loader
(:id c)
chars-card-view]])]]

[:div.empty-carousel
"No characters in this campaign... yet!"]))

0 comments on commit b3d965b

Please sign in to comment.