29 lines
870 B
TypeScript
29 lines
870 B
TypeScript
export const customQuerySerializer = (queryParams: any) => {
|
|
const search: string[] = [];
|
|
|
|
const serialize = (name: string, value: any) => {
|
|
if (value === undefined || value === null) return;
|
|
|
|
if (Array.isArray(value)) {
|
|
value.forEach((v, i) => {
|
|
serialize(`${name}[${i}]`, v);
|
|
});
|
|
} else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {
|
|
Object.entries(value).forEach(([key, v]) => {
|
|
serialize(`${name}[${key}]`, v);
|
|
});
|
|
} else {
|
|
const val = value instanceof Date ? value.toISOString() : String(value);
|
|
search.push(`${encodeURIComponent(name)}=${encodeURIComponent(val)}`);
|
|
}
|
|
};
|
|
|
|
if (queryParams && typeof queryParams === 'object') {
|
|
for (const key in queryParams) {
|
|
serialize(key, queryParams[key]);
|
|
}
|
|
}
|
|
|
|
return search.join('&');
|
|
};
|