diff --git a/components/Forms/BookingWidget/FormContent/Search/index.tsx b/components/Forms/BookingWidget/FormContent/Search/index.tsx index 92b2edfc4..2fc7f0bb7 100644 --- a/components/Forms/BookingWidget/FormContent/Search/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Search/index.tsx @@ -13,6 +13,7 @@ import { useIntl } from "react-intl" import SkeletonShimmer from "@/components/SkeletonShimmer" import Caption from "@/components/TempDesignSystem/Text/Caption" +import isValidJson from "@/utils/isValidJson" import Input from "../Input" import { init, localStorageKey, reducer, sessionStorageKey } from "./reducer" @@ -129,12 +130,17 @@ export default function Search({ locations, handlePressEnter }: SearchProps) { typeof window !== "undefined" ? localStorage.getItem(localStorageKey) : null - if (searchData || searchHistory) { dispatch({ payload: { - searchData: searchData ? JSON.parse(searchData) : undefined, - searchHistory: searchHistory ? JSON.parse(searchHistory) : null, + searchData: + isValidJson(searchData) && searchData + ? JSON.parse(searchData) + : undefined, + searchHistory: + isValidJson(searchHistory) && searchHistory + ? JSON.parse(searchHistory) + : null, }, type: ActionType.SET_STORAGE_DATA, }) diff --git a/utils/isValidJson.ts b/utils/isValidJson.ts new file mode 100644 index 000000000..498cff121 --- /dev/null +++ b/utils/isValidJson.ts @@ -0,0 +1,9 @@ +export default function isValidJson(value: string | null | undefined): boolean { + if (!value || value === "undefined") return false + try { + JSON.parse(value) + return true + } catch { + return false + } +}