@shefing/quickfilter 1.0.58 → 1.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,6 @@ declare const QuickFilter: ({ slug, filterList, }: {
3
3
  filterList: (string | {
4
4
  name: string;
5
5
  width: string;
6
- virtualName: string;
7
6
  })[][];
8
7
  }) => import("react").JSX.Element;
9
8
  export default QuickFilter;
@@ -1 +1 @@
1
- {"version":3,"file":"QuickFilter.d.ts","sourceRoot":"","sources":["../src/QuickFilter.tsx"],"names":[],"mappings":"AAyGA,QAAA,MAAM,WAAW,0BAGd;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,EAAE,CAAA;CAChF,gCAgTA,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"QuickFilter.d.ts","sourceRoot":"","sources":["../src/QuickFilter.tsx"],"names":[],"mappings":"AAyGA,QAAA,MAAM,WAAW,0BAGd;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,CAAC,EAAE,EAAE,CAAA;CAC5D,gCAgTA,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -91,7 +91,7 @@ const QuickFilter = ({ slug, filterList })=>{
91
91
  rowIndex,
92
92
  fieldIndex
93
93
  })));
94
- const fieldNames = flattenedFieldConfigs.map(({ field })=>typeof field === 'string' ? field : field.virtualName ? field.virtualName : field.name);
94
+ const fieldNames = flattenedFieldConfigs.map(({ field })=>typeof field === 'string' ? field : field.name);
95
95
  const matchedFields = findFieldsByName(collection?.fields || [], fieldNames);
