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", () => {
|
test("groupBy should work", () => {
|
||||||
let ret = groupBy([1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3], (x) => x.toString());
|
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 === "1")).toBeTruthy();
|
||||||
expect(ret.some((i) => i.title === "2")).toBeTruthy();
|
expect(ret.some((i) => i.title === "2")).toBeTruthy();
|
||||||
expect(ret.some((i) => i.title === "3")).toBeTruthy();
|
expect(ret.some((i) => i.title === "3")).toBeTruthy();
|
||||||
|
|||||||
@@ -1,21 +1,22 @@
|
|||||||
import fastsort from "fast-sort";
|
import fastsort from "fast-sort";
|
||||||
|
|
||||||
export function groupBy(arr, key, sortSelector) {
|
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) => {
|
arr.forEach((item) => {
|
||||||
let groupTitle = item.pinned ? "Pinned" : key(item);
|
let groupTitle = item.pinned ? "" : key(item);
|
||||||
let group = groups[groupTitle]
|
let arr = groups.get(groupTitle) || [];
|
||||||
? groups[groupTitle]
|
arr.push(item);
|
||||||
: (groups[groupTitle] = []);
|
groups.set(groupTitle, arr);
|
||||||
group.push(item);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let items = [];
|
let items = [];
|
||||||
for (let group in groups) {
|
groups.forEach((groupItems, groupTitle) => {
|
||||||
items = [...items, { title: group, type: "header" }, ...groups[group]];
|
items.push({ title: groupTitle, type: "header" });
|
||||||
}
|
groupItems.forEach((item) => items.push(item));
|
||||||
|
});
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user