diff --git a/src/clj/chicken_master/css.clj b/src/clj/chicken_master/css.clj index da39a71..17badd5 100644 --- a/src/clj/chicken_master/css.clj +++ b/src/clj/chicken_master/css.clj @@ -124,6 +124,7 @@ ] [:.customers-modal + [:details {:padding "0.5em"}] [:details.customer-order {:margin-left "1em" :padding "0.5em"} [:.order-date-picker {:display :inline-block :width "75%" :cursor :pointer}] [:.product-item-edit {:margin-left "1em"}]]] diff --git a/src/cljs/chicken_master/customers.cljs b/src/cljs/chicken_master/customers.cljs index faf927f..83f74fe 100644 --- a/src/cljs/chicken_master/customers.cljs +++ b/src/cljs/chicken_master/customers.cljs @@ -8,27 +8,12 @@ [chicken-master.html :as html] [chicken-master.events :as event])) -(defn item-adder [& {:keys [type value callback button class] - :or {type :text value "" button nil}}] - (let [state (reagent/atom value)] - (fn [] - [:div {:class class :on-click #(.stopPropagation %)} - [:input {:type type :name :user-name :default value :value @state - :on-change #(let [val (-> % .-target .-value)] - (reset! state val) - (if-not button (callback val)))}] - (if button - [:button {:class :add-product - :type :button - :disabled (= @state "") - :on-click (if callback #(-> state (reset-vals! value) first callback))} button])]))) - (defn order-adder [order] (let [state (reagent/atom order)] (fn [] [:details {:class :customer-order :key (gensym) :open (:open @state)} [:summary {:on-click #(swap! state update :open not)} - [item-adder + [prod/item-adder :type :date :value (:day @state) :class :order-date-picker @@ -42,7 +27,7 @@ :clients [:div {:class :customers-modal} [:h2 "Clienci"] - [item-adder :callback #(re-frame/dispatch [::event/add-customer %]) :button "+"] + [prod/item-adder :callback #(re-frame/dispatch [::event/add-customer %]) :button "+"] (let [client-orders (->> @(re-frame/subscribe [::subs/orders]) vals (group-by #(get-in % [:who :id])))] diff --git a/src/cljs/chicken_master/events.cljs b/src/cljs/chicken_master/events.cljs index 52f51a3..53d8c78 100644 --- a/src/cljs/chicken_master/events.cljs +++ b/src/cljs/chicken_master/events.cljs @@ -209,10 +209,9 @@ (assoc-in db [:products product] i))) (re-frame/reg-event-db - ::set-stock-amount - (fn [db [_ product i]] - (prn i) - (assoc-in db [:products product] i))) + ::delete-product + (fn [db [_ product]] + (update db :products dissoc product))) (re-frame/reg-event-fx ::save-stock diff --git a/src/cljs/chicken_master/products.cljs b/src/cljs/chicken_master/products.cljs index 81f873c..9325426 100644 --- a/src/cljs/chicken_master/products.cljs +++ b/src/cljs/chicken_master/products.cljs @@ -78,3 +78,18 @@ (if (settings :editable-number-inputs) (number-input (str "amount-" product) "" amount nil) [:span {:class :product-amount} amount])]) + +(defn item-adder [& {:keys [type value callback button class] + :or {type :text value "" button nil}}] + (let [state (reagent/atom value)] + (fn [] + [:div {:class class :on-click #(.stopPropagation %)} + [:input {:type type :name :user-name :default value :value @state + :on-change #(let [val (-> % .-target .-value)] + (reset! state val) + (if-not button (callback val)))}] + (if button + [:button {:class :add-product + :type :button + :disabled (= @state "") + :on-click (if callback #(-> state (reset-vals! value) first callback))} button])]))) diff --git a/src/cljs/chicken_master/stock.cljs b/src/cljs/chicken_master/stock.cljs index 273daf8..35c07c0 100644 --- a/src/cljs/chicken_master/stock.cljs +++ b/src/cljs/chicken_master/stock.cljs @@ -2,7 +2,7 @@ (:require [re-frame.core :as re-frame] [chicken-master.config :refer [settings]] - [chicken-master.products :refer [num-or-nil number-input]] + [chicken-master.products :as prod] [chicken-master.subs :as subs] [chicken-master.html :as html] [chicken-master.events :as event])) @@ -12,20 +12,25 @@ (html/modal :stock [:div {:class :stock-modal} - [:button {:class :add-product :type :button :on-click #(re-frame/dispatch [::event/add-stock-product])} "dodaj"] [:h2 "Magazyn"] (for [[product amount] @(re-frame/subscribe [::subs/available-products])] [:div {:key (gensym) :class :stock-product} [:span {:class :product-name} product] [:div {:class :stock-product-amount} [:button {:type :button :on-click #(re-frame/dispatch [::event/update-product-stock product -1])} "-"] - (number-input (name product) "" (or amount 0) - #(re-frame/dispatch [::event/set-stock-amount product (-> % .-target .-value num-or-nil)])) + (prod/number-input (name product) "" (or amount 0) + #(re-frame/dispatch [::event/set-stock-amount product (-> % .-target .-value prod/num-or-nil)])) [:button {:type :button :on-click #(re-frame/dispatch [::event/update-product-stock product 1])} "+"] - ]])] + [:button {:type :button :on-click #(re-frame/dispatch [::event/delete-product product])} "x"] + ]]) + [prod/item-adder :callback #(re-frame/dispatch [::event/set-stock-amount % 0]) :button "+"] + ] ;; On success (fn [form] (->> form - (reduce-kv #(assoc %1 (keyword %2) (num-or-nil %3)) {}) + (reduce-kv #(if-let [val (prod/num-or-nil %3)] + (assoc %1 (keyword %2) val) + %1) + {}) (conj [::event/save-stock]) re-frame/dispatch))))