Skip to content

Commit

Permalink
refactor(preview): use signConfig from primary props
Browse files Browse the repository at this point in the history
  • Loading branch information
diogostavares committed Jan 14, 2025
1 parent 6f979d2 commit f54b7ad
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 51 deletions.
2 changes: 0 additions & 2 deletions i18n/en-US.properties
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,6 @@ be.contentSidebar.boxSignRequestSignature = Request Signature
be.contentSidebar.boxSignSecurityBlockedTooltip = This action is unavailable due to a security policy.
# One of the dropdown options that opens a Box Sign sign myself experience
be.contentSidebar.boxSignSignMyself = Sign Myself
# label for button that opens a Box Sign signature fulfillment experience
be.contentSidebar.boxSignSignature = Sign
# Tooltip text for when Box Sign is blocked due to an item being watermarked
be.contentSidebar.boxSignWatermarkBlockedTooltip = This action is unavailable, because the file is watermarked.
# title for when editing an existing approval task
Expand Down
4 changes: 4 additions & 0 deletions src/elements/content-sidebar/ContentSidebar.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import type { DetailsSidebarProps } from './DetailsSidebar';
import type { DocGenSidebarProps } from './DocGenSidebar/DocGenSidebar';
import type { MetadataSidebarProps } from './MetadataSidebar';
import type { VersionsSidebarProps } from './versions';
import type { SignSideBarProps } from './SidebarNavSign';
import type { WithLoggerProps } from '../../common/types/logging';
import type { ElementsXhrError, RequestOptions, ErrorContextProps } from '../../common/types/api';
import type { MetadataEditor } from '../../common/types/metadata';
Expand Down Expand Up @@ -84,6 +85,7 @@ type Props = {
responseInterceptor?: Function,
sharedLink?: string,
sharedLinkPassword?: string,
signSidebarProps: SignSideBarProps,
token: Token,
versionsSidebarProps: VersionsSidebarProps,
} & ErrorContextProps &
Expand Down Expand Up @@ -364,6 +366,7 @@ class ContentSidebar extends React.Component<Props, State> {
onVersionChange,
onVersionHistoryClick,
versionsSidebarProps,
signSidebarProps,
}: Props = this.props;
const { file, isLoading, metadataEditors }: State = this.state;
const initialPath = defaultView.charAt(0) === '/' ? defaultView : `/${defaultView}`;
Expand Down Expand Up @@ -405,6 +408,7 @@ class ContentSidebar extends React.Component<Props, State> {
onVersionChange={onVersionChange}
onVersionHistoryClick={onVersionHistoryClick}
versionsSidebarProps={versionsSidebarProps}
signSidebarProps={signSidebarProps}
wrappedComponentRef={ref => {
this.sidebarRef = ref;
}}
Expand Down
4 changes: 4 additions & 0 deletions src/elements/content-sidebar/Sidebar.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import type { VersionsSidebarProps } from './versions';
import type { AdditionalSidebarTab } from './flowTypes';
import type { MetadataEditor } from '../../common/types/metadata';
import type { BoxItem, User } from '../../common/types/core';
import type { SignSideBarProps } from './SidebarNavSign';
import type { Errors } from '../common/flowTypes';
import { SIDEBAR_VIEW_DOCGEN } from '../../constants';
import API from '../../api';
Expand Down Expand Up @@ -66,6 +67,7 @@ type Props = {
onVersionChange?: Function,
onVersionHistoryClick?: Function,
versionsSidebarProps: VersionsSidebarProps,
signSidebarProps: SignSideBarProps,
};

type State = {
Expand Down Expand Up @@ -305,6 +307,7 @@ class Sidebar extends React.Component<Props, State> {
onAnnotationSelect,
onVersionChange,
versionsSidebarProps,
signSidebarProps,
}: Props = this.props;
const isOpen = this.isOpen();
const hasBoxAI = SidebarUtils.canHaveBoxAISidebar(this.props);
Expand Down Expand Up @@ -339,6 +342,7 @@ class Sidebar extends React.Component<Props, State> {
hasMetadata={hasMetadata}
hasSkills={hasSkills}
hasDocGen={docGenSidebarProps.isDocGenTemplate}
signSideBarProps={signSidebarProps}
isOpen={isOpen}
onPanelChange={this.handlePanelChange}
/>
Expand Down
7 changes: 5 additions & 2 deletions src/elements/content-sidebar/SidebarNav.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import {
import { useFeatureConfig } from '../common/feature-checking';
import type { NavigateOptions, AdditionalSidebarTab } from './flowTypes';
import './SidebarNav.scss';
import type { SignSideBarProps } from './SidebarNavSign';

type Props = {
additionalTabs?: Array<AdditionalSidebarTab>,
Expand All @@ -49,6 +50,7 @@ type Props = {
isOpen?: boolean,
onNavigate?: (SyntheticEvent<>, NavigateOptions) => void,
onPanelChange?: (name: string, isInitialState: boolean) => void,
signSideBarProps: SignSideBarProps,
};

const SidebarNav = ({
Expand All @@ -66,8 +68,9 @@ const SidebarNav = ({
isOpen,
onNavigate,
onPanelChange = noop,
signSideBarProps,
}: Props) => {
const { enabled: hasBoxSign } = useFeatureConfig('boxSign');
const { enabled: hasBoxSign } = signSideBarProps || {};
const { disabledTooltip: boxAIDisabledTooltip, showOnlyNavButton: showOnlyBoxAINavButton } =
useFeatureConfig('boxai.sidebar');

Expand Down Expand Up @@ -159,7 +162,7 @@ const SidebarNav = ({

{hasBoxSign && (
<div className="bcs-SidebarNav-secondary">
<SidebarNavSign />
<SidebarNavSign {...signSideBarProps} />
</div>
)}

Expand Down
18 changes: 12 additions & 6 deletions src/elements/content-sidebar/SidebarNavSign.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import * as React from 'react';
import { FormattedMessage } from 'react-intl';

// @ts-ignore Module is written in Flow
import { useFeatureConfig } from '../common/feature-checking';
// @ts-ignore Module is written in Flow
import { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';

Expand All @@ -17,21 +15,29 @@ import { Menu, MenuItem } from '../../components/menu';
import messages from './messages';

import './SidebarNavSign.scss';
// @ts-ignore Module is written in Flow
import type { TargetingApi } from '../../features/targeting/types';

export interface SignSideBarProps {
blockedReason: string;
enabled: boolean;
onClick: () => void;
onClickSignMyself: () => void;
targetingApi: TargetingApi | null;
}

export function SidebarNavSign() {
export function SidebarNavSign(signSideBarProps: SignSideBarProps) {
const {
blockedReason: boxSignBlockedReason,
onClick: onBoxClickRequestSignature,
onClickSignMyself: onBoxClickSignMyself,
status: boxSignStatus,
targetingApi: boxSignTargetingApi,
} = useFeatureConfig('boxSign');
} = signSideBarProps;

return (
<DropdownMenu isResponsive constrainToWindow isRightAligned>
<SidebarNavSignButton
blockedReason={boxSignBlockedReason}
status={boxSignStatus}
targetingApi={boxSignTargetingApi}
data-resin-target={SIDEBAR_NAV_TARGETS.SIGN}
/>
Expand Down
6 changes: 3 additions & 3 deletions src/elements/content-sidebar/SidebarNavSignButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ export type Props = PlainButtonProps & {

export const PlaceholderTooltip = ({ children }: { children: React.ReactNode }) => children;

export function SidebarNavSignButton({ blockedReason, intl, status, targetingApi, ...rest }: Props) {
export function SidebarNavSignButton({ blockedReason, intl, targetingApi, ...rest }: Props) {
const isSignDisabled = !!blockedReason;
const isTargeted = targetingApi && targetingApi.canShow;
const isTargeted = targetingApi?.canShow;
const FtuxTooltip = !isSignDisabled && isTargeted ? TargetedClickThroughGuideTooltip : PlaceholderTooltip;
const label = intl.formatMessage(status === 'active' ? messages.boxSignSignature : messages.boxSignRequest);
const label = intl.formatMessage(messages.boxSignRequest);
const buttonClassName = classnames('bcs-SidebarNavSignButton', { 'bdl-is-disabled': isSignDisabled });

let tooltipMessage = label;
Expand Down
12 changes: 4 additions & 8 deletions src/elements/content-sidebar/__tests__/SidebarNav.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,19 +166,15 @@ describe('elements/content-sidebar/SidebarNav', () => {
});

test('should render the Box Sign entry point if its feature is enabled', () => {
const features = {
boxSign: {
const props = {
signSideBarProps: {
enabled: true,
onClick: () => {},
},
};
const wrapper = getWrapper({}, 'activity', features);
expect(wrapper.exists(SidebarNavSignButton)).toBe(true);
});
const wrapper = getWrapper(props);

test('should not render the Box Sign entry point if its feature is not enabled', () => {
const wrapper = getWrapper();
expect(wrapper.exists(SidebarNavSignButton)).toBe(false);
expect(wrapper.exists(SidebarNavSignButton)).toBe(true);
});
test('should render docgen tab', () => {
const props = {
Expand Down
27 changes: 11 additions & 16 deletions src/elements/content-sidebar/__tests__/SidebarNavSign.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ describe('elements/content-sidebar/SidebarNavSign', () => {
const onClickRequestSignature = jest.fn();
const onClickSignMyself = jest.fn();

const renderComponent = (props = {}, features = {}) =>
render(<SidebarNavSign {...props} />, {
wrapperProps: { features },
});
const defaultSignSideBarProps = {
blockedReason: '',
enabled: true,
onClick: onClickRequestSignature,
onClickSignMyself,
targetingApi: null,
};

const renderComponent = () => render(<SidebarNavSign {...defaultSignSideBarProps} />, {});

test('should render sign button', async () => {
renderComponent();
Expand All @@ -29,12 +34,7 @@ describe('elements/content-sidebar/SidebarNavSign', () => {
});

test('should call correct handler when request signature option is clicked', async () => {
const features = {
boxSign: {
onClick: onClickRequestSignature,
},
};
renderComponent({}, features);
renderComponent();

await userEvent.click(screen.getByRole('button', { name: 'Request Signature' }));
await userEvent.click(screen.getByRole('menuitem', { name: 'Request Signature' }));
Expand All @@ -43,12 +43,7 @@ describe('elements/content-sidebar/SidebarNavSign', () => {
});

test('should call correct handler when sign myself option is clicked', async () => {
const features = {
boxSign: {
onClickSignMyself,
},
};
renderComponent({}, features);
renderComponent();

await userEvent.click(screen.getByRole('button', { name: 'Request Signature' }));
await userEvent.click(screen.getByRole('menuitem', { name: 'Sign Myself' }));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,11 @@ import Tooltip from '../../../components/tooltip';
describe('elements/content-sidebar/SidebarNavSignButton', () => {
const getWrapper = (props = {}) => shallow(<SidebarNavSignButton {...props} />).dive();

test.each`
status | label
${undefined} | ${'Request Signature'}
${'random'} | ${'Request Signature'}
${'active'} | ${'Sign'}
`('should render the correct label based on the current signature status', ({ label, status }) => {
const wrapper = getWrapper({ status });
test('should render the correct label', () => {
const wrapper = getWrapper();

expect(wrapper.find(Tooltip).prop('text')).toBe(label);
expect(wrapper.find(PlainButton).prop('aria-label')).toBe(label);
expect(wrapper.find(Tooltip).prop('text')).toBe('Request Signature');
expect(wrapper.find(PlainButton).prop('aria-label')).toBe('Request Signature');
expect(wrapper.exists(BoxSign28)).toBe(true);
});

Expand Down
5 changes: 0 additions & 5 deletions src/elements/content-sidebar/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,6 @@ const messages = defineMessages({
defaultMessage: 'Sign Myself',
description: 'One of the dropdown options that opens a Box Sign sign myself experience',
},
boxSignSignature: {
id: 'be.contentSidebar.boxSignSignature',
defaultMessage: 'Sign',
description: 'label for button that opens a Box Sign signature fulfillment experience',
},
boxSignSecurityBlockedTooltip: {
defaultMessage: 'This action is unavailable due to a security policy.',
description: 'Tooltip text for when Box Sign is blocked due to a security policy',
Expand Down

0 comments on commit f54b7ad

Please sign in to comment.