Searching lists works; paging lists still doesn't, but is closer.

This commit is contained in:
Simon Brooke 2018-07-15 21:03:13 +01:00
parent 7dfff9f9ee
commit 8d32850b8f
3 changed files with 74 additions and 77 deletions

View file

@ -140,7 +140,7 @@
(let [entity-name (safe-name (:name (:attrs entity)) :sql) (let [entity-name (safe-name (:name (:attrs entity)) :sql)
pretty-name (singularise entity-name) pretty-name (singularise entity-name)
query-name (str "search-strings-" entity-name) query-name (str "search-strings-" entity-name)
signature ":? :1" signature ":? :*"
properties (remove #(#{"link"}(:type (:attrs %))) (all-properties entity))] properties (remove #(#{"link"}(:type (:attrs %))) (all-properties entity))]
(hash-map (hash-map
(keyword query-name) (keyword query-name)
@ -168,12 +168,12 @@
string? string?
(map (map
#(str #(str
"(if (:" (-> % :attrs :name) " params) \"OR " "(if (:" (-> % :attrs :name) " params) (str \"OR "
(case (base-type % application) (case (-> % :attrs :type)
("string" "text") ("string" "text")
(str (str
(safe-name (-> % :attrs :name) :sql) (safe-name (-> % :attrs :name) :sql)
" LIKE '%:" (-> % :attrs :name) "%'") " LIKE '%\" (:" (-> % :attrs :name) " params) \"%'")
("date" "time" "timestamp") ("date" "time" "timestamp")
(str (str
(safe-name (-> % :attrs :name) :sql) (safe-name (-> % :attrs :name) :sql)
@ -181,12 +181,12 @@
"entity" "entity"
(str (str
(safe-name (-> % :attrs :name) :sql) (safe-name (-> % :attrs :name) :sql)
"_expanded LIKE '%:" (-> % :attrs :name) "%'") "_expanded LIKE '%\" (:" (-> % :attrs :name) " params) \"%'")
(str (str
(safe-name (-> % :attrs :name) :sql) (safe-name (-> % :attrs :name) :sql)
" = :" " = :"
(-> % :attrs :name))) (-> % :attrs :name)))
"\")") "\"))")
properties)))) properties))))
(order-by-clause entity "lv_") (order-by-clause entity "lv_")
"--~ (if (:offset params) \"OFFSET :offset \")" "--~ (if (:offset params) \"OFFSET :offset \")"

View file

@ -140,49 +140,53 @@
(defn make-list-handler-content (defn make-list-handler-content
[f e a n] [f e a n]
(list (list
'let 'let
(vector (vector
'records 'records
(list
'if
(list
'some
(set (map #(keyword (-> % :attrs :name)) (all-properties e)))
(list 'keys 'params))
(list
'support/do-or-log-error
(list (list
(symbol (str "db/search-strings-" (:name (:attrs e)))) 'if
(symbol "db/*db*") (list
'params) 'some
:message (str (set (map #(keyword (-> % :attrs :name)) (all-properties e)))
"Error while searching " (list 'keys 'params))
(singularise (:name (:attrs e))) (list 'do
" records") (list (symbol "log/debug") (list (symbol (str "db/search-strings-" (:name (:attrs e)) "-sqlvec")) 'params))
:error-return {:warnings [(str (list
"Error while searching " 'support/do-or-log-error
(singularise (:name (:attrs e))) (list
" records")]}) (symbol (str "db/search-strings-" (:name (:attrs e))))
(list (symbol "db/*db*")
'support/do-or-log-error 'params)
(list :message (str
(symbol "Error while searching "
(str (singularise (:name (:attrs e)))
"db/list-" " records")
(:name (:attrs e)))) :error-return {:warnings [(str
(symbol "db/*db*") {}) "Error while searching "
:message (str (singularise (:name (:attrs e)))
"Error while fetching " " records")]}))
(singularise (:name (:attrs e))) (list 'do
" records") (list (symbol "log/debug") (list (symbol (str "db/list-" (:name (:attrs e)) "-sqlvec")) 'params))
:error-return {:warnings [(str (list
"Error while fetching " 'support/do-or-log-error
(singularise (:name (:attrs e))) (list
" records")]}))) (symbol
(list 'if (str
(list :warnings 'records) "db/list-"
'records (:name (:attrs e))))
{:records 'records}))) (symbol "db/*db*") {})
:message (str
"Error while fetching "
(singularise (:name (:attrs e)))
" records")
:error-return {:warnings [(str
"Error while fetching "
(singularise (:name (:attrs e)))
" records")]}))))
(list 'if
(list :warnings 'records)
'records
{:records 'records})))
(defn make-handler (defn make-handler

View file

@ -665,11 +665,7 @@
"time" "time" "time" "time"
"text") "text")
base-name (:property (:attrs field)) base-name (:property (:attrs field))
search-name (safe-name search-name (safe-name base-name :sql)]
(if
(= (:type (:attrs property)) "entity")
(str base-name "_expanded") base-name)
:sql)]
(hash-map (hash-map
:tag :th :tag :th
:content :content
@ -728,18 +724,10 @@
{:back-links {:back-links
{:tag :div {:tag :div
:content :content
[ [{:tag :div :attrs {:class "back-link-container"}
{:tag :div :attrs {:class "back-link-container"}
:content :content
["{% ifequal params.offset \"0\" %}" [{:tag :a :attrs {:id "prev-selector" :class "back-link"}
{:tag :a :content ["Previous"]}]}]}
:attrs {:id "back-link" :class "back-link" :href "{{servlet-context}}/admin"}
:content ["Back"]}
"{% else %}"
{:tag :a :attrs {:id "prev-selector" :class "back-link"}
:content ["Previous"]}
"{% endifunequal %}"]}
]}
:big-links :big-links
{:tag :div {:tag :div
:content :content
@ -765,8 +753,8 @@
:method "POST"} :method "POST"}
:content :content
[(csrf-widget) [(csrf-widget)
{:tag :input :attrs {:id "offset" :type "hidden" :value "{{params.offset|default:0}}"}} {:tag :input :attrs {:id "offset" :name "offset" :type "hidden" :value "{{params.offset|default:0}}"}}
{:tag :input :attrs {:id "limit" :type "hidden" :value "{{params.limit|default:50}}"}} {:tag :input :attrs {:id "limit" :name "limit" :type "hidden" :value "{{params.limit|default:50}}"}}
{:tag :table {:tag :table
:attrs {:caption (:name (:attrs entity))} :attrs {:caption (:name (:attrs entity))}
:content :content
@ -779,21 +767,26 @@
var ow = document.getElementById('offset'); var ow = document.getElementById('offset');
var lw = document.getElementById('limit'); var lw = document.getElementById('limit');
form.addEventListener('submit', function() { form.addEventListener('submit', function() {
ow.value='0'; ow.value='0';
}); });
{% ifunequal params.offset \"0\" %} var prevSelector = document.getElementById('prev-selector');
document.getElementById('prev-selector').addEventListener('click', function () { if (prevSelector != null) {
ow.value=(parseInt(ow.value)-parseInt(lw.value)); prevSelector.addEventListener('click', function () {
console.log('Updated offset to ' + ow.value); if (parseInt(ow.value)===0) {
form.submit(); window.location = '{{servlet-context}}/admin';
}); } else {
{% endifunequal %} ow.value=(parseInt(ow.value)-parseInt(lw.value));
console.log('Updated offset to ' + ow.value);
form.submit();
}
});
}
document.getElementById('next-selector').addEventListener('click', function () { document.getElementById('next-selector').addEventListener('click', function () {
ow.value=(parseInt(ow.value)+parseInt(lw.value)); ow.value=(parseInt(ow.value)+parseInt(lw.value));
console.log('Updated offset to ' + ow.value); console.log('Updated offset to ' + ow.value);
form.submit(); form.submit();
});")})) });")}))