import * as React from 'react';
import classnames from 'classnames';
import { injectIntl, IntlShape } from 'react-intl';
import SignIcon from '@box/blueprint-web-assets/icons/Medium/Sign';
import { IconIconBlue, Size5 } from '@box/blueprint-web-assets/tokens/tokens';
import { Tooltip as BPTooltip } from '@box/blueprint-web';
import BoxSign28 from '../../icon/logo/BoxSign28';
import Sign16 from '../../icon/fill/Sign16';
import PlainButton, { PlainButtonProps } from '../../components/plain-button';
// @ts-ignore Module is written in Flow
import TargetedClickThroughGuideTooltip from '../../features/targeting/TargetedClickThroughGuideTooltip';
import Tooltip, { TooltipPosition } from '../../components/tooltip';
import { useFeatureConfig } from '../common/feature-checking';
// @ts-ignore Module is written in Flow
import messages from './messages';
import './SidebarNavSignButton.scss';
export type Props = PlainButtonProps & {
blockedReason?: string;
isDropdownOpen: boolean;
intl: IntlShape;
targetingApi?: {
canShow: boolean;
onClose: () => void;
onComplete: () => void;
onShow: () => void;
};
};
export const PlaceholderTooltip = ({ children }: { children: React.ReactNode }) => children;
export function SidebarNavSignButton({ blockedReason, intl, isDropdownOpen, targetingApi, ...rest }: Props) {
const isSignDisabled = !!blockedReason;
const isTargeted = targetingApi?.canShow;
const FtuxTooltip = !isSignDisabled && isTargeted ? TargetedClickThroughGuideTooltip : PlaceholderTooltip;
const label = intl.formatMessage(messages.boxSignRequest);
const buttonClassName = classnames('bcs-SidebarNavSignButton', { 'bdl-is-disabled': isSignDisabled });
const { enabled: isPreviewModernizationEnabled } = useFeatureConfig('previewModernization');
let tooltipMessage = label;
switch (blockedReason) {
case 'shield-download':
case 'shared-link':
case 'shield-sign':
tooltipMessage = intl.formatMessage(messages.boxSignSecurityBlockedTooltip);
break;
case 'watermark':
tooltipMessage = intl.formatMessage(messages.boxSignWatermarkBlockedTooltip);
break;
default:
}
const renderButtonWithTooltip = () => {
// Use Blueprint tooltip when modernization is enabled
if (isPreviewModernizationEnabled) {
const modernizedButton = (
);
if (isTargeted) {
return modernizedButton;
}
return (
{/* Workaround to attach BP tooltip to legacy button, remove span when buttons are migrated to BP */}
{modernizedButton}
);
}
// Use legacy tooltip by default
return (
);
};
return (
targetingApi}
>
{renderButtonWithTooltip()}
);
}
export default injectIntl(SidebarNavSignButton);