35 lines
904 B
TypeScript
35 lines
904 B
TypeScript
export type FilterValue =
|
|
| string
|
|
| {
|
|
operator?: string;
|
|
value: string;
|
|
};
|
|
|
|
export const buildFilterParam = (filters: Record<string, FilterValue>) => {
|
|
const filterExpressions: string[] = [];
|
|
|
|
for (const [key, filterValue] of Object.entries(filters)) {
|
|
if (!filterValue) continue;
|
|
|
|
let operator = "==";
|
|
let value: string;
|
|
|
|
if (typeof filterValue === "string") {
|
|
value = filterValue;
|
|
} else {
|
|
operator = filterValue.operator || "==";
|
|
value = filterValue.value;
|
|
}
|
|
|
|
if (!value) continue;
|
|
|
|
const encodedValue = encodeURIComponent(value);
|
|
const needsEqualsPrefix = /^[A-Za-z]/.test(operator);
|
|
const operatorSegment = needsEqualsPrefix ? `=${operator}` : operator;
|
|
|
|
filterExpressions.push(`${key}${operatorSegment}/${encodedValue}`);
|
|
}
|
|
|
|
return filterExpressions.length > 0 ? filterExpressions.join(",") : undefined;
|
|
};
|