diff --git a/packages/core/collections/tags.js b/packages/core/collections/tags.js index 920f4d41b..6742eee37 100644 --- a/packages/core/collections/tags.js +++ b/packages/core/collections/tags.js @@ -6,7 +6,9 @@ import setManipulator from "../utils/set"; export default class Tags extends Collection { tag(id) { - const tagItem = this.all.find((t) => t.id === id || t.title === id); + const tagItem = this._collection + .getItems() + .find((t) => t.id === id || t.title === id); return tagItem; } @@ -63,7 +65,11 @@ export default class Tags extends Collection { } get all() { - return this._collection.getItems(); + return this._collection.getItems(undefined, (item) => { + const alias = this.alias(item.id); + if (alias) item.alias = alias; + return item; + }); } async remove(tagId) { diff --git a/packages/core/database/cached-collection.js b/packages/core/database/cached-collection.js index 849f4c25f..c6d5f4365 100644 --- a/packages/core/database/cached-collection.js +++ b/packages/core/database/cached-collection.js @@ -47,11 +47,12 @@ export default class CachedCollection extends IndexedCollection { return Array.from(this.map.values()); } - getItems(sortFn = (u) => u.dateCreated) { + getItems(sortFn = (u) => u.dateCreated, manipulate = (item) => item) { let items = []; this.map.forEach((value) => { if (!value || value.deleted || !value.id) return; - items[items.length] = value; + value = manipulate ? manipulate(value) : value; + items.push(value); }); return sort(items).desc(sortFn); } diff --git a/packages/core/utils/grouping.js b/packages/core/utils/grouping.js index 588d0c015..86e05270d 100644 --- a/packages/core/utils/grouping.js +++ b/packages/core/utils/grouping.js @@ -13,14 +13,15 @@ const getSortSelectors = (options) => [ { desc: (t) => t.pinned }, { [options.sortDirection]: (item) => { - if (options.sortBy === "title") return getFirstCharacter(item); + if (options.sortBy === "title") + return getFirstCharacter(item.alias || item.title); return item[options.sortBy]; }, }, ]; const KEY_SELECTORS = { - abc: (item) => getFirstCharacter(item), + abc: (item) => getFirstCharacter(item.alias || item.title), month: (item, groupBy) => dayjs(item[groupBy]).format("MMMM"), week: (item, groupBy) => getWeekGroupFromTimestamp(item[groupBy]), year: (item, groupBy) => dayjs(item[groupBy]).year(), @@ -73,8 +74,9 @@ export function groupArray( return items; } -function getFirstCharacter(item) { - const title = item.title && item.title.trim(); - if (!title || title.length <= 0) return "-"; - return title[0].toUpperCase(); +function getFirstCharacter(str) { + if (!str) return "-"; + str = str.trim(); + if (str.length <= 0) return "-"; + return str[0].toUpperCase(); }