// @flow import React, { Component } from 'react'; import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import PlainButton from '../../components/plain-button'; import DropdownMenu, { MenuToggle } from '../../components/dropdown-menu'; import { Menu, SelectMenuItem } from '../../components/menu'; import Tooltip from '../../components/tooltip'; import { ITEM_TYPE_WEBLINK } from '../../common/constants'; import type { ItemType } from '../../common/types/core'; import getDefaultPermissionLevel from './utils/defaultPermissionLevel'; import InviteePermissionsLabel from './InviteePermissionsLabel'; import messages from './messages'; import type { inviteePermissionType } from './flowTypes'; type Props = { changeInviteePermissionLevel: Function, disabled: boolean, inviteePermissionLevel: string, inviteePermissions: Array, inviteePermissionsButtonProps?: Object, itemType: ItemType, }; class InviteePermissionsMenu extends Component { static defaultProps = { disabled: false, inviteePermissions: [], inviteePermissionsButtonProps: {}, }; onChangeInviteePermissionsLevel = (newInviteePermissionLevel: string) => { const { inviteePermissionLevel, changeInviteePermissionLevel } = this.props; if (inviteePermissionLevel !== newInviteePermissionLevel) { changeInviteePermissionLevel(newInviteePermissionLevel); } }; renderMenu() { const { inviteePermissionLevel, inviteePermissions, itemType } = this.props; const defaultPermissionLevel = getDefaultPermissionLevel(inviteePermissions); const selectedPermissionLevel = inviteePermissionLevel || defaultPermissionLevel; return ( {inviteePermissions.map(level => level.value ? ( this.onChangeInviteePermissionsLevel(level.value)} > ) : null, )} ); } render() { const { inviteePermissions, inviteePermissionsButtonProps, inviteePermissionLevel, disabled, itemType, } = this.props; const defaultPermissionLevel = getDefaultPermissionLevel(inviteePermissions); const selectedPermissionLevel = inviteePermissionLevel || defaultPermissionLevel; const disabledTooltip = itemType === ITEM_TYPE_WEBLINK ? ( ) : ( ); const plainButton = ( {selectedPermissionLevel && ( )} ); const plainButtonWrap = disabled ? (
{plainButton}
) : ( plainButton ); // TODO: `DropdownMenu` doesn't currently handle a scenario where the menu is taller than // the available vertical space. cannot use the constraint props here in short windows. return (
{plainButtonWrap} {this.renderMenu()}
); } } export default InviteePermissionsMenu;