diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 4eaedb63..1f45d5a9 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -29,7 +29,7 @@ (def integreat-schema { :scalars {:id { - :parse (schema/as-conformer #(Long/parseLong %)) + :parse (schema/as-conformer #(when % (Long/parseLong %))) :serialize (schema/as-conformer #(.toString %))} :ident {:parse (schema/as-conformer (fn [x] {:db/ident x})) :serialize (schema/as-conformer #(or (:ident %) (:db/ident %) %))}} @@ -53,6 +53,7 @@ {:fields {:id {:type :id } :type {:type :bank_account_type} :number {:type 'String} + :routing {:type 'String} :code {:type 'String} :check_number {:type 'Int} :name {:type 'String} diff --git a/src/clj/auto_ap/graphql/clients.clj b/src/clj/auto_ap/graphql/clients.clj index 7562d527..9b152bd3 100644 --- a/src/clj/auto_ap/graphql/clients.clj +++ b/src/clj/auto_ap/graphql/clients.clj @@ -12,15 +12,9 @@ (defn edit-client [context {:keys [edit_client new_bank_accounts] :as args} value] (assert-admin (:id context)) - (let [client (d-clients/get-by-id (:id edit_client)) - #_#_new-clients (set (map #(Long/parseLong %) (:clients edit_user))) - #_#_clients-to-remove (->> (:user/clients user) - (map :db/id) - (filter #(not (new-clients %)) ))] - - @(d/transact (d/connect uri) - - (doto (-> [(remove-nils {:db/id (:db/id client) + (let [client (when (:id edit_client) (d-clients/get-by-id (:id edit_client))) + id (or (:db/id client) "new-client") + transactions [(remove-nils {:db/id id :client/code (if (str/blank? (:client/code client)) (:code edit_client) (:client/code client)) @@ -51,12 +45,8 @@ ) (:bank_accounts edit_client)) })] - #_(into (map (fn [c] [:db/retract (:db/id user) :user/clients c]) clients-to-remove))) - clojure.pprint/pprint)) - - (doto (->graphql - (d-clients/get-by-id (:id edit_client))) - println))) + result @(d/transact (d/connect uri) transactions)] + (-> result :tempids (get id) d-clients/get-by-id ->graphql))) (defn get-client [context args value] diff --git a/src/cljc/auto_ap/entities/clients.cljc b/src/cljc/auto_ap/entities/clients.cljc index f179ac0a..e7105687 100644 --- a/src/cljc/auto_ap/entities/clients.cljc +++ b/src/cljc/auto_ap/entities/clients.cljc @@ -30,7 +30,7 @@ :is-empty #(= % ""))))) -(s/def ::client (s/keys :req-un [::name] +(s/def ::client (s/keys :req-un [::name ::code] :opt-un [::email ::address ::locations diff --git a/src/cljs/auto_ap/views/pages/admin/clients.cljs b/src/cljs/auto_ap/views/pages/admin/clients.cljs index b7ece334..3f3fda64 100644 --- a/src/cljs/auto_ap/views/pages/admin/clients.cljs +++ b/src/cljs/auto_ap/views/pages/admin/clients.cljs @@ -43,7 +43,28 @@ {:edit-client ;; TODO - hard code fields we want (-> edited-client - (update :bank-accounts #(into % (map (fn [ba] (dissoc ba :is-new?)) (:new-bank-accounts edited-client)))) + (update :bank-accounts #(seq (into % (map (fn [ba] (dissoc ba :is-new?)) (:new-bank-accounts edited-client))))) + (dissoc :new-bank-accounts) + )} + [:id :name :code :email [:address [:street1 :street2 :city :state :zip]] [:bank-accounts [:id :number :check-number :name :code :bank-code :bank-name :routing]]]]}]} + :on-success [::save-complete] + :on-error [::save-error]}}))) + +(re-frame/reg-event-fx + ::save-new-client + (fn [{:keys [db]} _] + (let [new-client (-> (:new-client @(re-frame/subscribe [::subs/admin])) + (dissoc :location))] + {:db (assoc-in db [:admin :client :saving?] true) + :graphql + {:token (-> db :user) + :query-obj {:venia/operation {:operation/type :mutation + :operation/name "EditClient"} + :venia/queries [{:query/data [:edit-client + {:edit-client + ;; TODO - hard code fields we want + (-> new-client + (update :bank-accounts #(seq (into % (map (fn [ba] (dissoc ba :is-new?)) (:new-bank-accounts new-client))))) (dissoc :new-bank-accounts)) } [:id :name :code :email [:address [:street1 :street2 :city :state :zip]] [:bank-accounts [:id :number :check-number :name :code :bank-code :bank-name :routing]]] @@ -480,7 +501,11 @@ (for [[index {:keys [name code number check-number]}] (map vector (range) (:new-bank-accounts new-client))] ^{:key index} [:li [:strong "* " code ": " name] [:button.button {:on-click (dispatch-event [::remove-new-bank-account index])} [:span.icon [:i.fa.fa-times]]]])]]]] - (when (:saving? new-client) [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])]])) + #_(when (:saving? new-client) [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}]) + [:submit.button.is-large.is-primary {:disabled (if (s/valid? ::entity/client new-client) + "" + "disabled") + :on-click (dispatch-event [::save-new-client])} "Save"]]])) (defn admin-clients-page [] (let [adding-client? @(re-frame/subscribe [::subs/admin])]