diff --git a/packages/core/__tests__/utils.test.js b/packages/core/__tests__/utils.test.js index 1cd83682c..4ee3bd501 100644 --- a/packages/core/__tests__/utils.test.js +++ b/packages/core/__tests__/utils.test.js @@ -1,25 +1,20 @@ -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(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(); -}); +import { groupArray } from "../utils/grouping"; test("group alphabetically", () => { - const sortedAlphabet = "abcdefghijlmnopqrstuvwxyz".split(""); - const alphabet = "nopqrstuvwxyzabcdefghijlm".split(""); - let ret = groupBy( - alphabet, - (x) => x[0], - (x) => x[0], - "asc" - ).filter((v) => v.title); + const sortedAlphabet = "abcdefghijlmnopqrstuvwxyz" + .split("") + .map((a) => ({ title: a })); + const alphabet = "nopqrstuvwxyzabcdefghijlm" + .split("") + .map((a) => ({ title: a, item: true })); + let ret = groupArray(alphabet, { + groupId: "abc", + sortDirection: "asc", + sortBy: "title", + }).filter((v) => !v.item); expect( sortedAlphabet.every((alpha, index) => { - return ret[index].title === alpha; + return ret[index].title === alpha.title.toUpperCase(); }) ).toBeTruthy(); }); diff --git a/packages/core/__tests__/utils/index.js b/packages/core/__tests__/utils/index.js index 00db71e4b..c36430bd3 100644 --- a/packages/core/__tests__/utils/index.js +++ b/packages/core/__tests__/utils/index.js @@ -1,6 +1,7 @@ import DB from "../../api"; import StorageInterface from "../../__mocks__/storage.mock"; import { getLastWeekTimestamp } from "../../utils/date"; +import { groupArray } from "../../utils/grouping"; const TEST_NOTEBOOK = { title: "Test Notebook", @@ -54,7 +55,12 @@ const groupedTest = (type) => title: "Some title and title title", dateCreated: getLastWeekTimestamp() - 604800000 * 2, }); - let grouped = db.notes.group(type); + let grouped = groupArray(db.notes.all, { + groupId: type, + sortDirection: "desc", + sortBy: "dateCreated", + groupBy: "dateCreated", + }); expect(grouped.length).toBeGreaterThan(0); expect(grouped.some((i) => i.type === "header")).toBe(true); }); diff --git a/packages/core/api/settings.js b/packages/core/api/settings.js index b673b0e24..f74d47723 100644 --- a/packages/core/api/settings.js +++ b/packages/core/api/settings.js @@ -27,7 +27,7 @@ class Settings { } async merge(item) { - if (this.settings.dateEdited > (await this._db.lastSynced())) { + if (this._settings.dateEdited > (await this._db.lastSynced())) { this._settings.pins = setManipulator.union( this._settings.pins, item.pins diff --git a/packages/core/utils/grouping.js b/packages/core/utils/grouping.js index c74b0615b..0f462d754 100644 --- a/packages/core/utils/grouping.js +++ b/packages/core/utils/grouping.js @@ -42,8 +42,9 @@ const KEY_SELECTORS = { * @returns Grouped array */ export function groupArray(array, options) { - const keySelector = KEY_SELECTORS[options.groupId]; - if (sortSelector) fastsort(array).by(getSortSelectors(options)); + const keySelector = KEY_SELECTORS[options.groupId || "default"]; + if (options.sortBy && options.sortDirection) + fastsort(array).by(getSortSelectors(options)); let groups = new Map(); array.forEach((item) => {