mirror of
https://github.com/logseq/logseq.git
synced 2026-05-25 13:14:39 +00:00
enhance(ux): weighted sorting for the marketplace plugins
This commit is contained in:
@@ -769,23 +769,25 @@
|
||||
pkgs (get grouped-pkgs false)
|
||||
;; calculate weight
|
||||
[key pkgs] (if default?
|
||||
(let [decay-factor 0.01
|
||||
(let [decay-factor 0.001
|
||||
download-weight 0.8
|
||||
star-weight 0.2]
|
||||
(letfn [(normalize [vals val]
|
||||
(let [min-val (apply min vals)
|
||||
max-val (apply max vals)]
|
||||
(if (= max-val min-val) 1
|
||||
(/ (- val min-val) (- max-val val)))))
|
||||
(if (= max-val min-val) 0
|
||||
(/ (- val min-val) (- max-val min-val)))))
|
||||
(time-diff-in-days [ts]
|
||||
(let [time-diff (- (js/Date.now) ts)]
|
||||
(when-let [time-diff (and (number? ts) (- (js/Date.now) ts))]
|
||||
(/ time-diff (* 1000 60 60 24))))]
|
||||
[:weight
|
||||
(let [all-downloads (map :downloads pkgs)
|
||||
all-stars (map :stars pkgs)]
|
||||
(let [all-downloads (->> (map :downloads pkgs) (remove #(not (number? %))))
|
||||
all-stars (->> (map :stars pkgs) (remove #(not (number? %))))]
|
||||
(->> pkgs
|
||||
(map (fn [{:keys [downloads stars latestAt] :as pkg}]
|
||||
(let [days-since-latest (time-diff-in-days latestAt)
|
||||
(let [downloads (if (number? downloads) downloads 1)
|
||||
stars (if (number? stars) stars 1)
|
||||
days-since-latest (time-diff-in-days latestAt)
|
||||
decay (js/Math.exp (* -1 decay-factor days-since-latest))
|
||||
normalized-downloads (normalize all-downloads downloads)
|
||||
normalize-stars (normalize all-stars stars)
|
||||
|
||||
Reference in New Issue
Block a user