Makes A&J Produce findable.

This commit is contained in:
2025-01-17 20:53:17 -08:00
parent ce3cdf836a
commit ca7a08452c
4 changed files with 50 additions and 12 deletions

View File

@@ -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
}

View File

@@ -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

View File

@@ -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

View File

@@ -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})))