96
96
  const simplifiedFields = matchedFields.map((field)=>{
97
97
  const label = field.label;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/QuickFilter.tsx"],"sourcesContent":["'use client'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useConfig, useListQuery, useTranslation } from '@payloadcms/ui'\nimport type { ClientField, FieldAffectingData, ListQuery, OptionObject, SelectField } from 'payload'\nimport { getTranslation } from '@payloadcms/translations'\nimport FilterField from './FilterField'\nimport { getLabel, SupportedLocale } from './labels'\nimport type {\n DateFilterValue,\n FilterDetaild,\n FilterRow,\n SelectFilterValue,\n} from './filters/types/filters-type'\nimport { groupFiltersByRow } from './filters/utils/layout-helpers'\nimport { ChevronDown, ChevronUp, Filter, RefreshCw, X } from 'lucide-react'\nimport { isEqual } from 'lodash'\nimport { getDateFilterOptions } from './filters/constants/date-filter-options'\nimport { Button } from './ui/button'\nimport {\n buildQuickFilterConditions,\n parseWhereClauseToFilterValues,\n} from './lib/utils'\n\n// Helper function to get localized label\nconst getLocalizedLabel = (label: any, locale: SupportedLocale): string => {\n if (typeof label === 'object' && label !== null) {\n return label[locale] || label['en'] || Object.values(label)[0] || ''\n }\n return label || ''\n}\n\n// Recursive function to find fields by name\nfunction findFieldsByName(fields: ClientField[], fieldNames: string[]): ClientField[] {\n const results: ClientField[] = []\n function recursiveSearch(currentFields: ClientField[]) {\n const filteredFields = currentFields.filter(\n (field) =>\n ('name' in field && fieldNames.includes(field.name as string)) ||\n ('virtual' in field &&\n fieldNames.includes(field.virtual as string)),\n )\n results.push(...filteredFields)\n currentFields.forEach((item) => {\n if (\n (item.type === 'array' || item.type === 'row' || item.type === 'collapsible') &&\n 'fields' in item &&\n Array.isArray(item.fields)\n ) {\n recursiveSearch(item.fields)\n } else if (item.type === 'tabs' && Array.isArray(item.tabs)) {\n item.tabs.forEach((tab) => {\n if ('fields' in tab && Array.isArray(tab.fields)) {\n recursiveSearch(tab.fields)\n }\n })\n } else if (item.type === 'blocks' && Array.isArray(item.blocks)) {\n item.blocks.forEach((block) => {\n if ('fields' in block && Array.isArray(block.fields)) {\n recursiveSearch(block.fields)\n }\n })\n }\n })\n }\n recursiveSearch(fields)\n return results\n}\n\n// Helper function to remove quick filter conditions from a 'where' clause\nconst cleanWhereClause = (clause: any, fieldsToClean: Set<string>): any => {\n if (!clause || typeof clause !== 'object' || Array.isArray(clause)) {\n return clause\n }\n\n const newClause: Record<string, any> = {}\n\n for (const key in clause) {\n if (key === 'and' || key === 'or') {\n const cleanedSubClauses = clause[key]\n .map((subClause: any) => cleanWhereClause(subClause, fieldsToClean))\n .filter(Boolean)\n\n if (cleanedSubClauses.length > 0) {\n newClause[key] = cleanedSubClauses\n }\n } else if (!fieldsToClean.has(key)) {\n newClause[key] = clause[key]\n }\n }\n\n if (Object.keys(newClause).length === 0) {\n return null\n }\n\n if (newClause.and?.length === 1 && Object.keys(newClause).length === 1) {\n return newClause.and[0]\n }\n if (newClause.or?.length === 1 && Object.keys(newClause).length === 1) {\n return newClause.or[0]\n }\n\n return newClause\n}\n\nconst QuickFilter = ({\n slug,\n filterList,\n}: {\n slug: string\n filterList: (string | { name: string; width: string; virtualName: string })[][]\n}) => {\n const [fields, setFields] = useState<FilterDetaild[]>([])\n const [filterRows, setFilterRows] = useState<FilterRow[]>([])\n const [showFilters, setShowFilters] = useState(false)\n const { refineListData, query } = useListQuery()\n const { getEntityConfig } = useConfig()\n const { i18n } = useTranslation()\n const locale = i18n.language as SupportedLocale\n\n const [filterValues, setFilterValues] = useState<Record<string, any>>({})\n\n // Build the list of filter fields from config\n useEffect(() => {\n const collection = getEntityConfig({ collectionSlug: slug })\n const flattenedFieldConfigs = filterList.flatMap((row, rowIndex) =>\n row.map((field, fieldIndex) => ({\n field,\n rowIndex,\n fieldIndex,\n })),\n )\n const fieldNames = flattenedFieldConfigs.map(({ field }) =>\n typeof field === 'string' ? field : field.virtualName ? field.virtualName : field.name,\n )\n\n const matchedFields = findFieldsByName(collection?.fields || [], fieldNames)\n const simplifiedFields: FilterDetaild[] = matchedFields.map((field) => {\n const label = (field as FieldAffectingData).label\n const translatedLabel = getTranslation(label as string, i18n)\n const fieldName = (field as FieldAffectingData).name as string\n const fieldConfig = flattenedFieldConfigs.find(({ field: f }) =>\n typeof f === 'string' ? f === fieldName : f.name === fieldName,\n )\n return {\n name: fieldName,\n label: translatedLabel as string,\n type: field.type,\n options: (field as SelectField).options as OptionObject[],\n row: fieldConfig ? fieldConfig.rowIndex : 0,\n virtual: 'virtual' in field ? (field.virtual as string | boolean) : undefined,\n width:\n typeof fieldConfig?.field === 'object' && 'width' in fieldConfig.field\n ? fieldConfig.field.width\n : undefined,\n }\n })\n const sortedFields = flattenedFieldConfigs\n .map(({ field }) => {\n const fieldName = typeof field === 'string' ? field : field.name\n return simplifiedFields.find((f) => f.name === fieldName)\n })\n .filter((f): f is FilterDetaild => !!f)\n setFields(sortedFields)\n setFilterRows(groupFiltersByRow(sortedFields))\n }, [slug, filterList, getEntityConfig, i18n])\n // Sync from URL (query.where) into internal state\n useEffect(() => {\n if (fields.length === 0) return\n const valuesFromQuery: Record<string, any> = parseWhereClauseToFilterValues(\n query.where,\n fields,\n locale,\n )\n if (!isEqual(filterValues, valuesFromQuery)) {\n // Lock to prevent feedback loop when internal state changes\n setFilterValues(valuesFromQuery)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query.where, fields])\n\n // Sync internal state (filterValues) back into the URL\n useEffect(() => {\n if (fields.length === 0) return\n const valuesFromQuery: Record<string, any> = parseWhereClauseToFilterValues(\n query.where,\n fields,\n locale,\n )\n if (Object.keys(filterValues).length == 0 && !query.where) {\n }\n if (isEqual(filterValues, valuesFromQuery)) {\n return\n }\n const quickFilterConditions = buildQuickFilterConditions(filterValues, fields, locale)\n const quickFilterFieldNames = new Set(\n fields.map((f) => {\n let name = f.name\n if (typeof f.virtual === 'string') {\n name = f.virtual\n }\n return name\n }),\n )\n const otherFilters = cleanWhereClause(query.where, quickFilterFieldNames)\n\n const allConditions = [...quickFilterConditions]\n if (otherFilters) {\n if (otherFilters.and && Array.isArray(otherFilters.and)) {\n allConditions.push(...otherFilters.and)\n } else if (Object.keys(otherFilters).length > 0) {\n allConditions.push(otherFilters)\n }\n }\n\n let newWhere: Record<string, any> = {}\n if (allConditions.length > 1) {\n newWhere = { and: allConditions }\n } else if (allConditions.length === 1) {\n newWhere = allConditions[0]\n }\n\n // Only update if the query has actually changed to avoid unnecessary updates\n if (!(isEqual(newWhere, query.where) || (Object.keys(newWhere).length == 0 && !query.where))) {\n const refinedData = {\n where: newWhere,\n page: 1,\n } as ListQuery\n\n refineListData(refinedData).then((r) => {\n console.log('Query refreshed', refinedData)\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterValues])\n\n // Updates only the internal state\n const handleFilterChange = useCallback((fieldName: string, value: any) => {\n setFilterValues((prev) => {\n const newValues = { ...prev }\n if (\n value === undefined ||\n value === null ||\n value === 'indeterminate' ||\n (value && value.type === 'none')\n ) {\n delete newValues[fieldName]\n } else {\n newValues[fieldName] = value\n }\n return newValues\n })\n }, [])\n\n // This function remains largely the same.\n const getActiveFiltersDetails = () => {\n const activeFilters: string[] = []\n const locale = i18n.language as SupportedLocale\n Object.entries(filterValues).forEach(([fieldName, value]) => {\n const field = fields.find((f) => {\n let name = f.name\n if (typeof f.virtual === 'string') {\n name = f.virtual\n }\n return name === fieldName\n })\n if (!field) return\n\n switch (field.type) {\n case 'date':\n if (value !== undefined) {\n const dateValue = value as DateFilterValue\n let dateDescription = ''\n\n if (dateValue.type === 'predefined' && dateValue.predefinedValue) {\n const { pastOptions, futureOptions } = getDateFilterOptions(locale)\n const allOptions = [...pastOptions, ...futureOptions]\n const option = allOptions.find((opt) => opt.value === dateValue.predefinedValue)\n dateDescription = option ? option.label : getLabel('custom', locale)\n } else if (dateValue.type === 'custom' || dateValue.customRange) {\n dateDescription = getLabel('custom', locale)\n }\n\n if (dateDescription) {\n activeFilters.push(`${field.label} (${dateDescription})`)\n }\n }\n break\n case 'select': {\n const selectValue = value as SelectFilterValue\n if (selectValue && selectValue.selectedValues && selectValue.selectedValues.length > 0) {\n const totalOptions = field.options?.length || 0\n\n if (selectValue.selectedValues.length === totalOptions) {\n activeFilters.push(`${field.label} (${getLabel('all', locale)})`)\n } else if (selectValue.selectedValues.length === 1) {\n // Show the actual option name when only one is selected\n const selectedOption = field.options?.find(\n (opt: any) => opt.value === selectValue.selectedValues[0],\n )\n const optionLabel = selectedOption\n ? getLocalizedLabel(selectedOption.label, locale)\n : selectValue.selectedValues[0]\n activeFilters.push(`${field.label} (${optionLabel})`)\n } else {\n // Show count for multiple selections\n activeFilters.push(`${field.label} (${selectValue.selectedValues.length})`)\n }\n }\n break\n }\n case 'checkbox':\n if (value !== 'indeterminate') {\n const checkboxValue =\n value === 'checked' ? getLabel('yes', locale) : getLabel('no', locale)\n activeFilters.push(`${field.label} (${checkboxValue})`)\n }\n break\n }\n })\n\n return activeFilters\n }\n\n const clearAllFilters = () => {\n setFilterValues({})\n }\n\n const refreshFilters = () => {\n refineListData(query)\n }\n\n const memoizedFilterRows = useMemo(() => {\n return filterRows.map((row) => (\n <div key={row.rowNumber}>\n <div className=\"flex flex-wrap gap-6 mb-4\">\n {row.filters.map((field) => {\n let fieldName = field.name\n if (typeof field.virtual === 'string') {\n fieldName = field.virtual\n }\n return (\n <FilterField\n key={field.name}\n field={field}\n onFilterChange={handleFilterChange}\n value={filterValues[fieldName]}\n />\n )\n })}\n </div>\n </div>\n ))\n }, [filterRows, handleFilterChange, filterValues])\n\n const toggleFilters = () => {\n setShowFilters((prev) => !prev)\n }\n\n const activeFiltersDetails = getActiveFiltersDetails()\n const hasActiveFilters = activeFiltersDetails.length > 0\n\n if (!fields.length) return null\n\n return (\n <div className=\"filter-container useTw\">\n <div style={{ position: 'relative', top: '-24px', height: '0px' }}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={toggleFilters}\n className={`flex items-center gap-2 bg-background border-muted-muted hover:bg-muted ${\n hasActiveFilters ? 'w-auto min-w-fit' : ''\n }`}\n >\n <Filter className={`h-4 w-4 ${hasActiveFilters ? 'fill-current' : ''}`} />\n\n {hasActiveFilters ? (\n <>\n <span className=\"text-sm truncate\">\n <strong>\n {`${activeFiltersDetails.length === 1 ? getLabel('activeFilterSingular', locale) : getLabel('activeFilterPlural', locale)}: `}\n </strong>{' '}\n {activeFiltersDetails.join(' • ')}\n </span>\n\n <span\n onClick={(e) => {\n e.stopPropagation()\n clearAllFilters()\n }}\n className=\"ml-1 p-0.5 hover:bg-muted rounded-sm transition-colors flex-shrink-0\"\n >\n <X className=\"h-3 w-3 text-gray-500\" />\n </span>\n <span\n onClick={(e) => {\n e.stopPropagation()\n refreshFilters()\n }}\n className=\"ml-1 p-0.5 hover:bg-muted rounded-sm transition-colors flex-shrink-0\"\n >\n <RefreshCw className=\"h-3 w-3 text-gray-500\" />\n </span>\n </>\n ) : (\n <span className=\"text-sm truncate\">{getLabel('quickFilters', locale)}</span>\n )}\n\n {showFilters ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n </div>\n {showFilters && <div className={'p-4 pb-2 bg-muted'}>{memoizedFilterRows}</div>}\n </div>\n )\n}\n\nexport default QuickFilter\n"],"names":["useCallback","useEffect","useMemo","useState","useConfig","useListQuery","useTranslation","getTranslation","FilterField","getLabel","groupFiltersByRow","ChevronDown","ChevronUp","Filter","RefreshCw","X","isEqual","getDateFilterOptions","Button","buildQuickFilterConditions","parseWhereClauseToFilterValues","getLocalizedLabel","label","locale","Object","values","findFieldsByName","fields","fieldNames","results","recursiveSearch","currentFields","filteredFields","filter","field","includes","name","virtual","push","forEach","item","type","Array","isArray","tabs","tab","blocks","block","cleanWhereClause","clause","fieldsToClean","newClause","key","cleanedSubClauses","map","subClause","Boolean","length","has","keys","and","or","QuickFilter","slug","filterList","setFields","filterRows","setFilterRows","showFilters","setShowFilters","refineListData","query","getEntityConfig","i18n","language","filterValues","setFilterValues","collection","collectionSlug","flattenedFieldConfigs","flatMap","row","rowIndex","fieldIndex","virtualName","matchedFields","simplifiedFields","translatedLabel","fieldName","fieldConfig","find","f","options","undefined","width","sortedFields","valuesFromQuery","where","quickFilterConditions","quickFilterFieldNames","Set","otherFilters","allConditions","newWhere","refinedData","page","then","r","console","log","handleFilterChange","value","prev","newValues","getActiveFiltersDetails","activeFilters","entries","dateValue","dateDescription","predefinedValue","pastOptions","futureOptions","allOptions","option","opt","customRange","selectValue","selectedValues","totalOptions","selectedOption","optionLabel","checkboxValue","clearAllFilters","refreshFilters","memoizedFilterRows","div","className","filters","onFilterChange","rowNumber","toggleFilters","activeFiltersDetails","hasActiveFilters","style","position","top","height","variant","size","onClick","span","strong","join","e","stopPropagation"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/QuickFilter.tsx"],"sourcesContent":["'use client'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useConfig, useListQuery, useTranslation } from '@payloadcms/ui'\nimport type { ClientField, FieldAffectingData, ListQuery, OptionObject, SelectField } from 'payload'\nimport { getTranslation } from '@payloadcms/translations'\nimport FilterField from './FilterField'\nimport { getLabel, SupportedLocale } from './labels'\nimport type {\n DateFilterValue,\n FilterDetaild,\n FilterRow,\n SelectFilterValue,\n} from './filters/types/filters-type'\nimport { groupFiltersByRow } from './filters/utils/layout-helpers'\nimport { ChevronDown, ChevronUp, Filter, RefreshCw, X } from 'lucide-react'\nimport { isEqual } from 'lodash'\nimport { getDateFilterOptions } from './filters/constants/date-filter-options'\nimport { Button } from './ui/button'\nimport {\n buildQuickFilterConditions,\n parseWhereClauseToFilterValues,\n} from './lib/utils'\n\n// Helper function to get localized label\nconst getLocalizedLabel = (label: any, locale: SupportedLocale): string => {\n if (typeof label === 'object' && label !== null) {\n return label[locale] || label['en'] || Object.values(label)[0] || ''\n }\n return label || ''\n}\n\n// Recursive function to find fields by name\nfunction findFieldsByName(fields: ClientField[], fieldNames: string[]): ClientField[] {\n const results: ClientField[] = []\n function recursiveSearch(currentFields: ClientField[]) {\n const filteredFields = currentFields.filter(\n (field) =>\n ('name' in field && fieldNames.includes(field.name as string)) ||\n ('virtual' in field &&\n fieldNames.includes(field.virtual as string)),\n )\n results.push(...filteredFields)\n currentFields.forEach((item) => {\n if (\n (item.type === 'array' || item.type === 'row' || item.type === 'collapsible') &&\n 'fields' in item &&\n Array.isArray(item.fields)\n ) {\n recursiveSearch(item.fields)\n } else if (item.type === 'tabs' && Array.isArray(item.tabs)) {\n item.tabs.forEach((tab) => {\n if ('fields' in tab && Array.isArray(tab.fields)) {\n recursiveSearch(tab.fields)\n }\n })\n } else if (item.type === 'blocks' && Array.isArray(item.blocks)) {\n item.blocks.forEach((block) => {\n if ('fields' in block && Array.isArray(block.fields)) {\n recursiveSearch(block.fields)\n }\n })\n }\n })\n }\n recursiveSearch(fields)\n return results\n}\n\n// Helper function to remove quick filter conditions from a 'where' clause\nconst cleanWhereClause = (clause: any, fieldsToClean: Set<string>): any => {\n if (!clause || typeof clause !== 'object' || Array.isArray(clause)) {\n return clause\n }\n\n const newClause: Record<string, any> = {}\n\n for (const key in clause) {\n if (key === 'and' || key === 'or') {\n const cleanedSubClauses = clause[key]\n .map((subClause: any) => cleanWhereClause(subClause, fieldsToClean))\n .filter(Boolean)\n\n if (cleanedSubClauses.length > 0) {\n newClause[key] = cleanedSubClauses\n }\n } else if (!fieldsToClean.has(key)) {\n newClause[key] = clause[key]\n }\n }\n\n if (Object.keys(newClause).length === 0) {\n return null\n }\n\n if (newClause.and?.length === 1 && Object.keys(newClause).length === 1) {\n return newClause.and[0]\n }\n if (newClause.or?.length === 1 && Object.keys(newClause).length === 1) {\n return newClause.or[0]\n }\n\n return newClause\n}\n\nconst QuickFilter = ({\n slug,\n filterList,\n}: {\n slug: string\n filterList: (string | { name: string; width: string; })[][]\n}) => {\n const [fields, setFields] = useState<FilterDetaild[]>([])\n const [filterRows, setFilterRows] = useState<FilterRow[]>([])\n const [showFilters, setShowFilters] = useState(false)\n const { refineListData, query } = useListQuery()\n const { getEntityConfig } = useConfig()\n const { i18n } = useTranslation()\n const locale = i18n.language as SupportedLocale\n\n const [filterValues, setFilterValues] = useState<Record<string, any>>({})\n\n // Build the list of filter fields from config\n useEffect(() => {\n const collection = getEntityConfig({ collectionSlug: slug })\n const flattenedFieldConfigs = filterList.flatMap((row, rowIndex) =>\n row.map((field, fieldIndex) => ({\n field,\n rowIndex,\n fieldIndex,\n })),\n )\n const fieldNames = flattenedFieldConfigs.map(({ field }) =>\n typeof field === 'string' ? field : field.name,\n )\n\n const matchedFields = findFieldsByName(collection?.fields || [], fieldNames)\n const simplifiedFields: FilterDetaild[] = matchedFields.map((field) => {\n const label = (field as FieldAffectingData).label\n const translatedLabel = getTranslation(label as string, i18n)\n const fieldName = (field as FieldAffectingData).name as string\n const fieldConfig = flattenedFieldConfigs.find(({ field: f }) =>\n typeof f === 'string' ? f === fieldName : f.name === fieldName,\n )\n return {\n name: fieldName,\n label: translatedLabel as string,\n type: field.type,\n options: (field as SelectField).options as OptionObject[],\n row: fieldConfig ? fieldConfig.rowIndex : 0,\n virtual: 'virtual' in field ? (field.virtual as string | boolean) : undefined,\n width:\n typeof fieldConfig?.field === 'object' && 'width' in fieldConfig.field\n ? fieldConfig.field.width\n : undefined,\n }\n })\n const sortedFields = flattenedFieldConfigs\n .map(({ field }) => {\n const fieldName = typeof field === 'string' ? field : field.name\n return simplifiedFields.find((f) => f.name === fieldName)\n })\n .filter((f): f is FilterDetaild => !!f)\n setFields(sortedFields)\n setFilterRows(groupFiltersByRow(sortedFields))\n }, [slug, filterList, getEntityConfig, i18n])\n // Sync from URL (query.where) into internal state\n useEffect(() => {\n if (fields.length === 0) return\n const valuesFromQuery: Record<string, any> = parseWhereClauseToFilterValues(\n query.where,\n fields,\n locale,\n )\n if (!isEqual(filterValues, valuesFromQuery)) {\n // Lock to prevent feedback loop when internal state changes\n setFilterValues(valuesFromQuery)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query.where, fields])\n\n // Sync internal state (filterValues) back into the URL\n useEffect(() => {\n if (fields.length === 0) return\n const valuesFromQuery: Record<string, any> = parseWhereClauseToFilterValues(\n query.where,\n fields,\n locale,\n )\n if (Object.keys(filterValues).length == 0 && !query.where) {\n }\n if (isEqual(filterValues, valuesFromQuery)) {\n return\n }\n const quickFilterConditions = buildQuickFilterConditions(filterValues, fields, locale)\n const quickFilterFieldNames = new Set(\n fields.map((f) => {\n let name = f.name\n if (typeof f.virtual === 'string') {\n name = f.virtual\n }\n return name\n }),\n )\n const otherFilters = cleanWhereClause(query.where, quickFilterFieldNames)\n\n const allConditions = [...quickFilterConditions]\n if (otherFilters) {\n if (otherFilters.and && Array.isArray(otherFilters.and)) {\n allConditions.push(...otherFilters.and)\n } else if (Object.keys(otherFilters).length > 0) {\n allConditions.push(otherFilters)\n }\n }\n\n let newWhere: Record<string, any> = {}\n if (allConditions.length > 1) {\n newWhere = { and: allConditions }\n } else if (allConditions.length === 1) {\n newWhere = allConditions[0]\n }\n\n // Only update if the query has actually changed to avoid unnecessary updates\n if (!(isEqual(newWhere, query.where) || (Object.keys(newWhere).length == 0 && !query.where))) {\n const refinedData = {\n where: newWhere,\n page: 1,\n } as ListQuery\n\n refineListData(refinedData).then((r) => {\n console.log('Query refreshed', refinedData)\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterValues])\n\n // Updates only the internal state\n const handleFilterChange = useCallback((fieldName: string, value: any) => {\n setFilterValues((prev) => {\n const newValues = { ...prev }\n if (\n value === undefined ||\n value === null ||\n value === 'indeterminate' ||\n (value && value.type === 'none')\n ) {\n delete newValues[fieldName]\n } else {\n newValues[fieldName] = value\n }\n return newValues\n })\n }, [])\n\n // This function remains largely the same.\n const getActiveFiltersDetails = () => {\n const activeFilters: string[] = []\n const locale = i18n.language as SupportedLocale\n Object.entries(filterValues).forEach(([fieldName, value]) => {\n const field = fields.find((f) => {\n let name = f.name\n if (typeof f.virtual === 'string') {\n name = f.virtual\n }\n return name === fieldName\n })\n if (!field) return\n\n switch (field.type) {\n case 'date':\n if (value !== undefined) {\n const dateValue = value as DateFilterValue\n let dateDescription = ''\n\n if (dateValue.type === 'predefined' && dateValue.predefinedValue) {\n const { pastOptions, futureOptions } = getDateFilterOptions(locale)\n const allOptions = [...pastOptions, ...futureOptions]\n const option = allOptions.find((opt) => opt.value === dateValue.predefinedValue)\n dateDescription = option ? option.label : getLabel('custom', locale)\n } else if (dateValue.type === 'custom' || dateValue.customRange) {\n dateDescription = getLabel('custom', locale)\n }\n\n if (dateDescription) {\n activeFilters.push(`${field.label} (${dateDescription})`)\n }\n }\n break\n case 'select': {\n const selectValue = value as SelectFilterValue\n if (selectValue && selectValue.selectedValues && selectValue.selectedValues.length > 0) {\n const totalOptions = field.options?.length || 0\n\n if (selectValue.selectedValues.length === totalOptions) {\n activeFilters.push(`${field.label} (${getLabel('all', locale)})`)\n } else if (selectValue.selectedValues.length === 1) {\n // Show the actual option name when only one is selected\n const selectedOption = field.options?.find(\n (opt: any) => opt.value === selectValue.selectedValues[0],\n )\n const optionLabel = selectedOption\n ? getLocalizedLabel(selectedOption.label, locale)\n : selectValue.selectedValues[0]\n activeFilters.push(`${field.label} (${optionLabel})`)\n } else {\n // Show count for multiple selections\n activeFilters.push(`${field.label} (${selectValue.selectedValues.length})`)\n }\n }\n break\n }\n case 'checkbox':\n if (value !== 'indeterminate') {\n const checkboxValue =\n value === 'checked' ? getLabel('yes', locale) : getLabel('no', locale)\n activeFilters.push(`${field.label} (${checkboxValue})`)\n }\n break\n }\n })\n\n return activeFilters\n }\n\n const clearAllFilters = () => {\n setFilterValues({})\n }\n\n const refreshFilters = () => {\n refineListData(query)\n }\n\n const memoizedFilterRows = useMemo(() => {\n return filterRows.map((row) => (\n <div key={row.rowNumber}>\n <div className=\"flex flex-wrap gap-6 mb-4\">\n {row.filters.map((field) => {\n let fieldName = field.name\n if (typeof field.virtual === 'string') {\n fieldName = field.virtual\n }\n return (\n <FilterField\n key={field.name}\n field={field}\n onFilterChange={handleFilterChange}\n value={filterValues[fieldName]}\n />\n )\n })}\n </div>\n </div>\n ))\n }, [filterRows, handleFilterChange, filterValues])\n\n const toggleFilters = () => {\n setShowFilters((prev) => !prev)\n }\n\n const activeFiltersDetails = getActiveFiltersDetails()\n const hasActiveFilters = activeFiltersDetails.length > 0\n\n if (!fields.length) return null\n\n return (\n <div className=\"filter-container useTw\">\n <div style={{ position: 'relative', top: '-24px', height: '0px' }}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={toggleFilters}\n className={`flex items-center gap-2 bg-background border-muted-muted hover:bg-muted ${\n hasActiveFilters ? 'w-auto min-w-fit' : ''\n }`}\n >\n <Filter className={`h-4 w-4 ${hasActiveFilters ? 'fill-current' : ''}`} />\n\n {hasActiveFilters ? (\n <>\n <span className=\"text-sm truncate\">\n <strong>\n {`${activeFiltersDetails.length === 1 ? getLabel('activeFilterSingular', locale) : getLabel('activeFilterPlural', locale)}: `}\n </strong>{' '}\n {activeFiltersDetails.join(' • ')}\n </span>\n\n <span\n onClick={(e) => {\n e.stopPropagation()\n clearAllFilters()\n }}\n className=\"ml-1 p-0.5 hover:bg-muted rounded-sm transition-colors flex-shrink-0\"\n >\n <X className=\"h-3 w-3 text-gray-500\" />\n </span>\n <span\n onClick={(e) => {\n e.stopPropagation()\n refreshFilters()\n }}\n className=\"ml-1 p-0.5 hover:bg-muted rounded-sm transition-colors flex-shrink-0\"\n >\n <RefreshCw className=\"h-3 w-3 text-gray-500\" />\n </span>\n </>\n ) : (\n <span className=\"text-sm truncate\">{getLabel('quickFilters', locale)}</span>\n )}\n\n {showFilters ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n </div>\n {showFilters && <div className={'p-4 pb-2 bg-muted'}>{memoizedFilterRows}</div>}\n </div>\n )\n}\n\nexport default QuickFilter\n"],"names":["useCallback","useEffect","useMemo","useState","useConfig","useListQuery","useTranslation","getTranslation","FilterField","getLabel","groupFiltersByRow","ChevronDown","ChevronUp","Filter","RefreshCw","X","isEqual","getDateFilterOptions","Button","buildQuickFilterConditions","parseWhereClauseToFilterValues","getLocalizedLabel","label","locale","Object","values","findFieldsByName","fields","fieldNames","results","recursiveSearch","currentFields","filteredFields","filter","field","includes","name","virtual","push","forEach","item","type","Array","isArray","tabs","tab","blocks","block","cleanWhereClause","clause","fieldsToClean","newClause","key","cleanedSubClauses","map","subClause","Boolean","length","has","keys","and","or","QuickFilter","slug","filterList","setFields","filterRows","setFilterRows","showFilters","setShowFilters","refineListData","query","getEntityConfig","i18n","language","filterValues","setFilterValues","collection","collectionSlug","flattenedFieldConfigs","flatMap","row","rowIndex","fieldIndex","matchedFields","simplifiedFields","translatedLabel","fieldName","fieldConfig","find","f","options","undefined","width","sortedFields","valuesFromQuery","where","quickFilterConditions","quickFilterFieldNames","Set","otherFilters","allConditions","newWhere","refinedData","page","then","r","console","log","handleFilterChange","value","prev","newValues","getActiveFiltersDetails","activeFilters","entries","dateValue","dateDescription","predefinedValue","pastOptions","futureOptions","allOptions","option","opt","customRange","selectValue","selectedValues","totalOptions","selectedOption","optionLabel","checkboxValue","clearAllFilters","refreshFilters","memoizedFilterRows","div","className","filters","onFilterChange","rowNumber","toggleFilters","activeFiltersDetails","hasActiveFilters","style","position","top","height","variant","size","onClick","span","strong","join","e","stopPropagation"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shefing/quickfilter",
3
- "version": "1.0.58",
3
+ "version": "1.0.60",
4
4
  "private": false,
5
5
  "bugs": "https://github.com/shefing/payload-tools/issues",
6
6
  "repository": "https://github.com/shefing/payload-tools",