fix: attach alias with tag for sorting/grouping

This commit is contained in:
thecodrr
2021-11-18 11:01:12 +05:00
parent 19f0e55362
commit 9ccb0fee12
3 changed files with 19 additions and 10 deletions

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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();
}