@okta/odyssey-react-mui 1.14.8 → 1.15.8
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/CHANGELOG.md +50 -0
- package/dist/Autocomplete.js +84 -2
- package/dist/Autocomplete.js.map +1 -1
- package/dist/Breadcrumbs.js +10 -1
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/Button.js +2 -2
- package/dist/Button.js.map +1 -1
- package/dist/Callout.js.map +1 -1
- package/dist/Checkbox.js +8 -4
- package/dist/Checkbox.js.map +1 -1
- package/dist/CheckboxGroup.js.map +1 -1
- package/dist/DataTable/DataTable.js +37 -9
- package/dist/DataTable/DataTable.js.map +1 -1
- package/dist/MenuButton.js.map +1 -1
- package/dist/RadioGroup.js.map +1 -1
- package/dist/Select.js +3 -4
- package/dist/Select.js.map +1 -1
- package/dist/Tabs.js +21 -0
- package/dist/Tabs.js.map +1 -1
- package/dist/Tile.js +14 -18
- package/dist/Tile.js.map +1 -1
- package/dist/labs/DataFilters.js +98 -97
- package/dist/labs/DataFilters.js.map +1 -1
- package/dist/labs/index.js +0 -1
- package/dist/labs/index.js.map +1 -1
- package/dist/src/Autocomplete.d.ts +7 -1
- package/dist/src/Autocomplete.d.ts.map +1 -1
- package/dist/src/Breadcrumbs.d.ts.map +1 -1
- package/dist/src/Button.d.ts +31 -15
- package/dist/src/Button.d.ts.map +1 -1
- package/dist/src/Callout.d.ts +1 -1
- package/dist/src/Checkbox.d.ts.map +1 -1
- package/dist/src/CheckboxGroup.d.ts +2 -3
- package/dist/src/CheckboxGroup.d.ts.map +1 -1
- package/dist/src/DataTable/DataTable.d.ts +6 -2
- package/dist/src/DataTable/DataTable.d.ts.map +1 -1
- package/dist/src/MenuButton.d.ts +3 -4
- package/dist/src/MenuButton.d.ts.map +1 -1
- package/dist/src/RadioGroup.d.ts +3 -3
- package/dist/src/RadioGroup.d.ts.map +1 -1
- package/dist/src/Select.d.ts.map +1 -1
- package/dist/src/Tabs.d.ts.map +1 -1
- package/dist/src/Tile.d.ts.map +1 -1
- package/dist/src/labs/DataFilters.d.ts +9 -1
- package/dist/src/labs/DataFilters.d.ts.map +1 -1
- package/dist/src/labs/index.d.ts +0 -1
- package/dist/src/labs/index.d.ts.map +1 -1
- package/dist/src/theme/components.d.ts.map +1 -1
- package/dist/theme/components.js +15 -7
- package/dist/theme/components.js.map +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/package.json +9 -7
- package/src/Autocomplete.tsx +124 -1
- package/src/Breadcrumbs.tsx +9 -1
- package/src/Button.tsx +32 -16
- package/src/Callout.tsx +1 -1
- package/src/Checkbox.tsx +4 -3
- package/src/CheckboxGroup.tsx +2 -5
- package/src/DataTable/DataTable.tsx +75 -13
- package/src/MenuButton.tsx +11 -21
- package/src/RadioGroup.tsx +3 -3
- package/src/Select.tsx +5 -2
- package/src/Tabs.tsx +40 -1
- package/src/Tile.tsx +12 -14
- package/src/labs/DataFilters.tsx +211 -177
- package/src/labs/index.ts +0 -1
- package/src/theme/components.tsx +16 -7
- package/dist/labs/VirtualizedAutocomplete.js +0 -134
- package/dist/labs/VirtualizedAutocomplete.js.map +0 -1
- package/dist/src/labs/VirtualizedAutocomplete.d.ts +0 -90
- package/dist/src/labs/VirtualizedAutocomplete.d.ts.map +0 -1
- package/src/labs/VirtualizedAutocomplete.tsx +0 -365
package/dist/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["memo","useCallback","useEffect","useState","TabContext","MuiTabContext","TabList","MuiTabList","TabPanel","MuiTabPanel","Badge","Box","useOdysseyDesignTokens","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TabLabel","label","notificationCount","notificationCountMax","tabState","value","odysseyDesignTokens","children","undefined","sx","marginInlineStart","Spacing2","badgeContent","badgeContentMax","type","Tabs","ariaLabel","initialValue","tabs","onChange","onChangeProp","setTabState","event","renderTab","tab","index","testId","isDisabled","startIcon","_Tab","disabled","icon","tabIndex","toString","variant","map","MemoizedTabs","displayName"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-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 ReactElement,\n ReactNode,\n memo,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n TabContext as MuiTabContext,\n TabList as MuiTabList,\n TabListProps as MuiTabListProps,\n TabPanel as MuiTabPanel,\n} from \"@mui/lab\";\nimport { Tab as MuiTab } from \"@mui/material\";\n\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Box } from \"./Box\";\nimport { HtmlProps } from \"./HtmlProps\";\nimport { useOdysseyDesignTokens } from \"./OdysseyDesignTokensContext\";\n\nexport type TabItemProps = {\n /**\n * The content of the Tab itself\n */\n children: ReactNode;\n /**\n * If `true`, the TabItem is disabled\n */\n isDisabled?: boolean;\n /**\n * The label text for the TabItem\n */\n label: string;\n /**\n * An optional icon to display at the start of the TabItem\n */\n startIcon?: ReactElement;\n /**\n * The value associated with the TabItem\n */\n value?: string;\n} & {\n notificationCount?: BadgeProps[\"badgeContent\"];\n notificationCountMax?: BadgeProps[\"badgeContentMax\"];\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nexport type TabsProps = {\n /**\n * @deprecated please use the `value` prop instead\n * When `value` is provided, `initialValue` isn't used.\n */\n initialValue?: string;\n /**\n * The TabItems to be included in the Tabs group\n */\n tabs: TabItemProps[];\n /**\n * Identifier for the selected tab.\n */\n value?: string;\n /**\n * Callback fired when the active tab is changed.\n */\n onChange?: MuiTabListProps[\"onChange\"];\n};\n\nconst TabLabel = ({\n label,\n notificationCount,\n notificationCountMax,\n tabState,\n value,\n}: Pick<\n TabItemProps,\n \"label\" | \"notificationCount\" | \"notificationCountMax\" | \"value\"\n> & {\n tabState: string;\n}) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n return (\n <>\n {label}\n {notificationCount !== undefined && notificationCount > 0 && (\n <Box\n sx={{\n marginInlineStart: notificationCount\n ? odysseyDesignTokens.Spacing2\n : 0,\n }}\n >\n <Badge\n badgeContent={notificationCount}\n badgeContentMax={notificationCountMax}\n type={value === tabState ? \"attention\" : \"default\"}\n />\n </Box>\n )}\n </>\n );\n};\n\nconst Tabs = ({\n ariaLabel,\n initialValue,\n tabs,\n value,\n onChange: onChangeProp,\n}: TabsProps & Pick<HtmlProps, \"ariaLabel\">) => {\n const [tabState, setTabState] = useState(initialValue ?? value ?? \"0\");\n\n const onChange = useCallback<NonNullable<MuiTabListProps[\"onChange\"]>>(\n (event, value: string) => {\n setTabState(value);\n onChangeProp?.(event, value);\n },\n [onChangeProp],\n );\n\n useEffect(() => {\n if (value !== undefined) {\n setTabState(value);\n }\n }, [value]);\n\n const renderTab = useCallback(\n (tab: TabItemProps, index: number) => {\n const {\n testId,\n isDisabled,\n label,\n startIcon,\n value,\n notificationCount,\n notificationCountMax,\n } = tab;\n\n return (\n <MuiTab\n data-se={testId}\n disabled={isDisabled}\n icon={startIcon}\n tabIndex={0}\n label={\n <TabLabel\n label={label}\n notificationCount={notificationCount}\n notificationCountMax={notificationCountMax}\n tabState={tabState}\n value={value}\n />\n }\n value={value ? value : index.toString()}\n key={value ? value : index.toString()}\n />\n );\n },\n [tabState],\n );\n\n return (\n <MuiTabContext value={tabState}>\n <MuiTabList\n onChange={onChange}\n aria-label={ariaLabel}\n variant=\"scrollable\"\n >\n {tabs.map((tab, index) => renderTab(tab, index))}\n </MuiTabList>\n {tabs.map((tab, index) => (\n <MuiTabPanel\n value={tab.value ? tab.value : index.toString()}\n key={tab.value ? tab.value : index.toString()}\n >\n {tab.children}\n </MuiTabPanel>\n ))}\n </MuiTabContext>\n );\n};\n\nconst MemoizedTabs = memo(Tabs);\nMemoizedTabs.displayName = \"Tabs\";\n\nexport { MemoizedTabs as Tabs };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["memo","useCallback","useEffect","useState","TabContext","MuiTabContext","TabList","MuiTabList","TabPanel","MuiTabPanel","Badge","Box","useOdysseyDesignTokens","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TabLabel","label","notificationCount","notificationCountMax","tabState","value","odysseyDesignTokens","children","undefined","sx","marginInlineStart","Spacing2","badgeContent","badgeContentMax","type","Tabs","ariaLabel","initialValue","tabs","onChange","onChangeProp","setTabState","scrollButtons","setScrollButtons","event","animationFrame","cleanup","cancelAnimationFrame","document","removeEventListener","refreshScrollButtons","requestAnimationFrame","addEventListener","renderTab","tab","index","testId","isDisabled","startIcon","_Tab","disabled","icon","tabIndex","toString","variant","map","MemoizedTabs","displayName"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-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 ReactElement,\n ReactNode,\n memo,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n TabContext as MuiTabContext,\n TabList as MuiTabList,\n TabListProps as MuiTabListProps,\n TabPanel as MuiTabPanel,\n} from \"@mui/lab\";\nimport { Tab as MuiTab } from \"@mui/material\";\n\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Box } from \"./Box\";\nimport { HtmlProps } from \"./HtmlProps\";\nimport { useOdysseyDesignTokens } from \"./OdysseyDesignTokensContext\";\n\nexport type TabItemProps = {\n /**\n * The content of the Tab itself\n */\n children: ReactNode;\n /**\n * If `true`, the TabItem is disabled\n */\n isDisabled?: boolean;\n /**\n * The label text for the TabItem\n */\n label: string;\n /**\n * An optional icon to display at the start of the TabItem\n */\n startIcon?: ReactElement;\n /**\n * The value associated with the TabItem\n */\n value?: string;\n} & {\n notificationCount?: BadgeProps[\"badgeContent\"];\n notificationCountMax?: BadgeProps[\"badgeContentMax\"];\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nexport type TabsProps = {\n /**\n * @deprecated please use the `value` prop instead\n * When `value` is provided, `initialValue` isn't used.\n */\n initialValue?: string;\n /**\n * The TabItems to be included in the Tabs group\n */\n tabs: TabItemProps[];\n /**\n * Identifier for the selected tab.\n */\n value?: string;\n /**\n * Callback fired when the active tab is changed.\n */\n onChange?: MuiTabListProps[\"onChange\"];\n};\n\nconst TabLabel = ({\n label,\n notificationCount,\n notificationCountMax,\n tabState,\n value,\n}: Pick<\n TabItemProps,\n \"label\" | \"notificationCount\" | \"notificationCountMax\" | \"value\"\n> & {\n tabState: string;\n}) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n return (\n <>\n {label}\n {notificationCount !== undefined && notificationCount > 0 && (\n <Box\n sx={{\n marginInlineStart: notificationCount\n ? odysseyDesignTokens.Spacing2\n : 0,\n }}\n >\n <Badge\n badgeContent={notificationCount}\n badgeContentMax={notificationCountMax}\n type={value === tabState ? \"attention\" : \"default\"}\n />\n </Box>\n )}\n </>\n );\n};\n\nconst Tabs = ({\n ariaLabel,\n initialValue,\n tabs,\n value,\n onChange: onChangeProp,\n}: TabsProps & Pick<HtmlProps, \"ariaLabel\">) => {\n const [tabState, setTabState] = useState(initialValue ?? value ?? \"0\");\n /*\n The scrollButtons prop is initially set to `false`.\n It's then reset to `auto` when the document is visible.\n This prevents a rare bug where scroll buttons appear\n when the component is rendered while hidden and the\n screen is wide enough to not need scroll buttons.\n */\n const [scrollButtons, setScrollButtons] =\n useState<MuiTabListProps[\"scrollButtons\"]>(false);\n const onChange = useCallback<NonNullable<MuiTabListProps[\"onChange\"]>>(\n (event, value: string) => {\n setTabState(value);\n onChangeProp?.(event, value);\n },\n [onChangeProp],\n );\n\n useEffect(() => {\n if (value !== undefined) {\n setTabState(value);\n }\n }, [value]);\n\n // listen for visibility change to reset scroll buttons override\n useEffect(() => {\n // keep track of animation frame to cancel when needed\n let animationFrame: number;\n\n // called when unmounted or scroll buttons is reset\n const cleanup = () => {\n cancelAnimationFrame(animationFrame);\n document.removeEventListener(\"visibilitychange\", refreshScrollButtons);\n };\n\n // Reset the scroll buttons override when the document becomes visible.\n // If called, then the document is hidden because the event listener\n // is only registered if the document is hidden\n function refreshScrollButtons() {\n animationFrame = requestAnimationFrame(() => {\n cleanup();\n setScrollButtons(\"auto\");\n });\n }\n\n // don't override scroll buttons if it's already set to \"auto\"\n if (scrollButtons !== \"auto\") {\n document.addEventListener(\"visibilitychange\", refreshScrollButtons);\n }\n return () => {\n cleanup();\n };\n }, [scrollButtons]);\n\n const renderTab = useCallback(\n (tab: TabItemProps, index: number) => {\n const {\n testId,\n isDisabled,\n label,\n startIcon,\n value,\n notificationCount,\n notificationCountMax,\n } = tab;\n\n return (\n <MuiTab\n data-se={testId}\n disabled={isDisabled}\n icon={startIcon}\n tabIndex={0}\n label={\n <TabLabel\n label={label}\n notificationCount={notificationCount}\n notificationCountMax={notificationCountMax}\n tabState={tabState}\n value={value}\n />\n }\n value={value ? value : index.toString()}\n key={value ? value : index.toString()}\n />\n );\n },\n [tabState],\n );\n\n return (\n <MuiTabContext value={tabState}>\n <MuiTabList\n onChange={onChange}\n aria-label={ariaLabel}\n variant=\"scrollable\"\n scrollButtons={scrollButtons}\n >\n {tabs.map((tab, index) => renderTab(tab, index))}\n </MuiTabList>\n {tabs.map((tab, index) => (\n <MuiTabPanel\n value={tab.value ? tab.value : index.toString()}\n key={tab.value ? tab.value : index.toString()}\n >\n {tab.children}\n </MuiTabPanel>\n ))}\n </MuiTabContext>\n );\n};\n\nconst MemoizedTabs = memo(Tabs);\nMemoizedTabs.displayName = \"Tabs\";\n\nexport { MemoizedTabs as Tabs };\n"],"mappings":"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"}
|
package/dist/Tile.js
CHANGED
|
@@ -26,29 +26,25 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
26
26
|
export const TILE_IMAGE_HEIGHT = "64px";
|
|
27
27
|
const ImageContainer = styled("div", {
|
|
28
28
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "hasMenuButtonChildren"
|
|
29
|
-
})
|
|
30
|
-
display: flex;
|
|
31
|
-
align-items: flex-start;
|
|
32
|
-
max-height: ${TILE_IMAGE_HEIGHT};
|
|
33
|
-
margin-block-end: ${({
|
|
34
|
-
odysseyDesignTokens
|
|
35
|
-
}) => odysseyDesignTokens.Spacing5};
|
|
36
|
-
padding-right: ${({
|
|
29
|
+
})(({
|
|
37
30
|
odysseyDesignTokens,
|
|
38
31
|
hasMenuButtonChildren
|
|
39
|
-
}) =>
|
|
40
|
-
|
|
32
|
+
}) => ({
|
|
33
|
+
display: "flex",
|
|
34
|
+
alignItems: "flex-start",
|
|
35
|
+
maxHeight: `${TILE_IMAGE_HEIGHT}`,
|
|
36
|
+
marginBlockEnd: odysseyDesignTokens.Spacing5,
|
|
37
|
+
paddingRight: hasMenuButtonChildren ? odysseyDesignTokens.Spacing5 : 0
|
|
38
|
+
}));
|
|
41
39
|
const MenuButtonContainer = styled("div", {
|
|
42
40
|
shouldForwardProp: prop => prop !== "odysseyDesignTokens"
|
|
43
|
-
})
|
|
44
|
-
position: absolute;
|
|
45
|
-
right: ${({
|
|
46
|
-
odysseyDesignTokens
|
|
47
|
-
}) => odysseyDesignTokens.Spacing3};
|
|
48
|
-
top: ${({
|
|
41
|
+
})(({
|
|
49
42
|
odysseyDesignTokens
|
|
50
|
-
}) =>
|
|
51
|
-
|
|
43
|
+
}) => ({
|
|
44
|
+
position: "absolute",
|
|
45
|
+
right: odysseyDesignTokens.Spacing3,
|
|
46
|
+
top: odysseyDesignTokens.Spacing3
|
|
47
|
+
}));
|
|
52
48
|
const buttonProviderValue = {
|
|
53
49
|
isFullWidth: true
|
|
54
50
|
};
|
package/dist/Tile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tile.js","names":["memo","useMemo","styled","ButtonContext","MoreIcon","MenuButton","useOdysseyDesignTokens","Heading5","Paragraph","Support","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TILE_IMAGE_HEIGHT","ImageContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing5","
|
|
1
|
+
{"version":3,"file":"Tile.js","names":["memo","useMemo","styled","ButtonContext","MoreIcon","MenuButton","useOdysseyDesignTokens","Heading5","Paragraph","Support","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TILE_IMAGE_HEIGHT","ImageContainer","shouldForwardProp","prop","odysseyDesignTokens","hasMenuButtonChildren","display","alignItems","maxHeight","marginBlockEnd","Spacing5","paddingRight","MenuButtonContainer","position","right","Spacing3","top","buttonProviderValue","isFullWidth","Tile","button","description","image","menuButtonChildren","onClick","overline","title","cardContent","children","Boolean","component","color","_CardActions","Provider","value","_Card","className","_CardActionArea","endIcon","ariaLabel","buttonVariant","menuAlignment","size","tooltipText","MemoizedTile","displayName"],"sources":["../src/Tile.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-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 { MouseEventHandler, ReactElement, memo, useMemo } from \"react\";\n\nimport {\n Card as MuiCard,\n CardActions as MuiCardActions,\n CardActionArea as MuiCardActionArea,\n} from \"@mui/material\";\nimport styled from \"@emotion/styled\";\n\nimport { Button } from \"./Button\";\nimport { ButtonContext } from \"./ButtonContext\";\nimport { MoreIcon } from \"./icons.generated\";\nimport { MenuButton, MenuButtonProps } from \"./MenuButton\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"./OdysseyDesignTokensContext\";\nimport { Heading5, Paragraph, Support } from \"./Typography\";\n\nexport const TILE_IMAGE_HEIGHT = \"64px\";\n\nexport type TileProps = {\n /**\n * The body text of the tile. The consumer is responsible for truncating this string.\n */\n description?: string;\n /**\n * An optional image or icon at the top of the tile, preferably as an <img> or <svg> element.\n */\n image?: ReactElement; // Icon or image\n /**\n * The \"eyebrow\" text above the tile title.\n */\n overline?: string;\n /**\n * The heading of the tile.\n */\n title?: string;\n} & ( // You can't have actions and onClick at the same time\n | {\n /**\n * The event handler for when the user clicks the tile.\n */\n onClick: MouseEventHandler;\n button?: never;\n menuButtonChildren?: never;\n }\n | {\n onClick?: never;\n /**\n * The main action button for the tile. Not valid if the tile itself is clickable.\n */\n button?: ReactElement<typeof Button>;\n /**\n * Menu items to be rendered in the tile's optional menu button. If this prop is undefined, the\n * menu button will not be shown. Not valid if the tile itself is clickable.\n */\n menuButtonChildren?: MenuButtonProps[\"children\"];\n }\n);\n\nconst ImageContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"hasMenuButtonChildren\",\n})<{\n odysseyDesignTokens: DesignTokens;\n hasMenuButtonChildren: boolean;\n}>(({ odysseyDesignTokens, hasMenuButtonChildren }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n maxHeight: `${TILE_IMAGE_HEIGHT}`,\n marginBlockEnd: odysseyDesignTokens.Spacing5,\n paddingRight: hasMenuButtonChildren ? odysseyDesignTokens.Spacing5 : 0,\n}));\n\nconst MenuButtonContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n position: \"absolute\",\n right: odysseyDesignTokens.Spacing3,\n top: odysseyDesignTokens.Spacing3,\n}));\n\nconst buttonProviderValue = { isFullWidth: true };\n\nconst Tile = ({\n button,\n description,\n image,\n menuButtonChildren,\n onClick,\n overline,\n title,\n}: TileProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const cardContent = useMemo(\n () => (\n <>\n {image && (\n <ImageContainer\n odysseyDesignTokens={odysseyDesignTokens}\n hasMenuButtonChildren={Boolean(menuButtonChildren)}\n >\n {image}\n </ImageContainer>\n )}\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 ),\n [\n button,\n description,\n image,\n menuButtonChildren,\n overline,\n title,\n odysseyDesignTokens,\n ],\n );\n\n return (\n <MuiCard className={onClick ? \"isClickable\" : \"\"}>\n {onClick ? (\n <MuiCardActionArea onClick={onClick}>{cardContent}</MuiCardActionArea>\n ) : (\n cardContent\n )}\n\n {menuButtonChildren && (\n <MenuButtonContainer odysseyDesignTokens={odysseyDesignTokens}>\n <MenuButton\n endIcon={<MoreIcon />}\n ariaLabel=\"Tile menu\"\n buttonVariant=\"floating\"\n menuAlignment=\"right\"\n size=\"small\"\n tooltipText=\"Actions\"\n >\n {menuButtonChildren}\n </MenuButton>\n </MenuButtonContainer>\n )}\n </MuiCard>\n );\n};\n\nconst MemoizedTile = memo(Tile);\nMemoizedTile.displayName = \"Tile\";\n\nexport { MemoizedTile as Tile };\n"],"mappings":"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"}
|
package/dist/labs/DataFilters.js
CHANGED
|
@@ -153,15 +153,14 @@ const DataFilters = ({
|
|
|
153
153
|
}));
|
|
154
154
|
setFilters(updatedFilters);
|
|
155
155
|
}, [inputValues, filtersProp]);
|
|
156
|
-
const AutocompleteOuterContainer = styled
|
|
157
|
-
display: flex
|
|
158
|
-
gap: 2
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
`;
|
|
156
|
+
const AutocompleteOuterContainer = styled("div")({
|
|
157
|
+
display: "flex",
|
|
158
|
+
gap: "2",
|
|
159
|
+
alignItems: "flex-end"
|
|
160
|
+
});
|
|
161
|
+
const AutocompleteInnerContainer = styled("div")({
|
|
162
|
+
width: "100%"
|
|
163
|
+
});
|
|
165
164
|
const filterMenu = useMemo(() => _jsxs(_Fragment, {
|
|
166
165
|
children: [_jsx(Box, {
|
|
167
166
|
children: _jsx(Button, {
|
|
@@ -285,109 +284,111 @@ const DataFilters = ({
|
|
|
285
284
|
padding: 4,
|
|
286
285
|
minWidth: 320
|
|
287
286
|
},
|
|
288
|
-
children:
|
|
287
|
+
children: _jsx("form", {
|
|
289
288
|
onSubmit: ev => {
|
|
290
289
|
ev.preventDefault();
|
|
291
290
|
handleFilterSubmit();
|
|
292
291
|
setIsFilterPopoverOpen(false);
|
|
293
292
|
setIsFiltersMenuOpen(false);
|
|
294
293
|
},
|
|
295
|
-
children:
|
|
296
|
-
children: [
|
|
297
|
-
children: _jsx(
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
label
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
filterId: filterPopoverCurrentFilter.id,
|
|
308
|
-
value: label
|
|
309
|
-
});
|
|
310
|
-
},
|
|
311
|
-
options: autocompleteOptions
|
|
312
|
-
})
|
|
313
|
-
}), _jsx(Button, {
|
|
314
|
-
variant: "primary",
|
|
315
|
-
endIcon: _jsx(CheckIcon, {}),
|
|
316
|
-
type: "submit"
|
|
317
|
-
})]
|
|
318
|
-
}), (filterPopoverCurrentFilter?.variant === "text" || filterPopoverCurrentFilter?.variant === "range") && _jsxs(Box, {
|
|
319
|
-
sx: {
|
|
320
|
-
display: "flex",
|
|
321
|
-
gap: 2,
|
|
322
|
-
alignItems: "flex-end"
|
|
323
|
-
},
|
|
324
|
-
children: [_jsx(Box, {
|
|
325
|
-
sx: {
|
|
326
|
-
width: "100%"
|
|
327
|
-
},
|
|
328
|
-
children: _jsx(TextField, {
|
|
329
|
-
hasInitialFocus: true,
|
|
330
|
-
label: filterPopoverCurrentFilter.label,
|
|
331
|
-
type: filterPopoverCurrentFilter.variant === "range" ? "number" : "text",
|
|
332
|
-
value: inputValues[filterPopoverCurrentFilter.id] ?? "",
|
|
333
|
-
onChange: ev => updateInputValue({
|
|
334
|
-
filterId: filterPopoverCurrentFilter.id,
|
|
335
|
-
value: ev.currentTarget.value
|
|
336
|
-
}),
|
|
337
|
-
endAdornment: inputValues[filterPopoverCurrentFilter.id] && _jsx(_IconButton, {
|
|
338
|
-
size: "small",
|
|
339
|
-
"aria-label": t("filters.filter.clear"),
|
|
340
|
-
onClick: () => {
|
|
294
|
+
children: filterPopoverCurrentFilter?.render ? filterPopoverCurrentFilter.render(updateFilters) : _jsxs(_Fragment, {
|
|
295
|
+
children: [filterPopoverCurrentFilter?.variant === "autocomplete" && filterPopoverCurrentFilter?.options && _jsxs(AutocompleteOuterContainer, {
|
|
296
|
+
children: [_jsx(AutocompleteInnerContainer, {
|
|
297
|
+
children: _jsx(Autocomplete, {
|
|
298
|
+
label: filterPopoverCurrentFilter.label,
|
|
299
|
+
value: inputValues[filterPopoverCurrentFilter.id] ?? "",
|
|
300
|
+
onChange: (_, value) => {
|
|
301
|
+
const label = typeof value === "string" ? getAutoCompleteLabel({
|
|
302
|
+
label: value
|
|
303
|
+
}) : Array.isArray(value) ? getAutoCompleteLabel(value.map(item => typeof item === "string" ? {
|
|
304
|
+
label: item
|
|
305
|
+
} : item)) : value ? getAutoCompleteLabel(value) : "";
|
|
341
306
|
updateInputValue({
|
|
342
307
|
filterId: filterPopoverCurrentFilter.id,
|
|
343
|
-
value:
|
|
344
|
-
});
|
|
345
|
-
updateFilters({
|
|
346
|
-
filterId: filterPopoverCurrentFilter.id,
|
|
347
|
-
value: undefined
|
|
308
|
+
value: label
|
|
348
309
|
});
|
|
349
310
|
},
|
|
350
|
-
|
|
311
|
+
options: autocompleteOptions
|
|
351
312
|
})
|
|
352
|
-
})
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
})
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
313
|
+
}), _jsx(Button, {
|
|
314
|
+
variant: "primary",
|
|
315
|
+
endIcon: _jsx(CheckIcon, {}),
|
|
316
|
+
type: "submit"
|
|
317
|
+
})]
|
|
318
|
+
}), (filterPopoverCurrentFilter?.variant === "text" || filterPopoverCurrentFilter?.variant === "range" || filterPopoverCurrentFilter && filterPopoverCurrentFilter?.variant == undefined) && _jsxs(Box, {
|
|
319
|
+
sx: {
|
|
320
|
+
display: "flex",
|
|
321
|
+
gap: 2,
|
|
322
|
+
alignItems: "flex-end"
|
|
323
|
+
},
|
|
324
|
+
children: [_jsx(Box, {
|
|
325
|
+
sx: {
|
|
326
|
+
width: "100%"
|
|
327
|
+
},
|
|
328
|
+
children: _jsx(TextField, {
|
|
329
|
+
hasInitialFocus: true,
|
|
330
|
+
label: filterPopoverCurrentFilter.label,
|
|
331
|
+
type: filterPopoverCurrentFilter.variant === "range" ? "number" : "text",
|
|
332
|
+
value: inputValues[filterPopoverCurrentFilter.id] ?? "",
|
|
333
|
+
onChange: ev => updateInputValue({
|
|
334
|
+
filterId: filterPopoverCurrentFilter.id,
|
|
335
|
+
value: ev.currentTarget.value
|
|
336
|
+
}),
|
|
337
|
+
endAdornment: inputValues[filterPopoverCurrentFilter.id] && _jsx(_IconButton, {
|
|
338
|
+
size: "small",
|
|
339
|
+
"aria-label": t("filters.filter.clear"),
|
|
340
|
+
onClick: () => {
|
|
341
|
+
updateInputValue({
|
|
342
|
+
filterId: filterPopoverCurrentFilter.id,
|
|
343
|
+
value: undefined
|
|
344
|
+
});
|
|
345
|
+
updateFilters({
|
|
346
|
+
filterId: filterPopoverCurrentFilter.id,
|
|
347
|
+
value: undefined
|
|
348
|
+
});
|
|
349
|
+
},
|
|
350
|
+
children: _jsx(CloseCircleFilledIcon, {})
|
|
351
|
+
})
|
|
352
|
+
})
|
|
353
|
+
}), _jsx(Button, {
|
|
354
|
+
variant: "primary",
|
|
355
|
+
endIcon: _jsx(CheckIcon, {}),
|
|
356
|
+
type: "submit"
|
|
357
|
+
})]
|
|
358
|
+
}), filterPopoverCurrentFilter?.variant === "multi-select" && filterPopoverCurrentFilter?.options && _jsx(CheckboxGroup, {
|
|
359
|
+
label: filterPopoverCurrentFilter.label,
|
|
360
|
+
isRequired: true,
|
|
361
|
+
children: filterPopoverCurrentFilter.options.map(option => _jsx(Checkbox, {
|
|
385
362
|
label: option.label,
|
|
386
363
|
value: option.value,
|
|
387
|
-
|
|
364
|
+
isDefaultChecked: inputValues[filterPopoverCurrentFilter.id]?.includes(option.value) || inputValues[filterPopoverCurrentFilter.id] === undefined,
|
|
365
|
+
onChange: () => handleMultiSelectChange(filterPopoverCurrentFilter.id, option.value, true)
|
|
388
366
|
}, option.value))
|
|
367
|
+
}), filterPopoverCurrentFilter?.variant === "select" && filterPopoverCurrentFilter?.options && _jsxs(RadioGroup, {
|
|
368
|
+
label: filterPopoverCurrentFilter.label,
|
|
369
|
+
onChange: (_, value) => {
|
|
370
|
+
updateInputValue({
|
|
371
|
+
filterId: filterPopoverCurrentFilter.id,
|
|
372
|
+
value
|
|
373
|
+
});
|
|
374
|
+
updateFilters({
|
|
375
|
+
filterId: filterPopoverCurrentFilter.id,
|
|
376
|
+
value
|
|
377
|
+
});
|
|
378
|
+
},
|
|
379
|
+
children: [_jsx(Radio, {
|
|
380
|
+
label: t("filters.filter.any"),
|
|
381
|
+
value: "",
|
|
382
|
+
isChecked: !inputValues[filterPopoverCurrentFilter.id]
|
|
383
|
+
}), _jsx(_Fragment, {
|
|
384
|
+
children: filterPopoverCurrentFilter.options.map(option => _jsx(Radio, {
|
|
385
|
+
label: option.label,
|
|
386
|
+
value: option.value,
|
|
387
|
+
isChecked: inputValues[filterPopoverCurrentFilter.id] === option.value
|
|
388
|
+
}, option.value))
|
|
389
|
+
})]
|
|
389
390
|
})]
|
|
390
|
-
})
|
|
391
|
+
})
|
|
391
392
|
})
|
|
392
393
|
})
|
|
393
394
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFilters.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","styled","Autocomplete","Box","TagList","Tag","SearchField","Button","CheckIcon","ChevronRightIcon","CloseCircleFilledIcon","FilterIcon","Subordinate","TextField","CheckboxGroup","Checkbox","RadioGroup","Radio","Trans","useTranslation","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DataFilters","onChangeSearch","onChangeFilters","hasSearchSubmitButton","searchDelayTime","defaultSearchTerm","additionalActions","filters","filtersProp","isDisabled","setFilters","t","initialInputValues","reduce","accumulator","filter","id","value","inputValues","setInputValues","searchValue","setSearchValue","activeFilters","isFiltersMenuOpen","setIsFiltersMenuOpen","filtersMenuAnchorElement","setFiltersMenuAnchorElement","isFilterPopoverOpen","setIsFilterPopoverOpen","filterPopoverAnchorElement","setFilterPopoverAnchorElement","filterPopoverCurrentFilter","setFilterPopoverCurrentFilter","menuRef","debouncer","undefined","current","clearTimeout","setTimeout","autocompleteOptions","variant","options","map","option","label","updateInputValue","filterId","updateFilters","updatedFilters","getAutoCompleteLabel","Array","isArray","valueElement","item","Boolean","handleMultiSelectChange","submit","startingValues","find","currentValues","updatedValues","includes","valuesToSave","sort","join","clearAllFilters","updatedInputValues","handleFilterSubmit","AutocompleteOuterContainer","div","AutocompleteInnerContainer","filterMenu","children","ariaLabel","endIcon","onClick","event","currentTarget","_Menu","anchorOrigin","horizontal","vertical","transformOrigin","anchorEl","onClose","open","PaperProps","ref","latestFilterValue","f","_MenuItem","selected","className","sx","display","alignItems","justifyContent","width","minWidth","paddingBlock","paddingInlineStart","marginRight","_Typography","fontWeight","marginBlockEnd","component","length","i18nKey","values","toLowerCase","count","gap","maxWidth","_Popover","elevation","marginLeft","marginTop","ev","menuRect","getBoundingClientRect","clickInsideMenu","clientX","left","right","clientY","top","bottom","padding","onSubmit","preventDefault","onChange","_","type","hasInitialFocus","endAdornment","_IconButton","size","isRequired","isDefaultChecked","isChecked","style","placeholder","onClear","target","borderTopWidth","borderTopColor","borderTopStyle","paddingTop","onRemove","MemoizedDataFilters","displayName"],"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 styled from \"@emotion/styled\";\nimport { Autocomplete } from \"../Autocomplete\";\nimport { Box } from \"../Box\";\nimport { TagList } from \"../TagList\";\nimport { Tag } from \"../Tag\";\nimport { SearchField } from \"../SearchField\";\nimport { Button } from \"../Button\";\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 {\n CheckIcon,\n ChevronRightIcon,\n CloseCircleFilledIcon,\n FilterIcon,\n} from \"../icons.generated\";\nimport { Subordinate } from \"../Typography\";\nimport { TextField } from \"../TextField\";\nimport { CheckboxGroup } from \"../CheckboxGroup\";\nimport { Checkbox } from \"../Checkbox\";\nimport { RadioGroup } from \"../RadioGroup\";\nimport { Radio } from \"../Radio\";\nimport { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nexport type DataFilterValue = string | string[] | undefined;\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: string;\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?: Array<{ label: string; value: string }>;\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\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\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 const activeFilters = useMemo(() => {\n return filters.filter(\n (filter) => typeof filter.value === \"string\" && filter.value,\n );\n }, [filters]);\n const [isFiltersMenuOpen, setIsFiltersMenuOpen] = useState<boolean>(false);\n const [filtersMenuAnchorElement, setFiltersMenuAnchorElement] = useState<\n HTMLElement | undefined\n >();\n const [isFilterPopoverOpen, setIsFilterPopoverOpen] =\n useState<boolean>(false);\n const [filterPopoverAnchorElement, setFilterPopoverAnchorElement] = useState<\n HTMLElement | undefined\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 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 // Check if filterPopoverCurrentFilter and filterPopoverCurrentFilter.options are defined\n if (\n filterPopoverCurrentFilter?.variant === \"autocomplete\" &&\n filterPopoverCurrentFilter?.options\n ) {\n return filterPopoverCurrentFilter.options.map((option) => ({\n label: option.label,\n }));\n }\n\n // if filterPopoverCurrentFilter or filterPopoverCurrentFilter.options is undefined\n return [];\n }, [filterPopoverCurrentFilter]);\n\n const updateInputValue = useCallback(\n ({ filterId, value }: { filterId: string; value: DataFilterValue }) => {\n setInputValues({ ...inputValues, [filterId]: value });\n },\n [inputValues],\n );\n\n const updateFilters = useCallback(\n ({ filterId, value }: { filterId: string; value: DataFilterValue }) => {\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: filter.id === filterId ? value : inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n },\n [inputValues, filtersProp],\n );\n\n const getAutoCompleteLabel = <\n Value extends { label: string } | Array<{ label: string }>,\n >(\n value: Value,\n ) => {\n if (Array.isArray(value)) {\n // Iterating to find the label\n return value\n .map((valueElement) => {\n if (typeof valueElement === \"string\") {\n return undefined;\n }\n return valueElement.label;\n })\n .filter((item): item is string => Boolean(item));\n }\n\n return value?.label;\n };\n\n const handleMultiSelectChange = useCallback(\n (filterId: string, value: string, submit: boolean = false) => {\n const startingValues = filtersProp\n .find((filter) => filter.id === filterId)\n ?.options?.map((option) => option.value);\n const currentValues = (inputValues[filterId] ??\n startingValues) as string[];\n const updatedValues = currentValues.includes(value)\n ? currentValues.filter((item: string) => item !== value)\n : [...currentValues, value];\n const valuesToSave =\n updatedValues.sort().join() === startingValues?.sort().join()\n ? undefined\n : updatedValues;\n\n setInputValues({ ...inputValues, [filterId]: valuesToSave });\n\n if (submit) {\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: filter.id === filterId ? valuesToSave : inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n }\n },\n [inputValues, filtersProp],\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 AutocompleteOuterContainer = styled.div`\n display: flex;\n gap: 2;\n align-items: center;\n alignitems: \"flex-end\";\n `;\n const AutocompleteInnerContainer = styled.div`\n width: \"100%\";\n `;\n const filterMenu = useMemo(\n () => (\n <>\n <Box>\n <Button\n aria-controls={isFiltersMenuOpen ? \"filters-menu\" : undefined}\n aria-expanded={isFiltersMenuOpen ? \"true\" : undefined}\n aria-haspopup=\"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 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 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 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\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 >\n {/* Autocomplete */}\n {filterPopoverCurrentFilter?.variant === \"autocomplete\" &&\n filterPopoverCurrentFilter?.options && (\n <AutocompleteOuterContainer>\n <AutocompleteInnerContainer>\n <Autocomplete\n label={filterPopoverCurrentFilter.label}\n value={\n inputValues[filterPopoverCurrentFilter.id] ?? \"\"\n }\n onChange={(_, value) => {\n const label =\n typeof value === \"string\"\n ? getAutoCompleteLabel({ label: value })\n : Array.isArray(value)\n ? getAutoCompleteLabel(\n value.map((item) =>\n typeof item === \"string\"\n ? { label: item }\n : item,\n ),\n )\n : value\n ? getAutoCompleteLabel(value)\n : \"\";\n\n updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value: label,\n });\n }}\n options={autocompleteOptions}\n />\n </AutocompleteInnerContainer>\n <Button\n variant=\"primary\"\n endIcon={<CheckIcon />}\n type=\"submit\"\n />\n </AutocompleteOuterContainer>\n )}\n {/* Text or Number */}\n {(filterPopoverCurrentFilter?.variant === \"text\" ||\n filterPopoverCurrentFilter?.variant === \"range\") && (\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[filterPopoverCurrentFilter.id] && (\n <MuiIconButton\n size=\"small\"\n aria-label={t(\"filters.filter.clear\")}\n onClick={() => {\n updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value: undefined,\n });\n\n updateFilters({\n filterId: 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 />\n </Box>\n )}\n\n {/* Checkbox */}\n {filterPopoverCurrentFilter?.variant === \"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 <Checkbox\n key={option.value}\n label={option.label}\n value={option.value}\n isDefaultChecked={\n inputValues[\n filterPopoverCurrentFilter.id\n ]?.includes(option.value) ||\n inputValues[filterPopoverCurrentFilter.id] ===\n undefined\n }\n onChange={() =>\n handleMultiSelectChange(\n filterPopoverCurrentFilter.id,\n option.value,\n true,\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 updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value,\n });\n\n updateFilters({\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: { label: string; value: string }) => (\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 </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 <TagList>\n {activeFilters.map((filter) => (\n <Tag\n key={filter.label}\n label={`${filter.label}: ${filter.value}`}\n onRemove={() => {\n updateInputValue({\n filterId: filter.id,\n value: undefined,\n });\n\n updateFilters({\n filterId: filter.id,\n value: undefined,\n });\n }}\n />\n ))}\n </TagList>\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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"}
|
|
1
|
+
{"version":3,"file":"DataFilters.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","styled","Autocomplete","Box","TagList","Tag","SearchField","Button","CheckIcon","ChevronRightIcon","CloseCircleFilledIcon","FilterIcon","Subordinate","TextField","CheckboxGroup","Checkbox","RadioGroup","Radio","Trans","useTranslation","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DataFilters","onChangeSearch","onChangeFilters","hasSearchSubmitButton","searchDelayTime","defaultSearchTerm","additionalActions","filters","filtersProp","isDisabled","setFilters","t","initialInputValues","reduce","accumulator","filter","id","value","inputValues","setInputValues","searchValue","setSearchValue","activeFilters","isFiltersMenuOpen","setIsFiltersMenuOpen","filtersMenuAnchorElement","setFiltersMenuAnchorElement","isFilterPopoverOpen","setIsFilterPopoverOpen","filterPopoverAnchorElement","setFilterPopoverAnchorElement","filterPopoverCurrentFilter","setFilterPopoverCurrentFilter","menuRef","debouncer","undefined","current","clearTimeout","setTimeout","autocompleteOptions","variant","options","map","option","label","updateInputValue","filterId","updateFilters","updatedFilters","getAutoCompleteLabel","Array","isArray","valueElement","item","Boolean","handleMultiSelectChange","submit","startingValues","find","currentValues","updatedValues","includes","valuesToSave","sort","join","clearAllFilters","updatedInputValues","handleFilterSubmit","AutocompleteOuterContainer","display","gap","alignItems","AutocompleteInnerContainer","width","filterMenu","children","ariaLabel","endIcon","onClick","event","currentTarget","_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","length","i18nKey","values","toLowerCase","count","maxWidth","_Popover","elevation","marginLeft","marginTop","ev","menuRect","getBoundingClientRect","clickInsideMenu","clientX","left","right","clientY","top","bottom","padding","onSubmit","preventDefault","render","onChange","_","type","hasInitialFocus","endAdornment","_IconButton","size","isRequired","isDefaultChecked","isChecked","style","placeholder","onClear","target","borderTopWidth","borderTopColor","borderTopStyle","paddingTop","onRemove","MemoizedDataFilters","displayName"],"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 styled from \"@emotion/styled\";\nimport { Autocomplete } from \"../Autocomplete\";\nimport { Box } from \"../Box\";\nimport { TagList } from \"../TagList\";\nimport { Tag } from \"../Tag\";\nimport { SearchField } from \"../SearchField\";\nimport { Button } from \"../Button\";\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 {\n CheckIcon,\n ChevronRightIcon,\n CloseCircleFilledIcon,\n FilterIcon,\n} from \"../icons.generated\";\nimport { Subordinate } from \"../Typography\";\nimport { TextField } from \"../TextField\";\nimport { CheckboxGroup } from \"../CheckboxGroup\";\nimport { Checkbox } from \"../Checkbox\";\nimport { RadioGroup } from \"../RadioGroup\";\nimport { Radio } from \"../Radio\";\nimport { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nexport type DataFilterValue = string | string[] | undefined;\n\nexport type UpdateFilters = ({\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 * 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?: Array<{ label: string; value: string }>;\n /**\n * A callback which renders a custom filter control\n */\n render?: (updateFilters: UpdateFilters) => 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\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\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 const activeFilters = useMemo(() => {\n return filters.filter(\n (filter) => typeof filter.value === \"string\" && filter.value,\n );\n }, [filters]);\n const [isFiltersMenuOpen, setIsFiltersMenuOpen] = useState<boolean>(false);\n const [filtersMenuAnchorElement, setFiltersMenuAnchorElement] = useState<\n HTMLElement | undefined\n >();\n const [isFilterPopoverOpen, setIsFilterPopoverOpen] =\n useState<boolean>(false);\n const [filterPopoverAnchorElement, setFilterPopoverAnchorElement] = useState<\n HTMLElement | undefined\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 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 // Check if filterPopoverCurrentFilter and filterPopoverCurrentFilter.options are defined\n if (\n filterPopoverCurrentFilter?.variant === \"autocomplete\" &&\n filterPopoverCurrentFilter?.options\n ) {\n return filterPopoverCurrentFilter.options.map((option) => ({\n label: option.label,\n }));\n }\n\n // if filterPopoverCurrentFilter or filterPopoverCurrentFilter.options is undefined\n return [];\n }, [filterPopoverCurrentFilter]);\n\n const updateInputValue = useCallback(\n ({ filterId, value }: { filterId: string; value: DataFilterValue }) => {\n setInputValues({ ...inputValues, [filterId]: value });\n },\n [inputValues],\n );\n\n const updateFilters = useCallback<UpdateFilters>(\n ({ filterId, value }) => {\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: filter.id === filterId ? value : inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n },\n [inputValues, filtersProp],\n );\n\n const getAutoCompleteLabel = <\n Value extends { label: string } | Array<{ label: string }>,\n >(\n value: Value,\n ) => {\n if (Array.isArray(value)) {\n // Iterating to find the label\n return value\n .map((valueElement) => {\n if (typeof valueElement === \"string\") {\n return undefined;\n }\n return valueElement.label;\n })\n .filter((item): item is string => Boolean(item));\n }\n\n return value?.label;\n };\n\n const handleMultiSelectChange = useCallback(\n (filterId: string, value: string, submit: boolean = false) => {\n const startingValues = filtersProp\n .find((filter) => filter.id === filterId)\n ?.options?.map((option) => option.value);\n const currentValues = (inputValues[filterId] ??\n startingValues) as string[];\n const updatedValues = currentValues.includes(value)\n ? currentValues.filter((item: string) => item !== value)\n : [...currentValues, value];\n const valuesToSave =\n updatedValues.sort().join() === startingValues?.sort().join()\n ? undefined\n : updatedValues;\n\n setInputValues({ ...inputValues, [filterId]: valuesToSave });\n\n if (submit) {\n const updatedFilters = filtersProp.map((filter) => ({\n ...filter,\n value: filter.id === filterId ? valuesToSave : inputValues[filter.id],\n }));\n\n setFilters(updatedFilters);\n }\n },\n [inputValues, filtersProp],\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 AutocompleteOuterContainer = styled(\"div\")({\n display: \"flex\",\n gap: \"2\",\n alignItems: \"flex-end\",\n });\n\n const AutocompleteInnerContainer = styled(\"div\")({\n width: \"100%\",\n });\n\n const filterMenu = useMemo(\n () => (\n <>\n <Box>\n <Button\n aria-controls={isFiltersMenuOpen ? \"filters-menu\" : undefined}\n aria-expanded={isFiltersMenuOpen ? \"true\" : undefined}\n aria-haspopup=\"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 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 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 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\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 >\n {filterPopoverCurrentFilter?.render ? (\n filterPopoverCurrentFilter.render(updateFilters)\n ) : (\n <>\n {/* Autocomplete */}\n {filterPopoverCurrentFilter?.variant ===\n \"autocomplete\" &&\n filterPopoverCurrentFilter?.options && (\n <AutocompleteOuterContainer>\n <AutocompleteInnerContainer>\n <Autocomplete\n label={filterPopoverCurrentFilter.label}\n value={\n inputValues[\n filterPopoverCurrentFilter.id\n ] ?? \"\"\n }\n onChange={(_, value) => {\n const label =\n typeof value === \"string\"\n ? getAutoCompleteLabel({ label: value })\n : Array.isArray(value)\n ? getAutoCompleteLabel(\n value.map((item) =>\n typeof item === \"string\"\n ? { label: item }\n : item,\n ),\n )\n : value\n ? getAutoCompleteLabel(value)\n : \"\";\n\n updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value: label,\n });\n }}\n options={autocompleteOptions}\n />\n </AutocompleteInnerContainer>\n <Button\n variant=\"primary\"\n endIcon={<CheckIcon />}\n type=\"submit\"\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 />\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 <Checkbox\n key={option.value}\n label={option.label}\n value={option.value}\n isDefaultChecked={\n inputValues[\n filterPopoverCurrentFilter.id\n ]?.includes(option.value) ||\n inputValues[\n filterPopoverCurrentFilter.id\n ] === undefined\n }\n onChange={() =>\n handleMultiSelectChange(\n filterPopoverCurrentFilter.id,\n option.value,\n true,\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 updateInputValue({\n filterId: filterPopoverCurrentFilter.id,\n value,\n });\n\n updateFilters({\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 <TagList>\n {activeFilters.map((filter) => (\n <Tag\n key={filter.label}\n label={`${filter.label}: ${filter.value}`}\n onRemove={() => {\n updateInputValue({\n filterId: filter.id,\n value: undefined,\n });\n\n updateFilters({\n filterId: filter.id,\n value: undefined,\n });\n }}\n />\n ))}\n </TagList>\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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"}
|