- "content": "import React, { FC, useCallback } from \"react\";\nimport {\n ArrowDropDownSVGIcon,\n DeleteSVGIcon,\n EditSVGIcon,\n LinkSVGIcon,\n ShareSVGIcon,\n} from \"@react-md/material-icons\";\nimport {\n defaultMenuRenderer,\n DropdownMenu,\n MenuRenderer,\n} from \"@react-md/menu\";\nimport { Sheet, SheetProps } from \"@react-md/sheet\";\nimport { LabelRequiredForA11y, useAppSize } from \"@react-md/utils\";\n\nimport styles from \"./MobileActionSheet.module.scss\";\n\nconst items = [\n { leftAddon: <ShareSVGIcon />, children: \"Share\" },\n { leftAddon: <LinkSVGIcon />, children: \"Get link\" },\n { leftAddon: <EditSVGIcon />, children: \"Edit name\" },\n { leftAddon: <DeleteSVGIcon />, children: \"Delete collection\" },\n];\n\nconst MenuSheet: FC<LabelRequiredForA11y<SheetProps>> = ({\n children,\n ...props\n}) => {\n const { onRequestClose } = props;\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n if (event.target !== event.currentTarget) {\n onRequestClose();\n }\n },\n [onRequestClose]\n );\n\n return (\n <Sheet\n {...props}\n className={styles.sheet}\n onRequestClose={onRequestClose}\n role=\"menu\"\n disableFocusOnMount\n position=\"bottom\"\n onClick={handleClick}\n >\n {children}\n </Sheet>\n );\n};\n\nconst renderSheet: MenuRenderer = ({\n // these props are only required for the `Menu` component, but not within the sheet\n // so we can just extract them and not pass them down\n horizontal: _horizontal,\n controlId: _controlId,\n anchor: _anchor,\n positionOptions: _positionOptions,\n closeOnResize: _closeOnResize,\n closeOnScroll: _closeOnScroll,\n ...props\n}) => <MenuSheet {...props} />;\n\nconst Demo: FC = () => {\n const { isTablet, isLandscape, isDesktop, isLargeDesktop } = useAppSize();\n const sheet = !isDesktop && !isLargeDesktop && !(isTablet && isLandscape);\n return (\n <DropdownMenu\n id=\"dropdown-menu-1\"\n items={items}\n dropdownIcon={<ArrowDropDownSVGIcon />}\n menuRenderer={sheet ? renderSheet : defaultMenuRenderer}\n >\n Dropdown\n </DropdownMenu>\n );\n};\n\nexport default Demo;\n",
0 commit comments