diff options
author | Thomas F. K. Jorna <[email protected]> | 2022-09-27 16:32:13 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2022-09-27 16:32:13 +0200 |
commit | 6f783297f37e95d083b32a7160afcb55e309e883 (patch) | |
tree | af9fdc3db50ecbc61036d88c81eeea3703ff17cc /util/findNthNeighbour.ts | |
parent | 16a8da9e5107833032893bc4c0680b368ac423ac (diff) | |
parent | 1936250b99b8747d841edd83002ed20ec12aa793 (diff) |
feat: add ability to add/remove nodes to/from the local graph from emacs
Adds the commands `org-roam-ui-add-to-local-graph` and `org-roam-ui-remove-from-local-graph`
Diffstat (limited to 'util/findNthNeighbour.ts')
-rw-r--r-- | util/findNthNeighbour.ts | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/util/findNthNeighbour.ts b/util/findNthNeighbour.ts new file mode 100644 index 0000000..d48adbc --- /dev/null +++ b/util/findNthNeighbour.ts @@ -0,0 +1,42 @@ +import { LinksByNodeId } from '../pages' +import { normalizeLinkEnds } from './normalizeLinkEnds' + +export const findNthNeighbors = ({ + ids, + excludedIds, + n, + linksByNodeId, +}: { + ids: string[] + excludedIds: string[] + n: number + linksByNodeId: LinksByNodeId +}) => { + let queue = [ids[0]] + let todo: string[] = [] + const completed = [ids[0]] + Array.from({ length: n }, () => { + queue.forEach((node) => { + const links = linksByNodeId[node as string] ?? [] + links.forEach((link) => { + const [sourceId, targetId] = normalizeLinkEnds(link) + if (excludedIds.some((id) => [sourceId, targetId].includes(id))) { + return + } + if (!completed.includes(sourceId)) { + todo.push(sourceId) + return + } + if (!completed.includes(targetId)) { + todo.push(targetId) + return + } + return + }) + }) + queue = todo + todo.forEach((neighbor) => neighbor && completed.push(neighbor)) + todo = [] + }) + return completed +} |