Files
integreat/src/cljs/auto_ap/subs.cljs
2020-01-05 10:28:10 -08:00

141 lines
2.7 KiB
Clojure

(ns auto-ap.subs
(:require [re-frame.core :as re-frame]
[clojure.string :as str]
[auto-ap.expense-accounts :refer [expense-accounts chooseable-expense-accounts]]
[goog.crypt.base64 :as base64]))
(re-frame/reg-sub
::client
(fn [db]
(get (:clients db) (:client db))))
(re-frame/reg-sub
::clients
(fn [db]
(when (:user db)
(sort-by :name (vals (:clients db))))))
(re-frame/reg-sub
::bank-accounts
:<- [::clients]
:<- [::client]
(fn [[clients client]]
(println client)
(if client
(:bank-accounts client)
(reduce (fn [result {:keys [bank-accounts]}]
(into result bank-accounts))
[]
clients))))
(re-frame/reg-sub
::real-bank-accounts
:<- [::client]
(fn [client]
(->> client :bank-accounts (filter #(= (:type %) :check)) (sort-by :sort-order))))
(re-frame/reg-sub
::clients-by-id
(fn [db]
(when (:user db)
(:clients db))))
(re-frame/reg-sub
::menu-active?
(fn [db [_ id]]
(-> db :menu (get id) :active?)))
(re-frame/reg-sub
::menu
(fn [db]
(:menu db)))
(re-frame/reg-sub
::modal-state
(fn [db [_ id status-from]]
(if status-from
(assoc (get (:modal-state db) id)
:error-message (get-in db [:auto-ap.forms/forms status-from :error])
:saving? (= (get-in db [:auto-ap.forms/forms status-from :status]) :loading))
(get (:modal-state db) id))))
(re-frame/reg-sub
::token
(fn [db]
(:user db)))
(re-frame/reg-sub
::vendors
(fn [db]
(vals (:vendors db))))
(re-frame/reg-sub
::sorted-vendors
:<- [::vendors]
(fn [vendors]
(sort-by :name vendors)))
(re-frame/reg-sub
::admin
(fn [db]
(:admin db)))
(re-frame/reg-sub
::user-editing-vendor
(fn [db]
(-> db :user-editing-vendor)))
(re-frame/reg-sub
::user
(fn [db]
(when (:user db)
(js->clj (.parse js/JSON (base64/decodeString (second (str/split (:user db) #"\.")))) :keywordize-keys true))))
(re-frame/reg-sub
::active-page
(fn [db]
(:active-page db)))
(re-frame/reg-sub
::pending-invoices
(fn [db]
(:pending (:invoices db))))
(re-frame/reg-sub
::status
(fn [db]
(:status db)))
(re-frame/reg-sub
::new-invoice-form
(fn [db]
(:new-invoice db)))
(re-frame/reg-sub
::expense-accounts
(fn [db]
(map (fn [[k v]] (assoc v :id k))
expense-accounts)))
(re-frame/reg-sub
::query-params
(fn [db]
(:query-params db)))
(re-frame/reg-sub
::chooseable-expense-accounts
(fn [db]
(map (fn [[k v]] (assoc v :id k))
chooseable-expense-accounts)))
(re-frame/reg-sub
::page-failure
(fn [db]
(when-let [error (-> db :page-failure first)]
(if (= 500 (:status error))
"System error occured. If you are stuck, please notify ben@integreatconsult.com."
(:message error)))))