first step of page abstraction.

This commit is contained in:
Bryce Covert
2020-08-16 17:40:45 -07:00
parent 0c87309c34
commit 001c66547c
10 changed files with 410 additions and 281 deletions

View File

@@ -0,0 +1,74 @@
(ns auto-ap.views.pages.data-page
(:require [auto-ap.status :as status]
[auto-ap.utils :refer [by merge-by 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 #{})]
(disj checked to-remove))))))
(re-frame/reg-event-db
::updated-entity
(fn [db [_ id entity]]
(update-in db
[::data id]
replace-by :id (assoc entity :class "live-added"))))
(re-frame/reg-event-db
::received
(fn [db [_ id data]]
(assoc-in db [::data id] data)))
(re-frame/reg-event-db
::dispose
(fn [db [_ id]]
(-> db
(update ::data dissoc id)
(update ::checked dissoc id)
(update ::params 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])])
(fn [[data status checked] [_ id]]
{:id id
:data data
:status status
:checked checked}))
(defn in-page-entities [which]
(re-frame/path [::data which :data ] ))
(re-frame/reg-event-db
::entity-updated
(fn [db [_ which [_ entity] :as g]]
(println g)
(update-in db [::data which :data]
(fn [entities]
(let [by-id (by :id entities )]
(if (by-id (:id entity))
(merge-by entities :id entity)
(into [entity] entities)))))))