Skip to content

Commit

Permalink
Move Campaign events/subs to own file; support add/remove members
Browse files Browse the repository at this point in the history
Refs #69
  • Loading branch information
dhleong committed Feb 9, 2019
1 parent 555fb19 commit be2864d
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 71 deletions.
10 changes: 10 additions & 0 deletions less/site.less
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,16 @@ a {

.add-chars-overlay {
padding: 32px;

.character {
.flex();

width: 100%;

.name {
width: 45%;
}
}
}

.carousel-container {
Expand Down
33 changes: 0 additions & 33 deletions src/cljs/wish/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -797,36 +797,3 @@
(when (contains? changed-ids active-sheet-id)
; trigger sheet data reload
{:load-sheet! active-sheet-id})))


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

;; can also be passed nil to leave a campaign
(reg-event-fx
:join-campaign
[trim-v (inject-cofx ::inject/sub [:active-sheet-id])]
(fn [{:keys [active-sheet-id] :as cofx} [campaign-id ?campaign-name]]
(if campaign-id
(let [info {:id campaign-id
:name ?campaign-name}]
(log/info "Joining " campaign-id)

(-> cofx
(update-sheet-path [] assoc :campaign info)

; raise a notifier
(assoc :dispatch [:notify! {:duration :short
:content (str "Joined "
(or (:name info)
"the campaign")
" successfully!")}])))

(do
(log/info "Leaving campaign")

(-> cofx
(update-sheet-path [] dissoc :campaign)

; raise a notifier
(assoc :dispatch [:notify! {:duration :short
:content "Left the campaign successfully."}]))))))
26 changes: 0 additions & 26 deletions src/cljs/wish/subs.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -724,29 +724,3 @@
(when (and sheet-id
(not (contains? my-sheets sheet-id)))
(into #{sheet-id} source-ids))))


; ======= Campaign-related ================================
; TODO can these be broken out to a separate file?

(reg-sub
:campaign-add-char-candidates
:<- [:meta/players]
:<- [:known-sheets]
(fn [[current-members sheets]]
(->> sheets
(remove :mine?)
(remove (comp current-members :id))
)))

(reg-sub
:campaign-members
:<- [:meta/players]
:<- [:sheets]
(fn [[char-sheet-ids sheets] qv]
(->> char-sheet-ids
(map (fn [id]
(or (assoc (get sheets id)
:id id)
{:id id})))
(sort-by :name))))
26 changes: 16 additions & 10 deletions src/cljs/wish/views/campaign/chars_carousel.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
(:require [wish.util :refer [<sub >evt]]
[wish.util.nav :as nav :refer [sheet-url]]
[wish.views.error-boundary :refer [error-boundary]]
[wish.views.widgets :refer [icon link link>evt]]))
[wish.views.widgets :refer [icon link link>evt]]
[wish.views.campaign.events :as events]
[wish.views.campaign.subs :as subs]))

(defn- sheet-loader [sheet]
[:div "Loading " (:name sheet) "..."])
Expand Down Expand Up @@ -39,33 +41,37 @@
"Add characters to " campaign-name]

[:div.candidates
(for [c (<sub [:campaign-members])]
(for [c (<sub [::subs/campaign-members])]
^{:key (:id c)}
[:div.character
(:name c)
[:div.name (:name c)]

[:input.invite-url
{:type :text
:read-only true
:value (nav/campaign-invite-url
campaign-id
(:id c)
campaign-name)}
]
campaign-name)}]

[:div.remove
[link>evt [::events/remove-player (:id c)]
(icon :close)]]
])

(for [c (<sub [:campaign-add-char-candidates])]
(for [c (<sub [::subs/add-char-candidates])]
^{:key (:id c)}
[:div.character
(:name c)
[:div.name (:name c)]

[:div
"INVITE (todo)"]
[:div.add
[link>evt [::events/add-player (:id c)]
"Add to campaign"]]
])]
]))

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

Expand Down
54 changes: 54 additions & 0 deletions src/cljs/wish/views/campaign/events.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
(ns ^{:author "Daniel Leong"
:doc "Campaign-specific events"}
wish.views.campaign.events
(:require-macros [wish.util.log :as log :refer [log]])
(:require [clojure.string :as str]
[re-frame.core :refer [dispatch reg-event-db reg-event-fx
path
inject-cofx trim-v]]
[day8.re-frame.tracing :refer-macros [fn-traced defn-traced]]
[vimsical.re-frame.cofx.inject :as inject]
[wish.sheets.util :refer [update-sheet-path]]))

;; can also be passed nil to leave a campaign
(reg-event-fx
::join-campaign
[trim-v (inject-cofx ::inject/sub [:active-sheet-id])]
(fn [{:keys [active-sheet-id] :as cofx} [campaign-id ?campaign-name]]
(if campaign-id
(let [info {:id campaign-id
:name ?campaign-name}]
(log/info "Joining " campaign-id)

(-> cofx
(update-sheet-path [] assoc :campaign info)

; raise a notifier
(assoc :dispatch [:notify! {:duration :short
:content (str "Joined "
(or (:name info)
"the campaign")
" successfully!")}])))

(do
(log/info "Leaving campaign")

(-> cofx
(update-sheet-path [] dissoc :campaign)

; raise a notifier
(assoc :dispatch [:notify! {:duration :short
:content "Left the campaign successfully."}]))))))

(reg-event-fx
::add-player
[trim-v]
(fn-traced [cofx [character-id]]
(update-sheet-path cofx [:players] conj character-id)))

(reg-event-fx
::remove-player
[trim-v]
(fn-traced [cofx [character-id]]
(update-sheet-path cofx [:players] disj character-id)))

5 changes: 3 additions & 2 deletions src/cljs/wish/views/campaign/join.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
:doc "Join a campaign as a player"}
wish.views.campaign.join
(:require [wish.util :refer [<sub >evt click>evts]]
[wish.util.nav :refer [sheet-url]]))
[wish.util.nav :refer [sheet-url]]
[wish.views.campaign.events :as events]))

(defn page [[campaign-id sheet-id ?campaign-name]]
[:div
Expand All @@ -20,7 +21,7 @@
[:h4 "Would you like to join?"]

[:div.button {:on-click (click>evts
[:join-campaign campaign-id ?campaign-name]
[::events/join-campaign campaign-id ?campaign-name]
[:nav/replace! (sheet-url sheet-id)])}
"Yes! Join " (or ?campaign-name
"the campaign")]
Expand Down
26 changes: 26 additions & 0 deletions src/cljs/wish/views/campaign/subs.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
(ns ^{:author "Daniel Leong"
:doc "Campaign-specific subs"}
wish.views.campaign.subs
(:require [clojure.string :as str]
[re-frame.core :refer [reg-sub subscribe]]))

(reg-sub
::add-char-candidates
:<- [:meta/players]
:<- [:known-sheets]
(fn [[current-members sheets]]
(->> sheets
(remove (comp current-members :id))
)))

(reg-sub
::campaign-members
:<- [:meta/players]
:<- [:sheets]
(fn [[char-sheet-ids sheets] qv]
(->> char-sheet-ids
(map (fn [id]
(or (assoc (get sheets id)
:id id)
{:id id})))
(sort-by :name))))

0 comments on commit be2864d

Please sign in to comment.