Made all interactions much better

This commit is contained in:
Bryce Covert
2020-08-17 19:43:31 -07:00
parent dbb671b5d9
commit 6a8bb77e95
10 changed files with 234 additions and 284 deletions

View File

@@ -1,6 +1,7 @@
(ns auto-ap.views.pages.data-page
(:require [auto-ap.status :as status]
[auto-ap.utils :refer [by merge-by replace-by]]
[auto-ap.subs :as subs]
[auto-ap.utils :refer [deep-merge replace-by]]
[re-frame.core :as re-frame]))
(re-frame/reg-sub
@@ -35,10 +36,30 @@
[::data id :data]
replace-by :id (update entity :class #(or % "live-added")))))
(re-frame/reg-event-db
(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])
(re-frame/subscribe [::subs/query-params])])
(fn [[client filters table-params 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 [db [_ id data]]
(assoc-in db [::data id] data)))
(fn [{:keys [db]} [_ id data]]
{:db (assoc-in db [::data id] data)
:set-uri-params (dissoc @(re-frame/subscribe [::params id]) :client-id)}))
(re-frame/reg-event-db
::dispose
@@ -46,7 +67,9 @@
(-> db
(update ::data dissoc id)
(update ::checked dissoc id)
(update ::params dissoc id))))
(update ::table-params dissoc id)
(update ::filters dissoc id)
(update ::settled-filters dissoc id))))
(re-frame/reg-sub
::data
@@ -58,13 +81,67 @@
(fn [[_ id]]
[(re-frame/subscribe [::data id])
(re-frame/subscribe [::status/single [::page id]])
(re-frame/subscribe [::checked id])])
(fn [[data status checked] [_ id]]
(re-frame/subscribe [::checked id])
(re-frame/subscribe [::params id])
(re-frame/subscribe [::table-params id])
(re-frame/subscribe [::filters id])])
(fn [[data status checked params table-params filters] [_ id]]
{:id id
:data data
:status status
:checked checked}))
:checked checked
: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 (assoc-in db [::settled-filters id] @(re-frame/subscribe [::filters id]))}))
(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 (assoc-in db (into [::filters id] which) val)
:dispatch-debounce
{:event [::filters-settled id]
:time 800
:key [::filters id]}})))