@matthew.ngo/react-filter-pilot
Version:
Powerful filtering, pagination, and sorting for React with TanStack Query integration
1 lines • 5.39 kB
Source Map (JSON)
{"version":3,"sources":["../../src/utils/filterUtils.ts"],"names":["isFilterActive","value","defaultValue","__name","getDefaultFilters","filterConfigs","defaults","config","compareFilters","filters1","filters2","keys1","keys2","key","val1","val2","stringifiedVal1","stringifiedVal2","mergeFilters","filters"],"mappings":";AAKO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAASA,EAAeC,CAAYC,CAAAA,CAAAA,CAA4B,CACrE,OAAID,IAAUC,CAAqB,CAAA,KAAA,CAG/B,KAAM,CAAA,OAAA,CAAQD,CAAK,CAChB,CAAA,KAAA,CAAM,QAAQC,CAAY,CAAA,CACxB,KAAK,SAAUD,CAAAA,CAAK,CAAM,GAAA,IAAA,CAAK,UAAUC,CAAY,CAAA,CADnBD,EAAM,MAAS,CAAA,CAAA,CAKtD,OAAOA,CAAU,EAAA,QAAA,EAAYA,CAAU,GAAA,IAAA,CAClC,KAAK,SAAUA,CAAAA,CAAK,IAAM,IAAK,CAAA,SAAA,CAAUC,CAAY,CAI1D,CAAA,OAAOD,CAAU,EAAA,QAAA,EAAYA,EAAM,IAAK,EAAA,GAAM,EACzCC,CAAAA,CAAAA,GAAiB,GAGnB,IACT,CApBgBC,CAAAH,CAAAA,CAAAA,CAAA,kBAyBT,SAASI,CAAAA,CAAkBC,EAAoD,CACpF,MAAMC,EAAgC,EAAC,CAEvC,OAAAD,CAAAA,CAAc,QAASE,CAAW,EAAA,CAChCD,EAASC,CAAO,CAAA,IAAI,EAAIA,CAAO,CAAA,aACjC,CAAC,CAAA,CAEMD,CACT,CARgBH,CAAAA,CAAAC,EAAA,mBAYT,CAAA,CAAA,SAASI,EACdC,CACAC,CAAAA,CAAAA,CACS,CAGT,MAAMC,EAAQ,MAAO,CAAA,IAAA,CAAKF,CAAQ,CAAA,CAC5BG,EAAQ,MAAO,CAAA,IAAA,CAAKF,CAAQ,CAAA,CAIlC,OAAIC,CAAM,CAAA,MAAA,GAAWC,EAAM,MAQlB,CAAA,KAAA,CAGMD,EAAM,KAAOE,CAAAA,CAAAA,EAAQ,CAClC,MAAMC,EAAOL,CAASI,CAAAA,CAAG,EACnBE,CAAOL,CAAAA,CAAAA,CAASG,CAAG,CAGzB,CAAA,GAAIC,CAASC,GAAAA,CAAAA,CAEX,OAAO,KAIT,CAAA,GAAI,OAAOD,CAAS,EAAA,QAAA,EAAYA,IAAS,IAAQ,EAAA,OAAOC,CAAS,EAAA,QAAA,EAAYA,IAAS,IAAM,CAAA,CAC1F,MAAMC,CAAkB,CAAA,IAAA,CAAK,UAAUF,CAAI,CAAA,CACrCG,CAAkB,CAAA,IAAA,CAAK,UAAUF,CAAI,CAAA,CAO3C,OAAIC,CAAoBC,GAAAA,CAW1B,CAKA,OAAO,MACT,CAAC,CAIH,CA/DgBd,CAAAK,CAAAA,CAAAA,CAAA,kBAoET,SAASU,CAAAA,CACdC,EACAb,CACqB,CAAA,CACrB,OAAO,CAAE,GAAGA,CAAU,CAAA,GAAGa,CAAQ,CACnC,CALgBhB,EAAAe,CAAA,CAAA,cAAA,CAAA","file":"filterUtils.cjs","sourcesContent":["import { FilterConfig } from '../types';\n\n/**\n * Check if a filter is active (not default value)\n */\nexport function isFilterActive(value: any, defaultValue: any): boolean {\n if (value === defaultValue) return false;\n\n // Handle arrays\n if (Array.isArray(value)) {\n if (!Array.isArray(defaultValue)) return value.length > 0;\n return JSON.stringify(value) !== JSON.stringify(defaultValue);\n }\n\n // Handle objects\n if (typeof value === 'object' && value !== null) {\n return JSON.stringify(value) !== JSON.stringify(defaultValue);\n }\n\n // Handle empty strings\n if (typeof value === 'string' && value.trim() === '') {\n return defaultValue !== '';\n }\n\n return true;\n}\n\n/**\n * Get default filter values from configs\n */\nexport function getDefaultFilters(filterConfigs: FilterConfig[]): Record<string, any> {\n const defaults: Record<string, any> = {};\n\n filterConfigs.forEach((config) => {\n defaults[config.name] = config.defaultValue;\n });\n\n return defaults;\n}\n/**\n * Compare two filter objects\n */\nexport function compareFilters(\n filters1: Record<string, any>,\n filters2: Record<string, any>\n): boolean {\n console.log('[Debug compareFilters] Comparing filters:', filters1, 'AND', filters2);\n\n const keys1 = Object.keys(filters1);\n const keys2 = Object.keys(filters2);\n console.log('[Debug compareFilters] Keys from filters1:', keys1);\n console.log('[Debug compareFilters] Keys from filters2:', keys2);\n\n if (keys1.length !== keys2.length) {\n console.log(\n '[Debug compareFilters] Length of keys is different. keys1.length:',\n keys1.length,\n 'keys2.length:',\n keys2.length,\n '. Returning false.'\n );\n return false;\n }\n\n const result = keys1.every((key) => {\n const val1 = filters1[key];\n const val2 = filters2[key];\n console.log(`[Debug compareFilters] Comparing key: \"${key}\". val1:`, val1, `val2:`, val2);\n\n if (val1 === val2) {\n console.log(`[Debug compareFilters] Key \"${key}\": Simple equality (val1 === val2) is true.`);\n return true;\n }\n\n // Deep comparison for objects and arrays\n if (typeof val1 === 'object' && val1 !== null && typeof val2 === 'object' && val2 !== null) {\n const stringifiedVal1 = JSON.stringify(val1);\n const stringifiedVal2 = JSON.stringify(val2);\n console.log(\n `[Debug compareFilters] Key \"${key}\": Performing deep comparison. stringifiedVal1:`,\n stringifiedVal1,\n `stringifiedVal2:`,\n stringifiedVal2\n );\n if (stringifiedVal1 === stringifiedVal2) {\n console.log(\n `[Debug compareFilters] Key \"${key}\": Deep comparison (JSON.stringify) is true.`\n );\n return true;\n } else {\n console.log(\n `[Debug compareFilters] Key \"${key}\": Deep comparison (JSON.stringify) is false.`\n );\n return false;\n }\n }\n\n console.log(\n `[Debug compareFilters] Key \"${key}\": No equality condition met. Returning false for this key.`\n );\n return false;\n });\n\n console.log('[Debug compareFilters] Overall comparison result (every key matched):', result);\n return result;\n}\n\n/**\n * Merge filters with defaults\n */\nexport function mergeFilters(\n filters: Partial<Record<string, any>>,\n defaults: Record<string, any>\n): Record<string, any> {\n return { ...defaults, ...filters };\n}\n"]}