Mercurial > code > home > repos > streamed-graph
view src/layout/algorithm.ts @ 143:5adf79d4a9f4
release v0.11.0
author | drewp@bigasterisk.com |
---|---|
date | Mon, 08 May 2023 13:29:48 -0700 |
parents | 2e8fa3fec0c8 |
children |
line wrap: on
line source
import Immutable from "immutable"; export function addToValues<K, V>( imap: Immutable.Map<K, V[]>, key: K, newValue: V): Immutable.Map<K, V[]> { let cur = imap.get(key, undefined); let ret = imap; if (cur === undefined) { cur = []; ret = imap.set(key, cur); } cur.push(newValue); return ret; } export function multiColumnSort<T>( elems: T[], makeSortCols: (elem: T, index: number) => Array<number | string>): T[] { const tagged = elems.map((p, i) => { return { sort: makeSortCols(p, i), val: p }; }); tagged.sort((e1, e2) => { let index = 0; for (let k1 of e1.sort) { const k2 = e2.sort[index]; if (!Immutable.is(k1, k2)) { if (typeof k1 === "number") { if (typeof k2 === "number") { return k1 - k2; } else { throw new Error(`${k1} vs ${k2}`); } } else { return k1.localeCompare(k2 as string); } } index++; } return 0; }); return tagged.map((e) => e.val); }