@okta/odyssey-react-mui 1.35.2 → 1.36.0
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/DatePickers/useOdysseyDateFields.cjs +2 -2
- package/dist/cjs/DatePickers/useOdysseyDateFields.cjs.map +1 -1
- package/dist/cjs/Field.cjs +1 -1
- package/dist/cjs/Field.cjs.map +1 -1
- package/dist/cjs/Pagination/Pagination.cjs +0 -6
- package/dist/cjs/Pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/StringWithValue.cjs.map +1 -0
- package/dist/cjs/inputUtils.cjs +1 -1
- package/dist/cjs/inputUtils.cjs.map +1 -1
- package/dist/cjs/labs/DataFilters.cjs +4 -4
- package/dist/cjs/labs/DataFilters.cjs.map +1 -1
- package/dist/cjs/labs/DataView/DataCard.cjs +18 -18
- package/dist/cjs/labs/DataView/DataCard.cjs.map +1 -1
- package/dist/cjs/labs/DataView/DataView.cjs +10 -10
- package/dist/cjs/labs/DataView/DataView.cjs.map +1 -1
- package/dist/cjs/labs/DataView/useFilterConversion.cjs +1 -1
- package/dist/cjs/labs/DataView/useFilterConversion.cjs.map +1 -1
- package/dist/cjs/theme/useMediaQuery.cjs +1 -1
- package/dist/cjs/theme/useMediaQuery.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs +108 -60
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs +84 -112
- package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.cjs +26 -0
- package/dist/cjs/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.cjs.map +1 -0
- package/dist/cjs/ui-shell/WideUiShellContent.cjs +2 -1
- package/dist/cjs/ui-shell/WideUiShellContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/index.cjs +8 -1
- package/dist/cjs/ui-shell/index.cjs.map +1 -1
- package/dist/cjs/ui-shell/useMatchAppElementToUiShellAppArea.cjs +1 -1
- package/dist/cjs/ui-shell/useMatchAppElementToUiShellAppArea.cjs.map +1 -1
- package/dist/cjs/ui-shell/useScrollState.cjs +71 -21
- package/dist/cjs/ui-shell/useScrollState.cjs.map +1 -1
- package/dist/cjs/useMountLifecycleEffect.cjs +36 -0
- package/dist/cjs/useMountLifecycleEffect.cjs.map +1 -0
- package/dist/cjs/useSessionStorageState.cjs +64 -0
- package/dist/cjs/useSessionStorageState.cjs.map +1 -0
- package/dist/cjs/web-component/createReactRootElements.cjs +5 -3
- package/dist/cjs/web-component/createReactRootElements.cjs.map +1 -1
- package/dist/esm/DatePickers/useOdysseyDateFields.js +2 -2
- package/dist/esm/DatePickers/useOdysseyDateFields.js.map +1 -1
- package/dist/esm/Field.js +1 -1
- package/dist/esm/Field.js.map +1 -1
- package/dist/esm/Pagination/Pagination.js +0 -6
- package/dist/esm/Pagination/Pagination.js.map +1 -1
- package/dist/esm/StringWithValue.js.map +1 -0
- package/dist/esm/inputUtils.js +1 -1
- package/dist/esm/inputUtils.js.map +1 -1
- package/dist/esm/labs/DataFilters.js +4 -4
- package/dist/esm/labs/DataFilters.js.map +1 -1
- package/dist/esm/labs/DataView/DataCard.js +18 -18
- package/dist/esm/labs/DataView/DataCard.js.map +1 -1
- package/dist/esm/labs/DataView/DataView.js +10 -10
- package/dist/esm/labs/DataView/DataView.js.map +1 -1
- package/dist/esm/labs/DataView/useFilterConversion.js +1 -1
- package/dist/esm/labs/DataView/useFilterConversion.js.map +1 -1
- package/dist/esm/theme/useMediaQuery.js +1 -1
- package/dist/esm/theme/useMediaQuery.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNav.js +109 -61
- package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js +85 -113
- package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.js +19 -0
- package/dist/esm/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.js.map +1 -0
- package/dist/esm/ui-shell/WideUiShellContent.js +2 -1
- package/dist/esm/ui-shell/WideUiShellContent.js.map +1 -1
- package/dist/esm/ui-shell/index.js +1 -1
- package/dist/esm/ui-shell/index.js.map +1 -1
- package/dist/esm/ui-shell/useMatchAppElementToUiShellAppArea.js +1 -1
- package/dist/esm/ui-shell/useMatchAppElementToUiShellAppArea.js.map +1 -1
- package/dist/esm/ui-shell/useScrollState.js +67 -21
- package/dist/esm/ui-shell/useScrollState.js.map +1 -1
- package/dist/esm/useMountLifecycleEffect.js +29 -0
- package/dist/esm/useMountLifecycleEffect.js.map +1 -0
- package/dist/esm/useSessionStorageState.js +56 -0
- package/dist/esm/useSessionStorageState.js.map +1 -0
- package/dist/esm/web-component/createReactRootElements.js +4 -2
- package/dist/esm/web-component/createReactRootElements.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.scss +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/DatePickers/useOdysseyDateFields.d.ts.map +1 -1
- package/dist/types/Pagination/Pagination.d.ts.map +1 -1
- package/dist/types/StringWithValue.d.ts.map +1 -0
- package/dist/types/labs/DataView/DataCard.d.ts.map +1 -1
- package/dist/types/labs/DataView/DataView.d.ts.map +1 -1
- package/dist/types/theme/useMediaQuery.d.ts +1 -1
- package/dist/types/theme/useMediaQuery.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNav.d.ts +2 -0
- package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavToggleButton.d.ts +15 -8
- package/dist/types/ui-shell/SideNav/SideNavToggleButton.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.d.ts +17 -0
- package/dist/types/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.d.ts.map +1 -0
- package/dist/types/ui-shell/WideUiShellContent.d.ts.map +1 -1
- package/dist/types/ui-shell/index.d.ts +1 -1
- package/dist/types/ui-shell/index.d.ts.map +1 -1
- package/dist/types/ui-shell/useMatchAppElementToUiShellAppArea.d.ts.map +1 -1
- package/dist/types/ui-shell/useScrollState.d.ts +9 -1
- package/dist/types/ui-shell/useScrollState.d.ts.map +1 -1
- package/dist/types/useMountLifecycleEffect.d.ts +16 -0
- package/dist/types/useMountLifecycleEffect.d.ts.map +1 -0
- package/dist/types/useSessionStorageState.d.ts +20 -0
- package/dist/types/useSessionStorageState.d.ts.map +1 -0
- package/dist/types/web-component/createReactRootElements.d.ts +2 -0
- package/dist/types/web-component/createReactRootElements.d.ts.map +1 -1
- package/package.json +14 -11
- package/dist/cjs/theme/StringWithValue.cjs.map +0 -1
- package/dist/esm/theme/StringWithValue.js.map +0 -1
- package/dist/types/theme/StringWithValue.d.ts.map +0 -1
- /package/dist/cjs/{theme/StringWithValue.cjs → StringWithValue.cjs} +0 -0
- /package/dist/esm/{theme/StringWithValue.js → StringWithValue.js} +0 -0
- /package/dist/types/{theme/StringWithValue.d.ts → StringWithValue.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFilters.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","Trans","useTranslation","styled","Autocomplete","Box","Button","CheckboxGroup","Checkbox","CheckIcon","ChevronRightIcon","CloseCircleFilledIcon","FilterIcon","useOdysseyDesignTokens","RadioGroup","Radio","SearchField","Tag","TagList","TextField","Subordinate","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","AutocompleteOuterContainer","shouldForwardProp","prop","odysseyDesignTokens","display","alignItems","gap","Spacing2","AutocompleteInnerContainer","width","FilterTags","activeFilters","updateFilterAndInputValues","filtersWithValues","filter","activeFilter","value","filtersToRender","forEach","Array","isArray","filterValue","formattedValue","push","id","label","getFilter","find","removeValueFromFilterAndInput","removedFilterValue","currentFilter","updatedValues","currentValue","filterId","length","undefined","children","map","onRemove","MemoizedFilterTags","displayName","DataFilters","onChangeSearch","onChangeFilters","hasSearchSubmitButton","searchDelayTime","defaultSearchTerm","additionalActions","filters","filtersProp","isDisabled","setFilters","t","initialInputValues","reduce","accumulator","inputValues","setInputValues","searchValue","setSearchValue","isFiltersMenuOpen","setIsFiltersMenuOpen","filtersMenuAnchorElement","setFiltersMenuAnchorElement","isFilterPopoverOpen","setIsFilterPopoverOpen","filterPopoverAnchorElement","setFilterPopoverAnchorElement","filterPopoverCurrentFilter","setFilterPopoverCurrentFilter","menuRef","debouncer","current","clearTimeout","setTimeout","autocompleteOptions","options","updateInputValue","updateFilters","prevInputValues","updatedFilters","handleCheckboxFilterAndInputValueChange","option","checked","currentValues","inputValue","normalizedUpdatedValues","handleAutocompleteFilterChange","clearAllFilters","updatedInputValues","handleFilterSubmit","filterMenu","ariaControls","ariaExpanded","ariaHasPopup","ariaLabel","endIcon","onClick","event","currentTarget","variant","_Menu","anchorOrigin","horizontal","vertical","transformOrigin","anchorEl","onClose","open","PaperProps","ref","latestFilterValue","f","_MenuItem","selected","className","sx","justifyContent","minWidth","paddingBlock","paddingInlineStart","marginRight","_Typography","fontWeight","marginBlockEnd","component","i18nKey","values","toLowerCase","count","autoCompleteValue","maxWidth","_Popover","elevation","marginLeft","marginTop","ev","menuRect","getBoundingClientRect","clickInsideMenu","clientX","left","right","clientY","top","bottom","padding","onSubmit","preventDefault","noValidate","render","hasMultipleChoices","isCustomValueAllowed","onChange","_","type","hasInitialFocus","endAdornment","_IconButton","size","isRequired","checkFilterInputValuesAsArray","isOptionValueInInputValues","some","isChecked","style","placeholder","onClear","target","borderTopWidth","borderTopColor","borderTopStyle","paddingTop","MemoizedDataFilters"],"sources":["../../../src/labs/DataFilters.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n MutableRefObject,\n ReactNode,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport {\n IconButton as MuiIconButton,\n Menu as MuiMenu,\n MenuItem as MuiMenuItem,\n Popover as MuiPopover,\n Typography as MuiTypography,\n} from \"@mui/material\";\nimport { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\nimport styled from \"@emotion/styled\";\n\nimport { Autocomplete } from \"../Autocomplete.js\";\nimport { Box } from \"../Box.js\";\nimport { Button } from \"../Buttons/index.js\";\nimport { CheckboxGroup } from \"../CheckboxGroup.js\";\nimport { Checkbox } from \"../Checkbox.js\";\nimport {\n CheckIcon,\n ChevronRightIcon,\n CloseCircleFilledIcon,\n FilterIcon,\n} from \"../icons.generated/index.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../OdysseyDesignTokensContext.js\";\nimport { RadioGroup } from \"../RadioGroup.js\";\nimport { Radio } from \"../Radio.js\";\nimport { SearchField } from \"../SearchField.js\";\nimport { Tag } from \"../Tag.js\";\nimport { TagList } from \"../TagList.js\";\nimport { TextField } from \"../TextField.js\";\nimport { Subordinate } from \"../Typography.js\";\n\nconst AutocompleteOuterContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: odysseyDesignTokens.Spacing2,\n}));\n\nconst AutocompleteInnerContainer = styled(\"div\")({\n width: \"100%\",\n});\n\ntype Option = {\n label: string;\n value: string;\n};\n\nexport type DataFilterValue = string | string[] | Option[] | undefined;\n\nexport type UpdateFiltersOrValues = ({\n filterId,\n value,\n}: {\n filterId: string;\n value: DataFilterValue;\n}) => void;\n\n// This is the shape of each individual filter\nexport type DataFilter = {\n /**\n * A unique ID for the filter, typically the same id\n * as the column it'll be applied to.\n */\n id: Exclude<MRT_ColumnDef<MRT_RowData>[\"accessorKey\"], undefined>;\n /**\n * `Autocomplete` normally only allows values that exist in the list box. This feature allows you to enter in any value in the text field and have that be the stored value in `Autocomplete`\n *\n * NOTE: This only applies when `variant` is `autocomplete`\n */\n isCustomValueAllowed?: boolean;\n /**\n * The human-friendly name of the filter.\n */\n label: string;\n /**\n * The type of filter, which determines which filtering control\n * is shown.\n */\n variant?: MRT_ColumnDef<MRT_RowData>[\"filterVariant\"];\n /**\n * The current value of the filter. Typically a string, but\n * filters that allow for multiple selections (such as multi-select)\n * can accept an array.\n */\n value?: DataFilterValue;\n /**\n * If the filter control has preset options (such as a select or multi-select),\n * these are the options provided.\n */\n options?: Option[];\n /**\n * A callback which renders a custom filter control\n */\n render?: (updateFilters: UpdateFiltersOrValues) => ReactNode;\n};\n\n// This is the type of the DataFilters component itself\nexport type DataFiltersProps = {\n /**\n * The callback that's fired when the search input changes\n * (either on change or on submit, based on the value of `hasSearchSubmitButton`).\n * If this is undefined, the search input will not be shown.\n */\n onChangeSearch?: (value: string) => void;\n /**\n * The callback that's fired when filter values change.\n */\n onChangeFilters?: (filters: Array<DataFilter>) => void;\n /**\n * If true, a Search button will be provided alongside the search input\n * and `onChangeSearch` will fire when the button is clicked, rather than\n * whenever the input value changes.\n */\n hasSearchSubmitButton?: boolean;\n /**\n * The debounce time, in milliseconds, for the search input firing\n * `onChangeSearch` when changed. If `hasSearchSubmitButton` is true,\n * this doesn't do anything.\n */\n searchDelayTime?: number;\n /**\n * The starting value of the search input\n */\n defaultSearchTerm?: string;\n /**\n * A slot for optional additional actions, like buttons, to be displayed\n * on the opposite side of the top row from the search and filter controls.\n */\n additionalActions?: ReactNode;\n /**\n * The filters available in the filter menu. If undefined,\n * the filter menu won't be shown.\n */\n filters?: Array<DataFilter>;\n /**\n * If true, the filter and search will be disabled\n */\n isDisabled?: boolean;\n};\n\ntype FilterTagsProps = {\n activeFilters: DataFilter[];\n updateFilterAndInputValues: UpdateFiltersOrValues;\n};\n\ntype FiltersToRender = {\n id: string;\n label: string;\n value: string;\n};\n\nconst FilterTags = ({\n activeFilters,\n updateFilterAndInputValues,\n}: FilterTagsProps) => {\n const filtersWithValues = activeFilters.filter(\n (activeFilter: DataFilter) => activeFilter.value,\n );\n const filtersToRender: FiltersToRender[] = [];\n\n filtersWithValues.forEach((filter) => {\n if (Array.isArray(filter.value)) {\n filter.value.forEach((filterValue) => {\n const formattedValue =\n typeof filterValue === \"string\" ? filterValue : filterValue.value;\n filtersToRender.push({\n id: filter.id,\n label: filter.label,\n value: formattedValue,\n });\n });\n }\n if (typeof filter.value === \"string\") {\n filtersToRender.push({\n id: filter.id,\n label: filter.label,\n value: filter.value,\n });\n }\n });\n\n const getFilter = (id: string) =>\n filtersWithValues.find((filter) => filter.id === id);\n\n const removeValueFromFilterAndInput = (\n id: string,\n removedFilterValue: string,\n ) => {\n const currentFilter = getFilter(id);\n\n if (currentFilter) {\n const { value } = currentFilter;\n\n if (Array.isArray(value)) {\n const updatedValues = value.filter((currentValue) => {\n return (currentValue as Option).value !== removedFilterValue;\n });\n updateFilterAndInputValues({\n filterId: id,\n value:\n updatedValues.length > 0 ? (updatedValues as Option[]) : undefined,\n });\n }\n\n if (typeof value === \"string\") {\n updateFilterAndInputValues({\n filterId: id,\n value: undefined,\n });\n }\n }\n };\n\n return (\n <TagList>\n {filtersToRender.map((filter) => (\n <Tag\n key={`${filter.label}: ${filter.value}`}\n label={`${filter.label}: ${filter.value}`}\n onRemove={() =>\n removeValueFromFilterAndInput(filter.id, filter.value)\n }\n />\n ))}\n </TagList>\n );\n};\n\nconst MemoizedFilterTags = memo(FilterTags);\nMemoizedFilterTags.displayName = \"FilterTags\";\n\nconst DataFilters = ({\n onChangeSearch,\n onChangeFilters,\n hasSearchSubmitButton = false,\n searchDelayTime = 200,\n defaultSearchTerm = \"\",\n additionalActions,\n filters: filtersProp = [],\n isDisabled,\n}: DataFiltersProps) => {\n const [filters, setFilters] = useState<DataFilter[]>(filtersProp);\n const { t } = useTranslation();\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const initialInputValues = useMemo(() => {\n return filtersProp.reduce(\n (accumulator, filter) => {\n accumulator[filter.id] = filter.value;\n return accumulator;\n },\n {} as Record<string, DataFilterValue>,\n );\n }, [filtersProp]);\n\n const [inputValues, setInputValues] = useState(initialInputValues);\n\n const [searchValue, setSearchValue] = useState<string>(defaultSearchTerm);\n\n const activeFilters = useMemo(() => {\n return filters.filter((filter) => filter.value);\n }, [filters]);\n\n const [isFiltersMenuOpen, setIsFiltersMenuOpen] = useState<boolean>(false);\n\n const [filtersMenuAnchorElement, setFiltersMenuAnchorElement] = useState<\n HTMLElement | undefined\n >();\n\n const [isFilterPopoverOpen, setIsFilterPopoverOpen] =\n useState<boolean>(false);\n\n const [filterPopoverAnchorElement, setFilterPopoverAnchorElement] = useState<\n HTMLElement | undefined\n >();\n\n const [filterPopoverCurrentFilter, setFilterPopoverCurrentFilter] = useState<\n DataFilter | undefined\n >();\n\n const menuRef = useRef<HTMLDivElement>();\n\n useEffect(() => {\n onChangeFilters?.(filters);\n }, [filters, onChangeFilters]);\n\n const debouncer = useRef<NodeJS.Timeout | undefined>(undefined);\n\n useEffect(() => {\n if (!hasSearchSubmitButton) {\n if (debouncer.current) {\n clearTimeout(debouncer.current);\n }\n\n debouncer.current = setTimeout(() => {\n onChangeSearch?.(searchValue ?? \"\");\n }, searchDelayTime);\n }\n }, [onChangeSearch, searchValue, searchDelayTime, hasSearchSubmitButton]);\n\n const autocompleteOptions = useMemo(() => {\n return filterPopoverCurrentFilter?.options || [];\n }, [filterPopoverCurrentFilter]);\n\n const updateInputValue = useCallback<UpdateFiltersOrValues>(\n ({ filterId, value }) => {\n setInputValues({ ...inputValues, [filterId]: value });\n },\n [inputValues],\n );\n\n const updateFilters = useCallback<UpdateFiltersOrValues>(\n ({ filterId, value }) => {\n setInputValues((prevInputValues) => ({\n ...prevInputValues,\n [filterId]: value,\n }));\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: filter.id === filterId ? value : inputValues[filter.id],\n }));\n setFilters(updatedFilters);\n },\n [inputValues, filtersProp],\n );\n\n const updateFilterAndInputValues = useCallback<UpdateFiltersOrValues>(\n ({ filterId, value }) => {\n updateInputValue({ filterId, value });\n updateFilters({ filterId, value });\n },\n [updateFilters, updateInputValue],\n );\n\n const handleCheckboxFilterAndInputValueChange = useCallback<\n (filterId: string, option: Option, checked: boolean) => void\n >(\n (filterId, option, checked) => {\n const currentValues = (inputValues[filterId] as Option[]) || [];\n\n const updatedValues = checked\n ? [...currentValues, option]\n : currentValues.filter(\n (inputValue) => inputValue.value !== option.value,\n );\n\n const normalizedUpdatedValues =\n updatedValues.length > 0 ? updatedValues : undefined;\n\n setInputValues({\n ...inputValues,\n [filterId]: normalizedUpdatedValues,\n });\n\n const updatedFilters = filters.map((filter) => ({\n ...filter,\n value:\n filter.id === filterId\n ? normalizedUpdatedValues\n : inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n },\n [filters, inputValues],\n );\n\n const handleAutocompleteFilterChange = useCallback<\n (filterId: string, option: Option[]) => void\n >(\n (filterId, option) => {\n setInputValues({ ...inputValues, [filterId]: option });\n },\n [inputValues],\n );\n\n const clearAllFilters = useCallback(() => {\n const updatedInputValues = filtersProp.reduce(\n (accumulator, filter) => {\n accumulator[filter.id] = undefined;\n return accumulator;\n },\n {} as Record<string, DataFilterValue>,\n );\n\n setInputValues(updatedInputValues);\n\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: undefined,\n }));\n\n setFilters(updatedFilters);\n }, [filtersProp]);\n\n const handleFilterSubmit = useCallback(() => {\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n }, [inputValues, filtersProp]);\n\n const filterMenu = useMemo(\n () => (\n <>\n <Box>\n <Button\n ariaControls={isFiltersMenuOpen ? \"filters-menu\" : undefined}\n ariaExpanded={isFiltersMenuOpen ? \"true\" : undefined}\n ariaHasPopup=\"true\"\n ariaLabel={t(\"filters.filters.arialabel\")}\n isDisabled={isDisabled}\n endIcon={<FilterIcon />}\n onClick={(event) => {\n setFiltersMenuAnchorElement(event.currentTarget);\n setIsFiltersMenuOpen(true);\n }}\n variant=\"secondary\"\n />\n </Box>\n\n <MuiMenu\n anchorOrigin={{ horizontal: \"left\", vertical: \"bottom\" }}\n transformOrigin={{ horizontal: \"left\", vertical: \"top\" }}\n id=\"filters-menu\"\n anchorEl={filtersMenuAnchorElement}\n onClose={() => setIsFiltersMenuOpen(false)}\n open={isFiltersMenuOpen}\n PaperProps={{\n ref: menuRef as MutableRefObject<HTMLDivElement>,\n }}\n >\n {filtersProp.map((filter) => {\n // Unintuitively, we can't just use filter.value to grab the filter value.\n // `filter` is the initial set of filters provided to the comoponent, so its\n // value prop may not reflect the current value of the filter.\n const latestFilterValue = filters.find(\n (f) => f.id === filter.id,\n )?.value;\n\n return (\n <MuiMenuItem\n key={filter.id}\n aria-controls={isFilterPopoverOpen ? \"filter-form\" : undefined}\n onClick={(event) => {\n setIsFilterPopoverOpen(true);\n setFilterPopoverAnchorElement(event.currentTarget);\n setFilterPopoverCurrentFilter(filter);\n }}\n selected={\n filterPopoverCurrentFilter === filter &&\n isFilterPopoverOpen === true\n }\n className={\n filterPopoverCurrentFilter === filter &&\n isFilterPopoverOpen === true\n ? \"isVisiblySelected\"\n : undefined\n }\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n minWidth: 180,\n paddingBlock: 1,\n paddingInlineStart: 2,\n }}\n >\n <Box sx={{ marginRight: 2 }}>\n <MuiTypography fontWeight=\"500\" sx={{ marginBlockEnd: 2 }}>\n {filter.label}\n </MuiTypography>\n <Subordinate component=\"div\">\n {!latestFilterValue ||\n (Array.isArray(latestFilterValue) &&\n latestFilterValue.length === 0) ? (\n <Trans\n i18nKey=\"filters.menuitem.any\"\n values={{\n label: filter.label.toLowerCase(),\n }}\n />\n ) : Array.isArray(latestFilterValue) ? (\n <Trans\n count={latestFilterValue.length}\n i18nKey=\"filters.menuitem.selected\"\n values={{\n selected: latestFilterValue.length,\n }}\n />\n ) : (\n latestFilterValue\n )}\n </Subordinate>\n </Box>\n <ChevronRightIcon />\n </Box>\n </MuiMenuItem>\n );\n })}\n </MuiMenu>\n </>\n ),\n [\n isFiltersMenuOpen,\n isDisabled,\n filterPopoverCurrentFilter,\n isFilterPopoverOpen,\n filtersMenuAnchorElement,\n filtersProp,\n filters,\n t,\n ],\n );\n\n const autoCompleteValue = useMemo(\n () =>\n filterPopoverCurrentFilter?.id\n ? (inputValues[filterPopoverCurrentFilter.id] as Option[])\n : undefined,\n [filterPopoverCurrentFilter, inputValues],\n );\n\n return (\n <Box>\n {/* Upper section */}\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\" }}>\n {/* Upper section left (filters and search) */}\n <Box sx={{ display: \"flex\", gap: 2, width: \"50%\", maxWidth: 480 }}>\n {/* Filter menu */}\n {filters.length > 0 && (\n <>\n {filterMenu}\n {/* Filter popover */}\n <MuiPopover\n id=\"filter-form\"\n anchorEl={filterPopoverAnchorElement}\n // Positions the popover flush with the edge of the parent menu\n // and at the right shadow elevation. These magic values are simply\n // to match the default popover offset.\n elevation={2}\n sx={{ marginLeft: 2, marginTop: -1 }}\n open={isFilterPopoverOpen}\n anchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\n onClose={(ev: MouseEvent) => {\n if (menuRef.current) {\n const menuRect = menuRef.current.getBoundingClientRect();\n const clickInsideMenu =\n ev.clientX >= menuRect.left &&\n ev.clientX <= menuRect.right &&\n ev.clientY >= menuRect.top &&\n ev.clientY <= menuRect.bottom;\n\n if (!clickInsideMenu) {\n setIsFiltersMenuOpen(false);\n }\n }\n handleFilterSubmit();\n setIsFilterPopoverOpen(false);\n }}\n >\n <Box sx={{ padding: 4, minWidth: 320 }}>\n <form\n onSubmit={(ev) => {\n ev.preventDefault();\n handleFilterSubmit();\n setIsFilterPopoverOpen(false);\n setIsFiltersMenuOpen(false);\n }}\n noValidate\n >\n {filterPopoverCurrentFilter?.render ? (\n filterPopoverCurrentFilter.render(updateFilters)\n ) : (\n <>\n {/* Autocomplete */}\n {filterPopoverCurrentFilter?.variant ===\n \"autocomplete\" &&\n filterPopoverCurrentFilter?.options && (\n <AutocompleteOuterContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <AutocompleteInnerContainer>\n <Autocomplete\n hasMultipleChoices\n isCustomValueAllowed={\n filterPopoverCurrentFilter?.isCustomValueAllowed\n }\n label={filterPopoverCurrentFilter.label}\n value={autoCompleteValue}\n onChange={(_, value) => {\n handleAutocompleteFilterChange(\n filterPopoverCurrentFilter.id,\n value as Option[],\n );\n }}\n options={autocompleteOptions}\n />\n </AutocompleteInnerContainer>\n <Button\n variant=\"primary\"\n endIcon={<CheckIcon />}\n type=\"submit\"\n ariaLabel={t(\"filters.submit.label\")}\n />\n </AutocompleteOuterContainer>\n )}\n {/* Text, Number, or undefined */}\n {(filterPopoverCurrentFilter?.variant === \"text\" ||\n filterPopoverCurrentFilter?.variant === \"range\" ||\n (filterPopoverCurrentFilter &&\n filterPopoverCurrentFilter?.variant ==\n undefined)) && (\n <Box\n sx={{\n display: \"flex\",\n gap: 2,\n alignItems: \"flex-end\",\n }}\n >\n <Box sx={{ width: \"100%\" }}>\n <TextField\n hasInitialFocus\n label={filterPopoverCurrentFilter.label}\n type={\n filterPopoverCurrentFilter.variant === \"range\"\n ? \"number\"\n : \"text\"\n }\n value={\n (inputValues[\n filterPopoverCurrentFilter.id\n ] as string) ?? \"\"\n }\n onChange={(ev) =>\n updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value: ev.currentTarget.value,\n })\n }\n endAdornment={\n inputValues[\n filterPopoverCurrentFilter.id\n ] && (\n <MuiIconButton\n size=\"small\"\n aria-label={t(\"filters.filter.clear\")}\n onClick={() => {\n updateInputValue({\n filterId:\n filterPopoverCurrentFilter.id,\n value: undefined,\n });\n\n updateFilters({\n filterId:\n filterPopoverCurrentFilter.id,\n value: undefined,\n });\n }}\n >\n <CloseCircleFilledIcon />\n </MuiIconButton>\n )\n }\n />\n </Box>\n <Button\n variant=\"primary\"\n endIcon={<CheckIcon />}\n type=\"submit\"\n ariaLabel={t(\"filters.submit.label\")}\n />\n </Box>\n )}\n\n {/* Checkbox */}\n {filterPopoverCurrentFilter?.variant ===\n \"multi-select\" &&\n filterPopoverCurrentFilter?.options && (\n <CheckboxGroup\n label={filterPopoverCurrentFilter.label}\n isRequired\n >\n {filterPopoverCurrentFilter.options.map(\n (option: { label: string; value: string }) => {\n const checkFilterInputValuesAsArray =\n (inputValues[\n filterPopoverCurrentFilter.id\n ] as Option[]) || [];\n const isOptionValueInInputValues =\n checkFilterInputValuesAsArray.some(\n (inputValue) =>\n inputValue.value === option.value,\n );\n return (\n <Checkbox\n key={option.value}\n label={option.label}\n value={option.value}\n isChecked={isOptionValueInInputValues}\n onChange={(_, checked) => {\n handleCheckboxFilterAndInputValueChange(\n filterPopoverCurrentFilter.id,\n option,\n checked,\n );\n }}\n />\n );\n },\n )}\n </CheckboxGroup>\n )}\n\n {/* Radio */}\n {filterPopoverCurrentFilter?.variant === \"select\" &&\n filterPopoverCurrentFilter?.options && (\n <RadioGroup\n label={filterPopoverCurrentFilter.label}\n onChange={(_, value) => {\n updateFilterAndInputValues({\n filterId: filterPopoverCurrentFilter.id,\n value,\n });\n }}\n >\n <Radio\n label={t(\"filters.filter.any\")}\n value={\"\"}\n isChecked={\n !inputValues[filterPopoverCurrentFilter.id]\n }\n />\n <>\n {filterPopoverCurrentFilter.options.map(\n (option: {\n label: string;\n value: string;\n }) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n isChecked={\n inputValues[\n filterPopoverCurrentFilter.id\n ] === option.value\n }\n />\n ),\n )}\n </>\n </RadioGroup>\n )}\n </>\n )}\n </form>\n </Box>\n </MuiPopover>\n </>\n )}\n\n {/* Search */}\n {onChangeSearch && (\n <form\n style={{ width: \"100%\" }}\n onSubmit={(event) => {\n event.preventDefault();\n if (hasSearchSubmitButton) {\n onChangeSearch(searchValue);\n }\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2, width: \"100%\" }}>\n <SearchField\n value={searchValue}\n label={t(\"filters.search.label\")}\n placeholder={t(\"filters.search.label\")}\n isDisabled={isDisabled}\n onClear={() => {\n setSearchValue(\"\");\n onChangeSearch(\"\");\n }}\n onChange={(ev) => setSearchValue(ev.target.value)}\n />\n {hasSearchSubmitButton && (\n <Box>\n <Button\n variant=\"primary\"\n label={t(\"filters.search.label\")}\n onClick={() => onChangeSearch(searchValue)}\n />\n </Box>\n )}\n </Box>\n </form>\n )}\n </Box>\n\n {/* Upper section right (clear filters & additional actions) */}\n <Box sx={{ display: \"flex\", gap: 2 }}>\n {activeFilters.length > 0 && (\n <Box>\n <Button\n variant=\"secondary\"\n label={t(\"filters.clear.label\")}\n onClick={clearAllFilters}\n />\n </Box>\n )}\n {additionalActions}\n </Box>\n </Box>\n\n {/* Lower section */}\n {activeFilters.length > 0 && (\n <Box\n sx={{\n borderTopWidth: 1,\n borderTopColor: \"#eeeeee\",\n borderTopStyle: \"solid\",\n paddingTop: 4,\n marginTop: 4,\n }}\n >\n <MemoizedFilterTags\n activeFilters={activeFilters}\n updateFilterAndInputValues={updateFilterAndInputValues}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nconst MemoizedDataFilters = memo(DataFilters);\nMemoizedDataFilters.displayName = \"DataFilters\";\n\nexport { MemoizedDataFilters as DataFilters };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DataFilters.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","Trans","useTranslation","styled","Autocomplete","Box","Button","CheckboxGroup","Checkbox","CheckIcon","ChevronRightIcon","CloseCircleFilledIcon","FilterIcon","useOdysseyDesignTokens","RadioGroup","Radio","SearchField","Tag","TagList","TextField","Subordinate","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","StyledAutocompleteOuterContainer","shouldForwardProp","prop","odysseyDesignTokens","display","alignItems","gap","Spacing2","StyledAutocompleteInnerContainer","width","FilterTags","activeFilters","updateFilterAndInputValues","filtersWithValues","filter","activeFilter","value","filtersToRender","forEach","Array","isArray","filterValue","formattedValue","push","id","label","getFilter","find","removeValueFromFilterAndInput","removedFilterValue","currentFilter","updatedValues","currentValue","filterId","length","undefined","children","map","onRemove","MemoizedFilterTags","displayName","DataFilters","onChangeSearch","onChangeFilters","hasSearchSubmitButton","searchDelayTime","defaultSearchTerm","additionalActions","filters","filtersProp","isDisabled","setFilters","t","initialInputValues","reduce","accumulator","inputValues","setInputValues","searchValue","setSearchValue","isFiltersMenuOpen","setIsFiltersMenuOpen","filtersMenuAnchorElement","setFiltersMenuAnchorElement","isFilterPopoverOpen","setIsFilterPopoverOpen","filterPopoverAnchorElement","setFilterPopoverAnchorElement","filterPopoverCurrentFilter","setFilterPopoverCurrentFilter","menuRef","debouncer","current","clearTimeout","setTimeout","autocompleteOptions","options","updateInputValue","updateFilters","prevInputValues","updatedFilters","handleCheckboxFilterAndInputValueChange","option","checked","currentValues","inputValue","normalizedUpdatedValues","handleAutocompleteFilterChange","clearAllFilters","updatedInputValues","handleFilterSubmit","filterMenu","ariaControls","ariaExpanded","ariaHasPopup","ariaLabel","endIcon","onClick","event","currentTarget","variant","_Menu","anchorOrigin","horizontal","vertical","transformOrigin","anchorEl","onClose","open","PaperProps","ref","latestFilterValue","f","_MenuItem","selected","className","sx","justifyContent","minWidth","paddingBlock","paddingInlineStart","marginRight","_Typography","fontWeight","marginBlockEnd","component","i18nKey","values","toLowerCase","count","autoCompleteValue","maxWidth","_Popover","elevation","marginLeft","marginTop","ev","menuRect","getBoundingClientRect","clickInsideMenu","clientX","left","right","clientY","top","bottom","padding","onSubmit","preventDefault","noValidate","render","hasMultipleChoices","isCustomValueAllowed","onChange","_","type","hasInitialFocus","endAdornment","_IconButton","size","isRequired","checkFilterInputValuesAsArray","isOptionValueInInputValues","some","isChecked","style","placeholder","onClear","target","borderTopWidth","borderTopColor","borderTopStyle","paddingTop","MemoizedDataFilters"],"sources":["../../../src/labs/DataFilters.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n MutableRefObject,\n ReactNode,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport {\n IconButton as MuiIconButton,\n Menu as MuiMenu,\n MenuItem as MuiMenuItem,\n Popover as MuiPopover,\n Typography as MuiTypography,\n} from \"@mui/material\";\nimport { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\nimport styled from \"@emotion/styled\";\n\nimport { Autocomplete } from \"../Autocomplete.js\";\nimport { Box } from \"../Box.js\";\nimport { Button } from \"../Buttons/index.js\";\nimport { CheckboxGroup } from \"../CheckboxGroup.js\";\nimport { Checkbox } from \"../Checkbox.js\";\nimport {\n CheckIcon,\n ChevronRightIcon,\n CloseCircleFilledIcon,\n FilterIcon,\n} from \"../icons.generated/index.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../OdysseyDesignTokensContext.js\";\nimport { RadioGroup } from \"../RadioGroup.js\";\nimport { Radio } from \"../Radio.js\";\nimport { SearchField } from \"../SearchField.js\";\nimport { Tag } from \"../Tag.js\";\nimport { TagList } from \"../TagList.js\";\nimport { TextField } from \"../TextField.js\";\nimport { Subordinate } from \"../Typography.js\";\n\nconst StyledAutocompleteOuterContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: odysseyDesignTokens.Spacing2,\n}));\n\nconst StyledAutocompleteInnerContainer = styled(\"div\")({\n width: \"100%\",\n});\n\ntype Option = {\n label: string;\n value: string;\n};\n\nexport type DataFilterValue = string | string[] | Option[] | undefined;\n\nexport type UpdateFiltersOrValues = ({\n filterId,\n value,\n}: {\n filterId: string;\n value: DataFilterValue;\n}) => void;\n\n// This is the shape of each individual filter\nexport type DataFilter = {\n /**\n * A unique ID for the filter, typically the same id\n * as the column it'll be applied to.\n */\n id: Exclude<MRT_ColumnDef<MRT_RowData>[\"accessorKey\"], undefined>;\n /**\n * `Autocomplete` normally only allows values that exist in the list box. This feature allows you to enter in any value in the text field and have that be the stored value in `Autocomplete`\n *\n * NOTE: This only applies when `variant` is `autocomplete`\n */\n isCustomValueAllowed?: boolean;\n /**\n * The human-friendly name of the filter.\n */\n label: string;\n /**\n * The type of filter, which determines which filtering control\n * is shown.\n */\n variant?: MRT_ColumnDef<MRT_RowData>[\"filterVariant\"];\n /**\n * The current value of the filter. Typically a string, but\n * filters that allow for multiple selections (such as multi-select)\n * can accept an array.\n */\n value?: DataFilterValue;\n /**\n * If the filter control has preset options (such as a select or multi-select),\n * these are the options provided.\n */\n options?: Option[];\n /**\n * A callback which renders a custom filter control\n */\n render?: (updateFilters: UpdateFiltersOrValues) => ReactNode;\n};\n\n// This is the type of the DataFilters component itself\nexport type DataFiltersProps = {\n /**\n * The callback that's fired when the search input changes\n * (either on change or on submit, based on the value of `hasSearchSubmitButton`).\n * If this is undefined, the search input will not be shown.\n */\n onChangeSearch?: (value: string) => void;\n /**\n * The callback that's fired when filter values change.\n */\n onChangeFilters?: (filters: Array<DataFilter>) => void;\n /**\n * If true, a Search button will be provided alongside the search input\n * and `onChangeSearch` will fire when the button is clicked, rather than\n * whenever the input value changes.\n */\n hasSearchSubmitButton?: boolean;\n /**\n * The debounce time, in milliseconds, for the search input firing\n * `onChangeSearch` when changed. If `hasSearchSubmitButton` is true,\n * this doesn't do anything.\n */\n searchDelayTime?: number;\n /**\n * The starting value of the search input\n */\n defaultSearchTerm?: string;\n /**\n * A slot for optional additional actions, like buttons, to be displayed\n * on the opposite side of the top row from the search and filter controls.\n */\n additionalActions?: ReactNode;\n /**\n * The filters available in the filter menu. If undefined,\n * the filter menu won't be shown.\n */\n filters?: Array<DataFilter>;\n /**\n * If true, the filter and search will be disabled\n */\n isDisabled?: boolean;\n};\n\ntype FilterTagsProps = {\n activeFilters: DataFilter[];\n updateFilterAndInputValues: UpdateFiltersOrValues;\n};\n\ntype FiltersToRender = {\n id: string;\n label: string;\n value: string;\n};\n\nconst FilterTags = ({\n activeFilters,\n updateFilterAndInputValues,\n}: FilterTagsProps) => {\n const filtersWithValues = activeFilters.filter(\n (activeFilter: DataFilter) => activeFilter.value,\n );\n const filtersToRender: FiltersToRender[] = [];\n\n filtersWithValues.forEach((filter) => {\n if (Array.isArray(filter.value)) {\n filter.value.forEach((filterValue) => {\n const formattedValue =\n typeof filterValue === \"string\" ? filterValue : filterValue.value;\n filtersToRender.push({\n id: filter.id,\n label: filter.label,\n value: formattedValue,\n });\n });\n }\n if (typeof filter.value === \"string\") {\n filtersToRender.push({\n id: filter.id,\n label: filter.label,\n value: filter.value,\n });\n }\n });\n\n const getFilter = (id: string) =>\n filtersWithValues.find((filter) => filter.id === id);\n\n const removeValueFromFilterAndInput = (\n id: string,\n removedFilterValue: string,\n ) => {\n const currentFilter = getFilter(id);\n\n if (currentFilter) {\n const { value } = currentFilter;\n\n if (Array.isArray(value)) {\n const updatedValues = value.filter((currentValue) => {\n return (currentValue as Option).value !== removedFilterValue;\n });\n updateFilterAndInputValues({\n filterId: id,\n value:\n updatedValues.length > 0 ? (updatedValues as Option[]) : undefined,\n });\n }\n\n if (typeof value === \"string\") {\n updateFilterAndInputValues({\n filterId: id,\n value: undefined,\n });\n }\n }\n };\n\n return (\n <TagList>\n {filtersToRender.map((filter) => (\n <Tag\n key={`${filter.label}: ${filter.value}`}\n label={`${filter.label}: ${filter.value}`}\n onRemove={() =>\n removeValueFromFilterAndInput(filter.id, filter.value)\n }\n />\n ))}\n </TagList>\n );\n};\n\nconst MemoizedFilterTags = memo(FilterTags);\nMemoizedFilterTags.displayName = \"FilterTags\";\n\nconst DataFilters = ({\n onChangeSearch,\n onChangeFilters,\n hasSearchSubmitButton = false,\n searchDelayTime = 200,\n defaultSearchTerm = \"\",\n additionalActions,\n filters: filtersProp = [],\n isDisabled,\n}: DataFiltersProps) => {\n const [filters, setFilters] = useState<DataFilter[]>(filtersProp);\n const { t } = useTranslation();\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const initialInputValues = useMemo(() => {\n return filtersProp.reduce(\n (accumulator, filter) => {\n accumulator[filter.id] = filter.value;\n return accumulator;\n },\n {} as Record<string, DataFilterValue>,\n );\n }, [filtersProp]);\n\n const [inputValues, setInputValues] = useState(initialInputValues);\n\n const [searchValue, setSearchValue] = useState<string>(defaultSearchTerm);\n\n const activeFilters = useMemo(() => {\n return filters.filter((filter) => filter.value);\n }, [filters]);\n\n const [isFiltersMenuOpen, setIsFiltersMenuOpen] = useState<boolean>(false);\n\n const [filtersMenuAnchorElement, setFiltersMenuAnchorElement] = useState<\n HTMLElement | undefined\n >();\n\n const [isFilterPopoverOpen, setIsFilterPopoverOpen] =\n useState<boolean>(false);\n\n const [filterPopoverAnchorElement, setFilterPopoverAnchorElement] = useState<\n HTMLElement | undefined\n >();\n\n const [filterPopoverCurrentFilter, setFilterPopoverCurrentFilter] = useState<\n DataFilter | undefined\n >();\n\n const menuRef = useRef<HTMLDivElement>();\n\n useEffect(() => {\n onChangeFilters?.(filters);\n }, [filters, onChangeFilters]);\n\n const debouncer = useRef<NodeJS.Timeout | undefined>(undefined);\n\n useEffect(() => {\n if (!hasSearchSubmitButton) {\n if (debouncer.current) {\n clearTimeout(debouncer.current);\n }\n\n debouncer.current = setTimeout(() => {\n onChangeSearch?.(searchValue ?? \"\");\n }, searchDelayTime);\n }\n }, [onChangeSearch, searchValue, searchDelayTime, hasSearchSubmitButton]);\n\n const autocompleteOptions = useMemo(() => {\n return filterPopoverCurrentFilter?.options || [];\n }, [filterPopoverCurrentFilter]);\n\n const updateInputValue = useCallback<UpdateFiltersOrValues>(\n ({ filterId, value }) => {\n setInputValues({ ...inputValues, [filterId]: value });\n },\n [inputValues],\n );\n\n const updateFilters = useCallback<UpdateFiltersOrValues>(\n ({ filterId, value }) => {\n setInputValues((prevInputValues) => ({\n ...prevInputValues,\n [filterId]: value,\n }));\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: filter.id === filterId ? value : inputValues[filter.id],\n }));\n setFilters(updatedFilters);\n },\n [inputValues, filtersProp],\n );\n\n const updateFilterAndInputValues = useCallback<UpdateFiltersOrValues>(\n ({ filterId, value }) => {\n updateInputValue({ filterId, value });\n updateFilters({ filterId, value });\n },\n [updateFilters, updateInputValue],\n );\n\n const handleCheckboxFilterAndInputValueChange = useCallback<\n (filterId: string, option: Option, checked: boolean) => void\n >(\n (filterId, option, checked) => {\n const currentValues = (inputValues[filterId] as Option[]) || [];\n\n const updatedValues = checked\n ? [...currentValues, option]\n : currentValues.filter(\n (inputValue) => inputValue.value !== option.value,\n );\n\n const normalizedUpdatedValues =\n updatedValues.length > 0 ? updatedValues : undefined;\n\n setInputValues({\n ...inputValues,\n [filterId]: normalizedUpdatedValues,\n });\n\n const updatedFilters = filters.map((filter) => ({\n ...filter,\n value:\n filter.id === filterId\n ? normalizedUpdatedValues\n : inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n },\n [filters, inputValues],\n );\n\n const handleAutocompleteFilterChange = useCallback<\n (filterId: string, option: Option[]) => void\n >(\n (filterId, option) => {\n setInputValues({ ...inputValues, [filterId]: option });\n },\n [inputValues],\n );\n\n const clearAllFilters = useCallback(() => {\n const updatedInputValues = filtersProp.reduce(\n (accumulator, filter) => {\n accumulator[filter.id] = undefined;\n return accumulator;\n },\n {} as Record<string, DataFilterValue>,\n );\n\n setInputValues(updatedInputValues);\n\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: undefined,\n }));\n\n setFilters(updatedFilters);\n }, [filtersProp]);\n\n const handleFilterSubmit = useCallback(() => {\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n }, [inputValues, filtersProp]);\n\n const filterMenu = useMemo(\n () => (\n <>\n <Box>\n <Button\n ariaControls={isFiltersMenuOpen ? \"filters-menu\" : undefined}\n ariaExpanded={isFiltersMenuOpen ? \"true\" : undefined}\n ariaHasPopup=\"true\"\n ariaLabel={t(\"filters.filters.arialabel\")}\n isDisabled={isDisabled}\n endIcon={<FilterIcon />}\n onClick={(event) => {\n setFiltersMenuAnchorElement(event.currentTarget);\n setIsFiltersMenuOpen(true);\n }}\n variant=\"secondary\"\n />\n </Box>\n\n <MuiMenu\n anchorOrigin={{ horizontal: \"left\", vertical: \"bottom\" }}\n transformOrigin={{ horizontal: \"left\", vertical: \"top\" }}\n id=\"filters-menu\"\n anchorEl={filtersMenuAnchorElement}\n onClose={() => setIsFiltersMenuOpen(false)}\n open={isFiltersMenuOpen}\n PaperProps={{\n ref: menuRef as MutableRefObject<HTMLDivElement>,\n }}\n >\n {filtersProp.map((filter) => {\n // Unintuitively, we can't just use filter.value to grab the filter value.\n // `filter` is the initial set of filters provided to the comoponent, so its\n // value prop may not reflect the current value of the filter.\n const latestFilterValue = filters.find(\n (f) => f.id === filter.id,\n )?.value;\n\n return (\n <MuiMenuItem\n key={filter.id}\n aria-controls={isFilterPopoverOpen ? \"filter-form\" : undefined}\n onClick={(event) => {\n setIsFilterPopoverOpen(true);\n setFilterPopoverAnchorElement(event.currentTarget);\n setFilterPopoverCurrentFilter(filter);\n }}\n selected={\n filterPopoverCurrentFilter === filter &&\n isFilterPopoverOpen === true\n }\n className={\n filterPopoverCurrentFilter === filter &&\n isFilterPopoverOpen === true\n ? \"isVisiblySelected\"\n : undefined\n }\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n minWidth: 180,\n paddingBlock: 1,\n paddingInlineStart: 2,\n }}\n >\n <Box sx={{ marginRight: 2 }}>\n <MuiTypography fontWeight=\"500\" sx={{ marginBlockEnd: 2 }}>\n {filter.label}\n </MuiTypography>\n <Subordinate component=\"div\">\n {!latestFilterValue ||\n (Array.isArray(latestFilterValue) &&\n latestFilterValue.length === 0) ? (\n <Trans\n i18nKey=\"filters.menuitem.any\"\n values={{\n label: filter.label.toLowerCase(),\n }}\n />\n ) : Array.isArray(latestFilterValue) ? (\n <Trans\n count={latestFilterValue.length}\n i18nKey=\"filters.menuitem.selected\"\n values={{\n selected: latestFilterValue.length,\n }}\n />\n ) : (\n latestFilterValue\n )}\n </Subordinate>\n </Box>\n <ChevronRightIcon />\n </Box>\n </MuiMenuItem>\n );\n })}\n </MuiMenu>\n </>\n ),\n [\n isFiltersMenuOpen,\n isDisabled,\n filterPopoverCurrentFilter,\n isFilterPopoverOpen,\n filtersMenuAnchorElement,\n filtersProp,\n filters,\n t,\n ],\n );\n\n const autoCompleteValue = useMemo(\n () =>\n filterPopoverCurrentFilter?.id\n ? (inputValues[filterPopoverCurrentFilter.id] as Option[])\n : undefined,\n [filterPopoverCurrentFilter, inputValues],\n );\n\n return (\n <Box>\n {/* Upper section */}\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\" }}>\n {/* Upper section left (filters and search) */}\n <Box sx={{ display: \"flex\", gap: 2, width: \"50%\", maxWidth: 480 }}>\n {/* Filter menu */}\n {filters.length > 0 && (\n <>\n {filterMenu}\n {/* Filter popover */}\n <MuiPopover\n id=\"filter-form\"\n anchorEl={filterPopoverAnchorElement}\n // Positions the popover flush with the edge of the parent menu\n // and at the right shadow elevation. These magic values are simply\n // to match the default popover offset.\n elevation={2}\n sx={{ marginLeft: 2, marginTop: -1 }}\n open={isFilterPopoverOpen}\n anchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\n onClose={(ev: MouseEvent) => {\n if (menuRef.current) {\n const menuRect = menuRef.current.getBoundingClientRect();\n const clickInsideMenu =\n ev.clientX >= menuRect.left &&\n ev.clientX <= menuRect.right &&\n ev.clientY >= menuRect.top &&\n ev.clientY <= menuRect.bottom;\n\n if (!clickInsideMenu) {\n setIsFiltersMenuOpen(false);\n }\n }\n handleFilterSubmit();\n setIsFilterPopoverOpen(false);\n }}\n >\n <Box sx={{ padding: 4, minWidth: 320 }}>\n <form\n onSubmit={(ev) => {\n ev.preventDefault();\n handleFilterSubmit();\n setIsFilterPopoverOpen(false);\n setIsFiltersMenuOpen(false);\n }}\n noValidate\n >\n {filterPopoverCurrentFilter?.render ? (\n filterPopoverCurrentFilter.render(updateFilters)\n ) : (\n <>\n {/* Autocomplete */}\n {filterPopoverCurrentFilter?.variant ===\n \"autocomplete\" &&\n filterPopoverCurrentFilter?.options && (\n <StyledAutocompleteOuterContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <StyledAutocompleteInnerContainer>\n <Autocomplete\n hasMultipleChoices\n isCustomValueAllowed={\n filterPopoverCurrentFilter?.isCustomValueAllowed\n }\n label={filterPopoverCurrentFilter.label}\n value={autoCompleteValue}\n onChange={(_, value) => {\n handleAutocompleteFilterChange(\n filterPopoverCurrentFilter.id,\n value as Option[],\n );\n }}\n options={autocompleteOptions}\n />\n </StyledAutocompleteInnerContainer>\n <Button\n variant=\"primary\"\n endIcon={<CheckIcon />}\n type=\"submit\"\n ariaLabel={t(\"filters.submit.label\")}\n />\n </StyledAutocompleteOuterContainer>\n )}\n {/* Text, Number, or undefined */}\n {(filterPopoverCurrentFilter?.variant === \"text\" ||\n filterPopoverCurrentFilter?.variant === \"range\" ||\n (filterPopoverCurrentFilter &&\n filterPopoverCurrentFilter?.variant ==\n undefined)) && (\n <Box\n sx={{\n display: \"flex\",\n gap: 2,\n alignItems: \"flex-end\",\n }}\n >\n <Box sx={{ width: \"100%\" }}>\n <TextField\n hasInitialFocus\n label={filterPopoverCurrentFilter.label}\n type={\n filterPopoverCurrentFilter.variant === \"range\"\n ? \"number\"\n : \"text\"\n }\n value={\n (inputValues[\n filterPopoverCurrentFilter.id\n ] as string) ?? \"\"\n }\n onChange={(ev) =>\n updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value: ev.currentTarget.value,\n })\n }\n endAdornment={\n inputValues[\n filterPopoverCurrentFilter.id\n ] && (\n <MuiIconButton\n size=\"small\"\n aria-label={t(\"filters.filter.clear\")}\n onClick={() => {\n updateInputValue({\n filterId:\n filterPopoverCurrentFilter.id,\n value: undefined,\n });\n\n updateFilters({\n filterId:\n filterPopoverCurrentFilter.id,\n value: undefined,\n });\n }}\n >\n <CloseCircleFilledIcon />\n </MuiIconButton>\n )\n }\n />\n </Box>\n <Button\n variant=\"primary\"\n endIcon={<CheckIcon />}\n type=\"submit\"\n ariaLabel={t(\"filters.submit.label\")}\n />\n </Box>\n )}\n\n {/* Checkbox */}\n {filterPopoverCurrentFilter?.variant ===\n \"multi-select\" &&\n filterPopoverCurrentFilter?.options && (\n <CheckboxGroup\n label={filterPopoverCurrentFilter.label}\n isRequired\n >\n {filterPopoverCurrentFilter.options.map(\n (option: { label: string; value: string }) => {\n const checkFilterInputValuesAsArray =\n (inputValues[\n filterPopoverCurrentFilter.id\n ] as Option[]) || [];\n const isOptionValueInInputValues =\n checkFilterInputValuesAsArray.some(\n (inputValue) =>\n inputValue.value === option.value,\n );\n return (\n <Checkbox\n key={option.value}\n label={option.label}\n value={option.value}\n isChecked={isOptionValueInInputValues}\n onChange={(_, checked) => {\n handleCheckboxFilterAndInputValueChange(\n filterPopoverCurrentFilter.id,\n option,\n checked,\n );\n }}\n />\n );\n },\n )}\n </CheckboxGroup>\n )}\n\n {/* Radio */}\n {filterPopoverCurrentFilter?.variant === \"select\" &&\n filterPopoverCurrentFilter?.options && (\n <RadioGroup\n label={filterPopoverCurrentFilter.label}\n onChange={(_, value) => {\n updateFilterAndInputValues({\n filterId: filterPopoverCurrentFilter.id,\n value,\n });\n }}\n >\n <Radio\n label={t(\"filters.filter.any\")}\n value={\"\"}\n isChecked={\n !inputValues[filterPopoverCurrentFilter.id]\n }\n />\n <>\n {filterPopoverCurrentFilter.options.map(\n (option: {\n label: string;\n value: string;\n }) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n isChecked={\n inputValues[\n filterPopoverCurrentFilter.id\n ] === option.value\n }\n />\n ),\n )}\n </>\n </RadioGroup>\n )}\n </>\n )}\n </form>\n </Box>\n </MuiPopover>\n </>\n )}\n\n {/* Search */}\n {onChangeSearch && (\n <form\n style={{ width: \"100%\" }}\n onSubmit={(event) => {\n event.preventDefault();\n if (hasSearchSubmitButton) {\n onChangeSearch(searchValue);\n }\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2, width: \"100%\" }}>\n <SearchField\n value={searchValue}\n label={t(\"filters.search.label\")}\n placeholder={t(\"filters.search.label\")}\n isDisabled={isDisabled}\n onClear={() => {\n setSearchValue(\"\");\n onChangeSearch(\"\");\n }}\n onChange={(ev) => setSearchValue(ev.target.value)}\n />\n {hasSearchSubmitButton && (\n <Box>\n <Button\n variant=\"primary\"\n label={t(\"filters.search.label\")}\n onClick={() => onChangeSearch(searchValue)}\n />\n </Box>\n )}\n </Box>\n </form>\n )}\n </Box>\n\n {/* Upper section right (clear filters & additional actions) */}\n <Box sx={{ display: \"flex\", gap: 2 }}>\n {activeFilters.length > 0 && (\n <Box>\n <Button\n variant=\"secondary\"\n label={t(\"filters.clear.label\")}\n onClick={clearAllFilters}\n />\n </Box>\n )}\n {additionalActions}\n </Box>\n </Box>\n\n {/* Lower section */}\n {activeFilters.length > 0 && (\n <Box\n sx={{\n borderTopWidth: 1,\n borderTopColor: \"#eeeeee\",\n borderTopStyle: \"solid\",\n paddingTop: 4,\n marginTop: 4,\n }}\n >\n <MemoizedFilterTags\n activeFilters={activeFilters}\n updateFilterAndInputValues={updateFilterAndInputValues}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nconst MemoizedDataFilters = memo(DataFilters);\nMemoizedDataFilters.displayName = \"DataFilters\";\n\nexport { MemoizedDataFilters as DataFilters };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,7 +27,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
27
27
|
export const CARD_IMAGE_SIZE = "64px";
|
|
28
28
|
export const CARD_IMAGE_SIZE_COMPACT = "48px";
|
|
29
29
|
export const cardVariantValues = ["tile", "stack", "compact"];
|
|
30
|
-
const
|
|
30
|
+
const StyledAccessoryContainer = styled("div", {
|
|
31
31
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "variant"
|
|
32
32
|
})(({
|
|
33
33
|
odysseyDesignTokens,
|
|
@@ -39,7 +39,7 @@ const AccessoryContainer = styled("div", {
|
|
|
39
39
|
gap: odysseyDesignTokens.Spacing2,
|
|
40
40
|
height: variant === "compact" ? CARD_IMAGE_SIZE_COMPACT : "auto"
|
|
41
41
|
}));
|
|
42
|
-
const
|
|
42
|
+
const StyledImageContainer = styled("div", {
|
|
43
43
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "hasMenuButtonChildren" && prop !== "variant"
|
|
44
44
|
})(({
|
|
45
45
|
odysseyDesignTokens,
|
|
@@ -53,7 +53,7 @@ const ImageContainer = styled("div", {
|
|
|
53
53
|
marginBlockEnd: variant === "tile" ? odysseyDesignTokens.Spacing5 : 0,
|
|
54
54
|
paddingRight: hasMenuButtonChildren ? odysseyDesignTokens.Spacing5 : 0
|
|
55
55
|
}));
|
|
56
|
-
const
|
|
56
|
+
const StyledMenuButtonContainer = styled("div", {
|
|
57
57
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
58
58
|
})(({
|
|
59
59
|
odysseyDesignTokens,
|
|
@@ -66,7 +66,7 @@ const MenuButtonContainer = styled("div", {
|
|
|
66
66
|
display: "flex",
|
|
67
67
|
alignItems: "center"
|
|
68
68
|
}));
|
|
69
|
-
const
|
|
69
|
+
const StyledCardInnerContainer = styled("div", {
|
|
70
70
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
71
71
|
})(({
|
|
72
72
|
odysseyDesignTokens
|
|
@@ -74,7 +74,7 @@ const CardInnerContainer = styled("div", {
|
|
|
74
74
|
display: "flex",
|
|
75
75
|
gap: odysseyDesignTokens.Spacing3
|
|
76
76
|
}));
|
|
77
|
-
const
|
|
77
|
+
const StyledCardImageAndContentContainer = styled("div", {
|
|
78
78
|
shouldForwardProp: prop => prop !== "variant" && prop !== "centerContent"
|
|
79
79
|
})(({
|
|
80
80
|
variant,
|
|
@@ -84,8 +84,8 @@ const CardImageAndContentContainer = styled("div", {
|
|
|
84
84
|
flexDirection: variant === "tile" ? "column" : "row",
|
|
85
85
|
alignItems: centerContent ? "center" : "flex-start"
|
|
86
86
|
}));
|
|
87
|
-
const
|
|
88
|
-
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
87
|
+
const StyledCardContent = styled("div", {
|
|
88
|
+
shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "variant"
|
|
89
89
|
})(({
|
|
90
90
|
odysseyDesignTokens,
|
|
91
91
|
variant
|
|
@@ -97,7 +97,7 @@ const CardContent = styled("div", {
|
|
|
97
97
|
marginBlockEnd: 0
|
|
98
98
|
}
|
|
99
99
|
}));
|
|
100
|
-
const
|
|
100
|
+
const StyledCardChildrenContainer = styled("div", {
|
|
101
101
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
102
102
|
})(({
|
|
103
103
|
odysseyDesignTokens
|
|
@@ -106,7 +106,7 @@ const CardChildrenContainer = styled("div", {
|
|
|
106
106
|
marginBlockStart: odysseyDesignTokens.Spacing3
|
|
107
107
|
}
|
|
108
108
|
}));
|
|
109
|
-
const
|
|
109
|
+
const StyledAccessoryPlaceholder = styled(_IconButton)({
|
|
110
110
|
visibility: "hidden"
|
|
111
111
|
});
|
|
112
112
|
const buttonProviderValue = {
|
|
@@ -141,13 +141,13 @@ const DataCard = ({
|
|
|
141
141
|
onClick: () => setIsDetailPanelOpen(!isDetailPanelOpen),
|
|
142
142
|
"aria-label": isDetailPanelOpen ? t("table.rowexpansion.collapse") : t("table.rowexpansion.expand")
|
|
143
143
|
})
|
|
144
|
-
}) : _jsx(
|
|
144
|
+
}) : _jsx(StyledAccessoryPlaceholder, {
|
|
145
145
|
disabled: true,
|
|
146
146
|
children: _jsx(ChevronDownIcon, {})
|
|
147
147
|
});
|
|
148
148
|
}, [isDetailPanelOpen, renderDetailPanel, row, t]);
|
|
149
149
|
const Accessory = useMemo(() => {
|
|
150
|
-
return _jsxs(
|
|
150
|
+
return _jsxs(StyledAccessoryContainer, {
|
|
151
151
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
152
152
|
variant: variant,
|
|
153
153
|
children: [AccessoryProp, renderDetailPanel && ExpansionToggle]
|
|
@@ -158,19 +158,19 @@ const DataCard = ({
|
|
|
158
158
|
return props.filter(prop => prop !== undefined).length;
|
|
159
159
|
};
|
|
160
160
|
const shouldCenterContent = variant === "compact" && (!renderDetailPanel || !isDetailPanelOpen) && countDefinedProps([title, description, overline, button, children]) <= 2;
|
|
161
|
-
return _jsxs(
|
|
161
|
+
return _jsxs(StyledCardInnerContainer, {
|
|
162
162
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
163
163
|
children: [(AccessoryProp || renderDetailPanel) && _jsx(Box, {
|
|
164
164
|
children: Accessory
|
|
165
|
-
}), _jsxs(
|
|
165
|
+
}), _jsxs(StyledCardImageAndContentContainer, {
|
|
166
166
|
variant: variant,
|
|
167
167
|
centerContent: shouldCenterContent,
|
|
168
|
-
children: [image && _jsx(
|
|
168
|
+
children: [image && _jsx(StyledImageContainer, {
|
|
169
169
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
170
170
|
hasMenuButtonChildren: Boolean(menuButtonChildren),
|
|
171
171
|
variant: variant,
|
|
172
172
|
children: image
|
|
173
|
-
}), _jsxs(
|
|
173
|
+
}), _jsxs(StyledCardContent, {
|
|
174
174
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
175
175
|
variant: variant,
|
|
176
176
|
children: [overline && _jsx(Support, {
|
|
@@ -187,10 +187,10 @@ const DataCard = ({
|
|
|
187
187
|
value: buttonProviderValue,
|
|
188
188
|
children: button
|
|
189
189
|
})
|
|
190
|
-
}), children && _jsx(
|
|
190
|
+
}), children && _jsx(StyledCardChildrenContainer, {
|
|
191
191
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
192
192
|
children: children
|
|
193
|
-
}), renderDetailPanel && isDetailPanelOpen && _jsx(
|
|
193
|
+
}), renderDetailPanel && isDetailPanelOpen && _jsx(StyledCardChildrenContainer, {
|
|
194
194
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
195
195
|
children: renderDetailPanel({
|
|
196
196
|
row
|
|
@@ -206,7 +206,7 @@ const DataCard = ({
|
|
|
206
206
|
children: [onClick ? _jsx(_CardActionArea, {
|
|
207
207
|
onClick: onClick,
|
|
208
208
|
children: cardContent
|
|
209
|
-
}) : cardContent, menuButtonChildren && _jsx(
|
|
209
|
+
}) : cardContent, menuButtonChildren && _jsx(StyledMenuButtonContainer, {
|
|
210
210
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
211
211
|
variant: variant,
|
|
212
212
|
children: _jsx(MenuButton, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataCard.js","names":["memo","useMemo","useState","styled","useTranslation","Box","ButtonContext","MenuButton","useOdysseyDesignTokens","Heading5","Paragraph","Support","ChevronDownIcon","ChevronUpIcon","MoreIcon","jsx","_jsx","jsxs","_jsxs","CARD_IMAGE_SIZE","CARD_IMAGE_SIZE_COMPACT","cardVariantValues","AccessoryContainer","shouldForwardProp","prop","odysseyDesignTokens","variant","display","flexDirection","alignItems","gap","Spacing2","height","ImageContainer","hasMenuButtonChildren","maxHeight","marginBlockEnd","Spacing5","paddingRight","MenuButtonContainer","position","right","Spacing3","top","Spacing4","CardInnerContainer","CardImageAndContentContainer","centerContent","CardContent","Spacing1","CardChildrenContainer","marginBlockStart","AccessoryPlaceholder","_IconButton","visibility","buttonProviderValue","isFullWidth","DataCard","Accessory","AccessoryProp","button","children","description","image","menuButtonChildren","onClick","overline","renderDetailPanel","row","title","t","isDetailPanelOpen","setIsDetailPanelOpen","ExpansionToggle","_Tooltip","disabled","cardContent","countDefinedProps","props","filter","undefined","length","shouldCenterContent","Boolean","component","color","_CardActions","Provider","value","_Card","className","role","_CardActionArea","endIcon","ariaLabel","buttonVariant","menuAlignment","size","tooltipText","MemoizedDataCard","displayName"],"sources":["../../../../src/labs/DataView/DataCard.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n MouseEventHandler,\n ReactElement,\n memo,\n useMemo,\n ReactNode,\n useState,\n} from \"react\";\nimport {\n IconButton as MuiIconButton,\n Card as MuiCard,\n CardActions as MuiCardActions,\n CardActionArea as MuiCardActionArea,\n Tooltip as MuiTooltip,\n} from \"@mui/material\";\nimport styled from \"@emotion/styled\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Box } from \"../../Box.js\";\nimport {\n Button,\n ButtonContext,\n MenuButton,\n MenuButtonProps,\n} from \"../../Buttons/index.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Heading5, Paragraph, Support } from \"../../Typography.js\";\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n MoreIcon,\n} from \"../../icons.generated/index.js\";\nimport { CardLayoutProps } from \"./componentTypes.js\";\nimport { MRT_RowData } from \"material-react-table\";\n\nexport const CARD_IMAGE_SIZE = \"64px\";\nexport const CARD_IMAGE_SIZE_COMPACT = \"48px\";\n\nexport const cardVariantValues = [\"tile\", \"stack\", \"compact\"] as const;\n\nexport type DataCardProps<TData extends MRT_RowData> = {\n children?: ReactNode;\n description?: string;\n image?: ReactElement;\n overline?: string;\n renderDetailPanel?: CardLayoutProps<TData>[\"renderDetailPanel\"];\n row: TData;\n title?: string;\n variant?: (typeof cardVariantValues)[number];\n} & (\n | {\n Accessory?: never;\n button?: never;\n menuButtonChildren?: never;\n onClick: MouseEventHandler;\n }\n | {\n Accessory?: ReactNode;\n button?: ReactElement<typeof Button>;\n menuButtonChildren?: MenuButtonProps[\"children\"];\n onClick?: never;\n }\n);\n\ntype DataCardComponent = (<TData extends MRT_RowData>(\n props: DataCardProps<TData>,\n) => JSX.Element) & {\n displayName?: string;\n};\n\nconst AccessoryContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"variant\",\n})<{\n odysseyDesignTokens: DesignTokens;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, variant }) => ({\n display: \"flex\",\n flexDirection: variant === \"compact\" ? \"row\" : \"column\",\n alignItems: \"center\",\n gap: odysseyDesignTokens.Spacing2,\n height: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : \"auto\",\n}));\n\nconst ImageContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"hasMenuButtonChildren\" &&\n prop !== \"variant\",\n})<{\n odysseyDesignTokens: DesignTokens;\n hasMenuButtonChildren: boolean;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, hasMenuButtonChildren, variant }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n height: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : CARD_IMAGE_SIZE,\n maxHeight: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : CARD_IMAGE_SIZE,\n marginBlockEnd: variant === \"tile\" ? odysseyDesignTokens.Spacing5 : 0,\n paddingRight: hasMenuButtonChildren ? odysseyDesignTokens.Spacing5 : 0,\n}));\n\nconst MenuButtonContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, variant }) => ({\n position: \"absolute\",\n right: odysseyDesignTokens.Spacing3,\n top:\n variant === \"compact\"\n ? odysseyDesignTokens.Spacing4\n : odysseyDesignTokens.Spacing3,\n height: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n}));\n\nconst CardInnerContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing3,\n}));\n\nconst CardImageAndContentContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"variant\" && prop !== \"centerContent\",\n})<{ variant: (typeof cardVariantValues)[number]; centerContent: boolean }>(\n ({ variant, centerContent }) => ({\n display: \"flex\",\n flexDirection: variant === \"tile\" ? \"column\" : \"row\",\n alignItems: centerContent ? \"center\" : \"flex-start\",\n }),\n);\n\nconst CardContent = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, variant }) => ({\n \"& > .MuiTypography-h5:not(:last-child)\": {\n marginBlockEnd: `${variant === \"compact\" ? odysseyDesignTokens.Spacing1 : odysseyDesignTokens.Spacing3} !important`,\n },\n \"& > *:last-child\": {\n marginBlockEnd: 0,\n },\n}));\n\nconst CardChildrenContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n [\"&:not(:first-child)\"]: {\n marginBlockStart: odysseyDesignTokens.Spacing3,\n },\n}));\n\nconst AccessoryPlaceholder = styled(MuiIconButton)({\n visibility: \"hidden\",\n});\n\nconst buttonProviderValue = { isFullWidth: true };\n\nconst DataCard: DataCardComponent = <TData extends MRT_RowData>({\n Accessory: AccessoryProp,\n button,\n children,\n description,\n image,\n menuButtonChildren,\n onClick,\n overline,\n renderDetailPanel,\n row,\n title,\n variant = \"tile\",\n}: DataCardProps<TData>) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const [isDetailPanelOpen, setIsDetailPanelOpen] = useState<boolean>(false);\n\n const ExpansionToggle = useMemo(() => {\n return renderDetailPanel?.({ row }) ? (\n <MuiTooltip\n title={\n isDetailPanelOpen\n ? t(\"table.rowexpansion.collapse\")\n : t(\"table.rowexpansion.expand\")\n }\n >\n <MuiIconButton\n children={isDetailPanelOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={() => setIsDetailPanelOpen(!isDetailPanelOpen)}\n aria-label={\n isDetailPanelOpen\n ? t(\"table.rowexpansion.collapse\")\n : t(\"table.rowexpansion.expand\")\n }\n />\n </MuiTooltip>\n ) : (\n <AccessoryPlaceholder disabled>\n <ChevronDownIcon />\n </AccessoryPlaceholder>\n );\n }, [isDetailPanelOpen, renderDetailPanel, row, t]);\n\n const Accessory = useMemo(() => {\n return (\n <AccessoryContainer\n odysseyDesignTokens={odysseyDesignTokens}\n variant={variant}\n >\n {AccessoryProp}\n {renderDetailPanel && ExpansionToggle}\n </AccessoryContainer>\n );\n }, [\n AccessoryProp,\n ExpansionToggle,\n odysseyDesignTokens,\n renderDetailPanel,\n variant,\n ]);\n\n const cardContent = useMemo(() => {\n const countDefinedProps = (\n props: Array<string | ReactNode | undefined>,\n ) => {\n return props.filter((prop) => prop !== undefined).length;\n };\n\n const shouldCenterContent =\n variant === \"compact\" &&\n (!renderDetailPanel || !isDetailPanelOpen) &&\n countDefinedProps([title, description, overline, button, children]) <= 2;\n\n return (\n <CardInnerContainer odysseyDesignTokens={odysseyDesignTokens}>\n {(AccessoryProp || renderDetailPanel) && <Box>{Accessory}</Box>}\n <CardImageAndContentContainer\n variant={variant}\n centerContent={shouldCenterContent}\n >\n {image && (\n <ImageContainer\n odysseyDesignTokens={odysseyDesignTokens}\n hasMenuButtonChildren={Boolean(menuButtonChildren)}\n variant={variant}\n >\n {image}\n </ImageContainer>\n )}\n\n <CardContent\n odysseyDesignTokens={odysseyDesignTokens}\n variant={variant}\n >\n {overline && <Support component=\"div\">{overline}</Support>}\n {title && <Heading5 component=\"div\">{title}</Heading5>}\n {description && (\n <Paragraph color=\"textSecondary\">{description}</Paragraph>\n )}\n\n {button && (\n <MuiCardActions>\n <ButtonContext.Provider value={buttonProviderValue}>\n {button}\n </ButtonContext.Provider>\n </MuiCardActions>\n )}\n\n {children && (\n <CardChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>\n {children}\n </CardChildrenContainer>\n )}\n\n {renderDetailPanel && isDetailPanelOpen && (\n <CardChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>\n {renderDetailPanel({ row })}\n </CardChildrenContainer>\n )}\n </CardContent>\n </CardImageAndContentContainer>\n </CardInnerContainer>\n );\n }, [\n odysseyDesignTokens,\n AccessoryProp,\n renderDetailPanel,\n Accessory,\n variant,\n image,\n menuButtonChildren,\n overline,\n title,\n description,\n button,\n children,\n isDetailPanelOpen,\n row,\n ]);\n\n return (\n <MuiCard\n className={`${onClick ? \"isClickable\" : \"\"} ${Accessory ? \"hasAccessory\" : \"\"} ods-card-${variant}`}\n role=\"listitem\"\n >\n {onClick ? (\n <MuiCardActionArea onClick={onClick}>{cardContent}</MuiCardActionArea>\n ) : (\n cardContent\n )}\n\n {menuButtonChildren && (\n <MenuButtonContainer\n odysseyDesignTokens={odysseyDesignTokens}\n variant={variant}\n >\n <MenuButton\n endIcon={<MoreIcon />}\n ariaLabel={t(\"table.moreactions.arialabel\")}\n buttonVariant=\"floating\"\n menuAlignment=\"right\"\n size=\"small\"\n tooltipText={t(\"table.actions\")}\n >\n {menuButtonChildren}\n </MenuButton>\n </MenuButtonContainer>\n )}\n </MuiCard>\n );\n};\n\nconst MemoizedDataCard = memo(DataCard) as DataCardComponent;\nMemoizedDataCard.displayName = \"DataCard\";\n\nexport { MemoizedDataCard as DataCard };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DataCard.js","names":["memo","useMemo","useState","styled","useTranslation","Box","ButtonContext","MenuButton","useOdysseyDesignTokens","Heading5","Paragraph","Support","ChevronDownIcon","ChevronUpIcon","MoreIcon","jsx","_jsx","jsxs","_jsxs","CARD_IMAGE_SIZE","CARD_IMAGE_SIZE_COMPACT","cardVariantValues","StyledAccessoryContainer","shouldForwardProp","prop","odysseyDesignTokens","variant","display","flexDirection","alignItems","gap","Spacing2","height","StyledImageContainer","hasMenuButtonChildren","maxHeight","marginBlockEnd","Spacing5","paddingRight","StyledMenuButtonContainer","position","right","Spacing3","top","Spacing4","StyledCardInnerContainer","StyledCardImageAndContentContainer","centerContent","StyledCardContent","Spacing1","StyledCardChildrenContainer","marginBlockStart","StyledAccessoryPlaceholder","_IconButton","visibility","buttonProviderValue","isFullWidth","DataCard","Accessory","AccessoryProp","button","children","description","image","menuButtonChildren","onClick","overline","renderDetailPanel","row","title","t","isDetailPanelOpen","setIsDetailPanelOpen","ExpansionToggle","_Tooltip","disabled","cardContent","countDefinedProps","props","filter","undefined","length","shouldCenterContent","Boolean","component","color","_CardActions","Provider","value","_Card","className","role","_CardActionArea","endIcon","ariaLabel","buttonVariant","menuAlignment","size","tooltipText","MemoizedDataCard","displayName"],"sources":["../../../../src/labs/DataView/DataCard.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n MouseEventHandler,\n ReactElement,\n memo,\n useMemo,\n ReactNode,\n useState,\n} from \"react\";\nimport {\n IconButton as MuiIconButton,\n Card as MuiCard,\n CardActions as MuiCardActions,\n CardActionArea as MuiCardActionArea,\n Tooltip as MuiTooltip,\n} from \"@mui/material\";\nimport styled from \"@emotion/styled\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Box } from \"../../Box.js\";\nimport {\n Button,\n ButtonContext,\n MenuButton,\n MenuButtonProps,\n} from \"../../Buttons/index.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Heading5, Paragraph, Support } from \"../../Typography.js\";\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n MoreIcon,\n} from \"../../icons.generated/index.js\";\nimport { CardLayoutProps } from \"./componentTypes.js\";\nimport { MRT_RowData } from \"material-react-table\";\n\nexport const CARD_IMAGE_SIZE = \"64px\";\nexport const CARD_IMAGE_SIZE_COMPACT = \"48px\";\n\nexport const cardVariantValues = [\"tile\", \"stack\", \"compact\"] as const;\n\nexport type DataCardProps<TData extends MRT_RowData> = {\n children?: ReactNode;\n description?: string;\n image?: ReactElement;\n overline?: string;\n renderDetailPanel?: CardLayoutProps<TData>[\"renderDetailPanel\"];\n row: TData;\n title?: string;\n variant?: (typeof cardVariantValues)[number];\n} & (\n | {\n Accessory?: never;\n button?: never;\n menuButtonChildren?: never;\n onClick: MouseEventHandler;\n }\n | {\n Accessory?: ReactNode;\n button?: ReactElement<typeof Button>;\n menuButtonChildren?: MenuButtonProps[\"children\"];\n onClick?: never;\n }\n);\n\ntype DataCardComponent = (<TData extends MRT_RowData>(\n props: DataCardProps<TData>,\n) => JSX.Element) & {\n displayName?: string;\n};\n\nconst StyledAccessoryContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"variant\",\n})<{\n odysseyDesignTokens: DesignTokens;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, variant }) => ({\n display: \"flex\",\n flexDirection: variant === \"compact\" ? \"row\" : \"column\",\n alignItems: \"center\",\n gap: odysseyDesignTokens.Spacing2,\n height: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : \"auto\",\n}));\n\nconst StyledImageContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"hasMenuButtonChildren\" &&\n prop !== \"variant\",\n})<{\n odysseyDesignTokens: DesignTokens;\n hasMenuButtonChildren: boolean;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, hasMenuButtonChildren, variant }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n height: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : CARD_IMAGE_SIZE,\n maxHeight: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : CARD_IMAGE_SIZE,\n marginBlockEnd: variant === \"tile\" ? odysseyDesignTokens.Spacing5 : 0,\n paddingRight: hasMenuButtonChildren ? odysseyDesignTokens.Spacing5 : 0,\n}));\n\nconst StyledMenuButtonContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, variant }) => ({\n position: \"absolute\",\n right: odysseyDesignTokens.Spacing3,\n top:\n variant === \"compact\"\n ? odysseyDesignTokens.Spacing4\n : odysseyDesignTokens.Spacing3,\n height: variant === \"compact\" ? CARD_IMAGE_SIZE_COMPACT : \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n}));\n\nconst StyledCardInnerContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing3,\n}));\n\nconst StyledCardImageAndContentContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"variant\" && prop !== \"centerContent\",\n})<{ variant: (typeof cardVariantValues)[number]; centerContent: boolean }>(\n ({ variant, centerContent }) => ({\n display: \"flex\",\n flexDirection: variant === \"tile\" ? \"column\" : \"row\",\n alignItems: centerContent ? \"center\" : \"flex-start\",\n }),\n);\n\nconst StyledCardContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"variant\",\n})<{\n odysseyDesignTokens: DesignTokens;\n variant: (typeof cardVariantValues)[number];\n}>(({ odysseyDesignTokens, variant }) => ({\n \"& > .MuiTypography-h5:not(:last-child)\": {\n marginBlockEnd: `${variant === \"compact\" ? odysseyDesignTokens.Spacing1 : odysseyDesignTokens.Spacing3} !important`,\n },\n \"& > *:last-child\": {\n marginBlockEnd: 0,\n },\n}));\n\nconst StyledCardChildrenContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n [\"&:not(:first-child)\"]: {\n marginBlockStart: odysseyDesignTokens.Spacing3,\n },\n}));\n\nconst StyledAccessoryPlaceholder = styled(MuiIconButton)({\n visibility: \"hidden\",\n});\n\nconst buttonProviderValue = { isFullWidth: true };\n\nconst DataCard: DataCardComponent = <TData extends MRT_RowData>({\n Accessory: AccessoryProp,\n button,\n children,\n description,\n image,\n menuButtonChildren,\n onClick,\n overline,\n renderDetailPanel,\n row,\n title,\n variant = \"tile\",\n}: DataCardProps<TData>) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const [isDetailPanelOpen, setIsDetailPanelOpen] = useState<boolean>(false);\n\n const ExpansionToggle = useMemo(() => {\n return renderDetailPanel?.({ row }) ? (\n <MuiTooltip\n title={\n isDetailPanelOpen\n ? t(\"table.rowexpansion.collapse\")\n : t(\"table.rowexpansion.expand\")\n }\n >\n <MuiIconButton\n children={isDetailPanelOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={() => setIsDetailPanelOpen(!isDetailPanelOpen)}\n aria-label={\n isDetailPanelOpen\n ? t(\"table.rowexpansion.collapse\")\n : t(\"table.rowexpansion.expand\")\n }\n />\n </MuiTooltip>\n ) : (\n <StyledAccessoryPlaceholder disabled>\n <ChevronDownIcon />\n </StyledAccessoryPlaceholder>\n );\n }, [isDetailPanelOpen, renderDetailPanel, row, t]);\n\n const Accessory = useMemo(() => {\n return (\n <StyledAccessoryContainer\n odysseyDesignTokens={odysseyDesignTokens}\n variant={variant}\n >\n {AccessoryProp}\n {renderDetailPanel && ExpansionToggle}\n </StyledAccessoryContainer>\n );\n }, [\n AccessoryProp,\n ExpansionToggle,\n odysseyDesignTokens,\n renderDetailPanel,\n variant,\n ]);\n\n const cardContent = useMemo(() => {\n const countDefinedProps = (\n props: Array<string | ReactNode | undefined>,\n ) => {\n return props.filter((prop) => prop !== undefined).length;\n };\n\n const shouldCenterContent =\n variant === \"compact\" &&\n (!renderDetailPanel || !isDetailPanelOpen) &&\n countDefinedProps([title, description, overline, button, children]) <= 2;\n\n return (\n <StyledCardInnerContainer odysseyDesignTokens={odysseyDesignTokens}>\n {(AccessoryProp || renderDetailPanel) && <Box>{Accessory}</Box>}\n <StyledCardImageAndContentContainer\n variant={variant}\n centerContent={shouldCenterContent}\n >\n {image && (\n <StyledImageContainer\n odysseyDesignTokens={odysseyDesignTokens}\n hasMenuButtonChildren={Boolean(menuButtonChildren)}\n variant={variant}\n >\n {image}\n </StyledImageContainer>\n )}\n\n <StyledCardContent\n odysseyDesignTokens={odysseyDesignTokens}\n variant={variant}\n >\n {overline && <Support component=\"div\">{overline}</Support>}\n {title && <Heading5 component=\"div\">{title}</Heading5>}\n {description && (\n <Paragraph color=\"textSecondary\">{description}</Paragraph>\n )}\n\n {button && (\n <MuiCardActions>\n <ButtonContext.Provider value={buttonProviderValue}>\n {button}\n </ButtonContext.Provider>\n </MuiCardActions>\n )}\n\n {children && (\n <StyledCardChildrenContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {children}\n </StyledCardChildrenContainer>\n )}\n\n {renderDetailPanel && isDetailPanelOpen && (\n <StyledCardChildrenContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {renderDetailPanel({ row })}\n </StyledCardChildrenContainer>\n )}\n </StyledCardContent>\n </StyledCardImageAndContentContainer>\n </StyledCardInnerContainer>\n );\n }, [\n odysseyDesignTokens,\n AccessoryProp,\n renderDetailPanel,\n Accessory,\n variant,\n image,\n menuButtonChildren,\n overline,\n title,\n description,\n button,\n children,\n isDetailPanelOpen,\n row,\n ]);\n\n return (\n <MuiCard\n className={`${onClick ? \"isClickable\" : \"\"} ${Accessory ? \"hasAccessory\" : \"\"} ods-card-${variant}`}\n role=\"listitem\"\n >\n {onClick ? (\n <MuiCardActionArea onClick={onClick}>{cardContent}</MuiCardActionArea>\n ) : (\n cardContent\n )}\n\n {menuButtonChildren && (\n <StyledMenuButtonContainer\n odysseyDesignTokens={odysseyDesignTokens}\n variant={variant}\n >\n <MenuButton\n endIcon={<MoreIcon />}\n ariaLabel={t(\"table.moreactions.arialabel\")}\n buttonVariant=\"floating\"\n menuAlignment=\"right\"\n size=\"small\"\n tooltipText={t(\"table.actions\")}\n >\n {menuButtonChildren}\n </MenuButton>\n </StyledMenuButtonContainer>\n )}\n </MuiCard>\n );\n};\n\nconst MemoizedDataCard = memo(DataCard) as DataCardComponent;\nMemoizedDataCard.displayName = \"DataCard\";\n\nexport { MemoizedDataCard as DataCard };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,7 +32,7 @@ import { Typography } from "../../Typography.js";
|
|
|
32
32
|
import { useOdysseyDesignTokens } from "../../OdysseyDesignTokensContext.js";
|
|
33
33
|
import styled from "@emotion/styled";
|
|
34
34
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
35
|
-
const
|
|
35
|
+
const StyledDataViewContainer = styled("div", {
|
|
36
36
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
37
37
|
})(({
|
|
38
38
|
odysseyDesignTokens
|
|
@@ -41,11 +41,11 @@ const DataViewContainer = styled("div", {
|
|
|
41
41
|
flexDirection: "column",
|
|
42
42
|
gap: odysseyDesignTokens.Spacing4
|
|
43
43
|
}));
|
|
44
|
-
const
|
|
44
|
+
const StyledBulkActionsContainer = styled("div")(() => ({
|
|
45
45
|
display: "flex",
|
|
46
46
|
justifyContent: "space-between"
|
|
47
47
|
}));
|
|
48
|
-
const
|
|
48
|
+
const StyledAdditionalActionsContainer = styled("div", {
|
|
49
49
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
50
50
|
})(({
|
|
51
51
|
odysseyDesignTokens
|
|
@@ -54,7 +54,7 @@ const AdditionalActionsContainer = styled("div", {
|
|
|
54
54
|
justifyContent: "flex-end",
|
|
55
55
|
gap: odysseyDesignTokens.Spacing2
|
|
56
56
|
}));
|
|
57
|
-
const
|
|
57
|
+
const StyledAdditionalActionsInner = styled("div", {
|
|
58
58
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
59
59
|
})(({
|
|
60
60
|
odysseyDesignTokens
|
|
@@ -63,7 +63,7 @@ const AdditionalActionsInner = styled("div", {
|
|
|
63
63
|
alignItems: "center",
|
|
64
64
|
gap: odysseyDesignTokens.Spacing2
|
|
65
65
|
}));
|
|
66
|
-
const
|
|
66
|
+
const StyledMetaTextContainer = styled("div", {
|
|
67
67
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
68
68
|
})(({
|
|
69
69
|
odysseyDesignTokens
|
|
@@ -207,9 +207,9 @@ const DataView = ({
|
|
|
207
207
|
return;
|
|
208
208
|
}, [noResultsPlaceholder, t, isEmpty, isNoResults, emptyPlaceholder]);
|
|
209
209
|
const additionalActions = useMemo(() => {
|
|
210
|
-
return (metaText || currentLayout === "table" && tableLayoutOptions || availableLayouts.length > 1 || additionalActionButton || additionalActionMenuItems) && _jsxs(
|
|
210
|
+
return (metaText || currentLayout === "table" && tableLayoutOptions || availableLayouts.length > 1 || additionalActionButton || additionalActionMenuItems) && _jsxs(StyledAdditionalActionsInner, {
|
|
211
211
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
212
|
-
children: [metaText && _jsx(
|
|
212
|
+
children: [metaText && _jsx(StyledMetaTextContainer, {
|
|
213
213
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
214
214
|
children: _jsx(Typography, {
|
|
215
215
|
color: "textSecondary",
|
|
@@ -251,7 +251,7 @@ const DataView = ({
|
|
|
251
251
|
resultsPerPage: pagination.pageSize,
|
|
252
252
|
page: pagination.pageIndex
|
|
253
253
|
});
|
|
254
|
-
return _jsxs(
|
|
254
|
+
return _jsxs(StyledDataViewContainer, {
|
|
255
255
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
256
256
|
children: [errorMessage && _jsx(Box, {
|
|
257
257
|
children: _jsx(Callout, {
|
|
@@ -266,14 +266,14 @@ const DataView = ({
|
|
|
266
266
|
onChangeFilters: hasFilters ? setFilters : undefined,
|
|
267
267
|
onChangeSearch: hasSearch ? setSearch : undefined,
|
|
268
268
|
searchDelayTime: searchDelayTime
|
|
269
|
-
}), (bulkActionMenuItems || hasRowSelection) && _jsxs(
|
|
269
|
+
}), (bulkActionMenuItems || hasRowSelection) && _jsxs(StyledBulkActionsContainer, {
|
|
270
270
|
children: [_jsx(BulkActionsMenu, {
|
|
271
271
|
data: data,
|
|
272
272
|
menuItems: bulkActionMenuItems,
|
|
273
273
|
rowSelection: rowSelection,
|
|
274
274
|
setRowSelection: setRowSelection
|
|
275
275
|
}), !shouldShowFilters && additionalActions]
|
|
276
|
-
}), !shouldShowFilters && !bulkActionMenuItems && !hasRowSelection && additionalActions && _jsx(
|
|
276
|
+
}), !shouldShowFilters && !bulkActionMenuItems && !hasRowSelection && additionalActions && _jsx(StyledAdditionalActionsContainer, {
|
|
277
277
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
278
278
|
children: additionalActions
|
|
279
279
|
}), currentLayout === "table" && tableLayoutOptions && _jsx(TableLayoutContent, {
|