box-ui-elements 23.4.0-beta.21 → 23.4.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.js +1 -1
- package/es/components/flyout/OverlayHeader.js +6 -3
- package/es/components/flyout/OverlayHeader.js.map +1 -1
- package/es/elements/common/nav-router/NavRouter.js +7 -3
- package/es/elements/common/nav-router/NavRouter.js.flow +10 -1
- package/es/elements/common/nav-router/NavRouter.js.map +1 -1
- package/es/elements/common/nav-router/types.js.map +1 -1
- package/es/elements/common/nav-router/withNavRouter.js +10 -1
- package/es/elements/common/nav-router/withNavRouter.js.flow +5 -0
- package/es/elements/common/nav-router/withNavRouter.js.map +1 -1
- package/es/elements/common/routing/withRouterAndRef.js +17 -3
- package/es/elements/common/routing/withRouterAndRef.js.flow +11 -3
- package/es/elements/common/routing/withRouterAndRef.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js +22 -13
- package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js.flow +30 -17
- package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js.map +1 -1
- package/es/elements/content-sidebar/ContentSidebar.js +3 -1
- package/es/elements/content-sidebar/ContentSidebar.js.flow +2 -1
- package/es/elements/content-sidebar/ContentSidebar.js.map +1 -1
- package/es/elements/content-sidebar/SidebarNavButton.js +49 -1
- package/es/elements/content-sidebar/SidebarNavButton.js.flow +65 -3
- package/es/elements/content-sidebar/SidebarNavButton.js.map +1 -1
- package/es/elements/content-sidebar/SidebarToggle.js +27 -9
- package/es/elements/content-sidebar/SidebarToggle.js.flow +29 -6
- package/es/elements/content-sidebar/SidebarToggle.js.map +1 -1
- package/es/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.js +12 -1
- package/es/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.js.map +1 -1
- package/es/features/header-flyout/HeaderFlyout.js +6 -3
- package/es/features/header-flyout/HeaderFlyout.js.flow +15 -2
- package/es/features/header-flyout/HeaderFlyout.js.map +1 -1
- package/es/features/header-flyout/styles/HeaderFlyout.scss +2 -0
- package/es/src/components/flyout/OverlayHeader.d.ts +3 -1
- package/es/src/elements/common/nav-router/NavRouter.d.ts +3 -1
- package/es/src/elements/common/nav-router/types.d.ts +2 -0
- package/package.json +1 -1
- package/src/components/flyout/OverlayHeader.tsx +7 -3
- package/src/components/flyout/__tests__/OverlayHeader.test.js +25 -0
- package/src/elements/common/nav-router/NavRouter.js.flow +10 -1
- package/src/elements/common/nav-router/NavRouter.tsx +9 -3
- package/src/elements/common/nav-router/__tests__/withNavRouter.test.tsx +34 -20
- package/src/elements/common/nav-router/types.ts +2 -0
- package/src/elements/common/nav-router/withNavRouter.js.flow +5 -0
- package/src/elements/common/nav-router/withNavRouter.tsx +9 -1
- package/src/elements/common/routing/__tests__/withRouterAndRef.test.js +64 -12
- package/src/elements/common/routing/withRouterAndRef.js +11 -3
- package/src/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js +30 -17
- package/src/elements/content-sidebar/ContentSidebar.js +2 -1
- package/src/elements/content-sidebar/SidebarNavButton.js +65 -3
- package/src/elements/content-sidebar/SidebarToggle.js +29 -6
- package/src/elements/content-sidebar/__tests__/SidebarNavButton.test.js +155 -3
- package/src/elements/content-sidebar/__tests__/SidebarToggle.test.js +74 -10
- package/src/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.tsx +14 -1
- package/src/features/header-flyout/HeaderFlyout.js +15 -2
- package/src/features/header-flyout/__tests__/__snapshots__/HeaderFlyout.test.js.snap +9 -3
- package/src/features/header-flyout/styles/HeaderFlyout.scss +2 -0
- package/src/elements/content-sidebar/__tests__/__snapshots__/SidebarToggle.test.js.snap +0 -19
|
@@ -18,13 +18,62 @@ const SidebarNavButton = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
18
18
|
'data-testid': dataTestId,
|
|
19
19
|
children,
|
|
20
20
|
elementId = '',
|
|
21
|
+
internalSidebarNavigation,
|
|
22
|
+
internalSidebarNavigationHandler,
|
|
21
23
|
isDisabled,
|
|
22
24
|
isOpen,
|
|
23
25
|
onClick = noop,
|
|
26
|
+
routerDisabled = false,
|
|
24
27
|
sidebarView,
|
|
25
28
|
tooltip
|
|
26
29
|
} = props;
|
|
27
30
|
const sidebarPath = `/${sidebarView}`;
|
|
31
|
+
const id = `${elementId}${elementId === '' ? '' : '_'}${sidebarView}`;
|
|
32
|
+
if (routerDisabled) {
|
|
33
|
+
// Mimic router behavior using internalSidebarNavigation
|
|
34
|
+
const isMatch = !!internalSidebarNavigation && internalSidebarNavigation.sidebar === sidebarView;
|
|
35
|
+
const isActiveValue = isMatch && !!isOpen;
|
|
36
|
+
|
|
37
|
+
// Mimic isExactMatch: true when no extra navigation parameters are present
|
|
38
|
+
const hasExtraParams = internalSidebarNavigation && (internalSidebarNavigation.versionId || internalSidebarNavigation.activeFeedEntryType || internalSidebarNavigation.activeFeedEntryId || internalSidebarNavigation.fileVersionId);
|
|
39
|
+
const isExactMatch = isMatch && !hasExtraParams;
|
|
40
|
+
const handleNavButtonClick = event => {
|
|
41
|
+
onClick(sidebarView);
|
|
42
|
+
|
|
43
|
+
// Mimic router navigation behavior
|
|
44
|
+
if (internalSidebarNavigationHandler && !event.defaultPrevented && isLeftClick(event)) {
|
|
45
|
+
const replace = isExactMatch;
|
|
46
|
+
internalSidebarNavigationHandler({
|
|
47
|
+
sidebar: sidebarView,
|
|
48
|
+
open: true
|
|
49
|
+
}, replace);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
53
|
+
position: "middle-left",
|
|
54
|
+
text: tooltip,
|
|
55
|
+
isTabbable: false
|
|
56
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
57
|
+
accessibleWhenDisabled: true,
|
|
58
|
+
"aria-controls": `${id}-content`,
|
|
59
|
+
"aria-label": tooltip,
|
|
60
|
+
"aria-selected": isActiveValue,
|
|
61
|
+
className: classNames('bcs-NavButton', {
|
|
62
|
+
'bcs-is-selected': isActiveValue,
|
|
63
|
+
'bdl-is-disabled': isDisabled
|
|
64
|
+
}),
|
|
65
|
+
"data-resin-target": dataResinTarget,
|
|
66
|
+
"data-testid": dataTestId,
|
|
67
|
+
ref: ref,
|
|
68
|
+
id: id,
|
|
69
|
+
disabled: isDisabled,
|
|
70
|
+
onClick: handleNavButtonClick,
|
|
71
|
+
role: "tab",
|
|
72
|
+
tabIndex: isActiveValue ? '0' : '-1',
|
|
73
|
+
type: "button",
|
|
74
|
+
variant: "tertiary"
|
|
75
|
+
}, children));
|
|
76
|
+
}
|
|
28
77
|
return /*#__PURE__*/React.createElement(Route, {
|
|
29
78
|
path: sidebarPath
|
|
30
79
|
}, ({
|
|
@@ -34,7 +83,6 @@ const SidebarNavButton = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
34
83
|
const isMatch = !!match;
|
|
35
84
|
const isActiveValue = isMatch && !!isOpen;
|
|
36
85
|
const isExactMatch = isMatch && match.isExact;
|
|
37
|
-
const id = `${elementId}${elementId === '' ? '' : '_'}${sidebarView}`;
|
|
38
86
|
const handleNavButtonClick = event => {
|
|
39
87
|
onClick(sidebarView);
|
|
40
88
|
if (!event.defaultPrevented && isLeftClick(event)) {
|
|
@@ -11,6 +11,7 @@ import classNames from 'classnames';
|
|
|
11
11
|
import { Button } from '@box/blueprint-web';
|
|
12
12
|
import Tooltip from '../../components/tooltip/Tooltip';
|
|
13
13
|
import { isLeftClick } from '../../utils/dom';
|
|
14
|
+
import type { InternalSidebarNavigation, InternalSidebarNavigationHandler, ViewTypeValues } from '../common/types/SidebarNavigation';
|
|
14
15
|
import './SidebarNavButton.scss';
|
|
15
16
|
|
|
16
17
|
type Props = {
|
|
@@ -18,10 +19,13 @@ type Props = {
|
|
|
18
19
|
'data-testid'?: string,
|
|
19
20
|
children: React.Node,
|
|
20
21
|
elementId?: string,
|
|
22
|
+
internalSidebarNavigation?: InternalSidebarNavigation,
|
|
23
|
+
internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
|
|
21
24
|
isDisabled?: boolean,
|
|
22
25
|
isOpen?: boolean,
|
|
23
|
-
onClick?: (sidebarView:
|
|
24
|
-
|
|
26
|
+
onClick?: (sidebarView: ViewTypeValues) => void,
|
|
27
|
+
routerDisabled?: boolean,
|
|
28
|
+
sidebarView: ViewTypeValues,
|
|
25
29
|
tooltip: React.Node,
|
|
26
30
|
};
|
|
27
31
|
|
|
@@ -31,13 +35,72 @@ const SidebarNavButton = React.forwardRef<Props, React.Ref<any>>((props: Props,
|
|
|
31
35
|
'data-testid': dataTestId,
|
|
32
36
|
children,
|
|
33
37
|
elementId = '',
|
|
38
|
+
internalSidebarNavigation,
|
|
39
|
+
internalSidebarNavigationHandler,
|
|
34
40
|
isDisabled,
|
|
35
41
|
isOpen,
|
|
36
42
|
onClick = noop,
|
|
43
|
+
routerDisabled = false,
|
|
37
44
|
sidebarView,
|
|
38
45
|
tooltip,
|
|
39
46
|
} = props;
|
|
40
47
|
const sidebarPath = `/${sidebarView}`;
|
|
48
|
+
const id = `${elementId}${elementId === '' ? '' : '_'}${sidebarView}`;
|
|
49
|
+
|
|
50
|
+
if (routerDisabled) {
|
|
51
|
+
// Mimic router behavior using internalSidebarNavigation
|
|
52
|
+
const isMatch = !!internalSidebarNavigation && internalSidebarNavigation.sidebar === sidebarView;
|
|
53
|
+
const isActiveValue = isMatch && !!isOpen;
|
|
54
|
+
|
|
55
|
+
// Mimic isExactMatch: true when no extra navigation parameters are present
|
|
56
|
+
const hasExtraParams = internalSidebarNavigation && (
|
|
57
|
+
internalSidebarNavigation.versionId ||
|
|
58
|
+
internalSidebarNavigation.activeFeedEntryType ||
|
|
59
|
+
internalSidebarNavigation.activeFeedEntryId ||
|
|
60
|
+
internalSidebarNavigation.fileVersionId
|
|
61
|
+
);
|
|
62
|
+
const isExactMatch = isMatch && !hasExtraParams;
|
|
63
|
+
|
|
64
|
+
const handleNavButtonClick = event => {
|
|
65
|
+
onClick(sidebarView);
|
|
66
|
+
|
|
67
|
+
// Mimic router navigation behavior
|
|
68
|
+
if (internalSidebarNavigationHandler && !event.defaultPrevented && isLeftClick(event)) {
|
|
69
|
+
const replace = isExactMatch;
|
|
70
|
+
internalSidebarNavigationHandler({
|
|
71
|
+
sidebar: sidebarView,
|
|
72
|
+
open: true,
|
|
73
|
+
}, replace);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<Tooltip position="middle-left" text={tooltip} isTabbable={false}>
|
|
79
|
+
<Button
|
|
80
|
+
accessibleWhenDisabled={true}
|
|
81
|
+
aria-controls={`${id}-content`}
|
|
82
|
+
aria-label={tooltip}
|
|
83
|
+
aria-selected={isActiveValue}
|
|
84
|
+
className={classNames('bcs-NavButton', {
|
|
85
|
+
'bcs-is-selected': isActiveValue,
|
|
86
|
+
'bdl-is-disabled': isDisabled,
|
|
87
|
+
})}
|
|
88
|
+
data-resin-target={dataResinTarget}
|
|
89
|
+
data-testid={dataTestId}
|
|
90
|
+
ref={ref}
|
|
91
|
+
id={id}
|
|
92
|
+
disabled={isDisabled}
|
|
93
|
+
onClick={handleNavButtonClick}
|
|
94
|
+
role="tab"
|
|
95
|
+
tabIndex={isActiveValue ? '0' : '-1'}
|
|
96
|
+
type="button"
|
|
97
|
+
variant="tertiary"
|
|
98
|
+
>
|
|
99
|
+
{children}
|
|
100
|
+
</Button>
|
|
101
|
+
</Tooltip>
|
|
102
|
+
);
|
|
103
|
+
}
|
|
41
104
|
|
|
42
105
|
return (
|
|
43
106
|
<Route path={sidebarPath}>
|
|
@@ -45,7 +108,6 @@ const SidebarNavButton = React.forwardRef<Props, React.Ref<any>>((props: Props,
|
|
|
45
108
|
const isMatch = !!match;
|
|
46
109
|
const isActiveValue = isMatch && !!isOpen;
|
|
47
110
|
const isExactMatch = isMatch && match.isExact;
|
|
48
|
-
const id = `${elementId}${elementId === '' ? '' : '_'}${sidebarView}`;
|
|
49
111
|
|
|
50
112
|
const handleNavButtonClick = event => {
|
|
51
113
|
onClick(sidebarView);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarNavButton.js","names":["React","Route","noop","classNames","Button","Tooltip","isLeftClick","SidebarNavButton","forwardRef","props","ref","dataResinTarget","dataTestId","children","elementId","isDisabled","isOpen","onClick","sidebarView","tooltip","sidebarPath","createElement","path","match","history","isMatch","isActiveValue","isExactMatch","isExact","id","handleNavButtonClick","event","defaultPrevented","method","replace","push","pathname","state","open","position","text","isTabbable","accessibleWhenDisabled","className","disabled","role","tabIndex","type","variant"],"sources":["../../../src/elements/content-sidebar/SidebarNavButton.js"],"sourcesContent":["/**\n * @flow\n * @file Preview sidebar nav button component\n * @author Box\n */\n\nimport * as React from 'react';\nimport { Route } from 'react-router-dom';\nimport noop from 'lodash/noop';\nimport classNames from 'classnames';\nimport { Button } from '@box/blueprint-web';\nimport Tooltip from '../../components/tooltip/Tooltip';\nimport { isLeftClick } from '../../utils/dom';\nimport './SidebarNavButton.scss';\n\ntype Props = {\n 'data-resin-target'?: string,\n 'data-testid'?: string,\n children: React.Node,\n elementId?: string,\n isDisabled?: boolean,\n isOpen?: boolean,\n onClick?: (sidebarView: string) => void,\n sidebarView: string,\n tooltip: React.Node,\n};\n\nconst SidebarNavButton = React.forwardRef<Props, React.Ref<any>>((props: Props, ref: React.Ref<any>) => {\n const {\n 'data-resin-target': dataResinTarget,\n 'data-testid': dataTestId,\n children,\n elementId = '',\n isDisabled,\n isOpen,\n onClick = noop,\n sidebarView,\n tooltip,\n } = props;\n const sidebarPath = `/${sidebarView}`;\n\n return (\n <Route path={sidebarPath}>\n {({ match, history }) => {\n const isMatch = !!match;\n const isActiveValue = isMatch && !!isOpen;\n const isExactMatch = isMatch && match.isExact;\n const id = `${elementId}${elementId === '' ? '' : '_'}${sidebarView}`;\n\n const handleNavButtonClick = event => {\n onClick(sidebarView);\n\n if (!event.defaultPrevented && isLeftClick(event)) {\n const method = isExactMatch ? history.replace : history.push;\n method({\n pathname: sidebarPath,\n state: { open: true },\n });\n }\n };\n\n return (\n <Tooltip position=\"middle-left\" text={tooltip} isTabbable={false}>\n <Button\n accessibleWhenDisabled={true}\n aria-controls={`${id}-content`}\n aria-label={tooltip}\n aria-selected={isActiveValue}\n className={classNames('bcs-NavButton', {\n 'bcs-is-selected': isActiveValue,\n 'bdl-is-disabled': isDisabled,\n })}\n data-resin-target={dataResinTarget}\n data-testid={dataTestId}\n ref={ref}\n id={id}\n disabled={isDisabled}\n onClick={handleNavButtonClick}\n role=\"tab\"\n tabIndex={isActiveValue ? '0' : '-1'}\n type=\"button\"\n variant=\"tertiary\"\n >\n {children}\n </Button>\n </Tooltip>\n );\n }}\n </Route>\n );\n});\n\nexport default SidebarNavButton;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,KAAK,QAAQ,kBAAkB;AACxC,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,MAAM,QAAQ,oBAAoB;AAC3C,OAAOC,OAAO,MAAM,kCAAkC;AACtD,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,OAAO,yBAAyB;AAchC,MAAMC,gBAAgB,gBAAGP,KAAK,CAACQ,UAAU,CAAwB,CAACC,KAAY,EAAEC,GAAmB,KAAK;EACpG,MAAM;IACF,mBAAmB,EAAEC,eAAe;IACpC,aAAa,EAAEC,UAAU;IACzBC,QAAQ;IACRC,SAAS,GAAG,EAAE;IACdC,UAAU;IACVC,MAAM;IACNC,OAAO,GAAGf,IAAI;IACdgB,WAAW;IACXC;EACJ,CAAC,GAAGV,KAAK;EACT,MAAMW,WAAW,GAAG,IAAIF,WAAW,EAAE;EAErC,oBACIlB,KAAA,CAAAqB,aAAA,CAACpB,KAAK;IAACqB,IAAI,EAAEF;EAAY,GACpB,CAAC;IAAEG,KAAK;IAAEC;EAAQ,CAAC,KAAK;IACrB,MAAMC,OAAO,GAAG,CAAC,CAACF,KAAK;IACvB,MAAMG,aAAa,GAAGD,OAAO,IAAI,CAAC,CAACT,MAAM;IACzC,MAAMW,YAAY,GAAGF,OAAO,IAAIF,KAAK,CAACK,OAAO;IAC7C,MAAMC,EAAE,GAAG,GAAGf,SAAS,GAAGA,SAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGI,WAAW,EAAE;IAErE,MAAMY,oBAAoB,GAAGC,KAAK,IAAI;MAClCd,OAAO,CAACC,WAAW,CAAC;MAEpB,IAAI,CAACa,KAAK,CAACC,gBAAgB,IAAI1B,WAAW,CAACyB,KAAK,CAAC,EAAE;QAC/C,MAAME,MAAM,GAAGN,YAAY,GAAGH,OAAO,CAACU,OAAO,GAAGV,OAAO,CAACW,IAAI;QAC5DF,MAAM,CAAC;UACHG,QAAQ,EAAEhB,WAAW;UACrBiB,KAAK,EAAE;YAAEC,IAAI,EAAE;UAAK;QACxB,CAAC,CAAC;MACN;IACJ,CAAC;IAED,oBACItC,KAAA,CAAAqB,aAAA,CAAChB,OAAO;MAACkC,QAAQ,EAAC,aAAa;MAACC,IAAI,EAAErB,OAAQ;MAACsB,UAAU,EAAE;IAAM,gBAC7DzC,KAAA,CAAAqB,aAAA,CAACjB,MAAM;MACHsC,sBAAsB,EAAE,IAAK;MAC7B,iBAAe,GAAGb,EAAE,UAAW;MAC/B,cAAYV,OAAQ;MACpB,iBAAeO,aAAc;MAC7BiB,SAAS,EAAExC,UAAU,CAAC,eAAe,EAAE;QACnC,iBAAiB,EAAEuB,aAAa;QAChC,iBAAiB,EAAEX;MACvB,CAAC,CAAE;MACH,qBAAmBJ,eAAgB;MACnC,eAAaC,UAAW;MACxBF,GAAG,EAAEA,GAAI;MACTmB,EAAE,EAAEA,EAAG;MACPe,QAAQ,EAAE7B,UAAW;MACrBE,OAAO,EAAEa,oBAAqB;MAC9Be,IAAI,EAAC,KAAK;MACVC,QAAQ,EAAEpB,aAAa,GAAG,GAAG,GAAG,IAAK;MACrCqB,IAAI,EAAC,QAAQ;MACbC,OAAO,EAAC;IAAU,GAEjBnC,QACG,CACH,CAAC;EAElB,CACG,CAAC;AAEhB,CAAC,CAAC;AAEF,eAAeN,gBAAgB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SidebarNavButton.js","names":["React","Route","noop","classNames","Button","Tooltip","isLeftClick","SidebarNavButton","forwardRef","props","ref","dataResinTarget","dataTestId","children","elementId","internalSidebarNavigation","internalSidebarNavigationHandler","isDisabled","isOpen","onClick","routerDisabled","sidebarView","tooltip","sidebarPath","id","isMatch","sidebar","isActiveValue","hasExtraParams","versionId","activeFeedEntryType","activeFeedEntryId","fileVersionId","isExactMatch","handleNavButtonClick","event","defaultPrevented","replace","open","createElement","position","text","isTabbable","accessibleWhenDisabled","className","disabled","role","tabIndex","type","variant","path","match","history","isExact","method","push","pathname","state"],"sources":["../../../src/elements/content-sidebar/SidebarNavButton.js"],"sourcesContent":["/**\n * @flow\n * @file Preview sidebar nav button component\n * @author Box\n */\n\nimport * as React from 'react';\nimport { Route } from 'react-router-dom';\nimport noop from 'lodash/noop';\nimport classNames from 'classnames';\nimport { Button } from '@box/blueprint-web';\nimport Tooltip from '../../components/tooltip/Tooltip';\nimport { isLeftClick } from '../../utils/dom';\nimport type { InternalSidebarNavigation, InternalSidebarNavigationHandler, ViewTypeValues } from '../common/types/SidebarNavigation';\nimport './SidebarNavButton.scss';\n\ntype Props = {\n 'data-resin-target'?: string,\n 'data-testid'?: string,\n children: React.Node,\n elementId?: string,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n isDisabled?: boolean,\n isOpen?: boolean,\n onClick?: (sidebarView: ViewTypeValues) => void,\n routerDisabled?: boolean,\n sidebarView: ViewTypeValues,\n tooltip: React.Node,\n};\n\nconst SidebarNavButton = React.forwardRef<Props, React.Ref<any>>((props: Props, ref: React.Ref<any>) => {\n const {\n 'data-resin-target': dataResinTarget,\n 'data-testid': dataTestId,\n children,\n elementId = '',\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n isDisabled,\n isOpen,\n onClick = noop,\n routerDisabled = false,\n sidebarView,\n tooltip,\n } = props;\n const sidebarPath = `/${sidebarView}`;\n const id = `${elementId}${elementId === '' ? '' : '_'}${sidebarView}`;\n\n if (routerDisabled) {\n // Mimic router behavior using internalSidebarNavigation\n const isMatch = !!internalSidebarNavigation && internalSidebarNavigation.sidebar === sidebarView;\n const isActiveValue = isMatch && !!isOpen;\n \n // Mimic isExactMatch: true when no extra navigation parameters are present\n const hasExtraParams = internalSidebarNavigation && (\n internalSidebarNavigation.versionId ||\n internalSidebarNavigation.activeFeedEntryType ||\n internalSidebarNavigation.activeFeedEntryId ||\n internalSidebarNavigation.fileVersionId\n );\n const isExactMatch = isMatch && !hasExtraParams;\n \n const handleNavButtonClick = event => {\n onClick(sidebarView);\n \n // Mimic router navigation behavior\n if (internalSidebarNavigationHandler && !event.defaultPrevented && isLeftClick(event)) {\n const replace = isExactMatch;\n internalSidebarNavigationHandler({\n sidebar: sidebarView,\n open: true,\n }, replace);\n }\n };\n\n return (\n <Tooltip position=\"middle-left\" text={tooltip} isTabbable={false}>\n <Button\n accessibleWhenDisabled={true}\n aria-controls={`${id}-content`}\n aria-label={tooltip}\n aria-selected={isActiveValue}\n className={classNames('bcs-NavButton', {\n 'bcs-is-selected': isActiveValue,\n 'bdl-is-disabled': isDisabled,\n })}\n data-resin-target={dataResinTarget}\n data-testid={dataTestId}\n ref={ref}\n id={id}\n disabled={isDisabled}\n onClick={handleNavButtonClick}\n role=\"tab\"\n tabIndex={isActiveValue ? '0' : '-1'}\n type=\"button\"\n variant=\"tertiary\"\n >\n {children}\n </Button>\n </Tooltip>\n );\n }\n\n return (\n <Route path={sidebarPath}>\n {({ match, history }) => {\n const isMatch = !!match;\n const isActiveValue = isMatch && !!isOpen;\n const isExactMatch = isMatch && match.isExact;\n\n const handleNavButtonClick = event => {\n onClick(sidebarView);\n\n if (!event.defaultPrevented && isLeftClick(event)) {\n const method = isExactMatch ? history.replace : history.push;\n method({\n pathname: sidebarPath,\n state: { open: true },\n });\n }\n };\n\n return (\n <Tooltip position=\"middle-left\" text={tooltip} isTabbable={false}>\n <Button\n accessibleWhenDisabled={true}\n aria-controls={`${id}-content`}\n aria-label={tooltip}\n aria-selected={isActiveValue}\n className={classNames('bcs-NavButton', {\n 'bcs-is-selected': isActiveValue,\n 'bdl-is-disabled': isDisabled,\n })}\n data-resin-target={dataResinTarget}\n data-testid={dataTestId}\n ref={ref}\n id={id}\n disabled={isDisabled}\n onClick={handleNavButtonClick}\n role=\"tab\"\n tabIndex={isActiveValue ? '0' : '-1'}\n type=\"button\"\n variant=\"tertiary\"\n >\n {children}\n </Button>\n </Tooltip>\n );\n }}\n </Route>\n );\n});\n\nexport default SidebarNavButton;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
1
6
|
/**
|
|
2
7
|
*
|
|
3
8
|
* @file Sidebar Toggle component
|
|
@@ -10,22 +15,35 @@ import SidebarToggleButton from '../../components/sidebar-toggle-button/SidebarT
|
|
|
10
15
|
import { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';
|
|
11
16
|
const SidebarToggle = ({
|
|
12
17
|
history,
|
|
13
|
-
|
|
18
|
+
internalSidebarNavigation,
|
|
19
|
+
internalSidebarNavigationHandler,
|
|
20
|
+
isOpen,
|
|
21
|
+
routerDisabled = false
|
|
14
22
|
}) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
const handleToggleClick = event => {
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
if (routerDisabled) {
|
|
26
|
+
// Use internal navigation handler when router is disabled
|
|
27
|
+
if (internalSidebarNavigationHandler && internalSidebarNavigation) {
|
|
28
|
+
internalSidebarNavigationHandler(_objectSpread(_objectSpread({}, internalSidebarNavigation), {}, {
|
|
29
|
+
open: !isOpen
|
|
30
|
+
}), true); // Always use replace for toggle
|
|
31
|
+
}
|
|
32
|
+
} else if (history) {
|
|
23
33
|
history.replace({
|
|
24
34
|
state: {
|
|
25
35
|
open: !isOpen
|
|
26
36
|
}
|
|
27
37
|
});
|
|
28
38
|
}
|
|
39
|
+
};
|
|
40
|
+
return /*#__PURE__*/React.createElement(SidebarToggleButton, {
|
|
41
|
+
"data-resin-target": SIDEBAR_NAV_TARGETS.TOGGLE,
|
|
42
|
+
"data-testid": "sidebartoggle"
|
|
43
|
+
// $FlowFixMe
|
|
44
|
+
,
|
|
45
|
+
isOpen: isOpen,
|
|
46
|
+
onClick: handleToggleClick
|
|
29
47
|
});
|
|
30
48
|
};
|
|
31
49
|
export { SidebarToggle as SidebarToggleComponent };
|
|
@@ -8,23 +8,46 @@ import * as React from 'react';
|
|
|
8
8
|
import { withRouter, type RouterHistory } from 'react-router-dom';
|
|
9
9
|
import SidebarToggleButton from '../../components/sidebar-toggle-button/SidebarToggleButton';
|
|
10
10
|
import { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';
|
|
11
|
+
import type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';
|
|
11
12
|
|
|
12
13
|
type Props = {
|
|
13
|
-
history
|
|
14
|
+
history?: RouterHistory,
|
|
15
|
+
internalSidebarNavigation?: InternalSidebarNavigation,
|
|
16
|
+
internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
|
|
14
17
|
isOpen?: boolean,
|
|
18
|
+
routerDisabled?: boolean,
|
|
15
19
|
};
|
|
16
20
|
|
|
17
|
-
const SidebarToggle = ({
|
|
21
|
+
const SidebarToggle = ({
|
|
22
|
+
history,
|
|
23
|
+
internalSidebarNavigation,
|
|
24
|
+
internalSidebarNavigationHandler,
|
|
25
|
+
isOpen,
|
|
26
|
+
routerDisabled = false,
|
|
27
|
+
}: Props) => {
|
|
28
|
+
const handleToggleClick = event => {
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
|
|
31
|
+
if (routerDisabled) {
|
|
32
|
+
// Use internal navigation handler when router is disabled
|
|
33
|
+
if (internalSidebarNavigationHandler && internalSidebarNavigation) {
|
|
34
|
+
internalSidebarNavigationHandler({
|
|
35
|
+
...internalSidebarNavigation,
|
|
36
|
+
open: !isOpen,
|
|
37
|
+
}, true); // Always use replace for toggle
|
|
38
|
+
}
|
|
39
|
+
} else if (history) {
|
|
40
|
+
history.replace({ state: { open: !isOpen } });
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
18
44
|
return (
|
|
19
45
|
<SidebarToggleButton
|
|
20
46
|
data-resin-target={SIDEBAR_NAV_TARGETS.TOGGLE}
|
|
21
47
|
data-testid="sidebartoggle"
|
|
22
48
|
// $FlowFixMe
|
|
23
49
|
isOpen={isOpen}
|
|
24
|
-
onClick={
|
|
25
|
-
event.preventDefault();
|
|
26
|
-
history.replace({ state: { open: !isOpen } });
|
|
27
|
-
}}
|
|
50
|
+
onClick={handleToggleClick}
|
|
28
51
|
/>
|
|
29
52
|
);
|
|
30
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarToggle.js","names":["React","withRouter","SidebarToggleButton","SIDEBAR_NAV_TARGETS","SidebarToggle","history","
|
|
1
|
+
{"version":3,"file":"SidebarToggle.js","names":["React","withRouter","SidebarToggleButton","SIDEBAR_NAV_TARGETS","SidebarToggle","history","internalSidebarNavigation","internalSidebarNavigationHandler","isOpen","routerDisabled","handleToggleClick","event","preventDefault","_objectSpread","open","replace","state","createElement","TOGGLE","onClick","SidebarToggleComponent"],"sources":["../../../src/elements/content-sidebar/SidebarToggle.js"],"sourcesContent":["/**\n * @flow strict\n * @file Sidebar Toggle component\n * @author Box\n */\n\nimport * as React from 'react';\nimport { withRouter, type RouterHistory } from 'react-router-dom';\nimport SidebarToggleButton from '../../components/sidebar-toggle-button/SidebarToggleButton';\nimport { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';\nimport type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';\n\ntype Props = {\n history?: RouterHistory,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n isOpen?: boolean,\n routerDisabled?: boolean,\n};\n\nconst SidebarToggle = ({ \n history, \n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n isOpen,\n routerDisabled = false,\n}: Props) => {\n const handleToggleClick = event => {\n event.preventDefault();\n \n if (routerDisabled) {\n // Use internal navigation handler when router is disabled\n if (internalSidebarNavigationHandler && internalSidebarNavigation) {\n internalSidebarNavigationHandler({\n ...internalSidebarNavigation,\n open: !isOpen,\n }, true); // Always use replace for toggle\n }\n } else if (history) {\n history.replace({ state: { open: !isOpen } });\n }\n };\n\n return (\n <SidebarToggleButton\n data-resin-target={SIDEBAR_NAV_TARGETS.TOGGLE}\n data-testid=\"sidebartoggle\"\n // $FlowFixMe\n isOpen={isOpen}\n onClick={handleToggleClick}\n />\n );\n};\n\nexport { SidebarToggle as SidebarToggleComponent };\nexport default withRouter(SidebarToggle);\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,UAAU,QAA4B,kBAAkB;AACjE,OAAOC,mBAAmB,MAAM,4DAA4D;AAC5F,SAASC,mBAAmB,QAAQ,8BAA8B;AAWlE,MAAMC,aAAa,GAAGA,CAAC;EACnBC,OAAO;EACPC,yBAAyB;EACzBC,gCAAgC;EAChCC,MAAM;EACNC,cAAc,GAAG;AACd,CAAC,KAAK;EACT,MAAMC,iBAAiB,GAAGC,KAAK,IAAI;IAC/BA,KAAK,CAACC,cAAc,CAAC,CAAC;IAEtB,IAAIH,cAAc,EAAE;MAChB;MACA,IAAIF,gCAAgC,IAAID,yBAAyB,EAAE;QAC/DC,gCAAgC,CAAAM,aAAA,CAAAA,aAAA,KACzBP,yBAAyB;UAC5BQ,IAAI,EAAE,CAACN;QAAM,IACd,IAAI,CAAC,CAAC,CAAC;MACd;IACJ,CAAC,MAAM,IAAIH,OAAO,EAAE;MAChBA,OAAO,CAACU,OAAO,CAAC;QAAEC,KAAK,EAAE;UAAEF,IAAI,EAAE,CAACN;QAAO;MAAE,CAAC,CAAC;IACjD;EACJ,CAAC;EAED,oBACIR,KAAA,CAAAiB,aAAA,CAACf,mBAAmB;IAChB,qBAAmBC,mBAAmB,CAACe,MAAO;IAC9C,eAAY;IACZ;IAAA;IACAV,MAAM,EAAEA,MAAO;IACfW,OAAO,EAAET;EAAkB,CAC9B,CAAC;AAEV,CAAC;AAED,SAASN,aAAa,IAAIgB,sBAAsB;AAChD,eAAenB,UAAU,CAACG,aAAa,CAAC","ignoreList":[]}
|
|
@@ -358,6 +358,15 @@ export const SwitchEditingTemplateInstances = {
|
|
|
358
358
|
fileId: '416047501580',
|
|
359
359
|
metadataSidebarProps: defaultMetadataSidebarProps
|
|
360
360
|
},
|
|
361
|
+
parameters: {
|
|
362
|
+
msw: {
|
|
363
|
+
handlers: [...defaultMockHandlers, http.get(`/2.0/files/416047501580`, () => {
|
|
364
|
+
return HttpResponse.json(mockFileRequest.response);
|
|
365
|
+
}), http.get(`/2.0/files/416047501580/metadata`, () => {
|
|
366
|
+
return HttpResponse.json(mockMetadataInstances.response);
|
|
367
|
+
})]
|
|
368
|
+
}
|
|
369
|
+
},
|
|
361
370
|
play: async ({
|
|
362
371
|
canvasElement
|
|
363
372
|
}) => {
|
|
@@ -563,7 +572,9 @@ export const SuggestionForNewlyCreatedTemplateInstance = {
|
|
|
563
572
|
name: 'Autofill'
|
|
564
573
|
});
|
|
565
574
|
userEvent.click(autofillButton);
|
|
566
|
-
const suggestion = await canvas.findByText('4/1/2024'
|
|
575
|
+
const suggestion = await canvas.findByText('4/1/2024', {}, {
|
|
576
|
+
timeout: 5000
|
|
577
|
+
});
|
|
567
578
|
expect(suggestion).toBeInTheDocument();
|
|
568
579
|
}
|
|
569
580
|
};
|