From ca7a08452cfc31e79b618810e696417598deb26d Mon Sep 17 00:00:00 2001 From: Bryce Date: Fri, 17 Jan 2025 20:53:17 -0800 Subject: [PATCH] Makes A&J Produce findable. --- resources/public/js/alpine-vals.js | 6 ++++ src/clj/auto_ap/ssr/components/inputs.clj | 12 +++---- src/clj/auto_ap/ssr/invoices.clj | 5 +-- src/clj/auto_ap/ssr/vendor.clj | 39 +++++++++++++++++++++++ 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/resources/public/js/alpine-vals.js b/resources/public/js/alpine-vals.js index bd40ba2c..f6d18b71 100644 --- a/resources/public/js/alpine-vals.js +++ b/resources/public/js/alpine-vals.js @@ -76,3 +76,9 @@ document.addEventListener('alpine:init', () => { }) }) + +function addQueryParam(url, k, v) { + let z = new URL(url, window.location.origin); + z.searchParams.append(k, v); + return z +} \ No newline at end of file diff --git a/src/clj/auto_ap/ssr/components/inputs.clj b/src/clj/auto_ap/ssr/components/inputs.clj index 460f1454..9c32f5de 100644 --- a/src/clj/auto_ap/ssr/components/inputs.clj +++ b/src/clj/auto_ap/ssr/components/inputs.clj @@ -53,9 +53,7 @@ ])) (defn typeahead- [params] - [:div.relative {:x-data (hx/json { :baseUrl (if (str/includes? (:url params) "?") - (str (:url params) "&q=") - (str (:url params) "?q=")) + [:div.relative {:x-data (hx/json { :baseUrl (:url params) :value {:value ((:value-fn params identity) (:value params)) :label ((:content-fn params identity) (:value params))} :tippy nil :search "" @@ -112,7 +110,7 @@ "@keydown.down.prevent" "active ++; active = active >= elements.length - 1 ? elements.length - 1 : active" "@keydown.up.prevent" "active --; active = active < 0 ? 0 : active" "@keydown.enter.prevent.stop" "tippy.hide(); value = elements.length > 0 ? $data.elements[active] : {'value': '', label: ''}; $refs.input.focus()" - "x-init" "$el.focus(); $watch('search', s => { if($el.value.length > 2) {fetch(baseUrl + s).then(data=>data.json()).then(data => {elements = data; active=-1; tippy.popperInstance.update()}) }})"}] + "x-init" "$el.focus(); $watch('search', s => { if($el.value.length > 2) {fetch(addQueryParam(baseUrl, 'q', s)).then(data=>data.json()).then(data => {elements = data; active=-1; tippy.popperInstance.update()}) }})"}] [:div.dropdown-options {:class "rounded-b-lg overflow-hidden"} [:template {:x-for "(element, index) in elements"} [:li [:a {:class "px-4 py-2 flex gap-2 items-center outline-0 focus:bg-neutral-100 hover:bg-neutral-100 whitespace-nowrap [&.active]:bg-primary-500 [&.active]:dark:bg-primary-700 text-gray-800 dark:text-gray-100" @@ -147,7 +145,7 @@ "@keydown.down.prevent" "active ++; active = active >= elements.length - 1 ? elements.length - 1 : active" "@keydown.up.prevent" "active --; active = active < 0 ? 0 : active" "@keydown.enter.prevent.stop" "if ($data.elements[active]) { if (value.has($data.elements[active].value)) { value.delete($data.elements[active].value) } else {value.add($data.elements[active].value); lookup[$data.elements[active].value] = $data.elements[active].label} } " - "x-init" " $el.focus(); $watch('search', s => { if($el.value.length > 2) {fetch(baseUrl + s).then(data=>data.json()).then(data => reset_elements(data)) }})"}]] + "x-init" " $el.focus(); $watch('search', s => { if($el.value.length > 2) {fetch(addQueryParam(baseUrl, 'q', s)).then(data=>data.json()).then(data => reset_elements(data)) }})"}]] [:div.dropdown-options {:class "overflow-hidden divide-y divide-gray-200 "} [:template {:x-for "(element, index) in elements"} [:li {":style" "index == 0 && 'border: 0 !important;'"} @@ -189,9 +187,7 @@ (defn multi-typeahead- [params] - [:div.relative {:x-data (hx/json {:baseUrl (if (str/includes? (:url params) "?") - (str (:url params) "&q=") - (str (:url params) "?q=")) + [:div.relative {:x-data (hx/json {:baseUrl (:url params) :reset_elements (js-fn "function(e) { this.elements = [{value: 'all', label:'All'}].concat(e); this.active = -1 diff --git a/src/clj/auto_ap/ssr/invoices.clj b/src/clj/auto_ap/ssr/invoices.clj index 49789600..93facb85 100644 --- a/src/clj/auto_ap/ssr/invoices.clj +++ b/src/clj/auto_ap/ssr/invoices.clj @@ -662,10 +662,7 @@ _ (assert-can-see-client identity (:db/id (:invoice/client invoice))) _ (assert-not-locked (:db/id (:invoice/client invoice)) (:invoice/date invoice)) ] (alog/info ::undoing-autopay :transaction :tx) - @(dc/transact conn [[:upsert-invoice {:db/id id - :invoice/outstanding-balance (:invoice/total entity) - :invoice/status :invoice-status/unpaid - :invoice/scheduled-payment nil}]]) + (html-response (row* identity (assoc (dc/pull (dc/db conn) default-read id) :invoice/status :invoice-status/unpaid) {:flash? true diff --git a/src/clj/auto_ap/ssr/vendor.clj b/src/clj/auto_ap/ssr/vendor.clj index d011fab6..4712c052 100644 --- a/src/clj/auto_ap/ssr/vendor.clj +++ b/src/clj/auto_ap/ssr/vendor.clj @@ -34,3 +34,42 @@ {:body (take 10 valid-clients)})) (def search (wrap-json-response search)) + +#_(comment + (count (let [valid-ids (->> (dc/q '[:find ?v + :in $ + :where [?v :vendor/name]] + (dc/db conn)) + (map first) + (into #{}))] + (for [v (solr/query solr/impl "vendors" + {"query" "*" + "limit" 10000}) + :when (not (valid-ids (Long/parseLong (:id v))))] + v))) + + (let [name-like-ids (when (not-empty "A&J") + (map (comp (juxt identity #(Long/parseLong %)) :id) + (solr/query solr/impl "vendors" + {"query" (cond-> (format "name:(%s*)" (str/upper-case "A&J")) + (not (is-admin? identity)) (str " hidden:false")) + "fields" "id,name" + "limit" 300}))) + valid-clients (for [[z n] name-like-ids] + {"value" n "internal-label" z "label" (dc/pull (dc/db conn) '[*] n)})] + (take 5 valid-clients)) + + + (solr/query solr/impl "vendors" + {"query" (cond-> (format "name:(%s*)" (str/upper-case (solr/escape "A&J Pr"))) + (not true) (str " hidden:false")) + "fields" "id, name" + "limit" 300}) + + (solr/escape "A&J") + + (first (solr/query solr/impl "vendors" + {"query" (cond-> (format "name:(A\\&J PRO*)") + (not true) (str " hidden:false")) + "fields" "id, name" + "limit" 300}))) \ No newline at end of file