// @flow import * as React from 'react'; import classNames from 'classnames'; import { FormattedMessage } from 'react-intl'; import DropdownMenu, { MenuToggle } from '../../components/dropdown-menu'; import { Menu, SelectMenuItem } from '../../components/menu'; import PlainButton from '../../components/plain-button'; import Tooltip from '../../components/tooltip'; import type { ItemType } from '../../common/types/core'; import SharedLinkAccessLabel from './SharedLinkAccessLabel'; import { ANYONE_WITH_LINK, ANYONE_IN_COMPANY, PEOPLE_IN_ITEM } from './constants'; import messages from './messages'; import type { accessLevelType, allowedAccessLevelsType } from './flowTypes'; const accessLevels = [ANYONE_WITH_LINK, ANYONE_IN_COMPANY, PEOPLE_IN_ITEM]; type Props = { accessLevel?: accessLevelType, allowedAccessLevels: allowedAccessLevelsType, changeAccessLevel: (newAccessLevel: accessLevelType) => Promise<{ accessLevel: accessLevelType }>, classificationName?: string, enterpriseName?: string, itemType: ItemType, onDismissTooltip: () => void, submitting: boolean, tooltipContent: React.Node, trackingProps: { onChangeSharedLinkAccessLevel?: Function, onSharedLinkAccessMenuOpen?: Function, sharedLinkAccessMenuButtonProps?: Object, }, }; class SharedLinkAccessMenu extends React.Component { static defaultProps = { allowedAccessLevels: {}, trackingProps: {}, }; onChangeAccessLevel = (newAccessLevel: accessLevelType) => { const { accessLevel, changeAccessLevel, trackingProps } = this.props; const { onChangeSharedLinkAccessLevel } = trackingProps; if (accessLevel !== newAccessLevel) { changeAccessLevel(newAccessLevel); if (onChangeSharedLinkAccessLevel) { onChangeSharedLinkAccessLevel(newAccessLevel); } } }; renderMenu() { const { accessLevel, allowedAccessLevels, classificationName, enterpriseName, itemType } = this.props; return ( {accessLevels.map(level => { const isDisabled = !allowedAccessLevels[level]; const isDisabledByClassification = isDisabled && classificationName; let menuItem = null; if (!isDisabled || isDisabledByClassification) { menuItem = ( this.onChangeAccessLevel(level)} > ); } if (menuItem && isDisabledByClassification) { return ( } > {menuItem} ); } return menuItem; })} ); } render() { const { accessLevel, enterpriseName, itemType, onDismissTooltip, submitting, tooltipContent, trackingProps, } = this.props; const { onSharedLinkAccessMenuOpen, sharedLinkAccessMenuButtonProps } = trackingProps; return ( {this.renderMenu()} ); } } export default SharedLinkAccessMenu;