UNPKG

@matthew.ngo/react-filter-pilot

Version:

Powerful filtering, pagination, and sorting for React with TanStack Query integration

1 lines 6.54 kB
{"version":3,"sources":["../../src/utils/urlUtils.ts"],"names":["parseUrlParams","params","filterConfigs","filters","config","urlKey","urlValue","transformFilterValue","__name","buildUrlParams","value","transformedValue","buildSyncableUrlParams","getManagedUrlKeys","getNonManagedUrlKeys","clearManagedUrlParams","key"],"mappings":"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","file":"urlUtils.cjs","sourcesContent":["\nimport { FilterConfig } from '../types';\nimport { transformFilterValue } from './transformUtils';\n\n/**\n * Parse URL parameters to filter values\n */\nexport function parseUrlParams(\n params: URLSearchParams,\n filterConfigs: FilterConfig[]\n): Record<string, any> {\n const filters: Record<string, any> = {};\n\n filterConfigs.forEach((config) => {\n const urlKey = config.urlKey || config.name;\n const urlValue = params.get(urlKey);\n\n if (urlValue !== null) {\n filters[config.name] = transformFilterValue(\n urlValue,\n config.transformFromUrl\n );\n }\n });\n\n return filters;\n}\n\n/**\n * Build URL parameters from filter values\n */\nexport function buildUrlParams(\n filters: Record<string, any>,\n filterConfigs: FilterConfig[]\n): URLSearchParams {\n const params = new URLSearchParams();\n\n filterConfigs.forEach((config) => {\n const value = filters[config.name];\n const urlKey = config.urlKey || config.name;\n\n // Skip default values or empty values\n if (\n value === undefined ||\n value === null ||\n value === config.defaultValue ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'string' && value.trim() === '')\n ) {\n return;\n }\n\n const transformedValue = transformFilterValue(\n value,\n config.transformToUrl\n );\n\n if (transformedValue !== undefined && transformedValue !== '') {\n params.set(urlKey, String(transformedValue));\n }\n });\n\n return params;\n}\n\n/**\n * Build URL parameters ONLY for filters that sync with URL\n */\nexport function buildSyncableUrlParams(\n filters: Record<string, any>,\n filterConfigs: FilterConfig[]\n): URLSearchParams {\n const params = new URLSearchParams();\n\n filterConfigs.forEach((config) => {\n if (config.syncWithUrl === false) {\n return; // Skip filters that explicitly don't sync with URL\n }\n\n const value = filters[config.name];\n const urlKey = config.urlKey || config.name;\n\n // Skip default values or empty values\n if (\n value === undefined ||\n value === null ||\n value === config.defaultValue ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'string' && value.trim() === '')\n ) {\n return;\n }\n\n const transformedValue = transformFilterValue(\n value,\n config.transformToUrl\n );\n\n if (transformedValue !== undefined && transformedValue !== '') {\n params.set(urlKey, String(transformedValue));\n }\n });\n\n return params;\n}\n\n/**\n * Get list of URL keys that should be managed (sync with URL)\n */\nexport function getManagedUrlKeys(filterConfigs: FilterConfig[]): string[] {\n return filterConfigs\n .filter(config => config.syncWithUrl !== false)\n .map(config => config.urlKey || config.name);\n}\n\n/**\n * Get list of URL keys that should NOT be managed (no sync with URL)\n */\nexport function getNonManagedUrlKeys(filterConfigs: FilterConfig[]): string[] {\n return filterConfigs\n .filter(config => config.syncWithUrl === false)\n .map(config => config.urlKey || config.name);\n}\n\n/**\n * Clear only managed URL params while preserving non-managed ones\n */\nexport function clearManagedUrlParams(\n params: URLSearchParams,\n filterConfigs: FilterConfig[]\n): URLSearchParams {\n const managedKeys = getManagedUrlKeys(filterConfigs);\n \n managedKeys.forEach(key => {\n params.delete(key);\n });\n \n return params;\n}"]}