// @flow import React, { Component } from 'react'; import classNames from 'classnames'; import { FormattedMessage } from 'react-intl'; import DropdownMenu, { MenuToggle } from '../../components/dropdown-menu'; import LabelPill from '../../components/label-pill'; import PlainButton from '../../components/plain-button'; import { Menu, SelectMenuItem } from '../../components/menu'; import { VIEW_SIZE_TYPE } from '../../components/media-query/constants'; import withMediaQuery from '../../components/media-query/withMediaQuery'; import type { TargetingApi } from '../targeting/types'; import type { permissionLevelType } from './flowTypes'; import { CAN_EDIT, CAN_VIEW_DOWNLOAD, CAN_VIEW_ONLY } from './constants'; import messages from './messages'; import './SharedLinkPermissionMenu.scss'; type Props = { allowedPermissionLevels: Array, canChangePermissionLevel: boolean, changePermissionLevel: ( newPermissionLevel: permissionLevelType, ) => Promise<{ permissionLevel: permissionLevelType }>, isSharedLinkEditTooltipShown: boolean, permissionLevel?: permissionLevelType, sharedLinkEditTagTargetingApi?: TargetingApi, sharedLinkEditTooltipTargetingApi?: TargetingApi, size: string, submitting: boolean, trackingProps: { onChangeSharedLinkPermissionLevel?: Function, sharedLinkPermissionsMenuButtonProps?: Object, }, }; class SharedLinkPermissionMenu extends Component { static defaultProps = { trackingProps: {}, }; onChangePermissionLevel = (newPermissionLevel: permissionLevelType) => { const { changePermissionLevel, permissionLevel, trackingProps } = this.props; const { onChangeSharedLinkPermissionLevel } = trackingProps; if (permissionLevel !== newPermissionLevel) { changePermissionLevel(newPermissionLevel); if (onChangeSharedLinkPermissionLevel) { onChangeSharedLinkPermissionLevel(newPermissionLevel); } } }; render() { const { allowedPermissionLevels, isSharedLinkEditTooltipShown, permissionLevel, sharedLinkEditTagTargetingApi, sharedLinkEditTooltipTargetingApi, size, submitting, trackingProps, } = this.props; const { sharedLinkPermissionsMenuButtonProps } = trackingProps; const canShowTag = sharedLinkEditTagTargetingApi ? sharedLinkEditTagTargetingApi.canShow : false; const canShowTooltip = sharedLinkEditTooltipTargetingApi ? sharedLinkEditTooltipTargetingApi.canShow : false; if (!permissionLevel) { return null; } const permissionLevels = { [CAN_EDIT]: { label: , }, [CAN_VIEW_DOWNLOAD]: { label: , }, [CAN_VIEW_ONLY]: { label: , }, }; const isRightAligned = size === VIEW_SIZE_TYPE.small || size === VIEW_SIZE_TYPE.medium; return ( { if (allowedPermissionLevels.includes(CAN_EDIT) && canShowTag && sharedLinkEditTagTargetingApi) { sharedLinkEditTagTargetingApi.onComplete(); } }} onMenuOpen={() => { if (allowedPermissionLevels.includes(CAN_EDIT) && canShowTag && sharedLinkEditTagTargetingApi) { sharedLinkEditTagTargetingApi.onShow(); } // complete tooltip FTUX on opening of dropdown menu if (isSharedLinkEditTooltipShown && canShowTooltip && sharedLinkEditTooltipTargetingApi) { sharedLinkEditTooltipTargetingApi.onComplete(); } }} > {permissionLevels[permissionLevel].label} {allowedPermissionLevels.map(level => ( this.onChangePermissionLevel(level)} >
{permissionLevels[level].label} {level === CAN_EDIT && canShowTag && ( )}
))}
); } } const sharedLinkPermissionMenu = withMediaQuery(SharedLinkPermissionMenu); sharedLinkPermissionMenu.displayName = 'SharedLinkPermissionMenu'; export { SharedLinkPermissionMenu as SharedLinkPermissionMenuBase }; export default sharedLinkPermissionMenu;