(ns auto-ap.views.pages.admin.users.table (:require [auto-ap.views.components.buttons :as buttons] [auto-ap.views.components.grid :as grid] [auto-ap.views.pages.admin.users.form :as form] [auto-ap.views.utils :refer [action-cell-width dispatch-event with-user]] [clojure.string :as str] [re-frame.core :as re-frame])) (re-frame/reg-event-fx ::impersonated (fn [_ [_ impersonate-jwt]] (println "SUCCESED") (.setItem js/localStorage "jwt" impersonate-jwt) (.removeItem js/localStorage "last-client-id" nil) (.removeItem js/localStorage "last-selected-clients" nil) (.reload (.-location js/document ) true) {})) (re-frame/reg-event-fx ::impersonate [with-user] (fn [{:keys [db user]} [_ impersonate-jwt]] {:http {:method "GET" :uri (str "/impersonate?jwt=" impersonate-jwt) :on-success [::impersonated impersonate-jwt]}})) (re-frame/reg-event-fx ::params-changed (fn [{:keys [db]} [_ p]] {:db (assoc db ::params p)})) (re-frame/reg-sub ::params (fn [db] (-> db ::params))) (defn table [{:keys [status page]}] (let [params @(re-frame/subscribe [::params])] [grid/grid {:status status :on-params-change (fn [p] (re-frame/dispatch [::params-changed p])) :params params :column-count 4} [grid/controls page] [grid/table {:fullwidth true} [grid/header [grid/row {} [grid/header-cell {} "User"] [grid/header-cell {} "Email"] [grid/header-cell {} "Role"] [grid/header-cell {} "Clients"] [grid/header-cell {:style {:width (action-cell-width 5)}}]]] [grid/body (for [{:keys [id name role clients] :as c} (:data page)] ^{:key (str name "-" id)} [grid/row {:class (:class c) :id id} [grid/cell {} [:div.level [:div.level-left (when-let [url (:profile-image-url c)] [:div.level-item [:figure.image.is-24x24 [:img.is-rounded {:src url :referrer-policy= "no-referrer"}]]]) [:div.level-item name]]]] [grid/cell {} (:email c)] [grid/cell {} role] [grid/cell {} (str/join ", " (map :name clients))] [grid/cell {} [:a.button {:on-click (dispatch-event [::impersonate (:impersonate-jwt c)])} "Impersonate"] [buttons/fa-icon {:event [::form/editing c] :icon "fa-pencil"}]]])]] ]))