(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]}])}))