diff --git a/src/mtgcoll/client/components/inventory.cljs b/src/mtgcoll/client/components/inventory.cljs index 68d8ca7..759cabe 100644 --- a/src/mtgcoll/client/components/inventory.cljs +++ b/src/mtgcoll/client/components/inventory.cljs @@ -6,6 +6,7 @@ [webtools.reagent.bootstrap :as bs] [webtools.cljs.ajax :as ajax] [webtools.cljs.utils :refer [->url]] + [mtgcoll.client.auth :as auth] [mtgcoll.client.page :refer [set-error!]])) (def qualities @@ -23,59 +24,75 @@ :params {:card-id card-id :quality quality :foil foil?} :on-error #(set-error! "Server error while adding card to inventory."))) +(defn can-modify-inventory? + [] + (or (not (auth/auth-required?)) + (auth/authenticated?))) + (defvc inventory-management [card-id] - (let [inventory (view-cursor :owned-card card-id) - inventory (group-by :quality @inventory)] + (let [inventory (view-cursor :owned-card card-id) + inventory (group-by :quality @inventory) + colspan (if (can-modify-inventory?) 2 1) + quantity-class (if (can-modify-inventory?) + "quantity col-sm-1" + "quantity col-sm-4")] [bs/Grid {:fluid true :class "inventory-container"} [bs/Table {:condensed true :hover true :bordered true} [:thead [:tr [:th ""] - [:th {:col-span 2} [:span.text-center "Normal"]] - [:th {:col-span 2} [:span.text-center "Foil"]]]] + [:th.text-center {:col-span colspan} "Normal"] + [:th.text-center {:col-span colspan} "Foil"]]] [:tbody - (map-indexed - (fn [idx quality] - (let [inventory (get inventory quality) - quantities (group-by :foil inventory) - foil-quantity (or (:quantity (first (get quantities true))) 0) - non-foil-quantity (or (:quantity (first (get quantities false))) 0)] - ^{:key idx} - [:tr - {:class (if (or (> foil-quantity 0) - (> non-foil-quantity 0)) - "bg-warning")} - [:td.quality-label.col-sm-4 - [:span.text-right - [bs/FormControl.Static - (str (string/capitalize quality) ": ")]]] - ;; non-foil - [:td.quantity.col-sm-1 - [bs/FormControl.Static - [:strong non-foil-quantity]]] - [:td.col-sm-3 - [bs/ButtonGroup {:justified true} - [bs/ButtonGroup - [bs/Button {:bsStyle "success" :on-click #(on-add-card card-id quality false)} - [bs/Glyphicon {:glyph "plus"}]]] - [bs/ButtonGroup - [bs/Button {:bsStyle "danger" :disabled (= 0 non-foil-quantity) :on-click #(on-remove-card card-id quality false)} - [bs/Glyphicon {:glyph "minus"}]]]]] - ;; foil - [:td.quantity.col-sm-1 - [bs/FormControl.Static - [:strong foil-quantity]]] - [:td.col-sm-3 - [bs/ButtonGroup {:justified true} - [bs/ButtonGroup - [bs/Button {:bsStyle "success" :on-click #(on-add-card card-id quality true)} - [bs/Glyphicon {:glyph "plus"}]]] - [bs/ButtonGroup - [bs/Button {:bsStyle "danger" :disabled (= 0 foil-quantity) :on-click #(on-remove-card card-id quality true)} - [bs/Glyphicon {:glyph "minus"}]]]]]])) - qualities)]]])) + (doall + (map-indexed + (fn [idx quality] + (let [inventory (get inventory quality) + quantities (group-by :foil inventory) + foil-quantity (or (:quantity (first (get quantities true))) 0) + non-foil-quantity (or (:quantity (first (get quantities false))) 0)] + ^{:key idx} + [:tr + {:class (if (or (> foil-quantity 0) + (> non-foil-quantity 0)) + "bg-warning")} + [:td.quality-label.col-sm-4 + [:span.text-right + [bs/FormControl.Static + (str (string/capitalize quality) ": ")]]] + ;; non-foil + [:td {:class quantity-class} + [bs/FormControl.Static + (if (> non-foil-quantity 0) + [:strong non-foil-quantity] + [:span.text-muted 0])]] + (if (can-modify-inventory?) + [:td.col-sm-3 + [bs/ButtonGroup {:justified true} + [bs/ButtonGroup + [bs/Button {:bsStyle "success" :on-click #(on-add-card card-id quality false)} + [bs/Glyphicon {:glyph "plus"}]]] + [bs/ButtonGroup + [bs/Button {:bsStyle "danger" :disabled (= 0 non-foil-quantity) :on-click #(on-remove-card card-id quality false)} + [bs/Glyphicon {:glyph "minus"}]]]]]) + ;; foil + [:td {:class quantity-class} + [bs/FormControl.Static + (if (> foil-quantity 0) + [:strong foil-quantity] + [:span.text-muted 0])]] + (if (can-modify-inventory?) + [:td.col-sm-3 + [bs/ButtonGroup {:justified true} + [bs/ButtonGroup + [bs/Button {:bsStyle "success" :on-click #(on-add-card card-id quality true)} + [bs/Glyphicon {:glyph "plus"}]]] + [bs/ButtonGroup + [bs/Button {:bsStyle "danger" :disabled (= 0 foil-quantity) :on-click #(on-remove-card card-id quality true)} + [bs/Glyphicon {:glyph "minus"}]]]]])])) + qualities))]]])) (defn inventory [card-id & [{:keys [num-owned owned? button-size button-style] :as opts}]]