box-ui-elements 23.4.0-beta.33 → 23.4.0-beta.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.js +1 -1
- package/es/elements/common/types/SidebarNavigation.js +4 -2
- package/es/elements/common/types/SidebarNavigation.js.flow +7 -4
- package/es/elements/common/types/SidebarNavigation.js.map +1 -1
- package/es/elements/content-preview/PreviewNavigation.js +65 -2
- package/es/elements/content-preview/PreviewNavigation.js.flow +86 -2
- package/es/elements/content-preview/PreviewNavigation.js.map +1 -1
- package/es/elements/content-sidebar/ActivitySidebar.js +39 -7
- package/es/elements/content-sidebar/ActivitySidebar.js.flow +42 -6
- package/es/elements/content-sidebar/ActivitySidebar.js.map +1 -1
- package/es/src/elements/common/types/SidebarNavigation.d.ts +10 -4
- package/package.json +1 -1
- package/src/elements/common/types/SidebarNavigation.js.flow +7 -4
- package/src/elements/common/types/SidebarNavigation.ts +11 -3
- package/src/elements/content-preview/PreviewNavigation.js +86 -2
- package/src/elements/content-preview/__tests__/PreviewNavigation.test.js +202 -62
- package/src/elements/content-sidebar/ActivitySidebar.js +42 -6
- package/src/elements/content-sidebar/__tests__/ActivitySidebar.rtl.test.js +521 -0
- package/src/elements/content-sidebar/__tests__/ActivitySidebar.test.js +1 -123
- package/src/elements/content-sidebar/__tests__/AddTaskButton.test.js +6 -5
- package/src/elements/content-sidebar/versions/__tests__/StaticVersionSidebar.test.js +3 -5
- package/src/elements/content-preview/__tests__/__snapshots__/PreviewNavigation.test.js.snap +0 -361
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivitySidebar.js","names":["React","classNames","debounce","flow","getProp","noop","uniqueId","FormattedMessage","generatePath","ActivityFeed","AddTaskButton","API","messages","SidebarContent","EVENT_DATA_READY","EVENT_JS_READY","getBadUserError","mark","withAnnotatorContext","withAPIContext","withErrorBoundary","withFeatureConsumer","isFeatureEnabled","withLogger","withRouterAndRef","ActivitySidebarFilter","ACTIVITY_FILTER_OPTION_ALL","ACTIVITY_FILTER_OPTION_RESOLVED","ACTIVITY_FILTER_OPTION_TASKS","ACTIVITY_FILTER_OPTION_UNRESOLVED","DEFAULT_COLLAB_DEBOUNCE","ERROR_CODE_FETCH_ACTIVITY","FEED_ITEM_TYPE_ANNOTATION","FEED_ITEM_TYPE_COMMENT","FEED_ITEM_TYPE_TASK","FEED_ITEM_TYPE_VERSION","ORIGIN_ACTIVITY_SIDEBAR","SIDEBAR_VIEW_ACTIVITY","TASK_COMPLETION_RULE_ALL","METRIC_TYPE_UAA_PARITY_METRIC","activityFeedInlineError","inlineError","title","errorOccured","content","activityFeedItemApiError","MARK_NAME_DATA_LOADING","MARK_NAME_DATA_READY","MARK_NAME_JS_READY","ActivitySidebar","PureComponent","constructor","props","_defineProperty","id","permissions","api","emitAnnotationRemoveEvent","file","getFeedAPI","deleteAnnotation","deleteAnnotationSuccess","bind","feedErrorCallback","fetchFeedItems","text","emitAnnotationUpdateEvent","description","message","updateAnnotation","undefined","annotation","feedSuccessCallback","status","e","code","contextInfo","errorCallback","assignees","taskType","dueAt","completionRule","onSuccess","onError","currentUser","successCallback","createTaskNew","task","onTaskDelete","deleteTaskNew","taskId","onTaskUpdate","updateTaskNew","taskAssignmentId","onTaskAssignmentUpdate","updateTaskCollaborator","hasReplies","onCommentDelete","comment","deleteThreadedComment","deleteComment","parentId","emitAnnotationReplyDeleteEvent","deleteReply","deleteReplySuccessCallback","hasMention","onCommentUpdate","updateThreadedComment","updateComment","emitAnnotationReplyUpdateEvent","tagged_message","updateReply","updateReplySuccessCallback","error","replies","activeFeedEntryId","history","feedItems","state","feedAPI","length","some","item","getCommentFeedItemByReplyId","replace","getActiveCommentPath","updateFeedItem","reply","onCommentCreate","createThreadedComment","createComment","parentType","emitAnnotationReplyCreateEvent","eventRequestId","createReply","createReplySuccessCallback","deleteAppActivity","getActiveFeedEntryData","then","type","isActiveEntryInFeed","isItemTypeComment","Promise","resolve","getFeedItemsWithReplies","updatedItems","fetchFeedItemsSuccessCallback","catch","fetchFeedItemsErrorCallback","fileId","logger","onDataReadyMetric","endMarkName","startMarkName","setState","activityFeedError","parityData","onPreviewMetric","errors","Array","isArray","Error","showNotification","map","feedItem","_objectSpread","reject","fetchReplies","updatedFeedItems","getCommentFeedItemWithReplies","console","collaborators","entries","approverSelectorContacts","contactsLoaded","mentionSelectorContacts","searchStr","getFileCollaboratorsAPI","getCollaboratorsWithQuery","getApproverContactsSuccessCallback","includeGroups","getMentionContactsSuccessCallback","itemId","find","isItemTypeFocusable","replyId","getFocusableFeedItemById","activeFeedEntryType","firstLevelItem","firstLevelItemWithActiveReply","fetchThreadedComment","parent","parentItem","userId","getUsersAPI","getAvatarUrlWithAccessToken","file_version","nextActiveAnnotationId","emitActiveAnnotationChangeEvent","getAnnotationsMatchPath","getAnnotationsPath","location","onAnnotationSelect","annotationFileVersionId","currentFileVersionId","match","selectedFileVersionId","push","onFilterChange","feedItemsStatusFilter","filter","isDisabled","hasTasks","getApprover","getAvatarUrl","createTask","onTaskModalClose","createElement","taskFormProps","approvers","getApproverWithQuery","features","shouldShowActivityFeedFilter","shouldShowAdditionalFilterOptions","activityFilterOptions","feedItemType","onFeedItemTypeClick","selectedStatus","handleItemsFiltered","Fragment","renderActivitySidebarFilter","renderAddTaskButton","shouldHideTitle","sidebarActivityTitle","onReadyMetric","componentDidMount","shouldRefreshCache","shouldDestroy","shouldShowReplies","shouldShowTasks","hasVersions","shouldShowVersions","shouldFetchReplies","shouldShowAppActivity","shouldShowAnnotations","shouldUseUAA","fetchRepliesForFeedItems","logAPIParity","commentId","sidebar","refresh","render","currentUserError","elementId","onVersionHistoryClick","getUserProfileUrl","onTaskView","isNewThreadedRepliesEnabled","actions","renderActions","className","sidebarView","renderTitle","getFilteredFeedItems","getMentionWithQuery","getMention","hasNewThreadedReplies","onAnnotationDelete","handleAnnotationDelete","onAnnotationEdit","handleAnnotationEdit","handleAnnotationSelect","onAnnotationStatusChange","handleAnnotationStatusChange","onAppActivityDelete","onHideReplies","updateReplies","onReplyCreate","onReplyDelete","onReplyUpdate","onShowReplies","getReplies","updateTaskAssignment","onTaskCreate","deleteTask","updateTask","annotatorState","onVersionChange","ActivitySidebarComponent"],"sources":["../../../src/elements/content-sidebar/ActivitySidebar.js"],"sourcesContent":["/**\n * @flow\n * @file Activity feed sidebar component\n * @author Box\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport uniqueId from 'lodash/uniqueId';\nimport { FormattedMessage } from 'react-intl';\nimport { generatePath, type ContextRouter } from 'react-router-dom';\nimport ActivityFeed from './activity-feed';\nimport AddTaskButton from './AddTaskButton';\nimport API from '../../api';\nimport messages from '../common/messages';\nimport SidebarContent from './SidebarContent';\nimport { EVENT_DATA_READY, EVENT_JS_READY } from '../common/logger/constants';\nimport { getBadUserError } from '../../utils/error';\nimport { mark } from '../../utils/performance';\nimport { withAnnotatorContext } from '../common/annotator-context';\nimport { withAPIContext } from '../common/api-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withFeatureConsumer, isFeatureEnabled } from '../common/feature-checking';\nimport { withLogger } from '../common/logger';\nimport { withRouterAndRef } from '../common/routing';\nimport ActivitySidebarFilter from './ActivitySidebarFilter';\nimport {\n ACTIVITY_FILTER_OPTION_ALL,\n ACTIVITY_FILTER_OPTION_RESOLVED,\n ACTIVITY_FILTER_OPTION_TASKS,\n ACTIVITY_FILTER_OPTION_UNRESOLVED,\n DEFAULT_COLLAB_DEBOUNCE,\n ERROR_CODE_FETCH_ACTIVITY,\n FEED_ITEM_TYPE_ANNOTATION,\n FEED_ITEM_TYPE_COMMENT,\n FEED_ITEM_TYPE_TASK,\n FEED_ITEM_TYPE_VERSION,\n ORIGIN_ACTIVITY_SIDEBAR,\n SIDEBAR_VIEW_ACTIVITY,\n TASK_COMPLETION_RULE_ALL,\n METRIC_TYPE_UAA_PARITY_METRIC,\n} from '../../constants';\nimport type {\n TaskCompletionRule,\n TaskType,\n TaskNew,\n TaskUpdatePayload,\n TaskCollabStatus,\n} from '../../common/types/tasks';\nimport type {\n Annotation,\n AnnotationPermission,\n ActivityFilterItemType,\n ActivityFilterOption,\n BoxCommentPermission,\n Comment,\n CommentFeedItemType,\n FocusableFeedItem,\n FocusableFeedItemType,\n FeedItem,\n FeedItems,\n FeedItemStatus,\n FeedItemType,\n} from '../../common/types/feed';\nimport type { ErrorContextProps, ElementsXhrError } from '../../common/types/api';\nimport type { WithLoggerProps } from '../../common/types/logging';\nimport type { SelectorItems, User, UserMini, GroupMini, BoxItem } from '../../common/types/core';\nimport type { Errors, GetProfileUrlCallback } from '../common/flowTypes';\nimport type { Translations } from './flowTypes';\nimport type { FeatureConfig } from '../common/feature-checking';\nimport type { WithAnnotatorContextProps } from '../common/annotator-context';\nimport './ActivitySidebar.scss';\n\nimport type { OnAnnotationEdit, OnAnnotationStatusChange } from './activity-feed/comment/types';\n\ntype ExternalProps = {\n activeFeedEntryId?: string,\n activeFeedEntryType?: FocusableFeedItemType,\n currentUser?: User,\n currentUserError?: Errors,\n getUserProfileUrl?: GetProfileUrlCallback,\n hasReplies?: boolean,\n hasTasks?: boolean,\n hasVersions?: boolean,\n onCommentCreate: Function,\n onCommentDelete: (comment: Comment) => any,\n onCommentUpdate: () => any,\n onTaskAssignmentUpdate: Function,\n onTaskCreate: Function,\n onTaskDelete: (id: string) => any,\n onTaskUpdate: () => any,\n onTaskView: (id: string, isCreator: boolean) => any,\n} & ErrorContextProps &\n WithAnnotatorContextProps;\n\ntype PropsWithoutContext = {\n elementId: string,\n file: BoxItem,\n hasSidebarInitialized?: boolean,\n isDisabled: boolean,\n onAnnotationSelect: Function,\n onFilterChange: (status?: ActivityFilterItemType) => void,\n onVersionChange: Function,\n onVersionHistoryClick?: Function,\n translations?: Translations,\n} & ExternalProps &\n WithLoggerProps &\n ContextRouter;\n\ntype Props = {\n api: API,\n features: FeatureConfig,\n} & PropsWithoutContext;\n\ntype State = {\n activityFeedError?: Errors,\n approverSelectorContacts: SelectorItems<UserMini | GroupMini>,\n contactsLoaded?: boolean,\n feedItems?: FeedItems,\n feedItemsStatusFilter?: ActivityFilterItemType,\n mentionSelectorContacts?: SelectorItems<UserMini>,\n};\n\nexport const activityFeedInlineError: Errors = {\n inlineError: {\n title: messages.errorOccured,\n content: messages.activityFeedItemApiError,\n },\n};\n\nconst MARK_NAME_DATA_LOADING = `${ORIGIN_ACTIVITY_SIDEBAR}_data_loading`;\nconst MARK_NAME_DATA_READY = `${ORIGIN_ACTIVITY_SIDEBAR}_${EVENT_DATA_READY}`;\nconst MARK_NAME_JS_READY = `${ORIGIN_ACTIVITY_SIDEBAR}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nclass ActivitySidebar extends React.PureComponent<Props, State> {\n static defaultProps = {\n annotatorState: {},\n emitActiveAnnotationChangeEvent: noop,\n emitAnnotationRemoveEvent: noop,\n emitAnnotationReplyCreateEvent: noop,\n emitAnnotationReplyDeleteEvent: noop,\n emitAnnotationReplyUpdateEvent: noop,\n emitAnnotationUpdateEvent: noop,\n getAnnotationsMatchPath: noop,\n getAnnotationsPath: noop,\n hasReplies: false,\n hasTasks: true,\n hasVersions: true,\n isDisabled: false,\n onAnnotationSelect: noop,\n onCommentCreate: noop,\n onCommentDelete: noop,\n onCommentUpdate: noop,\n onFilterChange: noop,\n onTaskAssignmentUpdate: noop,\n onTaskCreate: noop,\n onTaskDelete: noop,\n onTaskUpdate: noop,\n onVersionChange: noop,\n onVersionHistoryClick: noop,\n };\n\n constructor(props: Props) {\n super(props);\n // eslint-disable-next-line react/prop-types\n const { logger } = this.props;\n\n mark(MARK_NAME_DATA_LOADING);\n\n logger.onReadyMetric({\n endMarkName: MARK_NAME_JS_READY,\n });\n this.state = {};\n }\n\n componentDidMount() {\n this.fetchFeedItems(true);\n }\n\n handleAnnotationDelete = ({ id, permissions }: { id: string, permissions: AnnotationPermission }) => {\n const { api, emitAnnotationRemoveEvent, file } = this.props;\n\n emitAnnotationRemoveEvent(id, true);\n api.getFeedAPI(false).deleteAnnotation(\n file,\n id,\n permissions,\n this.deleteAnnotationSuccess.bind(this, id),\n this.feedErrorCallback,\n );\n\n this.fetchFeedItems();\n };\n\n handleAnnotationEdit: OnAnnotationEdit = ({ id, text, permissions }) => {\n const { api, emitAnnotationUpdateEvent, file } = this.props;\n\n emitAnnotationUpdateEvent(\n {\n id,\n description: {\n message: text,\n },\n },\n true,\n );\n api.getFeedAPI(false).updateAnnotation(\n file,\n id,\n text,\n undefined,\n permissions,\n (annotation: Annotation) => {\n emitAnnotationUpdateEvent(annotation);\n this.feedSuccessCallback();\n },\n this.feedErrorCallback,\n );\n\n this.fetchFeedItems();\n };\n\n handleAnnotationStatusChange: OnAnnotationStatusChange = ({ id, permissions, status }) => {\n const { api, emitAnnotationUpdateEvent, file } = this.props;\n\n emitAnnotationUpdateEvent({ id, status }, true);\n api.getFeedAPI(false).updateAnnotation(\n file,\n id,\n undefined,\n status,\n permissions,\n (annotation: Annotation) => {\n emitAnnotationUpdateEvent(annotation);\n this.feedSuccessCallback();\n },\n this.feedErrorCallback,\n );\n\n this.fetchFeedItems();\n };\n\n deleteAnnotationSuccess(id: string) {\n const { emitAnnotationRemoveEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationRemoveEvent(id);\n }\n\n /**\n * Success callback for fetching feed items\n */\n feedSuccessCallback = (): void => {\n this.fetchFeedItems();\n };\n\n /**\n * Error callback for fetching feed items\n *\n * @param {Error} e - the error which occured\n * @param {Error} code - the code for the error\n * @param {Object} contextInfo - the context info for the error\n */\n feedErrorCallback = (e: ElementsXhrError, code: string, contextInfo?: Object) => {\n this.errorCallback(e, code, contextInfo);\n this.fetchFeedItems();\n };\n\n createTask = (\n message: string,\n assignees: SelectorItems<>,\n taskType: TaskType,\n dueAt: ?string,\n completionRule: TaskCompletionRule,\n onSuccess: ?Function,\n onError: ?Function,\n ): void => {\n const { api, currentUser, file } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n const errorCallback = (e, code, contextInfo) => {\n if (onError) {\n onError(e, code, contextInfo);\n }\n this.feedErrorCallback(e, code, contextInfo);\n };\n const successCallback = () => {\n if (onSuccess) {\n onSuccess();\n }\n this.feedSuccessCallback();\n };\n\n api.getFeedAPI(false).createTaskNew(\n file,\n currentUser,\n message,\n assignees,\n taskType,\n dueAt,\n completionRule,\n successCallback,\n errorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n deleteTask = (task: TaskNew): void => {\n const { file, api, onTaskDelete } = this.props;\n api.getFeedAPI(false).deleteTaskNew(\n file,\n task,\n (taskId: string) => {\n this.feedSuccessCallback();\n onTaskDelete(taskId);\n },\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n updateTask = (task: TaskUpdatePayload, onSuccess: ?Function, onError: ?Function): void => {\n const { api, file, onTaskUpdate } = this.props;\n const errorCallback = (e, code) => {\n if (onError) {\n onError(e, code);\n }\n this.feedErrorCallback(e, code);\n };\n const successCallback = () => {\n this.feedSuccessCallback();\n\n if (onSuccess) {\n onSuccess();\n }\n\n onTaskUpdate();\n };\n\n api.getFeedAPI(false).updateTaskNew(file, task, successCallback, errorCallback);\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n updateTaskAssignment = (taskId: string, taskAssignmentId: string, status: TaskCollabStatus): void => {\n const { api, currentUser = {}, file, onTaskAssignmentUpdate } = this.props;\n\n const successCallback = () => {\n this.feedSuccessCallback();\n onTaskAssignmentUpdate(taskId, taskAssignmentId, status, currentUser.id);\n };\n\n api.getFeedAPI(false).updateTaskCollaborator(\n file,\n taskId,\n taskAssignmentId,\n status,\n successCallback,\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Deletes a comment via the API.\n *\n * @param {Object} args - A subset of the comment\n * @return void\n */\n deleteComment = ({ id, permissions }: { id: string, permissions: BoxCommentPermission }): void => {\n const { api, file, hasReplies, onCommentDelete } = this.props;\n\n const successCallback = (comment: Comment) => {\n this.feedSuccessCallback();\n onCommentDelete(comment);\n };\n\n if (hasReplies) {\n api.getFeedAPI(false).deleteThreadedComment(file, id, permissions, successCallback, this.feedErrorCallback);\n } else {\n api.getFeedAPI(false).deleteComment(file, id, permissions, successCallback, this.feedErrorCallback);\n }\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Deletes a reply via the API.\n *\n * @param {Object} args - A subset of the comment\n * @return void\n */\n deleteReply = ({\n id,\n parentId,\n permissions,\n }: {\n id: string,\n parentId: string,\n permissions: BoxCommentPermission,\n }): void => {\n const { api, emitAnnotationReplyDeleteEvent, file } = this.props;\n\n emitAnnotationReplyDeleteEvent(id, parentId, true);\n api.getFeedAPI(false).deleteReply(\n file,\n id,\n parentId,\n permissions,\n this.deleteReplySuccessCallback.bind(this, id, parentId),\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Handles a successful deletion of a reply\n *\n * @private\n * @param {string} id - The id of the reply\n * @param {string} parentId - The id of the reply's parent item\n * @return {void}\n */\n deleteReplySuccessCallback = (id: string, parentId: string) => {\n const { emitAnnotationReplyDeleteEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationReplyDeleteEvent(id, parentId);\n };\n\n updateComment = (\n id: string,\n text?: string,\n status?: FeedItemStatus,\n hasMention: boolean,\n permissions: BoxCommentPermission,\n onSuccess: ?Function,\n onError: ?Function,\n ): void => {\n const { api, file, hasReplies, onCommentUpdate } = this.props;\n\n const errorCallback = (e, code) => {\n if (onError) {\n onError(e, code);\n }\n this.feedErrorCallback(e, code);\n };\n\n const successCallback = () => {\n this.feedSuccessCallback();\n if (onSuccess) {\n onSuccess();\n }\n onCommentUpdate();\n };\n\n if (hasReplies) {\n api.getFeedAPI(false).updateThreadedComment(\n file,\n id,\n text,\n status,\n permissions,\n successCallback,\n errorCallback,\n );\n } else {\n api.getFeedAPI(false).updateComment(\n file,\n id,\n text || '',\n hasMention,\n permissions,\n successCallback,\n errorCallback,\n );\n }\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Updates a reply\n *\n * @param {string} id - id of the reply\n * @param {string} parentId - id of the parent item\n * @param {string} text - the reply updated text\n * @param {BoxCommentPermission} permissions - permissions associated with the reply\n * @param {Function} onSuccess - the success callback\n * @param {Function} onError - the error callback\n * @return {void}\n */\n updateReply = (\n id: string,\n parentId: string,\n text: string,\n permissions: BoxCommentPermission,\n onSuccess: ?Function,\n onError: ?Function,\n ): void => {\n const { api, emitAnnotationReplyUpdateEvent, file } = this.props;\n\n emitAnnotationReplyUpdateEvent({ id, tagged_message: text }, parentId, true);\n api.getFeedAPI(false).updateReply(\n file,\n id,\n parentId,\n text,\n permissions,\n this.updateReplySuccessCallback.bind(this, parentId, onSuccess),\n (error, code) => {\n if (onError) {\n onError(error, code);\n }\n this.feedErrorCallback(error, code);\n },\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Updates replies of a comment or annotation in the Feed\n *\n * @param {string} id - id of the feed item\n * @param {Array<Comment>} replies - replies\n * @return {void}\n */\n updateReplies = (id: string, replies: Array<Comment>) => {\n const { activeFeedEntryId, api, file, history } = this.props;\n const { feedItems } = this.state;\n\n if (!feedItems) {\n return;\n }\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n // Detect if replies are being hidden and activeFeedEntryId belongs to a reply\n // that is in currently being updated parent, in order to disable active item\n if (\n activeFeedEntryId &&\n replies.length === 1 &&\n feedItems.some(\n (item: FeedItem) =>\n item.id === id && item === this.getCommentFeedItemByReplyId(feedItems, activeFeedEntryId),\n )\n ) {\n history.replace(this.getActiveCommentPath());\n }\n\n feedAPI.updateFeedItem({ replies }, id);\n\n this.fetchFeedItems();\n };\n\n /**\n * Handles a successful update of a reply\n *\n * @private\n * @param {string} parentId - The id of the reply's parent item\n * @param {Function} onSuccess - the success callback\n * @param {Comment} reply - The reply comment object\n * @return {void}\n */\n updateReplySuccessCallback = (parentId: string, onSuccess: ?Function, reply: Comment) => {\n const { emitAnnotationReplyUpdateEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationReplyUpdateEvent(reply, parentId);\n if (onSuccess) {\n onSuccess();\n }\n };\n\n /**\n * Posts a new comment to the API\n *\n * @param {string} text - The comment's text\n * @param {boolean} hasMention - The comment's text\n * @return {void}\n */\n createComment = (text: string, hasMention: boolean): void => {\n const { api, currentUser, file, hasReplies, onCommentCreate } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const successCallback = (comment: Comment) => {\n onCommentCreate(comment);\n this.feedSuccessCallback();\n };\n\n if (hasReplies) {\n api.getFeedAPI(false).createThreadedComment(\n file,\n currentUser,\n text,\n successCallback,\n this.feedErrorCallback,\n );\n } else {\n api.getFeedAPI(false).createComment(\n file,\n currentUser,\n text,\n hasMention,\n successCallback,\n this.feedErrorCallback,\n );\n }\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Posts a new reply to the API\n *\n * @param {string} parentId - The id of the parent item\n * @param {CommentFeedItemType} parentType - The type of the parent item\n * @param {string} text - The text of reply\n * @return {void}\n */\n createReply = (parentId: string, parentType: CommentFeedItemType, text: string): void => {\n const { api, currentUser, emitAnnotationReplyCreateEvent, file } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const eventRequestId = uniqueId('comment_');\n emitAnnotationReplyCreateEvent({ tagged_message: text }, eventRequestId, parentId, true);\n api.getFeedAPI(false).createReply(\n file,\n currentUser,\n parentId,\n parentType,\n text,\n this.createReplySuccessCallback.bind(this, eventRequestId, parentId),\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Handles a successful creation of a reply\n *\n * @private\n * @param {string} eventRequestId - The id of the parent item\n * @param {string} parentId - The id of the reply's parent item\n * @param {Comment} reply - The reply comment object\n * @return {void}\n */\n createReplySuccessCallback = (eventRequestId: string, parentId: string, reply: Comment) => {\n const { emitAnnotationReplyCreateEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationReplyCreateEvent(reply, eventRequestId, parentId);\n };\n\n /**\n * Deletes an app activity item via the API.\n *\n * @param {Object} args - A subset of the app activity\n * @return void\n */\n deleteAppActivity = ({ id }: { id: string }): void => {\n const { api, file } = this.props;\n\n api.getFeedAPI(false).deleteAppActivity(file, id, this.feedSuccessCallback, this.feedErrorCallback);\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Fetches the feed items for the sidebar\n *\n * @param {boolean} shouldRefreshCache true if the cache should be refreshed\n * @param {boolean} shouldDestroy true if the api factory should be destroyed\n */\n fetchFeedItems(shouldRefreshCache: boolean = false, shouldDestroy: boolean = false) {\n const {\n activeFeedEntryId,\n activeFeedEntryType,\n api,\n file,\n features,\n hasReplies: shouldShowReplies,\n hasTasks: shouldShowTasks,\n hasVersions: shouldShowVersions,\n } = this.props;\n const shouldFetchReplies =\n shouldRefreshCache &&\n shouldShowReplies &&\n activeFeedEntryId &&\n activeFeedEntryType === FEED_ITEM_TYPE_COMMENT;\n const shouldShowAppActivity = isFeatureEnabled(features, 'activityFeed.appActivity.enabled');\n const shouldShowAnnotations = isFeatureEnabled(features, 'activityFeed.annotations.enabled');\n const shouldUseUAA = isFeatureEnabled(features, 'activityFeed.uaaIntegration.enabled');\n\n api.getFeedAPI(shouldDestroy).feedItems(\n file,\n shouldRefreshCache,\n shouldFetchReplies ? this.fetchRepliesForFeedItems : this.fetchFeedItemsSuccessCallback,\n this.fetchFeedItemsErrorCallback,\n this.errorCallback,\n {\n shouldShowAnnotations,\n shouldShowAppActivity,\n shouldShowReplies,\n shouldShowTasks,\n shouldShowVersions,\n shouldUseUAA,\n },\n shouldUseUAA ? this.logAPIParity : undefined,\n );\n }\n\n fetchRepliesForFeedItems = (feedItems: FeedItems) => {\n const { activeFeedEntryId } = this.props;\n\n if (!activeFeedEntryId) {\n return;\n }\n\n this.getActiveFeedEntryData(feedItems)\n .then(({ id, type }) => {\n if (\n !id ||\n !type ||\n this.isActiveEntryInFeed(feedItems, activeFeedEntryId) ||\n !this.isItemTypeComment(type)\n ) {\n return Promise.resolve(feedItems);\n }\n\n const parentType: CommentFeedItemType =\n type === FEED_ITEM_TYPE_COMMENT ? FEED_ITEM_TYPE_COMMENT : FEED_ITEM_TYPE_ANNOTATION;\n\n return this.getFeedItemsWithReplies(feedItems, id, parentType);\n })\n .then(updatedItems => this.fetchFeedItemsSuccessCallback(updatedItems))\n .catch(error => this.fetchFeedItemsErrorCallback(feedItems, [error]));\n };\n\n /**\n * Handles a successful feed API fetch\n *\n * @private\n * @param {Array} feedItems - the feed items\n * @return {void}\n */\n fetchFeedItemsSuccessCallback = (feedItems: FeedItems): void => {\n const {\n file: { id: fileId },\n logger,\n } = this.props;\n\n mark(MARK_NAME_DATA_READY);\n\n // Only emit metric if has >1 activity feed items (there should always at least be the current version)\n if (feedItems.length > 1) {\n logger.onDataReadyMetric(\n {\n endMarkName: MARK_NAME_DATA_READY,\n startMarkName: MARK_NAME_DATA_LOADING,\n },\n fileId,\n );\n }\n\n this.setState({ feedItems, activityFeedError: undefined });\n };\n\n /**\n * Logs diff between UAA and v2 API data\n *\n * @param {{}[]} responseParity array of aggragated responses from UAA and v2\n * @param {{}} parsedDataParity parsed data from UAA and v2\n * @return {void}\n */\n logAPIParity = (parityData: { uaaFeedItems: FeedItems, v2FeedItems: FeedItems }): void => {\n const { logger } = this.props;\n\n logger.onPreviewMetric({\n parityData,\n type: METRIC_TYPE_UAA_PARITY_METRIC,\n });\n };\n\n /**\n * Handles a failed feed item fetch\n *\n * @private\n * @param {Error} e - API error\n * @return {void}\n */\n fetchFeedItemsErrorCallback = (feedItems: FeedItems, errors: ElementsXhrError[]): void => {\n const { onError } = this.props;\n\n this.setState({\n feedItems,\n activityFeedError: activityFeedInlineError,\n });\n\n if (Array.isArray(errors) && errors.length) {\n onError(new Error('Fetch feed items error'), ERROR_CODE_FETCH_ACTIVITY, {\n showNotification: true,\n errors: errors.map(({ code }) => code),\n });\n }\n };\n\n getCommentFeedItemWithReplies = <T: { replies?: Array<Comment> }>(feedItem: T, replies: Array<Comment>): T => ({\n ...feedItem,\n replies,\n });\n\n getFeedItemsWithReplies = (feedItems: FeedItems, id?: string, type?: CommentFeedItemType): Promise<FeedItems> => {\n const { api, file } = this.props;\n\n return new Promise((resolve, reject) => {\n if (!id || !type) {\n resolve(feedItems);\n return;\n }\n api.getFeedAPI(false).fetchReplies(\n file,\n id,\n type,\n replies => {\n const updatedFeedItems = feedItems.map(item => {\n if (item.id === id && this.isItemTypeComment(item.type)) {\n if (item.type === FEED_ITEM_TYPE_ANNOTATION) {\n return this.getCommentFeedItemWithReplies<Annotation>(item, replies);\n }\n if (item.type === FEED_ITEM_TYPE_COMMENT) {\n return this.getCommentFeedItemWithReplies<Comment>(item, replies);\n }\n }\n return item;\n });\n resolve(updatedFeedItems);\n },\n error => {\n reject(error);\n },\n );\n });\n };\n\n /**\n * Network error callback\n *\n * @private\n * @param {Error} error - Error object\n * @param {Error} code - the code for the error\n * @param {Object} contextInfo - the context info for the error\n * @return {void}\n */\n errorCallback = (error: ElementsXhrError, code: string, contextInfo: Object = {}): void => {\n /* eslint-disable no-console */\n console.error(error);\n /* eslint-enable no-console */\n\n // eslint-disable-next-line react/prop-types\n this.props.onError(error, code, contextInfo);\n };\n\n /**\n * File approver contacts fetch success callback\n *\n * @private\n * @param {BoxItemCollection} collaborators - Collaborators response data\n * @return {void}\n */\n getApproverContactsSuccessCallback = (collaborators: { entries: SelectorItems<> }): void => {\n const { entries } = collaborators;\n this.setState({ approverSelectorContacts: entries });\n };\n\n /**\n * File @mention contacts fetch success callback\n *\n * @private\n * @param {BoxItemCollection} collaborators - Collaborators response data\n * @return {void}\n */\n getMentionContactsSuccessCallback = (collaborators: { entries: SelectorItems<> }): void => {\n const { entries } = collaborators;\n this.setState({ contactsLoaded: false }, () =>\n this.setState({\n contactsLoaded: true,\n mentionSelectorContacts: entries,\n }),\n );\n };\n\n /**\n * Fetches file @mention's with groups\n *\n * @private\n * @param {string} searchStr - Search string to filter file collaborators by\n * @return {void}\n */\n getApprover = debounce((searchStr: string) => {\n const { file, api } = this.props;\n api.getFileCollaboratorsAPI(false).getCollaboratorsWithQuery(\n file.id,\n this.getApproverContactsSuccessCallback,\n this.errorCallback,\n searchStr,\n {\n includeGroups: true,\n },\n );\n }, DEFAULT_COLLAB_DEBOUNCE);\n\n /**\n * Fetches file @mention's\n *\n * @private\n * @param {string} searchStr - Search string to filter file collaborators by\n * @return {void}\n */\n getMention = debounce((searchStr: string) => {\n const { file, api } = this.props;\n api.getFileCollaboratorsAPI(false).getCollaboratorsWithQuery(\n file.id,\n this.getMentionContactsSuccessCallback,\n this.errorCallback,\n searchStr,\n );\n }, DEFAULT_COLLAB_DEBOUNCE);\n\n /**\n * Returns feed item based on the item id\n *\n * @param {FeedItems} feedItems - the feed items\n * @param {string} itemId - feed item id\n * @return {FeedItem | undefined}\n */\n getFocusableFeedItemById = (feedItems: FeedItems, itemId?: string): FeedItem | typeof undefined => {\n if (!itemId) {\n return undefined;\n }\n return feedItems.find(({ id, type }) => id === itemId && this.isItemTypeFocusable(type));\n };\n\n /**\n * Returns parent feed item based on the reply id\n *\n * @param {FeedItems} feedItems - the feed items\n * @param {string} replyId - feed item's reply id\n * @return {FeedItem | undefined}\n */\n getCommentFeedItemByReplyId = (feedItems: FeedItems, replyId?: string): FeedItem | typeof undefined => {\n if (!replyId) {\n return undefined;\n }\n return feedItems.find(item => {\n if ((item.type !== FEED_ITEM_TYPE_ANNOTATION && item.type !== FEED_ITEM_TYPE_COMMENT) || !item.replies) {\n return false;\n }\n return item.replies.some(({ id }) => id === replyId);\n });\n };\n\n /**\n * Returns true if item (based on given item id) is found within feed items or its replies and it, or its parent, can be active (focusable)\n *\n * @param {FeedItems} feedItems - the feed items\n * @param {string} itemId - feed item id\n * @return {boolean}\n */\n isActiveEntryInFeed = (feedItems: FeedItems, itemId: string): boolean =>\n !!(this.getFocusableFeedItemById(feedItems, itemId) || this.getCommentFeedItemByReplyId(feedItems, itemId));\n\n isItemTypeFocusable = (type?: FeedItemType | FocusableFeedItem | CommentFeedItemType): boolean =>\n type === FEED_ITEM_TYPE_ANNOTATION || type === FEED_ITEM_TYPE_COMMENT || type === FEED_ITEM_TYPE_TASK;\n\n isItemTypeComment = (type?: FeedItemType | FocusableFeedItem | CommentFeedItemType): boolean =>\n type === FEED_ITEM_TYPE_ANNOTATION || type === FEED_ITEM_TYPE_COMMENT;\n\n /**\n * Returns active entry data (id, type) based on the activeFeedEntryId and activeFeedEntryType values\n * (it can be existing item or parent if the active entry id belongs to a reply)\n *\n * @param {FeedItems} feedItems - the feed items\n * @return {Promise<{ id: string, type?: FocusableFeedItemType }>}\n */\n getActiveFeedEntryData = (feedItems: FeedItems): Promise<{ id?: string, type?: FeedItemType }> => {\n const { activeFeedEntryId, activeFeedEntryType, api, file } = this.props;\n return new Promise((resolve, reject) => {\n if (!activeFeedEntryId || !activeFeedEntryType || !this.isItemTypeFocusable(activeFeedEntryType)) {\n resolve({});\n return;\n }\n\n // Check if the active entry is a first level Feed item\n const firstLevelItem = this.getFocusableFeedItemById(feedItems, activeFeedEntryId);\n if (firstLevelItem) {\n const { id, type } = firstLevelItem;\n resolve({ id, type });\n return;\n }\n\n // Check if the active entry is within replies of any first level Feed items\n const firstLevelItemWithActiveReply = this.getCommentFeedItemByReplyId(feedItems, activeFeedEntryId);\n if (firstLevelItemWithActiveReply) {\n const { id, type } = firstLevelItemWithActiveReply;\n resolve({ id, type });\n return;\n }\n\n // If the active entry could not be found within feed items, it's most likely a reply that\n // is not yet visible in feed and we need to fetch its data in order to find parent\n api.getFeedAPI(false).fetchThreadedComment(\n file,\n activeFeedEntryId,\n ({ parent }) => {\n const parentItem = this.getFocusableFeedItemById(feedItems, parent?.id);\n const { id, type } = parentItem || {};\n resolve({ id, type });\n },\n (error: ElementsXhrError) => {\n if (error.status === 404) {\n resolve({});\n } else {\n reject(error);\n }\n },\n );\n });\n };\n\n getActiveCommentPath(commentId?: string): string {\n if (!commentId) {\n return '/activity';\n }\n\n return generatePath('/:sidebar/comments/:commentId?', {\n sidebar: 'activity',\n commentId,\n });\n }\n\n /**\n * Fetches replies (comments) of a comment or annotation\n *\n * @param {string} id - id of the feed item\n * @param {CommentFeedItemType} type - type of the feed item\n * @return {void}\n */\n getReplies = (id: string, type: CommentFeedItemType): void => {\n const { api, file } = this.props;\n\n api.getFeedAPI(false).fetchReplies(file, id, type, this.feedSuccessCallback, this.feedErrorCallback);\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Gets the user avatar URL\n *\n * @param {string} userId the user id\n * @param {string} fileId the file id\n * @return the user avatar URL string for a given user with access token attached\n */\n getAvatarUrl = async (userId: string): Promise<?string> => {\n const { file, api } = this.props;\n\n return api.getUsersAPI(false).getAvatarUrlWithAccessToken(userId, file.id);\n };\n\n handleAnnotationSelect = (annotation: Annotation): void => {\n const { file_version, id: nextActiveAnnotationId } = annotation;\n const {\n emitActiveAnnotationChangeEvent,\n file,\n getAnnotationsMatchPath,\n getAnnotationsPath,\n history,\n location,\n onAnnotationSelect,\n } = this.props;\n const annotationFileVersionId = getProp(file_version, 'id');\n const currentFileVersionId = getProp(file, 'file_version.id');\n const match = getAnnotationsMatchPath(location);\n const selectedFileVersionId = getProp(match, 'params.fileVersionId', currentFileVersionId);\n\n emitActiveAnnotationChangeEvent(nextActiveAnnotationId);\n\n if (annotationFileVersionId && annotationFileVersionId !== selectedFileVersionId) {\n history.push(getAnnotationsPath(annotationFileVersionId, nextActiveAnnotationId));\n }\n\n onAnnotationSelect(annotation);\n };\n\n handleItemsFiltered = (status?: ActivityFilterItemType) => {\n const { onFilterChange } = this.props;\n\n this.setState({ feedItemsStatusFilter: status });\n onFilterChange(status);\n };\n\n getFilteredFeedItems = (): FeedItems | typeof undefined => {\n const { feedItems, feedItemsStatusFilter } = this.state;\n if (!feedItems || !feedItemsStatusFilter || feedItemsStatusFilter === ACTIVITY_FILTER_OPTION_ALL) {\n return feedItems;\n }\n // Filter is completed on two properties (status and type) because filtering on comments (resolved vs. unresolved)\n // requires looking at item status to see if it is open or resolved. To filter all tasks, we need to look at the\n // item type. Item type is also used to keep versions in the feed. Task also has a status but it's status will be\n // \"NOT_STARTED\" or \"COMPLETED\" so it will not conflict with comment's status.\n return feedItems.filter(item => {\n return (\n item.status === feedItemsStatusFilter ||\n item.type === FEED_ITEM_TYPE_VERSION ||\n item.type === feedItemsStatusFilter\n );\n });\n };\n\n onTaskModalClose = () => {\n this.setState({\n approverSelectorContacts: [],\n });\n };\n\n refresh(shouldRefreshCache: boolean = true): void {\n this.fetchFeedItems(shouldRefreshCache);\n }\n\n renderAddTaskButton = () => {\n const { isDisabled, hasTasks } = this.props;\n const { approverSelectorContacts } = this.state;\n const { getApprover, getAvatarUrl, createTask, onTaskModalClose } = this;\n\n if (!hasTasks) {\n return null;\n }\n\n return (\n <AddTaskButton\n isDisabled={isDisabled}\n onTaskModalClose={onTaskModalClose}\n taskFormProps={{\n approvers: [],\n approverSelectorContacts,\n completionRule: TASK_COMPLETION_RULE_ALL,\n createTask,\n getApproverWithQuery: getApprover,\n getAvatarUrl,\n id: '',\n message: '',\n }}\n />\n );\n };\n\n renderActivitySidebarFilter = () => {\n const { features, hasTasks } = this.props;\n const { feedItemsStatusFilter } = this.state;\n const shouldShowActivityFeedFilter = isFeatureEnabled(features, 'activityFeed.filter.enabled');\n const shouldShowAdditionalFilterOptions = isFeatureEnabled(features, 'activityFeed.newThreadedReplies.enabled');\n\n if (!shouldShowActivityFeedFilter) {\n return null;\n }\n\n const activityFilterOptions: ActivityFilterOption[] = [\n ACTIVITY_FILTER_OPTION_ALL,\n ACTIVITY_FILTER_OPTION_UNRESOLVED,\n ];\n if (shouldShowAdditionalFilterOptions) {\n // Determine which filter options to show based on what activity types are available in current context\n activityFilterOptions.push(ACTIVITY_FILTER_OPTION_RESOLVED);\n if (hasTasks) {\n activityFilterOptions.push(ACTIVITY_FILTER_OPTION_TASKS);\n }\n }\n\n return (\n <ActivitySidebarFilter\n activityFilterOptions={activityFilterOptions}\n feedItemType={feedItemsStatusFilter}\n onFeedItemTypeClick={selectedStatus => {\n this.handleItemsFiltered(selectedStatus);\n }}\n />\n );\n };\n\n renderActions = () => (\n <>\n {this.renderActivitySidebarFilter()}\n {this.renderAddTaskButton()}\n </>\n );\n\n renderTitle = () => {\n const { features } = this.props;\n const shouldHideTitle = isFeatureEnabled(features, 'activityFeed.filter.enabled');\n\n if (shouldHideTitle) {\n return null;\n }\n return <FormattedMessage {...messages.sidebarActivityTitle} />;\n };\n\n render() {\n const {\n activeFeedEntryId,\n activeFeedEntryType,\n currentUser,\n currentUserError,\n elementId,\n features,\n file,\n hasReplies,\n hasVersions,\n isDisabled = false,\n onVersionHistoryClick,\n getUserProfileUrl,\n onTaskView,\n } = this.props;\n const { activityFeedError, approverSelectorContacts, contactsLoaded, mentionSelectorContacts } = this.state;\n const isNewThreadedRepliesEnabled = isFeatureEnabled(features, 'activityFeed.newThreadedReplies.enabled');\n const shouldUseUAA = isFeatureEnabled(features, 'activityFeed.uaaIntegration.enabled');\n\n return (\n <SidebarContent\n actions={this.renderActions()}\n className={classNames('bcs-activity', { 'bcs-activity--full': hasReplies })}\n elementId={elementId}\n sidebarView={SIDEBAR_VIEW_ACTIVITY}\n title={this.renderTitle()}\n >\n <ActivityFeed\n activeFeedEntryId={activeFeedEntryId}\n activeFeedEntryType={activeFeedEntryType}\n activityFeedError={activityFeedError}\n approverSelectorContacts={approverSelectorContacts}\n currentUser={currentUser}\n currentUserError={currentUserError}\n feedItems={this.getFilteredFeedItems()}\n file={file}\n getApproverWithQuery={this.getApprover}\n getAvatarUrl={this.getAvatarUrl}\n getMentionWithQuery={this.getMention}\n getUserProfileUrl={getUserProfileUrl}\n hasNewThreadedReplies={isNewThreadedRepliesEnabled}\n hasReplies={hasReplies}\n hasVersions={hasVersions}\n isDisabled={isDisabled}\n mentionSelectorContacts={mentionSelectorContacts}\n contactsLoaded={contactsLoaded}\n onAnnotationDelete={this.handleAnnotationDelete}\n onAnnotationEdit={this.handleAnnotationEdit}\n onAnnotationSelect={this.handleAnnotationSelect}\n onAnnotationStatusChange={this.handleAnnotationStatusChange}\n onAppActivityDelete={this.deleteAppActivity}\n onCommentCreate={this.createComment}\n onCommentDelete={this.deleteComment}\n onCommentUpdate={this.updateComment}\n onHideReplies={this.updateReplies}\n onReplyCreate={this.createReply}\n onReplyDelete={this.deleteReply}\n onReplyUpdate={this.updateReply}\n onShowReplies={this.getReplies}\n onTaskAssignmentUpdate={this.updateTaskAssignment}\n onTaskCreate={this.createTask}\n onTaskDelete={this.deleteTask}\n onTaskModalClose={this.onTaskModalClose}\n onTaskUpdate={this.updateTask}\n onTaskView={onTaskView}\n onVersionHistoryClick={onVersionHistoryClick}\n shouldUseUAA={shouldUseUAA}\n />\n </SidebarContent>\n );\n }\n}\n\nexport type ActivitySidebarProps = ExternalProps;\nexport { ActivitySidebar as ActivitySidebarComponent };\nexport default flow([\n withLogger(ORIGIN_ACTIVITY_SIDEBAR),\n withErrorBoundary(ORIGIN_ACTIVITY_SIDEBAR),\n withAPIContext,\n withFeatureConsumer,\n withAnnotatorContext,\n withRouterAndRef,\n])(ActivitySidebar);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ActivitySidebar.js","names":["React","classNames","debounce","flow","getProp","noop","uniqueId","FormattedMessage","generatePath","ActivityFeed","AddTaskButton","API","messages","SidebarContent","EVENT_DATA_READY","EVENT_JS_READY","getBadUserError","mark","withAnnotatorContext","withAPIContext","withErrorBoundary","withFeatureConsumer","isFeatureEnabled","withLogger","withRouterAndRef","ActivitySidebarFilter","ViewType","FeedEntryType","ACTIVITY_FILTER_OPTION_ALL","ACTIVITY_FILTER_OPTION_RESOLVED","ACTIVITY_FILTER_OPTION_TASKS","ACTIVITY_FILTER_OPTION_UNRESOLVED","DEFAULT_COLLAB_DEBOUNCE","ERROR_CODE_FETCH_ACTIVITY","FEED_ITEM_TYPE_ANNOTATION","FEED_ITEM_TYPE_COMMENT","FEED_ITEM_TYPE_TASK","FEED_ITEM_TYPE_VERSION","ORIGIN_ACTIVITY_SIDEBAR","SIDEBAR_VIEW_ACTIVITY","TASK_COMPLETION_RULE_ALL","METRIC_TYPE_UAA_PARITY_METRIC","activityFeedInlineError","inlineError","title","errorOccured","content","activityFeedItemApiError","MARK_NAME_DATA_LOADING","MARK_NAME_DATA_READY","MARK_NAME_JS_READY","ActivitySidebar","PureComponent","constructor","props","_defineProperty","id","permissions","api","emitAnnotationRemoveEvent","file","getFeedAPI","deleteAnnotation","deleteAnnotationSuccess","bind","feedErrorCallback","fetchFeedItems","text","emitAnnotationUpdateEvent","description","message","updateAnnotation","undefined","annotation","feedSuccessCallback","status","e","code","contextInfo","errorCallback","assignees","taskType","dueAt","completionRule","onSuccess","onError","currentUser","successCallback","createTaskNew","task","onTaskDelete","deleteTaskNew","taskId","onTaskUpdate","updateTaskNew","taskAssignmentId","onTaskAssignmentUpdate","updateTaskCollaborator","hasReplies","onCommentDelete","comment","deleteThreadedComment","deleteComment","parentId","emitAnnotationReplyDeleteEvent","deleteReply","deleteReplySuccessCallback","hasMention","onCommentUpdate","updateThreadedComment","updateComment","emitAnnotationReplyUpdateEvent","tagged_message","updateReply","updateReplySuccessCallback","error","replies","activeFeedEntryId","history","internalSidebarNavigationHandler","routerDisabled","feedItems","state","feedAPI","length","some","item","getCommentFeedItemByReplyId","sidebar","ACTIVITY","replace","getActiveCommentPath","updateFeedItem","reply","onCommentCreate","createThreadedComment","createComment","parentType","emitAnnotationReplyCreateEvent","eventRequestId","createReply","createReplySuccessCallback","deleteAppActivity","getActiveFeedEntryData","then","type","isActiveEntryInFeed","isItemTypeComment","Promise","resolve","getFeedItemsWithReplies","updatedItems","fetchFeedItemsSuccessCallback","catch","fetchFeedItemsErrorCallback","fileId","logger","onDataReadyMetric","endMarkName","startMarkName","setState","activityFeedError","parityData","onPreviewMetric","errors","Array","isArray","Error","showNotification","map","feedItem","_objectSpread","reject","fetchReplies","updatedFeedItems","getCommentFeedItemWithReplies","console","collaborators","entries","approverSelectorContacts","contactsLoaded","mentionSelectorContacts","searchStr","getFileCollaboratorsAPI","getCollaboratorsWithQuery","getApproverContactsSuccessCallback","includeGroups","getMentionContactsSuccessCallback","itemId","find","isItemTypeFocusable","replyId","getFocusableFeedItemById","activeFeedEntryType","firstLevelItem","firstLevelItemWithActiveReply","fetchThreadedComment","parent","parentItem","userId","getUsersAPI","getAvatarUrlWithAccessToken","file_version","nextActiveAnnotationId","emitActiveAnnotationChangeEvent","getAnnotationsMatchPath","getAnnotationsPath","internalSidebarNavigation","location","onAnnotationSelect","annotationFileVersionId","currentFileVersionId","selectedFileVersionId","match","ANNOTATIONS","fileVersionId","push","onFilterChange","feedItemsStatusFilter","filter","isDisabled","hasTasks","getApprover","getAvatarUrl","createTask","onTaskModalClose","createElement","taskFormProps","approvers","getApproverWithQuery","features","shouldShowActivityFeedFilter","shouldShowAdditionalFilterOptions","activityFilterOptions","feedItemType","onFeedItemTypeClick","selectedStatus","handleItemsFiltered","Fragment","renderActivitySidebarFilter","renderAddTaskButton","shouldHideTitle","sidebarActivityTitle","onReadyMetric","componentDidMount","shouldRefreshCache","shouldDestroy","shouldShowReplies","shouldShowTasks","hasVersions","shouldShowVersions","shouldFetchReplies","shouldShowAppActivity","shouldShowAnnotations","shouldUseUAA","fetchRepliesForFeedItems","logAPIParity","commentId","refresh","render","currentUserError","elementId","onVersionHistoryClick","getUserProfileUrl","onTaskView","isNewThreadedRepliesEnabled","actions","renderActions","className","sidebarView","renderTitle","getFilteredFeedItems","getMentionWithQuery","getMention","hasNewThreadedReplies","onAnnotationDelete","handleAnnotationDelete","onAnnotationEdit","handleAnnotationEdit","handleAnnotationSelect","onAnnotationStatusChange","handleAnnotationStatusChange","onAppActivityDelete","onHideReplies","updateReplies","onReplyCreate","onReplyDelete","onReplyUpdate","onShowReplies","getReplies","updateTaskAssignment","onTaskCreate","deleteTask","updateTask","annotatorState","onVersionChange","ActivitySidebarComponent"],"sources":["../../../src/elements/content-sidebar/ActivitySidebar.js"],"sourcesContent":["/**\n * @flow\n * @file Activity feed sidebar component\n * @author Box\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport uniqueId from 'lodash/uniqueId';\nimport { FormattedMessage } from 'react-intl';\nimport { generatePath, type ContextRouter } from 'react-router-dom';\nimport ActivityFeed from './activity-feed';\nimport AddTaskButton from './AddTaskButton';\nimport API from '../../api';\nimport messages from '../common/messages';\nimport SidebarContent from './SidebarContent';\nimport { EVENT_DATA_READY, EVENT_JS_READY } from '../common/logger/constants';\nimport { getBadUserError } from '../../utils/error';\nimport { mark } from '../../utils/performance';\nimport { withAnnotatorContext } from '../common/annotator-context';\nimport { withAPIContext } from '../common/api-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withFeatureConsumer, isFeatureEnabled } from '../common/feature-checking';\nimport { withLogger } from '../common/logger';\nimport { withRouterAndRef } from '../common/routing';\nimport ActivitySidebarFilter from './ActivitySidebarFilter';\nimport { ViewType, FeedEntryType } from '../common/types/SidebarNavigation';\nimport {\n ACTIVITY_FILTER_OPTION_ALL,\n ACTIVITY_FILTER_OPTION_RESOLVED,\n ACTIVITY_FILTER_OPTION_TASKS,\n ACTIVITY_FILTER_OPTION_UNRESOLVED,\n DEFAULT_COLLAB_DEBOUNCE,\n ERROR_CODE_FETCH_ACTIVITY,\n FEED_ITEM_TYPE_ANNOTATION,\n FEED_ITEM_TYPE_COMMENT,\n FEED_ITEM_TYPE_TASK,\n FEED_ITEM_TYPE_VERSION,\n ORIGIN_ACTIVITY_SIDEBAR,\n SIDEBAR_VIEW_ACTIVITY,\n TASK_COMPLETION_RULE_ALL,\n METRIC_TYPE_UAA_PARITY_METRIC,\n} from '../../constants';\nimport type {\n TaskCompletionRule,\n TaskType,\n TaskNew,\n TaskUpdatePayload,\n TaskCollabStatus,\n} from '../../common/types/tasks';\nimport type {\n Annotation,\n AnnotationPermission,\n ActivityFilterItemType,\n ActivityFilterOption,\n BoxCommentPermission,\n Comment,\n CommentFeedItemType,\n FocusableFeedItem,\n FocusableFeedItemType,\n FeedItem,\n FeedItems,\n FeedItemStatus,\n FeedItemType,\n} from '../../common/types/feed';\nimport type { ErrorContextProps, ElementsXhrError } from '../../common/types/api';\nimport type { WithLoggerProps } from '../../common/types/logging';\nimport type { SelectorItems, User, UserMini, GroupMini, BoxItem } from '../../common/types/core';\nimport type { Errors, GetProfileUrlCallback } from '../common/flowTypes';\nimport type { Translations } from './flowTypes';\nimport type { FeatureConfig } from '../common/feature-checking';\nimport type { WithAnnotatorContextProps } from '../common/annotator-context';\nimport './ActivitySidebar.scss';\n\nimport type { OnAnnotationEdit, OnAnnotationStatusChange } from './activity-feed/comment/types';\nimport type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';\n\ntype ExternalProps = {\n activeFeedEntryId?: string,\n activeFeedEntryType?: FocusableFeedItemType,\n currentUser?: User,\n currentUserError?: Errors,\n getUserProfileUrl?: GetProfileUrlCallback,\n hasReplies?: boolean,\n hasTasks?: boolean,\n hasVersions?: boolean,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n onCommentCreate: Function,\n onCommentDelete: (comment: Comment) => any,\n onCommentUpdate: () => any,\n onTaskAssignmentUpdate: Function,\n onTaskCreate: Function,\n onTaskDelete: (id: string) => any,\n onTaskUpdate: () => any,\n onTaskView: (id: string, isCreator: boolean) => any,\n routerDisabled?: boolean,\n} & ErrorContextProps &\n WithAnnotatorContextProps;\n\ntype PropsWithoutContext = {\n elementId: string,\n file: BoxItem,\n hasSidebarInitialized?: boolean,\n isDisabled: boolean,\n onAnnotationSelect: Function,\n onFilterChange: (status?: ActivityFilterItemType) => void,\n onVersionChange: Function,\n onVersionHistoryClick?: Function,\n translations?: Translations,\n} & ExternalProps &\n WithLoggerProps &\n ContextRouter;\n\ntype Props = {\n api: API,\n features: FeatureConfig,\n} & PropsWithoutContext;\n\ntype State = {\n activityFeedError?: Errors,\n approverSelectorContacts: SelectorItems<UserMini | GroupMini>,\n contactsLoaded?: boolean,\n feedItems?: FeedItems,\n feedItemsStatusFilter?: ActivityFilterItemType,\n mentionSelectorContacts?: SelectorItems<UserMini>,\n};\n\nexport const activityFeedInlineError: Errors = {\n inlineError: {\n title: messages.errorOccured,\n content: messages.activityFeedItemApiError,\n },\n};\n\nconst MARK_NAME_DATA_LOADING = `${ORIGIN_ACTIVITY_SIDEBAR}_data_loading`;\nconst MARK_NAME_DATA_READY = `${ORIGIN_ACTIVITY_SIDEBAR}_${EVENT_DATA_READY}`;\nconst MARK_NAME_JS_READY = `${ORIGIN_ACTIVITY_SIDEBAR}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nclass ActivitySidebar extends React.PureComponent<Props, State> {\n static defaultProps = {\n annotatorState: {},\n emitActiveAnnotationChangeEvent: noop,\n emitAnnotationRemoveEvent: noop,\n emitAnnotationReplyCreateEvent: noop,\n emitAnnotationReplyDeleteEvent: noop,\n emitAnnotationReplyUpdateEvent: noop,\n emitAnnotationUpdateEvent: noop,\n getAnnotationsMatchPath: noop,\n getAnnotationsPath: noop,\n hasReplies: false,\n hasTasks: true,\n hasVersions: true,\n isDisabled: false,\n onAnnotationSelect: noop,\n onCommentCreate: noop,\n onCommentDelete: noop,\n onCommentUpdate: noop,\n onFilterChange: noop,\n onTaskAssignmentUpdate: noop,\n onTaskCreate: noop,\n onTaskDelete: noop,\n onTaskUpdate: noop,\n onVersionChange: noop,\n onVersionHistoryClick: noop,\n };\n\n constructor(props: Props) {\n super(props);\n // eslint-disable-next-line react/prop-types\n const { logger } = this.props;\n\n mark(MARK_NAME_DATA_LOADING);\n\n logger.onReadyMetric({\n endMarkName: MARK_NAME_JS_READY,\n });\n this.state = {};\n }\n\n componentDidMount() {\n this.fetchFeedItems(true);\n }\n\n handleAnnotationDelete = ({ id, permissions }: { id: string, permissions: AnnotationPermission }) => {\n const { api, emitAnnotationRemoveEvent, file } = this.props;\n\n emitAnnotationRemoveEvent(id, true);\n api.getFeedAPI(false).deleteAnnotation(\n file,\n id,\n permissions,\n this.deleteAnnotationSuccess.bind(this, id),\n this.feedErrorCallback,\n );\n\n this.fetchFeedItems();\n };\n\n handleAnnotationEdit: OnAnnotationEdit = ({ id, text, permissions }) => {\n const { api, emitAnnotationUpdateEvent, file } = this.props;\n\n emitAnnotationUpdateEvent(\n {\n id,\n description: {\n message: text,\n },\n },\n true,\n );\n api.getFeedAPI(false).updateAnnotation(\n file,\n id,\n text,\n undefined,\n permissions,\n (annotation: Annotation) => {\n emitAnnotationUpdateEvent(annotation);\n this.feedSuccessCallback();\n },\n this.feedErrorCallback,\n );\n\n this.fetchFeedItems();\n };\n\n handleAnnotationStatusChange: OnAnnotationStatusChange = ({ id, permissions, status }) => {\n const { api, emitAnnotationUpdateEvent, file } = this.props;\n\n emitAnnotationUpdateEvent({ id, status }, true);\n api.getFeedAPI(false).updateAnnotation(\n file,\n id,\n undefined,\n status,\n permissions,\n (annotation: Annotation) => {\n emitAnnotationUpdateEvent(annotation);\n this.feedSuccessCallback();\n },\n this.feedErrorCallback,\n );\n\n this.fetchFeedItems();\n };\n\n deleteAnnotationSuccess(id: string) {\n const { emitAnnotationRemoveEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationRemoveEvent(id);\n }\n\n /**\n * Success callback for fetching feed items\n */\n feedSuccessCallback = (): void => {\n this.fetchFeedItems();\n };\n\n /**\n * Error callback for fetching feed items\n *\n * @param {Error} e - the error which occured\n * @param {Error} code - the code for the error\n * @param {Object} contextInfo - the context info for the error\n */\n feedErrorCallback = (e: ElementsXhrError, code: string, contextInfo?: Object) => {\n this.errorCallback(e, code, contextInfo);\n this.fetchFeedItems();\n };\n\n createTask = (\n message: string,\n assignees: SelectorItems<>,\n taskType: TaskType,\n dueAt: ?string,\n completionRule: TaskCompletionRule,\n onSuccess: ?Function,\n onError: ?Function,\n ): void => {\n const { api, currentUser, file } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n const errorCallback = (e, code, contextInfo) => {\n if (onError) {\n onError(e, code, contextInfo);\n }\n this.feedErrorCallback(e, code, contextInfo);\n };\n const successCallback = () => {\n if (onSuccess) {\n onSuccess();\n }\n this.feedSuccessCallback();\n };\n\n api.getFeedAPI(false).createTaskNew(\n file,\n currentUser,\n message,\n assignees,\n taskType,\n dueAt,\n completionRule,\n successCallback,\n errorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n deleteTask = (task: TaskNew): void => {\n const { file, api, onTaskDelete } = this.props;\n api.getFeedAPI(false).deleteTaskNew(\n file,\n task,\n (taskId: string) => {\n this.feedSuccessCallback();\n onTaskDelete(taskId);\n },\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n updateTask = (task: TaskUpdatePayload, onSuccess: ?Function, onError: ?Function): void => {\n const { api, file, onTaskUpdate } = this.props;\n const errorCallback = (e, code) => {\n if (onError) {\n onError(e, code);\n }\n this.feedErrorCallback(e, code);\n };\n const successCallback = () => {\n this.feedSuccessCallback();\n\n if (onSuccess) {\n onSuccess();\n }\n\n onTaskUpdate();\n };\n\n api.getFeedAPI(false).updateTaskNew(file, task, successCallback, errorCallback);\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n updateTaskAssignment = (taskId: string, taskAssignmentId: string, status: TaskCollabStatus): void => {\n const { api, currentUser = {}, file, onTaskAssignmentUpdate } = this.props;\n\n const successCallback = () => {\n this.feedSuccessCallback();\n onTaskAssignmentUpdate(taskId, taskAssignmentId, status, currentUser.id);\n };\n\n api.getFeedAPI(false).updateTaskCollaborator(\n file,\n taskId,\n taskAssignmentId,\n status,\n successCallback,\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Deletes a comment via the API.\n *\n * @param {Object} args - A subset of the comment\n * @return void\n */\n deleteComment = ({ id, permissions }: { id: string, permissions: BoxCommentPermission }): void => {\n const { api, file, hasReplies, onCommentDelete } = this.props;\n\n const successCallback = (comment: Comment) => {\n this.feedSuccessCallback();\n onCommentDelete(comment);\n };\n\n if (hasReplies) {\n api.getFeedAPI(false).deleteThreadedComment(file, id, permissions, successCallback, this.feedErrorCallback);\n } else {\n api.getFeedAPI(false).deleteComment(file, id, permissions, successCallback, this.feedErrorCallback);\n }\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Deletes a reply via the API.\n *\n * @param {Object} args - A subset of the comment\n * @return void\n */\n deleteReply = ({\n id,\n parentId,\n permissions,\n }: {\n id: string,\n parentId: string,\n permissions: BoxCommentPermission,\n }): void => {\n const { api, emitAnnotationReplyDeleteEvent, file } = this.props;\n\n emitAnnotationReplyDeleteEvent(id, parentId, true);\n api.getFeedAPI(false).deleteReply(\n file,\n id,\n parentId,\n permissions,\n this.deleteReplySuccessCallback.bind(this, id, parentId),\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Handles a successful deletion of a reply\n *\n * @private\n * @param {string} id - The id of the reply\n * @param {string} parentId - The id of the reply's parent item\n * @return {void}\n */\n deleteReplySuccessCallback = (id: string, parentId: string) => {\n const { emitAnnotationReplyDeleteEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationReplyDeleteEvent(id, parentId);\n };\n\n updateComment = (\n id: string,\n text?: string,\n status?: FeedItemStatus,\n hasMention: boolean,\n permissions: BoxCommentPermission,\n onSuccess: ?Function,\n onError: ?Function,\n ): void => {\n const { api, file, hasReplies, onCommentUpdate } = this.props;\n\n const errorCallback = (e, code) => {\n if (onError) {\n onError(e, code);\n }\n this.feedErrorCallback(e, code);\n };\n\n const successCallback = () => {\n this.feedSuccessCallback();\n if (onSuccess) {\n onSuccess();\n }\n onCommentUpdate();\n };\n\n if (hasReplies) {\n api.getFeedAPI(false).updateThreadedComment(\n file,\n id,\n text,\n status,\n permissions,\n successCallback,\n errorCallback,\n );\n } else {\n api.getFeedAPI(false).updateComment(\n file,\n id,\n text || '',\n hasMention,\n permissions,\n successCallback,\n errorCallback,\n );\n }\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Updates a reply\n *\n * @param {string} id - id of the reply\n * @param {string} parentId - id of the parent item\n * @param {string} text - the reply updated text\n * @param {BoxCommentPermission} permissions - permissions associated with the reply\n * @param {Function} onSuccess - the success callback\n * @param {Function} onError - the error callback\n * @return {void}\n */\n updateReply = (\n id: string,\n parentId: string,\n text: string,\n permissions: BoxCommentPermission,\n onSuccess: ?Function,\n onError: ?Function,\n ): void => {\n const { api, emitAnnotationReplyUpdateEvent, file } = this.props;\n\n emitAnnotationReplyUpdateEvent({ id, tagged_message: text }, parentId, true);\n api.getFeedAPI(false).updateReply(\n file,\n id,\n parentId,\n text,\n permissions,\n this.updateReplySuccessCallback.bind(this, parentId, onSuccess),\n (error, code) => {\n if (onError) {\n onError(error, code);\n }\n this.feedErrorCallback(error, code);\n },\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Updates replies of a comment or annotation in the Feed\n *\n * @param {string} id - id of the feed item\n * @param {Array<Comment>} replies - replies\n * @return {void}\n */\n updateReplies = (id: string, replies: Array<Comment>) => {\n const { activeFeedEntryId, api, file, history, internalSidebarNavigationHandler, routerDisabled } = this.props;\n const { feedItems } = this.state;\n\n if (!feedItems) {\n return;\n }\n\n const feedAPI = api.getFeedAPI(false);\n feedAPI.file = file;\n\n // Detect if replies are being hidden and activeFeedEntryId belongs to a reply\n // that is in currently being updated parent, in order to disable active item\n if (\n activeFeedEntryId &&\n replies.length === 1 &&\n feedItems.some(\n (item: FeedItem) =>\n item.id === id && item === this.getCommentFeedItemByReplyId(feedItems, activeFeedEntryId),\n )\n ) {\n if (routerDisabled && internalSidebarNavigationHandler) {\n internalSidebarNavigationHandler(\n {\n sidebar: ViewType.ACTIVITY,\n },\n true,\n );\n } else {\n history.replace(this.getActiveCommentPath());\n }\n }\n\n feedAPI.updateFeedItem({ replies }, id);\n\n this.fetchFeedItems();\n };\n\n /**\n * Handles a successful update of a reply\n *\n * @private\n * @param {string} parentId - The id of the reply's parent item\n * @param {Function} onSuccess - the success callback\n * @param {Comment} reply - The reply comment object\n * @return {void}\n */\n updateReplySuccessCallback = (parentId: string, onSuccess: ?Function, reply: Comment) => {\n const { emitAnnotationReplyUpdateEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationReplyUpdateEvent(reply, parentId);\n if (onSuccess) {\n onSuccess();\n }\n };\n\n /**\n * Posts a new comment to the API\n *\n * @param {string} text - The comment's text\n * @param {boolean} hasMention - The comment's text\n * @return {void}\n */\n createComment = (text: string, hasMention: boolean): void => {\n const { api, currentUser, file, hasReplies, onCommentCreate } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const successCallback = (comment: Comment) => {\n onCommentCreate(comment);\n this.feedSuccessCallback();\n };\n\n if (hasReplies) {\n api.getFeedAPI(false).createThreadedComment(\n file,\n currentUser,\n text,\n successCallback,\n this.feedErrorCallback,\n );\n } else {\n api.getFeedAPI(false).createComment(\n file,\n currentUser,\n text,\n hasMention,\n successCallback,\n this.feedErrorCallback,\n );\n }\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Posts a new reply to the API\n *\n * @param {string} parentId - The id of the parent item\n * @param {CommentFeedItemType} parentType - The type of the parent item\n * @param {string} text - The text of reply\n * @return {void}\n */\n createReply = (parentId: string, parentType: CommentFeedItemType, text: string): void => {\n const { api, currentUser, emitAnnotationReplyCreateEvent, file } = this.props;\n\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const eventRequestId = uniqueId('comment_');\n emitAnnotationReplyCreateEvent({ tagged_message: text }, eventRequestId, parentId, true);\n api.getFeedAPI(false).createReply(\n file,\n currentUser,\n parentId,\n parentType,\n text,\n this.createReplySuccessCallback.bind(this, eventRequestId, parentId),\n this.feedErrorCallback,\n );\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Handles a successful creation of a reply\n *\n * @private\n * @param {string} eventRequestId - The id of the parent item\n * @param {string} parentId - The id of the reply's parent item\n * @param {Comment} reply - The reply comment object\n * @return {void}\n */\n createReplySuccessCallback = (eventRequestId: string, parentId: string, reply: Comment) => {\n const { emitAnnotationReplyCreateEvent } = this.props;\n\n this.feedSuccessCallback();\n emitAnnotationReplyCreateEvent(reply, eventRequestId, parentId);\n };\n\n /**\n * Deletes an app activity item via the API.\n *\n * @param {Object} args - A subset of the app activity\n * @return void\n */\n deleteAppActivity = ({ id }: { id: string }): void => {\n const { api, file } = this.props;\n\n api.getFeedAPI(false).deleteAppActivity(file, id, this.feedSuccessCallback, this.feedErrorCallback);\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Fetches the feed items for the sidebar\n *\n * @param {boolean} shouldRefreshCache true if the cache should be refreshed\n * @param {boolean} shouldDestroy true if the api factory should be destroyed\n */\n fetchFeedItems(shouldRefreshCache: boolean = false, shouldDestroy: boolean = false) {\n const {\n activeFeedEntryId,\n activeFeedEntryType,\n api,\n file,\n features,\n hasReplies: shouldShowReplies,\n hasTasks: shouldShowTasks,\n hasVersions: shouldShowVersions,\n } = this.props;\n const shouldFetchReplies =\n shouldRefreshCache &&\n shouldShowReplies &&\n activeFeedEntryId &&\n activeFeedEntryType === FEED_ITEM_TYPE_COMMENT;\n const shouldShowAppActivity = isFeatureEnabled(features, 'activityFeed.appActivity.enabled');\n const shouldShowAnnotations = isFeatureEnabled(features, 'activityFeed.annotations.enabled');\n const shouldUseUAA = isFeatureEnabled(features, 'activityFeed.uaaIntegration.enabled');\n\n api.getFeedAPI(shouldDestroy).feedItems(\n file,\n shouldRefreshCache,\n shouldFetchReplies ? this.fetchRepliesForFeedItems : this.fetchFeedItemsSuccessCallback,\n this.fetchFeedItemsErrorCallback,\n this.errorCallback,\n {\n shouldShowAnnotations,\n shouldShowAppActivity,\n shouldShowReplies,\n shouldShowTasks,\n shouldShowVersions,\n shouldUseUAA,\n },\n shouldUseUAA ? this.logAPIParity : undefined,\n );\n }\n\n fetchRepliesForFeedItems = (feedItems: FeedItems) => {\n const { activeFeedEntryId } = this.props;\n\n if (!activeFeedEntryId) {\n return;\n }\n\n this.getActiveFeedEntryData(feedItems)\n .then(({ id, type }) => {\n if (\n !id ||\n !type ||\n this.isActiveEntryInFeed(feedItems, activeFeedEntryId) ||\n !this.isItemTypeComment(type)\n ) {\n return Promise.resolve(feedItems);\n }\n\n const parentType: CommentFeedItemType =\n type === FEED_ITEM_TYPE_COMMENT ? FEED_ITEM_TYPE_COMMENT : FEED_ITEM_TYPE_ANNOTATION;\n\n return this.getFeedItemsWithReplies(feedItems, id, parentType);\n })\n .then(updatedItems => this.fetchFeedItemsSuccessCallback(updatedItems))\n .catch(error => this.fetchFeedItemsErrorCallback(feedItems, [error]));\n };\n\n /**\n * Handles a successful feed API fetch\n *\n * @private\n * @param {Array} feedItems - the feed items\n * @return {void}\n */\n fetchFeedItemsSuccessCallback = (feedItems: FeedItems): void => {\n const {\n file: { id: fileId },\n logger,\n } = this.props;\n\n mark(MARK_NAME_DATA_READY);\n\n // Only emit metric if has >1 activity feed items (there should always at least be the current version)\n if (feedItems.length > 1) {\n logger.onDataReadyMetric(\n {\n endMarkName: MARK_NAME_DATA_READY,\n startMarkName: MARK_NAME_DATA_LOADING,\n },\n fileId,\n );\n }\n\n this.setState({ feedItems, activityFeedError: undefined });\n };\n\n /**\n * Logs diff between UAA and v2 API data\n *\n * @param {{}[]} responseParity array of aggragated responses from UAA and v2\n * @param {{}} parsedDataParity parsed data from UAA and v2\n * @return {void}\n */\n logAPIParity = (parityData: { uaaFeedItems: FeedItems, v2FeedItems: FeedItems }): void => {\n const { logger } = this.props;\n\n logger.onPreviewMetric({\n parityData,\n type: METRIC_TYPE_UAA_PARITY_METRIC,\n });\n };\n\n /**\n * Handles a failed feed item fetch\n *\n * @private\n * @param {Error} e - API error\n * @return {void}\n */\n fetchFeedItemsErrorCallback = (feedItems: FeedItems, errors: ElementsXhrError[]): void => {\n const { onError } = this.props;\n\n this.setState({\n feedItems,\n activityFeedError: activityFeedInlineError,\n });\n\n if (Array.isArray(errors) && errors.length) {\n onError(new Error('Fetch feed items error'), ERROR_CODE_FETCH_ACTIVITY, {\n showNotification: true,\n errors: errors.map(({ code }) => code),\n });\n }\n };\n\n getCommentFeedItemWithReplies = <T: { replies?: Array<Comment> }>(feedItem: T, replies: Array<Comment>): T => ({\n ...feedItem,\n replies,\n });\n\n getFeedItemsWithReplies = (feedItems: FeedItems, id?: string, type?: CommentFeedItemType): Promise<FeedItems> => {\n const { api, file } = this.props;\n\n return new Promise((resolve, reject) => {\n if (!id || !type) {\n resolve(feedItems);\n return;\n }\n api.getFeedAPI(false).fetchReplies(\n file,\n id,\n type,\n replies => {\n const updatedFeedItems = feedItems.map(item => {\n if (item.id === id && this.isItemTypeComment(item.type)) {\n if (item.type === FEED_ITEM_TYPE_ANNOTATION) {\n return this.getCommentFeedItemWithReplies<Annotation>(item, replies);\n }\n if (item.type === FEED_ITEM_TYPE_COMMENT) {\n return this.getCommentFeedItemWithReplies<Comment>(item, replies);\n }\n }\n return item;\n });\n resolve(updatedFeedItems);\n },\n error => {\n reject(error);\n },\n );\n });\n };\n\n /**\n * Network error callback\n *\n * @private\n * @param {Error} error - Error object\n * @param {Error} code - the code for the error\n * @param {Object} contextInfo - the context info for the error\n * @return {void}\n */\n errorCallback = (error: ElementsXhrError, code: string, contextInfo: Object = {}): void => {\n /* eslint-disable no-console */\n console.error(error);\n /* eslint-enable no-console */\n\n // eslint-disable-next-line react/prop-types\n this.props.onError(error, code, contextInfo);\n };\n\n /**\n * File approver contacts fetch success callback\n *\n * @private\n * @param {BoxItemCollection} collaborators - Collaborators response data\n * @return {void}\n */\n getApproverContactsSuccessCallback = (collaborators: { entries: SelectorItems<> }): void => {\n const { entries } = collaborators;\n this.setState({ approverSelectorContacts: entries });\n };\n\n /**\n * File @mention contacts fetch success callback\n *\n * @private\n * @param {BoxItemCollection} collaborators - Collaborators response data\n * @return {void}\n */\n getMentionContactsSuccessCallback = (collaborators: { entries: SelectorItems<> }): void => {\n const { entries } = collaborators;\n this.setState({ contactsLoaded: false }, () =>\n this.setState({\n contactsLoaded: true,\n mentionSelectorContacts: entries,\n }),\n );\n };\n\n /**\n * Fetches file @mention's with groups\n *\n * @private\n * @param {string} searchStr - Search string to filter file collaborators by\n * @return {void}\n */\n getApprover = debounce((searchStr: string) => {\n const { file, api } = this.props;\n api.getFileCollaboratorsAPI(false).getCollaboratorsWithQuery(\n file.id,\n this.getApproverContactsSuccessCallback,\n this.errorCallback,\n searchStr,\n {\n includeGroups: true,\n },\n );\n }, DEFAULT_COLLAB_DEBOUNCE);\n\n /**\n * Fetches file @mention's\n *\n * @private\n * @param {string} searchStr - Search string to filter file collaborators by\n * @return {void}\n */\n getMention = debounce((searchStr: string) => {\n const { file, api } = this.props;\n api.getFileCollaboratorsAPI(false).getCollaboratorsWithQuery(\n file.id,\n this.getMentionContactsSuccessCallback,\n this.errorCallback,\n searchStr,\n );\n }, DEFAULT_COLLAB_DEBOUNCE);\n\n /**\n * Returns feed item based on the item id\n *\n * @param {FeedItems} feedItems - the feed items\n * @param {string} itemId - feed item id\n * @return {FeedItem | undefined}\n */\n getFocusableFeedItemById = (feedItems: FeedItems, itemId?: string): FeedItem | typeof undefined => {\n if (!itemId) {\n return undefined;\n }\n return feedItems.find(({ id, type }) => id === itemId && this.isItemTypeFocusable(type));\n };\n\n /**\n * Returns parent feed item based on the reply id\n *\n * @param {FeedItems} feedItems - the feed items\n * @param {string} replyId - feed item's reply id\n * @return {FeedItem | undefined}\n */\n getCommentFeedItemByReplyId = (feedItems: FeedItems, replyId?: string): FeedItem | typeof undefined => {\n if (!replyId) {\n return undefined;\n }\n return feedItems.find(item => {\n if ((item.type !== FEED_ITEM_TYPE_ANNOTATION && item.type !== FEED_ITEM_TYPE_COMMENT) || !item.replies) {\n return false;\n }\n return item.replies.some(({ id }) => id === replyId);\n });\n };\n\n /**\n * Returns true if item (based on given item id) is found within feed items or its replies and it, or its parent, can be active (focusable)\n *\n * @param {FeedItems} feedItems - the feed items\n * @param {string} itemId - feed item id\n * @return {boolean}\n */\n isActiveEntryInFeed = (feedItems: FeedItems, itemId: string): boolean =>\n !!(this.getFocusableFeedItemById(feedItems, itemId) || this.getCommentFeedItemByReplyId(feedItems, itemId));\n\n isItemTypeFocusable = (type?: FeedItemType | FocusableFeedItem | CommentFeedItemType): boolean =>\n type === FEED_ITEM_TYPE_ANNOTATION || type === FEED_ITEM_TYPE_COMMENT || type === FEED_ITEM_TYPE_TASK;\n\n isItemTypeComment = (type?: FeedItemType | FocusableFeedItem | CommentFeedItemType): boolean =>\n type === FEED_ITEM_TYPE_ANNOTATION || type === FEED_ITEM_TYPE_COMMENT;\n\n /**\n * Returns active entry data (id, type) based on the activeFeedEntryId and activeFeedEntryType values\n * (it can be existing item or parent if the active entry id belongs to a reply)\n *\n * @param {FeedItems} feedItems - the feed items\n * @return {Promise<{ id: string, type?: FocusableFeedItemType }>}\n */\n getActiveFeedEntryData = (feedItems: FeedItems): Promise<{ id?: string, type?: FeedItemType }> => {\n const { activeFeedEntryId, activeFeedEntryType, api, file } = this.props;\n return new Promise((resolve, reject) => {\n if (!activeFeedEntryId || !activeFeedEntryType || !this.isItemTypeFocusable(activeFeedEntryType)) {\n resolve({});\n return;\n }\n\n // Check if the active entry is a first level Feed item\n const firstLevelItem = this.getFocusableFeedItemById(feedItems, activeFeedEntryId);\n if (firstLevelItem) {\n const { id, type } = firstLevelItem;\n resolve({ id, type });\n return;\n }\n\n // Check if the active entry is within replies of any first level Feed items\n const firstLevelItemWithActiveReply = this.getCommentFeedItemByReplyId(feedItems, activeFeedEntryId);\n if (firstLevelItemWithActiveReply) {\n const { id, type } = firstLevelItemWithActiveReply;\n resolve({ id, type });\n return;\n }\n\n // If the active entry could not be found within feed items, it's most likely a reply that\n // is not yet visible in feed and we need to fetch its data in order to find parent\n api.getFeedAPI(false).fetchThreadedComment(\n file,\n activeFeedEntryId,\n ({ parent }) => {\n const parentItem = this.getFocusableFeedItemById(feedItems, parent?.id);\n const { id, type } = parentItem || {};\n resolve({ id, type });\n },\n (error: ElementsXhrError) => {\n if (error.status === 404) {\n resolve({});\n } else {\n reject(error);\n }\n },\n );\n });\n };\n\n getActiveCommentPath(commentId?: string): string {\n if (!commentId) {\n return '/activity';\n }\n\n return generatePath('/:sidebar/comments/:commentId?', {\n sidebar: 'activity',\n commentId,\n });\n }\n\n /**\n * Fetches replies (comments) of a comment or annotation\n *\n * @param {string} id - id of the feed item\n * @param {CommentFeedItemType} type - type of the feed item\n * @return {void}\n */\n getReplies = (id: string, type: CommentFeedItemType): void => {\n const { api, file } = this.props;\n\n api.getFeedAPI(false).fetchReplies(file, id, type, this.feedSuccessCallback, this.feedErrorCallback);\n\n // need to load the pending item\n this.fetchFeedItems();\n };\n\n /**\n * Gets the user avatar URL\n *\n * @param {string} userId the user id\n * @param {string} fileId the file id\n * @return the user avatar URL string for a given user with access token attached\n */\n getAvatarUrl = async (userId: string): Promise<?string> => {\n const { file, api } = this.props;\n\n return api.getUsersAPI(false).getAvatarUrlWithAccessToken(userId, file.id);\n };\n\n handleAnnotationSelect = (annotation: Annotation): void => {\n const { file_version, id: nextActiveAnnotationId } = annotation;\n const {\n emitActiveAnnotationChangeEvent,\n file,\n getAnnotationsMatchPath,\n getAnnotationsPath,\n history,\n internalSidebarNavigation,\n internalSidebarNavigationHandler,\n location,\n onAnnotationSelect,\n routerDisabled,\n } = this.props;\n const annotationFileVersionId = getProp(file_version, 'id');\n const currentFileVersionId = getProp(file, 'file_version.id');\n\n let selectedFileVersionId = currentFileVersionId;\n if (routerDisabled && internalSidebarNavigation) {\n selectedFileVersionId = getProp(internalSidebarNavigation, 'fileVersionId', currentFileVersionId);\n } else {\n const match = getAnnotationsMatchPath(location);\n selectedFileVersionId = getProp(match, 'params.fileVersionId', currentFileVersionId);\n }\n\n emitActiveAnnotationChangeEvent(nextActiveAnnotationId);\n\n if (annotationFileVersionId && annotationFileVersionId !== selectedFileVersionId) {\n if (routerDisabled && internalSidebarNavigationHandler) {\n internalSidebarNavigationHandler({\n sidebar: ViewType.ACTIVITY,\n activeFeedEntryId: nextActiveAnnotationId,\n activeFeedEntryType: FeedEntryType.ANNOTATIONS,\n fileVersionId: annotationFileVersionId,\n });\n } else {\n history.push(getAnnotationsPath(annotationFileVersionId, nextActiveAnnotationId));\n }\n }\n\n onAnnotationSelect(annotation);\n };\n\n handleItemsFiltered = (status?: ActivityFilterItemType) => {\n const { onFilterChange } = this.props;\n\n this.setState({ feedItemsStatusFilter: status });\n onFilterChange(status);\n };\n\n getFilteredFeedItems = (): FeedItems | typeof undefined => {\n const { feedItems, feedItemsStatusFilter } = this.state;\n if (!feedItems || !feedItemsStatusFilter || feedItemsStatusFilter === ACTIVITY_FILTER_OPTION_ALL) {\n return feedItems;\n }\n // Filter is completed on two properties (status and type) because filtering on comments (resolved vs. unresolved)\n // requires looking at item status to see if it is open or resolved. To filter all tasks, we need to look at the\n // item type. Item type is also used to keep versions in the feed. Task also has a status but it's status will be\n // \"NOT_STARTED\" or \"COMPLETED\" so it will not conflict with comment's status.\n return feedItems.filter(item => {\n return (\n item.status === feedItemsStatusFilter ||\n item.type === FEED_ITEM_TYPE_VERSION ||\n item.type === feedItemsStatusFilter\n );\n });\n };\n\n onTaskModalClose = () => {\n this.setState({\n approverSelectorContacts: [],\n });\n };\n\n refresh(shouldRefreshCache: boolean = true): void {\n this.fetchFeedItems(shouldRefreshCache);\n }\n\n renderAddTaskButton = () => {\n const { isDisabled, hasTasks, internalSidebarNavigation, internalSidebarNavigationHandler, routerDisabled } =\n this.props;\n const { approverSelectorContacts } = this.state;\n const { getApprover, getAvatarUrl, createTask, onTaskModalClose } = this;\n\n if (!hasTasks) {\n return null;\n }\n\n return (\n <AddTaskButton\n internalSidebarNavigation={internalSidebarNavigation}\n internalSidebarNavigationHandler={internalSidebarNavigationHandler}\n isDisabled={isDisabled}\n onTaskModalClose={onTaskModalClose}\n routerDisabled={routerDisabled}\n taskFormProps={{\n approvers: [],\n approverSelectorContacts,\n completionRule: TASK_COMPLETION_RULE_ALL,\n createTask,\n getApproverWithQuery: getApprover,\n getAvatarUrl,\n id: '',\n message: '',\n }}\n />\n );\n };\n\n renderActivitySidebarFilter = () => {\n const { features, hasTasks } = this.props;\n const { feedItemsStatusFilter } = this.state;\n const shouldShowActivityFeedFilter = isFeatureEnabled(features, 'activityFeed.filter.enabled');\n const shouldShowAdditionalFilterOptions = isFeatureEnabled(features, 'activityFeed.newThreadedReplies.enabled');\n\n if (!shouldShowActivityFeedFilter) {\n return null;\n }\n\n const activityFilterOptions: ActivityFilterOption[] = [\n ACTIVITY_FILTER_OPTION_ALL,\n ACTIVITY_FILTER_OPTION_UNRESOLVED,\n ];\n if (shouldShowAdditionalFilterOptions) {\n // Determine which filter options to show based on what activity types are available in current context\n activityFilterOptions.push(ACTIVITY_FILTER_OPTION_RESOLVED);\n if (hasTasks) {\n activityFilterOptions.push(ACTIVITY_FILTER_OPTION_TASKS);\n }\n }\n\n return (\n <ActivitySidebarFilter\n activityFilterOptions={activityFilterOptions}\n feedItemType={feedItemsStatusFilter}\n onFeedItemTypeClick={selectedStatus => {\n this.handleItemsFiltered(selectedStatus);\n }}\n />\n );\n };\n\n renderActions = () => (\n <>\n {this.renderActivitySidebarFilter()}\n {this.renderAddTaskButton()}\n </>\n );\n\n renderTitle = () => {\n const { features } = this.props;\n const shouldHideTitle = isFeatureEnabled(features, 'activityFeed.filter.enabled');\n\n if (shouldHideTitle) {\n return null;\n }\n return <FormattedMessage {...messages.sidebarActivityTitle} />;\n };\n\n render() {\n const {\n activeFeedEntryId,\n activeFeedEntryType,\n currentUser,\n currentUserError,\n elementId,\n features,\n file,\n hasReplies,\n hasVersions,\n isDisabled = false,\n onVersionHistoryClick,\n getUserProfileUrl,\n onTaskView,\n } = this.props;\n const { activityFeedError, approverSelectorContacts, contactsLoaded, mentionSelectorContacts } = this.state;\n const isNewThreadedRepliesEnabled = isFeatureEnabled(features, 'activityFeed.newThreadedReplies.enabled');\n const shouldUseUAA = isFeatureEnabled(features, 'activityFeed.uaaIntegration.enabled');\n\n return (\n <SidebarContent\n actions={this.renderActions()}\n className={classNames('bcs-activity', { 'bcs-activity--full': hasReplies })}\n elementId={elementId}\n sidebarView={SIDEBAR_VIEW_ACTIVITY}\n title={this.renderTitle()}\n >\n <ActivityFeed\n activeFeedEntryId={activeFeedEntryId}\n activeFeedEntryType={activeFeedEntryType}\n activityFeedError={activityFeedError}\n approverSelectorContacts={approverSelectorContacts}\n currentUser={currentUser}\n currentUserError={currentUserError}\n feedItems={this.getFilteredFeedItems()}\n file={file}\n getApproverWithQuery={this.getApprover}\n getAvatarUrl={this.getAvatarUrl}\n getMentionWithQuery={this.getMention}\n getUserProfileUrl={getUserProfileUrl}\n hasNewThreadedReplies={isNewThreadedRepliesEnabled}\n hasReplies={hasReplies}\n hasVersions={hasVersions}\n isDisabled={isDisabled}\n mentionSelectorContacts={mentionSelectorContacts}\n contactsLoaded={contactsLoaded}\n onAnnotationDelete={this.handleAnnotationDelete}\n onAnnotationEdit={this.handleAnnotationEdit}\n onAnnotationSelect={this.handleAnnotationSelect}\n onAnnotationStatusChange={this.handleAnnotationStatusChange}\n onAppActivityDelete={this.deleteAppActivity}\n onCommentCreate={this.createComment}\n onCommentDelete={this.deleteComment}\n onCommentUpdate={this.updateComment}\n onHideReplies={this.updateReplies}\n onReplyCreate={this.createReply}\n onReplyDelete={this.deleteReply}\n onReplyUpdate={this.updateReply}\n onShowReplies={this.getReplies}\n onTaskAssignmentUpdate={this.updateTaskAssignment}\n onTaskCreate={this.createTask}\n onTaskDelete={this.deleteTask}\n onTaskModalClose={this.onTaskModalClose}\n onTaskUpdate={this.updateTask}\n onTaskView={onTaskView}\n onVersionHistoryClick={onVersionHistoryClick}\n shouldUseUAA={shouldUseUAA}\n />\n </SidebarContent>\n );\n }\n}\n\nexport type ActivitySidebarProps = ExternalProps;\nexport { ActivitySidebar as ActivitySidebarComponent };\nexport default flow([\n withLogger(ORIGIN_ACTIVITY_SIDEBAR),\n withErrorBoundary(ORIGIN_ACTIVITY_SIDEBAR),\n withAPIContext,\n withFeatureConsumer,\n withAnnotatorContext,\n withRouterAndRef,\n])(ActivitySidebar);\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,OAAO,MAAM,YAAY;AAChC,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,SAASC,gBAAgB,QAAQ,YAAY;AAC7C,SAASC,YAAY,QAA4B,kBAAkB;AACnE,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,OAAOC,aAAa,MAAM,iBAAiB;AAC3C,OAAOC,GAAG,MAAM,WAAW;AAC3B,OAAOC,QAAQ,MAAM,oBAAoB;AACzC,OAAOC,cAAc,MAAM,kBAAkB;AAC7C,SAASC,gBAAgB,EAAEC,cAAc,QAAQ,4BAA4B;AAC7E,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,IAAI,QAAQ,yBAAyB;AAC9C,SAASC,oBAAoB,QAAQ,6BAA6B;AAClE,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,mBAAmB,EAAEC,gBAAgB,QAAQ,4BAA4B;AAClF,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,OAAOC,qBAAqB,MAAM,yBAAyB;AAC3D,SAASC,QAAQ,EAAEC,aAAa,QAAQ,mCAAmC;AAC3E,SACIC,0BAA0B,EAC1BC,+BAA+B,EAC/BC,4BAA4B,EAC5BC,iCAAiC,EACjCC,uBAAuB,EACvBC,yBAAyB,EACzBC,yBAAyB,EACzBC,sBAAsB,EACtBC,mBAAmB,EACnBC,sBAAsB,EACtBC,uBAAuB,EACvBC,qBAAqB,EACrBC,wBAAwB,EACxBC,6BAA6B,QAC1B,iBAAiB;AA8BxB,OAAO,wBAAwB;AAwD/B,OAAO,MAAMC,uBAA+B,GAAG;EAC3CC,WAAW,EAAE;IACTC,KAAK,EAAEhC,QAAQ,CAACiC,YAAY;IAC5BC,OAAO,EAAElC,QAAQ,CAACmC;EACtB;AACJ,CAAC;AAED,MAAMC,sBAAsB,GAAG,GAAGV,uBAAuB,eAAe;AACxE,MAAMW,oBAAoB,GAAG,GAAGX,uBAAuB,IAAIxB,gBAAgB,EAAE;AAC7E,MAAMoC,kBAAkB,GAAG,GAAGZ,uBAAuB,IAAIvB,cAAc,EAAE;AAEzEE,IAAI,CAACiC,kBAAkB,CAAC;AAExB,MAAMC,eAAe,SAASnD,KAAK,CAACoD,aAAa,CAAe;EA4B5DC,WAAWA,CAACC,KAAY,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IACZ;IAAAC,eAAA,iCAeqB,CAAC;MAAEC,EAAE;MAAEC;IAA+D,CAAC,KAAK;MACjG,MAAM;QAAEC,GAAG;QAAEC,yBAAyB;QAAEC;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAE3DK,yBAAyB,CAACH,EAAE,EAAE,IAAI,CAAC;MACnCE,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACC,gBAAgB,CAClCF,IAAI,EACJJ,EAAE,EACFC,WAAW,EACX,IAAI,CAACM,uBAAuB,CAACC,IAAI,CAAC,IAAI,EAAER,EAAE,CAAC,EAC3C,IAAI,CAACS,iBACT,CAAC;MAED,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,+BAEwC,CAAC;MAAEC,EAAE;MAAEW,IAAI;MAAEV;IAAY,CAAC,KAAK;MACpE,MAAM;QAAEC,GAAG;QAAEU,yBAAyB;QAAER;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAE3Dc,yBAAyB,CACrB;QACIZ,EAAE;QACFa,WAAW,EAAE;UACTC,OAAO,EAAEH;QACb;MACJ,CAAC,EACD,IACJ,CAAC;MACDT,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACU,gBAAgB,CAClCX,IAAI,EACJJ,EAAE,EACFW,IAAI,EACJK,SAAS,EACTf,WAAW,EACVgB,UAAsB,IAAK;QACxBL,yBAAyB,CAACK,UAAU,CAAC;QACrC,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAC9B,CAAC,EACD,IAAI,CAACT,iBACT,CAAC;MAED,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,uCAEwD,CAAC;MAAEC,EAAE;MAAEC,WAAW;MAAEkB;IAAO,CAAC,KAAK;MACtF,MAAM;QAAEjB,GAAG;QAAEU,yBAAyB;QAAER;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAE3Dc,yBAAyB,CAAC;QAAEZ,EAAE;QAAEmB;MAAO,CAAC,EAAE,IAAI,CAAC;MAC/CjB,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACU,gBAAgB,CAClCX,IAAI,EACJJ,EAAE,EACFgB,SAAS,EACTG,MAAM,EACNlB,WAAW,EACVgB,UAAsB,IAAK;QACxBL,yBAAyB,CAACK,UAAU,CAAC;QACrC,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAC9B,CAAC,EACD,IAAI,CAACT,iBACT,CAAC;MAED,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IASD;AACJ;AACA;IAFIX,eAAA,8BAGsB,MAAY;MAC9B,IAAI,CAACW,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIX,eAAA,4BAOoB,CAACqB,CAAmB,EAAEC,IAAY,EAAEC,WAAoB,KAAK;MAC7E,IAAI,CAACC,aAAa,CAACH,CAAC,EAAEC,IAAI,EAAEC,WAAW,CAAC;MACxC,IAAI,CAACZ,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,qBAEY,CACTe,OAAe,EACfU,SAA0B,EAC1BC,QAAkB,EAClBC,KAAc,EACdC,cAAkC,EAClCC,SAAoB,EACpBC,OAAkB,KACX;MACP,MAAM;QAAE3B,GAAG;QAAE4B,WAAW;QAAE1B;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAE7C,IAAI,CAACgC,WAAW,EAAE;QACd,MAAMtE,eAAe,CAAC,CAAC;MAC3B;MACA,MAAM+D,aAAa,GAAGA,CAACH,CAAC,EAAEC,IAAI,EAAEC,WAAW,KAAK;QAC5C,IAAIO,OAAO,EAAE;UACTA,OAAO,CAACT,CAAC,EAAEC,IAAI,EAAEC,WAAW,CAAC;QACjC;QACA,IAAI,CAACb,iBAAiB,CAACW,CAAC,EAAEC,IAAI,EAAEC,WAAW,CAAC;MAChD,CAAC;MACD,MAAMS,eAAe,GAAGA,CAAA,KAAM;QAC1B,IAAIH,SAAS,EAAE;UACXA,SAAS,CAAC,CAAC;QACf;QACA,IAAI,CAACV,mBAAmB,CAAC,CAAC;MAC9B,CAAC;MAEDhB,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAAC2B,aAAa,CAC/B5B,IAAI,EACJ0B,WAAW,EACXhB,OAAO,EACPU,SAAS,EACTC,QAAQ,EACRC,KAAK,EACLC,cAAc,EACdI,eAAe,EACfR,aACJ,CAAC;;MAED;MACA,IAAI,CAACb,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,qBAEakC,IAAa,IAAW;MAClC,MAAM;QAAE7B,IAAI;QAAEF,GAAG;QAAEgC;MAAa,CAAC,GAAG,IAAI,CAACpC,KAAK;MAC9CI,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAAC8B,aAAa,CAC/B/B,IAAI,EACJ6B,IAAI,EACHG,MAAc,IAAK;QAChB,IAAI,CAAClB,mBAAmB,CAAC,CAAC;QAC1BgB,YAAY,CAACE,MAAM,CAAC;MACxB,CAAC,EACD,IAAI,CAAC3B,iBACT,CAAC;;MAED;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,qBAEY,CAACkC,IAAuB,EAAEL,SAAoB,EAAEC,OAAkB,KAAW;MACtF,MAAM;QAAE3B,GAAG;QAAEE,IAAI;QAAEiC;MAAa,CAAC,GAAG,IAAI,CAACvC,KAAK;MAC9C,MAAMyB,aAAa,GAAGA,CAACH,CAAC,EAAEC,IAAI,KAAK;QAC/B,IAAIQ,OAAO,EAAE;UACTA,OAAO,CAACT,CAAC,EAAEC,IAAI,CAAC;QACpB;QACA,IAAI,CAACZ,iBAAiB,CAACW,CAAC,EAAEC,IAAI,CAAC;MACnC,CAAC;MACD,MAAMU,eAAe,GAAGA,CAAA,KAAM;QAC1B,IAAI,CAACb,mBAAmB,CAAC,CAAC;QAE1B,IAAIU,SAAS,EAAE;UACXA,SAAS,CAAC,CAAC;QACf;QAEAS,YAAY,CAAC,CAAC;MAClB,CAAC;MAEDnC,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACiC,aAAa,CAAClC,IAAI,EAAE6B,IAAI,EAAEF,eAAe,EAAER,aAAa,CAAC;;MAE/E;MACA,IAAI,CAACb,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,+BAEsB,CAACqC,MAAc,EAAEG,gBAAwB,EAAEpB,MAAwB,KAAW;MACjG,MAAM;QAAEjB,GAAG;QAAE4B,WAAW,GAAG,CAAC,CAAC;QAAE1B,IAAI;QAAEoC;MAAuB,CAAC,GAAG,IAAI,CAAC1C,KAAK;MAE1E,MAAMiC,eAAe,GAAGA,CAAA,KAAM;QAC1B,IAAI,CAACb,mBAAmB,CAAC,CAAC;QAC1BsB,sBAAsB,CAACJ,MAAM,EAAEG,gBAAgB,EAAEpB,MAAM,EAAEW,WAAW,CAAC9B,EAAE,CAAC;MAC5E,CAAC;MAEDE,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACoC,sBAAsB,CACxCrC,IAAI,EACJgC,MAAM,EACNG,gBAAgB,EAChBpB,MAAM,EACNY,eAAe,EACf,IAAI,CAACtB,iBACT,CAAC;;MAED;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIX,eAAA,wBAMgB,CAAC;MAAEC,EAAE;MAAEC;IAA+D,CAAC,KAAW;MAC9F,MAAM;QAAEC,GAAG;QAAEE,IAAI;QAAEsC,UAAU;QAAEC;MAAgB,CAAC,GAAG,IAAI,CAAC7C,KAAK;MAE7D,MAAMiC,eAAe,GAAIa,OAAgB,IAAK;QAC1C,IAAI,CAAC1B,mBAAmB,CAAC,CAAC;QAC1ByB,eAAe,CAACC,OAAO,CAAC;MAC5B,CAAC;MAED,IAAIF,UAAU,EAAE;QACZxC,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACwC,qBAAqB,CAACzC,IAAI,EAAEJ,EAAE,EAAEC,WAAW,EAAE8B,eAAe,EAAE,IAAI,CAACtB,iBAAiB,CAAC;MAC/G,CAAC,MAAM;QACHP,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACyC,aAAa,CAAC1C,IAAI,EAAEJ,EAAE,EAAEC,WAAW,EAAE8B,eAAe,EAAE,IAAI,CAACtB,iBAAiB,CAAC;MACvG;;MAEA;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIX,eAAA,sBAMc,CAAC;MACXC,EAAE;MACF+C,QAAQ;MACR9C;IAKJ,CAAC,KAAW;MACR,MAAM;QAAEC,GAAG;QAAE8C,8BAA8B;QAAE5C;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAEhEkD,8BAA8B,CAAChD,EAAE,EAAE+C,QAAQ,EAAE,IAAI,CAAC;MAClD7C,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAAC4C,WAAW,CAC7B7C,IAAI,EACJJ,EAAE,EACF+C,QAAQ,EACR9C,WAAW,EACX,IAAI,CAACiD,0BAA0B,CAAC1C,IAAI,CAAC,IAAI,EAAER,EAAE,EAAE+C,QAAQ,CAAC,EACxD,IAAI,CAACtC,iBACT,CAAC;;MAED;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPIX,eAAA,qCAQ6B,CAACC,EAAU,EAAE+C,QAAgB,KAAK;MAC3D,MAAM;QAAEC;MAA+B,CAAC,GAAG,IAAI,CAAClD,KAAK;MAErD,IAAI,CAACoB,mBAAmB,CAAC,CAAC;MAC1B8B,8BAA8B,CAAChD,EAAE,EAAE+C,QAAQ,CAAC;IAChD,CAAC;IAAAhD,eAAA,wBAEe,CACZC,EAAU,EACVW,IAAa,EACbQ,MAAuB,EACvBgC,UAAmB,EACnBlD,WAAiC,EACjC2B,SAAoB,EACpBC,OAAkB,KACX;MACP,MAAM;QAAE3B,GAAG;QAAEE,IAAI;QAAEsC,UAAU;QAAEU;MAAgB,CAAC,GAAG,IAAI,CAACtD,KAAK;MAE7D,MAAMyB,aAAa,GAAGA,CAACH,CAAC,EAAEC,IAAI,KAAK;QAC/B,IAAIQ,OAAO,EAAE;UACTA,OAAO,CAACT,CAAC,EAAEC,IAAI,CAAC;QACpB;QACA,IAAI,CAACZ,iBAAiB,CAACW,CAAC,EAAEC,IAAI,CAAC;MACnC,CAAC;MAED,MAAMU,eAAe,GAAGA,CAAA,KAAM;QAC1B,IAAI,CAACb,mBAAmB,CAAC,CAAC;QAC1B,IAAIU,SAAS,EAAE;UACXA,SAAS,CAAC,CAAC;QACf;QACAwB,eAAe,CAAC,CAAC;MACrB,CAAC;MAED,IAAIV,UAAU,EAAE;QACZxC,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACgD,qBAAqB,CACvCjD,IAAI,EACJJ,EAAE,EACFW,IAAI,EACJQ,MAAM,EACNlB,WAAW,EACX8B,eAAe,EACfR,aACJ,CAAC;MACL,CAAC,MAAM;QACHrB,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACiD,aAAa,CAC/BlD,IAAI,EACJJ,EAAE,EACFW,IAAI,IAAI,EAAE,EACVwC,UAAU,EACVlD,WAAW,EACX8B,eAAe,EACfR,aACJ,CAAC;MACL;;MAEA;MACA,IAAI,CAACb,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAVIX,eAAA,sBAWc,CACVC,EAAU,EACV+C,QAAgB,EAChBpC,IAAY,EACZV,WAAiC,EACjC2B,SAAoB,EACpBC,OAAkB,KACX;MACP,MAAM;QAAE3B,GAAG;QAAEqD,8BAA8B;QAAEnD;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAEhEyD,8BAA8B,CAAC;QAAEvD,EAAE;QAAEwD,cAAc,EAAE7C;MAAK,CAAC,EAAEoC,QAAQ,EAAE,IAAI,CAAC;MAC5E7C,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACoD,WAAW,CAC7BrD,IAAI,EACJJ,EAAE,EACF+C,QAAQ,EACRpC,IAAI,EACJV,WAAW,EACX,IAAI,CAACyD,0BAA0B,CAAClD,IAAI,CAAC,IAAI,EAAEuC,QAAQ,EAAEnB,SAAS,CAAC,EAC/D,CAAC+B,KAAK,EAAEtC,IAAI,KAAK;QACb,IAAIQ,OAAO,EAAE;UACTA,OAAO,CAAC8B,KAAK,EAAEtC,IAAI,CAAC;QACxB;QACA,IAAI,CAACZ,iBAAiB,CAACkD,KAAK,EAAEtC,IAAI,CAAC;MACvC,CACJ,CAAC;;MAED;MACA,IAAI,CAACX,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIX,eAAA,wBAOgB,CAACC,EAAU,EAAE4D,OAAuB,KAAK;MACrD,MAAM;QAAEC,iBAAiB;QAAE3D,GAAG;QAAEE,IAAI;QAAE0D,OAAO;QAAEC,gCAAgC;QAAEC;MAAe,CAAC,GAAG,IAAI,CAAClE,KAAK;MAC9G,MAAM;QAAEmE;MAAU,CAAC,GAAG,IAAI,CAACC,KAAK;MAEhC,IAAI,CAACD,SAAS,EAAE;QACZ;MACJ;MAEA,MAAME,OAAO,GAAGjE,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC;MACrC8D,OAAO,CAAC/D,IAAI,GAAGA,IAAI;;MAEnB;MACA;MACA,IACIyD,iBAAiB,IACjBD,OAAO,CAACQ,MAAM,KAAK,CAAC,IACpBH,SAAS,CAACI,IAAI,CACTC,IAAc,IACXA,IAAI,CAACtE,EAAE,KAAKA,EAAE,IAAIsE,IAAI,KAAK,IAAI,CAACC,2BAA2B,CAACN,SAAS,EAAEJ,iBAAiB,CAChG,CAAC,EACH;QACE,IAAIG,cAAc,IAAID,gCAAgC,EAAE;UACpDA,gCAAgC,CAC5B;YACIS,OAAO,EAAEtG,QAAQ,CAACuG;UACtB,CAAC,EACD,IACJ,CAAC;QACL,CAAC,MAAM;UACHX,OAAO,CAACY,OAAO,CAAC,IAAI,CAACC,oBAAoB,CAAC,CAAC,CAAC;QAChD;MACJ;MAEAR,OAAO,CAACS,cAAc,CAAC;QAAEhB;MAAQ,CAAC,EAAE5D,EAAE,CAAC;MAEvC,IAAI,CAACU,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARIX,eAAA,qCAS6B,CAACgD,QAAgB,EAAEnB,SAAoB,EAAEiD,KAAc,KAAK;MACrF,MAAM;QAAEtB;MAA+B,CAAC,GAAG,IAAI,CAACzD,KAAK;MAErD,IAAI,CAACoB,mBAAmB,CAAC,CAAC;MAC1BqC,8BAA8B,CAACsB,KAAK,EAAE9B,QAAQ,CAAC;MAC/C,IAAInB,SAAS,EAAE;QACXA,SAAS,CAAC,CAAC;MACf;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI7B,eAAA,wBAOgB,CAACY,IAAY,EAAEwC,UAAmB,KAAW;MACzD,MAAM;QAAEjD,GAAG;QAAE4B,WAAW;QAAE1B,IAAI;QAAEsC,UAAU;QAAEoC;MAAgB,CAAC,GAAG,IAAI,CAAChF,KAAK;MAE1E,IAAI,CAACgC,WAAW,EAAE;QACd,MAAMtE,eAAe,CAAC,CAAC;MAC3B;MAEA,MAAMuE,eAAe,GAAIa,OAAgB,IAAK;QAC1CkC,eAAe,CAAClC,OAAO,CAAC;QACxB,IAAI,CAAC1B,mBAAmB,CAAC,CAAC;MAC9B,CAAC;MAED,IAAIwB,UAAU,EAAE;QACZxC,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAAC0E,qBAAqB,CACvC3E,IAAI,EACJ0B,WAAW,EACXnB,IAAI,EACJoB,eAAe,EACf,IAAI,CAACtB,iBACT,CAAC;MACL,CAAC,MAAM;QACHP,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAAC2E,aAAa,CAC/B5E,IAAI,EACJ0B,WAAW,EACXnB,IAAI,EACJwC,UAAU,EACVpB,eAAe,EACf,IAAI,CAACtB,iBACT,CAAC;MACL;;MAEA;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPIX,eAAA,sBAQc,CAACgD,QAAgB,EAAEkC,UAA+B,EAAEtE,IAAY,KAAW;MACrF,MAAM;QAAET,GAAG;QAAE4B,WAAW;QAAEoD,8BAA8B;QAAE9E;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAE7E,IAAI,CAACgC,WAAW,EAAE;QACd,MAAMtE,eAAe,CAAC,CAAC;MAC3B;MAEA,MAAM2H,cAAc,GAAGrI,QAAQ,CAAC,UAAU,CAAC;MAC3CoI,8BAA8B,CAAC;QAAE1B,cAAc,EAAE7C;MAAK,CAAC,EAAEwE,cAAc,EAAEpC,QAAQ,EAAE,IAAI,CAAC;MACxF7C,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAAC+E,WAAW,CAC7BhF,IAAI,EACJ0B,WAAW,EACXiB,QAAQ,EACRkC,UAAU,EACVtE,IAAI,EACJ,IAAI,CAAC0E,0BAA0B,CAAC7E,IAAI,CAAC,IAAI,EAAE2E,cAAc,EAAEpC,QAAQ,CAAC,EACpE,IAAI,CAACtC,iBACT,CAAC;;MAED;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARIX,eAAA,qCAS6B,CAACoF,cAAsB,EAAEpC,QAAgB,EAAE8B,KAAc,KAAK;MACvF,MAAM;QAAEK;MAA+B,CAAC,GAAG,IAAI,CAACpF,KAAK;MAErD,IAAI,CAACoB,mBAAmB,CAAC,CAAC;MAC1BgE,8BAA8B,CAACL,KAAK,EAAEM,cAAc,EAAEpC,QAAQ,CAAC;IACnE,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIhD,eAAA,4BAMoB,CAAC;MAAEC;IAAmB,CAAC,KAAW;MAClD,MAAM;QAAEE,GAAG;QAAEE;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAEhCI,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACiF,iBAAiB,CAAClF,IAAI,EAAEJ,EAAE,EAAE,IAAI,CAACkB,mBAAmB,EAAE,IAAI,CAACT,iBAAiB,CAAC;;MAEnG;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAAAX,eAAA,mCA8C2BkE,SAAoB,IAAK;MACjD,MAAM;QAAEJ;MAAkB,CAAC,GAAG,IAAI,CAAC/D,KAAK;MAExC,IAAI,CAAC+D,iBAAiB,EAAE;QACpB;MACJ;MAEA,IAAI,CAAC0B,sBAAsB,CAACtB,SAAS,CAAC,CACjCuB,IAAI,CAAC,CAAC;QAAExF,EAAE;QAAEyF;MAAK,CAAC,KAAK;QACpB,IACI,CAACzF,EAAE,IACH,CAACyF,IAAI,IACL,IAAI,CAACC,mBAAmB,CAACzB,SAAS,EAAEJ,iBAAiB,CAAC,IACtD,CAAC,IAAI,CAAC8B,iBAAiB,CAACF,IAAI,CAAC,EAC/B;UACE,OAAOG,OAAO,CAACC,OAAO,CAAC5B,SAAS,CAAC;QACrC;QAEA,MAAMgB,UAA+B,GACjCQ,IAAI,KAAK9G,sBAAsB,GAAGA,sBAAsB,GAAGD,yBAAyB;QAExF,OAAO,IAAI,CAACoH,uBAAuB,CAAC7B,SAAS,EAAEjE,EAAE,EAAEiF,UAAU,CAAC;MAClE,CAAC,CAAC,CACDO,IAAI,CAACO,YAAY,IAAI,IAAI,CAACC,6BAA6B,CAACD,YAAY,CAAC,CAAC,CACtEE,KAAK,CAACtC,KAAK,IAAI,IAAI,CAACuC,2BAA2B,CAACjC,SAAS,EAAE,CAACN,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI5D,eAAA,wCAOiCkE,SAAoB,IAAW;MAC5D,MAAM;QACF7D,IAAI,EAAE;UAAEJ,EAAE,EAAEmG;QAAO,CAAC;QACpBC;MACJ,CAAC,GAAG,IAAI,CAACtG,KAAK;MAEdrC,IAAI,CAACgC,oBAAoB,CAAC;;MAE1B;MACA,IAAIwE,SAAS,CAACG,MAAM,GAAG,CAAC,EAAE;QACtBgC,MAAM,CAACC,iBAAiB,CACpB;UACIC,WAAW,EAAE7G,oBAAoB;UACjC8G,aAAa,EAAE/G;QACnB,CAAC,EACD2G,MACJ,CAAC;MACL;MAEA,IAAI,CAACK,QAAQ,CAAC;QAAEvC,SAAS;QAAEwC,iBAAiB,EAAEzF;MAAU,CAAC,CAAC;IAC9D,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIjB,eAAA,uBAOgB2G,UAA+D,IAAW;MACtF,MAAM;QAAEN;MAAO,CAAC,GAAG,IAAI,CAACtG,KAAK;MAE7BsG,MAAM,CAACO,eAAe,CAAC;QACnBD,UAAU;QACVjB,IAAI,EAAExG;MACV,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIc,eAAA,sCAO8B,CAACkE,SAAoB,EAAE2C,MAA0B,KAAW;MACtF,MAAM;QAAE/E;MAAQ,CAAC,GAAG,IAAI,CAAC/B,KAAK;MAE9B,IAAI,CAAC0G,QAAQ,CAAC;QACVvC,SAAS;QACTwC,iBAAiB,EAAEvH;MACvB,CAAC,CAAC;MAEF,IAAI2H,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,IAAIA,MAAM,CAACxC,MAAM,EAAE;QACxCvC,OAAO,CAAC,IAAIkF,KAAK,CAAC,wBAAwB,CAAC,EAAEtI,yBAAyB,EAAE;UACpEuI,gBAAgB,EAAE,IAAI;UACtBJ,MAAM,EAAEA,MAAM,CAACK,GAAG,CAAC,CAAC;YAAE5F;UAAK,CAAC,KAAKA,IAAI;QACzC,CAAC,CAAC;MACN;IACJ,CAAC;IAAAtB,eAAA,wCAE+B,CAAkCmH,QAAW,EAAEtD,OAAuB,KAAAuD,aAAA,CAAAA,aAAA,KAC/FD,QAAQ;MACXtD;IAAO,EACT;IAAA7D,eAAA,kCAEwB,CAACkE,SAAoB,EAAEjE,EAAW,EAAEyF,IAA0B,KAAyB;MAC7G,MAAM;QAAEvF,GAAG;QAAEE;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAEhC,OAAO,IAAI8F,OAAO,CAAC,CAACC,OAAO,EAAEuB,MAAM,KAAK;QACpC,IAAI,CAACpH,EAAE,IAAI,CAACyF,IAAI,EAAE;UACdI,OAAO,CAAC5B,SAAS,CAAC;UAClB;QACJ;QACA/D,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACgH,YAAY,CAC9BjH,IAAI,EACJJ,EAAE,EACFyF,IAAI,EACJ7B,OAAO,IAAI;UACP,MAAM0D,gBAAgB,GAAGrD,SAAS,CAACgD,GAAG,CAAC3C,IAAI,IAAI;YAC3C,IAAIA,IAAI,CAACtE,EAAE,KAAKA,EAAE,IAAI,IAAI,CAAC2F,iBAAiB,CAACrB,IAAI,CAACmB,IAAI,CAAC,EAAE;cACrD,IAAInB,IAAI,CAACmB,IAAI,KAAK/G,yBAAyB,EAAE;gBACzC,OAAO,IAAI,CAAC6I,6BAA6B,CAAajD,IAAI,EAAEV,OAAO,CAAC;cACxE;cACA,IAAIU,IAAI,CAACmB,IAAI,KAAK9G,sBAAsB,EAAE;gBACtC,OAAO,IAAI,CAAC4I,6BAA6B,CAAUjD,IAAI,EAAEV,OAAO,CAAC;cACrE;YACJ;YACA,OAAOU,IAAI;UACf,CAAC,CAAC;UACFuB,OAAO,CAACyB,gBAAgB,CAAC;QAC7B,CAAC,EACD3D,KAAK,IAAI;UACLyD,MAAM,CAACzD,KAAK,CAAC;QACjB,CACJ,CAAC;MACL,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARI5D,eAAA,wBASgB,CAAC4D,KAAuB,EAAEtC,IAAY,EAAEC,WAAmB,GAAG,CAAC,CAAC,KAAW;MACvF;MACAkG,OAAO,CAAC7D,KAAK,CAACA,KAAK,CAAC;MACpB;;MAEA;MACA,IAAI,CAAC7D,KAAK,CAAC+B,OAAO,CAAC8B,KAAK,EAAEtC,IAAI,EAAEC,WAAW,CAAC;IAChD,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIvB,eAAA,6CAOsC0H,aAA2C,IAAW;MACxF,MAAM;QAAEC;MAAQ,CAAC,GAAGD,aAAa;MACjC,IAAI,CAACjB,QAAQ,CAAC;QAAEmB,wBAAwB,EAAED;MAAQ,CAAC,CAAC;IACxD,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI3H,eAAA,4CAOqC0H,aAA2C,IAAW;MACvF,MAAM;QAAEC;MAAQ,CAAC,GAAGD,aAAa;MACjC,IAAI,CAACjB,QAAQ,CAAC;QAAEoB,cAAc,EAAE;MAAM,CAAC,EAAE,MACrC,IAAI,CAACpB,QAAQ,CAAC;QACVoB,cAAc,EAAE,IAAI;QACpBC,uBAAuB,EAAEH;MAC7B,CAAC,CACL,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI3H,eAAA,sBAOcrD,QAAQ,CAAEoL,SAAiB,IAAK;MAC1C,MAAM;QAAE1H,IAAI;QAAEF;MAAI,CAAC,GAAG,IAAI,CAACJ,KAAK;MAChCI,GAAG,CAAC6H,uBAAuB,CAAC,KAAK,CAAC,CAACC,yBAAyB,CACxD5H,IAAI,CAACJ,EAAE,EACP,IAAI,CAACiI,kCAAkC,EACvC,IAAI,CAAC1G,aAAa,EAClBuG,SAAS,EACT;QACII,aAAa,EAAE;MACnB,CACJ,CAAC;IACL,CAAC,EAAE1J,uBAAuB,CAAC;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;IANIuB,eAAA,qBAOarD,QAAQ,CAAEoL,SAAiB,IAAK;MACzC,MAAM;QAAE1H,IAAI;QAAEF;MAAI,CAAC,GAAG,IAAI,CAACJ,KAAK;MAChCI,GAAG,CAAC6H,uBAAuB,CAAC,KAAK,CAAC,CAACC,yBAAyB,CACxD5H,IAAI,CAACJ,EAAE,EACP,IAAI,CAACmI,iCAAiC,EACtC,IAAI,CAAC5G,aAAa,EAClBuG,SACJ,CAAC;IACL,CAAC,EAAEtJ,uBAAuB,CAAC;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;IANIuB,eAAA,mCAO2B,CAACkE,SAAoB,EAAEmE,MAAe,KAAkC;MAC/F,IAAI,CAACA,MAAM,EAAE;QACT,OAAOpH,SAAS;MACpB;MACA,OAAOiD,SAAS,CAACoE,IAAI,CAAC,CAAC;QAAErI,EAAE;QAAEyF;MAAK,CAAC,KAAKzF,EAAE,KAAKoI,MAAM,IAAI,IAAI,CAACE,mBAAmB,CAAC7C,IAAI,CAAC,CAAC;IAC5F,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI1F,eAAA,sCAO8B,CAACkE,SAAoB,EAAEsE,OAAgB,KAAkC;MACnG,IAAI,CAACA,OAAO,EAAE;QACV,OAAOvH,SAAS;MACpB;MACA,OAAOiD,SAAS,CAACoE,IAAI,CAAC/D,IAAI,IAAI;QAC1B,IAAKA,IAAI,CAACmB,IAAI,KAAK/G,yBAAyB,IAAI4F,IAAI,CAACmB,IAAI,KAAK9G,sBAAsB,IAAK,CAAC2F,IAAI,CAACV,OAAO,EAAE;UACpG,OAAO,KAAK;QAChB;QACA,OAAOU,IAAI,CAACV,OAAO,CAACS,IAAI,CAAC,CAAC;UAAErE;QAAG,CAAC,KAAKA,EAAE,KAAKuI,OAAO,CAAC;MACxD,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIxI,eAAA,8BAOsB,CAACkE,SAAoB,EAAEmE,MAAc,KACvD,CAAC,EAAE,IAAI,CAACI,wBAAwB,CAACvE,SAAS,EAAEmE,MAAM,CAAC,IAAI,IAAI,CAAC7D,2BAA2B,CAACN,SAAS,EAAEmE,MAAM,CAAC,CAAC;IAAArI,eAAA,8BAExF0F,IAA6D,IAChFA,IAAI,KAAK/G,yBAAyB,IAAI+G,IAAI,KAAK9G,sBAAsB,IAAI8G,IAAI,KAAK7G,mBAAmB;IAAAmB,eAAA,4BAEpF0F,IAA6D,IAC9EA,IAAI,KAAK/G,yBAAyB,IAAI+G,IAAI,KAAK9G,sBAAsB;IAEzE;AACJ;AACA;AACA;AACA;AACA;AACA;IANIoB,eAAA,iCAO0BkE,SAAoB,IAAoD;MAC9F,MAAM;QAAEJ,iBAAiB;QAAE4E,mBAAmB;QAAEvI,GAAG;QAAEE;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MACxE,OAAO,IAAI8F,OAAO,CAAC,CAACC,OAAO,EAAEuB,MAAM,KAAK;QACpC,IAAI,CAACvD,iBAAiB,IAAI,CAAC4E,mBAAmB,IAAI,CAAC,IAAI,CAACH,mBAAmB,CAACG,mBAAmB,CAAC,EAAE;UAC9F5C,OAAO,CAAC,CAAC,CAAC,CAAC;UACX;QACJ;;QAEA;QACA,MAAM6C,cAAc,GAAG,IAAI,CAACF,wBAAwB,CAACvE,SAAS,EAAEJ,iBAAiB,CAAC;QAClF,IAAI6E,cAAc,EAAE;UAChB,MAAM;YAAE1I,EAAE;YAAEyF;UAAK,CAAC,GAAGiD,cAAc;UACnC7C,OAAO,CAAC;YAAE7F,EAAE;YAAEyF;UAAK,CAAC,CAAC;UACrB;QACJ;;QAEA;QACA,MAAMkD,6BAA6B,GAAG,IAAI,CAACpE,2BAA2B,CAACN,SAAS,EAAEJ,iBAAiB,CAAC;QACpG,IAAI8E,6BAA6B,EAAE;UAC/B,MAAM;YAAE3I,EAAE;YAAEyF;UAAK,CAAC,GAAGkD,6BAA6B;UAClD9C,OAAO,CAAC;YAAE7F,EAAE;YAAEyF;UAAK,CAAC,CAAC;UACrB;QACJ;;QAEA;QACA;QACAvF,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACuI,oBAAoB,CACtCxI,IAAI,EACJyD,iBAAiB,EACjB,CAAC;UAAEgF;QAAO,CAAC,KAAK;UACZ,MAAMC,UAAU,GAAG,IAAI,CAACN,wBAAwB,CAACvE,SAAS,EAAE4E,MAAM,EAAE7I,EAAE,CAAC;UACvE,MAAM;YAAEA,EAAE;YAAEyF;UAAK,CAAC,GAAGqD,UAAU,IAAI,CAAC,CAAC;UACrCjD,OAAO,CAAC;YAAE7F,EAAE;YAAEyF;UAAK,CAAC,CAAC;QACzB,CAAC,EACA9B,KAAuB,IAAK;UACzB,IAAIA,KAAK,CAACxC,MAAM,KAAK,GAAG,EAAE;YACtB0E,OAAO,CAAC,CAAC,CAAC,CAAC;UACf,CAAC,MAAM;YACHuB,MAAM,CAACzD,KAAK,CAAC;UACjB;QACJ,CACJ,CAAC;MACL,CAAC,CAAC;IACN,CAAC;IAaD;AACJ;AACA;AACA;AACA;AACA;AACA;IANI5D,eAAA,qBAOa,CAACC,EAAU,EAAEyF,IAAyB,KAAW;MAC1D,MAAM;QAAEvF,GAAG;QAAEE;MAAK,CAAC,GAAG,IAAI,CAACN,KAAK;MAEhCI,GAAG,CAACG,UAAU,CAAC,KAAK,CAAC,CAACgH,YAAY,CAACjH,IAAI,EAAEJ,EAAE,EAAEyF,IAAI,EAAE,IAAI,CAACvE,mBAAmB,EAAE,IAAI,CAACT,iBAAiB,CAAC;;MAEpG;MACA,IAAI,CAACC,cAAc,CAAC,CAAC;IACzB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIX,eAAA,uBAOe,MAAOgJ,MAAc,IAAuB;MACvD,MAAM;QAAE3I,IAAI;QAAEF;MAAI,CAAC,GAAG,IAAI,CAACJ,KAAK;MAEhC,OAAOI,GAAG,CAAC8I,WAAW,CAAC,KAAK,CAAC,CAACC,2BAA2B,CAACF,MAAM,EAAE3I,IAAI,CAACJ,EAAE,CAAC;IAC9E,CAAC;IAAAD,eAAA,iCAEyBkB,UAAsB,IAAW;MACvD,MAAM;QAAEiI,YAAY;QAAElJ,EAAE,EAAEmJ;MAAuB,CAAC,GAAGlI,UAAU;MAC/D,MAAM;QACFmI,+BAA+B;QAC/BhJ,IAAI;QACJiJ,uBAAuB;QACvBC,kBAAkB;QAClBxF,OAAO;QACPyF,yBAAyB;QACzBxF,gCAAgC;QAChCyF,QAAQ;QACRC,kBAAkB;QAClBzF;MACJ,CAAC,GAAG,IAAI,CAAClE,KAAK;MACd,MAAM4J,uBAAuB,GAAG9M,OAAO,CAACsM,YAAY,EAAE,IAAI,CAAC;MAC3D,MAAMS,oBAAoB,GAAG/M,OAAO,CAACwD,IAAI,EAAE,iBAAiB,CAAC;MAE7D,IAAIwJ,qBAAqB,GAAGD,oBAAoB;MAChD,IAAI3F,cAAc,IAAIuF,yBAAyB,EAAE;QAC7CK,qBAAqB,GAAGhN,OAAO,CAAC2M,yBAAyB,EAAE,eAAe,EAAEI,oBAAoB,CAAC;MACrG,CAAC,MAAM;QACH,MAAME,KAAK,GAAGR,uBAAuB,CAACG,QAAQ,CAAC;QAC/CI,qBAAqB,GAAGhN,OAAO,CAACiN,KAAK,EAAE,sBAAsB,EAAEF,oBAAoB,CAAC;MACxF;MAEAP,+BAA+B,CAACD,sBAAsB,CAAC;MAEvD,IAAIO,uBAAuB,IAAIA,uBAAuB,KAAKE,qBAAqB,EAAE;QAC9E,IAAI5F,cAAc,IAAID,gCAAgC,EAAE;UACpDA,gCAAgC,CAAC;YAC7BS,OAAO,EAAEtG,QAAQ,CAACuG,QAAQ;YAC1BZ,iBAAiB,EAAEsF,sBAAsB;YACzCV,mBAAmB,EAAEtK,aAAa,CAAC2L,WAAW;YAC9CC,aAAa,EAAEL;UACnB,CAAC,CAAC;QACN,CAAC,MAAM;UACH5F,OAAO,CAACkG,IAAI,CAACV,kBAAkB,CAACI,uBAAuB,EAAEP,sBAAsB,CAAC,CAAC;QACrF;MACJ;MAEAM,kBAAkB,CAACxI,UAAU,CAAC;IAClC,CAAC;IAAAlB,eAAA,8BAEsBoB,MAA+B,IAAK;MACvD,MAAM;QAAE8I;MAAe,CAAC,GAAG,IAAI,CAACnK,KAAK;MAErC,IAAI,CAAC0G,QAAQ,CAAC;QAAE0D,qBAAqB,EAAE/I;MAAO,CAAC,CAAC;MAChD8I,cAAc,CAAC9I,MAAM,CAAC;IAC1B,CAAC;IAAApB,eAAA,+BAEsB,MAAoC;MACvD,MAAM;QAAEkE,SAAS;QAAEiG;MAAsB,CAAC,GAAG,IAAI,CAAChG,KAAK;MACvD,IAAI,CAACD,SAAS,IAAI,CAACiG,qBAAqB,IAAIA,qBAAqB,KAAK9L,0BAA0B,EAAE;QAC9F,OAAO6F,SAAS;MACpB;MACA;MACA;MACA;MACA;MACA,OAAOA,SAAS,CAACkG,MAAM,CAAC7F,IAAI,IAAI;QAC5B,OACIA,IAAI,CAACnD,MAAM,KAAK+I,qBAAqB,IACrC5F,IAAI,CAACmB,IAAI,KAAK5G,sBAAsB,IACpCyF,IAAI,CAACmB,IAAI,KAAKyE,qBAAqB;MAE3C,CAAC,CAAC;IACN,CAAC;IAAAnK,eAAA,2BAEkB,MAAM;MACrB,IAAI,CAACyG,QAAQ,CAAC;QACVmB,wBAAwB,EAAE;MAC9B,CAAC,CAAC;IACN,CAAC;IAAA5H,eAAA,8BAMqB,MAAM;MACxB,MAAM;QAAEqK,UAAU;QAAEC,QAAQ;QAAEd,yBAAyB;QAAExF,gCAAgC;QAAEC;MAAe,CAAC,GACvG,IAAI,CAAClE,KAAK;MACd,MAAM;QAAE6H;MAAyB,CAAC,GAAG,IAAI,CAACzD,KAAK;MAC/C,MAAM;QAAEoG,WAAW;QAAEC,YAAY;QAAEC,UAAU;QAAEC;MAAiB,CAAC,GAAG,IAAI;MAExE,IAAI,CAACJ,QAAQ,EAAE;QACX,OAAO,IAAI;MACf;MAEA,oBACI7N,KAAA,CAAAkO,aAAA,CAACxN,aAAa;QACVqM,yBAAyB,EAAEA,yBAA0B;QACrDxF,gCAAgC,EAAEA,gCAAiC;QACnEqG,UAAU,EAAEA,UAAW;QACvBK,gBAAgB,EAAEA,gBAAiB;QACnCzG,cAAc,EAAEA,cAAe;QAC/B2G,aAAa,EAAE;UACXC,SAAS,EAAE,EAAE;UACbjD,wBAAwB;UACxBhG,cAAc,EAAE3C,wBAAwB;UACxCwL,UAAU;UACVK,oBAAoB,EAAEP,WAAW;UACjCC,YAAY;UACZvK,EAAE,EAAE,EAAE;UACNc,OAAO,EAAE;QACb;MAAE,CACL,CAAC;IAEV,CAAC;IAAAf,eAAA,sCAE6B,MAAM;MAChC,MAAM;QAAE+K,QAAQ;QAAET;MAAS,CAAC,GAAG,IAAI,CAACvK,KAAK;MACzC,MAAM;QAAEoK;MAAsB,CAAC,GAAG,IAAI,CAAChG,KAAK;MAC5C,MAAM6G,4BAA4B,GAAGjN,gBAAgB,CAACgN,QAAQ,EAAE,6BAA6B,CAAC;MAC9F,MAAME,iCAAiC,GAAGlN,gBAAgB,CAACgN,QAAQ,EAAE,yCAAyC,CAAC;MAE/G,IAAI,CAACC,4BAA4B,EAAE;QAC/B,OAAO,IAAI;MACf;MAEA,MAAME,qBAA6C,GAAG,CAClD7M,0BAA0B,EAC1BG,iCAAiC,CACpC;MACD,IAAIyM,iCAAiC,EAAE;QACnC;QACAC,qBAAqB,CAACjB,IAAI,CAAC3L,+BAA+B,CAAC;QAC3D,IAAIgM,QAAQ,EAAE;UACVY,qBAAqB,CAACjB,IAAI,CAAC1L,4BAA4B,CAAC;QAC5D;MACJ;MAEA,oBACI9B,KAAA,CAAAkO,aAAA,CAACzM,qBAAqB;QAClBgN,qBAAqB,EAAEA,qBAAsB;QAC7CC,YAAY,EAAEhB,qBAAsB;QACpCiB,mBAAmB,EAAEC,cAAc,IAAI;UACnC,IAAI,CAACC,mBAAmB,CAACD,cAAc,CAAC;QAC5C;MAAE,CACL,CAAC;IAEV,CAAC;IAAArL,eAAA,wBAEe,mBACZvD,KAAA,CAAAkO,aAAA,CAAAlO,KAAA,CAAA8O,QAAA,QACK,IAAI,CAACC,2BAA2B,CAAC,CAAC,EAClC,IAAI,CAACC,mBAAmB,CAAC,CAC5B,CACL;IAAAzL,eAAA,sBAEa,MAAM;MAChB,MAAM;QAAE+K;MAAS,CAAC,GAAG,IAAI,CAAChL,KAAK;MAC/B,MAAM2L,eAAe,GAAG3N,gBAAgB,CAACgN,QAAQ,EAAE,6BAA6B,CAAC;MAEjF,IAAIW,eAAe,EAAE;QACjB,OAAO,IAAI;MACf;MACA,oBAAOjP,KAAA,CAAAkO,aAAA,CAAC3N,gBAAgB,EAAKK,QAAQ,CAACsO,oBAAuB,CAAC;IAClE,CAAC;IAzkCG,MAAM;MAAEtF,MAAM,EAANA;IAAO,CAAC,GAAG,IAAI,CAACtG,KAAK;IAE7BrC,IAAI,CAAC+B,sBAAsB,CAAC;IAE5B4G,OAAM,CAACuF,aAAa,CAAC;MACjBrF,WAAW,EAAE5G;IACjB,CAAC,CAAC;IACF,IAAI,CAACwE,KAAK,GAAG,CAAC,CAAC;EACnB;EAEA0H,iBAAiBA,CAAA,EAAG;IAChB,IAAI,CAAClL,cAAc,CAAC,IAAI,CAAC;EAC7B;EAiEAH,uBAAuBA,CAACP,EAAU,EAAE;IAChC,MAAM;MAAEG;IAA0B,CAAC,GAAG,IAAI,CAACL,KAAK;IAEhD,IAAI,CAACoB,mBAAmB,CAAC,CAAC;IAC1Bf,yBAAyB,CAACH,EAAE,CAAC;EACjC;EAwcA;AACJ;AACA;AACA;AACA;AACA;EACIU,cAAcA,CAACmL,kBAA2B,GAAG,KAAK,EAAEC,aAAsB,GAAG,KAAK,EAAE;IAChF,MAAM;MACFjI,iBAAiB;MACjB4E,mBAAmB;MACnBvI,GAAG;MACHE,IAAI;MACJ0K,QAAQ;MACRpI,UAAU,EAAEqJ,iBAAiB;MAC7B1B,QAAQ,EAAE2B,eAAe;MACzBC,WAAW,EAAEC;IACjB,CAAC,GAAG,IAAI,CAACpM,KAAK;IACd,MAAMqM,kBAAkB,GACpBN,kBAAkB,IAClBE,iBAAiB,IACjBlI,iBAAiB,IACjB4E,mBAAmB,KAAK9J,sBAAsB;IAClD,MAAMyN,qBAAqB,GAAGtO,gBAAgB,CAACgN,QAAQ,EAAE,kCAAkC,CAAC;IAC5F,MAAMuB,qBAAqB,GAAGvO,gBAAgB,CAACgN,QAAQ,EAAE,kCAAkC,CAAC;IAC5F,MAAMwB,YAAY,GAAGxO,gBAAgB,CAACgN,QAAQ,EAAE,qCAAqC,CAAC;IAEtF5K,GAAG,CAACG,UAAU,CAACyL,aAAa,CAAC,CAAC7H,SAAS,CACnC7D,IAAI,EACJyL,kBAAkB,EAClBM,kBAAkB,GAAG,IAAI,CAACI,wBAAwB,GAAG,IAAI,CAACvG,6BAA6B,EACvF,IAAI,CAACE,2BAA2B,EAChC,IAAI,CAAC3E,aAAa,EAClB;MACI8K,qBAAqB;MACrBD,qBAAqB;MACrBL,iBAAiB;MACjBC,eAAe;MACfE,kBAAkB;MAClBI;IACJ,CAAC,EACDA,YAAY,GAAG,IAAI,CAACE,YAAY,GAAGxL,SACvC,CAAC;EACL;EAgUA2D,oBAAoBA,CAAC8H,SAAkB,EAAU;IAC7C,IAAI,CAACA,SAAS,EAAE;MACZ,OAAO,WAAW;IACtB;IAEA,OAAOzP,YAAY,CAAC,gCAAgC,EAAE;MAClDwH,OAAO,EAAE,UAAU;MACnBiI;IACJ,CAAC,CAAC;EACN;EAyGAC,OAAOA,CAACb,kBAA2B,GAAG,IAAI,EAAQ;IAC9C,IAAI,CAACnL,cAAc,CAACmL,kBAAkB,CAAC;EAC3C;EAmFAc,MAAMA,CAAA,EAAG;IACL,MAAM;MACF9I,iBAAiB;MACjB4E,mBAAmB;MACnB3G,WAAW;MACX8K,gBAAgB;MAChBC,SAAS;MACT/B,QAAQ;MACR1K,IAAI;MACJsC,UAAU;MACVuJ,WAAW;MACX7B,UAAU,GAAG,KAAK;MAClB0C,qBAAqB;MACrBC,iBAAiB;MACjBC;IACJ,CAAC,GAAG,IAAI,CAAClN,KAAK;IACd,MAAM;MAAE2G,iBAAiB;MAAEkB,wBAAwB;MAAEC,cAAc;MAAEC;IAAwB,CAAC,GAAG,IAAI,CAAC3D,KAAK;IAC3G,MAAM+I,2BAA2B,GAAGnP,gBAAgB,CAACgN,QAAQ,EAAE,yCAAyC,CAAC;IACzG,MAAMwB,YAAY,GAAGxO,gBAAgB,CAACgN,QAAQ,EAAE,qCAAqC,CAAC;IAEtF,oBACItO,KAAA,CAAAkO,aAAA,CAACrN,cAAc;MACX6P,OAAO,EAAE,IAAI,CAACC,aAAa,CAAC,CAAE;MAC9BC,SAAS,EAAE3Q,UAAU,CAAC,cAAc,EAAE;QAAE,oBAAoB,EAAEiG;MAAW,CAAC,CAAE;MAC5EmK,SAAS,EAAEA,SAAU;MACrBQ,WAAW,EAAEtO,qBAAsB;MACnCK,KAAK,EAAE,IAAI,CAACkO,WAAW,CAAC;IAAE,gBAE1B9Q,KAAA,CAAAkO,aAAA,CAACzN,YAAY;MACT4G,iBAAiB,EAAEA,iBAAkB;MACrC4E,mBAAmB,EAAEA,mBAAoB;MACzChC,iBAAiB,EAAEA,iBAAkB;MACrCkB,wBAAwB,EAAEA,wBAAyB;MACnD7F,WAAW,EAAEA,WAAY;MACzB8K,gBAAgB,EAAEA,gBAAiB;MACnC3I,SAAS,EAAE,IAAI,CAACsJ,oBAAoB,CAAC,CAAE;MACvCnN,IAAI,EAAEA,IAAK;MACXyK,oBAAoB,EAAE,IAAI,CAACP,WAAY;MACvCC,YAAY,EAAE,IAAI,CAACA,YAAa;MAChCiD,mBAAmB,EAAE,IAAI,CAACC,UAAW;MACrCV,iBAAiB,EAAEA,iBAAkB;MACrCW,qBAAqB,EAAET,2BAA4B;MACnDvK,UAAU,EAAEA,UAAW;MACvBuJ,WAAW,EAAEA,WAAY;MACzB7B,UAAU,EAAEA,UAAW;MACvBvC,uBAAuB,EAAEA,uBAAwB;MACjDD,cAAc,EAAEA,cAAe;MAC/B+F,kBAAkB,EAAE,IAAI,CAACC,sBAAuB;MAChDC,gBAAgB,EAAE,IAAI,CAACC,oBAAqB;MAC5CrE,kBAAkB,EAAE,IAAI,CAACsE,sBAAuB;MAChDC,wBAAwB,EAAE,IAAI,CAACC,4BAA6B;MAC5DC,mBAAmB,EAAE,IAAI,CAAC5I,iBAAkB;MAC5CR,eAAe,EAAE,IAAI,CAACE,aAAc;MACpCrC,eAAe,EAAE,IAAI,CAACG,aAAc;MACpCM,eAAe,EAAE,IAAI,CAACE,aAAc;MACpC6K,aAAa,EAAE,IAAI,CAACC,aAAc;MAClCC,aAAa,EAAE,IAAI,CAACjJ,WAAY;MAChCkJ,aAAa,EAAE,IAAI,CAACrL,WAAY;MAChCsL,aAAa,EAAE,IAAI,CAAC9K,WAAY;MAChC+K,aAAa,EAAE,IAAI,CAACC,UAAW;MAC/BjM,sBAAsB,EAAE,IAAI,CAACkM,oBAAqB;MAClDC,YAAY,EAAE,IAAI,CAACnE,UAAW;MAC9BtI,YAAY,EAAE,IAAI,CAAC0M,UAAW;MAC9BnE,gBAAgB,EAAE,IAAI,CAACA,gBAAiB;MACxCpI,YAAY,EAAE,IAAI,CAACwM,UAAW;MAC9B7B,UAAU,EAAEA,UAAW;MACvBF,qBAAqB,EAAEA,qBAAsB;MAC7CR,YAAY,EAAEA;IAAa,CAC9B,CACW,CAAC;EAEzB;AACJ;AAACvM,eAAA,CAlrCKJ,eAAe,kBACK;EAClBmP,cAAc,EAAE,CAAC,CAAC;EAClB1F,+BAA+B,EAAEvM,IAAI;EACrCsD,yBAAyB,EAAEtD,IAAI;EAC/BqI,8BAA8B,EAAErI,IAAI;EACpCmG,8BAA8B,EAAEnG,IAAI;EACpC0G,8BAA8B,EAAE1G,IAAI;EACpC+D,yBAAyB,EAAE/D,IAAI;EAC/BwM,uBAAuB,EAAExM,IAAI;EAC7ByM,kBAAkB,EAAEzM,IAAI;EACxB6F,UAAU,EAAE,KAAK;EACjB2H,QAAQ,EAAE,IAAI;EACd4B,WAAW,EAAE,IAAI;EACjB7B,UAAU,EAAE,KAAK;EACjBX,kBAAkB,EAAE5M,IAAI;EACxBiI,eAAe,EAAEjI,IAAI;EACrB8F,eAAe,EAAE9F,IAAI;EACrBuG,eAAe,EAAEvG,IAAI;EACrBoN,cAAc,EAAEpN,IAAI;EACpB2F,sBAAsB,EAAE3F,IAAI;EAC5B8R,YAAY,EAAE9R,IAAI;EAClBqF,YAAY,EAAErF,IAAI;EAClBwF,YAAY,EAAExF,IAAI;EAClBkS,eAAe,EAAElS,IAAI;EACrBiQ,qBAAqB,EAAEjQ;AAC3B,CAAC;AA2pCL,SAAS8C,eAAe,IAAIqP,wBAAwB;AACpD,eAAerS,IAAI,CAAC,CAChBoB,UAAU,CAACe,uBAAuB,CAAC,EACnClB,iBAAiB,CAACkB,uBAAuB,CAAC,EAC1CnB,cAAc,EACdE,mBAAmB,EACnBH,oBAAoB,EACpBM,gBAAgB,CACnB,CAAC,CAAC2B,eAAe,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export declare enum ViewType {
|
|
2
|
-
BOXAI = "boxai",
|
|
3
2
|
SKILLS = "skills",
|
|
4
|
-
ACTIVITY = "activity",
|
|
5
3
|
DETAILS = "details",
|
|
6
4
|
METADATA = "metadata",
|
|
5
|
+
METADATA_REDESIGN = "metadata_redesign",
|
|
6
|
+
BOXAI = "boxai",
|
|
7
|
+
ACTIVITY = "activity",
|
|
8
|
+
VERSIONS = "versions",
|
|
7
9
|
DOCGEN = "docgen"
|
|
8
10
|
}
|
|
9
11
|
export declare enum FeedEntryType {
|
|
@@ -15,11 +17,15 @@ type VersionSidebarView = {
|
|
|
15
17
|
sidebar: ViewType.ACTIVITY | ViewType.DETAILS;
|
|
16
18
|
versionId: string;
|
|
17
19
|
};
|
|
20
|
+
export type MetadataSidebarView = {
|
|
21
|
+
sidebar: ViewType.METADATA | ViewType.METADATA_REDESIGN;
|
|
22
|
+
filteredTemplateIds?: string;
|
|
23
|
+
};
|
|
18
24
|
export type ActivityAnnotationsSidebarView = {
|
|
19
25
|
sidebar: ViewType.ACTIVITY;
|
|
20
26
|
activeFeedEntryType: FeedEntryType.ANNOTATIONS;
|
|
21
27
|
fileVersionId: string;
|
|
22
|
-
activeFeedEntryId
|
|
28
|
+
activeFeedEntryId?: string;
|
|
23
29
|
};
|
|
24
30
|
type ActivityCommentsSidebarView = {
|
|
25
31
|
sidebar: ViewType.ACTIVITY;
|
|
@@ -28,7 +34,7 @@ type ActivityCommentsSidebarView = {
|
|
|
28
34
|
};
|
|
29
35
|
export type SidebarNavigation = {
|
|
30
36
|
sidebar: ViewType;
|
|
31
|
-
} | VersionSidebarView | ActivityCommentsSidebarView | ActivityAnnotationsSidebarView;
|
|
37
|
+
} | VersionSidebarView | MetadataSidebarView | ActivityCommentsSidebarView | ActivityAnnotationsSidebarView;
|
|
32
38
|
export type InternalSidebarNavigation = SidebarNavigation & {
|
|
33
39
|
open?: boolean;
|
|
34
40
|
};
|
package/package.json
CHANGED
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
export const ViewType = Object.freeze({
|
|
7
7
|
BOXAI: 'boxai',
|
|
8
|
-
SKILLS: 'skills',
|
|
9
|
-
ACTIVITY: 'activity',
|
|
10
8
|
DETAILS: 'details',
|
|
11
9
|
METADATA: 'metadata',
|
|
10
|
+
METADATA_REDESIGN: 'metadata_redesign',
|
|
11
|
+
SKILLS: 'skills',
|
|
12
|
+
ACTIVITY: 'activity',
|
|
13
|
+
VERSIONS: 'versions',
|
|
12
14
|
DOCGEN: 'docgen',
|
|
13
15
|
});
|
|
14
16
|
|
|
@@ -22,11 +24,12 @@ export type ViewTypeValues = $Values<typeof ViewType>;
|
|
|
22
24
|
export type FeedEntryTypeValues = $Values<typeof FeedEntryType>;
|
|
23
25
|
|
|
24
26
|
export type SidebarNavigation = {
|
|
25
|
-
sidebar: ViewTypeValues,
|
|
26
|
-
versionId?: string,
|
|
27
27
|
activeFeedEntryType?: FeedEntryTypeValues,
|
|
28
28
|
activeFeedEntryId?: string,
|
|
29
29
|
fileVersionId?: string,
|
|
30
|
+
filteredTemplateIds?: string,
|
|
31
|
+
sidebar: ViewTypeValues,
|
|
32
|
+
versionId?: string,
|
|
30
33
|
};
|
|
31
34
|
|
|
32
35
|
export type InternalSidebarNavigation = SidebarNavigation & {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export enum ViewType {
|
|
2
|
-
BOXAI = 'boxai',
|
|
3
2
|
SKILLS = 'skills',
|
|
4
|
-
ACTIVITY = 'activity',
|
|
5
3
|
DETAILS = 'details',
|
|
6
4
|
METADATA = 'metadata',
|
|
5
|
+
METADATA_REDESIGN = 'metadata_redesign',
|
|
6
|
+
BOXAI = 'boxai',
|
|
7
|
+
ACTIVITY = 'activity',
|
|
8
|
+
VERSIONS = 'versions',
|
|
7
9
|
DOCGEN = 'docgen',
|
|
8
10
|
}
|
|
9
11
|
|
|
@@ -18,11 +20,16 @@ type VersionSidebarView = {
|
|
|
18
20
|
versionId: string;
|
|
19
21
|
};
|
|
20
22
|
|
|
23
|
+
export type MetadataSidebarView = {
|
|
24
|
+
sidebar: ViewType.METADATA | ViewType.METADATA_REDESIGN;
|
|
25
|
+
filteredTemplateIds?: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
21
28
|
export type ActivityAnnotationsSidebarView = {
|
|
22
29
|
sidebar: ViewType.ACTIVITY;
|
|
23
30
|
activeFeedEntryType: FeedEntryType.ANNOTATIONS;
|
|
24
31
|
fileVersionId: string;
|
|
25
|
-
activeFeedEntryId
|
|
32
|
+
activeFeedEntryId?: string;
|
|
26
33
|
};
|
|
27
34
|
type ActivityCommentsSidebarView = {
|
|
28
35
|
sidebar: ViewType.ACTIVITY;
|
|
@@ -35,6 +42,7 @@ export type SidebarNavigation =
|
|
|
35
42
|
sidebar: ViewType;
|
|
36
43
|
}
|
|
37
44
|
| VersionSidebarView
|
|
45
|
+
| MetadataSidebarView
|
|
38
46
|
| ActivityCommentsSidebarView
|
|
39
47
|
| ActivityAnnotationsSidebarView;
|
|
40
48
|
|
|
@@ -14,16 +14,26 @@ import PlainButton from '../../components/plain-button/PlainButton';
|
|
|
14
14
|
import messages from '../common/messages';
|
|
15
15
|
import type { BoxItem } from '../../common/types/core';
|
|
16
16
|
import { SIDEBAR_VIEW_METADATA } from '../../constants';
|
|
17
|
+
import type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';
|
|
17
18
|
|
|
18
19
|
type Props = {
|
|
19
20
|
collection: Array<string | BoxItem>,
|
|
20
21
|
currentIndex: number,
|
|
21
22
|
intl: IntlShape,
|
|
23
|
+
internalSidebarNavigation?: InternalSidebarNavigation,
|
|
24
|
+
internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
|
|
22
25
|
onNavigateLeft: Function,
|
|
23
26
|
onNavigateRight: Function,
|
|
27
|
+
routerDisabled?: boolean,
|
|
24
28
|
};
|
|
25
29
|
|
|
26
|
-
const
|
|
30
|
+
const PreviewNavigationWithRouter = ({
|
|
31
|
+
collection = [],
|
|
32
|
+
currentIndex,
|
|
33
|
+
intl,
|
|
34
|
+
onNavigateLeft,
|
|
35
|
+
onNavigateRight,
|
|
36
|
+
}: Props) => {
|
|
27
37
|
const hasLeftNavigation = collection.length > 1 && currentIndex > 0 && currentIndex < collection.length;
|
|
28
38
|
const hasRightNavigation = collection.length > 1 && currentIndex > -1 && currentIndex < collection.length - 1;
|
|
29
39
|
|
|
@@ -48,6 +58,7 @@ const PreviewNavigation = ({ collection = [], currentIndex, intl, onNavigateLeft
|
|
|
48
58
|
{hasLeftNavigation && (
|
|
49
59
|
<PlainButton
|
|
50
60
|
className="bcpr-navigate-left"
|
|
61
|
+
data-testid="preview-navigation-left"
|
|
51
62
|
onClick={() => {
|
|
52
63
|
goToActiveSidebarTab(match.params, history);
|
|
53
64
|
onNavigateLeft();
|
|
@@ -61,6 +72,7 @@ const PreviewNavigation = ({ collection = [], currentIndex, intl, onNavigateLeft
|
|
|
61
72
|
{hasRightNavigation && (
|
|
62
73
|
<PlainButton
|
|
63
74
|
className="bcpr-navigate-right"
|
|
75
|
+
data-testid="preview-navigation-right"
|
|
64
76
|
onClick={() => {
|
|
65
77
|
goToActiveSidebarTab(match.params, history);
|
|
66
78
|
onNavigateRight();
|
|
@@ -77,5 +89,77 @@ const PreviewNavigation = ({ collection = [], currentIndex, intl, onNavigateLeft
|
|
|
77
89
|
);
|
|
78
90
|
};
|
|
79
91
|
|
|
80
|
-
|
|
92
|
+
const PreviewNavigationWithoutRouter = ({
|
|
93
|
+
collection = [],
|
|
94
|
+
currentIndex,
|
|
95
|
+
intl,
|
|
96
|
+
internalSidebarNavigation,
|
|
97
|
+
internalSidebarNavigationHandler,
|
|
98
|
+
onNavigateLeft,
|
|
99
|
+
onNavigateRight,
|
|
100
|
+
}: Props) => {
|
|
101
|
+
const hasLeftNavigation = collection.length > 1 && currentIndex > 0 && currentIndex < collection.length;
|
|
102
|
+
const hasRightNavigation = collection.length > 1 && currentIndex > -1 && currentIndex < collection.length - 1;
|
|
103
|
+
|
|
104
|
+
if (!hasLeftNavigation && !hasRightNavigation) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const handleInternalNavigation = () => {
|
|
109
|
+
if (internalSidebarNavigationHandler && internalSidebarNavigation && internalSidebarNavigation.sidebar) {
|
|
110
|
+
const { sidebar, ...rest } = internalSidebarNavigation;
|
|
111
|
+
const hasDeeplink = Object.keys(rest).length > 0;
|
|
112
|
+
|
|
113
|
+
if (hasDeeplink && sidebar === SIDEBAR_VIEW_METADATA) {
|
|
114
|
+
internalSidebarNavigationHandler(internalSidebarNavigation);
|
|
115
|
+
} else {
|
|
116
|
+
internalSidebarNavigationHandler({ sidebar });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
return (
|
|
122
|
+
<>
|
|
123
|
+
{hasLeftNavigation && (
|
|
124
|
+
<PlainButton
|
|
125
|
+
className="bcpr-navigate-left"
|
|
126
|
+
data-testid="preview-navigation-left"
|
|
127
|
+
onClick={() => {
|
|
128
|
+
handleInternalNavigation();
|
|
129
|
+
onNavigateLeft();
|
|
130
|
+
}}
|
|
131
|
+
title={intl.formatMessage(messages.previousFile)}
|
|
132
|
+
type="button"
|
|
133
|
+
>
|
|
134
|
+
<IconNavigateLeft />
|
|
135
|
+
</PlainButton>
|
|
136
|
+
)}
|
|
137
|
+
{hasRightNavigation && (
|
|
138
|
+
<PlainButton
|
|
139
|
+
className="bcpr-navigate-right"
|
|
140
|
+
data-testid="preview-navigation-right"
|
|
141
|
+
onClick={() => {
|
|
142
|
+
handleInternalNavigation();
|
|
143
|
+
onNavigateRight();
|
|
144
|
+
}}
|
|
145
|
+
title={intl.formatMessage(messages.nextFile)}
|
|
146
|
+
type="button"
|
|
147
|
+
>
|
|
148
|
+
<IconNavigateRight />
|
|
149
|
+
</PlainButton>
|
|
150
|
+
)}
|
|
151
|
+
</>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const PreviewNavigation = (props: Props) => {
|
|
156
|
+
const { routerDisabled = false } = props;
|
|
157
|
+
|
|
158
|
+
if (routerDisabled) {
|
|
159
|
+
return <PreviewNavigationWithoutRouter {...props} />;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return <PreviewNavigationWithRouter {...props} />;
|
|
163
|
+
};
|
|
164
|
+
|
|
81
165
|
export default injectIntl(PreviewNavigation);
|