From 577f49ab6e1fd9cd8007804a13dea1471ee2fb1f Mon Sep 17 00:00:00 2001 From: Zero~Informatique Date: Fri, 3 Apr 2020 03:42:35 +0200 Subject: viewer: tag categories implementation GitHub: Resolves #29 --- viewer/src/services/indexfactory.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'viewer/src/services/indexfactory.ts') diff --git a/viewer/src/services/indexfactory.ts b/viewer/src/services/indexfactory.ts index a31f3ef..466b509 100644 --- a/viewer/src/services/indexfactory.ts +++ b/viewer/src/services/indexfactory.ts @@ -112,4 +112,23 @@ export default class IndexFactory { if (strict) return node.tagfiltered === filter; return node.tagfiltered.includes(filter) } + + // --- + + public static generateCategories(tagsIndex: Tag.Index, tags?: Gallery.RawTag[]): Tag.Category[] { + if (!tags?.length) return [{ tag: "", index: tagsIndex }]; + + const tagsCategories: Tag.Category[] = []; + const tagsRemaining = new Map(Object.entries(tagsIndex)); + tags + .map(tag => ({ tag, index: tagsIndex[tag]?.children })) + .filter(category => category.index && Object.keys(category.index).length) + .forEach(category => { + tagsCategories.push(category); + tagsRemaining.delete(category.tag); + Object.values(category.index).map(node => node.tag).forEach(tag => tagsRemaining.delete(tag)); + }); + tagsCategories.push({ tag: "", index: Object.fromEntries(tagsRemaining) }); + return tagsCategories; + } } -- cgit v1.2.3