box-ui-elements 23.4.0-beta.36 → 23.4.0-beta.38
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.css +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.css +1 -1
- package/dist/sidebar.js +1 -1
- package/es/common/types/metadata.js.flow +5 -4
- package/es/common/types/metadata.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +43 -22
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
- package/es/elements/content-preview/PreviewNavigation.js +0 -2
- package/es/elements/content-preview/PreviewNavigation.js.flow +0 -2
- package/es/elements/content-preview/PreviewNavigation.js.map +1 -1
- package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js +29 -7
- package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js.flow +44 -5
- package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js.map +1 -1
- package/es/elements/content-sidebar/withSidebarAnnotations.js +141 -35
- package/es/elements/content-sidebar/withSidebarAnnotations.js.flow +199 -37
- package/es/elements/content-sidebar/withSidebarAnnotations.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +6 -3
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +8 -2
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/features/metadata-instance-editor/Instance.js +1 -0
- package/es/features/metadata-instance-editor/Instance.js.flow +1 -0
- package/es/features/metadata-instance-editor/Instance.js.map +1 -1
- package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +1 -1
- package/i18n/bn-IN.js +1 -1
- package/i18n/bn-IN.properties +4 -0
- package/i18n/da-DK.js +1 -1
- package/i18n/da-DK.properties +4 -0
- package/i18n/de-DE.js +1 -1
- package/i18n/de-DE.properties +4 -0
- package/i18n/en-AU.js +1 -1
- package/i18n/en-AU.properties +4 -0
- package/i18n/en-CA.js +1 -1
- package/i18n/en-CA.properties +4 -0
- package/i18n/en-GB.js +1 -1
- package/i18n/en-GB.properties +4 -0
- package/i18n/es-419.js +1 -1
- package/i18n/es-419.properties +4 -0
- package/i18n/es-ES.js +1 -1
- package/i18n/es-ES.properties +4 -0
- package/i18n/fi-FI.js +1 -1
- package/i18n/fi-FI.properties +4 -0
- package/i18n/fr-CA.js +1 -1
- package/i18n/fr-CA.properties +4 -0
- package/i18n/fr-FR.js +1 -1
- package/i18n/fr-FR.properties +4 -0
- package/i18n/hi-IN.js +1 -1
- package/i18n/hi-IN.properties +4 -0
- package/i18n/it-IT.js +1 -1
- package/i18n/it-IT.properties +4 -0
- package/i18n/ja-JP.js +1 -1
- package/i18n/ja-JP.properties +4 -0
- package/i18n/ko-KR.js +1 -1
- package/i18n/ko-KR.properties +4 -0
- package/i18n/nb-NO.js +1 -1
- package/i18n/nb-NO.properties +4 -0
- package/i18n/nl-NL.js +1 -1
- package/i18n/nl-NL.properties +4 -0
- package/i18n/pl-PL.js +1 -1
- package/i18n/pl-PL.properties +4 -0
- package/i18n/pt-BR.js +1 -1
- package/i18n/pt-BR.properties +4 -0
- package/i18n/ru-RU.js +1 -1
- package/i18n/ru-RU.properties +4 -0
- package/i18n/sv-SE.js +1 -1
- package/i18n/sv-SE.properties +4 -0
- package/i18n/tr-TR.js +1 -1
- package/i18n/tr-TR.properties +4 -0
- package/i18n/zh-CN.js +1 -1
- package/i18n/zh-CN.properties +4 -0
- package/i18n/zh-TW.js +1 -1
- package/i18n/zh-TW.properties +4 -0
- package/package.json +3 -3
- package/src/common/types/metadata.js +5 -4
- package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +47 -31
- package/src/elements/content-preview/PreviewNavigation.js +0 -2
- package/src/elements/content-preview/__tests__/PreviewNavigation.test.js +12 -12
- package/src/elements/content-sidebar/__tests__/withSidebarAnnotations.rtl.test.js +1152 -0
- package/src/elements/content-sidebar/versions/VersionsSidebarContainer.js +44 -5
- package/src/elements/content-sidebar/versions/__tests__/VersionsSidebarContainer.test.js +200 -43
- package/src/elements/content-sidebar/versions/__tests__/__snapshots__/VersionsSidebarContainer.test.js.snap +2 -2
- package/src/elements/content-sidebar/withSidebarAnnotations.js +199 -37
- package/src/features/metadata-instance-editor/CascadePolicy.js +8 -2
- package/src/features/metadata-instance-editor/Instance.js +1 -0
- package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +45 -0
- package/src/elements/content-sidebar/__tests__/withSidebarAnnotations.test.js +0 -626
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withSidebarAnnotations.js","names":["React","getProp","noop","matchPath","FEED_ITEM_TYPE_VERSION","getBadUserError","withSidebarAnnotations","WrappedComponent","WithSidebarAnnotations","Component","constructor","props","_defineProperty","createRef","file","getAnnotationsPath","getAnnotationsMatchPath","history","location","match","annotationId","currentFileVersionId","fileVersionId","replace","annotatorState","activeAnnotationFileVersionId","activeAnnotationId","defaultFileVersionId","newLocationState","open","state","push","pathname","api","fileId","onVersionChange","feedAPI","getFeedAPI","items","feedItems","getCachedItems","version","filter","item","type","find","id","currentVersionId","updateVersionToCurrent","isOpen","isActivity","current","sidebarPanels","refresh","redirectDeeplinkedAnnotation","componentDidUpdate","prevProps","prevAnnotatorState","prevFileId","prevLocation","action","annotation","prevActiveAnnotationId","prevAnnotation","prevMatch","hasActiveAnnotationChanged","isAnnotationsPath","isTransitioningToAnnotationPath","prevFileVersionId","addAnnotationReply","deleteAnnotationReply","updateAnnotationReply","updateAnnotation","deleteAnnotation","addAnnotation","updateActiveAnnotation","updateActiveVersion","meta","requestId","currentUser","isPending","hasItems","refreshActivitySidebar","annotationReply","addPendingReply","_objectSpread","annotationItem","modifyFeedItemRepliesCountBy","updateReplyItem","updateFeedItem","deleteFeedItem","replyId","replyItem","replies","deleteReplyItem","render","createElement","_extends","ref","displayName","name"],"sources":["../../../src/elements/content-sidebar/withSidebarAnnotations.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport { matchPath, type ContextRouter } from 'react-router-dom';\nimport { FEED_ITEM_TYPE_VERSION } from '../../constants';\nimport { getBadUserError } from '../../utils/error';\nimport type { WithAnnotatorContextProps } from '../common/annotator-context';\nimport type { BoxItem, User } from '../../common/types/core';\n\ntype Props = {\n ...ContextRouter,\n currentUser?: User,\n file: BoxItem,\n fileId: string,\n isOpen: boolean,\n onVersionChange: Function,\n} & WithAnnotatorContextProps;\n\ntype SidebarPanelsRefType = {\n refresh: (shouldRefreshCache?: boolean) => void,\n};\n\nexport default function withSidebarAnnotations(\n WrappedComponent: React.ComponentType<Props>,\n): React.ComponentType<Props> {\n class WithSidebarAnnotations extends React.Component<Props> {\n static defaultProps = {\n annotatorState: {},\n getAnnotationsMatchPath: noop,\n getAnnotationsPath: noop,\n onVersionChange: noop,\n };\n\n static displayName: ?string;\n\n props: Props;\n\n sidebarPanels: { current: SidebarPanelsRefType | null } = React.createRef();\n\n constructor(props) {\n super(props);\n\n this.redirectDeeplinkedAnnotation();\n }\n\n redirectDeeplinkedAnnotation = () => {\n const { file, getAnnotationsPath, getAnnotationsMatchPath, history, location } = this.props;\n const match = getAnnotationsMatchPath(location);\n const annotationId = getProp(match, 'params.annotationId');\n const currentFileVersionId = getProp(file, 'file_version.id');\n const fileVersionId = getProp(match, 'params.fileVersionId');\n\n if (fileVersionId && fileVersionId !== currentFileVersionId) {\n history.replace(getAnnotationsPath(currentFileVersionId, annotationId));\n }\n };\n\n componentDidUpdate(prevProps: Props) {\n const { annotatorState, fileId, getAnnotationsMatchPath, location, onVersionChange }: Props = this.props;\n const { annotatorState: prevAnnotatorState, fileId: prevFileId, location: prevLocation }: Props = prevProps;\n const { action, activeAnnotationId, annotation } = annotatorState;\n const { activeAnnotationId: prevActiveAnnotationId, annotation: prevAnnotation } = prevAnnotatorState;\n\n const match = getAnnotationsMatchPath(location);\n const prevMatch = getAnnotationsMatchPath(prevLocation);\n const fileVersionId = getProp(match, 'params.fileVersionId');\n const hasActiveAnnotationChanged = prevActiveAnnotationId !== activeAnnotationId;\n const isAnnotationsPath = !!match;\n const isTransitioningToAnnotationPath = activeAnnotationId && !isAnnotationsPath;\n const prevFileVersionId = getProp(prevMatch, 'params.fileVersionId');\n\n if (action === 'reply_create_start' || action === 'reply_create_end') {\n this.addAnnotationReply();\n }\n\n if (action === 'reply_delete_start' || action === 'reply_delete_end') {\n this.deleteAnnotationReply();\n }\n\n if (action === 'reply_update_start' || action === 'reply_update_end') {\n this.updateAnnotationReply();\n }\n\n if (action === 'update_start' || action === 'update_end') {\n this.updateAnnotation();\n }\n\n if (action === 'delete_start' || action === 'delete_end') {\n this.deleteAnnotation();\n }\n\n if ((action === 'create_start' || action === 'create_end') && annotation && prevAnnotation !== annotation) {\n this.addAnnotation();\n }\n\n // Active annotation id changed. If location is currently an annotation path or\n // if location is not currently an annotation path but the active annotation id\n // transitioned from falsy to truthy, update the location accordingly\n if (hasActiveAnnotationChanged && (isAnnotationsPath || isTransitioningToAnnotationPath)) {\n this.updateActiveAnnotation();\n }\n\n if (fileVersionId && prevFileVersionId !== fileVersionId) {\n this.updateActiveVersion();\n }\n\n if (prevFileId !== fileId) {\n // If the file id has changed, reset the current version id since the previous (possibly versioned)\n // location is no longer active\n onVersionChange(null);\n }\n }\n\n addAnnotation() {\n const {\n annotatorState: { action, annotation, meta: { requestId } = {} },\n api,\n currentUser,\n file,\n fileId,\n } = this.props;\n\n if (!requestId) {\n return;\n }\n\n // TODO: need to address in follow on -- currentUser may be undefined here but is never fetched for sure until ActivitySidebar\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const feedAPI = api.getFeedAPI(false);\n const isPending = action === 'create_start';\n const { items: hasItems } = feedAPI.getCachedItems(fileId) || {};\n\n // If there are existing items in the cache for this file, then patch the cache with the new annotation\n // If there are no cache entry for feeditems, then it is assumed that it has not yet been fetched.\n if (hasItems) {\n feedAPI.addAnnotation(file, currentUser, annotation, requestId, isPending);\n }\n\n this.refreshActivitySidebar();\n }\n\n addAnnotationReply() {\n const {\n annotatorState: {\n action,\n annotation: { id: annotationId },\n annotationReply,\n meta: { requestId },\n },\n api,\n currentUser,\n file,\n } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n if (action === 'reply_create_start') {\n feedAPI.addPendingReply(annotationId, currentUser, { ...annotationReply, id: requestId });\n } else {\n const { items: feedItems = [] } = feedAPI.getCachedItems(file.id) || {};\n const annotationItem = feedItems.find(({ id }) => id === annotationId);\n\n if (!annotationItem) {\n return;\n }\n\n feedAPI.modifyFeedItemRepliesCountBy(annotationId, 1);\n feedAPI.updateReplyItem({ ...annotationReply, isPending: false }, annotationId, requestId);\n }\n\n this.refreshActivitySidebar();\n }\n\n deleteAnnotation() {\n const {\n annotatorState: { action, annotation },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n if (action === 'delete_start') {\n feedAPI.updateFeedItem({ isPending: true }, annotation.id);\n } else {\n feedAPI.deleteFeedItem(annotation.id);\n }\n\n this.refreshActivitySidebar();\n }\n\n deleteAnnotationReply() {\n const {\n annotatorState: {\n action,\n annotation: { id: annotationId },\n annotationReply: { id: replyId },\n },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n if (action === 'reply_delete_start') {\n feedAPI.updateReplyItem({ isPending: true }, annotationId, replyId);\n } else {\n const { items: feedItems = [] } = feedAPI.getCachedItems(file.id) || {};\n const annotationItem = feedItems.find(({ id }) => id === annotationId);\n\n if (!annotationItem) {\n return;\n }\n\n // Check if the parent annotation has the reply currently visible and if so, remove it\n const replyItem = annotationItem.replies.find(({ id }) => id === replyId);\n if (replyItem) {\n feedAPI.deleteReplyItem(replyId, annotationId);\n }\n\n // Decrease the amount of replies by 1\n feedAPI.modifyFeedItemRepliesCountBy(annotationId, -1);\n }\n\n this.refreshActivitySidebar();\n }\n\n updateAnnotation() {\n const {\n annotatorState: { action, annotation },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n const isPending = action === 'update_start';\n feedAPI.file = file;\n\n feedAPI.updateFeedItem({ ...annotation, isPending }, annotation.id);\n\n this.refreshActivitySidebar();\n }\n\n updateAnnotationReply() {\n const {\n annotatorState: { action, annotation, annotationReply },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n const isPending = action === 'reply_update_start';\n feedAPI.file = file;\n\n feedAPI.updateReplyItem({ ...annotationReply, isPending }, annotation.id, annotationReply.id);\n\n this.refreshActivitySidebar();\n }\n\n updateActiveAnnotation = () => {\n const {\n annotatorState: { activeAnnotationFileVersionId, activeAnnotationId },\n file,\n getAnnotationsMatchPath,\n getAnnotationsPath,\n history,\n location,\n } = this.props;\n const match = getAnnotationsMatchPath(location);\n const currentFileVersionId = getProp(file, 'file_version.id');\n const defaultFileVersionId = activeAnnotationFileVersionId || currentFileVersionId;\n const fileVersionId = getProp(match, 'params.fileVersionId', defaultFileVersionId);\n const newLocationState = activeAnnotationId ? { open: true } : location.state;\n\n // Update the location pathname and open state if transitioning to an active annotation id, force the sidebar open\n history.push({\n pathname: getAnnotationsPath(fileVersionId, activeAnnotationId),\n state: newLocationState,\n });\n };\n\n updateActiveVersion = () => {\n const {\n api,\n file,\n fileId,\n getAnnotationsMatchPath,\n getAnnotationsPath,\n history,\n location,\n onVersionChange,\n } = this.props;\n const feedAPI = api.getFeedAPI(false);\n const match = getAnnotationsMatchPath(location);\n const currentFileVersionId = getProp(file, 'file_version.id');\n const fileVersionId = getProp(match, 'params.fileVersionId');\n const { items: feedItems = [] } = feedAPI.getCachedItems(fileId) || {};\n const version = feedItems\n .filter(item => item.type === FEED_ITEM_TYPE_VERSION)\n .find(item => item.id === fileVersionId);\n\n if (version) {\n onVersionChange(version, {\n currentVersionId: currentFileVersionId,\n updateVersionToCurrent: () => history.push(getAnnotationsPath(currentFileVersionId)),\n });\n }\n };\n\n refreshActivitySidebar = () => {\n const { isOpen, location } = this.props;\n\n const pathname = getProp(location, 'pathname', '');\n const isActivity = matchPath(pathname, '/activity');\n const { current } = this.sidebarPanels;\n\n // If the activity sidebar is currently open, then force it to refresh with the updated data\n if (current && isActivity && isOpen) {\n current.refresh(false);\n }\n };\n\n render() {\n return <WrappedComponent ref={this.sidebarPanels} {...this.props} />;\n }\n }\n\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n WithSidebarAnnotations.displayName = `WithSidebarAnnotations(${displayName})`;\n\n return WithSidebarAnnotations;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"withSidebarAnnotations.js","names":["React","getProp","noop","matchPath","FEED_ITEM_TYPE_VERSION","getBadUserError","ViewType","FeedEntryType","withSidebarAnnotations","WrappedComponent","WithSidebarAnnotations","Component","constructor","props","_defineProperty","createRef","navigation","activeFeedEntryType","ANNOTATIONS","fileVersionId","params","activeFeedEntryId","undefined","annotationId","sidebar","ACTIVITY","file","getAnnotationsPath","getAnnotationsMatchPath","history","internalSidebarNavigation","internalSidebarNavigationHandler","location","routerDisabled","currentFileVersionId","match","getInternalNavigationMatch","correctedNavigation","getInternalAnnotationsNavigation","replace","annotatorState","activeAnnotationFileVersionId","activeAnnotationId","defaultFileVersionId","newNavigationState","open","updatedNavigation","_objectSpread","newLocationState","state","push","pathname","api","fileId","onVersionChange","feedAPI","getFeedAPI","items","feedItems","getCachedItems","version","filter","item","type","find","id","currentVersionId","updateVersionToCurrent","currentVersionNavigation","isOpen","current","sidebarPanels","isActivity","refresh","redirectDeeplinkedAnnotation","componentDidUpdate","prevProps","prevAnnotatorState","prevFileId","prevInternalSidebarNavigation","prevLocation","action","annotation","prevActiveAnnotationId","prevAnnotation","prevFileVersionId","prevMatch","isAnnotationsPath","isTransitioningToAnnotationPath","hasActiveAnnotationChanged","addAnnotationReply","deleteAnnotationReply","updateAnnotationReply","updateAnnotation","deleteAnnotation","addAnnotation","updateActiveAnnotation","updateActiveVersion","meta","requestId","currentUser","isPending","hasItems","refreshActivitySidebar","annotationReply","addPendingReply","annotationItem","modifyFeedItemRepliesCountBy","updateReplyItem","updateFeedItem","deleteFeedItem","replyId","replyItem","replies","deleteReplyItem","render","createElement","_extends","ref","displayName","name"],"sources":["../../../src/elements/content-sidebar/withSidebarAnnotations.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport { matchPath, type ContextRouter } from 'react-router-dom';\nimport { FEED_ITEM_TYPE_VERSION } from '../../constants';\nimport { getBadUserError } from '../../utils/error';\nimport type { WithAnnotatorContextProps } from '../common/annotator-context';\nimport type { BoxItem, User } from '../../common/types/core';\nimport {\n ViewType,\n FeedEntryType,\n type InternalSidebarNavigation,\n type InternalSidebarNavigationHandler,\n} from '../common/types/SidebarNavigation';\n\ntype Props = {\n ...ContextRouter,\n currentUser?: User,\n file: BoxItem,\n fileId: string,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n isOpen: boolean,\n onVersionChange: Function,\n routerDisabled?: boolean,\n} & WithAnnotatorContextProps;\n\ntype SidebarPanelsRefType = {\n refresh: (shouldRefreshCache?: boolean) => void,\n};\n\nexport default function withSidebarAnnotations(\n WrappedComponent: React.ComponentType<Props>,\n): React.ComponentType<Props> {\n class WithSidebarAnnotations extends React.Component<Props> {\n static defaultProps = {\n annotatorState: {},\n getAnnotationsMatchPath: noop,\n getAnnotationsPath: noop,\n onVersionChange: noop,\n };\n\n static displayName: ?string;\n\n props: Props;\n\n sidebarPanels: { current: SidebarPanelsRefType | null } = React.createRef();\n\n constructor(props) {\n super(props);\n\n this.redirectDeeplinkedAnnotation();\n }\n\n getInternalNavigationMatch = (\n navigation: InternalSidebarNavigation,\n ): { params: { annotationId?: string, fileVersionId: string } } | null => {\n if (\n !('activeFeedEntryType' in navigation) ||\n navigation.activeFeedEntryType !== FeedEntryType.ANNOTATIONS ||\n !navigation.fileVersionId\n ) {\n return null;\n }\n\n // Only include annotationId if it's defined (mirrors router behavior where missing optional params are omitted)\n const params =\n navigation.activeFeedEntryId !== undefined\n ? {\n fileVersionId: navigation.fileVersionId,\n annotationId: navigation.activeFeedEntryId,\n }\n : {\n fileVersionId: navigation.fileVersionId,\n };\n\n return { params };\n };\n\n getInternalAnnotationsNavigation = (\n fileVersionId?: string,\n annotationId?: string | null,\n ): InternalSidebarNavigation => {\n if (!fileVersionId) {\n return { sidebar: ViewType.ACTIVITY };\n }\n\n return {\n sidebar: ViewType.ACTIVITY,\n activeFeedEntryType: FeedEntryType.ANNOTATIONS,\n activeFeedEntryId: annotationId || undefined,\n fileVersionId,\n };\n };\n\n redirectDeeplinkedAnnotation = () => {\n const {\n file,\n getAnnotationsPath,\n getAnnotationsMatchPath,\n history,\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n location,\n routerDisabled,\n } = this.props;\n\n const currentFileVersionId = getProp(file, 'file_version.id');\n\n if (routerDisabled && internalSidebarNavigation && internalSidebarNavigationHandler) {\n // Use internal navigation when router is disabled\n const match = this.getInternalNavigationMatch(internalSidebarNavigation);\n const annotationId = getProp(match, 'params.annotationId');\n const fileVersionId = getProp(match, 'params.fileVersionId');\n\n if (fileVersionId && fileVersionId !== currentFileVersionId) {\n const correctedNavigation = this.getInternalAnnotationsNavigation(\n currentFileVersionId,\n annotationId,\n );\n internalSidebarNavigationHandler(correctedNavigation, true);\n }\n } else {\n // Use router-based navigation\n const match = getAnnotationsMatchPath(location);\n const annotationId = getProp(match, 'params.annotationId');\n const fileVersionId = getProp(match, 'params.fileVersionId');\n\n if (fileVersionId && fileVersionId !== currentFileVersionId) {\n history.replace(getAnnotationsPath(currentFileVersionId, annotationId));\n }\n }\n };\n\n componentDidUpdate(prevProps: Props) {\n const {\n annotatorState,\n fileId,\n getAnnotationsMatchPath,\n internalSidebarNavigation,\n location,\n onVersionChange,\n routerDisabled,\n }: Props = this.props;\n const {\n annotatorState: prevAnnotatorState,\n fileId: prevFileId,\n internalSidebarNavigation: prevInternalSidebarNavigation,\n location: prevLocation,\n }: Props = prevProps;\n const { action, activeAnnotationId, annotation } = annotatorState;\n const { activeAnnotationId: prevActiveAnnotationId, annotation: prevAnnotation } = prevAnnotatorState;\n\n let fileVersionId;\n let prevFileVersionId;\n let match;\n\n if (routerDisabled && internalSidebarNavigation) {\n // Use internal navigation when router is disabled\n match = this.getInternalNavigationMatch(internalSidebarNavigation);\n const prevMatch = prevInternalSidebarNavigation\n ? this.getInternalNavigationMatch(prevInternalSidebarNavigation)\n : null;\n\n fileVersionId = getProp(match, 'params.fileVersionId');\n prevFileVersionId = getProp(prevMatch, 'params.fileVersionId');\n } else {\n // Use router-based navigation\n match = getAnnotationsMatchPath(location);\n const prevMatch = getAnnotationsMatchPath(prevLocation);\n\n fileVersionId = getProp(match, 'params.fileVersionId');\n prevFileVersionId = getProp(prevMatch, 'params.fileVersionId');\n }\n\n const isAnnotationsPath = !!match;\n const isTransitioningToAnnotationPath = activeAnnotationId && !isAnnotationsPath;\n const hasActiveAnnotationChanged = prevActiveAnnotationId !== activeAnnotationId;\n\n if (action === 'reply_create_start' || action === 'reply_create_end') {\n this.addAnnotationReply();\n }\n\n if (action === 'reply_delete_start' || action === 'reply_delete_end') {\n this.deleteAnnotationReply();\n }\n\n if (action === 'reply_update_start' || action === 'reply_update_end') {\n this.updateAnnotationReply();\n }\n\n if (action === 'update_start' || action === 'update_end') {\n this.updateAnnotation();\n }\n\n if (action === 'delete_start' || action === 'delete_end') {\n this.deleteAnnotation();\n }\n\n if ((action === 'create_start' || action === 'create_end') && annotation && prevAnnotation !== annotation) {\n this.addAnnotation();\n }\n\n // Active annotation id changed. If location is currently an annotation path or\n // if location is not currently an annotation path but the active annotation id\n // transitioned from falsy to truthy, update the location accordingly\n if (hasActiveAnnotationChanged && (isAnnotationsPath || isTransitioningToAnnotationPath)) {\n this.updateActiveAnnotation();\n }\n\n if (fileVersionId && prevFileVersionId !== fileVersionId) {\n this.updateActiveVersion();\n }\n\n if (prevFileId !== fileId) {\n // If the file id has changed, reset the current version id since the previous (possibly versioned)\n // location is no longer active\n onVersionChange(null);\n }\n }\n\n addAnnotation() {\n const {\n annotatorState: { action, annotation, meta: { requestId } = {} },\n api,\n currentUser,\n file,\n fileId,\n } = this.props;\n\n if (!requestId) {\n return;\n }\n\n // TODO: need to address in follow on -- currentUser may be undefined here but is never fetched for sure until ActivitySidebar\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const feedAPI = api.getFeedAPI(false);\n const isPending = action === 'create_start';\n const { items: hasItems } = feedAPI.getCachedItems(fileId) || {};\n\n // If there are existing items in the cache for this file, then patch the cache with the new annotation\n // If there are no cache entry for feeditems, then it is assumed that it has not yet been fetched.\n if (hasItems) {\n feedAPI.addAnnotation(file, currentUser, annotation, requestId, isPending);\n }\n\n this.refreshActivitySidebar();\n }\n\n addAnnotationReply() {\n const {\n annotatorState: {\n action,\n annotation: { id: annotationId },\n annotationReply,\n meta: { requestId },\n },\n api,\n currentUser,\n file,\n } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n if (action === 'reply_create_start') {\n feedAPI.addPendingReply(annotationId, currentUser, { ...annotationReply, id: requestId });\n } else {\n const { items: feedItems = [] } = feedAPI.getCachedItems(file.id) || {};\n const annotationItem = feedItems.find(({ id }) => id === annotationId);\n\n if (!annotationItem) {\n return;\n }\n\n feedAPI.modifyFeedItemRepliesCountBy(annotationId, 1);\n feedAPI.updateReplyItem({ ...annotationReply, isPending: false }, annotationId, requestId);\n }\n\n this.refreshActivitySidebar();\n }\n\n deleteAnnotation() {\n const {\n annotatorState: { action, annotation },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n if (action === 'delete_start') {\n feedAPI.updateFeedItem({ isPending: true }, annotation.id);\n } else {\n feedAPI.deleteFeedItem(annotation.id);\n }\n\n this.refreshActivitySidebar();\n }\n\n deleteAnnotationReply() {\n const {\n annotatorState: {\n action,\n annotation: { id: annotationId },\n annotationReply: { id: replyId },\n },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n if (action === 'reply_delete_start') {\n feedAPI.updateReplyItem({ isPending: true }, annotationId, replyId);\n } else {\n const { items: feedItems = [] } = feedAPI.getCachedItems(file.id) || {};\n const annotationItem = feedItems.find(({ id }) => id === annotationId);\n\n if (!annotationItem) {\n return;\n }\n\n // Check if the parent annotation has the reply currently visible and if so, remove it\n const replyItem = annotationItem.replies.find(({ id }) => id === replyId);\n if (replyItem) {\n feedAPI.deleteReplyItem(replyId, annotationId);\n }\n\n // Decrease the amount of replies by 1\n feedAPI.modifyFeedItemRepliesCountBy(annotationId, -1);\n }\n\n this.refreshActivitySidebar();\n }\n\n updateAnnotation() {\n const {\n annotatorState: { action, annotation },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n const isPending = action === 'update_start';\n feedAPI.file = file;\n\n feedAPI.updateFeedItem({ ...annotation, isPending }, annotation.id);\n\n this.refreshActivitySidebar();\n }\n\n updateAnnotationReply() {\n const {\n annotatorState: { action, annotation, annotationReply },\n api,\n file,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n const isPending = action === 'reply_update_start';\n feedAPI.file = file;\n\n feedAPI.updateReplyItem({ ...annotationReply, isPending }, annotation.id, annotationReply.id);\n\n this.refreshActivitySidebar();\n }\n\n updateActiveAnnotation = () => {\n const {\n annotatorState: { activeAnnotationFileVersionId, activeAnnotationId },\n file,\n getAnnotationsMatchPath,\n getAnnotationsPath,\n history,\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n location,\n routerDisabled,\n } = this.props;\n\n const currentFileVersionId = getProp(file, 'file_version.id');\n const defaultFileVersionId = activeAnnotationFileVersionId || currentFileVersionId;\n\n if (routerDisabled && internalSidebarNavigation && internalSidebarNavigationHandler) {\n // Use internal navigation when router is disabled\n const match = this.getInternalNavigationMatch(internalSidebarNavigation);\n const fileVersionId = getProp(match, 'params.fileVersionId', defaultFileVersionId);\n const newNavigationState = activeAnnotationId ? { open: true } : {};\n\n // Update the navigation and open state if transitioning to an active annotation id, force the sidebar open\n const updatedNavigation = {\n ...this.getInternalAnnotationsNavigation(fileVersionId, activeAnnotationId),\n ...newNavigationState,\n };\n internalSidebarNavigationHandler(updatedNavigation);\n } else {\n // Use router-based navigation\n const match = getAnnotationsMatchPath(location);\n const fileVersionId = getProp(match, 'params.fileVersionId', defaultFileVersionId);\n const newLocationState = activeAnnotationId ? { open: true } : location.state;\n\n // Update the location pathname and open state if transitioning to an active annotation id, force the sidebar open\n history.push({\n pathname: getAnnotationsPath(fileVersionId, activeAnnotationId),\n state: newLocationState,\n });\n }\n };\n\n updateActiveVersion = () => {\n const {\n api,\n file,\n fileId,\n getAnnotationsMatchPath,\n getAnnotationsPath,\n history,\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n location,\n onVersionChange,\n routerDisabled,\n } = this.props;\n\n const feedAPI = api.getFeedAPI(false);\n const currentFileVersionId = getProp(file, 'file_version.id');\n const { items: feedItems = [] } = feedAPI.getCachedItems(fileId) || {};\n\n if (routerDisabled && internalSidebarNavigation && internalSidebarNavigationHandler) {\n // Use internal navigation when router is disabled\n const match = this.getInternalNavigationMatch(internalSidebarNavigation);\n const fileVersionId = getProp(match, 'params.fileVersionId');\n const version = feedItems\n .filter(item => item.type === FEED_ITEM_TYPE_VERSION)\n .find(item => item.id === fileVersionId);\n\n if (version) {\n onVersionChange(version, {\n currentVersionId: currentFileVersionId,\n updateVersionToCurrent: () => {\n const currentVersionNavigation =\n this.getInternalAnnotationsNavigation(currentFileVersionId);\n internalSidebarNavigationHandler(currentVersionNavigation);\n },\n });\n }\n } else {\n // Use router-based navigation\n const match = getAnnotationsMatchPath(location);\n const fileVersionId = getProp(match, 'params.fileVersionId');\n const version = feedItems\n .filter(item => item.type === FEED_ITEM_TYPE_VERSION)\n .find(item => item.id === fileVersionId);\n\n if (version) {\n onVersionChange(version, {\n currentVersionId: currentFileVersionId,\n updateVersionToCurrent: () => history.push(getAnnotationsPath(currentFileVersionId)),\n });\n }\n }\n };\n\n refreshActivitySidebar = () => {\n const { internalSidebarNavigation, isOpen, location, routerDisabled } = this.props;\n const { current } = this.sidebarPanels;\n\n let isActivity = false;\n\n if (routerDisabled && internalSidebarNavigation) {\n // Check if current navigation is pointing to activity sidebar\n isActivity = internalSidebarNavigation.sidebar === ViewType.ACTIVITY;\n } else {\n // Use router-based check\n const pathname = getProp(location, 'pathname', '');\n isActivity = !!matchPath(pathname, '/activity');\n }\n\n // If the activity sidebar is currently open, then force it to refresh with the updated data\n if (current && isActivity && isOpen) {\n current.refresh(false);\n }\n };\n\n render() {\n return <WrappedComponent ref={this.sidebarPanels} {...this.props} />;\n }\n }\n\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n WithSidebarAnnotations.displayName = `WithSidebarAnnotations(${displayName})`;\n\n return WithSidebarAnnotations;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,13 +14,14 @@ import Link from '../../components/link/Link';
|
|
|
14
14
|
import IconAlertDefault from '../../icons/general/IconAlertDefault';
|
|
15
15
|
import messages from './messages';
|
|
16
16
|
import './CascadePolicy.scss';
|
|
17
|
-
import { STANDARD_AGENT_ID, ENHANCED_AGENT_ID } from './constants';
|
|
17
|
+
import { STANDARD_AGENT_ID, ENHANCED_AGENT_ID, ENHANCED_AGENT_CONFIGURATION } from './constants';
|
|
18
18
|
const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
|
|
19
19
|
const AI_LINK = 'https://www.box.com/ai';
|
|
20
20
|
const CascadePolicy = ({
|
|
21
21
|
canEdit,
|
|
22
22
|
canUseAIFolderExtraction,
|
|
23
23
|
canUseAIFolderExtractionAgentSelector,
|
|
24
|
+
cascadePolicyConfiguration,
|
|
24
25
|
isCascadingEnabled,
|
|
25
26
|
isCascadingOverwritten,
|
|
26
27
|
isCustomMetadata,
|
|
@@ -38,6 +39,7 @@ const CascadePolicy = ({
|
|
|
38
39
|
const readOnlyState = isCascadingEnabled ? /*#__PURE__*/React.createElement("div", {
|
|
39
40
|
className: "metadata-cascade-notice"
|
|
40
41
|
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.metadataCascadePolicyEnabledInfo)) : null;
|
|
42
|
+
const isEnhancedAgentSelected = cascadePolicyConfiguration?.agent === ENHANCED_AGENT_CONFIGURATION;
|
|
41
43
|
const agents = React.useMemo(() => [{
|
|
42
44
|
id: STANDARD_AGENT_ID,
|
|
43
45
|
name: formatMessage(messages.standardAgentName),
|
|
@@ -46,8 +48,9 @@ const CascadePolicy = ({
|
|
|
46
48
|
id: ENHANCED_AGENT_ID,
|
|
47
49
|
name: formatMessage(messages.enhancedAgentName),
|
|
48
50
|
isEnterpriseDefault: false,
|
|
49
|
-
customIcon: BoxAiAdvancedColor
|
|
50
|
-
|
|
51
|
+
customIcon: BoxAiAdvancedColor,
|
|
52
|
+
isSelected: isEnhancedAgentSelected
|
|
53
|
+
}], [formatMessage, isEnhancedAgentSelected]);
|
|
51
54
|
|
|
52
55
|
// BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>
|
|
53
56
|
// Since we're passing in our own agents, we don't need to make an API call,
|
|
@@ -18,7 +18,8 @@ import Link from '../../components/link/Link';
|
|
|
18
18
|
import IconAlertDefault from '../../icons/general/IconAlertDefault';
|
|
19
19
|
import messages from './messages';
|
|
20
20
|
import './CascadePolicy.scss';
|
|
21
|
-
import { STANDARD_AGENT_ID, ENHANCED_AGENT_ID } from './constants';
|
|
21
|
+
import { STANDARD_AGENT_ID, ENHANCED_AGENT_ID, ENHANCED_AGENT_CONFIGURATION } from './constants';
|
|
22
|
+
import type { MetadataCascadePolicyConfiguration } from '../../common/types/metadata';
|
|
22
23
|
|
|
23
24
|
const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
|
|
24
25
|
const AI_LINK = 'https://www.box.com/ai';
|
|
@@ -27,6 +28,7 @@ type Props = {
|
|
|
27
28
|
canEdit: boolean,
|
|
28
29
|
canUseAIFolderExtraction: boolean,
|
|
29
30
|
canUseAIFolderExtractionAgentSelector: boolean,
|
|
31
|
+
cascadePolicyConfiguration?: MetadataCascadePolicyConfiguration,
|
|
30
32
|
isAIFolderExtractionEnabled: boolean,
|
|
31
33
|
isCascadingEnabled: boolean,
|
|
32
34
|
isCascadingOverwritten: boolean,
|
|
@@ -43,6 +45,7 @@ const CascadePolicy = ({
|
|
|
43
45
|
canEdit,
|
|
44
46
|
canUseAIFolderExtraction,
|
|
45
47
|
canUseAIFolderExtractionAgentSelector,
|
|
48
|
+
cascadePolicyConfiguration,
|
|
46
49
|
isCascadingEnabled,
|
|
47
50
|
isCascadingOverwritten,
|
|
48
51
|
isCustomMetadata,
|
|
@@ -62,6 +65,8 @@ const CascadePolicy = ({
|
|
|
62
65
|
</div>
|
|
63
66
|
) : null;
|
|
64
67
|
|
|
68
|
+
const isEnhancedAgentSelected = cascadePolicyConfiguration?.agent === ENHANCED_AGENT_CONFIGURATION;
|
|
69
|
+
|
|
65
70
|
const agents = React.useMemo(
|
|
66
71
|
() => [
|
|
67
72
|
{
|
|
@@ -74,9 +79,10 @@ const CascadePolicy = ({
|
|
|
74
79
|
name: formatMessage(messages.enhancedAgentName),
|
|
75
80
|
isEnterpriseDefault: false,
|
|
76
81
|
customIcon: BoxAiAdvancedColor,
|
|
82
|
+
isSelected: isEnhancedAgentSelected,
|
|
77
83
|
},
|
|
78
84
|
],
|
|
79
|
-
[formatMessage],
|
|
85
|
+
[formatMessage, isEnhancedAgentSelected],
|
|
80
86
|
);
|
|
81
87
|
|
|
82
88
|
// BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadePolicy.js","names":["React","InlineNotice","useCallback","FormattedMessage","useIntl","BoxAiAdvancedColor","BoxAiColor","BoxAiAgentSelectorWithApiContainer","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","STANDARD_AGENT_ID","ENHANCED_AGENT_ID","COMMUNITY_LINK","AI_LINK","CascadePolicy","canEdit","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","isExistingCascadePolicy","onAIFolderExtractionToggle","onAIAgentSelect","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","formatMessage","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","agents","useMemo","id","name","standardAgentName","isEnterpriseDefault","enhancedAgentName","customIcon","agentFetcher","Promise","resolve","handleAgentSelect","agent","Fragment","variant","variantIconAriaLabel","cascadePolicyOptionsDisabledNoticeIconAriaLabel","cascadePolicyOptionsDisabledNotice","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","isDisabled","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","aiAutofillDescription","aiAutofillLearnMore","disabled","fetcher","onSelectAgent","recordAction"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport { InlineNotice } from '@box/blueprint-web';\nimport { useCallback } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\n// $FlowFixMe\nimport { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';\nimport { type AgentType } from '@box/box-ai-agent-selector';\n\n// $FlowFixMe\nimport { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';\n\nimport Toggle from '../../components/toggle';\nimport { RadioButton, RadioGroup } from '../../components/radio';\nimport Link from '../../components/link/Link';\nimport IconAlertDefault from '../../icons/general/IconAlertDefault';\nimport messages from './messages';\nimport './CascadePolicy.scss';\nimport { STANDARD_AGENT_ID, ENHANCED_AGENT_ID } from './constants';\n\nconst COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';\nconst AI_LINK = 'https://www.box.com/ai';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction: boolean,\n canUseAIFolderExtractionAgentSelector: boolean,\n isAIFolderExtractionEnabled: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n isExistingCascadePolicy: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onAIAgentSelect?: (agent: AgentType | null) => void,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n canUseAIFolderExtraction,\n canUseAIFolderExtractionAgentSelector,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\n isAIFolderExtractionEnabled,\n isExistingCascadePolicy,\n onAIFolderExtractionToggle,\n onAIAgentSelect,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const { formatMessage } = useIntl();\n\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n const agents = React.useMemo(\n () => [\n {\n id: STANDARD_AGENT_ID,\n name: formatMessage(messages.standardAgentName),\n isEnterpriseDefault: true,\n },\n {\n id: ENHANCED_AGENT_ID,\n name: formatMessage(messages.enhancedAgentName),\n isEnterpriseDefault: false,\n customIcon: BoxAiAdvancedColor,\n },\n ],\n [formatMessage],\n );\n\n // BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>\n // Since we're passing in our own agents, we don't need to make an API call,\n // so we wrap the store data in a Promise to satisfy the component's interface requirements.\n const agentFetcher = useCallback(() => {\n return Promise.resolve({ agents });\n }, [agents]);\n\n const handleAgentSelect = useCallback(\n (agent: AgentType | null) => {\n if (onAIAgentSelect) {\n onAIAgentSelect(agent);\n }\n },\n [onAIAgentSelect],\n );\n\n return canEdit ? (\n <>\n {isExistingCascadePolicy && (\n <InlineNotice\n variant=\"info\"\n variantIconAriaLabel={formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)}\n >\n <FormattedMessage {...messages.cascadePolicyOptionsDisabledNotice} />\n </InlineNotice>\n )}\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascade-enable\" data-testid=\"metadata-cascade-enable\">\n <div>\n <FormattedMessage tagName=\"strong\" {...messages.enableCascadePolicy} />\n {!isCustomMetadata && (\n <Toggle\n aria-label={formatMessage(messages.enableCascadePolicy)}\n className={`metadata-cascade-toggle ${\n isCascadingEnabled ? 'cascade-on' : 'cascade-off'\n }`}\n isOn={isCascadingEnabled}\n label=\"\"\n onChange={e => onCascadeToggle(e.target.checked)}\n />\n )}\n </div>\n {!isCustomMetadata ? (\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.applyCascadePolicyText} />\n \n <Link className=\"cascade-policy-link\" href={COMMUNITY_LINK} target=\"_blank\">\n <FormattedMessage {...messages.cascadePolicyLearnMore} />\n </Link>\n </div>\n ) : (\n <div>\n <FormattedMessage {...messages.cannotApplyCascadePolicyText} />\n </div>\n )}\n </div>\n </div>\n {shouldShowCascadeOptions && (\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascading-mode\">\n <FormattedMessage {...messages.cascadePolicyModeQuestion} />\n\n <div className=\"metadata-operation-not-immediate\">\n <IconAlertDefault />\n <span>\n <FormattedMessage {...messages.operationNotImmediate} />\n </span>\n </div>\n <RadioGroup\n className=\"metadata-cascading-options\"\n onChange={e => onCascadeModeChange(e.target.value === 'overwrite')}\n value={isCascadingOverwritten ? 'overwrite' : 'skip'}\n >\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}\n value=\"overwrite\"\n />\n </RadioGroup>\n </div>\n </div>\n )}\n {shouldShowCascadeOptions && canUseAIFolderExtraction && (\n <div className=\"metadata-cascade-editor\" data-testid=\"ai-folder-extraction\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <BoxAiColor className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n aria-label={formatMessage(messages.enableAIAutofill)}\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n isDisabled={isExistingCascadePolicy}\n label=\"\"\n onChange={e => onAIFolderExtractionToggle(e.target.checked)}\n />\n </div>\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.aiAutofillDescription} />\n \n <Link className=\"cascade-policy-link\" href={AI_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillLearnMore} />\n </Link>\n </div>\n {canUseAIFolderExtractionAgentSelector && isAIFolderExtractionEnabled && (\n <div className=\"metadata-cascade-ai-agent-selector\">\n <BoxAiAgentSelectorWithApiContainer\n disabled={isExistingCascadePolicy}\n fetcher={agentFetcher}\n onSelectAgent={handleAgentSelect}\n recordAction={() => {}}\n />\n </div>\n )}\n </div>\n </div>\n )}\n </>\n ) : (\n readOnlyState\n );\n};\n\nexport default CascadePolicy;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CascadePolicy.js","names":["React","InlineNotice","useCallback","FormattedMessage","useIntl","BoxAiAdvancedColor","BoxAiColor","BoxAiAgentSelectorWithApiContainer","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","STANDARD_AGENT_ID","ENHANCED_AGENT_ID","ENHANCED_AGENT_CONFIGURATION","COMMUNITY_LINK","AI_LINK","CascadePolicy","canEdit","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","cascadePolicyConfiguration","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","isExistingCascadePolicy","onAIFolderExtractionToggle","onAIAgentSelect","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","formatMessage","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","isEnhancedAgentSelected","agent","agents","useMemo","id","name","standardAgentName","isEnterpriseDefault","enhancedAgentName","customIcon","isSelected","agentFetcher","Promise","resolve","handleAgentSelect","Fragment","variant","variantIconAriaLabel","cascadePolicyOptionsDisabledNoticeIconAriaLabel","cascadePolicyOptionsDisabledNotice","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","isDisabled","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","aiAutofillDescription","aiAutofillLearnMore","disabled","fetcher","onSelectAgent","recordAction"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport { InlineNotice } from '@box/blueprint-web';\nimport { useCallback } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\n// $FlowFixMe\nimport { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';\nimport { type AgentType } from '@box/box-ai-agent-selector';\n\n// $FlowFixMe\nimport { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';\n\nimport Toggle from '../../components/toggle';\nimport { RadioButton, RadioGroup } from '../../components/radio';\nimport Link from '../../components/link/Link';\nimport IconAlertDefault from '../../icons/general/IconAlertDefault';\nimport messages from './messages';\nimport './CascadePolicy.scss';\nimport { STANDARD_AGENT_ID, ENHANCED_AGENT_ID, ENHANCED_AGENT_CONFIGURATION } from './constants';\nimport type { MetadataCascadePolicyConfiguration } from '../../common/types/metadata';\n\nconst COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';\nconst AI_LINK = 'https://www.box.com/ai';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction: boolean,\n canUseAIFolderExtractionAgentSelector: boolean,\n cascadePolicyConfiguration?: MetadataCascadePolicyConfiguration,\n isAIFolderExtractionEnabled: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n isExistingCascadePolicy: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onAIAgentSelect?: (agent: AgentType | null) => void,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n canUseAIFolderExtraction,\n canUseAIFolderExtractionAgentSelector,\n cascadePolicyConfiguration,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\n isAIFolderExtractionEnabled,\n isExistingCascadePolicy,\n onAIFolderExtractionToggle,\n onAIAgentSelect,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const { formatMessage } = useIntl();\n\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n const isEnhancedAgentSelected = cascadePolicyConfiguration?.agent === ENHANCED_AGENT_CONFIGURATION;\n\n const agents = React.useMemo(\n () => [\n {\n id: STANDARD_AGENT_ID,\n name: formatMessage(messages.standardAgentName),\n isEnterpriseDefault: true,\n },\n {\n id: ENHANCED_AGENT_ID,\n name: formatMessage(messages.enhancedAgentName),\n isEnterpriseDefault: false,\n customIcon: BoxAiAdvancedColor,\n isSelected: isEnhancedAgentSelected,\n },\n ],\n [formatMessage, isEnhancedAgentSelected],\n );\n\n // BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>\n // Since we're passing in our own agents, we don't need to make an API call,\n // so we wrap the store data in a Promise to satisfy the component's interface requirements.\n const agentFetcher = useCallback(() => {\n return Promise.resolve({ agents });\n }, [agents]);\n\n const handleAgentSelect = useCallback(\n (agent: AgentType | null) => {\n if (onAIAgentSelect) {\n onAIAgentSelect(agent);\n }\n },\n [onAIAgentSelect],\n );\n\n return canEdit ? (\n <>\n {isExistingCascadePolicy && (\n <InlineNotice\n variant=\"info\"\n variantIconAriaLabel={formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)}\n >\n <FormattedMessage {...messages.cascadePolicyOptionsDisabledNotice} />\n </InlineNotice>\n )}\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascade-enable\" data-testid=\"metadata-cascade-enable\">\n <div>\n <FormattedMessage tagName=\"strong\" {...messages.enableCascadePolicy} />\n {!isCustomMetadata && (\n <Toggle\n aria-label={formatMessage(messages.enableCascadePolicy)}\n className={`metadata-cascade-toggle ${\n isCascadingEnabled ? 'cascade-on' : 'cascade-off'\n }`}\n isOn={isCascadingEnabled}\n label=\"\"\n onChange={e => onCascadeToggle(e.target.checked)}\n />\n )}\n </div>\n {!isCustomMetadata ? (\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.applyCascadePolicyText} />\n \n <Link className=\"cascade-policy-link\" href={COMMUNITY_LINK} target=\"_blank\">\n <FormattedMessage {...messages.cascadePolicyLearnMore} />\n </Link>\n </div>\n ) : (\n <div>\n <FormattedMessage {...messages.cannotApplyCascadePolicyText} />\n </div>\n )}\n </div>\n </div>\n {shouldShowCascadeOptions && (\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascading-mode\">\n <FormattedMessage {...messages.cascadePolicyModeQuestion} />\n\n <div className=\"metadata-operation-not-immediate\">\n <IconAlertDefault />\n <span>\n <FormattedMessage {...messages.operationNotImmediate} />\n </span>\n </div>\n <RadioGroup\n className=\"metadata-cascading-options\"\n onChange={e => onCascadeModeChange(e.target.value === 'overwrite')}\n value={isCascadingOverwritten ? 'overwrite' : 'skip'}\n >\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}\n value=\"overwrite\"\n />\n </RadioGroup>\n </div>\n </div>\n )}\n {shouldShowCascadeOptions && canUseAIFolderExtraction && (\n <div className=\"metadata-cascade-editor\" data-testid=\"ai-folder-extraction\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <BoxAiColor className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n aria-label={formatMessage(messages.enableAIAutofill)}\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n isDisabled={isExistingCascadePolicy}\n label=\"\"\n onChange={e => onAIFolderExtractionToggle(e.target.checked)}\n />\n </div>\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.aiAutofillDescription} />\n \n <Link className=\"cascade-policy-link\" href={AI_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillLearnMore} />\n </Link>\n </div>\n {canUseAIFolderExtractionAgentSelector && isAIFolderExtractionEnabled && (\n <div className=\"metadata-cascade-ai-agent-selector\">\n <BoxAiAgentSelectorWithApiContainer\n disabled={isExistingCascadePolicy}\n fetcher={agentFetcher}\n onSelectAgent={handleAgentSelect}\n recordAction={() => {}}\n />\n </div>\n )}\n </div>\n </div>\n )}\n </>\n ) : (\n readOnlyState\n );\n};\n\nexport default CascadePolicy;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -638,6 +638,7 @@ class Instance extends React.PureComponent {
|
|
|
638
638
|
}, /*#__PURE__*/React.createElement("div", {
|
|
639
639
|
className: "metadata-instance-editor-instance"
|
|
640
640
|
}, isCascadingPolicyApplicable && /*#__PURE__*/React.createElement(CascadePolicy, {
|
|
641
|
+
cascadePolicyConfiguration: cascadePolicy?.cascadePolicyConfiguration,
|
|
641
642
|
canEdit: isEditing && !!cascadePolicy.canEdit,
|
|
642
643
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
643
644
|
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
@@ -700,6 +700,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
700
700
|
<div className="metadata-instance-editor-instance">
|
|
701
701
|
{isCascadingPolicyApplicable && (
|
|
702
702
|
<CascadePolicy
|
|
703
|
+
cascadePolicyConfiguration={cascadePolicy?.cascadePolicyConfiguration}
|
|
703
704
|
canEdit={isEditing && !!cascadePolicy.canEdit}
|
|
704
705
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
705
706
|
canUseAIFolderExtractionAgentSelector={
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES","ENHANCED_AGENT_CONFIGURATION","ENHANCED_AGENT_ID","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","cascadePolicyConfiguration","currentData","errors","isAIFolderExtractionEnabled","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","shouldShowCascadeOptions","agent","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","isCascadingEnabledThroughProps","isAIFolderExtractionEnabledThroughProps","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","cascadePolicyType","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isOpen","animationDuration","isExistingCascadePolicy","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIAgentSelect","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","isDisabled","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport type { AgentType } from '@box/box-ai-agent-selector';\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport {\n CASCADE_POLICY_TYPE_AI_EXTRACT,\n TEMPLATE_CUSTOM_PROPERTIES,\n ENHANCED_AGENT_CONFIGURATION,\n ENHANCED_AGENT_ID,\n} from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadePolicyConfiguration,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n cascadePolicyConfiguration: MetadataCascadePolicyConfiguration | null,\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const {\n cascadePolicyConfiguration,\n data: currentData,\n errors,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n isCascadingOverwritten,\n }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n // reset state if cascading policy is removed\n isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,\n });\n\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n isAIFolderExtractionEnabled,\n cascadePolicyConfiguration,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Handles the selection of an AI agent\n * @param {AgentType | null} agent - The selected agent\n */\n onAIAgentSelect = (agent: AgentType | null): void => {\n // '2' is the id for the enhanced agent\n if (agent && agent.id === ENHANCED_AGENT_ID) {\n this.setState({\n cascadePolicyConfiguration: {\n agent: ENHANCED_AGENT_CONFIGURATION,\n },\n });\n } else {\n this.setState({ cascadePolicyConfiguration: null });\n }\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);\n\n return {\n cascadePolicyConfiguration: null,\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged =\n isCascadingOverwritten ||\n isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||\n isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled through props based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabledThroughProps(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Determines if ai extraction is enabled based on\n * if cascade policy type is ai_extract\n *\n * @param {Object} props - component props\n * @return {boolean} true if ai extraction is enabled\n */\n isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {\n return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n const isExistingCascadePolicy = this.isCascadingEnabledThroughProps(this.props);\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={\n canUseAIFolderExtractionAgentSelector\n }\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n isExistingCascadePolicy={isExistingCascadePolicy}\n onAIAgentSelect={this.onAIAgentSelect}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n isDisabled={isAIFolderExtractionEnabled}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES","ENHANCED_AGENT_CONFIGURATION","ENHANCED_AGENT_ID","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","cascadePolicyConfiguration","currentData","errors","isAIFolderExtractionEnabled","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","shouldShowCascadeOptions","agent","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","isCascadingEnabledThroughProps","isAIFolderExtractionEnabledThroughProps","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","cascadePolicyType","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isOpen","animationDuration","isExistingCascadePolicy","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIAgentSelect","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","isDisabled","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport type { AgentType } from '@box/box-ai-agent-selector';\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport {\n CASCADE_POLICY_TYPE_AI_EXTRACT,\n TEMPLATE_CUSTOM_PROPERTIES,\n ENHANCED_AGENT_CONFIGURATION,\n ENHANCED_AGENT_ID,\n} from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadePolicyConfiguration,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n cascadePolicyConfiguration: MetadataCascadePolicyConfiguration | null,\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const {\n cascadePolicyConfiguration,\n data: currentData,\n errors,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n isCascadingOverwritten,\n }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n // reset state if cascading policy is removed\n isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,\n });\n\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n isAIFolderExtractionEnabled,\n cascadePolicyConfiguration,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Handles the selection of an AI agent\n * @param {AgentType | null} agent - The selected agent\n */\n onAIAgentSelect = (agent: AgentType | null): void => {\n // '2' is the id for the enhanced agent\n if (agent && agent.id === ENHANCED_AGENT_ID) {\n this.setState({\n cascadePolicyConfiguration: {\n agent: ENHANCED_AGENT_CONFIGURATION,\n },\n });\n } else {\n this.setState({ cascadePolicyConfiguration: null });\n }\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);\n\n return {\n cascadePolicyConfiguration: null,\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged =\n isCascadingOverwritten ||\n isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||\n isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled through props based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabledThroughProps(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Determines if ai extraction is enabled based on\n * if cascade policy type is ai_extract\n *\n * @param {Object} props - component props\n * @return {boolean} true if ai extraction is enabled\n */\n isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {\n return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n const isExistingCascadePolicy = this.isCascadingEnabledThroughProps(this.props);\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n cascadePolicyConfiguration={cascadePolicy?.cascadePolicyConfiguration}\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={\n canUseAIFolderExtractionAgentSelector\n }\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n isExistingCascadePolicy={isExistingCascadePolicy}\n onAIAgentSelect={this.onAIAgentSelect}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n isDisabled={isAIFolderExtractionEnabled}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,6 +2,6 @@ import type { Meta, StoryObj } from '@storybook/react';
|
|
|
2
2
|
import ContentExplorer from '../../ContentExplorer';
|
|
3
3
|
type Story = StoryObj<typeof ContentExplorer>;
|
|
4
4
|
export declare const metadataView: Story;
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const metadataViewV2: Story;
|
|
6
6
|
declare const meta: Meta<typeof ContentExplorer>;
|
|
7
7
|
export default meta;
|
package/i18n/bn-IN.js
CHANGED
|
@@ -302,7 +302,7 @@ export default {
|
|
|
302
302
|
"be.noActivity": "এখনও কোনও কার্যকলাপ নেই",
|
|
303
303
|
"be.noActivityAnnotationPrompt": "প্রিভিউয়ের উপরে ঘুরে দেখুন এবং ফাইলটি অ্যানোটেট করতে নীচের নিয়ন্ত্রণগুলি ব্যবহার করুন।",
|
|
304
304
|
"be.noActivityCommentPrompt": "মন্তব্য করুন ও @ব্যক্তিদের বিজ্ঞপ্তি জানাতে তাদের উল্লেখ করুন।",
|
|
305
|
-
"be.numFilesSelected": "
|
|
305
|
+
"be.numFilesSelected": "{numSelected, plural, =0 {0 files selected} one {1 file selected} other {# files selected} } ",
|
|
306
306
|
"be.open": "খুলুন",
|
|
307
307
|
"be.pagination.nextPage": "পরবর্তী পৃষ্ঠা",
|
|
308
308
|
"be.pagination.nextPageButton": "পরবর্তী",
|
package/i18n/bn-IN.properties
CHANGED
|
@@ -92,6 +92,8 @@ be.breadcrumb.breadcrumbLabel = ব্রেডকাম্ব
|
|
|
92
92
|
be.cancel = বাতিল করুন
|
|
93
93
|
# Label for choose action.
|
|
94
94
|
be.choose = বেছে নিন
|
|
95
|
+
# Aria label for the clear selection button.
|
|
96
|
+
be.clearSelection = Clear selection
|
|
95
97
|
# Label for close action.
|
|
96
98
|
be.close = বন্ধ করুন
|
|
97
99
|
# Icon title for a Box item of type folder that has collaborators
|
|
@@ -602,6 +604,8 @@ be.noActivity = এখনও কোনও কার্যকলাপ নেই
|
|
|
602
604
|
be.noActivityAnnotationPrompt = প্রিভিউয়ের উপরে ঘুরে দেখুন এবং ফাইলটি অ্যানোটেট করতে নীচের নিয়ন্ত্রণগুলি ব্যবহার করুন।
|
|
603
605
|
# Message shown in
|
|
604
606
|
be.noActivityCommentPrompt = মন্তব্য করুন ও @ব্যক্তিদের বিজ্ঞপ্তি জানাতে তাদের উল্লেখ করুন।
|
|
607
|
+
# Text shown to indicate the number of files selected
|
|
608
|
+
be.numFilesSelected = {numSelected, plural, =0 {0 files selected} one {1 file selected} other {# files selected} }
|
|
605
609
|
# Label for open action.
|
|
606
610
|
be.open = খুলুন
|
|
607
611
|
# Next page button tooltip
|