|
|
@@ -124,46 +124,16 @@
|
|
|
(:block/collapsed? current-block)))]
|
|
|
collapsed?'))
|
|
|
|
|
|
-(rum/defcs custom-query* < rum/reactive rum/static db-mixins/query
|
|
|
- (rum/local nil ::query-result-atom)
|
|
|
- (rum/local nil ::prev-q)
|
|
|
- {:init (fn [state]
|
|
|
- (let [[{:keys [dsl-query? db-graph? built-in-query?] :as config}
|
|
|
- {:keys [collapsed?]}] (:rum/args state)]
|
|
|
- ;; collapsed? not needed for db graphs
|
|
|
- (when (not db-graph?)
|
|
|
- (when-not (or built-in-query? dsl-query?)
|
|
|
- (when collapsed?
|
|
|
- (editor-handler/collapse-block! (or (:block/uuid (:block config))
|
|
|
- (:block/uuid config)))))))
|
|
|
- (assoc state :query-error (atom nil)
|
|
|
- :fulltext-query-result (atom nil)))}
|
|
|
- [state {:keys [db-graph? dsl-query? built-in-query?] :as config} {:keys [builder query view collapsed?] :as q}]
|
|
|
- (let [*prev-q (::prev-q state)
|
|
|
- *query-result-atom (::query-result-atom state)
|
|
|
- *query-error (:query-error state)
|
|
|
- *fulltext-query-result (:fulltext-query-result state)
|
|
|
- current-block-uuid (or (:block/uuid (:block config))
|
|
|
- (:block/uuid config))
|
|
|
- current-block (db/entity [:block/uuid current-block-uuid])
|
|
|
- ;; Get query result
|
|
|
- collapsed?' (calculate-collapsed? current-block current-block-uuid {:collapsed? (if-not db-graph? collapsed? false)})
|
|
|
- built-in-collapsed? (and collapsed? built-in-query?)
|
|
|
- table? (when-not db-graph?
|
|
|
- (or (get-in current-block [:block/properties :query-table])
|
|
|
- (and (string? query) (string/ends-with? (string/trim query) "table"))))
|
|
|
- q-changed? (not= @*prev-q q)
|
|
|
- result (when (or built-in-collapsed? (not collapsed?'))
|
|
|
- (or (if q-changed? false @*query-result-atom)
|
|
|
- (let [result (query-result/get-query-result config q *query-error *fulltext-query-result current-block-uuid {:table? table?})]
|
|
|
- (reset! *query-result-atom result)
|
|
|
- result)))
|
|
|
- _ (when q-changed? (reset! *prev-q q))
|
|
|
+(rum/defc custom-query* < rum/reactive db-mixins/query
|
|
|
+ [{:keys [*query-error db-graph? dsl-query? built-in-query? table? current-block] :as config}
|
|
|
+ {:keys [builder query view collapsed?] :as q}
|
|
|
+ *result]
|
|
|
+ (let [collapsed?' (:collapsed? config)
|
|
|
+ result (when *result (query-result/get-query-result config q (rum/react *result)))
|
|
|
;; Args for displaying query header and results
|
|
|
view-fn (if (keyword? view) (get-in (state/sub-config) [:query/views view]) view)
|
|
|
view-f (and view-fn (sci/eval-string (pr-str view-fn)))
|
|
|
- page-list? (and (seq result)
|
|
|
- (some? (:block/name (first result))))
|
|
|
+ page-list? (and (seq result) (some? (:block/name (first result))))
|
|
|
opts {:query-error-atom *query-error
|
|
|
:current-block current-block
|
|
|
:table? table?
|
|
|
@@ -180,7 +150,6 @@
|
|
|
(file-query/custom-query-header config
|
|
|
q
|
|
|
{:query-error-atom *query-error
|
|
|
- :fulltext-query-result-atom *fulltext-query-result
|
|
|
:current-block current-block
|
|
|
:table? table?
|
|
|
:view-f view-f
|
|
|
@@ -203,14 +172,50 @@
|
|
|
(when-not collapsed?'
|
|
|
(custom-query-inner config q opts))]))]))))
|
|
|
|
|
|
+(rum/defc trigger-custom-query
|
|
|
+ [config q]
|
|
|
+ (let [[result set-result!] (rum/use-state nil)]
|
|
|
+ (rum/use-effect!
|
|
|
+ (fn []
|
|
|
+ (query-result/trigger-custom-query! config q (:*query-error config) set-result!))
|
|
|
+ [q])
|
|
|
+ (when (and (util/atom? result) (seq @result))
|
|
|
+ (custom-query* config q result))))
|
|
|
+
|
|
|
(rum/defcs custom-query < rum/static
|
|
|
- [state config q]
|
|
|
+ {:init (fn [state]
|
|
|
+ (let [db-graph? (config/db-based-graph? (state/get-current-repo))
|
|
|
+ [{:keys [dsl-query? built-in-query?] :as config}
|
|
|
+ {:keys [collapsed?]}] (:rum/args state)]
|
|
|
+ ;; collapsed? not needed for db graphs
|
|
|
+ (when (not db-graph?)
|
|
|
+ (when-not (or built-in-query? dsl-query?)
|
|
|
+ (when collapsed?
|
|
|
+ (editor-handler/collapse-block! (or (:block/uuid (:block config))
|
|
|
+ (:block/uuid config)))))))
|
|
|
+ (assoc state :query-error (atom nil)))}
|
|
|
+ [state {:keys [built-in-query?] :as config}
|
|
|
+ {:keys [query collapsed?] :as q}]
|
|
|
(ui/catch-error
|
|
|
(ui/block-error "Query Error:" {:content (:query q)})
|
|
|
- (ui/lazy-visible
|
|
|
- (fn []
|
|
|
- (custom-query* (merge config
|
|
|
- {:db-graph? (config/db-based-graph? (state/get-current-repo))
|
|
|
- :built-in-query? (built-in-custom-query? (:title q))})
|
|
|
- q))
|
|
|
- {:debug-id q})))
|
|
|
+ (let [*query-error (:query-error state)
|
|
|
+ db-graph? (config/db-based-graph? (state/get-current-repo))
|
|
|
+ current-block-uuid (or (:block/uuid (:block config))
|
|
|
+ (:block/uuid config))
|
|
|
+ current-block (db/entity [:block/uuid current-block-uuid])
|
|
|
+ ;; Get query result
|
|
|
+ collapsed?' (calculate-collapsed? current-block current-block-uuid {:collapsed? (if-not db-graph? collapsed? false)})
|
|
|
+ built-in-collapsed? (and collapsed? built-in-query?)
|
|
|
+ table? (when-not db-graph?
|
|
|
+ (or (get-in current-block [:block/properties :query-table])
|
|
|
+ (and (string? query) (string/ends-with? (string/trim query) "table"))))
|
|
|
+ config' (assoc config
|
|
|
+ :db-graph? db-graph?
|
|
|
+ :current-block current-block
|
|
|
+ :current-block-uuid current-block-uuid
|
|
|
+ :collapsed? collapsed?'
|
|
|
+ :table? table?
|
|
|
+ :built-in-query? (built-in-custom-query? (:title q))
|
|
|
+ :*query-error *query-error)]
|
|
|
+ (when (or built-in-collapsed? (not collapsed?'))
|
|
|
+ (trigger-custom-query config' q)))))
|