mirror of
https://github.com/logseq/logseq.git
synced 2026-05-23 20:24:15 +00:00
43 lines
1.6 KiB
Clojure
43 lines
1.6 KiB
Clojure
(ns frontend.handler.graph
|
|
"Provides util handler fns for graph view"
|
|
(:require [frontend.state :as state]
|
|
[frontend.storage :as storage]))
|
|
|
|
(defn n-hops
|
|
"Get all nodes that are n hops from nodes (a collection of node ids)"
|
|
[{:keys [links] :as graph} nodes level]
|
|
(let [search-nodes (fn [forward?]
|
|
(let [links (group-by (if forward? :source :target) links)]
|
|
(loop [nodes nodes
|
|
level level]
|
|
(if (zero? level)
|
|
nodes
|
|
(recur (distinct (apply concat nodes
|
|
(map
|
|
(fn [id]
|
|
(->> (get links id) (map (if forward? :target :source))))
|
|
nodes)))
|
|
(dec level))))))
|
|
nodes (concat (search-nodes true) (search-nodes false))
|
|
nodes (set nodes)]
|
|
(update graph :nodes
|
|
(fn [full-nodes]
|
|
(filter (fn [node] (contains? nodes (:id node)))
|
|
full-nodes)))))
|
|
|
|
(defn settle-metadata-to-local!
|
|
[m]
|
|
(when-let [repo (state/get-current-repo)]
|
|
(try
|
|
(let [k :ls-graphs-metadata
|
|
ret (or (storage/get k) {})
|
|
ret (update ret repo merge m {:_v (js/Date.now)})]
|
|
(storage/set k ret))
|
|
(catch js/Error e
|
|
(js/console.warn e)))))
|
|
|
|
(defn get-metadata-local
|
|
[]
|
|
(let [k :ls-graphs-metadata]
|
|
(storage/get k)))
|