diff --git a/less/site.less b/less/site.less index 421c4a39..3ba5f37b 100644 --- a/less/site.less +++ b/less/site.less @@ -326,6 +326,16 @@ a { .add-chars-overlay { padding: 32px; + + .character { + .flex(); + + width: 100%; + + .name { + width: 45%; + } + } } .carousel-container { diff --git a/src/cljs/wish/events.cljs b/src/cljs/wish/events.cljs index 9516f41f..7ad87c5d 100644 --- a/src/cljs/wish/events.cljs +++ b/src/cljs/wish/events.cljs @@ -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."}])))))) diff --git a/src/cljs/wish/subs.cljs b/src/cljs/wish/subs.cljs index e10a849e..aeade2a2 100644 --- a/src/cljs/wish/subs.cljs +++ b/src/cljs/wish/subs.cljs @@ -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)))) diff --git a/src/cljs/wish/views/campaign/chars_carousel.cljs b/src/cljs/wish/views/campaign/chars_carousel.cljs index b80abf77..3b6eda79 100644 --- a/src/cljs/wish/views/campaign/chars_carousel.cljs +++ b/src/cljs/wish/views/campaign/chars_carousel.cljs @@ -4,7 +4,9 @@ (:require [wish.util :refer [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) "..."]) @@ -39,10 +41,10 @@ "Add characters to " campaign-name] [:div.candidates - (for [c (evt [::events/remove-player (:id c)] + (icon :close)]] ]) - (for [c (evt [::events/add-player (:id c)] + "Add to campaign"]] ])] ])) (defn chars-carousel [chars-card-view] - (if-let [members (seq ( 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))) + diff --git a/src/cljs/wish/views/campaign/join.cljs b/src/cljs/wish/views/campaign/join.cljs index 12d2d3d5..7aae5cb0 100644 --- a/src/cljs/wish/views/campaign/join.cljs +++ b/src/cljs/wish/views/campaign/join.cljs @@ -2,7 +2,8 @@ :doc "Join a campaign as a player"} wish.views.campaign.join (:require [wish.util :refer [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 @@ -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")] diff --git a/src/cljs/wish/views/campaign/subs.cljs b/src/cljs/wish/views/campaign/subs.cljs new file mode 100644 index 00000000..3c8d77da --- /dev/null +++ b/src/cljs/wish/views/campaign/subs.cljs @@ -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))))