box-ui-elements 23.4.0 → 23.5.0-beta.1
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.css +1 -1
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.js +1 -1
- package/es/elements/common/routing/index.js +1 -1
- package/es/elements/common/routing/index.js.flow +2 -1
- package/es/elements/common/routing/index.js.map +1 -1
- package/es/elements/common/routing/withRouterIfEnabled.js +15 -0
- package/es/elements/common/routing/withRouterIfEnabled.js.flow +24 -0
- package/es/elements/common/routing/withRouterIfEnabled.js.map +1 -0
- package/es/elements/content-explorer/MetadataViewContainer.js +53 -3
- package/es/elements/content-explorer/MetadataViewContainer.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +41 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
- package/es/elements/content-sidebar/AddTaskButton.js +3 -3
- package/es/elements/content-sidebar/AddTaskButton.js.flow +5 -4
- package/es/elements/content-sidebar/AddTaskButton.js.map +1 -1
- package/es/elements/content-sidebar/SidebarToggle.js +2 -2
- package/es/elements/content-sidebar/SidebarToggle.js.flow +3 -2
- package/es/elements/content-sidebar/SidebarToggle.js.map +1 -1
- package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js +4 -3
- package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js.flow +5 -4
- package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js.map +1 -1
- package/es/src/elements/content-explorer/MetadataViewContainer.d.ts +13 -2
- package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +1 -0
- package/package.json +9 -9
- package/src/elements/common/routing/__tests__/withRouterIfEnabled.test.js +55 -0
- package/src/elements/common/routing/index.js +2 -1
- package/src/elements/common/routing/withRouterIfEnabled.js +24 -0
- package/src/elements/content-explorer/MetadataViewContainer.tsx +77 -12
- package/src/elements/content-explorer/__tests__/MetadataViewContainer.test.tsx +38 -3
- package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +33 -3
- package/src/elements/content-sidebar/AddTaskButton.js +5 -4
- package/src/elements/content-sidebar/SidebarToggle.js +3 -2
- package/src/elements/content-sidebar/__tests__/__snapshots__/ActivitySidebar.test.js.snap +1 -1
- package/src/elements/content-sidebar/versions/VersionsSidebarContainer.js +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionsSidebarContainer.js","names":["React","flow","getProp","merge","noop","generatePath","withRouter","withFeatureConsumer","isFeatureEnabled","API","FIELD_METADATA_ARCHIVE","messages","openUrlInsideIframe","StaticVersionsSidebar","VersionsSidebar","VersionsSidebarAPI","withAPIContext","ViewType","VersionsSidebarContainer","Component","constructor","args","_defineProperty","isArchived","isLoading","isWatermarked","versionCount","Infinity","versionLimit","versions","window","versionId","setState","api","deleteVersion","findVersion","then","fetchVersion","handleDeleteSuccess","props","onVersionDelete","catch","handleActionError","versionActionDeleteError","fetchDownloadUrl","onVersionDownload","versionActionDownloadError","updateVersion","onVersionPreview","promoteVersion","fetchData","handleFetchSuccess","handlePromoteSuccess","onVersionPromote","versionActionPromoteError","restoreVersion","handleRestoreSuccess","onVersionRestore","versionActionRestoreError","message","error","data","selectedVersionId","id","mergeResponse","updateVersionToCurrent","versionFetchError","fileResponse","versionsResponse","version_limit","undefined","versionsWithPermissions","getVersionsAPI","addPermissions","entries","total_count","sortVersions","verifyVersion","file","file_version","fileVersion","features","fileId","isArchiveFeatureEnabled","handleFetchError","state","find","version","newVersion","newVersionId","map","_objectSpread","newVersions","mergeVersions","history","match","routerDisabled","internalSidebarNavigationHandler","internalSidebarNavigation","navigationUpdate","push","path","params","getCurrentVersionId","onVersionChange","selectedVersion","currentVersionId","componentDidMount","onLoad","initialize","component","feature","componentDidUpdate","prevFileId","prevVersionId","refresh","sort","a","b","Date","parse","created_at","render","parentName","onUpgradeClick","createElement","_extends","onDelete","handleActionDelete","onDownload","handleActionDownload","onPreview","handleActionPreview","onPromote","handleActionPromote","onRestore","handleActionRestore","DETAILS","VersionsSidebarContainerComponent"],"sources":["../../../../src/elements/content-sidebar/versions/VersionsSidebarContainer.js"],"sourcesContent":["/**\n * @flow\n * @file Versions Sidebar container\n * @author Box\n */\n\nimport * as React from 'react';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport merge from 'lodash/merge';\nimport noop from 'lodash/noop';\nimport { generatePath, withRouter } from 'react-router-dom';\nimport type { Match, RouterHistory } from 'react-router-dom';\nimport type { MessageDescriptor } from 'react-intl';\nimport { withFeatureConsumer, isFeatureEnabled } from '../../common/feature-checking';\nimport API from '../../../api';\nimport { FIELD_METADATA_ARCHIVE } from '../../../constants';\nimport messages from './messages';\nimport openUrlInsideIframe from '../../../utils/iframe';\nimport StaticVersionsSidebar from './StaticVersionSidebar';\nimport VersionsSidebar from './VersionsSidebar';\nimport VersionsSidebarAPI from './VersionsSidebarAPI';\nimport { withAPIContext } from '../../common/api-context';\nimport type { FeatureConfig } from '../../common/feature-checking';\nimport type { VersionActionCallback, VersionChangeCallback, SidebarLoadCallback } from './flowTypes';\nimport type { BoxItemVersion, BoxItem, FileVersions } from '../../../common/types/core';\nimport {\n ViewType,\n type ViewTypeValues,\n type InternalSidebarNavigation,\n type InternalSidebarNavigationHandler,\n} from '../../common/types/SidebarNavigation';\n\ntype Props = {\n api: API,\n features: FeatureConfig,\n fileId: string,\n hasSidebarInitialized?: boolean,\n history: RouterHistory,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n match: Match,\n onLoad: SidebarLoadCallback,\n onUpgradeClick?: () => void,\n onVersionChange: VersionChangeCallback,\n onVersionDelete: VersionActionCallback,\n onVersionDownload: VersionActionCallback,\n onVersionPreview: VersionActionCallback,\n onVersionPromote: VersionActionCallback,\n onVersionRestore: VersionActionCallback,\n parentName: ViewTypeValues,\n routerDisabled?: boolean,\n versionId?: string,\n};\n\ntype State = {\n error?: MessageDescriptor,\n isArchived: boolean,\n isLoading: boolean,\n isWatermarked: boolean,\n versionCount: number,\n versionLimit: number,\n versions: Array<BoxItemVersion>,\n};\n\nclass VersionsSidebarContainer extends React.Component<Props, State> {\n static defaultProps = {\n onLoad: noop,\n onVersionChange: noop,\n onVersionDelete: noop,\n onVersionDownload: noop,\n onVersionPreview: noop,\n onVersionPromote: noop,\n onVersionRestore: noop,\n parentName: ViewType.DETAILS,\n };\n\n api: VersionsSidebarAPI;\n\n props: Props;\n\n state: State = {\n isArchived: false,\n isLoading: true,\n isWatermarked: false,\n versionCount: Infinity,\n versionLimit: Infinity,\n versions: [],\n };\n\n window: any = window;\n\n componentDidMount() {\n const { onLoad } = this.props;\n this.initialize();\n this.fetchData().then(() => {\n onLoad({ component: 'preview', feature: 'versions' });\n });\n }\n\n componentDidUpdate({ fileId: prevFileId, versionId: prevVersionId }: Props) {\n const { fileId, versionId } = this.props;\n\n if (fileId !== prevFileId) {\n this.refresh();\n }\n\n if (versionId !== prevVersionId) {\n this.verifyVersion();\n }\n }\n\n handleActionDelete = (versionId: string): Promise<void> => {\n this.setState({ isLoading: true });\n\n return this.api\n .deleteVersion(this.findVersion(versionId))\n .then(() => this.api.fetchVersion(versionId))\n .then(this.handleDeleteSuccess)\n .then(() => this.props.onVersionDelete(versionId))\n .catch(() => this.handleActionError(messages.versionActionDeleteError));\n };\n\n handleActionDownload = (versionId: string): Promise<void> => {\n return this.api\n .fetchDownloadUrl(this.findVersion(versionId))\n .then(openUrlInsideIframe)\n .then(() => this.props.onVersionDownload(versionId))\n .catch(() => this.handleActionError(messages.versionActionDownloadError));\n };\n\n handleActionPreview = (versionId: string): void => {\n this.updateVersion(versionId);\n this.props.onVersionPreview(versionId);\n };\n\n handleActionPromote = (versionId: string): Promise<void> => {\n this.setState({ isLoading: true });\n\n return this.api\n .promoteVersion(this.findVersion(versionId))\n .then(this.api.fetchData)\n .then(this.handleFetchSuccess)\n .then(this.handlePromoteSuccess)\n .then(() => this.props.onVersionPromote(versionId))\n .catch(() => this.handleActionError(messages.versionActionPromoteError));\n };\n\n handleActionRestore = (versionId: string): Promise<void> => {\n this.setState({ isLoading: true });\n\n return this.api\n .restoreVersion(this.findVersion(versionId))\n .then(() => this.api.fetchVersion(versionId))\n .then(this.handleRestoreSuccess)\n .then(() => this.props.onVersionRestore(versionId))\n .catch(() => this.handleActionError(messages.versionActionRestoreError));\n };\n\n handleActionError = (message: MessageDescriptor): void => {\n this.setState({\n error: message,\n isLoading: false,\n });\n };\n\n handleDeleteSuccess = (data: BoxItemVersion): void => {\n const { versionId: selectedVersionId } = this.props;\n const { id: versionId } = data;\n\n this.mergeResponse(data);\n\n // Bump the user to the current version if they deleted their selected version\n if (versionId === selectedVersionId) {\n this.updateVersionToCurrent();\n }\n };\n\n handleRestoreSuccess = (data: BoxItemVersion): void => {\n this.mergeResponse(data);\n };\n\n handleFetchError = (): void => {\n this.setState({\n error: messages.versionFetchError,\n isArchived: false,\n isLoading: false,\n isWatermarked: false,\n versionCount: 0,\n versions: [],\n });\n };\n\n handleFetchSuccess = ([fileResponse, versionsResponse]: [BoxItem, FileVersions]): [BoxItem, FileVersions] => {\n const { api } = this.props;\n const { version_limit } = fileResponse;\n const isArchived = !!getProp(fileResponse, FIELD_METADATA_ARCHIVE);\n const isWatermarked = getProp(fileResponse, 'watermark_info.is_watermarked', false);\n const versionLimit = version_limit !== null && version_limit !== undefined ? version_limit : Infinity;\n const versionsWithPermissions = api.getVersionsAPI(false).addPermissions(versionsResponse, fileResponse) || {};\n const { entries: versions, total_count: versionCount } = versionsWithPermissions;\n\n this.setState(\n {\n error: undefined,\n isArchived,\n isLoading: false,\n isWatermarked,\n versionCount,\n versionLimit,\n versions: this.sortVersions(versions),\n },\n this.verifyVersion,\n );\n\n return [fileResponse, versionsResponse];\n };\n\n handlePromoteSuccess = ([file]: [BoxItem, FileVersions]): void => {\n const { file_version: fileVersion } = file;\n\n if (fileVersion) {\n this.updateVersion(fileVersion.id);\n }\n };\n\n initialize = (): void => {\n const { api, features, fileId }: Props = this.props;\n const isArchiveFeatureEnabled = isFeatureEnabled(features, 'contentSidebar.archive.enabled');\n\n this.api = new VersionsSidebarAPI({ api, fileId, isArchiveFeatureEnabled });\n };\n\n fetchData = (): Promise<?[BoxItem, FileVersions]> => {\n return this.api.fetchData().then(this.handleFetchSuccess).catch(this.handleFetchError);\n };\n\n findVersion = (versionId: ?string): ?BoxItemVersion => {\n const { versions } = this.state;\n\n return versions.find(version => version.id === versionId);\n };\n\n getCurrentVersionId = (): ?string => {\n const { versions } = this.state;\n return versions[0] ? versions[0].id : null;\n };\n\n mergeVersions = (newVersion: BoxItemVersion): Array<BoxItemVersion> => {\n const { versions } = this.state;\n const newVersionId = newVersion ? newVersion.id : '';\n return versions.map(version => (version.id === newVersionId ? merge({ ...version }, newVersion) : version));\n };\n\n mergeResponse = (data: BoxItemVersion): void => {\n const newVersions = this.mergeVersions(data);\n\n this.setState({\n error: undefined,\n isLoading: false,\n versions: newVersions,\n });\n };\n\n refresh(): void {\n this.initialize();\n this.setState({ isLoading: true }, this.fetchData);\n }\n\n sortVersions(versions?: Array<BoxItemVersion> = []): Array<BoxItemVersion> {\n return [...versions].sort((a, b) => Date.parse(b.created_at) - Date.parse(a.created_at));\n }\n\n updateVersion = (versionId?: ?string): void => {\n const { history, match, routerDisabled, internalSidebarNavigationHandler, internalSidebarNavigation } =\n this.props;\n\n if (routerDisabled && internalSidebarNavigationHandler) {\n const navigationUpdate: InternalSidebarNavigation = { ...internalSidebarNavigation };\n if (versionId) {\n navigationUpdate.versionId = versionId;\n } else {\n delete navigationUpdate.versionId;\n }\n internalSidebarNavigationHandler(navigationUpdate);\n } else {\n history.push(generatePath(match.path, { ...match.params, versionId }));\n }\n };\n\n updateVersionToCurrent = (): void => {\n this.updateVersion(this.getCurrentVersionId());\n };\n\n verifyVersion = () => {\n const { onVersionChange, versionId } = this.props;\n const selectedVersion = this.findVersion(versionId);\n\n if (selectedVersion) {\n onVersionChange(selectedVersion, {\n currentVersionId: this.getCurrentVersionId(),\n updateVersionToCurrent: this.updateVersionToCurrent,\n });\n } else {\n this.updateVersionToCurrent();\n }\n };\n\n render() {\n const {\n fileId,\n parentName,\n onUpgradeClick,\n routerDisabled,\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n } = this.props;\n\n if (onUpgradeClick) {\n return (\n <StaticVersionsSidebar\n onUpgradeClick={onUpgradeClick}\n parentName={parentName}\n routerDisabled={routerDisabled}\n internalSidebarNavigation={internalSidebarNavigation}\n internalSidebarNavigationHandler={internalSidebarNavigationHandler}\n {...this.state}\n />\n );\n }\n\n return (\n <VersionsSidebar\n fileId={fileId}\n internalSidebarNavigation={internalSidebarNavigation}\n internalSidebarNavigationHandler={internalSidebarNavigationHandler}\n onDelete={this.handleActionDelete}\n onDownload={this.handleActionDownload}\n onPreview={this.handleActionPreview}\n onPromote={this.handleActionPromote}\n onRestore={this.handleActionRestore}\n parentName={parentName}\n routerDisabled={routerDisabled}\n {...this.state}\n />\n );\n }\n}\n\nexport type VersionsSidebarProps = Props;\nexport { VersionsSidebarContainer as VersionsSidebarContainerComponent };\nexport default flow([withRouter, withAPIContext, withFeatureConsumer])(VersionsSidebarContainer);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VersionsSidebarContainer.js","names":["React","flow","getProp","merge","noop","generatePath","withFeatureConsumer","isFeatureEnabled","API","FIELD_METADATA_ARCHIVE","messages","openUrlInsideIframe","StaticVersionsSidebar","VersionsSidebar","VersionsSidebarAPI","withAPIContext","withRouterIfEnabled","ViewType","VersionsSidebarContainer","Component","constructor","args","_defineProperty","isArchived","isLoading","isWatermarked","versionCount","Infinity","versionLimit","versions","window","versionId","setState","api","deleteVersion","findVersion","then","fetchVersion","handleDeleteSuccess","props","onVersionDelete","catch","handleActionError","versionActionDeleteError","fetchDownloadUrl","onVersionDownload","versionActionDownloadError","updateVersion","onVersionPreview","promoteVersion","fetchData","handleFetchSuccess","handlePromoteSuccess","onVersionPromote","versionActionPromoteError","restoreVersion","handleRestoreSuccess","onVersionRestore","versionActionRestoreError","message","error","data","selectedVersionId","id","mergeResponse","updateVersionToCurrent","versionFetchError","fileResponse","versionsResponse","version_limit","undefined","versionsWithPermissions","getVersionsAPI","addPermissions","entries","total_count","sortVersions","verifyVersion","file","file_version","fileVersion","features","fileId","isArchiveFeatureEnabled","handleFetchError","state","find","version","newVersion","newVersionId","map","_objectSpread","newVersions","mergeVersions","history","match","routerDisabled","internalSidebarNavigationHandler","internalSidebarNavigation","navigationUpdate","push","path","params","getCurrentVersionId","onVersionChange","selectedVersion","currentVersionId","componentDidMount","onLoad","initialize","component","feature","componentDidUpdate","prevFileId","prevVersionId","refresh","sort","a","b","Date","parse","created_at","render","parentName","onUpgradeClick","createElement","_extends","onDelete","handleActionDelete","onDownload","handleActionDownload","onPreview","handleActionPreview","onPromote","handleActionPromote","onRestore","handleActionRestore","DETAILS","VersionsSidebarContainerComponent"],"sources":["../../../../src/elements/content-sidebar/versions/VersionsSidebarContainer.js"],"sourcesContent":["/**\n * @flow\n * @file Versions Sidebar container\n * @author Box\n */\n\nimport * as React from 'react';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport merge from 'lodash/merge';\nimport noop from 'lodash/noop';\nimport { generatePath } from 'react-router-dom';\nimport type { Match, RouterHistory } from 'react-router-dom';\nimport type { MessageDescriptor } from 'react-intl';\nimport { withFeatureConsumer, isFeatureEnabled } from '../../common/feature-checking';\nimport API from '../../../api';\nimport { FIELD_METADATA_ARCHIVE } from '../../../constants';\nimport messages from './messages';\nimport openUrlInsideIframe from '../../../utils/iframe';\nimport StaticVersionsSidebar from './StaticVersionSidebar';\nimport VersionsSidebar from './VersionsSidebar';\nimport VersionsSidebarAPI from './VersionsSidebarAPI';\nimport { withAPIContext } from '../../common/api-context';\nimport { withRouterIfEnabled } from '../../common/routing';\nimport type { FeatureConfig } from '../../common/feature-checking';\nimport type { VersionActionCallback, VersionChangeCallback, SidebarLoadCallback } from './flowTypes';\nimport type { BoxItemVersion, BoxItem, FileVersions } from '../../../common/types/core';\nimport {\n ViewType,\n type ViewTypeValues,\n type InternalSidebarNavigation,\n type InternalSidebarNavigationHandler,\n} from '../../common/types/SidebarNavigation';\n\ntype Props = {\n api: API,\n features: FeatureConfig,\n fileId: string,\n hasSidebarInitialized?: boolean,\n history?: RouterHistory,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n match: Match,\n onLoad: SidebarLoadCallback,\n onUpgradeClick?: () => void,\n onVersionChange: VersionChangeCallback,\n onVersionDelete: VersionActionCallback,\n onVersionDownload: VersionActionCallback,\n onVersionPreview: VersionActionCallback,\n onVersionPromote: VersionActionCallback,\n onVersionRestore: VersionActionCallback,\n parentName: ViewTypeValues,\n routerDisabled?: boolean,\n versionId?: string,\n};\n\ntype State = {\n error?: MessageDescriptor,\n isArchived: boolean,\n isLoading: boolean,\n isWatermarked: boolean,\n versionCount: number,\n versionLimit: number,\n versions: Array<BoxItemVersion>,\n};\n\nclass VersionsSidebarContainer extends React.Component<Props, State> {\n static defaultProps = {\n onLoad: noop,\n onVersionChange: noop,\n onVersionDelete: noop,\n onVersionDownload: noop,\n onVersionPreview: noop,\n onVersionPromote: noop,\n onVersionRestore: noop,\n parentName: ViewType.DETAILS,\n };\n\n api: VersionsSidebarAPI;\n\n props: Props;\n\n state: State = {\n isArchived: false,\n isLoading: true,\n isWatermarked: false,\n versionCount: Infinity,\n versionLimit: Infinity,\n versions: [],\n };\n\n window: any = window;\n\n componentDidMount() {\n const { onLoad } = this.props;\n this.initialize();\n this.fetchData().then(() => {\n onLoad({ component: 'preview', feature: 'versions' });\n });\n }\n\n componentDidUpdate({ fileId: prevFileId, versionId: prevVersionId }: Props) {\n const { fileId, versionId } = this.props;\n\n if (fileId !== prevFileId) {\n this.refresh();\n }\n\n if (versionId !== prevVersionId) {\n this.verifyVersion();\n }\n }\n\n handleActionDelete = (versionId: string): Promise<void> => {\n this.setState({ isLoading: true });\n\n return this.api\n .deleteVersion(this.findVersion(versionId))\n .then(() => this.api.fetchVersion(versionId))\n .then(this.handleDeleteSuccess)\n .then(() => this.props.onVersionDelete(versionId))\n .catch(() => this.handleActionError(messages.versionActionDeleteError));\n };\n\n handleActionDownload = (versionId: string): Promise<void> => {\n return this.api\n .fetchDownloadUrl(this.findVersion(versionId))\n .then(openUrlInsideIframe)\n .then(() => this.props.onVersionDownload(versionId))\n .catch(() => this.handleActionError(messages.versionActionDownloadError));\n };\n\n handleActionPreview = (versionId: string): void => {\n this.updateVersion(versionId);\n this.props.onVersionPreview(versionId);\n };\n\n handleActionPromote = (versionId: string): Promise<void> => {\n this.setState({ isLoading: true });\n\n return this.api\n .promoteVersion(this.findVersion(versionId))\n .then(this.api.fetchData)\n .then(this.handleFetchSuccess)\n .then(this.handlePromoteSuccess)\n .then(() => this.props.onVersionPromote(versionId))\n .catch(() => this.handleActionError(messages.versionActionPromoteError));\n };\n\n handleActionRestore = (versionId: string): Promise<void> => {\n this.setState({ isLoading: true });\n\n return this.api\n .restoreVersion(this.findVersion(versionId))\n .then(() => this.api.fetchVersion(versionId))\n .then(this.handleRestoreSuccess)\n .then(() => this.props.onVersionRestore(versionId))\n .catch(() => this.handleActionError(messages.versionActionRestoreError));\n };\n\n handleActionError = (message: MessageDescriptor): void => {\n this.setState({\n error: message,\n isLoading: false,\n });\n };\n\n handleDeleteSuccess = (data: BoxItemVersion): void => {\n const { versionId: selectedVersionId } = this.props;\n const { id: versionId } = data;\n\n this.mergeResponse(data);\n\n // Bump the user to the current version if they deleted their selected version\n if (versionId === selectedVersionId) {\n this.updateVersionToCurrent();\n }\n };\n\n handleRestoreSuccess = (data: BoxItemVersion): void => {\n this.mergeResponse(data);\n };\n\n handleFetchError = (): void => {\n this.setState({\n error: messages.versionFetchError,\n isArchived: false,\n isLoading: false,\n isWatermarked: false,\n versionCount: 0,\n versions: [],\n });\n };\n\n handleFetchSuccess = ([fileResponse, versionsResponse]: [BoxItem, FileVersions]): [BoxItem, FileVersions] => {\n const { api } = this.props;\n const { version_limit } = fileResponse;\n const isArchived = !!getProp(fileResponse, FIELD_METADATA_ARCHIVE);\n const isWatermarked = getProp(fileResponse, 'watermark_info.is_watermarked', false);\n const versionLimit = version_limit !== null && version_limit !== undefined ? version_limit : Infinity;\n const versionsWithPermissions = api.getVersionsAPI(false).addPermissions(versionsResponse, fileResponse) || {};\n const { entries: versions, total_count: versionCount } = versionsWithPermissions;\n\n this.setState(\n {\n error: undefined,\n isArchived,\n isLoading: false,\n isWatermarked,\n versionCount,\n versionLimit,\n versions: this.sortVersions(versions),\n },\n this.verifyVersion,\n );\n\n return [fileResponse, versionsResponse];\n };\n\n handlePromoteSuccess = ([file]: [BoxItem, FileVersions]): void => {\n const { file_version: fileVersion } = file;\n\n if (fileVersion) {\n this.updateVersion(fileVersion.id);\n }\n };\n\n initialize = (): void => {\n const { api, features, fileId }: Props = this.props;\n const isArchiveFeatureEnabled = isFeatureEnabled(features, 'contentSidebar.archive.enabled');\n\n this.api = new VersionsSidebarAPI({ api, fileId, isArchiveFeatureEnabled });\n };\n\n fetchData = (): Promise<?[BoxItem, FileVersions]> => {\n return this.api.fetchData().then(this.handleFetchSuccess).catch(this.handleFetchError);\n };\n\n findVersion = (versionId: ?string): ?BoxItemVersion => {\n const { versions } = this.state;\n\n return versions.find(version => version.id === versionId);\n };\n\n getCurrentVersionId = (): ?string => {\n const { versions } = this.state;\n return versions[0] ? versions[0].id : null;\n };\n\n mergeVersions = (newVersion: BoxItemVersion): Array<BoxItemVersion> => {\n const { versions } = this.state;\n const newVersionId = newVersion ? newVersion.id : '';\n return versions.map(version => (version.id === newVersionId ? merge({ ...version }, newVersion) : version));\n };\n\n mergeResponse = (data: BoxItemVersion): void => {\n const newVersions = this.mergeVersions(data);\n\n this.setState({\n error: undefined,\n isLoading: false,\n versions: newVersions,\n });\n };\n\n refresh(): void {\n this.initialize();\n this.setState({ isLoading: true }, this.fetchData);\n }\n\n sortVersions(versions?: Array<BoxItemVersion> = []): Array<BoxItemVersion> {\n return [...versions].sort((a, b) => Date.parse(b.created_at) - Date.parse(a.created_at));\n }\n\n updateVersion = (versionId?: ?string): void => {\n const { history, match, routerDisabled, internalSidebarNavigationHandler, internalSidebarNavigation } =\n this.props;\n\n if (routerDisabled && internalSidebarNavigationHandler) {\n const navigationUpdate: InternalSidebarNavigation = { ...internalSidebarNavigation };\n if (versionId) {\n navigationUpdate.versionId = versionId;\n } else {\n delete navigationUpdate.versionId;\n }\n internalSidebarNavigationHandler(navigationUpdate);\n } else if (history) {\n history.push(generatePath(match.path, { ...match.params, versionId }));\n }\n };\n\n updateVersionToCurrent = (): void => {\n this.updateVersion(this.getCurrentVersionId());\n };\n\n verifyVersion = () => {\n const { onVersionChange, versionId } = this.props;\n const selectedVersion = this.findVersion(versionId);\n\n if (selectedVersion) {\n onVersionChange(selectedVersion, {\n currentVersionId: this.getCurrentVersionId(),\n updateVersionToCurrent: this.updateVersionToCurrent,\n });\n } else {\n this.updateVersionToCurrent();\n }\n };\n\n render() {\n const {\n fileId,\n parentName,\n onUpgradeClick,\n routerDisabled,\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n } = this.props;\n\n if (onUpgradeClick) {\n return (\n <StaticVersionsSidebar\n onUpgradeClick={onUpgradeClick}\n parentName={parentName}\n routerDisabled={routerDisabled}\n internalSidebarNavigation={internalSidebarNavigation}\n internalSidebarNavigationHandler={internalSidebarNavigationHandler}\n {...this.state}\n />\n );\n }\n\n return (\n <VersionsSidebar\n fileId={fileId}\n internalSidebarNavigation={internalSidebarNavigation}\n internalSidebarNavigationHandler={internalSidebarNavigationHandler}\n onDelete={this.handleActionDelete}\n onDownload={this.handleActionDownload}\n onPreview={this.handleActionPreview}\n onPromote={this.handleActionPromote}\n onRestore={this.handleActionRestore}\n parentName={parentName}\n routerDisabled={routerDisabled}\n {...this.state}\n />\n );\n }\n}\n\nexport type VersionsSidebarProps = Props;\nexport { VersionsSidebarContainer as VersionsSidebarContainerComponent };\nexport default flow([withRouterIfEnabled, withAPIContext, withFeatureConsumer])(VersionsSidebarContainer);\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,OAAO,MAAM,YAAY;AAChC,OAAOC,KAAK,MAAM,cAAc;AAChC,OAAOC,IAAI,MAAM,aAAa;AAC9B,SAASC,YAAY,QAAQ,kBAAkB;AAG/C,SAASC,mBAAmB,EAAEC,gBAAgB,QAAQ,+BAA+B;AACrF,OAAOC,GAAG,MAAM,cAAc;AAC9B,SAASC,sBAAsB,QAAQ,oBAAoB;AAC3D,OAAOC,QAAQ,MAAM,YAAY;AACjC,OAAOC,mBAAmB,MAAM,uBAAuB;AACvD,OAAOC,qBAAqB,MAAM,wBAAwB;AAC1D,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,kBAAkB,MAAM,sBAAsB;AACrD,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,mBAAmB,QAAQ,sBAAsB;AAI1D,SACIC,QAAQ,QAIL,sCAAsC;AAkC7C,MAAMC,wBAAwB,SAASlB,KAAK,CAACmB,SAAS,CAAe;EAAAC,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,gBAgBlD;MACXC,UAAU,EAAE,KAAK;MACjBC,SAAS,EAAE,IAAI;MACfC,aAAa,EAAE,KAAK;MACpBC,YAAY,EAAEC,QAAQ;MACtBC,YAAY,EAAED,QAAQ;MACtBE,QAAQ,EAAE;IACd,CAAC;IAAAP,eAAA,iBAEaQ,MAAM;IAAAR,eAAA,6BAsBES,SAAiB,IAAoB;MACvD,IAAI,CAACC,QAAQ,CAAC;QAAER,SAAS,EAAE;MAAK,CAAC,CAAC;MAElC,OAAO,IAAI,CAACS,GAAG,CACVC,aAAa,CAAC,IAAI,CAACC,WAAW,CAACJ,SAAS,CAAC,CAAC,CAC1CK,IAAI,CAAC,MAAM,IAAI,CAACH,GAAG,CAACI,YAAY,CAACN,SAAS,CAAC,CAAC,CAC5CK,IAAI,CAAC,IAAI,CAACE,mBAAmB,CAAC,CAC9BF,IAAI,CAAC,MAAM,IAAI,CAACG,KAAK,CAACC,eAAe,CAACT,SAAS,CAAC,CAAC,CACjDU,KAAK,CAAC,MAAM,IAAI,CAACC,iBAAiB,CAAChC,QAAQ,CAACiC,wBAAwB,CAAC,CAAC;IAC/E,CAAC;IAAArB,eAAA,+BAEuBS,SAAiB,IAAoB;MACzD,OAAO,IAAI,CAACE,GAAG,CACVW,gBAAgB,CAAC,IAAI,CAACT,WAAW,CAACJ,SAAS,CAAC,CAAC,CAC7CK,IAAI,CAACzB,mBAAmB,CAAC,CACzByB,IAAI,CAAC,MAAM,IAAI,CAACG,KAAK,CAACM,iBAAiB,CAACd,SAAS,CAAC,CAAC,CACnDU,KAAK,CAAC,MAAM,IAAI,CAACC,iBAAiB,CAAChC,QAAQ,CAACoC,0BAA0B,CAAC,CAAC;IACjF,CAAC;IAAAxB,eAAA,8BAEsBS,SAAiB,IAAW;MAC/C,IAAI,CAACgB,aAAa,CAAChB,SAAS,CAAC;MAC7B,IAAI,CAACQ,KAAK,CAACS,gBAAgB,CAACjB,SAAS,CAAC;IAC1C,CAAC;IAAAT,eAAA,8BAEsBS,SAAiB,IAAoB;MACxD,IAAI,CAACC,QAAQ,CAAC;QAAER,SAAS,EAAE;MAAK,CAAC,CAAC;MAElC,OAAO,IAAI,CAACS,GAAG,CACVgB,cAAc,CAAC,IAAI,CAACd,WAAW,CAACJ,SAAS,CAAC,CAAC,CAC3CK,IAAI,CAAC,IAAI,CAACH,GAAG,CAACiB,SAAS,CAAC,CACxBd,IAAI,CAAC,IAAI,CAACe,kBAAkB,CAAC,CAC7Bf,IAAI,CAAC,IAAI,CAACgB,oBAAoB,CAAC,CAC/BhB,IAAI,CAAC,MAAM,IAAI,CAACG,KAAK,CAACc,gBAAgB,CAACtB,SAAS,CAAC,CAAC,CAClDU,KAAK,CAAC,MAAM,IAAI,CAACC,iBAAiB,CAAChC,QAAQ,CAAC4C,yBAAyB,CAAC,CAAC;IAChF,CAAC;IAAAhC,eAAA,8BAEsBS,SAAiB,IAAoB;MACxD,IAAI,CAACC,QAAQ,CAAC;QAAER,SAAS,EAAE;MAAK,CAAC,CAAC;MAElC,OAAO,IAAI,CAACS,GAAG,CACVsB,cAAc,CAAC,IAAI,CAACpB,WAAW,CAACJ,SAAS,CAAC,CAAC,CAC3CK,IAAI,CAAC,MAAM,IAAI,CAACH,GAAG,CAACI,YAAY,CAACN,SAAS,CAAC,CAAC,CAC5CK,IAAI,CAAC,IAAI,CAACoB,oBAAoB,CAAC,CAC/BpB,IAAI,CAAC,MAAM,IAAI,CAACG,KAAK,CAACkB,gBAAgB,CAAC1B,SAAS,CAAC,CAAC,CAClDU,KAAK,CAAC,MAAM,IAAI,CAACC,iBAAiB,CAAChC,QAAQ,CAACgD,yBAAyB,CAAC,CAAC;IAChF,CAAC;IAAApC,eAAA,4BAEoBqC,OAA0B,IAAW;MACtD,IAAI,CAAC3B,QAAQ,CAAC;QACV4B,KAAK,EAAED,OAAO;QACdnC,SAAS,EAAE;MACf,CAAC,CAAC;IACN,CAAC;IAAAF,eAAA,8BAEsBuC,IAAoB,IAAW;MAClD,MAAM;QAAE9B,SAAS,EAAE+B;MAAkB,CAAC,GAAG,IAAI,CAACvB,KAAK;MACnD,MAAM;QAAEwB,EAAE,EAAEhC;MAAU,CAAC,GAAG8B,IAAI;MAE9B,IAAI,CAACG,aAAa,CAACH,IAAI,CAAC;;MAExB;MACA,IAAI9B,SAAS,KAAK+B,iBAAiB,EAAE;QACjC,IAAI,CAACG,sBAAsB,CAAC,CAAC;MACjC;IACJ,CAAC;IAAA3C,eAAA,+BAEuBuC,IAAoB,IAAW;MACnD,IAAI,CAACG,aAAa,CAACH,IAAI,CAAC;IAC5B,CAAC;IAAAvC,eAAA,2BAEkB,MAAY;MAC3B,IAAI,CAACU,QAAQ,CAAC;QACV4B,KAAK,EAAElD,QAAQ,CAACwD,iBAAiB;QACjC3C,UAAU,EAAE,KAAK;QACjBC,SAAS,EAAE,KAAK;QAChBC,aAAa,EAAE,KAAK;QACpBC,YAAY,EAAE,CAAC;QACfG,QAAQ,EAAE;MACd,CAAC,CAAC;IACN,CAAC;IAAAP,eAAA,6BAEoB,CAAC,CAAC6C,YAAY,EAAEC,gBAAgB,CAA0B,KAA8B;MACzG,MAAM;QAAEnC;MAAI,CAAC,GAAG,IAAI,CAACM,KAAK;MAC1B,MAAM;QAAE8B;MAAc,CAAC,GAAGF,YAAY;MACtC,MAAM5C,UAAU,GAAG,CAAC,CAACrB,OAAO,CAACiE,YAAY,EAAE1D,sBAAsB,CAAC;MAClE,MAAMgB,aAAa,GAAGvB,OAAO,CAACiE,YAAY,EAAE,+BAA+B,EAAE,KAAK,CAAC;MACnF,MAAMvC,YAAY,GAAGyC,aAAa,KAAK,IAAI,IAAIA,aAAa,KAAKC,SAAS,GAAGD,aAAa,GAAG1C,QAAQ;MACrG,MAAM4C,uBAAuB,GAAGtC,GAAG,CAACuC,cAAc,CAAC,KAAK,CAAC,CAACC,cAAc,CAACL,gBAAgB,EAAED,YAAY,CAAC,IAAI,CAAC,CAAC;MAC9G,MAAM;QAAEO,OAAO,EAAE7C,QAAQ;QAAE8C,WAAW,EAAEjD;MAAa,CAAC,GAAG6C,uBAAuB;MAEhF,IAAI,CAACvC,QAAQ,CACT;QACI4B,KAAK,EAAEU,SAAS;QAChB/C,UAAU;QACVC,SAAS,EAAE,KAAK;QAChBC,aAAa;QACbC,YAAY;QACZE,YAAY;QACZC,QAAQ,EAAE,IAAI,CAAC+C,YAAY,CAAC/C,QAAQ;MACxC,CAAC,EACD,IAAI,CAACgD,aACT,CAAC;MAED,OAAO,CAACV,YAAY,EAAEC,gBAAgB,CAAC;IAC3C,CAAC;IAAA9C,eAAA,+BAEsB,CAAC,CAACwD,IAAI,CAA0B,KAAW;MAC9D,MAAM;QAAEC,YAAY,EAAEC;MAAY,CAAC,GAAGF,IAAI;MAE1C,IAAIE,WAAW,EAAE;QACb,IAAI,CAACjC,aAAa,CAACiC,WAAW,CAACjB,EAAE,CAAC;MACtC;IACJ,CAAC;IAAAzC,eAAA,qBAEY,MAAY;MACrB,MAAM;QAAEW,GAAG;QAAEgD,QAAQ;QAAEC;MAAc,CAAC,GAAG,IAAI,CAAC3C,KAAK;MACnD,MAAM4C,uBAAuB,GAAG5E,gBAAgB,CAAC0E,QAAQ,EAAE,gCAAgC,CAAC;MAE5F,IAAI,CAAChD,GAAG,GAAG,IAAInB,kBAAkB,CAAC;QAAEmB,GAAG;QAAEiD,MAAM;QAAEC;MAAwB,CAAC,CAAC;IAC/E,CAAC;IAAA7D,eAAA,oBAEW,MAAyC;MACjD,OAAO,IAAI,CAACW,GAAG,CAACiB,SAAS,CAAC,CAAC,CAACd,IAAI,CAAC,IAAI,CAACe,kBAAkB,CAAC,CAACV,KAAK,CAAC,IAAI,CAAC2C,gBAAgB,CAAC;IAC1F,CAAC;IAAA9D,eAAA,sBAEcS,SAAkB,IAAsB;MACnD,MAAM;QAAEF;MAAS,CAAC,GAAG,IAAI,CAACwD,KAAK;MAE/B,OAAOxD,QAAQ,CAACyD,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACxB,EAAE,KAAKhC,SAAS,CAAC;IAC7D,CAAC;IAAAT,eAAA,8BAEqB,MAAe;MACjC,MAAM;QAAEO;MAAS,CAAC,GAAG,IAAI,CAACwD,KAAK;MAC/B,OAAOxD,QAAQ,CAAC,CAAC,CAAC,GAAGA,QAAQ,CAAC,CAAC,CAAC,CAACkC,EAAE,GAAG,IAAI;IAC9C,CAAC;IAAAzC,eAAA,wBAEgBkE,UAA0B,IAA4B;MACnE,MAAM;QAAE3D;MAAS,CAAC,GAAG,IAAI,CAACwD,KAAK;MAC/B,MAAMI,YAAY,GAAGD,UAAU,GAAGA,UAAU,CAACzB,EAAE,GAAG,EAAE;MACpD,OAAOlC,QAAQ,CAAC6D,GAAG,CAACH,OAAO,IAAKA,OAAO,CAACxB,EAAE,KAAK0B,YAAY,GAAGtF,KAAK,CAAAwF,aAAA,KAAMJ,OAAO,GAAIC,UAAU,CAAC,GAAGD,OAAQ,CAAC;IAC/G,CAAC;IAAAjE,eAAA,wBAEgBuC,IAAoB,IAAW;MAC5C,MAAM+B,WAAW,GAAG,IAAI,CAACC,aAAa,CAAChC,IAAI,CAAC;MAE5C,IAAI,CAAC7B,QAAQ,CAAC;QACV4B,KAAK,EAAEU,SAAS;QAChB9C,SAAS,EAAE,KAAK;QAChBK,QAAQ,EAAE+D;MACd,CAAC,CAAC;IACN,CAAC;IAAAtE,eAAA,wBAWgBS,SAAmB,IAAW;MAC3C,MAAM;QAAE+D,OAAO;QAAEC,KAAK;QAAEC,cAAc;QAAEC,gCAAgC;QAAEC;MAA0B,CAAC,GACjG,IAAI,CAAC3D,KAAK;MAEd,IAAIyD,cAAc,IAAIC,gCAAgC,EAAE;QACpD,MAAME,gBAA2C,GAAAR,aAAA,KAAQO,yBAAyB,CAAE;QACpF,IAAInE,SAAS,EAAE;UACXoE,gBAAgB,CAACpE,SAAS,GAAGA,SAAS;QAC1C,CAAC,MAAM;UACH,OAAOoE,gBAAgB,CAACpE,SAAS;QACrC;QACAkE,gCAAgC,CAACE,gBAAgB,CAAC;MACtD,CAAC,MAAM,IAAIL,OAAO,EAAE;QAChBA,OAAO,CAACM,IAAI,CAAC/F,YAAY,CAAC0F,KAAK,CAACM,IAAI,EAAAV,aAAA,CAAAA,aAAA,KAAOI,KAAK,CAACO,MAAM;UAAEvE;QAAS,EAAE,CAAC,CAAC;MAC1E;IACJ,CAAC;IAAAT,eAAA,iCAEwB,MAAY;MACjC,IAAI,CAACyB,aAAa,CAAC,IAAI,CAACwD,mBAAmB,CAAC,CAAC,CAAC;IAClD,CAAC;IAAAjF,eAAA,wBAEe,MAAM;MAClB,MAAM;QAAEkF,eAAe;QAAEzE;MAAU,CAAC,GAAG,IAAI,CAACQ,KAAK;MACjD,MAAMkE,eAAe,GAAG,IAAI,CAACtE,WAAW,CAACJ,SAAS,CAAC;MAEnD,IAAI0E,eAAe,EAAE;QACjBD,eAAe,CAACC,eAAe,EAAE;UAC7BC,gBAAgB,EAAE,IAAI,CAACH,mBAAmB,CAAC,CAAC;UAC5CtC,sBAAsB,EAAE,IAAI,CAACA;QACjC,CAAC,CAAC;MACN,CAAC,MAAM;QACH,IAAI,CAACA,sBAAsB,CAAC,CAAC;MACjC;IACJ,CAAC;EAAA;EAtND0C,iBAAiBA,CAAA,EAAG;IAChB,MAAM;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACrE,KAAK;IAC7B,IAAI,CAACsE,UAAU,CAAC,CAAC;IACjB,IAAI,CAAC3D,SAAS,CAAC,CAAC,CAACd,IAAI,CAAC,MAAM;MACxBwE,MAAM,CAAC;QAAEE,SAAS,EAAE,SAAS;QAAEC,OAAO,EAAE;MAAW,CAAC,CAAC;IACzD,CAAC,CAAC;EACN;EAEAC,kBAAkBA,CAAC;IAAE9B,MAAM,EAAE+B,UAAU;IAAElF,SAAS,EAAEmF;EAAqB,CAAC,EAAE;IACxE,MAAM;MAAEhC,MAAM;MAAEnD;IAAU,CAAC,GAAG,IAAI,CAACQ,KAAK;IAExC,IAAI2C,MAAM,KAAK+B,UAAU,EAAE;MACvB,IAAI,CAACE,OAAO,CAAC,CAAC;IAClB;IAEA,IAAIpF,SAAS,KAAKmF,aAAa,EAAE;MAC7B,IAAI,CAACrC,aAAa,CAAC,CAAC;IACxB;EACJ;EA0JAsC,OAAOA,CAAA,EAAS;IACZ,IAAI,CAACN,UAAU,CAAC,CAAC;IACjB,IAAI,CAAC7E,QAAQ,CAAC;MAAER,SAAS,EAAE;IAAK,CAAC,EAAE,IAAI,CAAC0B,SAAS,CAAC;EACtD;EAEA0B,YAAYA,CAAC/C,QAAgC,GAAG,EAAE,EAAyB;IACvE,OAAO,CAAC,GAAGA,QAAQ,CAAC,CAACuF,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKC,IAAI,CAACC,KAAK,CAACF,CAAC,CAACG,UAAU,CAAC,GAAGF,IAAI,CAACC,KAAK,CAACH,CAAC,CAACI,UAAU,CAAC,CAAC;EAC5F;EAqCAC,MAAMA,CAAA,EAAG;IACL,MAAM;MACFxC,MAAM;MACNyC,UAAU;MACVC,cAAc;MACd5B,cAAc;MACdE,yBAAyB;MACzBD;IACJ,CAAC,GAAG,IAAI,CAAC1D,KAAK;IAEd,IAAIqF,cAAc,EAAE;MAChB,oBACI5H,KAAA,CAAA6H,aAAA,CAACjH,qBAAqB,EAAAkH,QAAA;QAClBF,cAAc,EAAEA,cAAe;QAC/BD,UAAU,EAAEA,UAAW;QACvB3B,cAAc,EAAEA,cAAe;QAC/BE,yBAAyB,EAAEA,yBAA0B;QACrDD,gCAAgC,EAAEA;MAAiC,GAC/D,IAAI,CAACZ,KAAK,CACjB,CAAC;IAEV;IAEA,oBACIrF,KAAA,CAAA6H,aAAA,CAAChH,eAAe,EAAAiH,QAAA;MACZ5C,MAAM,EAAEA,MAAO;MACfgB,yBAAyB,EAAEA,yBAA0B;MACrDD,gCAAgC,EAAEA,gCAAiC;MACnE8B,QAAQ,EAAE,IAAI,CAACC,kBAAmB;MAClCC,UAAU,EAAE,IAAI,CAACC,oBAAqB;MACtCC,SAAS,EAAE,IAAI,CAACC,mBAAoB;MACpCC,SAAS,EAAE,IAAI,CAACC,mBAAoB;MACpCC,SAAS,EAAE,IAAI,CAACC,mBAAoB;MACpCb,UAAU,EAAEA,UAAW;MACvB3B,cAAc,EAAEA;IAAe,GAC3B,IAAI,CAACX,KAAK,CACjB,CAAC;EAEV;AACJ;AAAC/D,eAAA,CA1RKJ,wBAAwB,kBACJ;EAClB0F,MAAM,EAAExG,IAAI;EACZoG,eAAe,EAAEpG,IAAI;EACrBoC,eAAe,EAAEpC,IAAI;EACrByC,iBAAiB,EAAEzC,IAAI;EACvB4C,gBAAgB,EAAE5C,IAAI;EACtBiD,gBAAgB,EAAEjD,IAAI;EACtBqD,gBAAgB,EAAErD,IAAI;EACtBuH,UAAU,EAAE1G,QAAQ,CAACwH;AACzB,CAAC;AAmRL,SAASvH,wBAAwB,IAAIwH,iCAAiC;AACtE,eAAezI,IAAI,CAAC,CAACe,mBAAmB,EAAED,cAAc,EAAET,mBAAmB,CAAC,CAAC,CAACY,wBAAwB,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import type { EnumType, MetadataFormFieldValue } from '@box/metadata-filter';
|
|
2
3
|
import { type MetadataViewProps } from '@box/metadata-view';
|
|
3
|
-
import type { MetadataTemplate } from '../../common/types/metadata';
|
|
4
4
|
import type { Collection } from '../../common/types/core';
|
|
5
|
-
|
|
5
|
+
import type { MetadataTemplate } from '../../common/types/metadata';
|
|
6
|
+
type EnumToStringArray<T> = T extends EnumType ? string[] : T;
|
|
7
|
+
type ExternalMetadataFormFieldValue = EnumToStringArray<MetadataFormFieldValue>;
|
|
8
|
+
type ExternalFilterValues = Record<string, {
|
|
9
|
+
value: ExternalMetadataFormFieldValue;
|
|
10
|
+
}>;
|
|
11
|
+
type ActionBarProps = Omit<MetadataViewProps['actionBarProps'], 'initialFilterValues' | 'onFilterSubmit' | 'filterGroups'> & {
|
|
12
|
+
initialFilterValues?: ExternalFilterValues;
|
|
13
|
+
onFilterSubmit?: (filterValues: ExternalFilterValues) => void;
|
|
14
|
+
};
|
|
15
|
+
export interface MetadataViewContainerProps extends Omit<MetadataViewProps, 'items' | 'actionBarProps'> {
|
|
16
|
+
actionBarProps?: ActionBarProps;
|
|
6
17
|
currentCollection: Collection;
|
|
7
18
|
metadataTemplate: MetadataTemplate;
|
|
8
19
|
}
|
|
@@ -4,5 +4,6 @@ type Story = StoryObj<typeof ContentExplorer>;
|
|
|
4
4
|
export declare const metadataView: Story;
|
|
5
5
|
export declare const metadataViewV2: Story;
|
|
6
6
|
export declare const metadataViewV2WithCustomActions: Story;
|
|
7
|
+
export declare const metadataViewV2WithInitialFilterValues: Story;
|
|
7
8
|
declare const meta: Meta<typeof ContentExplorer>;
|
|
8
9
|
export default meta;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "box-ui-elements",
|
|
3
|
-
"version": "23.
|
|
3
|
+
"version": "23.5.0-beta.1",
|
|
4
4
|
"description": "Box UI Elements",
|
|
5
5
|
"author": "Box (https://www.box.com/)",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -132,15 +132,15 @@
|
|
|
132
132
|
"@box/blueprint-web-assets": "4.61.5",
|
|
133
133
|
"@box/box-ai-agent-selector": "^0.52.0",
|
|
134
134
|
"@box/box-ai-content-answers": "^0.124.1",
|
|
135
|
-
"@box/box-item-type-selector": "^0.
|
|
135
|
+
"@box/box-item-type-selector": "^0.63.12",
|
|
136
136
|
"@box/cldr-data": "^34.2.0",
|
|
137
137
|
"@box/combobox-with-api": "^0.34.9",
|
|
138
138
|
"@box/frontend": "^11.0.1",
|
|
139
|
-
"@box/item-icon": "^0.17.
|
|
139
|
+
"@box/item-icon": "^0.17.15",
|
|
140
140
|
"@box/languages": "^1.0.0",
|
|
141
141
|
"@box/metadata-editor": "^0.122.12",
|
|
142
|
-
"@box/metadata-filter": "^1.
|
|
143
|
-
"@box/metadata-view": "^0.
|
|
142
|
+
"@box/metadata-filter": "^1.19.2",
|
|
143
|
+
"@box/metadata-view": "^0.41.2",
|
|
144
144
|
"@box/react-virtualized": "^9.22.3-rc-box.10",
|
|
145
145
|
"@box/types": "^0.2.1",
|
|
146
146
|
"@cfaester/enzyme-adapter-react-18": "^0.8.0",
|
|
@@ -301,13 +301,13 @@
|
|
|
301
301
|
"@box/blueprint-web-assets": "4.61.5",
|
|
302
302
|
"@box/box-ai-agent-selector": "^0.52.0",
|
|
303
303
|
"@box/box-ai-content-answers": "^0.124.1",
|
|
304
|
-
"@box/box-item-type-selector": "^0.
|
|
304
|
+
"@box/box-item-type-selector": "^0.63.12",
|
|
305
305
|
"@box/cldr-data": ">=34.2.0",
|
|
306
306
|
"@box/combobox-with-api": "^0.34.9",
|
|
307
|
-
"@box/item-icon": "^0.17.
|
|
307
|
+
"@box/item-icon": "^0.17.15",
|
|
308
308
|
"@box/metadata-editor": "^0.122.12",
|
|
309
|
-
"@box/metadata-filter": "^1.
|
|
310
|
-
"@box/metadata-view": "^0.
|
|
309
|
+
"@box/metadata-filter": "^1.19.2",
|
|
310
|
+
"@box/metadata-view": "^0.41.2",
|
|
311
311
|
"@box/react-virtualized": "^9.22.3-rc-box.10",
|
|
312
312
|
"@box/types": "^0.2.1",
|
|
313
313
|
"@hapi/address": "^2.1.4",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { MemoryRouter } from 'react-router-dom';
|
|
4
|
+
import { render } from '../../../../test-utils/testing-library';
|
|
5
|
+
import withRouterIfEnabled from '../withRouterIfEnabled';
|
|
6
|
+
|
|
7
|
+
const TestComponent = (props: any) => {
|
|
8
|
+
const { history, location, match, routerDisabled } = props;
|
|
9
|
+
return (
|
|
10
|
+
<div
|
|
11
|
+
data-testid="test-component"
|
|
12
|
+
data-router-disabled={routerDisabled ? 'true' : undefined}
|
|
13
|
+
data-has-history={history ? 'true' : undefined}
|
|
14
|
+
data-has-location={location ? 'true' : undefined}
|
|
15
|
+
data-has-match={match ? 'true' : undefined}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
TestComponent.displayName = 'TestComponent';
|
|
20
|
+
|
|
21
|
+
const WithRouterIfEnabled = withRouterIfEnabled(TestComponent);
|
|
22
|
+
|
|
23
|
+
test('injects router props when wrapped in a Router', () => {
|
|
24
|
+
const { getByTestId } = render(
|
|
25
|
+
<MemoryRouter initialEntries={[{ pathname: '/foo' }]}>
|
|
26
|
+
<WithRouterIfEnabled />
|
|
27
|
+
</MemoryRouter>,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const component = getByTestId('test-component');
|
|
31
|
+
expect(component).toHaveAttribute('data-has-history', 'true');
|
|
32
|
+
expect(component).toHaveAttribute('data-has-location', 'true');
|
|
33
|
+
expect(component).toHaveAttribute('data-has-match', 'true');
|
|
34
|
+
expect(component).not.toHaveAttribute('data-router-disabled');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('renders without Router and without router props (routerDisabled prop)', () => {
|
|
38
|
+
const { getByTestId } = render(<WithRouterIfEnabled routerDisabled />);
|
|
39
|
+
const component = getByTestId('test-component');
|
|
40
|
+
expect(component).not.toHaveAttribute('data-has-history');
|
|
41
|
+
expect(component).not.toHaveAttribute('data-has-location');
|
|
42
|
+
expect(component).not.toHaveAttribute('data-has-match');
|
|
43
|
+
expect(component).toHaveAttribute('data-router-disabled', 'true');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('renders without Router and without router props (feature flag)', () => {
|
|
47
|
+
const features = { routerDisabled: { value: true } };
|
|
48
|
+
const { getByTestId } = render(<WithRouterIfEnabled features={features} />);
|
|
49
|
+
|
|
50
|
+
const component = getByTestId('test-component');
|
|
51
|
+
expect(component).not.toHaveAttribute('data-has-history');
|
|
52
|
+
expect(component).not.toHaveAttribute('data-has-location');
|
|
53
|
+
expect(component).not.toHaveAttribute('data-has-match');
|
|
54
|
+
});
|
|
55
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { withRouter } from 'react-router-dom';
|
|
4
|
+
import { isFeatureEnabled } from '../feature-checking';
|
|
5
|
+
|
|
6
|
+
export default function withRouterIfEnabled(Wrapped: React.ComponentType<any>) {
|
|
7
|
+
|
|
8
|
+
const WrappedWithRouter = withRouter(Wrapped);
|
|
9
|
+
|
|
10
|
+
const WithRouterIfEnabled = (props: any) => {
|
|
11
|
+
const routerDisabled =
|
|
12
|
+
props?.routerDisabled === true || isFeatureEnabled(props?.features, 'routerDisabled.value');
|
|
13
|
+
|
|
14
|
+
const Component = routerDisabled ? Wrapped : WrappedWithRouter;
|
|
15
|
+
|
|
16
|
+
return <Component {...props} />;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const name = Wrapped.displayName || Wrapped.name || 'Component';
|
|
20
|
+
WithRouterIfEnabled.displayName = `withRouterIfEnabled(${name})`;
|
|
21
|
+
|
|
22
|
+
return WithRouterIfEnabled;
|
|
23
|
+
}
|
|
24
|
+
|
|
@@ -1,9 +1,58 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import type { EnumType, FloatType, MetadataFormFieldValue, RangeType } from '@box/metadata-filter';
|
|
2
3
|
import { MetadataView, type MetadataViewProps } from '@box/metadata-view';
|
|
3
|
-
|
|
4
|
+
|
|
4
5
|
import type { Collection } from '../../common/types/core';
|
|
6
|
+
import type { MetadataTemplate } from '../../common/types/metadata';
|
|
7
|
+
|
|
8
|
+
// Public-friendly version of MetadataFormFieldValue from @box/metadata-filter
|
|
9
|
+
// (string[] for enum type, range/float objects stay the same)
|
|
10
|
+
type EnumToStringArray<T> = T extends EnumType ? string[] : T;
|
|
11
|
+
type ExternalMetadataFormFieldValue = EnumToStringArray<MetadataFormFieldValue>;
|
|
12
|
+
|
|
13
|
+
type ExternalFilterValues = Record<
|
|
14
|
+
string,
|
|
15
|
+
{
|
|
16
|
+
value: ExternalMetadataFormFieldValue;
|
|
17
|
+
}
|
|
18
|
+
>;
|
|
5
19
|
|
|
6
|
-
|
|
20
|
+
type ActionBarProps = Omit<
|
|
21
|
+
MetadataViewProps['actionBarProps'],
|
|
22
|
+
'initialFilterValues' | 'onFilterSubmit' | 'filterGroups'
|
|
23
|
+
> & {
|
|
24
|
+
initialFilterValues?: ExternalFilterValues;
|
|
25
|
+
onFilterSubmit?: (filterValues: ExternalFilterValues) => void;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
function transformInitialFilterValuesToInternal(
|
|
29
|
+
publicValues?: ExternalFilterValues,
|
|
30
|
+
): Record<string, { value: MetadataFormFieldValue }> | undefined {
|
|
31
|
+
if (!publicValues) return undefined;
|
|
32
|
+
|
|
33
|
+
return Object.entries(publicValues).reduce<Record<string, { value: MetadataFormFieldValue }>>(
|
|
34
|
+
(acc, [key, { value }]) => {
|
|
35
|
+
acc[key] = Array.isArray(value) ? { value: { enum: value } } : { value };
|
|
36
|
+
return acc;
|
|
37
|
+
},
|
|
38
|
+
{},
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function transformInternalFieldsToPublic(
|
|
43
|
+
fields: Record<string, { value: MetadataFormFieldValue }>,
|
|
44
|
+
): ExternalFilterValues {
|
|
45
|
+
return Object.entries(fields).reduce<ExternalFilterValues>((acc, [key, { value }]) => {
|
|
46
|
+
acc[key] =
|
|
47
|
+
'enum' in value && Array.isArray(value.enum)
|
|
48
|
+
? { value: value.enum }
|
|
49
|
+
: { value: value as RangeType | FloatType };
|
|
50
|
+
return acc;
|
|
51
|
+
}, {});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface MetadataViewContainerProps extends Omit<MetadataViewProps, 'items' | 'actionBarProps'> {
|
|
55
|
+
actionBarProps?: ActionBarProps;
|
|
7
56
|
currentCollection: Collection;
|
|
8
57
|
metadataTemplate: MetadataTemplate;
|
|
9
58
|
}
|
|
@@ -16,6 +65,7 @@ const MetadataViewContainer = ({
|
|
|
16
65
|
...rest
|
|
17
66
|
}: MetadataViewContainerProps) => {
|
|
18
67
|
const { items = [] } = currentCollection;
|
|
68
|
+
const { initialFilterValues: initialFilterValuesProp, onFilterSubmit: onFilterSubmitProp } = actionBarProps ?? {};
|
|
19
69
|
|
|
20
70
|
const filterGroups = React.useMemo(
|
|
21
71
|
() => [
|
|
@@ -36,17 +86,32 @@ const MetadataViewContainer = ({
|
|
|
36
86
|
[metadataTemplate],
|
|
37
87
|
);
|
|
38
88
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
filterGroups,
|
|
44
|
-
}}
|
|
45
|
-
columns={columns}
|
|
46
|
-
items={items}
|
|
47
|
-
{...rest}
|
|
48
|
-
/>
|
|
89
|
+
// Transform initial filter values to internal field format
|
|
90
|
+
const initialFilterValues = React.useMemo(
|
|
91
|
+
() => transformInitialFilterValuesToInternal(initialFilterValuesProp),
|
|
92
|
+
[initialFilterValuesProp],
|
|
49
93
|
);
|
|
94
|
+
|
|
95
|
+
// Transform field values to public-friendly format
|
|
96
|
+
const onFilterSubmit = React.useCallback(
|
|
97
|
+
(fields: Record<string, { value: MetadataFormFieldValue }>) => {
|
|
98
|
+
if (!onFilterSubmitProp) return;
|
|
99
|
+
const transformed = transformInternalFieldsToPublic(fields);
|
|
100
|
+
onFilterSubmitProp(transformed);
|
|
101
|
+
},
|
|
102
|
+
[onFilterSubmitProp],
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const transformedActionBarProps = React.useMemo(() => {
|
|
106
|
+
return {
|
|
107
|
+
...actionBarProps,
|
|
108
|
+
initialFilterValues,
|
|
109
|
+
onFilterSubmit,
|
|
110
|
+
filterGroups,
|
|
111
|
+
};
|
|
112
|
+
}, [actionBarProps, initialFilterValues, onFilterSubmit, filterGroups]);
|
|
113
|
+
|
|
114
|
+
return <MetadataView actionBarProps={transformedActionBarProps} columns={columns} items={items} {...rest} />;
|
|
50
115
|
};
|
|
51
116
|
|
|
52
117
|
export default MetadataViewContainer;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
import MetadataViewContainer, { MetadataViewContainerProps } from '../MetadataViewContainer';
|
|
2
|
+
|
|
4
3
|
import type { Collection } from '../../../common/types/core';
|
|
5
4
|
import type { MetadataTemplate, MetadataTemplateField } from '../../../common/types/metadata';
|
|
5
|
+
import { render, screen, userEvent, waitFor, within } from '../../../test-utils/testing-library';
|
|
6
|
+
import MetadataViewContainer, { type MetadataViewContainerProps } from '../MetadataViewContainer';
|
|
6
7
|
|
|
7
8
|
describe('elements/content-explorer/MetadataViewContainer', () => {
|
|
8
9
|
const mockItems = [
|
|
@@ -18,7 +19,7 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
|
|
|
18
19
|
type: 'string',
|
|
19
20
|
},
|
|
20
21
|
{
|
|
21
|
-
id: '
|
|
22
|
+
id: 'field2',
|
|
22
23
|
key: 'industry',
|
|
23
24
|
displayName: 'Industry',
|
|
24
25
|
type: 'enum',
|
|
@@ -80,4 +81,38 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
|
|
|
80
81
|
expect(screen.getByText('File 1.txt')).toBeInTheDocument();
|
|
81
82
|
expect(screen.getByText('File 2.pdf')).toBeInTheDocument();
|
|
82
83
|
});
|
|
84
|
+
|
|
85
|
+
test('should pass values as string[] on submit', async () => {
|
|
86
|
+
const onFilterSubmit = jest.fn();
|
|
87
|
+
const template: MetadataTemplate = {
|
|
88
|
+
...mockMetadataTemplate,
|
|
89
|
+
fields: [
|
|
90
|
+
{
|
|
91
|
+
id: 'ms1',
|
|
92
|
+
key: 'role',
|
|
93
|
+
displayName: 'Contact Role',
|
|
94
|
+
type: 'multiSelect',
|
|
95
|
+
options: [
|
|
96
|
+
{ id: 'r1', key: 'Developer' },
|
|
97
|
+
{ id: 'r2', key: 'Marketing' },
|
|
98
|
+
{ id: 'r3', key: 'Sales' },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
renderComponent({ metadataTemplate: template, actionBarProps: { onFilterSubmit } });
|
|
105
|
+
|
|
106
|
+
await userEvent().click(screen.getByRole('button', { name: /Contact Role/ }));
|
|
107
|
+
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Developer' }));
|
|
108
|
+
// Re-open the chip to select a second value (menu closes after submit)
|
|
109
|
+
await userEvent().click(screen.getByRole('button', { name: /Contact Role/ }));
|
|
110
|
+
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Marketing' }));
|
|
111
|
+
|
|
112
|
+
await waitFor(() => expect(onFilterSubmit).toHaveBeenCalledTimes(2));
|
|
113
|
+
const firstCall = onFilterSubmit.mock.calls[0][0];
|
|
114
|
+
const secondCall = onFilterSubmit.mock.calls[1][0];
|
|
115
|
+
expect(firstCall['role-filter'].value).toEqual(['Developer']);
|
|
116
|
+
expect(secondCall['role-filter'].value).toEqual(['Developer', 'Marketing']);
|
|
117
|
+
});
|
|
83
118
|
});
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { http, HttpResponse } from 'msw';
|
|
2
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { http, HttpResponse } from 'msw';
|
|
3
|
+
import { expect, userEvent, waitFor, within } from 'storybook/test';
|
|
3
4
|
import { Download, SignMeOthers } from '@box/blueprint-web-assets/icons/Fill/index';
|
|
4
5
|
import { Sign } from '@box/blueprint-web-assets/icons/Line';
|
|
5
|
-
import { expect, userEvent, waitFor, within } from 'storybook/test';
|
|
6
6
|
import noop from 'lodash/noop';
|
|
7
|
+
|
|
7
8
|
import ContentExplorer from '../../ContentExplorer';
|
|
8
9
|
import { DEFAULT_HOSTNAME_API } from '../../../../constants';
|
|
9
10
|
import { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';
|
|
@@ -126,13 +127,42 @@ export const metadataViewV2WithCustomActions: Story = {
|
|
|
126
127
|
await waitFor(() => {
|
|
127
128
|
expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();
|
|
128
129
|
});
|
|
129
|
-
|
|
130
130
|
const firstRow = canvas.getByRole('row', { name: /Child 2/i });
|
|
131
131
|
const ellipsesButton = within(firstRow).getByRole('button', { name: 'Action menu' });
|
|
132
132
|
userEvent.click(ellipsesButton);
|
|
133
133
|
},
|
|
134
134
|
};
|
|
135
135
|
|
|
136
|
+
const initialFilterActionBarProps = {
|
|
137
|
+
initialFilterValues: {
|
|
138
|
+
'industry-filter': { value: ['Legal'] },
|
|
139
|
+
'mimetype-filter': { value: ['boxnoteType', 'documentType', 'threedType'] },
|
|
140
|
+
'role-filter': { value: ['Developer', 'Business Owner', 'Marketing'] },
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export const metadataViewV2WithInitialFilterValues: Story = {
|
|
145
|
+
args: {
|
|
146
|
+
...metadataViewV2ElementProps,
|
|
147
|
+
metadataViewProps: {
|
|
148
|
+
columns,
|
|
149
|
+
actionBarProps: initialFilterActionBarProps,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
play: async ({ canvas }) => {
|
|
153
|
+
// Wait for chips to update with initial values
|
|
154
|
+
await waitFor(() => {
|
|
155
|
+
expect(canvas.getByRole('button', { name: /Industry/i })).toHaveTextContent(/\(1\)/);
|
|
156
|
+
});
|
|
157
|
+
// Other chips should reflect initialized values
|
|
158
|
+
const contactRoleChip = canvas.getByRole('button', { name: /Contact Role/i });
|
|
159
|
+
expect(contactRoleChip).toHaveTextContent(/\(3\)/);
|
|
160
|
+
|
|
161
|
+
const fileTypeChip = canvas.getByRole('button', { name: /Box Note/i });
|
|
162
|
+
expect(fileTypeChip).toHaveTextContent(/\+2/);
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
|
|
136
166
|
const meta: Meta<typeof ContentExplorer> = {
|
|
137
167
|
title: 'Elements/ContentExplorer/tests/MetadataView/visual',
|
|
138
168
|
component: ContentExplorer,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { type RouterHistory } from 'react-router-dom';
|
|
4
|
+
import { withRouterIfEnabled } from '../common/routing';
|
|
4
5
|
|
|
5
6
|
import AddTaskMenu from './AddTaskMenu';
|
|
6
7
|
import TaskModal from './TaskModal';
|
|
@@ -11,7 +12,7 @@ import type { ElementsXhrError } from '../../common/types/api';
|
|
|
11
12
|
import type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';
|
|
12
13
|
|
|
13
14
|
type Props = {|
|
|
14
|
-
history
|
|
15
|
+
history?: RouterHistory,
|
|
15
16
|
internalSidebarNavigation?: InternalSidebarNavigation,
|
|
16
17
|
internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
|
|
17
18
|
isDisabled: boolean,
|
|
@@ -54,7 +55,7 @@ class AddTaskButton extends React.Component<Props, State> {
|
|
|
54
55
|
},
|
|
55
56
|
true,
|
|
56
57
|
);
|
|
57
|
-
} else {
|
|
58
|
+
} else if (history) {
|
|
58
59
|
history.replace({ state: { open: true } });
|
|
59
60
|
}
|
|
60
61
|
|
|
@@ -103,4 +104,4 @@ class AddTaskButton extends React.Component<Props, State> {
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
export { AddTaskButton as AddTaskButtonComponent };
|
|
106
|
-
export default
|
|
107
|
+
export default withRouterIfEnabled(AddTaskButton);
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import * as React from 'react';
|
|
8
|
-
import {
|
|
8
|
+
import { type RouterHistory } from 'react-router-dom';
|
|
9
|
+
import { withRouterIfEnabled } from '../common/routing';
|
|
9
10
|
import SidebarToggleButton from '../../components/sidebar-toggle-button/SidebarToggleButton';
|
|
10
11
|
import { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';
|
|
11
12
|
import type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';
|
|
@@ -53,4 +54,4 @@ const SidebarToggle = ({
|
|
|
53
54
|
};
|
|
54
55
|
|
|
55
56
|
export { SidebarToggle as SidebarToggleComponent };
|
|
56
|
-
export default
|
|
57
|
+
export default withRouterIfEnabled(SidebarToggle);
|
|
@@ -4,7 +4,7 @@ exports[`elements/content-sidebar/ActivitySidebar render() should render the act
|
|
|
4
4
|
<SidebarContent
|
|
5
5
|
actions={
|
|
6
6
|
<React.Fragment>
|
|
7
|
-
<
|
|
7
|
+
<withRouterIfEnabled(AddTaskButton)
|
|
8
8
|
isDisabled={false}
|
|
9
9
|
onTaskModalClose={[Function]}
|
|
10
10
|
taskFormProps={
|
|
@@ -9,7 +9,7 @@ import flow from 'lodash/flow';
|
|
|
9
9
|
import getProp from 'lodash/get';
|
|
10
10
|
import merge from 'lodash/merge';
|
|
11
11
|
import noop from 'lodash/noop';
|
|
12
|
-
import { generatePath
|
|
12
|
+
import { generatePath } from 'react-router-dom';
|
|
13
13
|
import type { Match, RouterHistory } from 'react-router-dom';
|
|
14
14
|
import type { MessageDescriptor } from 'react-intl';
|
|
15
15
|
import { withFeatureConsumer, isFeatureEnabled } from '../../common/feature-checking';
|
|
@@ -21,6 +21,7 @@ import StaticVersionsSidebar from './StaticVersionSidebar';
|
|
|
21
21
|
import VersionsSidebar from './VersionsSidebar';
|
|
22
22
|
import VersionsSidebarAPI from './VersionsSidebarAPI';
|
|
23
23
|
import { withAPIContext } from '../../common/api-context';
|
|
24
|
+
import { withRouterIfEnabled } from '../../common/routing';
|
|
24
25
|
import type { FeatureConfig } from '../../common/feature-checking';
|
|
25
26
|
import type { VersionActionCallback, VersionChangeCallback, SidebarLoadCallback } from './flowTypes';
|
|
26
27
|
import type { BoxItemVersion, BoxItem, FileVersions } from '../../../common/types/core';
|
|
@@ -36,7 +37,7 @@ type Props = {
|
|
|
36
37
|
features: FeatureConfig,
|
|
37
38
|
fileId: string,
|
|
38
39
|
hasSidebarInitialized?: boolean,
|
|
39
|
-
history
|
|
40
|
+
history?: RouterHistory,
|
|
40
41
|
internalSidebarNavigation?: InternalSidebarNavigation,
|
|
41
42
|
internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
|
|
42
43
|
match: Match,
|
|
@@ -283,7 +284,7 @@ class VersionsSidebarContainer extends React.Component<Props, State> {
|
|
|
283
284
|
delete navigationUpdate.versionId;
|
|
284
285
|
}
|
|
285
286
|
internalSidebarNavigationHandler(navigationUpdate);
|
|
286
|
-
} else {
|
|
287
|
+
} else if (history) {
|
|
287
288
|
history.push(generatePath(match.path, { ...match.params, versionId }));
|
|
288
289
|
}
|
|
289
290
|
};
|
|
@@ -349,4 +350,4 @@ class VersionsSidebarContainer extends React.Component<Props, State> {
|
|
|
349
350
|
|
|
350
351
|
export type VersionsSidebarProps = Props;
|
|
351
352
|
export { VersionsSidebarContainer as VersionsSidebarContainerComponent };
|
|
352
|
-
export default flow([
|
|
353
|
+
export default flow([withRouterIfEnabled, withAPIContext, withFeatureConsumer])(VersionsSidebarContainer);
|