mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-23 15:09:33 +01:00
feat: improve notes grouping
this improves performance as well as removes the empty Pinned group array.
This commit is contained in:
@@ -2,7 +2,7 @@ import { groupBy } from "../utils";
|
||||
|
||||
test("groupBy should work", () => {
|
||||
let ret = groupBy([1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3], (x) => x.toString());
|
||||
expect(ret.length).toBe(16);
|
||||
expect(ret.length).toBe(15);
|
||||
expect(ret.some((i) => i.title === "1")).toBeTruthy();
|
||||
expect(ret.some((i) => i.title === "2")).toBeTruthy();
|
||||
expect(ret.some((i) => i.title === "3")).toBeTruthy();
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
import fastsort from "fast-sort";
|
||||
|
||||
export function groupBy(arr, key, sortSelector) {
|
||||
if (sortSelector) fastsort(arr).desc(sortSelector);
|
||||
if (sortSelector)
|
||||
fastsort(arr).by([{ desc: (t) => t.pinned }, { desc: sortSelector }]);
|
||||
|
||||
let groups = { Pinned: [] };
|
||||
let groups = new Map();
|
||||
arr.forEach((item) => {
|
||||
let groupTitle = item.pinned ? "Pinned" : key(item);
|
||||
let group = groups[groupTitle]
|
||||
? groups[groupTitle]
|
||||
: (groups[groupTitle] = []);
|
||||
group.push(item);
|
||||
let groupTitle = item.pinned ? "" : key(item);
|
||||
let arr = groups.get(groupTitle) || [];
|
||||
arr.push(item);
|
||||
groups.set(groupTitle, arr);
|
||||
});
|
||||
|
||||
let items = [];
|
||||
for (let group in groups) {
|
||||
items = [...items, { title: group, type: "header" }, ...groups[group]];
|
||||
}
|
||||
groups.forEach((groupItems, groupTitle) => {
|
||||
items.push({ title: groupTitle, type: "header" });
|
||||
groupItems.forEach((item) => items.push(item));
|
||||
});
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user