From 4bcc4f4b86b9023837c32f2a5ec6237fc7d4dd41 Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 12 Jan 2022 17:54:44 +0800 Subject: [PATCH] improve(marketplace): change sort-by to filter behavior from installed plugins --- src/main/frontend/components/plugins.cljs | 67 ++++++++++++++--------- src/main/frontend/components/plugins.css | 2 +- src/main/frontend/dicts.cljs | 4 ++ 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/main/frontend/components/plugins.cljs b/src/main/frontend/components/plugins.cljs index 7416c7ff5..4f9ec17f2 100644 --- a/src/main/frontend/components/plugins.cljs +++ b/src/main/frontend/components/plugins.cljs @@ -183,7 +183,7 @@ svg/folder) (when (and (not market?) unpacked?) - [:span.flex.justify-center.text-xs.text-red-500.pt-2 "unpacked"])] + [:span.flex.justify-center.text-xs.text-red-500.pt-2 (t :plugin/unpacked)])] [:div.r [:h3.head.text-xl.font-bold.pt-1.5 @@ -299,7 +299,7 @@ (rum/defc panel-control-tabs < rum/static [t search-key *search-key category *category - sort-by *sort-by selected-unpacked-pkg + sort-or-filter-by *sort-or-filter-by selected-unpacked-pkg market? develop-mode? reload-market-fn] (let [*search-ref (rum/create-ref)] @@ -351,38 +351,46 @@ :value (or search-key "")}]] - ;; sorter + ;; sorter & filter (ui/dropdown-with-links (fn [{:keys [toggle-fn]}] (ui/button - [:span (ui/icon "arrows-sort")] - :class (str (when-not (contains? #{:enabled :downloads} sort-by) "picked ") "sort-by") + [:span (ui/icon (if market? "arrows-sort" "filter"))] + :class (str (when-not (contains? #{:default :downloads} sort-or-filter-by) "picked ") "sort-or-filter-by") :on-click toggle-fn :intent "link")) - (let [aim-icon #(if (= sort-by %) "check" "circle")] + (let [aim-icon #(if (= sort-or-filter-by %) "check" "circle")] (if market? [{:title (t :plugin/downloads) - :options {:on-click #(reset! *sort-by :downloads)} + :options {:on-click #(reset! *sort-or-filter-by :downloads)} :icon (ui/icon (aim-icon :downloads))} {:title (t :plugin/stars) - :options {:on-click #(reset! *sort-by :stars)} + :options {:on-click #(reset! *sort-or-filter-by :stars)} :icon (ui/icon (aim-icon :stars))} {:title (str (t :plugin/title) " (A - Z)") - :options {:on-click #(reset! *sort-by :letters)} + :options {:on-click #(reset! *sort-or-filter-by :letters)} :icon (ui/icon (aim-icon :letters))}] - [{:title (t :plugin/enabled) - :options {:on-click #(reset! *sort-by :enabled)} + [{:title (t :plugin/all) + :options {:on-click #(reset! *sort-or-filter-by :default)} + :icon (ui/icon (aim-icon :default))} + + {:title (t :plugin/enabled) + :options {:on-click #(reset! *sort-or-filter-by :enabled)} :icon (ui/icon (aim-icon :enabled))} {:title (t :plugin/disabled) - :options {:on-click #(reset! *sort-by :disabled)} + :options {:on-click #(reset! *sort-or-filter-by :disabled)} :icon (ui/icon (aim-icon :disabled))} + {:title (t :plugin/unpacked) + :options {:on-click #(reset! *sort-or-filter-by :unpacked)} + :icon (ui/icon (aim-icon :unpacked))} + {:title (t :plugin/update-available) - :options {:on-click #(reset! *sort-by :update-available)} + :options {:on-click #(reset! *sort-or-filter-by :update-available)} :icon (ui/icon (aim-icon :update-available))}])) {}) @@ -520,7 +528,7 @@ (rum/defcs installed-plugins < rum/static rum/reactive (rum/local "" ::search-key) - (rum/local :enabled ::sort-by) ;; enabled / disabled / letters / update-available + (rum/local :default ::filter-by) ;; default / enabled / disabled / unpacked / update-available (rum/local :plugins ::category) [state] (let [installed-plugins (state/sub :plugin/installed-plugins) @@ -529,13 +537,24 @@ develop-mode? (state/sub :ui/developer-mode?) selected-unpacked-pkg (state/sub :plugin/selected-unpacked-pkg) coming-updates (state/sub :plugin/updates-coming) - *sort-by (::sort-by state) + *filter-by (::filter-by state) *search-key (::search-key state) *category (::category state) + default-filter-by? (= :default @*filter-by) filtered-plugins (when (seq installed-plugins) (if (= @*category :themes) (filter #(:theme %) installed-plugins) (filter #(not (:theme %)) installed-plugins))) + filtered-plugins (if-not default-filter-by? + (filter (fn [it] + (let [disabled (get-in it [:settings :disabled])] + (case @*filter-by + :enabled (not disabled) + :disabled disabled + :unpacked (not (:iir it)) + :update-available (state/plugin-update-available? (:id it)) + true))) filtered-plugins) + filtered-plugins) filtered-plugins (if-not (string/blank? @*search-key) (if-let [author (and (string/starts-with? @*search-key "@") (subs @*search-key 1))] @@ -545,15 +564,13 @@ :limit 30 :extract-fn :name)) filtered-plugins) - sorted-plugins (->> filtered-plugins - (reduce #(let [k (if (get-in %2 [:settings :disabled]) 1 0) - k (if (= @*sort-by :disabled) (if (zero? k) 1 0) k)] - (update %1 k conj %2)) [[] []]) - (#(update % 0 (fn [coll] - (if (= @*sort-by :update-available) - (sort-by (fn [it] (if (state/plugin-update-available? (:id it)) -1 1)) coll) - (sort-by :iir coll))))) - (flatten))] + sorted-plugins (if default-filter-by? + (->> filtered-plugins + (reduce #(let [k (if (get-in %2 [:settings :disabled]) 1 0)] + (update %1 k conj %2)) [[] []]) + (#(update % 0 (fn [coll] (sort-by :iir coll)))) + (flatten)) + filtered-plugins)] (rum/with-context [[t] i18n/*tongue-context*] @@ -563,7 +580,7 @@ t @*search-key *search-key @*category *category - @*sort-by *sort-by + @*filter-by *filter-by selected-unpacked-pkg false develop-mode? nil) diff --git a/src/main/frontend/components/plugins.css b/src/main/frontend/components/plugins.css index 1bbaa47e3..2280309fe 100644 --- a/src/main/frontend/components/plugins.css +++ b/src/main/frontend/components/plugins.css @@ -105,7 +105,7 @@ background: transparent; } - &.sort-by, &.more-do { + &.sort-or-filter-by, &.more-do { padding: 0 4px; } diff --git a/src/main/frontend/dicts.cljs b/src/main/frontend/dicts.cljs index fbbf449fe..d82357cc9 100644 --- a/src/main/frontend/dicts.cljs +++ b/src/main/frontend/dicts.cljs @@ -362,6 +362,8 @@ :plugin/downloads "Downloads" :plugin/stars "Stars" :plugin/title "Title" + :plugin/all "All" + :plugin/unpacked "Unpacked" :plugin/delete-alert "Are you sure uninstall plugin [{1}]?" :plugin/open-settings "Open settings" :plugin/open-package "Open package" @@ -1145,6 +1147,8 @@ :plugin/downloads "下载量" :plugin/stars "收藏数" :plugin/title "名称" + :plugin/all "全部" + :plugin/unpacked "未打包" :plugin/open-settings "打开配置项" :plugin/open-package "打开包目录" :plugin/load-unpacked "手动载入插件"