Makes multiple client selection somewhat possible via graphql.

This commit is contained in:
2023-08-31 13:05:06 -07:00
parent 9c472dfc8e
commit 1d82ec29e0
29 changed files with 274 additions and 139 deletions

View File

@@ -1,7 +1,8 @@
(ns auto-ap.ssr.company-dropdown
(:require
[auto-ap.datomic :refer [conn pull-many]]
[auto-ap.graphql.utils :refer [assert-can-see-client cleanse-query]]
[auto-ap.graphql.utils
:refer [assert-can-see-client cleanse-query is-admin?]]
[auto-ap.solr :as solr]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.svg :as svg]
@@ -125,18 +126,48 @@ function initCompanyDropdown() {
")]]])
(defn active-client [{:keys [identity params] :as request}]
(let [client-id (some-> (or (:search-client params) (get params "search-client")) not-empty Long/parseLong)]
(println (format "HERE CLIENT ID '%s'" client-id))
(let [client-search (or (:search-client params)
(get params "search-client"))
client-id (try (some-> client-search
(not-empty )
Long/parseLong)
(catch Exception _
nil))]
(when client-id
(assert-can-see-client identity client-id))
(let [new-session (assoc (:session request) :client
(let [new-session (assoc (:session request)
:client
(when client-id
(dc/pull (dc/db conn) [:db/id :client/name :client/code] client-id)))]
(dc/pull (dc/db conn) [:db/id :client/name :client/code] client-id))
:clients
(cond (int? client-id)
[(dc/pull (dc/db conn) [:db/id :client/name :client/code] client-id)]
(= ":mine" client-search)
(->> (dc/q '[:find (pull ?c [:db/id :client/name :client/code])
:in $ ?u
:where [?u :user/clients ?c]]
(dc/db conn)
(:db/id identity))
(map first))
(and (or (empty? client-search)
(= ":all" client-search))
(is-admin? identity))
(->> (dc/q '[:find (pull ?c [:db/id :client/name :client/code])
:in $ ?u
:where [?c :client/code]]
(dc/db conn)
(:db/id identity))
(map first))))]
(assoc
(html-response
(dropdown {:client (:client new-session)
:identity identity}))
:session
new-session
:headers
{"hx-trigger" "clientSelected"}))))
(html-response
(dropdown {:client (:client new-session)
:identity identity}))
:session
new-session
:headers
{"hx-trigger" "clientSelected"}))))