From 286e78862936447c2a42851b6f83a3b93aa5cd0c Mon Sep 17 00:00:00 2001 From: YuHyun Date: Sat, 30 Dec 2023 00:07:24 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20createLocalStorage,=20createSessionStor?= =?UTF-8?q?age=20=EC=9C=A0=ED=8B=B8=20=ED=95=A8=EC=88=98=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [#304] --- packages/frontend/src/utils/webStorage.ts | 43 +++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 packages/frontend/src/utils/webStorage.ts diff --git a/packages/frontend/src/utils/webStorage.ts b/packages/frontend/src/utils/webStorage.ts new file mode 100644 index 00000000..e896f722 --- /dev/null +++ b/packages/frontend/src/utils/webStorage.ts @@ -0,0 +1,43 @@ +export function createLocalStorage(key: string, defaultValue: Value) { + return createStorage({ type: "localStorage", key, defaultValue }); +} + +export function createSessionStorage(key: string, defaultValue: Value) { + return createStorage({ type: "sessionStorage", key, defaultValue }); +} + +type CreateStorageOptions = { + type: "localStorage" | "sessionStorage"; + key: string; + defaultValue: Value; +}; + +function createStorage({ + type, + key, + defaultValue, +}: CreateStorageOptions) { + const getItem = (): Value => { + const value = window?.[type].getItem(key); + + if (value === null) return defaultValue; + + try { + const parsedValue = JSON.parse(value); + return parsedValue as Value; + } catch (error) { + return defaultValue; + } + }; + + const setItem = (value: Value) => + window?.[type].setItem(key, JSON.stringify(value)); + + const removeItem = () => window?.[type].removeItem(key); + + return { + getItem, + setItem, + removeItem, + }; +}