Skip to content
Snippets Groups Projects
Select Git revision
  • ebc8ca717ec4f0c8d5fbe3f2f3513aaaff01aa71
  • main default protected
  • state/ar_working
  • state/last_lisboa_sebi
  • feature/athens
  • feature/lisboa
  • evaluation-lisbon
  • feature/xr
  • feature/evaluation
  • 37-change-camera-controls
  • 4-fix-mouse-capture-for-2d-viewport-controls
  • feature/porto
  • feature/vr
  • feature/AR-marker
  • develop
  • feature/pages
  • feature/refactor-config
17 results

PopoverListButton.tsx

Blame
  • PopoverListButton.tsx 1.18 KiB
    import IconButton from '@mui/material/IconButton';
    import { Fragment, PropsWithChildren, useState } from 'react';
    import List from '@mui/material/List';
    import Popover from '@mui/material/Popover';
    
    export interface PopoverListButtonProps extends PropsWithChildren {
      title: string;
      // renderIcon?: () => JSXEL;
      icon: any;
    }
    
    const PopoverListButton = (props: PopoverListButtonProps) => {
      const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null);
    
      const open = Boolean(buttonElement);
      const id = open ? `${props.title}-popover` : undefined;
    
      return (
        <Fragment>
          <IconButton
            color="inherit"
            onClick={event => setButtonElement(event.currentTarget)}
            title={props.title}
          >
            {
              <props.icon />
            }
          </IconButton>
          <Popover
            id={id}
            open={open}
            anchorEl={buttonElement}
            onClose={() => setButtonElement(null)}
            anchorOrigin={{
              vertical: "bottom",
              horizontal: "left",
            }}
          >
            <List>
              {
                props.children
              }
            </List>
          </Popover>
        </Fragment>
      );
    }
    
    export default PopoverListButton;