From 3a7b3cb14bd4aa0b179fb222de11d95099df4cf0 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 5 Jan 2022 01:41:40 -0500 Subject: [PATCH] fix duplicate category bug --- .../tts_model_list/MultiDropdownSearch.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/fakeyou/src/v2/view/tts/tts_model_list/MultiDropdownSearch.tsx b/fakeyou/src/v2/view/tts/tts_model_list/MultiDropdownSearch.tsx index 0a4d3354fb..a4d4f62bda 100644 --- a/fakeyou/src/v2/view/tts/tts_model_list/MultiDropdownSearch.tsx +++ b/fakeyou/src/v2/view/tts/tts_model_list/MultiDropdownSearch.tsx @@ -37,7 +37,7 @@ export function MultiDropdownSearch(props: Props) { // A TTS voice is attached to every category up the tree from the leaf. // We recursively build this, 1) to ensure we can access a voice at all levels // of specificity, and 2) to prune empty categories. - const [ttsModelsByCategoryToken, setTtsModelsByCategoryToken] = useState>(new Map()); + const [ttsModelsByCategoryToken, setTtsModelsByCategoryToken] = useState>>(new Map()); // TODO: Handle empty category list useEffect(() => { @@ -61,6 +61,7 @@ export function MultiDropdownSearch(props: Props) { let categoryTokenToAllAncestorTokens : Map> = new Map(); // N * M with memoization should't be too bad here. + // Also note that the models should be lexographically sorted by name. allTtsModels.forEach(ttsModel => { if (ttsModel.category_tokens.length === 0) { // TODO: Attach to "uncategorized" special category @@ -73,12 +74,12 @@ export function MultiDropdownSearch(props: Props) { categoryTokenToAllAncestorTokens.set(categoryToken, ancestors); } ancestors.forEach(categoryToken => { - let models = categoriesToTtsModelTokens.get(categoryToken); + let models : Set = categoriesToTtsModelTokens.get(categoryToken); if (models === undefined) { - models = []; + models = new Set(); categoriesToTtsModelTokens.set(categoryToken, models); } - models.push(ttsModel); + models.add(ttsModel); }) }); }); @@ -161,7 +162,7 @@ export function MultiDropdownSearch(props: Props) { currentDropdownCategories.forEach(category => { const models = ttsModelsByCategoryToken.get(category.category_token); - if (models === undefined || models.length === 0) { + if (models === undefined || models.size === 0) { return; // If there are no models at the leaves, skip } dropdownOptions.push( @@ -192,16 +193,16 @@ export function MultiDropdownSearch(props: Props) { const leafiestCategory = selectedCategories[selectedCategories.length - 1]; - let leafiestCategoryModels : TtsModelListItem[] = []; + let leafiestCategoryModels : Set = new Set(); if (leafiestCategory !== undefined) { - leafiestCategoryModels = ttsModelsByCategoryToken.get(leafiestCategory.category_token) || []; + leafiestCategoryModels = ttsModelsByCategoryToken.get(leafiestCategory.category_token) || new Set(); } else { - leafiestCategoryModels = allTtsModels; + leafiestCategoryModels = new Set(allTtsModels); } let modelDropdown = (