158 lines
4.1 KiB
Clojure
158 lines
4.1 KiB
Clojure
(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]}})))
|