(ns auto-ap.views.pages.data-page (:require [auto-ap.status :as status] [auto-ap.subs :as subs] [auto-ap.utils :refer [deep-merge replace-by]] [re-frame.core :as re-frame])) (re-frame/reg-sub ::checked (fn [db [_ id]] (get-in db [::checked id] {}))) (re-frame/reg-event-db ::toggle-check (fn [db [_ id new]] (assoc-in db [::checked id] new))) (re-frame/reg-event-db ::remove-check (fn [db [_ id to-remove]] (update-in db [::checked id] (fn [checked] (let [checked (or checked {})] (dissoc checked to-remove)))))) (re-frame/reg-sub ::checked-set (fn [db [_ id]] (keys (get-in db [::checked id] {})))) (re-frame/reg-event-db ::reset-checked (fn [db [_ id]] (update db ::checked dissoc id))) (re-frame/reg-event-db ::updated-entity (fn [db [_ id entity]] (update-in db [::data id :data] replace-by :id (update entity :class #(or % "live-added"))))) (re-frame/reg-sub ::table-params (fn [db [_ which]] (get-in db [::table-params which]))) (re-frame/reg-sub ::params (fn [[_ id]] [(re-frame/subscribe [::subs/client]) (re-frame/subscribe [::settled-filters id]) (re-frame/subscribe [::table-params id])]) (fn [[client filters table-params query-params]] (let [query-params (auto-ap.views.utils/query-params)] (cond-> {} client (assoc :client-id (:id client)) (seq query-params) (merge query-params) (seq filters) (merge filters) (seq table-params) (merge table-params))))) (re-frame/reg-event-fx ::received (fn [{:keys [db]} [_ id data]] (println @(re-frame/subscribe [::params id])) {:db (assoc-in db [::data id] data) :set-uri-params (dissoc @(re-frame/subscribe [::params id]) :client-id)})) (re-frame/reg-event-db ::dispose (fn [db [_ id]] (-> db (update ::data dissoc id) (update ::checked dissoc id) (update ::table-params dissoc id) (update ::filters dissoc id) (update ::settled-filters dissoc id)))) (re-frame/reg-sub ::data (fn [db [_ id]] (get-in db [::data id]))) (re-frame/reg-sub ::page (fn [[_ id]] [(re-frame/subscribe [::data id]) (re-frame/subscribe [::status/single [::page id]]) (re-frame/subscribe [::checked id]) (re-frame/subscribe [::checked-set id]) (re-frame/subscribe [::params id]) (re-frame/subscribe [::table-params id]) (re-frame/subscribe [::filters id])]) (fn [[data status checked checked-set params table-params filters] [_ id]] {:id id :data data :status status :checked checked :checked-set checked-set :params params :filters filters :table-params table-params})) (defn in-page-entities [which] (re-frame/path [::data which :data ] )) (re-frame/reg-event-fx ::table-params-changed (fn [{:keys [db]} [_ which params :as z]] {:db (update-in db [::table-params which] merge params)})) (re-frame/reg-sub ::specific-filters (fn [db [_ id]] (get-in db [::filters id]))) (re-frame/reg-sub ::filters (fn [[_ id]] [(re-frame/subscribe [::specific-filters id]) (re-frame/subscribe [::subs/query-params])]) (fn [[specific-filters query-params] ] (deep-merge query-params (or specific-filters {}) ))) (re-frame/reg-sub ::filter (fn [[_ id]] [(re-frame/subscribe [::filters id])]) (fn [[filters] [_ id which]] (get filters which))) (re-frame/reg-event-fx ::filters-settled (fn [{:keys [db]} [_ id]] {:db (-> db (assoc-in [::settled-filters id] @(re-frame/subscribe [::filters id])) (assoc-in [::table-params id :start] 0))})) (re-frame/reg-sub ::settled-filters (fn [db [_ id]] (get-in db [::settled-filters id]))) (re-frame/reg-event-fx ::filter-changed (fn [{:keys [db]} [_ id & params]] (let [[a b c] params [which val] (if (= 3 (count params)) [(into [a] b) c] [[a] b])] {:db (-> db (assoc-in (into [::filters id] which) val)) :dispatch-debounce {:event [::filters-settled id] :time 800 :key [::filters id]}})))