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.
Files changed (58) hide show
  1. package/dist/explorer.js +1 -1
  2. package/dist/preview.js +1 -1
  3. package/dist/sidebar.js +1 -1
  4. package/es/components/flyout/OverlayHeader.js +6 -3
  5. package/es/components/flyout/OverlayHeader.js.map +1 -1
  6. package/es/elements/common/nav-router/NavRouter.js +7 -3
  7. package/es/elements/common/nav-router/NavRouter.js.flow +10 -1
  8. package/es/elements/common/nav-router/NavRouter.js.map +1 -1
  9. package/es/elements/common/nav-router/types.js.map +1 -1
  10. package/es/elements/common/nav-router/withNavRouter.js +10 -1
  11. package/es/elements/common/nav-router/withNavRouter.js.flow +5 -0
  12. package/es/elements/common/nav-router/withNavRouter.js.map +1 -1
  13. package/es/elements/common/routing/withRouterAndRef.js +17 -3
  14. package/es/elements/common/routing/withRouterAndRef.js.flow +11 -3
  15. package/es/elements/common/routing/withRouterAndRef.js.map +1 -1
  16. package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js +22 -13
  17. package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js.flow +30 -17
  18. package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js.map +1 -1
  19. package/es/elements/content-sidebar/ContentSidebar.js +3 -1
  20. package/es/elements/content-sidebar/ContentSidebar.js.flow +2 -1
  21. package/es/elements/content-sidebar/ContentSidebar.js.map +1 -1
  22. package/es/elements/content-sidebar/SidebarNavButton.js +49 -1
  23. package/es/elements/content-sidebar/SidebarNavButton.js.flow +65 -3
  24. package/es/elements/content-sidebar/SidebarNavButton.js.map +1 -1
  25. package/es/elements/content-sidebar/SidebarToggle.js +27 -9
  26. package/es/elements/content-sidebar/SidebarToggle.js.flow +29 -6
  27. package/es/elements/content-sidebar/SidebarToggle.js.map +1 -1
  28. package/es/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.js +12 -1
  29. package/es/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.js.map +1 -1
  30. package/es/features/header-flyout/HeaderFlyout.js +6 -3
  31. package/es/features/header-flyout/HeaderFlyout.js.flow +15 -2
  32. package/es/features/header-flyout/HeaderFlyout.js.map +1 -1
  33. package/es/features/header-flyout/styles/HeaderFlyout.scss +2 -0
  34. package/es/src/components/flyout/OverlayHeader.d.ts +3 -1
  35. package/es/src/elements/common/nav-router/NavRouter.d.ts +3 -1
  36. package/es/src/elements/common/nav-router/types.d.ts +2 -0
  37. package/package.json +1 -1
  38. package/src/components/flyout/OverlayHeader.tsx +7 -3
  39. package/src/components/flyout/__tests__/OverlayHeader.test.js +25 -0
  40. package/src/elements/common/nav-router/NavRouter.js.flow +10 -1
  41. package/src/elements/common/nav-router/NavRouter.tsx +9 -3
  42. package/src/elements/common/nav-router/__tests__/withNavRouter.test.tsx +34 -20
  43. package/src/elements/common/nav-router/types.ts +2 -0
  44. package/src/elements/common/nav-router/withNavRouter.js.flow +5 -0
  45. package/src/elements/common/nav-router/withNavRouter.tsx +9 -1
  46. package/src/elements/common/routing/__tests__/withRouterAndRef.test.js +64 -12
  47. package/src/elements/common/routing/withRouterAndRef.js +11 -3
  48. package/src/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js +30 -17
  49. package/src/elements/content-sidebar/ContentSidebar.js +2 -1
  50. package/src/elements/content-sidebar/SidebarNavButton.js +65 -3
  51. package/src/elements/content-sidebar/SidebarToggle.js +29 -6
  52. package/src/elements/content-sidebar/__tests__/SidebarNavButton.test.js +155 -3
  53. package/src/elements/content-sidebar/__tests__/SidebarToggle.test.js +74 -10
  54. package/src/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.tsx +14 -1
  55. package/src/features/header-flyout/HeaderFlyout.js +15 -2
  56. package/src/features/header-flyout/__tests__/__snapshots__/HeaderFlyout.test.js.snap +9 -3
  57. package/src/features/header-flyout/styles/HeaderFlyout.scss +2 -0
  58. 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: string) => void,
24
- sidebarView: string,
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
- isOpen
18
+ internalSidebarNavigation,
19
+ internalSidebarNavigationHandler,
20
+ isOpen,
21
+ routerDisabled = false
14
22
  }) => {
15
- return /*#__PURE__*/React.createElement(SidebarToggleButton, {
16
- "data-resin-target": SIDEBAR_NAV_TARGETS.TOGGLE,
17
- "data-testid": "sidebartoggle"
18
- // $FlowFixMe
19
- ,
20
- isOpen: isOpen,
21
- onClick: event => {
22
- event.preventDefault();
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: RouterHistory,
14
+ history?: RouterHistory,
15
+ internalSidebarNavigation?: InternalSidebarNavigation,
16
+ internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
14
17
  isOpen?: boolean,
18
+ routerDisabled?: boolean,
15
19
  };
16
20
 
17
- const SidebarToggle = ({ history, isOpen }: Props) => {
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={event => {
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","isOpen","createElement","TOGGLE","onClick","event","preventDefault","replace","state","open","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';\n\ntype Props = {\n history: RouterHistory,\n isOpen?: boolean,\n};\n\nconst SidebarToggle = ({ history, isOpen }: Props) => {\n return (\n <SidebarToggleButton\n data-resin-target={SIDEBAR_NAV_TARGETS.TOGGLE}\n data-testid=\"sidebartoggle\"\n // $FlowFixMe\n isOpen={isOpen}\n onClick={event => {\n event.preventDefault();\n history.replace({ state: { open: !isOpen } });\n }}\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;AAOlE,MAAMC,aAAa,GAAGA,CAAC;EAAEC,OAAO;EAAEC;AAAc,CAAC,KAAK;EAClD,oBACIN,KAAA,CAAAO,aAAA,CAACL,mBAAmB;IAChB,qBAAmBC,mBAAmB,CAACK,MAAO;IAC9C,eAAY;IACZ;IAAA;IACAF,MAAM,EAAEA,MAAO;IACfG,OAAO,EAAEC,KAAK,IAAI;MACdA,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBN,OAAO,CAACO,OAAO,CAAC;QAAEC,KAAK,EAAE;UAAEC,IAAI,EAAE,CAACR;QAAO;MAAE,CAAC,CAAC;IACjD;EAAE,CACL,CAAC;AAEV,CAAC;AAED,SAASF,aAAa,IAAIW,sBAAsB;AAChD,eAAed,UAAU,CAACG,aAAa,CAAC","ignoreList":[]}
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
  };