diff --git a/plugin/kintone-addins/src/actions/cascading-dropdown-selectors.ts b/plugin/kintone-addins/src/actions/cascading-dropdown-selectors.ts index e671ac2..2923aa2 100644 --- a/plugin/kintone-addins/src/actions/cascading-dropdown-selectors.ts +++ b/plugin/kintone-addins/src/actions/cascading-dropdown-selectors.ts @@ -71,11 +71,11 @@ namespace DropDownConfig { const hash = await calculateHash(records, fields); const storageKey = `dropdown_dictionary::${props.dropDownApp.id}_${hash}`; + const lsDictionary = getFromLocalStorage(storageKey); // ローカルストレージから辞書を取得しようとし、存在しない場合は再構築 dictionary = - getFromLocalStorage(storageKey) || - buildDropdownDictionary(records, props.fieldList); - if (!getFromLocalStorage(storageKey)) { + lsDictionary || buildDropdownDictionary(records, props.fieldList); + if (!lsDictionary) { saveToLocalStorage(storageKey, dictionary); } } catch (error) { @@ -157,9 +157,16 @@ namespace DropDownConfig { // ローカルストレージから辞書を取得 const getFromLocalStorage = (key: string): DropdownDictionary | null => { const data = localStorage.getItem(key); + clearUpDictionary(key); return data ? JSON.parse(data) : null; }; + const clearUpDictionary = (key: string) => { + Object.keys(localStorage) + .filter((k) => k.startsWith("dropdown_dictionary::") && !k.endsWith(key)) + .forEach((k) => localStorage.removeItem(k)); + }; + // 辞書をローカルストレージに保存 const saveToLocalStorage = (key: string, data: DropdownDictionary): void => { localStorage.setItem(key, JSON.stringify(data));