(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)))))