missing files.
This commit is contained in:
63
src/clj/auto_ap/graphql/import_batch.clj
Normal file
63
src/clj/auto_ap/graphql/import_batch.clj
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
(ns auto-ap.graphql.import-batch
|
||||||
|
(:require
|
||||||
|
[clojure.tools.logging :as log]
|
||||||
|
|
||||||
|
[datomic.api :as d]
|
||||||
|
[auto-ap.datomic
|
||||||
|
:refer [add-sorter-fields apply-pagination apply-sort-3 merge-query conn]]
|
||||||
|
[auto-ap.graphql.utils :refer [<-graphql assert-admin ident->enum-f result->page]]))
|
||||||
|
|
||||||
|
(def default-read '[:db/id
|
||||||
|
:import-batch/external-id
|
||||||
|
:import-batch/date
|
||||||
|
:import-batch/imported
|
||||||
|
:import-batch/suppressed
|
||||||
|
:import-batch/extant
|
||||||
|
:import-batch/user-name
|
||||||
|
{:import-batch/source [:db/ident]}
|
||||||
|
{:import-batch/status [:db/ident]}])
|
||||||
|
|
||||||
|
(defn raw-graphql-ids [db args]
|
||||||
|
(let [query (cond-> {:query {:find []
|
||||||
|
:in ['$]
|
||||||
|
:where []}
|
||||||
|
:args [db]}
|
||||||
|
|
||||||
|
(:sort args) (add-sorter-fields {"date" ['[?e :import-batch/date ?sort-date]]}
|
||||||
|
args)
|
||||||
|
|
||||||
|
true
|
||||||
|
(merge-query {:query {:find ['?e]
|
||||||
|
:where ['[?e :import-batch/date]]}}))]
|
||||||
|
|
||||||
|
|
||||||
|
(cond->> query
|
||||||
|
true (d/query)
|
||||||
|
true (apply-sort-3 args)
|
||||||
|
true (apply-pagination args))))
|
||||||
|
|
||||||
|
(defn graphql-results [ids db args]
|
||||||
|
(let [results (->> (d/pull-many db default-read ids)
|
||||||
|
(group-by :db/id))]
|
||||||
|
(->> ids
|
||||||
|
(map results)
|
||||||
|
(map first))))
|
||||||
|
|
||||||
|
(defn get-graphql [args]
|
||||||
|
(let [db (d/db conn)
|
||||||
|
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
|
||||||
|
[(graphql-results ids-to-retrieve db args)
|
||||||
|
matching-count]))
|
||||||
|
|
||||||
|
(defn get-import-batch-page [context args value]
|
||||||
|
(let [_ (assert-admin (:id context))
|
||||||
|
args (assoc (:filters args) :id (:id context))
|
||||||
|
[values matching-count] (get-graphql (<-graphql args))]
|
||||||
|
(result->page (->> values
|
||||||
|
(map (ident->enum-f :import-batch/source))
|
||||||
|
(map (ident->enum-f :import-batch/status))
|
||||||
|
(map #(update % :import-batch/date clj-time.coerce/to-date-time)))
|
||||||
|
matching-count :data args)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
73
src/cljs/auto_ap/views/pages/admin/import_batches.cljs
Normal file
73
src/cljs/auto_ap/views/pages/admin/import_batches.cljs
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
(ns auto-ap.views.pages.admin.import-batches
|
||||||
|
(:require [auto-ap.forms :as forms]
|
||||||
|
[auto-ap.subs :as subs]
|
||||||
|
[auto-ap.views.components.admin.side-bar :refer [admin-side-bar]]
|
||||||
|
[auto-ap.views.components.layouts :refer [appearing-side-bar side-bar-layout]]
|
||||||
|
[auto-ap.views.pages.admin.import-batches.table :as table]
|
||||||
|
[auto-ap.views.utils :refer [dispatch-event with-user]]
|
||||||
|
[vimsical.re-frame.cofx.inject :as inject]
|
||||||
|
[vimsical.re-frame.fx.track :as track]
|
||||||
|
[auto-ap.events :as events]
|
||||||
|
[auto-ap.utils :refer [replace-by merge-by]]
|
||||||
|
[re-frame.core :as re-frame]
|
||||||
|
[auto-ap.status :as status]
|
||||||
|
[auto-ap.effects.forward :as forward]
|
||||||
|
[auto-ap.views.pages.data-page :as data-page]
|
||||||
|
[clojure.set :as set]
|
||||||
|
[auto-ap.views.components.buttons :as buttons]))
|
||||||
|
|
||||||
|
|
||||||
|
(def default-read [:user-name :date :source :status :id :imported :suppressed :extant])
|
||||||
|
|
||||||
|
(re-frame/reg-event-fx
|
||||||
|
::params-change
|
||||||
|
[with-user ]
|
||||||
|
(fn [{:keys [db user] :as cofx} [_ params]]
|
||||||
|
{:graphql {:token user
|
||||||
|
:owns-state {:single [::data-page/page ::page]}
|
||||||
|
:query-obj {:venia/queries [{:query/data [:import_batch_page
|
||||||
|
{:filters {:sort (:sort params)
|
||||||
|
:start (:start params 0)
|
||||||
|
:per-page (:per-page params)}}
|
||||||
|
[[:data default-read]
|
||||||
|
:total
|
||||||
|
:start
|
||||||
|
:end]]
|
||||||
|
:query/alias :result}]}
|
||||||
|
:on-success (fn [result]
|
||||||
|
[::data-page/received ::page
|
||||||
|
(set/rename-keys (:result result)
|
||||||
|
{:import-batches :data})])}}))
|
||||||
|
|
||||||
|
|
||||||
|
(re-frame/reg-event-fx
|
||||||
|
::mounted
|
||||||
|
(fn [{:keys [db]}]
|
||||||
|
{::track/register {:id ::params
|
||||||
|
:subscription [::data-page/params ::page]
|
||||||
|
:event-fn (fn [params]
|
||||||
|
[::params-change params])}}))
|
||||||
|
|
||||||
|
(re-frame/reg-event-fx
|
||||||
|
::unmounted
|
||||||
|
(fn [{:keys [db]}]
|
||||||
|
{:dispatch [::data-page/dispose ::page]
|
||||||
|
::track/dispose {:id ::params}}))
|
||||||
|
|
||||||
|
;; VIEWS
|
||||||
|
(def import-batch-content
|
||||||
|
(with-meta
|
||||||
|
(fn []
|
||||||
|
(let [user @(re-frame/subscribe [::subs/user])]
|
||||||
|
[:div
|
||||||
|
[:h1.title "Import Batches"]
|
||||||
|
(when (= "admin" (:user/role user))
|
||||||
|
[table/table {:id :import-batches
|
||||||
|
:data-page ::page}])]))
|
||||||
|
{:component-did-mount (dispatch-event [::mounted ])
|
||||||
|
:component-will-unmount #(re-frame/dispatch-sync [::unmounted])}))
|
||||||
|
|
||||||
|
(defn import-batches-page []
|
||||||
|
[side-bar-layout {:side-bar [admin-side-bar {}]
|
||||||
|
:main [import-batch-content]}])
|
||||||
|
|
||||||
87
src/cljs/auto_ap/views/pages/admin/import_batches/table.cljs
Normal file
87
src/cljs/auto_ap/views/pages/admin/import_batches/table.cljs
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
(ns auto-ap.views.pages.admin.import-batches.table
|
||||||
|
(:require
|
||||||
|
[auto-ap.status :as status]
|
||||||
|
[auto-ap.subs :as subs]
|
||||||
|
[auto-ap.views.components.buttons :as buttons]
|
||||||
|
[auto-ap.views.components.grid :as grid]
|
||||||
|
[auto-ap.views.pages.data-page :as data-page]
|
||||||
|
[auto-ap.views.utils :refer [date->str dispatch-event action-cell-width]]
|
||||||
|
[re-frame.core :as re-frame]
|
||||||
|
[reagent.core :as r]
|
||||||
|
[bidi.bidi :as bidi]
|
||||||
|
[auto-ap.routes :as routes]
|
||||||
|
[cemerick.url :as url]))
|
||||||
|
|
||||||
|
(re-frame/reg-sub
|
||||||
|
::specific-table-params
|
||||||
|
(fn [db]
|
||||||
|
(::table-params db)))
|
||||||
|
|
||||||
|
|
||||||
|
(re-frame/reg-event-db
|
||||||
|
::unmounted
|
||||||
|
(fn [db]
|
||||||
|
(status/reset-multi db ::run)))
|
||||||
|
|
||||||
|
(re-frame/reg-sub
|
||||||
|
::table-params
|
||||||
|
:<- [::specific-table-params]
|
||||||
|
:<- [::subs/query-params]
|
||||||
|
(fn [[specific-table-params query-params]]
|
||||||
|
(merge (select-keys query-params #{:start :sort}) specific-table-params )))
|
||||||
|
|
||||||
|
(re-frame/reg-event-fx
|
||||||
|
::params-changed
|
||||||
|
[(re-frame/path [::table-params])]
|
||||||
|
(fn [{table-params :db} [_ params :as z]]
|
||||||
|
{:db (merge table-params params)}))
|
||||||
|
|
||||||
|
(defn table* [{:keys [id data-page]}]
|
||||||
|
(let [{:keys [data]} @(re-frame/subscribe [::data-page/page data-page])]
|
||||||
|
[grid/grid {:data-page data-page
|
||||||
|
:column-count 6}
|
||||||
|
[grid/controls data]
|
||||||
|
[grid/table {:fullwidth true }
|
||||||
|
[grid/header
|
||||||
|
[grid/row {}
|
||||||
|
[grid/sortable-header-cell {:sort-key "date"
|
||||||
|
:sort-name "Date"}
|
||||||
|
"Date"]
|
||||||
|
|
||||||
|
[grid/sortable-header-cell {:sort-key "source"
|
||||||
|
:sort-name "Source"}
|
||||||
|
"Source"]
|
||||||
|
|
||||||
|
[grid/sortable-header-cell {:sort-key "status"
|
||||||
|
:sort-name "Status"}
|
||||||
|
"Status"]
|
||||||
|
|
||||||
|
[grid/sortable-header-cell {:sort-key "user"
|
||||||
|
:sort-name "User"}
|
||||||
|
"User"]
|
||||||
|
[grid/header-cell {:style {:width "7em"}} "Imported"]
|
||||||
|
[grid/header-cell {:style {:width "7em"}} "Preexisting"]
|
||||||
|
[grid/header-cell {:style {:width "7em"}} "Suppressed"]
|
||||||
|
[grid/header-cell {:style {:width (action-cell-width 3)}}]]]
|
||||||
|
[grid/body
|
||||||
|
(for [{:keys [date source status user-name id imported extant suppressed] :as r} (:data data)]
|
||||||
|
^{:key id}
|
||||||
|
[grid/row {:class (:class r) :id id}
|
||||||
|
[grid/cell {} (date->str date)]
|
||||||
|
[grid/cell {} source]
|
||||||
|
[grid/cell {} status]
|
||||||
|
[grid/cell {} user-name]
|
||||||
|
[grid/cell {} imported]
|
||||||
|
[grid/cell {} extant]
|
||||||
|
[grid/cell {} suppressed]
|
||||||
|
[grid/button-cell {}
|
||||||
|
[buttons/fa-icon {:href (str (bidi/path-for routes/routes :transactions)
|
||||||
|
"?"
|
||||||
|
(url/map->query {:import-batch-id id}))
|
||||||
|
:icon "fa-external-link"}]]
|
||||||
|
])]]]))
|
||||||
|
|
||||||
|
(defn table [params]
|
||||||
|
(r/create-class {:component-will-unmount (dispatch-event [::unmounted])
|
||||||
|
:reagent-render (fn [params]
|
||||||
|
[table* params])}))
|
||||||
Reference in New Issue
Block a user