MenuTrigger

A menu trigger is a wrapper around the menu together with a trigger element. A menu displays a list of options and actions which a user can choose from.

Installyarn add @diallink-corp/convergo-react-menu
Version4.1.2
Usageimport {MenuTrigger} from '@diallink-corp/convergo-react-menu'

Example

A menu can be rendered by using the MenuTrigger component, in combination with the Menu component.

function Example() {
  const handleAction = (action) => {
    alert(action);
  }

  return (
    <MenuTrigger>
      <Button>Actions</Button>
      <Menu onAction={(action) => handleAction(action)}>
        <Item key='reply' textValue='Reply'>
          <Icon name='PencilIcon' variant='outline' />
          <Text>Reply</Text>
        </Item>
        <MenuDialogTrigger isUnavailable>
          <Item key='replyAll' textValue='Reply all'>
            <Icon name='BoltIcon' variant='solid' />
            <Text>Reply All</Text>
          </Item>
          <Dialog>
            <Header>
              <Heading>Upgrad required to unlock this feature</Heading>
            </Header>
            <Content>
              <Paragraph>
                Please upgrade your plan to unlock this feature. 
                Lorem ipsum dolorem sit amet. Lorem ipsum dolorem 
                sit amet. Lorem ipsum dolorem sit amet. Lorem ipsum 
                dolorem sit amet. Lorem ipsum dolorem sit amet. Lorem 
                ipsum dolorem sit amet. 
              </Paragraph>
            </Content>
          </Dialog>
        </MenuDialogTrigger>
        <Item key='delete' textValue='Delete'>
          <Icon name='XMarkIcon' variant='outline' />
          <Text>Delete</Text>
        </Item>
      </Menu>
    </MenuTrigger>
  )
}
function Example() {
  const handleAction = (action) => {
    alert(action);
  };

  return (
    <MenuTrigger>
      <Button>Actions</Button>
      <Menu onAction={(action) => handleAction(action)}>
        <Item key="reply" textValue="Reply">
          <Icon name="PencilIcon" variant="outline" />
          <Text>Reply</Text>
        </Item>
        <MenuDialogTrigger isUnavailable>
          <Item key="replyAll" textValue="Reply all">
            <Icon name="BoltIcon" variant="solid" />
            <Text>Reply All</Text>
          </Item>
          <Dialog>
            <Header>
              <Heading>
                Upgrad required to unlock this feature
              </Heading>
            </Header>
            <Content>
              <Paragraph>
                Please upgrade your plan to unlock this
                feature. Lorem ipsum dolorem sit amet. Lorem
                ipsum dolorem sit amet. Lorem ipsum dolorem
                sit amet. Lorem ipsum dolorem sit amet.
                Lorem ipsum dolorem sit amet. Lorem ipsum
                dolorem sit amet.
              </Paragraph>
            </Content>
          </Dialog>
        </MenuDialogTrigger>
        <Item key="delete" textValue="Delete">
          <Icon name="XMarkIcon" variant="outline" />
          <Text>Delete</Text>
        </Item>
      </Menu>
    </MenuTrigger>
  );
}
function Example() {
  const handleAction = (
    action
  ) => {
    alert(action);
  };

  return (
    <MenuTrigger>
      <Button>
        Actions
      </Button>
      <Menu
        onAction={(
          action
        ) =>
          handleAction(
            action
          )}
      >
        <Item
          key="reply"
          textValue="Reply"
        >
          <Icon
            name="PencilIcon"
            variant="outline"
          />
          <Text>
            Reply
          </Text>
        </Item>
        <MenuDialogTrigger
          isUnavailable
        >
          <Item
            key="replyAll"
            textValue="Reply all"
          >
            <Icon
              name="BoltIcon"
              variant="solid"
            />
            <Text>
              Reply All
            </Text>
          </Item>
          <Dialog>
            <Header>
              <Heading>
                Upgrad
                required
                to unlock
                this
                feature
              </Heading>
            </Header>
            <Content>
              <Paragraph>
                Please
                upgrade
                your plan
                to unlock
                this
                feature.
                Lorem
                ipsum
                dolorem
                sit amet.
                Lorem
                ipsum
                dolorem
                sit amet.
                Lorem
                ipsum
                dolorem
                sit amet.
                Lorem
                ipsum
                dolorem
                sit amet.
                Lorem
                ipsum
                dolorem
                sit amet.
                Lorem
                ipsum
                dolorem
                sit amet.
              </Paragraph>
            </Content>
          </Dialog>
        </MenuDialogTrigger>
        <Item
          key="delete"
          textValue="Delete"
        >
          <Icon
            name="XMarkIcon"
            variant="outline"
          />
          <Text>
            Delete
          </Text>
        </Item>
      </Menu>
    </MenuTrigger>
  );
}

