Files
integreat/src/cljs/auto_ap/views/pages/admin/users.cljs
2020-08-24 20:54:51 -07:00

104 lines
3.1 KiB
Clojure

(ns auto-ap.views.pages.admin.users
(:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[clojure.string :as str]
[auto-ap.subs :as subs]
[auto-ap.events :as events]
[auto-ap.entities.clients :as entity]
[auto-ap.views.components.address :refer [address-field]]
[auto-ap.views.components.admin.side-bar :refer [admin-side-bar]]
[auto-ap.views.pages.admin.users.table :as table]
[auto-ap.views.components.layouts :refer [side-bar-layout]]
[auto-ap.views.utils :refer [login-url dispatch-value-change bind-field horizontal-field dispatch-event]]
[auto-ap.views.components.grid :as grid]
[auto-ap.utils :refer [by replace-by]]
[cljs.reader :as edn]
[auto-ap.routes :as routes]
[bidi.bidi :as bidi]
[auto-ap.status :as status]
[auto-ap.views.pages.admin.users.form :as form]
[auto-ap.effects.forward :as forward]))
(re-frame/reg-sub
::params
:<- [::table/params]
(fn [table-params]
table-params))
(re-frame/reg-sub
::users
(fn [db]
(::users db)))
(re-frame/reg-event-fx
::params-change
(fn [_ [_ params]]
{:set-uri-params params}))
(re-frame/reg-sub
::page
:<- [::params]
:<- [::users]
(fn [[params all-users]]
(assoc (grid/virtual-paginate-controls (:start params ) (:per-page params) all-users )
:data (grid/virtual-paginate (:start params) (:per-page params) all-users))))
(re-frame/reg-event-fx
::mounted
(fn [{:keys [db]} _]
{:graphql {:token (:user db)
:owns-state {:single ::page}
:query-obj {:venia/queries [[:user
[:name
:id
:role
[:clients [:id :name]]]]]}
:on-success [::received]}
::forward/register {:id ::edited-user
:events #{::form/saved}
:event-fn (fn [[_ query-result]]
[::saved query-result])}}))
(re-frame/reg-event-fx
::unmounted
(fn [{:keys [db]} _]
{::forward/dispose {:id ::edited-user}}))
(re-frame/reg-event-db
::saved
(fn [db [_ query-result]]
(-> db
(update ::users
replace-by
:id
(assoc (:edit-user query-result) :class "live-added")))))
(re-frame/reg-event-db
::received
(fn [db [_ d]]
(assoc-in db [::users] (:user d))))
(defn users-table []
[table/table {:page @(re-frame/subscribe [::page])
:status @(re-frame/subscribe [::status/single ::page])}])
(defn admin-users-content []
[:div
[:h1.title "Users"]
[users-table]])
(defn admin-users-page []
(reagent/create-class
{:component-will-unmount #(re-frame/dispatch [::unmounted])
:component-did-mount #(re-frame/dispatch [::mounted])
:reagent-render (fn []
[side-bar-layout {:side-bar [admin-side-bar {}]
:main [admin-users-content]}])}))