{"version":3,"file":"useSessionStorageState.cjs","names":["_react","require","_useMountLifecycleEffect","getSessionStorageValue","key","sessionStorageValue","window","sessionStorage","getItem","JSON","parse","exports","useSessionStorageState","initialState","Error","sessionState","useMemo","setSessionState","useCallback","value","sessionStorageState","stringify","setItem","localState","setLocalState","useState","useEffect","onUpdate","useMountLifecycleEffect"],"sources":["../../src/useSessionStorageState.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { useMountLifecycleEffect } from \"./useMountLifecycleEffect.js\";\n\nexport const getSessionStorageValue = <Value>(key: string): Value | null => {\n  const sessionStorageValue = window.sessionStorage.getItem(key);\n\n  try {\n    if (typeof sessionStorageValue === \"string\") {\n      return JSON.parse(sessionStorageValue) as Value;\n    }\n\n    return null;\n  } catch {\n    if (typeof sessionStorageValue === \"string\") {\n      return sessionStorageValue as Value;\n    }\n\n    return null;\n  }\n};\n\nexport const useSessionStorageState = <Value>({\n  initialState,\n  key,\n}: {\n  initialState: Value;\n  key: string;\n}) => {\n  if (!key) {\n    throw new Error(\"You must pass a value for `key`.\");\n  }\n\n  const sessionState = useMemo(() => getSessionStorageValue<Value>(key), [key]);\n\n  const setSessionState = useCallback(\n    (value: Value) => {\n      const sessionStorageState =\n        typeof value === \"undefined\" ? \"\" : JSON.stringify(value);\n\n      window.sessionStorage.setItem(key, sessionStorageState);\n    },\n    [key],\n  );\n\n  const [localState, setLocalState] = useState<Value>(\n    () => sessionState ?? initialState,\n  );\n\n  // This keeps session storage's state based on local state.\n  useEffect(() => {\n    setSessionState(localState);\n  }, [localState, setSessionState]);\n\n  // This updates when `key` is updated.\n  const onUpdate = useCallback(() => {\n    setLocalState(sessionState ?? initialState);\n  }, [initialState, sessionState]);\n\n  useMountLifecycleEffect({\n    onUpdate,\n  });\n\n  return {\n    sessionState: localState,\n    setSessionState: setLocalState,\n  };\n};\n"],"mappings":";;;;;;AAYA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,wBAAA,GAAAD,OAAA;AAdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMO,MAAME,sBAAsB,GAAWC,GAAW,IAAmB;EAC1E,MAAMC,mBAAmB,GAAGC,MAAM,CAACC,cAAc,CAACC,OAAO,CAACJ,GAAG,CAAC;EAE9D,IAAI;IACF,IAAI,OAAOC,mBAAmB,KAAK,QAAQ,EAAE;MAC3C,OAAOI,IAAI,CAACC,KAAK,CAACL,mBAAmB,CAAC;IACxC;IAEA,OAAO,IAAI;EACb,CAAC,CAAC,MAAM;IACN,IAAI,OAAOA,mBAAmB,KAAK,QAAQ,EAAE;MAC3C,OAAOA,mBAAmB;IAC5B;IAEA,OAAO,IAAI;EACb;AACF,CAAC;AAACM,OAAA,CAAAR,sBAAA,GAAAA,sBAAA;AAEK,MAAMS,sBAAsB,GAAGA,CAAQ;EAC5CC,YAAY;EACZT;AAIF,CAAC,KAAK;EACJ,IAAI,CAACA,GAAG,EAAE;IACR,MAAM,IAAIU,KAAK,CAAC,kCAAkC,CAAC;EACrD;EAEA,MAAMC,YAAY,GAAG,IAAAC,cAAO,EAAC,MAAMb,sBAAsB,CAAQC,GAAG,CAAC,EAAE,CAACA,GAAG,CAAC,CAAC;EAE7E,MAAMa,eAAe,GAAG,IAAAC,kBAAW,EAChCC,KAAY,IAAK;IAChB,MAAMC,mBAAmB,GACvB,OAAOD,KAAK,KAAK,WAAW,GAAG,EAAE,GAAGV,IAAI,CAACY,SAAS,CAACF,KAAK,CAAC;IAE3Db,MAAM,CAACC,cAAc,CAACe,OAAO,CAAClB,GAAG,EAAEgB,mBAAmB,CAAC;EACzD,CAAC,EACD,CAAChB,GAAG,CACN,CAAC;EAED,MAAM,CAACmB,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAC1C,MAAMV,YAAY,IAAIF,YACxB,CAAC;EAGD,IAAAa,gBAAS,EAAC,MAAM;IACdT,eAAe,CAACM,UAAU,CAAC;EAC7B,CAAC,EAAE,CAACA,UAAU,EAAEN,eAAe,CAAC,CAAC;EAGjC,MAAMU,QAAQ,GAAG,IAAAT,kBAAW,EAAC,MAAM;IACjCM,aAAa,CAACT,YAAY,IAAIF,YAAY,CAAC;EAC7C,CAAC,EAAE,CAACA,YAAY,EAAEE,YAAY,CAAC,CAAC;EAEhC,IAAAa,gDAAuB,EAAC;IACtBD;EACF,CAAC,CAAC;EAEF,OAAO;IACLZ,YAAY,EAAEQ,UAAU;IACxBN,eAAe,EAAEO;EACnB,CAAC;AACH,CAAC;AAACb,OAAA,CAAAC,sBAAA,GAAAA,sBAAA","ignoreList":[]}