@artsy/palette 46.9.1 → 46.9.2
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.
- package/dist/cjs/elements/FilterSelect/Components/FilterSelectContext.js +1 -0
- package/dist/cjs/elements/FilterSelect/Components/FilterSelectContext.js.map +1 -1
- package/dist/cjs/elements/FilterSelect/FilterSelect.js +1 -1
- package/dist/cjs/elements/FilterSelect/FilterSelect.js.map +1 -1
- package/dist/esm/elements/FilterSelect/Components/FilterSelectContext.js +1 -0
- package/dist/esm/elements/FilterSelect/Components/FilterSelectContext.js.map +1 -1
- package/dist/esm/elements/FilterSelect/FilterSelect.js +1 -1
- package/dist/esm/elements/FilterSelect/FilterSelect.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements/FilterSelect/Components/FilterSelectContext.js","sources":["webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/elements/FilterSelect/Components/FilterSelectContext.tsx"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React, {\n createContext,\n useContext,\n useLayoutEffect,\n useReducer,\n} from \"react\"\nimport { useUpdateEffect } from \"../../../utils\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../../ShowMore\"\n\nexport interface Item {\n label: string\n value: string\n [key: string]: string | number | boolean\n}\n\n// In order to satisfy the Relay compilers readonly list types. This is in\n// support for passing different kinds of item types as props, like aggregations\nexport type Items = ReadonlyArray<Item>\n\nexport interface FilterSelectChangeState {\n items: FilterSelectContextProps[\"items\"]\n filteredItems: FilterSelectContextProps[\"filteredItems\"]\n selectedItems: FilterSelectContextProps[\"selectedItems\"]\n query: FilterSelectContextProps[\"query\"]\n}\n\ninterface FilterSelectContextProps {\n enableSelectAll?: boolean\n filteredItems: Items\n initialItemsToShow: number\n isFiltered: boolean\n items: Items\n moveSelectedToTop: boolean\n multiselect: boolean\n onChange: (state: FilterSelectChangeState) => void\n onSelectAll?: (state: FilterSelectChangeState) => void\n order: [string[], Array<\"asc\" | \"desc\">] // See: https://lodash.com/docs/4.17.15#orderBy\n placeholder: string\n query: string\n renderItemLabel?: (item: any) => string\n searchableText?: (item: Item) => string\n selectedItems: Items\n setQuery: (query: string) => void\n setSelectedItems: (items: Items) => void\n toggleSelectedItem: (item: Item) => void\n}\n\nexport type FilterSelectState = Pick<\n FilterSelectContextProps,\n | \"enableSelectAll\"\n | \"filteredItems\"\n | \"initialItemsToShow\"\n | \"isFiltered\"\n | \"items\"\n | \"moveSelectedToTop\"\n | \"multiselect\"\n | \"onChange\"\n | \"onSelectAll\"\n | \"order\"\n | \"placeholder\"\n | \"query\"\n | \"renderItemLabel\"\n | \"searchableText\"\n | \"selectedItems\"\n>\n\ntype Action =\n | { type: \"SET_QUERY\"; payload: { query: string } }\n | { type: \"TOGGLE_SELECTED_ITEM\"; payload: { item: Item } }\n | { type: \"SET_SELECTED_ITEMS\"; payload: { items: Items } }\n\nconst filterSelectReducer = (state: FilterSelectState, action: Action) => {\n switch (action.type) {\n case \"SET_QUERY\": {\n const { query } = action.payload\n const { items, searchableText } = state\n\n if (query === \"\") {\n return {\n ...state,\n query,\n isFiltered: false,\n filteredItems: [],\n }\n }\n\n const filteredItems = items.filter((item) => {\n const text = searchableText?.(item) ?? item.label\n return text.toLowerCase().includes(query.toLowerCase())\n })\n\n return {\n ...state,\n query,\n isFiltered: true,\n filteredItems,\n }\n }\n\n case \"TOGGLE_SELECTED_ITEM\": {\n const isFound = !!state.selectedItems.find(\n (item) => item.value === action.payload.item.value\n )\n\n let selectedItems\n if (isFound) {\n selectedItems = state.selectedItems.filter(\n (item) => item.value !== action.payload.item.value\n )\n } else {\n selectedItems = state.multiselect\n ? [...state.selectedItems, action.payload.item]\n : [action.payload.item]\n }\n\n return {\n ...state,\n selectedItems,\n }\n }\n\n case \"SET_SELECTED_ITEMS\": {\n const { items } = action.payload\n\n return {\n ...state,\n selectedItems: items,\n }\n }\n }\n}\n\nconst initialState: FilterSelectState = {\n filteredItems: [],\n initialItemsToShow: INITIAL_ITEMS_TO_SHOW,\n isFiltered: false,\n items: [],\n moveSelectedToTop: true,\n multiselect: true,\n onChange: (x) => x,\n order: [[\"label\"], [\"asc\"]],\n placeholder: \"\",\n query: \"\",\n renderItemLabel: undefined,\n selectedItems: [],\n}\n\nconst FilterSelectContext = createContext<FilterSelectContextProps>({} as any)\n\nexport const FilterSelectContextProvider: React.FC<\n React.PropsWithChildren<Partial<FilterSelectState>>\n> = ({ children, ...props }) => {\n const [state, dispatch] = useReducer(filterSelectReducer, {\n ...initialState,\n ...props,\n })\n\n const contextValue = {\n ...state,\n\n toggleSelectedItem: (item) => {\n dispatch({\n type: \"TOGGLE_SELECTED_ITEM\",\n payload: { item },\n })\n },\n setQuery: (query) => {\n dispatch({\n type: \"SET_QUERY\",\n payload: { query },\n })\n },\n setSelectedItems: (items) => {\n dispatch({\n type: \"SET_SELECTED_ITEMS\",\n payload: {\n items,\n },\n })\n },\n }\n\n useUpdateEffect(() => {\n if (props.selectedItems) {\n contextValue.setSelectedItems(props.selectedItems)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.selectedItems?.length])\n\n useLayoutEffect(() => {\n if (props.query?.length) {\n contextValue.setQuery(props.query)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <FilterSelectContext.Provider value={contextValue}>\n {children}\n </FilterSelectContext.Provider>\n )\n}\n\nexport const useFilterSelectContext = () => {\n return useContext(FilterSelectContext)\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","filterSelectReducer","state","action","query","items","searchableText","filteredItems","item","text","isFound","selectedItems","initialState","INITIAL_ITEMS_TO_SHOW","x","undefined","FilterSelectContext","createContext","FilterSelectContextProvider","children","props","dispatch","useReducer","contextValue","useUpdateEffect","useLayoutEffect","useFilterSelectContext","useContext"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"elements/FilterSelect/Components/FilterSelectContext.js","sources":["webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/elements/FilterSelect/Components/FilterSelectContext.tsx"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React, {\n createContext,\n useContext,\n useLayoutEffect,\n useReducer,\n} from \"react\"\nimport { useUpdateEffect } from \"../../../utils\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../../ShowMore\"\n\nexport interface Item {\n label: string\n value: string\n [key: string]: string | number | boolean\n}\n\n// In order to satisfy the Relay compilers readonly list types. This is in\n// support for passing different kinds of item types as props, like aggregations\nexport type Items = ReadonlyArray<Item>\n\nexport interface FilterSelectChangeState {\n items: FilterSelectContextProps[\"items\"]\n filteredItems: FilterSelectContextProps[\"filteredItems\"]\n selectedItems: FilterSelectContextProps[\"selectedItems\"]\n query: FilterSelectContextProps[\"query\"]\n}\n\ninterface FilterSelectContextProps {\n enableSelectAll?: boolean\n filteredItems: Items\n initialItemsToShow: number\n isFiltered: boolean\n items: Items\n moveSelectedToTop: boolean\n multiselect: boolean\n onChange: (state: FilterSelectChangeState) => void\n onSelectAll?: (state: FilterSelectChangeState) => void\n order: [string[], Array<\"asc\" | \"desc\">] // See: https://lodash.com/docs/4.17.15#orderBy\n placeholder: string\n query: string\n renderItemLabel?: (item: any) => string\n searchableText?: (item: Item) => string\n selectedItems: Items\n setQuery: (query: string) => void\n setSelectedItems: (items: Items) => void\n toggleSelectedItem: (item: Item) => void\n}\n\nexport type FilterSelectState = Pick<\n FilterSelectContextProps,\n | \"enableSelectAll\"\n | \"filteredItems\"\n | \"initialItemsToShow\"\n | \"isFiltered\"\n | \"items\"\n | \"moveSelectedToTop\"\n | \"multiselect\"\n | \"onChange\"\n | \"onSelectAll\"\n | \"order\"\n | \"placeholder\"\n | \"query\"\n | \"renderItemLabel\"\n | \"searchableText\"\n | \"selectedItems\"\n>\n\ntype Action =\n | { type: \"SET_QUERY\"; payload: { query: string } }\n | { type: \"TOGGLE_SELECTED_ITEM\"; payload: { item: Item } }\n | { type: \"SET_SELECTED_ITEMS\"; payload: { items: Items } }\n\nconst filterSelectReducer = (state: FilterSelectState, action: Action) => {\n switch (action.type) {\n case \"SET_QUERY\": {\n const { query } = action.payload\n const { items, searchableText } = state\n\n if (query === \"\") {\n return {\n ...state,\n query,\n isFiltered: false,\n filteredItems: [],\n }\n }\n\n const filteredItems = items.filter((item) => {\n const text = searchableText?.(item) ?? item.label\n return text.toLowerCase().includes(query.toLowerCase())\n })\n\n return {\n ...state,\n query,\n isFiltered: true,\n filteredItems,\n }\n }\n\n case \"TOGGLE_SELECTED_ITEM\": {\n const isFound = !!state.selectedItems.find(\n (item) => item.value === action.payload.item.value\n )\n\n let selectedItems\n if (isFound) {\n selectedItems = state.selectedItems.filter(\n (item) => item.value !== action.payload.item.value\n )\n } else {\n selectedItems = state.multiselect\n ? [...state.selectedItems, action.payload.item]\n : [action.payload.item]\n }\n\n return {\n ...state,\n selectedItems,\n }\n }\n\n case \"SET_SELECTED_ITEMS\": {\n const { items } = action.payload\n\n return {\n ...state,\n selectedItems: items,\n }\n }\n }\n}\n\nconst initialState: FilterSelectState = {\n filteredItems: [],\n initialItemsToShow: INITIAL_ITEMS_TO_SHOW,\n isFiltered: false,\n items: [],\n moveSelectedToTop: true,\n multiselect: true,\n onChange: (x) => x,\n order: [[\"label\"], [\"asc\"]],\n placeholder: \"\",\n query: \"\",\n renderItemLabel: undefined,\n selectedItems: [],\n}\n\nconst FilterSelectContext = createContext<FilterSelectContextProps>({} as any)\n\nexport const FilterSelectContextProvider: React.FC<\n React.PropsWithChildren<Partial<FilterSelectState>>\n> = ({ children, ...props }) => {\n const [state, dispatch] = useReducer(filterSelectReducer, {\n ...initialState,\n ...props,\n })\n\n const contextValue = {\n ...state,\n selectedItems: state.selectedItems.filter(Boolean),\n\n toggleSelectedItem: (item) => {\n dispatch({\n type: \"TOGGLE_SELECTED_ITEM\",\n payload: { item },\n })\n },\n setQuery: (query) => {\n dispatch({\n type: \"SET_QUERY\",\n payload: { query },\n })\n },\n setSelectedItems: (items) => {\n dispatch({\n type: \"SET_SELECTED_ITEMS\",\n payload: {\n items,\n },\n })\n },\n }\n\n useUpdateEffect(() => {\n if (props.selectedItems) {\n contextValue.setSelectedItems(props.selectedItems)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.selectedItems?.length])\n\n useLayoutEffect(() => {\n if (props.query?.length) {\n contextValue.setQuery(props.query)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <FilterSelectContext.Provider value={contextValue}>\n {children}\n </FilterSelectContext.Provider>\n )\n}\n\nexport const useFilterSelectContext = () => {\n return useContext(FilterSelectContext)\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","filterSelectReducer","state","action","query","items","searchableText","filteredItems","item","text","isFound","selectedItems","initialState","INITIAL_ITEMS_TO_SHOW","x","undefined","FilterSelectContext","createContext","FilterSelectContextProvider","children","props","dispatch","useReducer","contextValue","Boolean","useUpdateEffect","useLayoutEffect","useFilterSelectContext","useContext"],"mappings":"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"}
|
|
@@ -89,7 +89,7 @@ const _FilterSelect = ()=>{
|
|
|
89
89
|
}))));
|
|
90
90
|
};
|
|
91
91
|
const isBelowTheFoldSelected = (selectedItems, resultsSorted)=>{
|
|
92
|
-
const selected = selectedItems.map(({ value })=>value);
|
|
92
|
+
const selected = selectedItems.filter(Boolean).map(({ value })=>value);
|
|
93
93
|
const results = resultsSorted.slice(index_js_namespaceObject.INITIAL_ITEMS_TO_SHOW).map(({ value })=>value);
|
|
94
94
|
const isSelected = (0, external_es_toolkit_namespaceObject.intersection)(selected, results).length > 0;
|
|
95
95
|
return isSelected;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements/FilterSelect/FilterSelect.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/elements/FilterSelect/FilterSelect.tsx"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { intersection, orderBy, uniqBy } from \"es-toolkit\"\nimport * as React from \"react\"\nimport { ShowMore } from \"../ShowMore\"\nimport { Flex } from \"../Flex\"\nimport { FilterSelectResultItem } from \"./Components/FilterSelectResultItem\"\nimport {\n FilterSelectContextProvider,\n FilterSelectState,\n Items,\n useFilterSelectContext,\n} from \"./Components/FilterSelectContext\"\nimport { FilterInput } from \"./Components/FilterInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Text } from \"../Text\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../ShowMore\"\nimport { useUpdateEffect } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Stack } from \"../Stack\"\n\nexport type FilterSelectProps = Partial<FilterSelectState>\n\nexport const FilterSelect: React.FC<\n React.PropsWithChildren<FilterSelectProps>\n> = (props) => {\n return (\n <FilterSelectContextProvider {...props}>\n <_FilterSelect />\n </FilterSelectContextProvider>\n )\n}\n\nconst _FilterSelect: React.FC<React.PropsWithChildren<unknown>> = () => {\n const {\n enableSelectAll,\n filteredItems,\n initialItemsToShow,\n isFiltered,\n items,\n moveSelectedToTop,\n multiselect,\n onChange,\n order,\n query,\n selectedItems,\n } = useFilterSelectContext()\n\n if (!multiselect && enableSelectAll) {\n console.error(\n \"FilterSelect: enableSelectAll is only available with multiselect mode.\"\n )\n }\n\n // Dispatch change event\n useUpdateEffect(() => {\n if (onChange) {\n onChange({\n items,\n filteredItems,\n selectedItems,\n query,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onChange, selectedItems])\n\n if (items.length === 0) {\n return null\n }\n\n const orderItems = (items: Items) => orderBy([...items], order[0], order[1])\n const itemsOrdered = orderItems(items)\n const filteredItemsOrdered = orderItems(filteredItems)\n const itemsSorted =\n multiselect && moveSelectedToTop\n ? // Move selected items to the top\n uniqBy(selectedItems.concat(itemsOrdered), (x) => x.value)\n : itemsOrdered\n const expanded = isBelowTheFoldSelected(selectedItems, itemsSorted)\n const showNoResults = filteredItems.length === 0 && query !== \"\"\n const showSelectAll = multiselect && enableSelectAll && !showNoResults\n\n return (\n <Flex flexDirection=\"column\">\n <FilterInput mb={1} />\n\n {query !== \"\" && (\n <VisuallyHidden aria-live=\"polite\">\n {`${filteredItems.length} result${\n filteredItems.length === 1 ? \"\" : \"s\"\n }`}\n </VisuallyHidden>\n )}\n\n {showNoResults && <Text variant=\"sm\">No results.</Text>}\n\n {isFiltered ? (\n <>\n {showSelectAll && <SelectAll />}\n {filteredItemsOrdered.map((item) => (\n <FilterSelectResultItem key={item.value} {...item} />\n ))}\n </>\n ) : (\n <ShowMore\n expanded={expanded}\n initial={initialItemsToShow}\n variant={\"xs\"}\n textDecoration=\"underline\"\n mt={1}\n textAlign=\"left\"\n >\n {itemsSorted.map((item) => {\n return <FilterSelectResultItem key={item.value} {...item} />\n })}\n </ShowMore>\n )}\n </Flex>\n )\n}\n\nexport const isBelowTheFoldSelected = (selectedItems, resultsSorted) => {\n const selected = selectedItems.map(({ value }) => value)\n const results = resultsSorted\n .slice(INITIAL_ITEMS_TO_SHOW)\n .map(({ value }) => value)\n const isSelected = intersection(selected, results).length > 0\n return isSelected\n}\n\nconst SelectAll: React.FC = () => {\n const {\n items,\n filteredItems,\n onSelectAll,\n query,\n selectedItems,\n setSelectedItems,\n } = useFilterSelectContext()\n\n const isClearDisabled = selectedItems.length === 0\n\n return (\n <Box my={1}>\n <Stack gap={2} flexDirection={\"row\"}>\n <Clickable\n data-testid=\"filterSelect-selectAll\"\n className=\"selectAll\"\n onClick={() => {\n setSelectedItems(filteredItems)\n onSelectAll?.({\n items,\n filteredItems,\n selectedItems: filteredItems,\n query,\n })\n }}\n textDecoration=\"underline\"\n >\n <Text variant=\"xs\">Select all</Text>\n </Clickable>\n\n <Clickable\n data-testid=\"filterSelect-clear\"\n className=\"clear\"\n onClick={() => setSelectedItems([])}\n textDecoration=\"underline\"\n disabled={isClearDisabled}\n color={isClearDisabled ? \"mono60\" : \"mono100\"}\n >\n <Text variant=\"xs\">Clear</Text>\n </Clickable>\n </Stack>\n </Box>\n )\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","FilterSelect","props","FilterSelectContextProvider","_FilterSelect","enableSelectAll","filteredItems","initialItemsToShow","isFiltered","items","moveSelectedToTop","multiselect","onChange","order","query","selectedItems","useFilterSelectContext","console","useUpdateEffect","orderItems","orderBy","itemsOrdered","filteredItemsOrdered","itemsSorted","uniqBy","x","expanded","isBelowTheFoldSelected","showNoResults","showSelectAll","Flex","FilterInput","VisuallyHidden","Text","SelectAll","item","FilterSelectResultItem","ShowMore","resultsSorted","selected","value","results","INITIAL_ITEMS_TO_SHOW","isSelected","intersection","onSelectAll","setSelectedItems","isClearDisabled","Box","Stack","Clickable"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"elements/FilterSelect/FilterSelect.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/elements/FilterSelect/FilterSelect.tsx"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { intersection, orderBy, uniqBy } from \"es-toolkit\"\nimport * as React from \"react\"\nimport { ShowMore } from \"../ShowMore\"\nimport { Flex } from \"../Flex\"\nimport { FilterSelectResultItem } from \"./Components/FilterSelectResultItem\"\nimport {\n FilterSelectContextProvider,\n FilterSelectState,\n Items,\n useFilterSelectContext,\n} from \"./Components/FilterSelectContext\"\nimport { FilterInput } from \"./Components/FilterInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Text } from \"../Text\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../ShowMore\"\nimport { useUpdateEffect } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Stack } from \"../Stack\"\n\nexport type FilterSelectProps = Partial<FilterSelectState>\n\nexport const FilterSelect: React.FC<\n React.PropsWithChildren<FilterSelectProps>\n> = (props) => {\n return (\n <FilterSelectContextProvider {...props}>\n <_FilterSelect />\n </FilterSelectContextProvider>\n )\n}\n\nconst _FilterSelect: React.FC<React.PropsWithChildren<unknown>> = () => {\n const {\n enableSelectAll,\n filteredItems,\n initialItemsToShow,\n isFiltered,\n items,\n moveSelectedToTop,\n multiselect,\n onChange,\n order,\n query,\n selectedItems,\n } = useFilterSelectContext()\n\n if (!multiselect && enableSelectAll) {\n console.error(\n \"FilterSelect: enableSelectAll is only available with multiselect mode.\"\n )\n }\n\n // Dispatch change event\n useUpdateEffect(() => {\n if (onChange) {\n onChange({\n items,\n filteredItems,\n selectedItems,\n query,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onChange, selectedItems])\n\n if (items.length === 0) {\n return null\n }\n\n const orderItems = (items: Items) => orderBy([...items], order[0], order[1])\n const itemsOrdered = orderItems(items)\n const filteredItemsOrdered = orderItems(filteredItems)\n const itemsSorted =\n multiselect && moveSelectedToTop\n ? // Move selected items to the top\n uniqBy(selectedItems.concat(itemsOrdered), (x) => x.value)\n : itemsOrdered\n const expanded = isBelowTheFoldSelected(selectedItems, itemsSorted)\n const showNoResults = filteredItems.length === 0 && query !== \"\"\n const showSelectAll = multiselect && enableSelectAll && !showNoResults\n\n return (\n <Flex flexDirection=\"column\">\n <FilterInput mb={1} />\n\n {query !== \"\" && (\n <VisuallyHidden aria-live=\"polite\">\n {`${filteredItems.length} result${\n filteredItems.length === 1 ? \"\" : \"s\"\n }`}\n </VisuallyHidden>\n )}\n\n {showNoResults && <Text variant=\"sm\">No results.</Text>}\n\n {isFiltered ? (\n <>\n {showSelectAll && <SelectAll />}\n {filteredItemsOrdered.map((item) => (\n <FilterSelectResultItem key={item.value} {...item} />\n ))}\n </>\n ) : (\n <ShowMore\n expanded={expanded}\n initial={initialItemsToShow}\n variant={\"xs\"}\n textDecoration=\"underline\"\n mt={1}\n textAlign=\"left\"\n >\n {itemsSorted.map((item) => {\n return <FilterSelectResultItem key={item.value} {...item} />\n })}\n </ShowMore>\n )}\n </Flex>\n )\n}\n\nexport const isBelowTheFoldSelected = (selectedItems, resultsSorted) => {\n const selected = selectedItems.filter(Boolean).map(({ value }) => value)\n const results = resultsSorted\n .slice(INITIAL_ITEMS_TO_SHOW)\n .map(({ value }) => value)\n const isSelected = intersection(selected, results).length > 0\n return isSelected\n}\n\nconst SelectAll: React.FC = () => {\n const {\n items,\n filteredItems,\n onSelectAll,\n query,\n selectedItems,\n setSelectedItems,\n } = useFilterSelectContext()\n\n const isClearDisabled = selectedItems.length === 0\n\n return (\n <Box my={1}>\n <Stack gap={2} flexDirection={\"row\"}>\n <Clickable\n data-testid=\"filterSelect-selectAll\"\n className=\"selectAll\"\n onClick={() => {\n setSelectedItems(filteredItems)\n onSelectAll?.({\n items,\n filteredItems,\n selectedItems: filteredItems,\n query,\n })\n }}\n textDecoration=\"underline\"\n >\n <Text variant=\"xs\">Select all</Text>\n </Clickable>\n\n <Clickable\n data-testid=\"filterSelect-clear\"\n className=\"clear\"\n onClick={() => setSelectedItems([])}\n textDecoration=\"underline\"\n disabled={isClearDisabled}\n color={isClearDisabled ? \"mono60\" : \"mono100\"}\n >\n <Text variant=\"xs\">Clear</Text>\n </Clickable>\n </Stack>\n </Box>\n )\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","FilterSelect","props","FilterSelectContextProvider","_FilterSelect","enableSelectAll","filteredItems","initialItemsToShow","isFiltered","items","moveSelectedToTop","multiselect","onChange","order","query","selectedItems","useFilterSelectContext","console","useUpdateEffect","orderItems","orderBy","itemsOrdered","filteredItemsOrdered","itemsSorted","uniqBy","x","expanded","isBelowTheFoldSelected","showNoResults","showSelectAll","Flex","FilterInput","VisuallyHidden","Text","SelectAll","item","FilterSelectResultItem","ShowMore","resultsSorted","selected","Boolean","value","results","INITIAL_ITEMS_TO_SHOW","isSelected","intersection","onSelectAll","setSelectedItems","isClearDisabled","Box","Stack","Clickable"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements/FilterSelect/Components/FilterSelectContext.js","sources":["../../../../../src/elements/FilterSelect/Components/FilterSelectContext.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useLayoutEffect,\n useReducer,\n} from \"react\"\nimport { useUpdateEffect } from \"../../../utils\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../../ShowMore\"\n\nexport interface Item {\n label: string\n value: string\n [key: string]: string | number | boolean\n}\n\n// In order to satisfy the Relay compilers readonly list types. This is in\n// support for passing different kinds of item types as props, like aggregations\nexport type Items = ReadonlyArray<Item>\n\nexport interface FilterSelectChangeState {\n items: FilterSelectContextProps[\"items\"]\n filteredItems: FilterSelectContextProps[\"filteredItems\"]\n selectedItems: FilterSelectContextProps[\"selectedItems\"]\n query: FilterSelectContextProps[\"query\"]\n}\n\ninterface FilterSelectContextProps {\n enableSelectAll?: boolean\n filteredItems: Items\n initialItemsToShow: number\n isFiltered: boolean\n items: Items\n moveSelectedToTop: boolean\n multiselect: boolean\n onChange: (state: FilterSelectChangeState) => void\n onSelectAll?: (state: FilterSelectChangeState) => void\n order: [string[], Array<\"asc\" | \"desc\">] // See: https://lodash.com/docs/4.17.15#orderBy\n placeholder: string\n query: string\n renderItemLabel?: (item: any) => string\n searchableText?: (item: Item) => string\n selectedItems: Items\n setQuery: (query: string) => void\n setSelectedItems: (items: Items) => void\n toggleSelectedItem: (item: Item) => void\n}\n\nexport type FilterSelectState = Pick<\n FilterSelectContextProps,\n | \"enableSelectAll\"\n | \"filteredItems\"\n | \"initialItemsToShow\"\n | \"isFiltered\"\n | \"items\"\n | \"moveSelectedToTop\"\n | \"multiselect\"\n | \"onChange\"\n | \"onSelectAll\"\n | \"order\"\n | \"placeholder\"\n | \"query\"\n | \"renderItemLabel\"\n | \"searchableText\"\n | \"selectedItems\"\n>\n\ntype Action =\n | { type: \"SET_QUERY\"; payload: { query: string } }\n | { type: \"TOGGLE_SELECTED_ITEM\"; payload: { item: Item } }\n | { type: \"SET_SELECTED_ITEMS\"; payload: { items: Items } }\n\nconst filterSelectReducer = (state: FilterSelectState, action: Action) => {\n switch (action.type) {\n case \"SET_QUERY\": {\n const { query } = action.payload\n const { items, searchableText } = state\n\n if (query === \"\") {\n return {\n ...state,\n query,\n isFiltered: false,\n filteredItems: [],\n }\n }\n\n const filteredItems = items.filter((item) => {\n const text = searchableText?.(item) ?? item.label\n return text.toLowerCase().includes(query.toLowerCase())\n })\n\n return {\n ...state,\n query,\n isFiltered: true,\n filteredItems,\n }\n }\n\n case \"TOGGLE_SELECTED_ITEM\": {\n const isFound = !!state.selectedItems.find(\n (item) => item.value === action.payload.item.value\n )\n\n let selectedItems\n if (isFound) {\n selectedItems = state.selectedItems.filter(\n (item) => item.value !== action.payload.item.value\n )\n } else {\n selectedItems = state.multiselect\n ? [...state.selectedItems, action.payload.item]\n : [action.payload.item]\n }\n\n return {\n ...state,\n selectedItems,\n }\n }\n\n case \"SET_SELECTED_ITEMS\": {\n const { items } = action.payload\n\n return {\n ...state,\n selectedItems: items,\n }\n }\n }\n}\n\nconst initialState: FilterSelectState = {\n filteredItems: [],\n initialItemsToShow: INITIAL_ITEMS_TO_SHOW,\n isFiltered: false,\n items: [],\n moveSelectedToTop: true,\n multiselect: true,\n onChange: (x) => x,\n order: [[\"label\"], [\"asc\"]],\n placeholder: \"\",\n query: \"\",\n renderItemLabel: undefined,\n selectedItems: [],\n}\n\nconst FilterSelectContext = createContext<FilterSelectContextProps>({} as any)\n\nexport const FilterSelectContextProvider: React.FC<\n React.PropsWithChildren<Partial<FilterSelectState>>\n> = ({ children, ...props }) => {\n const [state, dispatch] = useReducer(filterSelectReducer, {\n ...initialState,\n ...props,\n })\n\n const contextValue = {\n ...state,\n\n toggleSelectedItem: (item) => {\n dispatch({\n type: \"TOGGLE_SELECTED_ITEM\",\n payload: { item },\n })\n },\n setQuery: (query) => {\n dispatch({\n type: \"SET_QUERY\",\n payload: { query },\n })\n },\n setSelectedItems: (items) => {\n dispatch({\n type: \"SET_SELECTED_ITEMS\",\n payload: {\n items,\n },\n })\n },\n }\n\n useUpdateEffect(() => {\n if (props.selectedItems) {\n contextValue.setSelectedItems(props.selectedItems)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.selectedItems?.length])\n\n useLayoutEffect(() => {\n if (props.query?.length) {\n contextValue.setQuery(props.query)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <FilterSelectContext.Provider value={contextValue}>\n {children}\n </FilterSelectContext.Provider>\n )\n}\n\nexport const useFilterSelectContext = () => {\n return useContext(FilterSelectContext)\n}\n"],"names":["filterSelectReducer","state","action","query","items","searchableText","filteredItems","item","text","isFound","selectedItems","initialState","INITIAL_ITEMS_TO_SHOW","x","undefined","FilterSelectContext","createContext","FilterSelectContextProvider","children","props","dispatch","useReducer","contextValue","useUpdateEffect","useLayoutEffect","useFilterSelectContext","useContext"],"mappings":";;;AAuEA,MAAMA,sBAAsB,CAACC,OAA0BC;IACrD,OAAQA,OAAO,IAAI;QACjB,KAAK;YAAa;gBAChB,MAAM,EAAEC,KAAK,EAAE,GAAGD,OAAO,OAAO;gBAChC,MAAM,EAAEE,KAAK,EAAEC,cAAc,EAAE,GAAGJ;gBAElC,IAAIE,AAAU,OAAVA,OACF,OAAO;oBACL,GAAGF,KAAK;oBACRE;oBACA,YAAY;oBACZ,eAAe,EAAE;gBACnB;gBAGF,MAAMG,gBAAgBF,MAAM,MAAM,CAAC,CAACG;oBAClC,MAAMC,OAAOH,iBAAiBE,SAASA,KAAK,KAAK;oBACjD,OAAOC,KAAK,WAAW,GAAG,QAAQ,CAACL,MAAM,WAAW;gBACtD;gBAEA,OAAO;oBACL,GAAGF,KAAK;oBACRE;oBACA,YAAY;oBACZG;gBACF;YACF;QAEA,KAAK;YAAwB;gBAC3B,MAAMG,UAAU,CAAC,CAACR,MAAM,aAAa,CAAC,IAAI,CACxC,CAACM,OAASA,KAAK,KAAK,KAAKL,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK;gBAGpD,IAAIQ;gBAEFA,gBADED,UACcR,MAAM,aAAa,CAAC,MAAM,CACxC,CAACM,OAASA,KAAK,KAAK,KAAKL,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,IAGpCD,MAAM,WAAW,GAC7B;uBAAIA,MAAM,aAAa;oBAAEC,OAAO,OAAO,CAAC,IAAI;iBAAC,GAC7C;oBAACA,OAAO,OAAO,CAAC,IAAI;iBAAC;gBAG3B,OAAO;oBACL,GAAGD,KAAK;oBACRS;gBACF;YACF;QAEA,KAAK;YAAsB;gBACzB,MAAM,EAAEN,KAAK,EAAE,GAAGF,OAAO,OAAO;gBAEhC,OAAO;oBACL,GAAGD,KAAK;oBACR,eAAeG;gBACjB;YACF;IACF;AACF;AAEA,MAAMO,eAAkC;IACtC,eAAe,EAAE;IACjB,oBAAoBC;IACpB,YAAY;IACZ,OAAO,EAAE;IACT,mBAAmB;IACnB,aAAa;IACb,UAAU,CAACC,IAAMA;IACjB,OAAO;QAAC;YAAC;SAAQ;QAAE;YAAC;SAAM;KAAC;IAC3B,aAAa;IACb,OAAO;IACP,iBAAiBC;IACjB,eAAe,EAAE;AACnB;AAEA,MAAMC,sBAAsB,WAAHA,GAAGC,cAAwC,CAAC;AAE9D,MAAMC,8BAET,CAAC,EAAEC,QAAQ,EAAE,GAAGC,OAAO;IACzB,MAAM,CAAClB,OAAOmB,SAAS,GAAGC,WAAWrB,qBAAqB;QACxD,GAAGW,YAAY;QACf,GAAGQ,KAAK;IACV;IAEA,MAAMG,eAAe;QACnB,GAAGrB,KAAK;
|
|
1
|
+
{"version":3,"file":"elements/FilterSelect/Components/FilterSelectContext.js","sources":["../../../../../src/elements/FilterSelect/Components/FilterSelectContext.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useLayoutEffect,\n useReducer,\n} from \"react\"\nimport { useUpdateEffect } from \"../../../utils\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../../ShowMore\"\n\nexport interface Item {\n label: string\n value: string\n [key: string]: string | number | boolean\n}\n\n// In order to satisfy the Relay compilers readonly list types. This is in\n// support for passing different kinds of item types as props, like aggregations\nexport type Items = ReadonlyArray<Item>\n\nexport interface FilterSelectChangeState {\n items: FilterSelectContextProps[\"items\"]\n filteredItems: FilterSelectContextProps[\"filteredItems\"]\n selectedItems: FilterSelectContextProps[\"selectedItems\"]\n query: FilterSelectContextProps[\"query\"]\n}\n\ninterface FilterSelectContextProps {\n enableSelectAll?: boolean\n filteredItems: Items\n initialItemsToShow: number\n isFiltered: boolean\n items: Items\n moveSelectedToTop: boolean\n multiselect: boolean\n onChange: (state: FilterSelectChangeState) => void\n onSelectAll?: (state: FilterSelectChangeState) => void\n order: [string[], Array<\"asc\" | \"desc\">] // See: https://lodash.com/docs/4.17.15#orderBy\n placeholder: string\n query: string\n renderItemLabel?: (item: any) => string\n searchableText?: (item: Item) => string\n selectedItems: Items\n setQuery: (query: string) => void\n setSelectedItems: (items: Items) => void\n toggleSelectedItem: (item: Item) => void\n}\n\nexport type FilterSelectState = Pick<\n FilterSelectContextProps,\n | \"enableSelectAll\"\n | \"filteredItems\"\n | \"initialItemsToShow\"\n | \"isFiltered\"\n | \"items\"\n | \"moveSelectedToTop\"\n | \"multiselect\"\n | \"onChange\"\n | \"onSelectAll\"\n | \"order\"\n | \"placeholder\"\n | \"query\"\n | \"renderItemLabel\"\n | \"searchableText\"\n | \"selectedItems\"\n>\n\ntype Action =\n | { type: \"SET_QUERY\"; payload: { query: string } }\n | { type: \"TOGGLE_SELECTED_ITEM\"; payload: { item: Item } }\n | { type: \"SET_SELECTED_ITEMS\"; payload: { items: Items } }\n\nconst filterSelectReducer = (state: FilterSelectState, action: Action) => {\n switch (action.type) {\n case \"SET_QUERY\": {\n const { query } = action.payload\n const { items, searchableText } = state\n\n if (query === \"\") {\n return {\n ...state,\n query,\n isFiltered: false,\n filteredItems: [],\n }\n }\n\n const filteredItems = items.filter((item) => {\n const text = searchableText?.(item) ?? item.label\n return text.toLowerCase().includes(query.toLowerCase())\n })\n\n return {\n ...state,\n query,\n isFiltered: true,\n filteredItems,\n }\n }\n\n case \"TOGGLE_SELECTED_ITEM\": {\n const isFound = !!state.selectedItems.find(\n (item) => item.value === action.payload.item.value\n )\n\n let selectedItems\n if (isFound) {\n selectedItems = state.selectedItems.filter(\n (item) => item.value !== action.payload.item.value\n )\n } else {\n selectedItems = state.multiselect\n ? [...state.selectedItems, action.payload.item]\n : [action.payload.item]\n }\n\n return {\n ...state,\n selectedItems,\n }\n }\n\n case \"SET_SELECTED_ITEMS\": {\n const { items } = action.payload\n\n return {\n ...state,\n selectedItems: items,\n }\n }\n }\n}\n\nconst initialState: FilterSelectState = {\n filteredItems: [],\n initialItemsToShow: INITIAL_ITEMS_TO_SHOW,\n isFiltered: false,\n items: [],\n moveSelectedToTop: true,\n multiselect: true,\n onChange: (x) => x,\n order: [[\"label\"], [\"asc\"]],\n placeholder: \"\",\n query: \"\",\n renderItemLabel: undefined,\n selectedItems: [],\n}\n\nconst FilterSelectContext = createContext<FilterSelectContextProps>({} as any)\n\nexport const FilterSelectContextProvider: React.FC<\n React.PropsWithChildren<Partial<FilterSelectState>>\n> = ({ children, ...props }) => {\n const [state, dispatch] = useReducer(filterSelectReducer, {\n ...initialState,\n ...props,\n })\n\n const contextValue = {\n ...state,\n selectedItems: state.selectedItems.filter(Boolean),\n\n toggleSelectedItem: (item) => {\n dispatch({\n type: \"TOGGLE_SELECTED_ITEM\",\n payload: { item },\n })\n },\n setQuery: (query) => {\n dispatch({\n type: \"SET_QUERY\",\n payload: { query },\n })\n },\n setSelectedItems: (items) => {\n dispatch({\n type: \"SET_SELECTED_ITEMS\",\n payload: {\n items,\n },\n })\n },\n }\n\n useUpdateEffect(() => {\n if (props.selectedItems) {\n contextValue.setSelectedItems(props.selectedItems)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.selectedItems?.length])\n\n useLayoutEffect(() => {\n if (props.query?.length) {\n contextValue.setQuery(props.query)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <FilterSelectContext.Provider value={contextValue}>\n {children}\n </FilterSelectContext.Provider>\n )\n}\n\nexport const useFilterSelectContext = () => {\n return useContext(FilterSelectContext)\n}\n"],"names":["filterSelectReducer","state","action","query","items","searchableText","filteredItems","item","text","isFound","selectedItems","initialState","INITIAL_ITEMS_TO_SHOW","x","undefined","FilterSelectContext","createContext","FilterSelectContextProvider","children","props","dispatch","useReducer","contextValue","Boolean","useUpdateEffect","useLayoutEffect","useFilterSelectContext","useContext"],"mappings":";;;AAuEA,MAAMA,sBAAsB,CAACC,OAA0BC;IACrD,OAAQA,OAAO,IAAI;QACjB,KAAK;YAAa;gBAChB,MAAM,EAAEC,KAAK,EAAE,GAAGD,OAAO,OAAO;gBAChC,MAAM,EAAEE,KAAK,EAAEC,cAAc,EAAE,GAAGJ;gBAElC,IAAIE,AAAU,OAAVA,OACF,OAAO;oBACL,GAAGF,KAAK;oBACRE;oBACA,YAAY;oBACZ,eAAe,EAAE;gBACnB;gBAGF,MAAMG,gBAAgBF,MAAM,MAAM,CAAC,CAACG;oBAClC,MAAMC,OAAOH,iBAAiBE,SAASA,KAAK,KAAK;oBACjD,OAAOC,KAAK,WAAW,GAAG,QAAQ,CAACL,MAAM,WAAW;gBACtD;gBAEA,OAAO;oBACL,GAAGF,KAAK;oBACRE;oBACA,YAAY;oBACZG;gBACF;YACF;QAEA,KAAK;YAAwB;gBAC3B,MAAMG,UAAU,CAAC,CAACR,MAAM,aAAa,CAAC,IAAI,CACxC,CAACM,OAASA,KAAK,KAAK,KAAKL,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK;gBAGpD,IAAIQ;gBAEFA,gBADED,UACcR,MAAM,aAAa,CAAC,MAAM,CACxC,CAACM,OAASA,KAAK,KAAK,KAAKL,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,IAGpCD,MAAM,WAAW,GAC7B;uBAAIA,MAAM,aAAa;oBAAEC,OAAO,OAAO,CAAC,IAAI;iBAAC,GAC7C;oBAACA,OAAO,OAAO,CAAC,IAAI;iBAAC;gBAG3B,OAAO;oBACL,GAAGD,KAAK;oBACRS;gBACF;YACF;QAEA,KAAK;YAAsB;gBACzB,MAAM,EAAEN,KAAK,EAAE,GAAGF,OAAO,OAAO;gBAEhC,OAAO;oBACL,GAAGD,KAAK;oBACR,eAAeG;gBACjB;YACF;IACF;AACF;AAEA,MAAMO,eAAkC;IACtC,eAAe,EAAE;IACjB,oBAAoBC;IACpB,YAAY;IACZ,OAAO,EAAE;IACT,mBAAmB;IACnB,aAAa;IACb,UAAU,CAACC,IAAMA;IACjB,OAAO;QAAC;YAAC;SAAQ;QAAE;YAAC;SAAM;KAAC;IAC3B,aAAa;IACb,OAAO;IACP,iBAAiBC;IACjB,eAAe,EAAE;AACnB;AAEA,MAAMC,sBAAsB,WAAHA,GAAGC,cAAwC,CAAC;AAE9D,MAAMC,8BAET,CAAC,EAAEC,QAAQ,EAAE,GAAGC,OAAO;IACzB,MAAM,CAAClB,OAAOmB,SAAS,GAAGC,WAAWrB,qBAAqB;QACxD,GAAGW,YAAY;QACf,GAAGQ,KAAK;IACV;IAEA,MAAMG,eAAe;QACnB,GAAGrB,KAAK;QACR,eAAeA,MAAM,aAAa,CAAC,MAAM,CAACsB;QAE1C,oBAAoB,CAAChB;YACnBa,SAAS;gBACP,MAAM;gBACN,SAAS;oBAAEb;gBAAK;YAClB;QACF;QACA,UAAU,CAACJ;YACTiB,SAAS;gBACP,MAAM;gBACN,SAAS;oBAAEjB;gBAAM;YACnB;QACF;QACA,kBAAkB,CAACC;YACjBgB,SAAS;gBACP,MAAM;gBACN,SAAS;oBACPhB;gBACF;YACF;QACF;IACF;IAEAoB,gBAAgB;QACd,IAAIL,MAAM,aAAa,EACrBG,aAAa,gBAAgB,CAACH,MAAM,aAAa;IAGrD,GAAG;QAACA,MAAM,aAAa,EAAE;KAAO;IAEhCM,gBAAgB;QACd,IAAIN,MAAM,KAAK,EAAE,QACfG,aAAa,QAAQ,CAACH,MAAM,KAAK;IAGrC,GAAG,EAAE;IAEL,OAAO,WAAP,GACE,oBAACJ,oBAAoB,QAAQ;QAAC,OAAOO;OAClCJ;AAGP;AAEO,MAAMQ,yBAAyB,IAC7BC,WAAWZ"}
|
|
@@ -60,7 +60,7 @@ const _FilterSelect = ()=>{
|
|
|
60
60
|
}))));
|
|
61
61
|
};
|
|
62
62
|
const isBelowTheFoldSelected = (selectedItems, resultsSorted)=>{
|
|
63
|
-
const selected = selectedItems.map(({ value })=>value);
|
|
63
|
+
const selected = selectedItems.filter(Boolean).map(({ value })=>value);
|
|
64
64
|
const results = resultsSorted.slice(INITIAL_ITEMS_TO_SHOW).map(({ value })=>value);
|
|
65
65
|
const isSelected = intersection(selected, results).length > 0;
|
|
66
66
|
return isSelected;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements/FilterSelect/FilterSelect.js","sources":["../../../../src/elements/FilterSelect/FilterSelect.tsx"],"sourcesContent":["import { intersection, orderBy, uniqBy } from \"es-toolkit\"\nimport * as React from \"react\"\nimport { ShowMore } from \"../ShowMore\"\nimport { Flex } from \"../Flex\"\nimport { FilterSelectResultItem } from \"./Components/FilterSelectResultItem\"\nimport {\n FilterSelectContextProvider,\n FilterSelectState,\n Items,\n useFilterSelectContext,\n} from \"./Components/FilterSelectContext\"\nimport { FilterInput } from \"./Components/FilterInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Text } from \"../Text\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../ShowMore\"\nimport { useUpdateEffect } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Stack } from \"../Stack\"\n\nexport type FilterSelectProps = Partial<FilterSelectState>\n\nexport const FilterSelect: React.FC<\n React.PropsWithChildren<FilterSelectProps>\n> = (props) => {\n return (\n <FilterSelectContextProvider {...props}>\n <_FilterSelect />\n </FilterSelectContextProvider>\n )\n}\n\nconst _FilterSelect: React.FC<React.PropsWithChildren<unknown>> = () => {\n const {\n enableSelectAll,\n filteredItems,\n initialItemsToShow,\n isFiltered,\n items,\n moveSelectedToTop,\n multiselect,\n onChange,\n order,\n query,\n selectedItems,\n } = useFilterSelectContext()\n\n if (!multiselect && enableSelectAll) {\n console.error(\n \"FilterSelect: enableSelectAll is only available with multiselect mode.\"\n )\n }\n\n // Dispatch change event\n useUpdateEffect(() => {\n if (onChange) {\n onChange({\n items,\n filteredItems,\n selectedItems,\n query,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onChange, selectedItems])\n\n if (items.length === 0) {\n return null\n }\n\n const orderItems = (items: Items) => orderBy([...items], order[0], order[1])\n const itemsOrdered = orderItems(items)\n const filteredItemsOrdered = orderItems(filteredItems)\n const itemsSorted =\n multiselect && moveSelectedToTop\n ? // Move selected items to the top\n uniqBy(selectedItems.concat(itemsOrdered), (x) => x.value)\n : itemsOrdered\n const expanded = isBelowTheFoldSelected(selectedItems, itemsSorted)\n const showNoResults = filteredItems.length === 0 && query !== \"\"\n const showSelectAll = multiselect && enableSelectAll && !showNoResults\n\n return (\n <Flex flexDirection=\"column\">\n <FilterInput mb={1} />\n\n {query !== \"\" && (\n <VisuallyHidden aria-live=\"polite\">\n {`${filteredItems.length} result${\n filteredItems.length === 1 ? \"\" : \"s\"\n }`}\n </VisuallyHidden>\n )}\n\n {showNoResults && <Text variant=\"sm\">No results.</Text>}\n\n {isFiltered ? (\n <>\n {showSelectAll && <SelectAll />}\n {filteredItemsOrdered.map((item) => (\n <FilterSelectResultItem key={item.value} {...item} />\n ))}\n </>\n ) : (\n <ShowMore\n expanded={expanded}\n initial={initialItemsToShow}\n variant={\"xs\"}\n textDecoration=\"underline\"\n mt={1}\n textAlign=\"left\"\n >\n {itemsSorted.map((item) => {\n return <FilterSelectResultItem key={item.value} {...item} />\n })}\n </ShowMore>\n )}\n </Flex>\n )\n}\n\nexport const isBelowTheFoldSelected = (selectedItems, resultsSorted) => {\n const selected = selectedItems.map(({ value }) => value)\n const results = resultsSorted\n .slice(INITIAL_ITEMS_TO_SHOW)\n .map(({ value }) => value)\n const isSelected = intersection(selected, results).length > 0\n return isSelected\n}\n\nconst SelectAll: React.FC = () => {\n const {\n items,\n filteredItems,\n onSelectAll,\n query,\n selectedItems,\n setSelectedItems,\n } = useFilterSelectContext()\n\n const isClearDisabled = selectedItems.length === 0\n\n return (\n <Box my={1}>\n <Stack gap={2} flexDirection={\"row\"}>\n <Clickable\n data-testid=\"filterSelect-selectAll\"\n className=\"selectAll\"\n onClick={() => {\n setSelectedItems(filteredItems)\n onSelectAll?.({\n items,\n filteredItems,\n selectedItems: filteredItems,\n query,\n })\n }}\n textDecoration=\"underline\"\n >\n <Text variant=\"xs\">Select all</Text>\n </Clickable>\n\n <Clickable\n data-testid=\"filterSelect-clear\"\n className=\"clear\"\n onClick={() => setSelectedItems([])}\n textDecoration=\"underline\"\n disabled={isClearDisabled}\n color={isClearDisabled ? \"mono60\" : \"mono100\"}\n >\n <Text variant=\"xs\">Clear</Text>\n </Clickable>\n </Stack>\n </Box>\n )\n}\n"],"names":["FilterSelect","props","FilterSelectContextProvider","_FilterSelect","enableSelectAll","filteredItems","initialItemsToShow","isFiltered","items","moveSelectedToTop","multiselect","onChange","order","query","selectedItems","useFilterSelectContext","console","useUpdateEffect","orderItems","orderBy","itemsOrdered","filteredItemsOrdered","itemsSorted","uniqBy","x","expanded","isBelowTheFoldSelected","showNoResults","showSelectAll","Flex","FilterInput","VisuallyHidden","Text","SelectAll","item","FilterSelectResultItem","ShowMore","resultsSorted","selected","value","results","INITIAL_ITEMS_TO_SHOW","isSelected","intersection","onSelectAll","setSelectedItems","isClearDisabled","Box","Stack","Clickable"],"mappings":";;;;;;;;;;;;;AAsBO,MAAMA,eAET,CAACC,QACI,WAAP,GACE,sCAACC,6BAAgCD,OAAAA,WAAAA,GAC/B,sCAACE,eAAaA;AAKpB,MAAMA,gBAA4D;IAChE,MAAM,EACJC,eAAe,EACfC,aAAa,EACbC,kBAAkB,EAClBC,UAAU,EACVC,KAAK,EACLC,iBAAiB,EACjBC,WAAW,EACXC,QAAQ,EACRC,KAAK,EACLC,KAAK,EACLC,aAAa,EACd,GAAGC;IAEJ,IAAI,CAACL,eAAeN,iBAClBY,QAAQ,KAAK,CACX;IAKJC,gBAAgB;QACd,IAAIN,UACFA,SAAS;YACPH;YACAH;YACAS;YACAD;QACF;IAGJ,GAAG;QAACF;QAAUG;KAAc;IAE5B,IAAIN,AAAiB,MAAjBA,MAAM,MAAM,EACd,OAAO;IAGT,MAAMU,aAAa,CAACV,QAAiBW,QAAQ;eAAIX;SAAM,EAAEI,KAAK,CAAC,EAAE,EAAEA,KAAK,CAAC,EAAE;IAC3E,MAAMQ,eAAeF,WAAWV;IAChC,MAAMa,uBAAuBH,WAAWb;IACxC,MAAMiB,cACJZ,eAAeD,oBAEXc,OAAOT,cAAc,MAAM,CAACM,eAAe,CAACI,IAAMA,EAAE,KAAK,IACzDJ;IACN,MAAMK,WAAWC,uBAAuBZ,eAAeQ;IACvD,MAAMK,gBAAgBtB,AAAyB,MAAzBA,cAAc,MAAM,IAAUQ,AAAU,OAAVA;IACpD,MAAMe,gBAAgBlB,eAAeN,mBAAmB,CAACuB;IAEzD,OAAO,WAAP,GACE,sCAACE,MAAIA;QAAC,eAAc;qBAClB,sCAACC,aAAWA;QAAC,IAAI;QAEhBjB,AAAU,OAAVA,SAAgB,WAAN,GACT,sCAACkB,gBAAcA;QAAC,aAAU;OACvB,GAAG1B,cAAc,MAAM,CAAC,OAAO,EAC9BA,AAAyB,MAAzBA,cAAc,MAAM,GAAS,KAAK,KAClC,GAILsB,iBAAiB,WAAjBA,GAAiB,sCAACK,MAAIA;QAAC,SAAQ;OAAK,gBAEpCzB,aAAa,WAAbA,GACC,8EACGqB,iBAAiB,WAAjBA,GAAiB,sCAACK,WAASA,OAC3BZ,qBAAqB,GAAG,CAAC,CAACa,OAAAA,WAAAA,GACzB,sCAACC,wBAAsBA;YAAC,KAAKD,KAAK,KAAK;YAAG,GAAGA,IAAI;6BAIrD,sCAACE,UAAQA;QACP,UAAUX;QACV,SAASnB;QACT,SAAS;QACT,gBAAe;QACf,IAAI;QACJ,WAAU;OAETgB,YAAY,GAAG,CAAC,CAACY,OACT,WAAP,GAAO,sCAACC,wBAAsBA;YAAC,KAAKD,KAAK,KAAK;YAAG,GAAGA,IAAI;;AAMpE;AAEO,MAAMR,yBAAyB,CAACZ,eAAeuB;IACpD,MAAMC,WAAWxB,cAAc,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"elements/FilterSelect/FilterSelect.js","sources":["../../../../src/elements/FilterSelect/FilterSelect.tsx"],"sourcesContent":["import { intersection, orderBy, uniqBy } from \"es-toolkit\"\nimport * as React from \"react\"\nimport { ShowMore } from \"../ShowMore\"\nimport { Flex } from \"../Flex\"\nimport { FilterSelectResultItem } from \"./Components/FilterSelectResultItem\"\nimport {\n FilterSelectContextProvider,\n FilterSelectState,\n Items,\n useFilterSelectContext,\n} from \"./Components/FilterSelectContext\"\nimport { FilterInput } from \"./Components/FilterInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Text } from \"../Text\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../ShowMore\"\nimport { useUpdateEffect } from \"../../utils\"\nimport { Box } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { Stack } from \"../Stack\"\n\nexport type FilterSelectProps = Partial<FilterSelectState>\n\nexport const FilterSelect: React.FC<\n React.PropsWithChildren<FilterSelectProps>\n> = (props) => {\n return (\n <FilterSelectContextProvider {...props}>\n <_FilterSelect />\n </FilterSelectContextProvider>\n )\n}\n\nconst _FilterSelect: React.FC<React.PropsWithChildren<unknown>> = () => {\n const {\n enableSelectAll,\n filteredItems,\n initialItemsToShow,\n isFiltered,\n items,\n moveSelectedToTop,\n multiselect,\n onChange,\n order,\n query,\n selectedItems,\n } = useFilterSelectContext()\n\n if (!multiselect && enableSelectAll) {\n console.error(\n \"FilterSelect: enableSelectAll is only available with multiselect mode.\"\n )\n }\n\n // Dispatch change event\n useUpdateEffect(() => {\n if (onChange) {\n onChange({\n items,\n filteredItems,\n selectedItems,\n query,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onChange, selectedItems])\n\n if (items.length === 0) {\n return null\n }\n\n const orderItems = (items: Items) => orderBy([...items], order[0], order[1])\n const itemsOrdered = orderItems(items)\n const filteredItemsOrdered = orderItems(filteredItems)\n const itemsSorted =\n multiselect && moveSelectedToTop\n ? // Move selected items to the top\n uniqBy(selectedItems.concat(itemsOrdered), (x) => x.value)\n : itemsOrdered\n const expanded = isBelowTheFoldSelected(selectedItems, itemsSorted)\n const showNoResults = filteredItems.length === 0 && query !== \"\"\n const showSelectAll = multiselect && enableSelectAll && !showNoResults\n\n return (\n <Flex flexDirection=\"column\">\n <FilterInput mb={1} />\n\n {query !== \"\" && (\n <VisuallyHidden aria-live=\"polite\">\n {`${filteredItems.length} result${\n filteredItems.length === 1 ? \"\" : \"s\"\n }`}\n </VisuallyHidden>\n )}\n\n {showNoResults && <Text variant=\"sm\">No results.</Text>}\n\n {isFiltered ? (\n <>\n {showSelectAll && <SelectAll />}\n {filteredItemsOrdered.map((item) => (\n <FilterSelectResultItem key={item.value} {...item} />\n ))}\n </>\n ) : (\n <ShowMore\n expanded={expanded}\n initial={initialItemsToShow}\n variant={\"xs\"}\n textDecoration=\"underline\"\n mt={1}\n textAlign=\"left\"\n >\n {itemsSorted.map((item) => {\n return <FilterSelectResultItem key={item.value} {...item} />\n })}\n </ShowMore>\n )}\n </Flex>\n )\n}\n\nexport const isBelowTheFoldSelected = (selectedItems, resultsSorted) => {\n const selected = selectedItems.filter(Boolean).map(({ value }) => value)\n const results = resultsSorted\n .slice(INITIAL_ITEMS_TO_SHOW)\n .map(({ value }) => value)\n const isSelected = intersection(selected, results).length > 0\n return isSelected\n}\n\nconst SelectAll: React.FC = () => {\n const {\n items,\n filteredItems,\n onSelectAll,\n query,\n selectedItems,\n setSelectedItems,\n } = useFilterSelectContext()\n\n const isClearDisabled = selectedItems.length === 0\n\n return (\n <Box my={1}>\n <Stack gap={2} flexDirection={\"row\"}>\n <Clickable\n data-testid=\"filterSelect-selectAll\"\n className=\"selectAll\"\n onClick={() => {\n setSelectedItems(filteredItems)\n onSelectAll?.({\n items,\n filteredItems,\n selectedItems: filteredItems,\n query,\n })\n }}\n textDecoration=\"underline\"\n >\n <Text variant=\"xs\">Select all</Text>\n </Clickable>\n\n <Clickable\n data-testid=\"filterSelect-clear\"\n className=\"clear\"\n onClick={() => setSelectedItems([])}\n textDecoration=\"underline\"\n disabled={isClearDisabled}\n color={isClearDisabled ? \"mono60\" : \"mono100\"}\n >\n <Text variant=\"xs\">Clear</Text>\n </Clickable>\n </Stack>\n </Box>\n )\n}\n"],"names":["FilterSelect","props","FilterSelectContextProvider","_FilterSelect","enableSelectAll","filteredItems","initialItemsToShow","isFiltered","items","moveSelectedToTop","multiselect","onChange","order","query","selectedItems","useFilterSelectContext","console","useUpdateEffect","orderItems","orderBy","itemsOrdered","filteredItemsOrdered","itemsSorted","uniqBy","x","expanded","isBelowTheFoldSelected","showNoResults","showSelectAll","Flex","FilterInput","VisuallyHidden","Text","SelectAll","item","FilterSelectResultItem","ShowMore","resultsSorted","selected","Boolean","value","results","INITIAL_ITEMS_TO_SHOW","isSelected","intersection","onSelectAll","setSelectedItems","isClearDisabled","Box","Stack","Clickable"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artsy/palette",
|
|
3
|
-
"version": "46.9.
|
|
3
|
+
"version": "46.9.2",
|
|
4
4
|
"description": "Design system library for react components",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -199,5 +199,5 @@
|
|
|
199
199
|
"url": "http://localhost"
|
|
200
200
|
}
|
|
201
201
|
},
|
|
202
|
-
"gitHead": "
|
|
202
|
+
"gitHead": "bc9cd9ad53fd938394e7a087397c429641553c66"
|
|
203
203
|
}
|