From 43d137cd56ee8f31dfdee5a5052efa1450cf04c6 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Wed, 19 Apr 2023 15:51:28 -0400 Subject: [PATCH] Fix sorting by page column for block queries Fix #9055 --- src/main/frontend/components/query_table.cljs | 11 ++++++----- src/test/frontend/components/query_table_test.cljs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/main/frontend/components/query_table.cljs b/src/main/frontend/components/query_table.cljs index 2369418deb..a5b6324f50 100644 --- a/src/main/frontend/components/query_table.cljs +++ b/src/main/frontend/components/query_table.cljs @@ -28,7 +28,7 @@ (map #(medley/dissoc-in % ks) result) result))) -(defn- sort-by-fn [sort-by-column item] +(defn- sort-by-fn [sort-by-column item {:keys [page?]}] (case sort-by-column :created-at (:block/created-at item) @@ -37,7 +37,7 @@ :block (:block/content item) :page - (:block/name item) + (if page? (:block/name item) (get-in item [:block/page :block/name])) (get-in item [:block/properties sort-by-column]))) (defn- locale-compare @@ -47,11 +47,12 @@ (< x y) (.localeCompare (str x) (str y) (state/sub :preferred-language) #js {:numeric true}))) -(defn- sort-result [result {:keys [sort-by-column sort-desc? sort-nlp-date?]}] +(defn- sort-result [result {:keys [sort-by-column sort-desc? sort-nlp-date? page?]}] (if (some? sort-by-column) (let [comp-fn (if sort-desc? #(locale-compare %2 %1) locale-compare)] (sort-by (fn [item] - (block/normalize-block (sort-by-fn sort-by-column item) sort-nlp-date?)) + (block/normalize-block (sort-by-fn sort-by-column item {:page? page?}) + sort-nlp-date?)) comp-fn result)) result)) @@ -170,7 +171,7 @@ ;; Sort state needs to be in sync between final result and sortable title ;; as user needs to know if there result is sorted sort-state (get-sort-state current-block) - result' (sort-result result sort-state) + result' (sort-result result (assoc sort-state :page? page?)) property-separated-by-commas? (partial text/separated-by-commas? (state/get-config))] [:div.overflow-x-auto {:on-mouse-down (fn [e] (.stopPropagation e)) :style {:width "100%"} diff --git a/src/test/frontend/components/query_table_test.cljs b/src/test/frontend/components/query_table_test.cljs index 38889e6d7b..b32ddc70e5 100644 --- a/src/test/frontend/components/query_table_test.cljs +++ b/src/test/frontend/components/query_table_test.cljs @@ -30,6 +30,20 @@ {:sort-desc? false :sort-by-column :block} ["abc" "cde"] ["abc" "cde"])) + (testing "sort by page property" + (are [sort-options result sorted-result] + (= sorted-result + (#'query-table/sort-result result sort-options)) + ;; on page queries + {:sort-desc? true :sort-by-column :page :page? true} + (map #(hash-map :block/name %) ["abc" "cde"]) + (map #(hash-map :block/name %) ["cde" "abc"]) + + ;; on block queries + {:sort-desc? true :sort-by-column :page :page? false} + (map #(hash-map :block/page {:block/name %}) ["abc" "cde"]) + (map #(hash-map :block/page {:block/name %}) ["cde" "abc"]))) + (testing "sort by integer block property" (are [sort-state result sorted-result] (= (mapv #(hash-map :block/properties %) sorted-result)