The menu supports splitting its content into sections. Each section can have a title and a list of items.

<MenuTrigger direction="start" align="start">
  <Button>Actions</Button>
  <Menu>
    <Section title='Replying'>
      <Item key='reply' textValue='Reply'>
        <Icon name='PencilIcon' variant='outline' />
        <Text>Reply</Text>
      </Item>
      <Item key='replyAll' textValue='Reply All'>
        <Icon name='BoltIcon' variant='solid' />
        <Text>Reply All</Text>
      </Item>
    </Section>
    <Section title='Other'>
      <Item key='delete' textValue='Delete'>
        <Icon name='XMarkIcon' variant='outline' />
        <Text>Delete</Text>
      </Item>
    </Section>
  </Menu>
</MenuTrigger>
<MenuTrigger direction="start" align="start">
  <Button>Actions</Button>
  <Menu>
    <Section title='Replying'>
      <Item key='reply' textValue='Reply'>
        <Icon name='PencilIcon' variant='outline' />
        <Text>Reply</Text>
      </Item>
      <Item key='replyAll' textValue='Reply All'>
        <Icon name='BoltIcon' variant='solid' />
        <Text>Reply All</Text>
      </Item>
    </Section>
    <Section title='Other'>
      <Item key='delete' textValue='Delete'>
        <Icon name='XMarkIcon' variant='outline' />
        <Text>Delete</Text>
      </Item>
    </Section>
  </Menu>
</MenuTrigger>
<MenuTrigger
  direction="start"
  align="start"
>
  <Button>
    Actions
  </Button>
  <Menu>
    <Section title="Replying">
      <Item
        key="reply"
        textValue="Reply"
      >
        <Icon
          name="PencilIcon"
          variant="outline"
        />
        <Text>
          Reply
        </Text>
      </Item>
      <Item
        key="replyAll"
        textValue="Reply All"
      >
        <Icon
          name="BoltIcon"
          variant="solid"
        />
        <Text>
          Reply All
        </Text>
      </Item>
    </Section>
    <Section title="Other">
      <Item
        key="delete"
        textValue="Delete"
      >
        <Icon
          name="XMarkIcon"
          variant="outline"
        />
        <Text>
          Delete
        </Text>
      </Item>
    </Section>
  </Menu>
</MenuTrigger>

The menu is by default aligned to the bottom of the trigger component. If the content of the menu does not have enough space to the bottom, the menu will automatically open to the top. However, this behaviour can be controlled directly with the direction and align prop.

<MenuTrigger direction="start" align="start">
  <Button>Actions</Button>
  <Menu>
    <Section title='Replying'>
      <Item key='reply' textValue='Reply'>
        <Icon name='PencilIcon' variant='outline' />
        <Text>Reply</Text>
      </Item>
      <Item key='replyAll' textValue='Reply All'>
        <Icon name='BoltIcon' variant='solid' />
        <Text>Reply All</Text>
      </Item>
    </Section>
    <Section title='Other'>
      <Item key='delete' textValue='Delete'>
        <Icon name='XMarkIcon' variant='outline' />
        <Text>Delete</Text>
      </Item>
    </Section>
  </Menu>
</MenuTrigger>
<MenuTrigger direction="start" align="start">
  <Button>Actions</Button>
  <Menu>
    <Section title='Replying'>
      <Item key='reply' textValue='Reply'>
        <Icon name='PencilIcon' variant='outline' />
        <Text>Reply</Text>
      </Item>
      <Item key='replyAll' textValue='Reply All'>
        <Icon name='BoltIcon' variant='solid' />
        <Text>Reply All</Text>
      </Item>
    </Section>
    <Section title='Other'>
      <Item key='delete' textValue='Delete'>
        <Icon name='XMarkIcon' variant='outline' />
        <Text>Delete</Text>
      </Item>
    </Section>
  </Menu>
</MenuTrigger>
<MenuTrigger
  direction="start"
  align="start"
>
  <Button>
    Actions
  </Button>
  <Menu>
    <Section title="Replying">
      <Item
        key="reply"
        textValue="Reply"
      >
        <Icon
          name="PencilIcon"
          variant="outline"
        />
        <Text>
          Reply
        </Text>
      </Item>
      <Item
        key="replyAll"
        textValue="Reply All"
      >
        <Icon
          name="BoltIcon"
          variant="solid"
        />
        <Text>
          Reply All
        </Text>
      </Item>
    </Section>
    <Section title="Other">
      <Item
        key="delete"
        textValue="Delete"
      >
        <Icon
          name="XMarkIcon"
          variant="outline"
        />
        <Text>
          Delete
        </Text>
      </Item>
    </Section>
  </Menu>
</MenuTrigger>