sub-task/ SW-695 Prefill Guests data in booking widget
This commit is contained in:
33
utils/url.ts
33
utils/url.ts
@@ -9,3 +9,36 @@ export function removeTrailingSlash(pathname: string) {
|
||||
}
|
||||
return pathname
|
||||
}
|
||||
|
||||
export function getFormattedUrlQueryParams(
|
||||
searchParams: URLSearchParams,
|
||||
dataTypes: Record<string, unknown>
|
||||
) {
|
||||
const searchParamsObject: Record<string, unknown> = Array.from(
|
||||
searchParams.entries()
|
||||
).reduce<Record<string, unknown>>(
|
||||
(acc, [key, value]) => {
|
||||
const keys = key.replace(/\]/g, "").split(/\[|\./) // Split keys by '[' or '.'
|
||||
keys.reduce((nestedAcc, k, i) => {
|
||||
if (i === keys.length - 1) {
|
||||
if (dataTypes[k] == "number") {
|
||||
;(nestedAcc as Record<string, unknown>)[k] = Number(value)
|
||||
} else if (dataTypes[k] == "boolean") {
|
||||
;(nestedAcc as Record<string, unknown>)[k] =
|
||||
value.toLowerCase() === "true"
|
||||
} else {
|
||||
;(nestedAcc as Record<string, unknown>)[k] = value
|
||||
}
|
||||
} else {
|
||||
if (!nestedAcc[k]) {
|
||||
nestedAcc[k] = isNaN(Number(keys[i + 1])) ? {} : [] // Initialize as object or array
|
||||
}
|
||||
}
|
||||
return nestedAcc[k] as Record<string, unknown>
|
||||
}, acc)
|
||||
return acc
|
||||
},
|
||||
{} as Record<string, unknown>
|
||||
)
|
||||
return searchParamsObject
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user