@vuu-ui/vuu-filters 0.13.60 → 0.13.63

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.
@@ -37,7 +37,15 @@ const FilterContainerColumnFilter = ({
37
37
  if (currentFilterRef.current !== currentFilter.id) {
38
38
  currentFilterRef.current = currentFilter.id;
39
39
  if (FilterContext.isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
40
- valueRef.current = Array.isArray(valueRef.current) ? ["", ""] : "";
40
+ if (Array.isArray(valueRef.current)) {
41
+ if (column.type === "time") {
42
+ valueRef.current = ["00:00:00", "23:59:59"];
43
+ } else {
44
+ valueRef.current = ["", ""];
45
+ }
46
+ } else {
47
+ valueRef.current = "";
48
+ }
41
49
  setValue(valueRef.current);
42
50
  } else if (FilterContext.filterDescriptorHasFilter(currentFilter)) {
43
51
  const v = vuuUtils.getColumnValueFromFilter(
@@ -1 +1 @@
1
- {"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport {\n filterDescriptorHasFilter,\n isNullFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterContext\";\nimport { getColumnValueFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport filterContainerCss from \"./FilterContainer.css\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n filterProviderKey?: string;\n}\n\nexport interface FilterContainerColumnFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerColumnFilter = ({\n column,\n operator = \"=\",\n variant,\n ...props\n}: FilterContainerColumnFilterProps) => {\n const {\n filterProviderKey,\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useSavedFilters(filterProviderKey);\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter.id);\n\n useMemo(() => {\n if (currentFilterRef.current !== currentFilter.id) {\n currentFilterRef.current = currentFilter.id;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n valueRef.current = Array.isArray(valueRef.current) ? [\"\", \"\"] : \"\";\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n operator === \"between\" &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter.id]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n variant={variant}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-container\",\n css: filterContainerCss,\n window: targetWindow,\n });\n\n const filterContextProps = useFilterContainer({\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div\n {...htmlAttributes}\n className={cx(classBase, className, \"vuuScrollable\")}\n >\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["useFilterContext","useMemo","useState","useRef","useSavedFilters","isNullFilter","filterDescriptorHasFilter","getColumnValueFromFilter","useCallback","column","value","jsx","ColumnFilter","useWindow","useComponentCssInjection","filterContainerCss","useFilterContainer","ColumnFilterContext"],"mappings":"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"}
1
+ {"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport {\n filterDescriptorHasFilter,\n isNullFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterContext\";\nimport { getColumnValueFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport filterContainerCss from \"./FilterContainer.css\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n filterProviderKey?: string;\n}\n\nexport interface FilterContainerColumnFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerColumnFilter = ({\n column,\n operator = \"=\",\n variant,\n ...props\n}: FilterContainerColumnFilterProps) => {\n const {\n filterProviderKey,\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useSavedFilters(filterProviderKey);\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter.id);\n\n useMemo(() => {\n if (currentFilterRef.current !== currentFilter.id) {\n currentFilterRef.current = currentFilter.id;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n if (Array.isArray(valueRef.current)) {\n if (column.type === \"time\") {\n valueRef.current = [\"00:00:00\", \"23:59:59\"];\n } else {\n valueRef.current = [\"\", \"\"];\n }\n } else {\n valueRef.current = \"\";\n }\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n operator === \"between\" &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter.id]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n variant={variant}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-container\",\n css: filterContainerCss,\n window: targetWindow,\n });\n\n const filterContextProps = useFilterContainer({\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div\n {...htmlAttributes}\n className={cx(classBase, className, \"vuuScrollable\")}\n >\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["useFilterContext","useMemo","useState","useRef","useSavedFilters","isNullFilter","filterDescriptorHasFilter","getColumnValueFromFilter","useCallback","column","value","jsx","ColumnFilter","useWindow","useComponentCssInjection","filterContainerCss","useFilterContainer","ColumnFilterContext"],"mappings":"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"}
@@ -66,8 +66,8 @@ function useSavedFilters(key = "GLOBAL", props) {
66
66
  [key, saveFilter]
67
67
  );
68
68
  const handleSetCurrentFilter = react.useCallback(
69
- (filter) => {
70
- setCurrentFilter(key, filter);
69
+ (filter, localKey = key) => {
70
+ setCurrentFilter(localKey, filter);
71
71
  },
72
72
  [key, setCurrentFilter]
73
73
  );
@@ -1 +1 @@
1
- {"version":3,"file":"FilterContext.js","sources":["../../../../packages/vuu-filters/src/filter-provider/FilterContext.ts"],"sourcesContent":["import {\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n FilterContainerFilterDescriptorWithFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { FilterAction } from \"../filter-pill/FilterMenu\";\nimport { createContext, useCallback, useContext } from \"react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nexport const filterDescriptorHasFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n !isEmptyFilter(f) && !isNullFilter(f);\n\nconst isSavedFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n f.id !== UNSAVED_FILTER && f.id !== NULL_FILTER && f.id !== EMPTY_FILTER;\n\nconst getCurrentFilter = (\n key: string,\n savedFilters: Map<string, FilterContainerFilterDescriptor[]>,\n) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors) {\n const activeFilter = filterDescriptors.find((f) => f.active);\n if (activeFilter) {\n return activeFilter;\n }\n }\n return NullFilterDescriptor;\n};\n\nexport type FilterContextFilterMenuActionHandler = <\n T extends FilterAction = FilterAction,\n>(\n key: string,\n filterId: string,\n filterAction: T,\n /**\n * Some menu action handlers may use columns to enrich filter display\n */\n columns?: ColumnDescriptor[],\n) => void;\n\nexport interface FilterContextProps {\n deleteFilter: (key: string, filterId: string) => void;\n saveFilter: (key: string, name: string) => void;\n filterDescriptors: Map<string, FilterContainerFilterDescriptor[]>;\n onFilterMenuAction?: FilterContextFilterMenuActionHandler;\n setCurrentFilter: (\n key: string,\n filter: string | FilterContainerFilter,\n ) => void;\n}\n\nexport const UNSAVED_FILTER = \"unsaved-filter\";\nexport const EMPTY_FILTER = \"empty-filter\";\nexport const NULL_FILTER = \"null-filter\";\n\nexport const isEmptyFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === EMPTY_FILTER;\nexport const isNullFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === NULL_FILTER;\n\nexport const NullFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: NULL_FILTER,\n filter: null,\n};\n\nexport const EmptyFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: EMPTY_FILTER,\n filter: null,\n};\n\nexport const FilterContext = createContext<FilterContextProps>({\n filterDescriptors: new Map<string, FilterContainerFilterDescriptor[]>(),\n deleteFilter: () =>\n console.warn(\n \"[FilterContext] deleteFilter, no FilterProvider has been configured\",\n ),\n\n saveFilter: () =>\n console.warn(\n \"[FilterContext] saveFilter, no FilterProvider has been configured\",\n ),\n setCurrentFilter: () =>\n console.warn(\n \"[FilterContext] setCurrentFilter, no FilterProvider has been configured\",\n ),\n});\n\ninterface SavedFilterHookProps {\n availableColumns?: ColumnDescriptor[];\n}\n\nexport function useSavedFilters(key = \"GLOBAL\", props?: SavedFilterHookProps) {\n const {\n onFilterMenuAction,\n filterDescriptors,\n saveFilter,\n setCurrentFilter,\n } = useContext(FilterContext);\n\n const handleFilterMenuAction = useCallback(\n (filterId: string, filterAction: FilterAction) => {\n onFilterMenuAction?.(\n key,\n filterId,\n filterAction,\n props?.availableColumns,\n );\n },\n [key, onFilterMenuAction, props?.availableColumns],\n );\n\n const handleSaveFilter = useCallback(\n (name: string) => {\n saveFilter(key, name);\n },\n [key, saveFilter],\n );\n\n const handleSetCurrentFilter = useCallback(\n (filter: string | FilterContainerFilter) => {\n setCurrentFilter(key, filter);\n },\n [key, setCurrentFilter],\n );\n\n return {\n currentFilter: getCurrentFilter(key, filterDescriptors),\n onFilterMenuAction: handleFilterMenuAction,\n savedFilters: filterDescriptors?.get(key)?.filter(isSavedFilter),\n saveFilter: handleSaveFilter,\n setCurrentFilter: handleSetCurrentFilter,\n };\n}\n"],"names":["createContext","useContext","useCallback"],"mappings":"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"}
1
+ {"version":3,"file":"FilterContext.js","sources":["../../../../packages/vuu-filters/src/filter-provider/FilterContext.ts"],"sourcesContent":["import {\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n FilterContainerFilterDescriptorWithFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { FilterAction } from \"../filter-pill/FilterMenu\";\nimport { createContext, useCallback, useContext } from \"react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nexport const filterDescriptorHasFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n !isEmptyFilter(f) && !isNullFilter(f);\n\nconst isSavedFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n f.id !== UNSAVED_FILTER && f.id !== NULL_FILTER && f.id !== EMPTY_FILTER;\n\nconst getCurrentFilter = (\n key: string,\n savedFilters: Map<string, FilterContainerFilterDescriptor[]>,\n) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors) {\n const activeFilter = filterDescriptors.find((f) => f.active);\n if (activeFilter) {\n return activeFilter;\n }\n }\n return NullFilterDescriptor;\n};\n\nexport type FilterContextFilterMenuActionHandler = <\n T extends FilterAction = FilterAction,\n>(\n key: string,\n filterId: string,\n filterAction: T,\n /**\n * Some menu action handlers may use columns to enrich filter display\n */\n columns?: ColumnDescriptor[],\n) => void;\n\nexport interface FilterContextProps {\n deleteFilter: (key: string, filterId: string) => void;\n saveFilter: (key: string, name: string) => void;\n filterDescriptors: Map<string, FilterContainerFilterDescriptor[]>;\n onFilterMenuAction?: FilterContextFilterMenuActionHandler;\n setCurrentFilter: (\n key: string,\n filter: string | FilterContainerFilter,\n ) => void;\n}\n\nexport const UNSAVED_FILTER = \"unsaved-filter\";\nexport const EMPTY_FILTER = \"empty-filter\";\nexport const NULL_FILTER = \"null-filter\";\n\nexport const isEmptyFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === EMPTY_FILTER;\nexport const isNullFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === NULL_FILTER;\n\nexport const NullFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: NULL_FILTER,\n filter: null,\n};\n\nexport const EmptyFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: EMPTY_FILTER,\n filter: null,\n};\n\nexport const FilterContext = createContext<FilterContextProps>({\n filterDescriptors: new Map<string, FilterContainerFilterDescriptor[]>(),\n deleteFilter: () =>\n console.warn(\n \"[FilterContext] deleteFilter, no FilterProvider has been configured\",\n ),\n\n saveFilter: () =>\n console.warn(\n \"[FilterContext] saveFilter, no FilterProvider has been configured\",\n ),\n setCurrentFilter: () =>\n console.warn(\n \"[FilterContext] setCurrentFilter, no FilterProvider has been configured\",\n ),\n});\n\ninterface SavedFilterHookProps {\n availableColumns?: ColumnDescriptor[];\n}\n\nexport function useSavedFilters(key = \"GLOBAL\", props?: SavedFilterHookProps) {\n const {\n onFilterMenuAction,\n filterDescriptors,\n saveFilter,\n setCurrentFilter,\n } = useContext(FilterContext);\n\n const handleFilterMenuAction = useCallback(\n (filterId: string, filterAction: FilterAction) => {\n onFilterMenuAction?.(\n key,\n filterId,\n filterAction,\n props?.availableColumns,\n );\n },\n [key, onFilterMenuAction, props?.availableColumns],\n );\n\n const handleSaveFilter = useCallback(\n (name: string) => {\n saveFilter(key, name);\n },\n [key, saveFilter],\n );\n\n /**\n * Set the current filter, using the filterProviderKey specified\n * in hook call. Alternatively, a localKey can be provided in this\n * call to override the key above. This can be useful where\n * setCurrentFilter is called from a hook where the key is not in\n * scope at the point where useSavedFilters is called.\n */\n const handleSetCurrentFilter = useCallback(\n (filter: string | FilterContainerFilter, localKey = key) => {\n setCurrentFilter(localKey, filter);\n },\n [key, setCurrentFilter],\n );\n\n return {\n currentFilter: getCurrentFilter(key, filterDescriptors),\n onFilterMenuAction: handleFilterMenuAction,\n savedFilters: filterDescriptors?.get(key)?.filter(isSavedFilter),\n saveFilter: handleSaveFilter,\n setCurrentFilter: handleSetCurrentFilter,\n };\n}\n"],"names":["createContext","useContext","useCallback"],"mappings":"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"}
@@ -35,7 +35,15 @@ const FilterContainerColumnFilter = ({
35
35
  if (currentFilterRef.current !== currentFilter.id) {
36
36
  currentFilterRef.current = currentFilter.id;
37
37
  if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
38
- valueRef.current = Array.isArray(valueRef.current) ? ["", ""] : "";
38
+ if (Array.isArray(valueRef.current)) {
39
+ if (column.type === "time") {
40
+ valueRef.current = ["00:00:00", "23:59:59"];
41
+ } else {
42
+ valueRef.current = ["", ""];
43
+ }
44
+ } else {
45
+ valueRef.current = "";
46
+ }
39
47
  setValue(valueRef.current);
40
48
  } else if (filterDescriptorHasFilter(currentFilter)) {
41
49
  const v = getColumnValueFromFilter(
@@ -1 +1 @@
1
- {"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport {\n filterDescriptorHasFilter,\n isNullFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterContext\";\nimport { getColumnValueFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport filterContainerCss from \"./FilterContainer.css\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n filterProviderKey?: string;\n}\n\nexport interface FilterContainerColumnFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerColumnFilter = ({\n column,\n operator = \"=\",\n variant,\n ...props\n}: FilterContainerColumnFilterProps) => {\n const {\n filterProviderKey,\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useSavedFilters(filterProviderKey);\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter.id);\n\n useMemo(() => {\n if (currentFilterRef.current !== currentFilter.id) {\n currentFilterRef.current = currentFilter.id;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n valueRef.current = Array.isArray(valueRef.current) ? [\"\", \"\"] : \"\";\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n operator === \"between\" &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter.id]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n variant={variant}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-container\",\n css: filterContainerCss,\n window: targetWindow,\n });\n\n const filterContextProps = useFilterContainer({\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div\n {...htmlAttributes}\n className={cx(classBase, className, \"vuuScrollable\")}\n >\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["column","value"],"mappings":"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"}
1
+ {"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport {\n filterDescriptorHasFilter,\n isNullFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterContext\";\nimport { getColumnValueFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport filterContainerCss from \"./FilterContainer.css\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n filterProviderKey?: string;\n}\n\nexport interface FilterContainerColumnFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerColumnFilter = ({\n column,\n operator = \"=\",\n variant,\n ...props\n}: FilterContainerColumnFilterProps) => {\n const {\n filterProviderKey,\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useSavedFilters(filterProviderKey);\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter.id);\n\n useMemo(() => {\n if (currentFilterRef.current !== currentFilter.id) {\n currentFilterRef.current = currentFilter.id;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n if (Array.isArray(valueRef.current)) {\n if (column.type === \"time\") {\n valueRef.current = [\"00:00:00\", \"23:59:59\"];\n } else {\n valueRef.current = [\"\", \"\"];\n }\n } else {\n valueRef.current = \"\";\n }\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n operator === \"between\" &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter.id]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n variant={variant}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-container\",\n css: filterContainerCss,\n window: targetWindow,\n });\n\n const filterContextProps = useFilterContainer({\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div\n {...htmlAttributes}\n className={cx(classBase, className, \"vuuScrollable\")}\n >\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["column","value"],"mappings":"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"}
@@ -64,8 +64,8 @@ function useSavedFilters(key = "GLOBAL", props) {
64
64
  [key, saveFilter]
65
65
  );
66
66
  const handleSetCurrentFilter = useCallback(
67
- (filter) => {
68
- setCurrentFilter(key, filter);
67
+ (filter, localKey = key) => {
68
+ setCurrentFilter(localKey, filter);
69
69
  },
70
70
  [key, setCurrentFilter]
71
71
  );
@@ -1 +1 @@
1
- {"version":3,"file":"FilterContext.js","sources":["../../../../packages/vuu-filters/src/filter-provider/FilterContext.ts"],"sourcesContent":["import {\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n FilterContainerFilterDescriptorWithFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { FilterAction } from \"../filter-pill/FilterMenu\";\nimport { createContext, useCallback, useContext } from \"react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nexport const filterDescriptorHasFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n !isEmptyFilter(f) && !isNullFilter(f);\n\nconst isSavedFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n f.id !== UNSAVED_FILTER && f.id !== NULL_FILTER && f.id !== EMPTY_FILTER;\n\nconst getCurrentFilter = (\n key: string,\n savedFilters: Map<string, FilterContainerFilterDescriptor[]>,\n) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors) {\n const activeFilter = filterDescriptors.find((f) => f.active);\n if (activeFilter) {\n return activeFilter;\n }\n }\n return NullFilterDescriptor;\n};\n\nexport type FilterContextFilterMenuActionHandler = <\n T extends FilterAction = FilterAction,\n>(\n key: string,\n filterId: string,\n filterAction: T,\n /**\n * Some menu action handlers may use columns to enrich filter display\n */\n columns?: ColumnDescriptor[],\n) => void;\n\nexport interface FilterContextProps {\n deleteFilter: (key: string, filterId: string) => void;\n saveFilter: (key: string, name: string) => void;\n filterDescriptors: Map<string, FilterContainerFilterDescriptor[]>;\n onFilterMenuAction?: FilterContextFilterMenuActionHandler;\n setCurrentFilter: (\n key: string,\n filter: string | FilterContainerFilter,\n ) => void;\n}\n\nexport const UNSAVED_FILTER = \"unsaved-filter\";\nexport const EMPTY_FILTER = \"empty-filter\";\nexport const NULL_FILTER = \"null-filter\";\n\nexport const isEmptyFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === EMPTY_FILTER;\nexport const isNullFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === NULL_FILTER;\n\nexport const NullFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: NULL_FILTER,\n filter: null,\n};\n\nexport const EmptyFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: EMPTY_FILTER,\n filter: null,\n};\n\nexport const FilterContext = createContext<FilterContextProps>({\n filterDescriptors: new Map<string, FilterContainerFilterDescriptor[]>(),\n deleteFilter: () =>\n console.warn(\n \"[FilterContext] deleteFilter, no FilterProvider has been configured\",\n ),\n\n saveFilter: () =>\n console.warn(\n \"[FilterContext] saveFilter, no FilterProvider has been configured\",\n ),\n setCurrentFilter: () =>\n console.warn(\n \"[FilterContext] setCurrentFilter, no FilterProvider has been configured\",\n ),\n});\n\ninterface SavedFilterHookProps {\n availableColumns?: ColumnDescriptor[];\n}\n\nexport function useSavedFilters(key = \"GLOBAL\", props?: SavedFilterHookProps) {\n const {\n onFilterMenuAction,\n filterDescriptors,\n saveFilter,\n setCurrentFilter,\n } = useContext(FilterContext);\n\n const handleFilterMenuAction = useCallback(\n (filterId: string, filterAction: FilterAction) => {\n onFilterMenuAction?.(\n key,\n filterId,\n filterAction,\n props?.availableColumns,\n );\n },\n [key, onFilterMenuAction, props?.availableColumns],\n );\n\n const handleSaveFilter = useCallback(\n (name: string) => {\n saveFilter(key, name);\n },\n [key, saveFilter],\n );\n\n const handleSetCurrentFilter = useCallback(\n (filter: string | FilterContainerFilter) => {\n setCurrentFilter(key, filter);\n },\n [key, setCurrentFilter],\n );\n\n return {\n currentFilter: getCurrentFilter(key, filterDescriptors),\n onFilterMenuAction: handleFilterMenuAction,\n savedFilters: filterDescriptors?.get(key)?.filter(isSavedFilter),\n saveFilter: handleSaveFilter,\n setCurrentFilter: handleSetCurrentFilter,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FilterContext.js","sources":["../../../../packages/vuu-filters/src/filter-provider/FilterContext.ts"],"sourcesContent":["import {\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n FilterContainerFilterDescriptorWithFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { FilterAction } from \"../filter-pill/FilterMenu\";\nimport { createContext, useCallback, useContext } from \"react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nexport const filterDescriptorHasFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n !isEmptyFilter(f) && !isNullFilter(f);\n\nconst isSavedFilter = (\n f: FilterContainerFilterDescriptor,\n): f is FilterContainerFilterDescriptorWithFilter =>\n f.id !== UNSAVED_FILTER && f.id !== NULL_FILTER && f.id !== EMPTY_FILTER;\n\nconst getCurrentFilter = (\n key: string,\n savedFilters: Map<string, FilterContainerFilterDescriptor[]>,\n) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors) {\n const activeFilter = filterDescriptors.find((f) => f.active);\n if (activeFilter) {\n return activeFilter;\n }\n }\n return NullFilterDescriptor;\n};\n\nexport type FilterContextFilterMenuActionHandler = <\n T extends FilterAction = FilterAction,\n>(\n key: string,\n filterId: string,\n filterAction: T,\n /**\n * Some menu action handlers may use columns to enrich filter display\n */\n columns?: ColumnDescriptor[],\n) => void;\n\nexport interface FilterContextProps {\n deleteFilter: (key: string, filterId: string) => void;\n saveFilter: (key: string, name: string) => void;\n filterDescriptors: Map<string, FilterContainerFilterDescriptor[]>;\n onFilterMenuAction?: FilterContextFilterMenuActionHandler;\n setCurrentFilter: (\n key: string,\n filter: string | FilterContainerFilter,\n ) => void;\n}\n\nexport const UNSAVED_FILTER = \"unsaved-filter\";\nexport const EMPTY_FILTER = \"empty-filter\";\nexport const NULL_FILTER = \"null-filter\";\n\nexport const isEmptyFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === EMPTY_FILTER;\nexport const isNullFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === NULL_FILTER;\n\nexport const NullFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: NULL_FILTER,\n filter: null,\n};\n\nexport const EmptyFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: EMPTY_FILTER,\n filter: null,\n};\n\nexport const FilterContext = createContext<FilterContextProps>({\n filterDescriptors: new Map<string, FilterContainerFilterDescriptor[]>(),\n deleteFilter: () =>\n console.warn(\n \"[FilterContext] deleteFilter, no FilterProvider has been configured\",\n ),\n\n saveFilter: () =>\n console.warn(\n \"[FilterContext] saveFilter, no FilterProvider has been configured\",\n ),\n setCurrentFilter: () =>\n console.warn(\n \"[FilterContext] setCurrentFilter, no FilterProvider has been configured\",\n ),\n});\n\ninterface SavedFilterHookProps {\n availableColumns?: ColumnDescriptor[];\n}\n\nexport function useSavedFilters(key = \"GLOBAL\", props?: SavedFilterHookProps) {\n const {\n onFilterMenuAction,\n filterDescriptors,\n saveFilter,\n setCurrentFilter,\n } = useContext(FilterContext);\n\n const handleFilterMenuAction = useCallback(\n (filterId: string, filterAction: FilterAction) => {\n onFilterMenuAction?.(\n key,\n filterId,\n filterAction,\n props?.availableColumns,\n );\n },\n [key, onFilterMenuAction, props?.availableColumns],\n );\n\n const handleSaveFilter = useCallback(\n (name: string) => {\n saveFilter(key, name);\n },\n [key, saveFilter],\n );\n\n /**\n * Set the current filter, using the filterProviderKey specified\n * in hook call. Alternatively, a localKey can be provided in this\n * call to override the key above. This can be useful where\n * setCurrentFilter is called from a hook where the key is not in\n * scope at the point where useSavedFilters is called.\n */\n const handleSetCurrentFilter = useCallback(\n (filter: string | FilterContainerFilter, localKey = key) => {\n setCurrentFilter(localKey, filter);\n },\n [key, setCurrentFilter],\n );\n\n return {\n currentFilter: getCurrentFilter(key, filterDescriptors),\n onFilterMenuAction: handleFilterMenuAction,\n savedFilters: filterDescriptors?.get(key)?.filter(isSavedFilter),\n saveFilter: handleSaveFilter,\n setCurrentFilter: handleSetCurrentFilter,\n };\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
- "version": "0.13.60",
2
+ "version": "0.13.63",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.13.60",
8
- "@vuu-ui/vuu-protocol-types": "0.13.60",
9
- "@vuu-ui/vuu-table-types": "0.13.60",
10
- "@vuu-ui/vuu-filter-types": "0.13.60"
7
+ "@vuu-ui/vuu-data-types": "0.13.63",
8
+ "@vuu-ui/vuu-protocol-types": "0.13.63",
9
+ "@vuu-ui/vuu-table-types": "0.13.63",
10
+ "@vuu-ui/vuu-filter-types": "0.13.63"
11
11
  },
12
12
  "dependencies": {
13
- "@vuu-ui/vuu-data-react": "0.13.60",
14
- "@vuu-ui/vuu-filter-parser": "0.13.60",
15
- "@vuu-ui/vuu-popups": "0.13.60",
16
- "@vuu-ui/vuu-ui-controls": "0.13.60",
17
- "@vuu-ui/vuu-table": "0.13.60",
18
- "@vuu-ui/vuu-utils": "0.13.60",
13
+ "@vuu-ui/vuu-data-react": "0.13.63",
14
+ "@vuu-ui/vuu-filter-parser": "0.13.63",
15
+ "@vuu-ui/vuu-popups": "0.13.63",
16
+ "@vuu-ui/vuu-ui-controls": "0.13.63",
17
+ "@vuu-ui/vuu-table": "0.13.63",
18
+ "@vuu-ui/vuu-utils": "0.13.63",
19
19
  "@salt-ds/core": "1.48.0",
20
20
  "@salt-ds/lab": "1.0.0-alpha.76",
21
21
  "@salt-ds/styles": "0.2.1",
@@ -1 +1,2 @@
1
1
  export * from "./FilterBar";
2
+ export type { FilterMode } from "./useFilterBar";
@@ -30,6 +30,6 @@ export declare function useSavedFilters(key?: string, props?: SavedFilterHookPro
30
30
  onFilterMenuAction: (filterId: string, filterAction: FilterAction) => void;
31
31
  savedFilters: FilterContainerFilterDescriptorWithFilter[] | undefined;
32
32
  saveFilter: (name: string) => void;
33
- setCurrentFilter: (filter: string | FilterContainerFilter) => void;
33
+ setCurrentFilter: (filter: string | FilterContainerFilter, localKey?: string) => void;
34
34
  };
35
35
  export {};