box-ui-elements 16.0.0-beta.8 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.css +1 -1
- package/dist/explorer.js +19 -58
- package/dist/openwith.css +1 -1
- package/dist/openwith.js +10 -10
- package/dist/picker.css +1 -1
- package/dist/picker.js +12 -12
- package/dist/preview.css +1 -1
- package/dist/preview.js +17 -56
- package/dist/sharing.css +1 -1
- package/dist/sharing.js +34 -34
- package/dist/sidebar.css +1 -1
- package/dist/sidebar.js +17 -56
- package/dist/uploader.css +1 -1
- package/dist/uploader.js +12 -12
- package/es/api/APIFactory.js +27 -0
- package/es/api/APIFactory.js.flow +26 -0
- package/es/api/APIFactory.js.map +1 -1
- package/es/api/Annotations.js +180 -27
- package/es/api/Annotations.js.flow +150 -14
- package/es/api/Annotations.js.map +1 -1
- package/es/api/Comments.js +2 -2
- package/es/api/Comments.js.flow +5 -4
- package/es/api/Comments.js.map +1 -1
- package/es/api/Feed.js +578 -69
- package/es/api/Feed.js.flow +677 -17
- package/es/api/Feed.js.map +1 -1
- package/es/api/FileCollaborators.js +29 -0
- package/es/api/FileCollaborators.js.flow +30 -0
- package/es/api/FileCollaborators.js.map +1 -1
- package/es/api/ThreadedComments.js +64 -27
- package/es/api/ThreadedComments.js.flow +54 -29
- package/es/api/ThreadedComments.js.map +1 -1
- package/es/api/fixtures.js +381 -0
- package/es/api/fixtures.js.flow +401 -0
- package/es/api/fixtures.js.map +1 -0
- package/es/api/messages.js +4 -0
- package/es/api/messages.js.flow +5 -0
- package/es/api/messages.js.map +1 -1
- package/es/api/utils.js +33 -0
- package/es/api/utils.js.flow +30 -0
- package/es/api/utils.js.map +1 -0
- package/es/common/types/annotations.js.flow +18 -10
- package/es/common/types/feed.js +1 -1
- package/es/common/types/feed.js.flow +40 -4
- package/es/common/types/feed.js.map +1 -1
- package/es/components/accessible-svg/AccessibleSVG.stories.js +20 -0
- package/es/components/accessible-svg/AccessibleSVG.stories.js.map +1 -0
- package/es/components/badge/Badge.stories.js +1 -13
- package/es/components/badge/Badge.stories.js.map +1 -1
- package/es/components/badge/BetaBadge.stories.js +10 -0
- package/es/components/badge/BetaBadge.stories.js.map +1 -0
- package/es/components/badge/TrialBadge.stories.js +10 -0
- package/es/components/badge/TrialBadge.stories.js.map +1 -0
- package/es/components/badge/UpgradeBadge.stories.js +10 -0
- package/es/components/badge/UpgradeBadge.stories.js.map +1 -0
- package/es/components/breadcrumb/Breadcrumb.js +48 -35
- package/es/components/breadcrumb/Breadcrumb.js.flow +68 -42
- package/es/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/es/components/breadcrumb/EllipsisCrumb.js +5 -3
- package/es/components/breadcrumb/EllipsisCrumb.js.flow +10 -6
- package/es/components/breadcrumb/EllipsisCrumb.js.map +1 -1
- package/es/components/count-badge/CountBadge.stories.js +1 -1
- package/es/components/count-badge/CountBadge.stories.js.map +1 -1
- package/es/components/draggable-list/DraggableList.stories.js +119 -5
- package/es/components/draggable-list/DraggableList.stories.js.map +1 -1
- package/es/components/dropdown-menu/DropdownMenu.js +9 -0
- package/es/components/dropdown-menu/DropdownMenu.js.flow +11 -0
- package/es/components/dropdown-menu/DropdownMenu.js.map +1 -1
- package/es/components/dropdown-menu/DropdownMenu.scss +3 -3
- package/es/components/infinite-scroll/InfiniteScroll.js +4 -2
- package/es/components/infinite-scroll/InfiniteScroll.js.map +1 -1
- package/es/components/modal/Modal.scss +5 -1
- package/es/components/search-form/SearchForm.js +1 -1
- package/es/components/search-form/SearchForm.js.flow +1 -1
- package/es/components/search-form/SearchForm.js.map +1 -1
- package/es/components/table/makeSelectable.js +304 -97
- package/es/components/table/makeSelectable.js.flow +299 -98
- package/es/components/table/makeSelectable.js.map +1 -1
- package/es/components/tooltip/Tooltip.js +3 -2
- package/es/components/tooltip/Tooltip.js.map +1 -1
- package/es/constants.js +11 -0
- package/es/constants.js.flow +11 -0
- package/es/constants.js.map +1 -1
- package/es/elements/common/annotator-context/index.js +1 -0
- package/es/elements/common/annotator-context/index.js.flow +4 -0
- package/es/elements/common/annotator-context/index.js.map +1 -1
- package/es/elements/common/annotator-context/types.js +12 -0
- package/es/elements/common/annotator-context/types.js.flow +77 -35
- package/es/elements/common/annotator-context/types.js.map +1 -1
- package/es/elements/common/annotator-context/useAnnotatorEvents.js +205 -0
- package/es/elements/common/annotator-context/useAnnotatorEvents.js.flow +52 -0
- package/es/elements/common/annotator-context/useAnnotatorEvents.js.map +1 -0
- package/es/elements/common/annotator-context/withAnnotations.js +224 -5
- package/es/elements/common/annotator-context/withAnnotations.js.flow +73 -36
- package/es/elements/common/annotator-context/withAnnotations.js.map +1 -1
- package/es/elements/common/annotator-context/withAnnotatorContext.js +12 -4
- package/es/elements/common/annotator-context/withAnnotatorContext.js.flow +29 -9
- package/es/elements/common/annotator-context/withAnnotatorContext.js.map +1 -1
- package/es/elements/common/current-user/index.js +3 -0
- package/es/elements/common/current-user/index.js.flow +8 -0
- package/es/elements/common/current-user/index.js.map +1 -0
- package/es/elements/common/current-user/withCurrentUser.js +139 -0
- package/es/elements/common/current-user/withCurrentUser.js.flow +40 -0
- package/es/elements/common/current-user/withCurrentUser.js.map +1 -0
- package/es/elements/common/flowTypes.js.flow +22 -4
- package/es/elements/common/flowTypes.js.map +1 -1
- package/es/elements/common/interactionTargets.js +2 -0
- package/es/elements/common/interactionTargets.js.flow +2 -0
- package/es/elements/common/interactionTargets.js.map +1 -1
- package/es/elements/common/logger/Logger.js +1 -1
- package/es/elements/common/logger/Logger.js.flow +1 -1
- package/es/elements/common/logger/Logger.js.map +1 -1
- package/es/elements/common/messages.js +4 -0
- package/es/elements/common/messages.js.flow +5 -0
- package/es/elements/common/messages.js.map +1 -1
- package/es/elements/content-explorer/DeleteConfirmationDialog.js +2 -1
- package/es/elements/content-explorer/DeleteConfirmationDialog.js.flow +3 -1
- package/es/elements/content-explorer/DeleteConfirmationDialog.js.map +1 -1
- package/es/elements/content-explorer/DeleteConfirmationDialog.scss +5 -0
- package/es/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js +58 -0
- package/es/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js.flow +60 -0
- package/es/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js.map +1 -0
- package/es/elements/content-sidebar/ActivitySidebar.js +323 -197
- package/es/elements/content-sidebar/ActivitySidebar.js.flow +381 -154
- package/es/elements/content-sidebar/ActivitySidebar.js.map +1 -1
- package/es/elements/content-sidebar/ActivitySidebarFilter.js +52 -0
- package/es/elements/content-sidebar/ActivitySidebarFilter.js.flow +59 -0
- package/es/elements/content-sidebar/ActivitySidebarFilter.js.map +1 -0
- package/es/elements/content-sidebar/ActivitySidebarFilter.scss +4 -0
- package/es/elements/content-sidebar/DetailsSidebar.js +50 -25
- package/es/elements/content-sidebar/DetailsSidebar.js.flow +32 -4
- package/es/elements/content-sidebar/DetailsSidebar.js.map +1 -1
- package/es/elements/content-sidebar/Sidebar.js +4 -1
- package/es/elements/content-sidebar/Sidebar.js.flow +6 -1
- package/es/elements/content-sidebar/Sidebar.js.map +1 -1
- package/es/elements/content-sidebar/SidebarContentInsights.js +45 -0
- package/es/elements/content-sidebar/SidebarContentInsights.js.map +1 -0
- package/es/elements/content-sidebar/SidebarContentInsights.scss +6 -0
- package/es/elements/content-sidebar/SidebarPanels.js +2 -0
- package/es/elements/content-sidebar/SidebarPanels.js.flow +4 -0
- package/es/elements/content-sidebar/SidebarPanels.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js +91 -10
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js.flow +122 -24
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js +27 -15
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js.flow +59 -18
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js +101 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js.flow +126 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.scss +17 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js +69 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js.flow +85 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.scss +16 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js +62 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js.flow +59 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.scss +22 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js +2 -2
- package/es/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js.flow +2 -2
- package/es/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/activity-feed/fixtures.js +55 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/fixtures.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/messages.js +16 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/messages.js.flow +20 -0
- package/es/elements/content-sidebar/activity-feed/activity-feed/messages.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js +121 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js.flow +117 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.scss +7 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js +75 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js.flow +105 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.scss +5 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js +77 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js.flow +86 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.scss +3 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/errors.js +11 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/errors.js.flow +26 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/errors.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/index.js +2 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/index.js.flow +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/index.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/messages.js +17 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/messages.js.flow +21 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/messages.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js +180 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js.flow +203 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js +124 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js.flow +121 -0
- package/es/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js +19 -5
- package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js.flow +24 -4
- package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js +25 -4
- package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js.flow +36 -2
- package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/annotations/messages.js +8 -0
- package/es/elements/content-sidebar/activity-feed/annotations/messages.js.flow +10 -0
- package/es/elements/content-sidebar/activity-feed/annotations/messages.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/comment/Comment.js +61 -28
- package/es/elements/content-sidebar/activity-feed/comment/Comment.js.flow +54 -10
- package/es/elements/content-sidebar/activity-feed/comment/Comment.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/comment/messages.js +8 -0
- package/es/elements/content-sidebar/activity-feed/comment/messages.js.flow +10 -0
- package/es/elements/content-sidebar/activity-feed/comment/messages.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/comment-form/CommentForm.js +4 -2
- package/es/elements/content-sidebar/activity-feed/comment-form/CommentForm.js.flow +3 -1
- package/es/elements/content-sidebar/activity-feed/comment-form/CommentForm.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js +16 -5
- package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js.flow +34 -4
- package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.scss +40 -3
- package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js +49 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js.flow +42 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js +21 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js.flow +24 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/messages.js +12 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/messages.js.flow +15 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-message/messages.js.map +1 -1
- package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js +24 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js.flow +30 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.scss +6 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/index.js +2 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/index.js.flow +2 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/index.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/messages.js +9 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/messages.js.flow +13 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-status/messages.js.map +1 -0
- package/es/elements/content-sidebar/activity-feed/common/activity-timestamp/ActivityTimestamp.scss +1 -1
- package/es/elements/content-sidebar/fixtures.js +181 -0
- package/es/elements/content-sidebar/fixtures.js.flow +185 -0
- package/es/elements/content-sidebar/fixtures.js.map +1 -0
- package/es/elements/content-sidebar/flowTypes.js.flow +9 -25
- package/es/elements/content-sidebar/messages.js +8 -0
- package/es/elements/content-sidebar/messages.js.flow +10 -0
- package/es/elements/content-sidebar/messages.js.map +1 -1
- package/es/elements/content-sidebar/withErrorHandling.js.flow +1 -1
- package/es/elements/content-sidebar/withErrorHandling.js.map +1 -1
- package/es/elements/content-sidebar/withSidebarAnnotations.js +215 -30
- package/es/elements/content-sidebar/withSidebarAnnotations.js.flow +162 -11
- package/es/elements/content-sidebar/withSidebarAnnotations.js.map +1 -1
- package/es/elements/content-uploader/OverallUploadsProgressBar.js +10 -8
- package/es/elements/content-uploader/OverallUploadsProgressBar.js.flow +11 -12
- package/es/elements/content-uploader/OverallUploadsProgressBar.js.map +1 -1
- package/es/features/classification/Classification.scss +1 -1
- package/es/features/classification/security-controls/SecurityControlsItem.scss +1 -0
- package/es/features/classification/security-controls/messages.js +8 -0
- package/es/features/classification/security-controls/messages.js.flow +10 -0
- package/es/features/classification/security-controls/messages.js.map +1 -1
- package/es/features/classification/security-controls/utils.js +4 -7
- package/es/features/classification/security-controls/utils.js.flow +8 -12
- package/es/features/classification/security-controls/utils.js.map +1 -1
- package/es/features/content-explorer/content-explorer/ContentExplorer.js +6 -1
- package/es/features/content-explorer/content-explorer/ContentExplorer.js.flow +4 -0
- package/es/features/content-explorer/content-explorer/ContentExplorer.js.map +1 -1
- package/es/features/content-explorer/content-explorer/ContentExplorer.scss +4 -0
- package/es/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js +15 -9
- package/es/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js.flow +14 -11
- package/es/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js.map +1 -1
- package/es/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js +4 -1
- package/es/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js.flow +4 -1
- package/es/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js.map +1 -1
- package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +6 -3
- package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.flow +5 -1
- package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.map +1 -1
- package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +6 -1
- package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.flow +5 -1
- package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.map +1 -1
- package/es/features/content-explorer/prop-types.js +7 -1
- package/es/features/content-explorer/prop-types.js.flow +8 -0
- package/es/features/content-explorer/prop-types.js.map +1 -1
- package/es/features/content-insights/CompactCount.js +24 -0
- package/es/features/content-insights/CompactCount.js.map +1 -0
- package/es/features/content-insights/ContentAnalyticsErrorState.js +35 -0
- package/es/features/content-insights/ContentAnalyticsErrorState.js.map +1 -0
- package/es/features/content-insights/ContentAnalyticsErrorState.scss +17 -0
- package/es/features/content-insights/ContentInsightsSummary.js +42 -0
- package/es/features/content-insights/ContentInsightsSummary.js.map +1 -0
- package/es/features/content-insights/ContentInsightsSummary.scss +12 -0
- package/es/features/content-insights/ContentInsightsSummaryGhostState.js +19 -0
- package/es/features/content-insights/ContentInsightsSummaryGhostState.js.map +1 -0
- package/es/features/content-insights/ContentInsightsSummaryGhostState.scss +9 -0
- package/es/features/content-insights/GraphCardGhostState.js +25 -0
- package/es/features/content-insights/GraphCardGhostState.js.map +1 -0
- package/es/features/content-insights/GraphCardGhostState.scss +18 -0
- package/es/features/content-insights/GraphCardPreviewsSummary.js +30 -0
- package/es/features/content-insights/GraphCardPreviewsSummary.js.map +1 -0
- package/es/features/content-insights/GraphCardPreviewsSummary.scss +10 -0
- package/es/features/content-insights/GraphGhostState.js +21 -0
- package/es/features/content-insights/GraphGhostState.js.map +1 -0
- package/es/features/content-insights/GraphGhostState.scss +11 -0
- package/es/features/content-insights/HeaderWithCount.js +23 -0
- package/es/features/content-insights/HeaderWithCount.js.map +1 -0
- package/es/features/content-insights/HeaderWithCount.scss +10 -0
- package/es/features/content-insights/MetricSummary.js +85 -0
- package/es/features/content-insights/MetricSummary.js.map +1 -0
- package/es/features/content-insights/MetricSummary.scss +14 -0
- package/es/features/content-insights/OpenContentInsightsButton.js +16 -0
- package/es/features/content-insights/OpenContentInsightsButton.js.map +1 -0
- package/es/features/content-insights/TrendPill.js +61 -0
- package/es/features/content-insights/TrendPill.js.map +1 -0
- package/es/features/content-insights/TrendPill.scss +33 -0
- package/es/features/content-insights/_mixins.scss +7 -0
- package/es/features/content-insights/_variables.scss +4 -0
- package/es/features/content-insights/charts/bar/Bar.js +57 -0
- package/es/features/content-insights/charts/bar/Bar.js.map +1 -0
- package/es/features/content-insights/charts/bar/Bar.scss +27 -0
- package/es/features/content-insights/charts/bar/BarChart.js +70 -0
- package/es/features/content-insights/charts/bar/BarChart.js.map +1 -0
- package/es/features/content-insights/charts/bar/BarChart.scss +56 -0
- package/es/features/content-insights/charts/types.js +2 -0
- package/es/{common/types/threadedComments.js.map → features/content-insights/charts/types.js.map} +1 -1
- package/es/features/content-insights/constants.js +54 -0
- package/es/features/content-insights/constants.js.map +1 -0
- package/es/features/content-insights/messages.js +69 -0
- package/es/features/content-insights/messages.js.map +1 -0
- package/es/features/content-insights/numberUtils.js +10 -0
- package/es/features/content-insights/numberUtils.js.map +1 -0
- package/es/features/content-insights/types.js +2 -0
- package/es/features/content-insights/types.js.map +1 -0
- package/es/features/item-details/ItemProperties.scss +1 -1
- package/es/features/shared-link-settings-modal/SharedLinkSettingsModal.js +5 -3
- package/es/features/shared-link-settings-modal/SharedLinkSettingsModal.js.flow +4 -2
- package/es/features/shared-link-settings-modal/SharedLinkSettingsModal.js.map +1 -1
- package/es/features/unified-share-modal/ContactRestrictionNotice.js +34 -8
- package/es/features/unified-share-modal/ContactRestrictionNotice.js.flow +36 -6
- package/es/features/unified-share-modal/ContactRestrictionNotice.js.map +1 -1
- package/es/features/unified-share-modal/EmailForm.js +59 -47
- package/es/features/unified-share-modal/EmailForm.js.flow +31 -13
- package/es/features/unified-share-modal/EmailForm.js.map +1 -1
- package/es/features/unified-share-modal/UnifiedShareForm.js +112 -103
- package/es/features/unified-share-modal/UnifiedShareForm.js.flow +25 -8
- package/es/features/unified-share-modal/UnifiedShareForm.js.map +1 -1
- package/es/features/unified-share-modal/UnifiedShareModal.js +1 -0
- package/es/features/unified-share-modal/UnifiedShareModal.js.flow +1 -0
- package/es/features/unified-share-modal/UnifiedShareModal.js.map +1 -1
- package/es/features/unified-share-modal/flowTypes.js.flow +4 -2
- package/es/features/unified-share-modal/flowTypes.js.map +1 -1
- package/es/features/unified-share-modal/messages.js +12 -8
- package/es/features/unified-share-modal/messages.js.flow +14 -8
- package/es/features/unified-share-modal/messages.js.map +1 -1
- package/es/features/unified-share-modal/utils/hasRestrictedContacts.js +9 -4
- package/es/features/unified-share-modal/utils/hasRestrictedContacts.js.flow +10 -3
- package/es/features/unified-share-modal/utils/hasRestrictedContacts.js.map +1 -1
- package/es/features/unified-share-modal/utils/isRestrictedContact.js +15 -0
- package/es/features/unified-share-modal/utils/isRestrictedContact.js.flow +21 -0
- package/es/features/unified-share-modal/utils/isRestrictedContact.js.map +1 -0
- package/es/icon/fill/Alert16.js +3 -2
- package/es/icon/fill/Alert16.js.flow +3 -2
- package/es/icon/fill/Alert16.js.map +1 -1
- package/es/icon/fill/AlertBadge16.js +31 -0
- package/es/icon/fill/AlertBadge16.js.flow +29 -0
- package/es/icon/fill/AlertBadge16.js.map +1 -0
- package/es/icon/fill/AlertBadge16.stories.js +13 -0
- package/es/icon/fill/AlertBadge16.stories.js.map +1 -0
- package/es/icon/fill/Info16.js +2 -2
- package/es/icon/fill/Info16.js.flow +1 -1
- package/es/icon/fill/Info16.js.map +1 -1
- package/es/icon/fill/InfoBadge16.js +30 -0
- package/es/icon/fill/InfoBadge16.js.flow +28 -0
- package/es/icon/fill/InfoBadge16.js.map +1 -0
- package/es/icon/fill/InfoBadge16.stories.js +13 -0
- package/es/icon/fill/InfoBadge16.stories.js.map +1 -0
- package/es/icon/fill/UserSettings16.js +38 -0
- package/es/icon/fill/UserSettings16.js.flow +38 -0
- package/es/icon/fill/UserSettings16.js.map +1 -0
- package/es/icon/fill/UserSettings16.stories.js +13 -0
- package/es/icon/fill/UserSettings16.stories.js.map +1 -0
- package/es/icon/line/AlertBubble16.js +31 -0
- package/es/icon/line/AlertBubble16.js.flow +29 -0
- package/es/icon/line/AlertBubble16.js.map +1 -0
- package/es/icon/line/AlertBubble16.stories.js +13 -0
- package/es/icon/line/AlertBubble16.stories.js.map +1 -0
- package/es/icon/line/AvatarXBadge16.js +45 -0
- package/es/icon/line/AvatarXBadge16.js.flow +39 -0
- package/es/icon/line/AvatarXBadge16.js.map +1 -0
- package/es/icon/line/AvatarXBadge16.stories.js +13 -0
- package/es/icon/line/AvatarXBadge16.stories.js.map +1 -0
- package/es/icon/line/CoEdit16.js +32 -0
- package/es/icon/line/CoEdit16.js.flow +30 -0
- package/es/icon/line/CoEdit16.js.map +1 -0
- package/es/icon/line/CoEdit16.stories.js +13 -0
- package/es/icon/line/CoEdit16.stories.js.map +1 -0
- package/es/icon/line/Collaborations16.js +32 -0
- package/es/icon/line/Collaborations16.js.flow +30 -0
- package/es/icon/line/Collaborations16.js.map +1 -0
- package/es/icon/line/Collaborations16.stories.js +13 -0
- package/es/icon/line/Collaborations16.stories.js.map +1 -0
- package/es/icon/line/CommentBubble16.js +35 -0
- package/es/icon/line/CommentBubble16.js.flow +34 -0
- package/es/icon/line/CommentBubble16.js.map +1 -0
- package/es/icon/line/CommentBubble16.stories.js +13 -0
- package/es/icon/line/CommentBubble16.stories.js.map +1 -0
- package/es/src/components/accessible-svg/AccessibleSVG.stories.d.ts +7 -0
- package/es/src/components/badge/Badge.stories.d.ts +0 -3
- package/es/src/components/badge/BetaBadge.stories.d.ts +6 -0
- package/es/src/components/badge/TrialBadge.stories.d.ts +6 -0
- package/es/src/components/badge/UpgradeBadge.stories.d.ts +6 -0
- package/es/src/components/draggable-list/DraggableList.stories.d.ts +3 -3
- package/es/src/components/infinite-scroll/InfiniteScroll.d.ts +1 -1
- package/es/src/components/tooltip/Tooltip.d.ts +2 -0
- package/es/src/elements/common/annotator-context/__tests__/useAnnotatorEvents.test.d.ts +1 -0
- package/es/src/elements/common/annotator-context/index.d.ts +1 -0
- package/es/src/elements/common/annotator-context/types.d.ts +28 -6
- package/es/src/elements/common/annotator-context/useAnnotatorEvents.d.ts +52 -0
- package/es/src/elements/common/annotator-context/withAnnotations.d.ts +11 -2
- package/es/src/elements/common/annotator-context/withAnnotatorContext.d.ts +6 -2
- package/es/src/elements/common/current-user/__tests__/withCurrentUser.test.d.ts +1 -0
- package/es/src/elements/common/current-user/index.d.ts +2 -0
- package/es/src/elements/common/current-user/withCurrentUser.d.ts +20 -0
- package/es/src/elements/content-sidebar/SidebarContentInsights.d.ts +15 -0
- package/es/src/elements/content-sidebar/__tests__/SidebarContentInsights.test.d.ts +1 -0
- package/es/src/elements/content-sidebar/activity-feed/activity-feed/fixtures.d.ts +55 -0
- package/es/src/features/content-insights/CompactCount.d.ts +15 -0
- package/es/src/features/content-insights/ContentAnalyticsErrorState.d.ts +7 -0
- package/es/src/features/content-insights/ContentInsightsSummary.d.ts +12 -0
- package/es/src/features/content-insights/ContentInsightsSummaryGhostState.d.ts +3 -0
- package/es/src/features/content-insights/GraphCardGhostState.d.ts +3 -0
- package/es/src/features/content-insights/GraphCardPreviewsSummary.d.ts +16 -0
- package/es/src/features/content-insights/GraphGhostState.d.ts +3 -0
- package/es/src/features/content-insights/HeaderWithCount.d.ts +7 -0
- package/es/src/features/content-insights/MetricSummary.d.ts +18 -0
- package/es/src/features/content-insights/OpenContentInsightsButton.d.ts +5 -0
- package/es/src/features/content-insights/TrendPill.d.ts +15 -0
- package/es/src/features/content-insights/__tests__/CompactCount.test.d.ts +1 -0
- package/es/src/features/content-insights/__tests__/ContentAnalyticsErrorState.test.d.ts +1 -0
- package/es/src/features/content-insights/__tests__/ContentInsightsSummary.test.d.ts +1 -0
- package/es/src/features/content-insights/__tests__/GraphCardPreviewsSummary.test.d.ts +1 -0
- package/es/src/features/content-insights/__tests__/HeaderWithCount.test.d.ts +1 -0
- package/es/src/features/content-insights/__tests__/MetricSummary.test.d.ts +1 -0
- package/es/src/features/content-insights/charts/bar/Bar.d.ts +11 -0
- package/es/src/features/content-insights/charts/bar/BarChart.d.ts +19 -0
- package/es/src/features/content-insights/charts/bar/__tests__/Bar.test.d.ts +1 -0
- package/es/src/features/content-insights/charts/bar/__tests__/BarChart.test.d.ts +1 -0
- package/es/src/features/content-insights/charts/types.d.ts +2 -0
- package/es/src/features/content-insights/constants.d.ts +27 -0
- package/es/src/features/content-insights/messages.d.ts +83 -0
- package/es/src/features/content-insights/numberUtils.d.ts +3 -0
- package/es/src/features/content-insights/types.d.ts +24 -0
- package/es/src/icon/fill/AlertBadge16.d.ts +13 -0
- package/es/src/icon/fill/AlertBadge16.stories.d.ts +9 -0
- package/es/src/icon/fill/InfoBadge16.d.ts +13 -0
- package/es/src/icon/fill/InfoBadge16.stories.d.ts +9 -0
- package/es/src/icon/fill/UserSettings16.d.ts +13 -0
- package/es/src/icon/fill/UserSettings16.stories.d.ts +9 -0
- package/es/src/icon/line/AlertBubble16.d.ts +13 -0
- package/es/src/icon/line/AlertBubble16.stories.d.ts +9 -0
- package/es/src/icon/line/AvatarXBadge16.d.ts +13 -0
- package/es/src/icon/line/AvatarXBadge16.stories.d.ts +9 -0
- package/es/src/icon/line/CoEdit16.d.ts +13 -0
- package/es/src/icon/line/CoEdit16.stories.d.ts +9 -0
- package/es/src/icon/line/Collaborations16.d.ts +13 -0
- package/es/src/icon/line/Collaborations16.stories.d.ts +9 -0
- package/es/src/icon/line/CommentBubble16.d.ts +13 -0
- package/es/src/icon/line/CommentBubble16.stories.d.ts +9 -0
- package/es/src/styles/variables.d.ts +3 -1
- package/es/styles/constants/_layout.scss +1 -1
- package/es/styles/constants/_media-queries.scss +2 -0
- package/es/styles/variables.js +6 -2
- package/es/styles/variables.js.flow +4 -2
- package/es/styles/variables.js.map +1 -1
- package/es/utils/error.js +5 -1
- package/es/utils/error.js.flow +5 -1
- package/es/utils/error.js.map +1 -1
- package/es/utils/fields.js +8 -3
- package/es/utils/fields.js.flow +21 -3
- package/es/utils/fields.js.map +1 -1
- package/es/utils/sorter.js.flow +2 -2
- package/es/utils/sorter.js.map +1 -1
- package/i18n/bn-IN.js +45 -7
- package/i18n/bn-IN.properties +83 -7
- package/i18n/da-DK.js +45 -7
- package/i18n/da-DK.properties +83 -7
- package/i18n/de-DE.js +45 -7
- package/i18n/de-DE.properties +83 -7
- package/i18n/en-AU.js +45 -7
- package/i18n/en-AU.properties +83 -7
- package/i18n/en-CA.js +45 -7
- package/i18n/en-CA.properties +83 -7
- package/i18n/en-GB.js +45 -7
- package/i18n/en-GB.properties +83 -7
- package/i18n/en-US.js +45 -7
- package/i18n/en-US.properties +83 -7
- package/i18n/en-x-pseudo.js +891 -854
- package/i18n/en-x-pseudo.properties +941 -843
- package/i18n/es-419.js +45 -7
- package/i18n/es-419.properties +83 -7
- package/i18n/es-ES.js +45 -7
- package/i18n/es-ES.properties +83 -7
- package/i18n/fi-FI.js +45 -7
- package/i18n/fi-FI.properties +83 -7
- package/i18n/fr-CA.js +45 -7
- package/i18n/fr-CA.properties +83 -7
- package/i18n/fr-FR.js +45 -7
- package/i18n/fr-FR.properties +83 -7
- package/i18n/hi-IN.js +45 -7
- package/i18n/hi-IN.properties +83 -7
- package/i18n/it-IT.js +45 -7
- package/i18n/it-IT.properties +83 -7
- package/i18n/ja-JP.js +47 -9
- package/i18n/ja-JP.properties +85 -9
- package/i18n/ko-KR.js +45 -7
- package/i18n/ko-KR.properties +83 -7
- package/i18n/nb-NO.js +45 -7
- package/i18n/nb-NO.properties +83 -7
- package/i18n/nl-NL.js +45 -7
- package/i18n/nl-NL.properties +83 -7
- package/i18n/pl-PL.js +45 -7
- package/i18n/pl-PL.properties +83 -7
- package/i18n/pt-BR.js +45 -7
- package/i18n/pt-BR.properties +83 -7
- package/i18n/ru-RU.js +45 -7
- package/i18n/ru-RU.properties +83 -7
- package/i18n/sv-SE.js +45 -7
- package/i18n/sv-SE.properties +83 -7
- package/i18n/tr-TR.js +45 -7
- package/i18n/tr-TR.properties +83 -7
- package/i18n/zh-CN.js +45 -7
- package/i18n/zh-CN.properties +83 -7
- package/i18n/zh-TW.js +45 -7
- package/i18n/zh-TW.properties +83 -7
- package/package.json +7 -8
- package/src/__mocks__/react-intl.js +4 -0
- package/src/api/APIFactory.js +26 -0
- package/src/api/Annotations.js +150 -14
- package/src/api/Comments.js +5 -4
- package/src/api/Feed.js +677 -17
- package/src/api/FileCollaborators.js +30 -0
- package/src/api/ThreadedComments.js +54 -29
- package/src/api/__tests__/Annotations.test.js +217 -11
- package/src/api/__tests__/Feed.test.js +699 -86
- package/src/api/__tests__/FileCollaborators.test.js +41 -0
- package/src/api/__tests__/ThreadedComments.test.js +47 -10
- package/src/api/__tests__/utils.test.js +11 -0
- package/src/api/fixtures.js +401 -0
- package/src/api/messages.js +5 -0
- package/src/api/utils.js +30 -0
- package/src/common/types/annotations.js +18 -10
- package/src/common/types/feed.js +40 -4
- package/src/components/accessible-svg/AccessibleSVG.stories.tsx +18 -0
- package/src/components/badge/Badge.stories.md +1 -7
- package/src/components/badge/Badge.stories.tsx +1 -10
- package/src/components/badge/BetaBadge.stories.tsx +9 -0
- package/src/components/badge/TrialBadge.stories.tsx +9 -0
- package/src/components/badge/UpgradeBadge.stories.tsx +9 -0
- package/src/components/breadcrumb/Breadcrumb.js +68 -42
- package/src/components/breadcrumb/EllipsisCrumb.js +10 -6
- package/src/components/count-badge/CountBadge.stories.tsx +1 -1
- package/src/components/draggable-list/DraggableList.stories.tsx +72 -5
- package/src/components/dropdown-menu/DropdownMenu.js +11 -0
- package/src/components/dropdown-menu/DropdownMenu.scss +3 -3
- package/src/components/dropdown-menu/__tests__/DropdownMenu.test.js +38 -0
- package/src/components/grid-view/__tests__/__snapshots__/GridViewSlider.test.js.snap +1 -0
- package/src/components/infinite-scroll/InfiniteScroll.md +1 -1
- package/src/components/infinite-scroll/InfiniteScroll.tsx +5 -2
- package/src/components/infinite-scroll/__tests__/InfiniteScroll.test.tsx +115 -127
- package/src/components/modal/Modal.scss +5 -1
- package/src/components/search-form/SearchForm.js +1 -1
- package/src/components/search-form/__tests__/SearchForm.test.js +25 -6
- package/src/components/sidebar-toggle-button/__tests__/__snapshots__/SidebarToggleButton.test.js.snap +4 -0
- package/src/components/table/__tests__/makeSelectable.test.js +654 -144
- package/src/components/table/makeSelectable.js +299 -98
- package/src/components/time/__tests__/ReadableTime.test.js +0 -1
- package/src/components/tooltip/Tooltip.tsx +5 -2
- package/src/components/tooltip/__tests__/Tooltip.test.tsx +10 -0
- package/src/components/tooltip/__tests__/__snapshots__/Tooltip.test.tsx.snap +1 -1
- package/src/constants.js +11 -0
- package/src/elements/common/annotator-context/__tests__/useAnnotatorEvents.test.tsx +509 -0
- package/src/elements/common/annotator-context/__tests__/withAnnotations.test.tsx +275 -12
- package/src/elements/common/annotator-context/__tests__/withAnnotatorContext.test.tsx +18 -6
- package/src/elements/common/annotator-context/index.js.flow +4 -0
- package/src/elements/common/annotator-context/index.ts +1 -0
- package/src/elements/common/annotator-context/types.js.flow +77 -35
- package/src/elements/common/annotator-context/types.ts +28 -6
- package/src/elements/common/annotator-context/useAnnotatorEvents.js.flow +52 -0
- package/src/elements/common/annotator-context/useAnnotatorEvents.ts +190 -0
- package/src/elements/common/annotator-context/withAnnotations.js.flow +73 -36
- package/src/elements/common/annotator-context/withAnnotations.tsx +170 -7
- package/src/elements/common/annotator-context/withAnnotatorContext.js.flow +29 -9
- package/src/elements/common/annotator-context/withAnnotatorContext.tsx +28 -5
- package/src/elements/common/current-user/__tests__/withCurrentUser.test.tsx +108 -0
- package/src/elements/common/current-user/index.js.flow +8 -0
- package/src/elements/common/current-user/index.ts +2 -0
- package/src/elements/common/current-user/withCurrentUser.js.flow +40 -0
- package/src/elements/common/current-user/withCurrentUser.tsx +139 -0
- package/src/elements/common/flowTypes.js +22 -4
- package/src/elements/common/interactionTargets.js +2 -0
- package/src/elements/common/logger/Logger.js +1 -1
- package/src/elements/common/messages.js +5 -0
- package/src/elements/content-explorer/DeleteConfirmationDialog.js +3 -1
- package/src/elements/content-explorer/DeleteConfirmationDialog.scss +5 -0
- package/src/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js +60 -0
- package/src/elements/content-explorer/stories/DeleteConfirmationDialog.stories.md +1 -0
- package/src/elements/content-sidebar/ActivitySidebar.js +381 -154
- package/src/elements/content-sidebar/ActivitySidebarFilter.js +59 -0
- package/src/elements/content-sidebar/ActivitySidebarFilter.scss +4 -0
- package/src/elements/content-sidebar/DetailsSidebar.js +32 -4
- package/src/elements/content-sidebar/Sidebar.js +6 -1
- package/src/elements/content-sidebar/SidebarContentInsights.scss +6 -0
- package/src/elements/content-sidebar/SidebarContentInsights.tsx +57 -0
- package/src/elements/content-sidebar/SidebarPanels.js +4 -0
- package/src/elements/content-sidebar/__tests__/ActivitySidebar.test.js +533 -243
- package/src/elements/content-sidebar/__tests__/ActivitySidebarFilter.test.js +54 -0
- package/src/elements/content-sidebar/__tests__/DetailsSidebar.test.js +45 -0
- package/src/elements/content-sidebar/__tests__/Sidebar.test.js +1 -1
- package/src/elements/content-sidebar/__tests__/SidebarContentInsights.test.tsx +56 -0
- package/src/elements/content-sidebar/__tests__/SidebarPanels.test.js +4 -3
- package/src/elements/content-sidebar/__tests__/__snapshots__/ActivitySidebar.test.js.snap +29 -15
- package/src/elements/content-sidebar/__tests__/__snapshots__/SidebarFileProperties.test.js.snap +1 -0
- package/src/elements/content-sidebar/__tests__/withSidebarAnnotations.test.js +325 -32
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js +122 -24
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js +59 -18
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js +126 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.scss +17 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js +85 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.scss +16 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js +59 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.scss +22 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActiveState.test.js +19 -5
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityFeed.test.js +22 -16
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityThread.test.js +80 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityThreadReplies.test.js +24 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityThreadRepliesForm.test.js +47 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/__snapshots__/ActiveState.test.js.snap +74 -43
- package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/activityFeedUtils.test.js +8 -8
- package/src/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js +2 -2
- package/src/elements/content-sidebar/activity-feed/activity-feed/fixtures.ts +56 -0
- package/src/elements/content-sidebar/activity-feed/activity-feed/messages.js +20 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js +117 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.scss +7 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js +105 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.scss +5 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js +86 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.scss +3 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/AnnotationThread.test.js +28 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/AnnotationThreadContent.test.js +89 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/AnnotationThreadCreate.test.js +103 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/useAnnotationAPI.test.js +202 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/useRepliesAPI.test.js +99 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/errors.js +26 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/index.js +1 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/messages.js +21 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js +203 -0
- package/src/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js +121 -0
- package/src/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js +24 -4
- package/src/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js +36 -2
- package/src/elements/content-sidebar/activity-feed/annotations/__tests__/AnnotationActivity.test.js +14 -10
- package/src/elements/content-sidebar/activity-feed/annotations/__tests__/AnnotationActivityMenu.test.js +35 -1
- package/src/elements/content-sidebar/activity-feed/annotations/messages.js +10 -0
- package/src/elements/content-sidebar/activity-feed/comment/Comment.js +54 -10
- package/src/elements/content-sidebar/activity-feed/comment/__tests__/Comment.test.js +152 -7
- package/src/elements/content-sidebar/activity-feed/comment/__tests__/__snapshots__/Comment.test.js.snap +12 -7
- package/src/elements/content-sidebar/activity-feed/comment/messages.js +10 -0
- package/src/elements/content-sidebar/activity-feed/comment-form/CommentForm.js +3 -1
- package/src/elements/content-sidebar/activity-feed/comment-form/__tests__/CommentForm.test.js +11 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js +34 -4
- package/src/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.scss +40 -3
- package/src/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js +42 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js +24 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-message/__tests__/ActivityMessage.test.js +48 -1
- package/src/elements/content-sidebar/activity-feed/common/activity-message/messages.js +15 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js +30 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.scss +6 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-status/__tests__/ActivityStatus.test.js +19 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-status/index.js +2 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-status/messages.js +13 -0
- package/src/elements/content-sidebar/activity-feed/common/activity-timestamp/ActivityTimestamp.scss +1 -1
- package/src/elements/content-sidebar/activity-feed/task-new/__tests__/Task.test.js +4 -3
- package/src/elements/content-sidebar/activity-feed/task-new/__tests__/__snapshots__/Task.test.js.snap +1 -2
- package/src/elements/content-sidebar/fixtures.js +185 -0
- package/src/elements/content-sidebar/flowTypes.js +9 -25
- package/src/elements/content-sidebar/messages.js +10 -0
- package/src/elements/content-sidebar/withErrorHandling.js +1 -1
- package/src/elements/content-sidebar/withSidebarAnnotations.js +162 -11
- package/src/elements/content-uploader/OverallUploadsProgressBar.js +11 -12
- package/src/features/classification/Classification.scss +1 -1
- package/src/features/classification/security-controls/SecurityControlsItem.scss +1 -0
- package/src/features/classification/security-controls/__tests__/__snapshots__/utils.test.js.snap +18 -16
- package/src/features/classification/security-controls/__tests__/utils.test.js +13 -5
- package/src/features/classification/security-controls/messages.js +10 -0
- package/src/features/classification/security-controls/utils.js +8 -12
- package/src/features/collapsible-sidebar/__tests__/__snapshots__/CollapsibleSidebarLogo.test.js.snap +2 -0
- package/src/features/content-explorer/content-explorer/ContentExplorer.js +4 -0
- package/src/features/content-explorer/content-explorer/ContentExplorer.scss +4 -0
- package/src/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js +14 -11
- package/src/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js +4 -1
- package/src/features/content-explorer/content-explorer/__tests__/ContentExplorerBreadcrumbs.test.js +2 -2
- package/src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +5 -1
- package/src/features/content-explorer/content-explorer-modal/__tests__/__snapshots__/ContentExplorerModal.test.js.snap +1 -0
- package/src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +5 -1
- package/src/features/content-explorer/prop-types.js +8 -0
- package/src/features/content-insights/CompactCount.tsx +23 -0
- package/src/features/content-insights/ContentAnalyticsErrorState.scss +17 -0
- package/src/features/content-insights/ContentAnalyticsErrorState.tsx +44 -0
- package/src/features/content-insights/ContentInsightsSummary.scss +12 -0
- package/src/features/content-insights/ContentInsightsSummary.tsx +45 -0
- package/src/features/content-insights/ContentInsightsSummaryGhostState.scss +9 -0
- package/src/features/content-insights/ContentInsightsSummaryGhostState.tsx +18 -0
- package/src/features/content-insights/GraphCardGhostState.scss +18 -0
- package/src/features/content-insights/GraphCardGhostState.tsx +18 -0
- package/src/features/content-insights/GraphCardPreviewsSummary.scss +10 -0
- package/src/features/content-insights/GraphCardPreviewsSummary.tsx +40 -0
- package/src/features/content-insights/GraphGhostState.scss +11 -0
- package/src/features/content-insights/GraphGhostState.tsx +17 -0
- package/src/features/content-insights/HeaderWithCount.scss +10 -0
- package/src/features/content-insights/HeaderWithCount.tsx +24 -0
- package/src/features/content-insights/MetricSummary.scss +14 -0
- package/src/features/content-insights/MetricSummary.tsx +65 -0
- package/src/features/content-insights/OpenContentInsightsButton.tsx +20 -0
- package/src/features/content-insights/TrendPill.scss +33 -0
- package/src/features/content-insights/TrendPill.tsx +70 -0
- package/src/features/content-insights/__tests__/CompactCount.test.tsx +57 -0
- package/src/features/content-insights/__tests__/ContentAnalyticsErrorState.test.tsx +33 -0
- package/src/features/content-insights/__tests__/ContentInsightsSummary.test.tsx +81 -0
- package/src/features/content-insights/__tests__/GraphCardPreviewsSummary.test.tsx +35 -0
- package/src/features/content-insights/__tests__/HeaderWithCount.test.tsx +26 -0
- package/src/features/content-insights/__tests__/MetricSummary.test.tsx +88 -0
- package/src/features/content-insights/_mixins.scss +7 -0
- package/src/features/content-insights/_variables.scss +4 -0
- package/src/features/content-insights/charts/bar/Bar.scss +27 -0
- package/src/features/content-insights/charts/bar/Bar.tsx +48 -0
- package/src/features/content-insights/charts/bar/BarChart.scss +56 -0
- package/src/features/content-insights/charts/bar/BarChart.tsx +78 -0
- package/src/features/content-insights/charts/bar/__tests__/Bar.test.tsx +74 -0
- package/src/features/content-insights/charts/bar/__tests__/BarChart.test.tsx +110 -0
- package/src/features/content-insights/charts/types.ts +3 -0
- package/src/features/content-insights/constants.ts +60 -0
- package/src/features/content-insights/messages.ts +90 -0
- package/src/features/content-insights/numberUtils.ts +9 -0
- package/src/features/content-insights/types.ts +33 -0
- package/src/features/item-details/ItemProperties.scss +1 -1
- package/src/features/shared-link-settings-modal/SharedLinkSettingsModal.js +4 -2
- package/src/features/shared-link-settings-modal/__tests__/SharedLinkSettingsModal.test.js +22 -3
- package/src/features/shared-link-settings-modal/__tests__/__snapshots__/SharedLinkSettingsModal.test.js.snap +2 -1
- package/src/features/unified-share-modal/ContactRestrictionNotice.js +36 -6
- package/src/features/unified-share-modal/EmailForm.js +31 -13
- package/src/features/unified-share-modal/UnifiedShareForm.js +25 -8
- package/src/features/unified-share-modal/UnifiedShareModal.js +1 -0
- package/src/features/unified-share-modal/__tests__/ContactRestrictionNotice.test.js +55 -6
- package/src/features/unified-share-modal/__tests__/EmailForm.test.js +131 -24
- package/src/features/unified-share-modal/__tests__/UnifiedShareForm.test.js +89 -35
- package/src/features/unified-share-modal/__tests__/__snapshots__/UnifiedShareForm.test.js.snap +16 -0
- package/src/features/unified-share-modal/__tests__/__snapshots__/UnifiedShareModal.test.js.snap +17 -0
- package/src/features/unified-share-modal/flowTypes.js +4 -2
- package/src/features/unified-share-modal/messages.js +14 -8
- package/src/features/unified-share-modal/utils/__tests__/hasRestrictedContacts.test.js +24 -10
- package/src/features/unified-share-modal/utils/__tests__/isRestrictedContact.test.js +33 -0
- package/src/features/unified-share-modal/utils/hasRestrictedContacts.js +10 -3
- package/src/features/unified-share-modal/utils/isRestrictedContact.js +21 -0
- package/src/features/virtualized-table/__tests__/__snapshots__/VirtualizedTable.test.js.snap +1 -0
- package/src/icon/fill/Alert16.js.flow +3 -2
- package/src/icon/fill/Alert16.tsx +3 -2
- package/src/icon/fill/AlertBadge16.js.flow +29 -0
- package/src/icon/fill/AlertBadge16.stories.tsx +13 -0
- package/src/icon/fill/AlertBadge16.tsx +27 -0
- package/src/icon/fill/Info16.js.flow +1 -1
- package/src/icon/fill/Info16.tsx +1 -1
- package/src/icon/fill/InfoBadge16.js.flow +28 -0
- package/src/icon/fill/InfoBadge16.stories.tsx +13 -0
- package/src/icon/fill/InfoBadge16.tsx +26 -0
- package/src/icon/fill/UserSettings16.js.flow +38 -0
- package/src/icon/fill/UserSettings16.stories.tsx +13 -0
- package/src/icon/fill/UserSettings16.tsx +36 -0
- package/src/icon/line/AlertBubble16.js.flow +29 -0
- package/src/icon/line/AlertBubble16.stories.tsx +13 -0
- package/src/icon/line/AlertBubble16.tsx +27 -0
- package/src/icon/line/AvatarXBadge16.js.flow +39 -0
- package/src/icon/line/AvatarXBadge16.stories.tsx +13 -0
- package/src/icon/line/AvatarXBadge16.tsx +37 -0
- package/src/icon/line/CoEdit16.js.flow +30 -0
- package/src/icon/line/CoEdit16.stories.tsx +13 -0
- package/src/icon/line/CoEdit16.tsx +28 -0
- package/src/icon/line/Collaborations16.js.flow +30 -0
- package/src/icon/line/Collaborations16.stories.tsx +13 -0
- package/src/icon/line/Collaborations16.tsx +28 -0
- package/src/icon/line/CommentBubble16.js.flow +34 -0
- package/src/icon/line/CommentBubble16.stories.tsx +13 -0
- package/src/icon/line/CommentBubble16.tsx +32 -0
- package/src/styles/constants/_layout.scss +1 -1
- package/src/styles/constants/_media-queries.scss +2 -0
- package/src/styles/variables.js +4 -2
- package/src/styles/variables.json +4 -2
- package/src/styles/variables.ts +3 -1
- package/src/utils/__tests__/fields.test.js +23 -4
- package/src/utils/__tests__/sorter.test.js +3 -3
- package/src/utils/error.js +5 -1
- package/src/utils/fields.js +21 -3
- package/src/utils/sorter.js +2 -2
- package/es/common/types/threadedComments.js +0 -2
- package/es/common/types/threadedComments.js.flow +0 -9
- package/src/common/types/threadedComments.js +0 -9
package/es/api/Feed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/api/Feed.js"],"names":["uniqueId","noop","getBadItemError","getBadUserError","isUserCorrectableError","commonMessages","messages","sortFeedItems","Base","AnnotationsAPI","CommentsAPI","VersionsAPI","TasksNewAPI","GroupsAPI","TaskCollaboratorsAPI","TaskLinksAPI","AppActivityAPI","ERROR_CODE_CREATE_TASK","ERROR_CODE_UPDATE_TASK","ERROR_CODE_GROUP_EXCEEDS_LIMIT","HTTP_STATUS_CODE_CONFLICT","IS_ERROR_DISPLAYED","TASK_NEW_APPROVED","TASK_NEW_COMPLETED","TASK_NEW_REJECTED","TASK_NEW_NOT_STARTED","TYPED_ID_FEED_PREFIX","TASK_MAX_GROUP_ASSIGNEES","TASK_NEW_INITIAL_STATUS","TASK","Feed","options","file","annotationId","text","permissions","successCallback","errorCallback","id","annotationsAPI","updateFeedItem","message","isPending","updateAnnotation","annotation","isDestroyed","e","code","updateCommentErrorCallback","createFeedError","commentUpdateErrorMessage","feedErrorCallback","successCallBack","deleteAnnotation","deleteFeedItem","bind","error","deleteCommentErrorCallback","taskId","taskCollaboratorId","taskCollaboratorStatus","collaboratorsApi","taskCollaboratorsAPI","push","taskCollaboratorPayload","status","handleError","errorMessage","taskApproveErrorMessage","taskCompleteErrorMessage","taskRejectErrorMessage","taskActionErrorTitle","updateTaskCollaborator","taskCollaborator","taskCollab","updateTaskCollaboratorSuccessCallback","updatedCollaborator","tasksNewAPI","getTask","task","groupInfoPromises","addedAssignees","filter","assignee","item","type","map","groupId","getGroupCount","group","Promise","all","groupCounts","hasAnyGroupCountExceeded","some","groupInfo","total_count","warning","resolve","reject","updateTaskWithDeps","taskData","commentId","commentsAPI","deleteComment","commentDeleteErrorMessage","currentUser","assignees","taskType","dueAt","completionRule","uuid","dueAtString","dueAtDate","Date","toISOString","pendingTask","created_by","target","role","completion_rule","created_at","due_at","description","assigned_to","entries","avatar_url","can_delete","can_update","limit","next_marker","can_create_task_collaborator","can_create_task_link","task_links","task_type","taskPayload","then","createTaskWithDeps","taskWithDepsData","addPendingItem","length","catch","deleteTask","taskDeleteErrorMessage","cachedItems","getCachedItems","feedItems","items","feedItem","setCachedItems","hasError","errors","console","itemBase","date","pendingFeedItem","modified_at","feedItemsWithPendingItem","commentData","tagged_message","commentCreateConflictMessage","commentCreateErrorMessage","updates","updatedFeedItems","hasMention","taggedMessage","createComment","comment","createCommentSuccessCallback","createCommentErrorCallback","updateComment","appActivityId","appActivityAPI","deleteAppActivity","deleteAppActivityErrorCallback","appActivityDeleteErrorMessage","taskLinksAPI","newAnnotation","cache","getCache","cacheKey","getCacheKey","get","set","shouldRefreshCache","onError","shouldShowAnnotations","shouldShowAppActivity","shouldShowTasks","shouldShowVersions","annotationsPromise","fetchAnnotations","versionsPromise","fetchVersions","currentVersionPromise","fetchCurrentVersion","commentsPromise","fetchComments","tasksPromise","fetchTasksNew","appActivityPromise","fetchAppActivity","versions","currentVersion","versionsWithCurrent","versionsAPI","addCurrentVersion","undefined","sortedFeedItems","getAnnotations","fetchFeedItemErrorCallback","getComments","getVersions","file_version","getVersion","getTasksForFile","err","shouldDisplayError","createTaskCollaboratorsforGroup","createTaskCollaborator","user","deleteTaskCollaborator","createTaskLink","title","errorOccured","Array","isArray","forEach","api","destroy","getAppActivity","destroyTaskCollaborators","destroyTaskLinks"],"mappings":"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","sourcesContent":["/**\n * @flow\n * @file Helper for activity feed API's\n * @author Box\n */\nimport uniqueId from 'lodash/uniqueId';\nimport noop from 'lodash/noop';\nimport type { MessageDescriptor } from 'react-intl';\nimport { getBadItemError, getBadUserError, isUserCorrectableError } from '../utils/error';\nimport commonMessages from '../elements/common/messages';\nimport messages from './messages';\nimport { sortFeedItems } from '../utils/sorter';\nimport Base from './Base';\nimport AnnotationsAPI from './Annotations';\nimport CommentsAPI from './Comments';\nimport VersionsAPI from './Versions';\nimport TasksNewAPI from './tasks/TasksNew';\nimport GroupsAPI from './Groups';\nimport TaskCollaboratorsAPI from './tasks/TaskCollaborators';\nimport TaskLinksAPI from './tasks/TaskLinks';\nimport AppActivityAPI from './AppActivity';\nimport {\n ERROR_CODE_CREATE_TASK,\n ERROR_CODE_UPDATE_TASK,\n ERROR_CODE_GROUP_EXCEEDS_LIMIT,\n HTTP_STATUS_CODE_CONFLICT,\n IS_ERROR_DISPLAYED,\n TASK_NEW_APPROVED,\n TASK_NEW_COMPLETED,\n TASK_NEW_REJECTED,\n TASK_NEW_NOT_STARTED,\n TYPED_ID_FEED_PREFIX,\n TASK_MAX_GROUP_ASSIGNEES,\n} from '../constants';\nimport type {\n TaskCompletionRule,\n TaskCollabAssignee,\n TaskCollabStatus,\n TaskLink,\n TaskNew,\n TaskType,\n TaskPayload,\n TaskUpdatePayload,\n} from '../common/types/tasks';\nimport type { ElementsXhrError, ErrorResponseData, APIOptions } from '../common/types/api';\nimport type {\n SelectorItems,\n SelectorItem,\n UserMini,\n GroupMini,\n BoxItem,\n BoxItemPermission,\n BoxItemVersion,\n FileVersions,\n User,\n} from '../common/types/core';\nimport type {\n Annotation,\n AnnotationPermission,\n Annotations,\n AppActivityItems,\n Comment,\n Comments,\n FeedItem,\n FeedItems,\n Task,\n Tasks,\n} from '../common/types/feed';\n\nconst TASK_NEW_INITIAL_STATUS = TASK_NEW_NOT_STARTED;\nconst TASK = 'task';\n\ntype FeedItemsCache = {\n errors: ErrorResponseData[],\n items: FeedItems,\n};\n\ntype ErrorCallback = (e: ElementsXhrError, code: string, contextInfo?: Object) => void;\n\nclass Feed extends Base {\n /**\n * @property {AnnotationsAPI}\n */\n annotationsAPI: AnnotationsAPI;\n\n /**\n * @property {VersionsAPI}\n */\n versionsAPI: VersionsAPI;\n\n /**\n * @property {CommentsAPI}\n */\n commentsAPI: CommentsAPI;\n\n /**\n * @property {AppActivityAPI}\n */\n appActivityAPI: AppActivityAPI;\n\n /**\n * @property {TasksNewAPI}\n */\n tasksNewAPI: TasksNewAPI;\n\n /**\n * @property {TaskCollaboratorsAPI}\n */\n taskCollaboratorsAPI: TaskCollaboratorsAPI[];\n\n /**\n * @property {TaskLinksAPI}\n */\n taskLinksAPI: TaskLinksAPI[];\n\n /**\n * @property {BoxItem}\n */\n file: BoxItem;\n\n /**\n * @property {ElementsXhrError}\n */\n errors: ElementsXhrError[];\n\n constructor(options: APIOptions) {\n super(options);\n this.taskCollaboratorsAPI = [];\n this.taskLinksAPI = [];\n this.errors = [];\n }\n\n /**\n * Creates pending card on create_start action, then updates card on next call\n * @param {BoxItem} file - The file to which the annotation is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {Annotation} annotation - the current annotation to be created\n * @param {string} id - unique id for the incoming annotation\n * @param {boolean} isPending - indicates the current creation process of the annotation\n */\n addAnnotation(file: BoxItem, currentUser: User, annotation: Annotation, id: string, isPending: boolean): void {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n\n // Add the pending interstitial card\n if (isPending) {\n const newAnnotation = {\n ...annotation,\n created_by: currentUser,\n id,\n type: 'annotation',\n };\n\n this.addPendingItem(this.file.id, currentUser, newAnnotation);\n\n return;\n }\n // Create action has completed, so update the existing pending item\n this.updateFeedItem({ ...annotation, isPending: false }, id);\n }\n\n updateAnnotation = (\n file: BoxItem,\n annotationId: string,\n text: string,\n permissions: AnnotationPermission,\n successCallback: (annotation: Annotation) => void,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.annotationsAPI = new AnnotationsAPI(this.options);\n\n this.file = file;\n this.errorCallback = errorCallback;\n\n this.updateFeedItem({ message: text, isPending: true }, annotationId);\n\n this.annotationsAPI.updateAnnotation(\n this.file.id,\n annotationId,\n permissions,\n text,\n (annotation: Annotation) => {\n this.updateFeedItem(\n {\n ...annotation,\n isPending: false,\n },\n annotationId,\n );\n if (!this.isDestroyed()) {\n successCallback(annotation);\n }\n },\n (e: ErrorResponseData, code: string) => {\n this.updateCommentErrorCallback(e, code, annotationId);\n },\n );\n };\n\n /**\n * Error callback for updating a comment\n *\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the id of either an annotation or comment\n * @return {void}\n */\n updateCommentErrorCallback = (e: ElementsXhrError, code: string, id: string) => {\n this.updateFeedItem(this.createFeedError(messages.commentUpdateErrorMessage), id);\n this.feedErrorCallback(true, e, code);\n };\n\n deleteAnnotation = (\n file: BoxItem,\n annotationId: string,\n permissions: AnnotationPermission,\n successCallBack: Function,\n errorCallback: Function,\n ): void => {\n this.annotationsAPI = new AnnotationsAPI(this.options);\n\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n\n this.updateFeedItem({ isPending: true }, annotationId);\n this.annotationsAPI.deleteAnnotation(\n this.file.id,\n annotationId,\n permissions,\n this.deleteFeedItem.bind(this, annotationId, successCallBack),\n (error: ElementsXhrError, code: string) => {\n // Reusing comment error handler since annotations are treated as comments to user\n this.deleteCommentErrorCallback(error, code, annotationId);\n },\n );\n };\n\n /**\n * Creates a key for the cache\n *\n * @param {string} id folder id\n * @return {string} key\n */\n getCacheKey(id: string): string {\n return `${TYPED_ID_FEED_PREFIX}${id}`;\n }\n\n /**\n * Gets the items from the cache\n *\n * @param {string} id the cache id\n */\n getCachedItems(id: string): ?FeedItemsCache {\n const cache = this.getCache();\n const cacheKey = this.getCacheKey(id);\n return cache.get(cacheKey);\n }\n\n /**\n * Sets the items in the cache\n *\n * @param {string} id - the cache id\n * @param {Array} items - the feed items to cache\n */\n setCachedItems(id: string, items: FeedItems) {\n const cache = this.getCache();\n const cacheKey = this.getCacheKey(id);\n cache.set(cacheKey, {\n errors: this.errors,\n items,\n });\n }\n\n /**\n * Gets the feed items\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {boolean} shouldRefreshCache - Optionally updates the cache\n * @param {Function} successCallback - the success callback which is called after data fetching is complete\n * @param {Function} errorCallback - the error callback which is called after data fetching is complete if there was an error\n * @param {Function} onError - the function to be called immediately after an error occurs\n * @param {Object} [options]- feature flips, etc\n * @param {Object} [options.shouldShowAppActivity] - feature flip the new app activity api\n */\n feedItems(\n file: BoxItem,\n shouldRefreshCache: boolean,\n successCallback: Function,\n errorCallback: (feedItems: FeedItems, errors: ElementsXhrError[]) => void,\n onError: ErrorCallback,\n {\n shouldShowAnnotations = false,\n shouldShowAppActivity = false,\n shouldShowTasks = true,\n shouldShowVersions = true,\n }: {\n shouldShowAnnotations?: boolean,\n shouldShowAppActivity?: boolean,\n shouldShowTasks?: boolean,\n shouldShowVersions?: boolean,\n } = {},\n ): void {\n const { id, permissions = {} } = file;\n const cachedItems = this.getCachedItems(id);\n if (cachedItems) {\n const { errors, items } = cachedItems;\n if (errors.length) {\n errorCallback(items, errors);\n } else {\n successCallback(items);\n }\n\n if (!shouldRefreshCache) {\n return;\n }\n }\n\n this.file = file;\n this.errors = [];\n this.errorCallback = onError;\n const annotationsPromise = shouldShowAnnotations ? this.fetchAnnotations(permissions) : Promise.resolve();\n const versionsPromise = shouldShowVersions ? this.fetchVersions() : Promise.resolve();\n const currentVersionPromise = shouldShowVersions ? this.fetchCurrentVersion() : Promise.resolve();\n const commentsPromise = this.fetchComments(permissions);\n const tasksPromise = shouldShowTasks ? this.fetchTasksNew() : Promise.resolve();\n const appActivityPromise = shouldShowAppActivity ? this.fetchAppActivity(permissions) : Promise.resolve();\n\n Promise.all([\n versionsPromise,\n currentVersionPromise,\n commentsPromise,\n tasksPromise,\n appActivityPromise,\n annotationsPromise,\n ]).then(([versions: ?FileVersions, currentVersion: ?BoxItemVersion, ...feedItems]) => {\n const versionsWithCurrent = currentVersion\n ? this.versionsAPI.addCurrentVersion(currentVersion, versions, this.file)\n : undefined;\n const sortedFeedItems = sortFeedItems(versionsWithCurrent, ...feedItems);\n if (!this.isDestroyed()) {\n this.setCachedItems(id, sortedFeedItems);\n if (this.errors.length) {\n errorCallback(sortedFeedItems, this.errors);\n } else {\n successCallback(sortedFeedItems);\n }\n }\n });\n }\n\n fetchAnnotations(permissions: BoxItemPermission): Promise<?Annotations> {\n this.annotationsAPI = new AnnotationsAPI(this.options);\n return new Promise(resolve => {\n this.annotationsAPI.getAnnotations(\n this.file.id,\n undefined,\n permissions,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Fetches the comments for a file\n *\n * @param {Object} permissions - the file permissions\n * @return {Promise} - the file comments\n */\n fetchComments(permissions: BoxItemPermission): Promise<?Comments> {\n this.commentsAPI = new CommentsAPI(this.options);\n return new Promise(resolve => {\n this.commentsAPI.getComments(\n this.file.id,\n permissions,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Fetches the versions for a file\n *\n * @return {Promise} - the file versions\n */\n fetchVersions(): Promise<?FileVersions> {\n this.versionsAPI = new VersionsAPI(this.options);\n\n return new Promise(resolve => {\n this.versionsAPI.getVersions(this.file.id, resolve, this.fetchFeedItemErrorCallback.bind(this, resolve));\n });\n }\n\n /**\n * Fetches the current version for a file\n *\n * @return {Promise} - the file versions\n */\n fetchCurrentVersion(): Promise<?BoxItemVersion> {\n this.versionsAPI = new VersionsAPI(this.options);\n\n return new Promise(resolve => {\n const { file_version = {} } = this.file;\n this.versionsAPI.getVersion(\n this.file.id,\n file_version.id,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Fetches the tasks for a file\n *\n * @return {Promise} - the feed items\n */\n fetchTasksNew(): Promise<?Tasks> {\n this.tasksNewAPI = new TasksNewAPI(this.options);\n\n return new Promise(resolve => {\n this.tasksNewAPI.getTasksForFile({\n file: { id: this.file.id },\n successCallback: resolve,\n errorCallback: (err, code) => this.fetchFeedItemErrorCallback(resolve, err, code),\n });\n });\n }\n\n /**\n * Error callback for fetching feed items.\n * Should only call the error callback if the response is a 401, 429 or >= 500\n *\n * @param {Function} resolve - the function which will be called on error\n * @param {Object} e - the axios error\n * @param {string} code - the error code\n * @return {void}\n */\n fetchFeedItemErrorCallback(resolve: Function, e: ElementsXhrError, code: string) {\n const { status } = e;\n const shouldDisplayError = isUserCorrectableError(status);\n this.feedErrorCallback(shouldDisplayError, e, code);\n resolve();\n }\n\n /**\n * Updates a task assignment\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} taskId - ID of task to be updated\n * @param {string} taskCollaboratorId - Task assignment ID\n * @param {TaskCollabStatus} taskCollaboratorStatus - New task assignment status\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n updateTaskCollaborator = (\n file: BoxItem,\n taskId: string,\n taskCollaboratorId: string,\n taskCollaboratorStatus: TaskCollabStatus,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, taskId);\n const collaboratorsApi = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(collaboratorsApi);\n const taskCollaboratorPayload = {\n id: taskCollaboratorId,\n status: taskCollaboratorStatus,\n };\n const handleError = (e: ElementsXhrError, code: string) => {\n let errorMessage;\n switch (taskCollaboratorStatus) {\n case TASK_NEW_APPROVED:\n errorMessage = messages.taskApproveErrorMessage;\n break;\n case TASK_NEW_COMPLETED:\n errorMessage = messages.taskCompleteErrorMessage;\n break;\n case TASK_NEW_REJECTED:\n errorMessage = messages.taskRejectErrorMessage;\n break;\n default:\n errorMessage = messages.taskCompleteErrorMessage;\n }\n this.updateFeedItem(this.createFeedError(errorMessage, messages.taskActionErrorTitle), taskId);\n this.feedErrorCallback(true, e, code);\n };\n collaboratorsApi.updateTaskCollaborator({\n file,\n taskCollaborator: taskCollaboratorPayload,\n successCallback: (taskCollab: TaskCollabAssignee) => {\n this.updateTaskCollaboratorSuccessCallback(taskId, file, taskCollab, successCallback, handleError);\n },\n errorCallback: handleError,\n });\n };\n\n /**\n * Updates the task assignment state of the updated task\n *\n * @param {string} taskId - Box task id\n * @param {TaskAssignment} updatedCollaborator - New task assignment from API\n * @param {Function} successCallback - the function which will be called on success\n * @return {void}\n */\n updateTaskCollaboratorSuccessCallback = (\n taskId: string,\n file: { id: string },\n updatedCollaborator: TaskCollabAssignee,\n successCallback: Function,\n errorCallback: Function,\n ): void => {\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.tasksNewAPI.getTask({\n id: taskId,\n file,\n successCallback: task => {\n this.updateFeedItem({ ...task, isPending: false }, taskId);\n successCallback(updatedCollaborator);\n },\n errorCallback,\n });\n };\n\n /**\n * Updates a task in the new API\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} task - The update task payload object\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n updateTaskNew = async (\n file: BoxItem,\n task: TaskUpdatePayload,\n successCallback: () => void = noop,\n errorCallback: ErrorCallback = noop,\n ) => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.updateFeedItem({ isPending: true }, task.id);\n\n try {\n // create request for the size of each group by ID\n // TODO: use async/await for both creating and editing tasks\n const groupInfoPromises: Array<Promise<any>> = task.addedAssignees\n .filter(\n (assignee: SelectorItem<UserMini | GroupMini>) => assignee.item && assignee.item.type === 'group',\n )\n .map(assignee => assignee.id)\n .map(groupId => {\n return new GroupsAPI(this.options).getGroupCount({\n file,\n group: { id: groupId },\n });\n });\n\n const groupCounts: Array<{ total_count: number }> = await Promise.all(groupInfoPromises);\n const hasAnyGroupCountExceeded: boolean = groupCounts.some(\n groupInfo => groupInfo.total_count > TASK_MAX_GROUP_ASSIGNEES,\n );\n const warning = {\n code: ERROR_CODE_GROUP_EXCEEDS_LIMIT,\n type: 'warning',\n };\n\n if (hasAnyGroupCountExceeded) {\n this.feedErrorCallback(false, warning, ERROR_CODE_GROUP_EXCEEDS_LIMIT);\n return;\n }\n\n await new Promise((resolve, reject) => {\n this.tasksNewAPI.updateTaskWithDeps({\n file,\n task,\n successCallback: resolve,\n errorCallback: reject,\n });\n });\n\n await new Promise((resolve, reject) => {\n this.tasksNewAPI.getTask({\n file,\n id: task.id,\n successCallback: (taskData: Task) => {\n this.updateFeedItem(\n {\n ...taskData,\n isPending: false,\n },\n task.id,\n );\n\n resolve();\n },\n errorCallback: (e: ElementsXhrError) => {\n this.updateFeedItem({ isPending: false }, task.id);\n this.feedErrorCallback(false, e, ERROR_CODE_UPDATE_TASK);\n reject();\n },\n });\n });\n\n // everything succeeded, so call the passed in success callback\n if (!this.isDestroyed()) {\n successCallback();\n }\n } catch (e) {\n this.updateFeedItem({ isPending: false }, task.id);\n this.feedErrorCallback(false, e, ERROR_CODE_UPDATE_TASK);\n }\n };\n\n /**\n * Deletes a comment.\n *\n * @param {BoxItem} file - The file to which the comment belongs to\n * @param {string} commentId - Comment ID\n * @param {BoxItemPermission} permissions - Permissions for the comment\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error *\n * @return {void}\n */\n deleteComment = (\n file: BoxItem,\n commentId: string,\n permissions: BoxItemPermission,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n this.commentsAPI = new CommentsAPI(this.options);\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, commentId);\n\n this.commentsAPI.deleteComment({\n file,\n commentId,\n permissions,\n successCallback: this.deleteFeedItem.bind(this, commentId, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.deleteCommentErrorCallback(e, code, commentId);\n },\n });\n };\n\n /**\n * Error callback for deleting a comment\n *\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code\n * @param {string} commentId - the comment id\n * @return {void}\n */\n deleteCommentErrorCallback = (e: ElementsXhrError, code: string, commentId: string) => {\n this.updateFeedItem(this.createFeedError(messages.commentDeleteErrorMessage), commentId);\n this.feedErrorCallback(true, e, code);\n };\n\n /**\n * Creates a task.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} message - Task text\n * @param {Array} assignees - List of assignees\n * @param {number} dueAt - Task's due date\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n createTaskNew = (\n file: BoxItem,\n currentUser: User,\n message: string,\n assignees: SelectorItems<>,\n taskType: TaskType,\n dueAt: ?string,\n completionRule: TaskCompletionRule,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n const uuid = uniqueId('task_');\n let dueAtString;\n if (dueAt) {\n const dueAtDate: Date = new Date(dueAt);\n dueAtString = dueAtDate.toISOString();\n }\n\n // TODO: make pending task generator a function\n const pendingTask: TaskNew = {\n created_by: {\n type: 'task_collaborator',\n target: currentUser,\n id: uniqueId(),\n role: 'CREATOR',\n status: TASK_NEW_INITIAL_STATUS,\n },\n completion_rule: completionRule,\n created_at: new Date().toISOString(),\n due_at: dueAtString,\n id: uuid,\n description: message,\n type: TASK,\n assigned_to: {\n entries: assignees.map((assignee: SelectorItem<UserMini | GroupMini>) => ({\n id: uniqueId(),\n target: { ...assignee, avatar_url: '', type: 'user' },\n status: TASK_NEW_INITIAL_STATUS,\n permissions: {\n can_delete: false,\n can_update: false,\n },\n role: 'ASSIGNEE',\n type: 'task_collaborator',\n })),\n limit: 10,\n next_marker: null,\n },\n permissions: {\n can_update: false,\n can_delete: false,\n can_create_task_collaborator: false,\n can_create_task_link: false,\n },\n task_links: {\n entries: [\n {\n id: uniqueId(),\n type: 'task_link',\n target: {\n type: 'file',\n ...file,\n },\n permissions: {\n can_delete: false,\n can_update: false,\n },\n },\n ],\n limit: 1,\n next_marker: null,\n },\n task_type: taskType,\n status: TASK_NEW_NOT_STARTED,\n };\n\n const taskPayload: TaskPayload = {\n description: message,\n due_at: dueAtString,\n task_type: taskType,\n completion_rule: completionRule,\n };\n\n // create request for the size of each group by ID\n const groupInfoPromises: Array<Promise<any>> = assignees\n .filter((assignee: SelectorItem<UserMini | GroupMini>) => (assignee.item && assignee.item.type) === 'group')\n .map(assignee => assignee.id)\n .map(groupId => {\n return new GroupsAPI(this.options).getGroupCount({\n file,\n group: { id: groupId },\n });\n });\n\n // Fetch each group size in parallel --> return an array of group sizes\n Promise.all(groupInfoPromises)\n .then((groupCounts: Array<{ total_count: number }>) => {\n const hasAnyGroupCountExceeded: boolean = groupCounts.some(\n groupInfo => groupInfo.total_count > TASK_MAX_GROUP_ASSIGNEES,\n );\n const warning = {\n code: ERROR_CODE_GROUP_EXCEEDS_LIMIT,\n type: 'warning',\n };\n if (hasAnyGroupCountExceeded) {\n this.feedErrorCallback(false, warning, ERROR_CODE_GROUP_EXCEEDS_LIMIT);\n return;\n }\n\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.tasksNewAPI.createTaskWithDeps({\n file,\n task: taskPayload,\n assignees,\n successCallback: (taskWithDepsData: any) => {\n this.addPendingItem(this.file.id, currentUser, pendingTask);\n this.updateFeedItem(\n {\n ...taskWithDepsData,\n task_links: {\n entries: taskWithDepsData.task_links,\n next_marker: null,\n limit: 1,\n },\n assigned_to: {\n entries: taskWithDepsData.assigned_to,\n next_marker: null,\n limit: taskWithDepsData.assigned_to.length,\n },\n isPending: false,\n },\n uuid,\n );\n successCallback(taskWithDepsData);\n },\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.feedErrorCallback(false, e, code);\n },\n });\n })\n .catch(error => {\n this.feedErrorCallback(false, error, ERROR_CODE_CREATE_TASK);\n });\n };\n\n /**\n * Creates a task group via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task|TaskUpdatePayload} task - The newly created or existing task from the API\n * @param {SelectorItem} assignee - The user assigned to this task\n * @param {Function} errorCallback - Task create error callback\n * @return {Promise<TaskAssignment>}\n */\n createTaskCollaboratorsforGroup(\n file: BoxItem,\n task: Task | TaskUpdatePayload,\n assignee: SelectorItem<UserMini | GroupMini>,\n ): Promise<Array<TaskCollabAssignee>> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n return new Promise((resolve, reject) => {\n const taskCollaboratorsAPI = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(taskCollaboratorsAPI);\n taskCollaboratorsAPI.createTaskCollaboratorsforGroup({\n file,\n task,\n group: assignee,\n successCallback: resolve,\n errorCallback: (e: ElementsXhrError) => {\n reject(e);\n },\n });\n });\n }\n\n /**\n * Creates a task collaborator via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task|TaskUpdatePayload} task - The newly created or existing task from the API\n * @param {SelectorItem} assignee - The user assigned to this task\n * @param {Function} errorCallback - Task create error callback\n * @return {Promise<TaskAssignment>}\n */\n createTaskCollaborator(\n file: BoxItem,\n task: Task | TaskUpdatePayload,\n assignee: SelectorItem<UserMini | GroupMini>,\n ): Promise<TaskCollabAssignee> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n return new Promise((resolve, reject) => {\n const taskCollaboratorsAPI = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(taskCollaboratorsAPI);\n\n taskCollaboratorsAPI.createTaskCollaborator({\n file,\n task,\n user: assignee,\n successCallback: resolve,\n errorCallback: (e: ElementsXhrError) => {\n reject(e);\n },\n });\n });\n }\n\n /**\n * Deletes a task collaborator via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task|TaskUpdatePayload} task - The newly deleted or existing task from the API\n * @param {TaskCollabAssignee} assignee - The user assigned to this task\n * @param {Function} errorCallback - Task delete error callback\n * @return {Promise<TaskAssignment>}\n */\n deleteTaskCollaborator(\n file: BoxItem,\n task: Task | TaskUpdatePayload,\n assignee: TaskCollabAssignee,\n ): Promise<TaskCollabAssignee> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file.id = file.id;\n return new Promise((resolve, reject) => {\n const taskCollaboratorsAPI = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(taskCollaboratorsAPI);\n\n taskCollaboratorsAPI.deleteTaskCollaborator({\n file,\n task,\n taskCollaborator: { id: assignee.id },\n successCallback: resolve,\n errorCallback: (e: ElementsXhrError) => {\n reject(e);\n },\n });\n });\n }\n\n /**\n * Creates a task link via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task} task - The newly created task from the API\n * @param {Function} errorCallback - Task create error callback\n * @return {Promise<TaskAssignment}\n */\n createTaskLink(file: BoxItem, task: Task): Promise<TaskLink> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n return new Promise((resolve, reject) => {\n const taskLinksAPI = new TaskLinksAPI(this.options);\n this.taskLinksAPI.push(taskLinksAPI);\n\n taskLinksAPI.createTaskLink({\n file,\n task,\n successCallback: resolve,\n errorCallback: reject,\n });\n });\n }\n\n /**\n * Deletes a task in the new API\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} taskId - The task's id\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteTaskNew = (\n file: BoxItem,\n task: TaskNew,\n successCallback: (taskId: string) => void = noop,\n errorCallback: ErrorCallback = noop,\n ) => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.updateFeedItem({ isPending: true }, task.id);\n\n this.tasksNewAPI.deleteTask({\n file,\n task,\n successCallback: this.deleteFeedItem.bind(this, task.id, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.updateFeedItem(this.createFeedError(messages.taskDeleteErrorMessage), task.id);\n this.feedErrorCallback(true, e, code);\n },\n });\n };\n\n /**\n * Deletes a feed item from the cache\n *\n * @param {string} id - The id of the feed item to be deleted\n * @param {Function} successCallback - function to be called after the delete\n */\n deleteFeedItem = (id: string, successCallback: Function = noop) => {\n const cachedItems = this.getCachedItems(this.file.id);\n if (cachedItems) {\n const feedItems = cachedItems.items.filter(feedItem => feedItem.id !== id);\n this.setCachedItems(this.file.id, feedItems);\n\n if (!this.isDestroyed()) {\n successCallback(id);\n }\n }\n };\n\n /**\n * Network error callback\n *\n * @param {boolean} hasError - true if the UI should display an error\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code for the error which occured\n * @return {void}\n */\n feedErrorCallback = (hasError: boolean = false, e: ElementsXhrError, code: string): void => {\n if (hasError) {\n this.errors.push({ ...e, code });\n }\n\n if (!this.isDestroyed() && this.errorCallback) {\n this.errorCallback(e, code, {\n error: e,\n [IS_ERROR_DISPLAYED]: hasError,\n });\n }\n\n console.error(e); // eslint-disable-line no-console\n };\n\n /**\n * Add a placeholder pending feed item.\n *\n * @param {string} id - the file id\n * @param {Object} currentUser - the user who performed the action\n * @param {Object} itemBase - Base properties for item to be added to the feed as pending.\n * @return {void}\n */\n addPendingItem = (id: string, currentUser: User, itemBase: Object): Comment | Task | TaskNew | BoxItemVersion => {\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const date = new Date().toISOString();\n const pendingFeedItem = {\n created_at: date,\n created_by: currentUser,\n modified_at: date,\n isPending: true,\n ...itemBase,\n };\n const cachedItems = this.getCachedItems(this.file.id);\n const feedItems = cachedItems ? cachedItems.items : [];\n const feedItemsWithPendingItem = [...feedItems, pendingFeedItem];\n this.setCachedItems(id, feedItemsWithPendingItem);\n\n return pendingFeedItem;\n };\n\n /**\n * Callback for successful creation of a Comment.\n *\n * @param {Comment} commentData - API returned Comment\n * @param {string} id - ID of the feed item to update with the new comment data\n * @return {void}\n */\n createCommentSuccessCallback = (commentData: Comment, id: string, successCallback: Function): void => {\n const { message = '', tagged_message = '' } = commentData;\n // Comment component uses tagged_message only\n commentData.tagged_message = tagged_message || message;\n\n this.updateFeedItem(\n {\n ...commentData,\n isPending: false,\n },\n id,\n );\n\n if (!this.isDestroyed()) {\n successCallback(commentData);\n }\n };\n\n /**\n * Callback for failed creation of a Comment.\n *\n * @param {Object} e - The axios error\n * @param {string} code - the error code\n * @param {string} id - ID of the feed item to update\n * @return {void}\n */\n createCommentErrorCallback = (e: ElementsXhrError, code: string, id: string) => {\n const errorMessage =\n e.status === HTTP_STATUS_CODE_CONFLICT\n ? messages.commentCreateConflictMessage\n : messages.commentCreateErrorMessage;\n this.updateFeedItem(this.createFeedError(errorMessage), id);\n this.feedErrorCallback(false, e, code);\n };\n\n /**\n * Constructs an error object that renders to an inline feed error\n *\n * @param {string} message - The error message body.\n * @param {string} title - The error message title.\n * @return {Object} An error message object\n */\n createFeedError(message: MessageDescriptor, title: MessageDescriptor = commonMessages.errorOccured) {\n return {\n error: { message, title },\n };\n }\n\n /**\n * Replace a feed item with new feed item data.\n *\n * @param {Object} updates - The new data to be applied to the feed item.\n * @param {string} id - ID of the feed item to replace.\n * @return {void}\n */\n updateFeedItem = (updates: Object, id: string): ?FeedItems => {\n if (!this.file.id) {\n throw getBadItemError();\n }\n\n const cachedItems = this.getCachedItems(this.file.id);\n if (cachedItems) {\n const updatedFeedItems = cachedItems.items.map((item: FeedItem) => {\n if (item.id === id) {\n return {\n ...item,\n ...updates,\n };\n }\n\n return item;\n });\n\n this.setCachedItems(this.file.id, updatedFeedItems);\n return updatedFeedItems;\n }\n\n return null;\n };\n\n /**\n * Create a comment, and make a pending item to be replaced once the API is successful.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} text - the comment text\n * @param {boolean} hasMention - true if there is an @mention in the text\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n createComment = (\n file: BoxItem,\n currentUser: User,\n text: string,\n hasMention: boolean,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n const uuid = uniqueId('comment_');\n const commentData = {\n id: uuid,\n tagged_message: text,\n type: 'comment',\n };\n\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.addPendingItem(this.file.id, currentUser, commentData);\n\n const message = {};\n if (hasMention) {\n message.taggedMessage = text;\n } else {\n message.message = text;\n }\n\n this.commentsAPI = new CommentsAPI(this.options);\n\n this.commentsAPI.createComment({\n file,\n ...message,\n successCallback: (comment: Comment) => {\n this.createCommentSuccessCallback(comment, uuid, successCallback);\n },\n errorCallback: (e: ErrorResponseData, code: string) => {\n this.createCommentErrorCallback(e, code, uuid);\n },\n });\n };\n\n /**\n * Update a comment\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} text - the comment text\n * @param {boolean} hasMention - true if there is an @mention in the text\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n updateComment = (\n file: BoxItem,\n commentId: string,\n text: string,\n hasMention: boolean,\n permissions: BoxItemPermission,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n const commentData = {\n tagged_message: text,\n };\n\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ ...commentData, isPending: true }, commentId);\n\n const message = {};\n if (hasMention) {\n message.tagged_message = text;\n } else {\n message.message = text;\n }\n\n this.commentsAPI = new CommentsAPI(this.options);\n\n this.commentsAPI.updateComment({\n file,\n commentId,\n permissions,\n ...message,\n successCallback: (comment: Comment) => {\n // use the request payload instead of response in the\n // feed item update because response may not contain\n // the tagged version of the message\n this.updateFeedItem(\n {\n ...message,\n isPending: false,\n },\n commentId,\n );\n if (!this.isDestroyed()) {\n successCallback(comment);\n }\n },\n errorCallback: (e: ErrorResponseData, code: string) => {\n this.updateCommentErrorCallback(e, code, commentId);\n },\n });\n };\n\n destroyTaskCollaborators() {\n if (Array.isArray(this.taskCollaboratorsAPI)) {\n this.taskCollaboratorsAPI.forEach(api => api.destroy());\n this.taskCollaboratorsAPI = [];\n }\n }\n\n destroyTaskLinks() {\n if (Array.isArray(this.taskLinksAPI)) {\n this.taskLinksAPI.forEach(api => api.destroy());\n this.taskLinksAPI = [];\n }\n }\n\n /**\n * Fetches app activities for a file\n * @param {BoxItemPermission} permissions - Permissions to attach to the app activity items\n *\n * @return {Promise} - the feed items\n */\n fetchAppActivity(permissions: BoxItemPermission): Promise<?AppActivityItems> {\n this.appActivityAPI = new AppActivityAPI(this.options);\n\n return new Promise(resolve => {\n this.appActivityAPI.getAppActivity(\n this.file.id,\n permissions,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Deletes an app activity item.\n *\n * @param {BoxItem} file - The file to which the app activity belongs to\n * @param {string} appActivityId - The app activity item id to delete\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteAppActivity = (\n file: BoxItem,\n appActivityId: string,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n const { id } = file;\n if (!id) {\n throw getBadItemError();\n }\n\n this.appActivityAPI = new AppActivityAPI(this.options);\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, appActivityId);\n\n this.appActivityAPI.deleteAppActivity({\n id,\n appActivityId,\n successCallback: this.deleteFeedItem.bind(this, appActivityId, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.deleteAppActivityErrorCallback(e, code, appActivityId);\n },\n });\n };\n\n /**\n * Error callback for deleting an app activity item\n *\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the app activity id\n * @return {void}\n */\n deleteAppActivityErrorCallback = (e: ElementsXhrError, code: string, id: string) => {\n this.updateFeedItem(this.createFeedError(messages.appActivityDeleteErrorMessage), id);\n this.feedErrorCallback(true, e, code);\n };\n\n /**\n * Destroys all the task feed API's\n *\n * @return {void}\n */\n destroy() {\n super.destroy();\n\n if (this.annotationsAPI) {\n this.annotationsAPI.destroy();\n delete this.annotationsAPI;\n }\n\n if (this.commentsAPI) {\n this.commentsAPI.destroy();\n delete this.commentsAPI;\n }\n\n if (this.versionsAPI) {\n this.versionsAPI.destroy();\n delete this.versionsAPI;\n }\n\n if (this.appActivityAPI) {\n this.appActivityAPI.destroy();\n delete this.appActivityAPI;\n }\n\n if (this.tasksNewAPI) {\n this.tasksNewAPI.destroy();\n delete this.tasksNewAPI;\n }\n\n this.destroyTaskCollaborators();\n this.destroyTaskLinks();\n }\n}\n\nexport default Feed;\n"],"file":"Feed.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/api/Feed.js"],"names":["uniqueId","noop","getBadItemError","getBadUserError","getMissingItemTextOrStatus","isUserCorrectableError","commonMessages","messages","sortFeedItems","FEED_FILE_VERSIONS_FIELDS_TO_FETCH","Base","AnnotationsAPI","CommentsAPI","ThreadedCommentsAPI","VersionsAPI","TasksNewAPI","GroupsAPI","TaskCollaboratorsAPI","TaskLinksAPI","AppActivityAPI","ERROR_CODE_CREATE_TASK","ERROR_CODE_UPDATE_TASK","ERROR_CODE_GROUP_EXCEEDS_LIMIT","FEED_ITEM_TYPE_ANNOTATION","FEED_ITEM_TYPE_COMMENT","FEED_ITEM_TYPE_TASK","HTTP_STATUS_CODE_CONFLICT","IS_ERROR_DISPLAYED","TASK_NEW_APPROVED","TASK_NEW_COMPLETED","TASK_NEW_REJECTED","TASK_NEW_NOT_STARTED","TYPED_ID_FEED_PREFIX","TASK_MAX_GROUP_ASSIGNEES","TASK_NEW_INITIAL_STATUS","getItemWithFilteredReplies","item","replyId","replies","rest","filter","id","getItemWithPendingReply","reply","Feed","options","file","annotationId","text","status","permissions","successCallback","errorCallback","annotationsAPI","feedItemChanges","message","updateFeedItem","isPending","updateAnnotation","annotation","isDestroyed","e","code","updateCommentErrorCallback","createFeedError","commentUpdateErrorMessage","feedErrorCallback","error","parentId","updateReplyItem","repliesFetchErrorMessage","successCallBack","deleteAnnotation","deleteFeedItem","bind","deleteCommentErrorCallback","taskId","taskCollaboratorId","taskCollaboratorStatus","collaboratorsApi","taskCollaboratorsAPI","push","taskCollaboratorPayload","handleError","errorMessage","taskApproveErrorMessage","taskCompleteErrorMessage","taskRejectErrorMessage","taskActionErrorTitle","updateTaskCollaborator","taskCollaborator","taskCollab","updateTaskCollaboratorSuccessCallback","updatedCollaborator","tasksNewAPI","getTask","task","groupInfoPromises","addedAssignees","assignee","type","map","groupId","getGroupCount","group","Promise","all","groupCounts","hasAnyGroupCountExceeded","some","groupInfo","total_count","warning","resolve","reject","updateTaskWithDeps","taskData","commentId","commentsAPI","deleteComment","threadedCommentsAPI","fileId","deleteReplyItem","deleteReplyErrorCallback","commentDeleteErrorMessage","currentUser","assignees","taskType","dueAt","completionRule","uuid","dueAtString","dueAtDate","Date","toISOString","pendingTask","created_by","target","role","completion_rule","created_at","due_at","description","assigned_to","entries","avatar_url","can_delete","can_update","limit","next_marker","can_create_task_collaborator","can_create_task_link","task_links","task_type","taskPayload","then","createTaskWithDeps","taskWithDepsData","addPendingItem","length","catch","deleteTask","taskDeleteErrorMessage","cachedItems","getCachedItems","feedItems","items","feedItem","setCachedItems","errors","hasError","console","itemBase","date","pendingFeedItem","modified_at","feedItemsWithPendingItem","commentBase","pendingReply","updatedFeedItems","commentData","tagged_message","commentCreateConflictMessage","commentCreateErrorMessage","updates","replyUpdates","getItemWithUpdatedReply","updatedItem","hasMention","taggedMessage","createComment","comment","createCommentSuccessCallback","createCommentErrorCallback","updateComment","undefined","updateReplyErrorCallback","appActivityId","appActivityAPI","deleteAppActivity","deleteAppActivityErrorCallback","appActivityDeleteErrorMessage","taskLinksAPI","newAnnotation","cache","getCache","cacheKey","getCacheKey","get","set","shouldRefreshCache","onError","shouldShowAnnotations","shouldShowAppActivity","shouldShowReplies","shouldShowTasks","shouldShowVersions","annotationsPromise","fetchAnnotations","versionsPromise","fetchVersions","currentVersionPromise","fetchCurrentVersion","commentsPromise","fetchThreadedComments","fetchComments","tasksPromise","fetchTasksNew","appActivityPromise","fetchAppActivity","versions","currentVersion","versionsWithCurrent","versionsAPI","addCurrentVersion","sortedFeedItems","shouldFetchReplies","getAnnotations","fetchFeedItemErrorCallback","getComments","commentFeedItemId","commentFeedItemType","isRepliesLoading","successCallbackFn","comments","errorCallbackFn","fetchRepliesErrorCallback","getAnnotationReplies","getCommentReplies","getVersions","file_version","getVersion","getTasksForFile","err","shouldDisplayError","createTaskCollaboratorsforGroup","createTaskCollaborator","user","deleteTaskCollaborator","createTaskLink","title","errorOccured","parentType","addPendingReply","createReplySuccessCallback","createReplyErrorCallback","createAnnotationReply","createCommentReply","Array","isArray","forEach","api","destroy","getAppActivity","destroyTaskCollaborators","destroyTaskLinks"],"mappings":"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","sourcesContent":["/**\n * @flow\n * @file Helper for activity feed API's\n * @author Box\n */\nimport uniqueId from 'lodash/uniqueId';\nimport noop from 'lodash/noop';\nimport type { MessageDescriptor } from 'react-intl';\nimport { getBadItemError, getBadUserError, getMissingItemTextOrStatus, isUserCorrectableError } from '../utils/error';\nimport commonMessages from '../elements/common/messages';\nimport messages from './messages';\nimport { sortFeedItems } from '../utils/sorter';\nimport { FEED_FILE_VERSIONS_FIELDS_TO_FETCH } from '../utils/fields';\nimport Base from './Base';\nimport AnnotationsAPI from './Annotations';\nimport CommentsAPI from './Comments';\nimport ThreadedCommentsAPI from './ThreadedComments';\nimport VersionsAPI from './Versions';\nimport TasksNewAPI from './tasks/TasksNew';\nimport GroupsAPI from './Groups';\nimport TaskCollaboratorsAPI from './tasks/TaskCollaborators';\nimport TaskLinksAPI from './tasks/TaskLinks';\nimport AppActivityAPI from './AppActivity';\nimport {\n ERROR_CODE_CREATE_TASK,\n ERROR_CODE_UPDATE_TASK,\n ERROR_CODE_GROUP_EXCEEDS_LIMIT,\n FEED_ITEM_TYPE_ANNOTATION,\n FEED_ITEM_TYPE_COMMENT,\n FEED_ITEM_TYPE_TASK,\n HTTP_STATUS_CODE_CONFLICT,\n IS_ERROR_DISPLAYED,\n TASK_NEW_APPROVED,\n TASK_NEW_COMPLETED,\n TASK_NEW_REJECTED,\n TASK_NEW_NOT_STARTED,\n TYPED_ID_FEED_PREFIX,\n TASK_MAX_GROUP_ASSIGNEES,\n} from '../constants';\nimport type {\n TaskCompletionRule,\n TaskCollabAssignee,\n TaskCollabStatus,\n TaskLink,\n TaskNew,\n TaskType,\n TaskPayload,\n TaskUpdatePayload,\n} from '../common/types/tasks';\nimport type { ElementsXhrError, ErrorResponseData, APIOptions } from '../common/types/api';\nimport type {\n SelectorItems,\n SelectorItem,\n UserMini,\n GroupMini,\n BoxItem,\n BoxItemPermission,\n BoxItemVersion,\n FileVersions,\n User,\n} from '../common/types/core';\nimport type {\n Annotation,\n AnnotationPermission,\n Annotations,\n AppActivityItems,\n BoxCommentPermission,\n Comment,\n CommentFeedItemType,\n Comments,\n FeedItem,\n FeedItems,\n FeedItemStatus,\n Task,\n Tasks,\n ThreadedComments as ThreadedCommentsType,\n} from '../common/types/feed';\n\nconst TASK_NEW_INITIAL_STATUS = TASK_NEW_NOT_STARTED;\n\ntype FeedItemsCache = {\n errors: ErrorResponseData[],\n items: FeedItems,\n};\n\ntype ErrorCallback = (e: ElementsXhrError, code: string, contextInfo?: Object) => void;\n\nconst getItemWithFilteredReplies = <T: { replies?: Array<Comment> }>(item: T, replyId: string): T => {\n const { replies = [], ...rest } = item;\n return { replies: replies.filter(({ id }) => id !== replyId), ...rest };\n};\n\nconst getItemWithPendingReply = <T: { replies?: Array<Comment> }>(item: T, reply: Comment): T => {\n const { replies = [], ...rest } = item;\n return { replies: [...replies, reply], ...rest };\n};\n\nclass Feed extends Base {\n /**\n * @property {AnnotationsAPI}\n */\n annotationsAPI: AnnotationsAPI;\n\n /**\n * @property {VersionsAPI}\n */\n versionsAPI: VersionsAPI;\n\n /**\n * @property {CommentsAPI}\n */\n commentsAPI: CommentsAPI;\n\n /**\n * @property {AppActivityAPI}\n */\n appActivityAPI: AppActivityAPI;\n\n /**\n * @property {TasksNewAPI}\n */\n tasksNewAPI: TasksNewAPI;\n\n /**\n * @property {TaskCollaboratorsAPI}\n */\n taskCollaboratorsAPI: TaskCollaboratorsAPI[];\n\n /**\n * @property {TaskLinksAPI}\n */\n taskLinksAPI: TaskLinksAPI[];\n\n /**\n * @property {ThreadedCommentsAPI}\n */\n threadedCommentsAPI: ThreadedCommentsAPI;\n\n /**\n * @property {BoxItem}\n */\n file: BoxItem;\n\n /**\n * @property {ElementsXhrError}\n */\n errors: ElementsXhrError[];\n\n constructor(options: APIOptions) {\n super(options);\n this.taskCollaboratorsAPI = [];\n this.taskLinksAPI = [];\n this.errors = [];\n }\n\n /**\n * Creates pending card on create_start action, then updates card on next call\n * @param {BoxItem} file - The file to which the annotation is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {Annotation} annotation - the current annotation to be created\n * @param {string} id - unique id for the incoming annotation\n * @param {boolean} isPending - indicates the current creation process of the annotation\n */\n addAnnotation(file: BoxItem, currentUser: User, annotation: Annotation, id: string, isPending: boolean): void {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n\n // Add the pending interstitial card\n if (isPending) {\n const newAnnotation = {\n ...annotation,\n created_by: currentUser,\n id,\n type: FEED_ITEM_TYPE_ANNOTATION,\n };\n\n this.addPendingItem(this.file.id, currentUser, newAnnotation);\n\n return;\n }\n // Create action has completed, so update the existing pending item\n this.updateFeedItem({ ...annotation, isPending: false }, id);\n }\n\n updateAnnotation = (\n file: BoxItem,\n annotationId: string,\n text?: string,\n status?: FeedItemStatus,\n permissions: AnnotationPermission,\n successCallback: (annotation: Annotation) => void,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n if (!text && !status) {\n throw getMissingItemTextOrStatus();\n }\n\n this.annotationsAPI = new AnnotationsAPI(this.options);\n\n this.file = file;\n this.errorCallback = errorCallback;\n\n const feedItemChanges = {};\n if (text) {\n feedItemChanges.message = text;\n }\n if (status) {\n feedItemChanges.status = status;\n }\n this.updateFeedItem({ ...feedItemChanges, isPending: true }, annotationId);\n\n this.annotationsAPI.updateAnnotation(\n this.file.id,\n annotationId,\n permissions,\n feedItemChanges,\n (annotation: Annotation) => {\n this.updateFeedItem(\n {\n ...annotation,\n isPending: false,\n },\n annotationId,\n );\n if (!this.isDestroyed()) {\n successCallback(annotation);\n }\n },\n (e: ErrorResponseData, code: string) => {\n this.updateCommentErrorCallback(e, code, annotationId);\n },\n );\n };\n\n /**\n * Error callback for updating a comment\n *\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the id of either an annotation or comment\n * @return {void}\n */\n updateCommentErrorCallback = (e: ElementsXhrError, code: string, id: string) => {\n this.updateFeedItem(this.createFeedError(messages.commentUpdateErrorMessage), id);\n this.feedErrorCallback(true, e, code);\n };\n\n /**\n * Error callback for updating a reply\n *\n * @param {ElementsXhrError} error - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the id of the reply (comment)\n * @param {string} parentId - the id of either the parent item (an annotation or comment)\n * @return {void}\n */\n updateReplyErrorCallback = (error: ElementsXhrError, code: string, id: string, parentId: string) => {\n this.updateReplyItem(this.createFeedError(messages.commentUpdateErrorMessage), parentId, id);\n this.feedErrorCallback(true, error, code);\n };\n\n /**\n * Error callback for fetching replies\n *\n * @param {ElementsXhrError} error - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the id of either an annotation or comment\n * @return {void}\n */\n fetchRepliesErrorCallback = (error: ElementsXhrError, code: string, id: string) => {\n this.updateFeedItem(this.createFeedError(messages.repliesFetchErrorMessage), id);\n this.feedErrorCallback(true, error, code);\n };\n\n deleteAnnotation = (\n file: BoxItem,\n annotationId: string,\n permissions: AnnotationPermission,\n successCallBack: Function,\n errorCallback: Function,\n ): void => {\n this.annotationsAPI = new AnnotationsAPI(this.options);\n\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n\n this.updateFeedItem({ isPending: true }, annotationId);\n this.annotationsAPI.deleteAnnotation(\n this.file.id,\n annotationId,\n permissions,\n this.deleteFeedItem.bind(this, annotationId, successCallBack),\n (error: ElementsXhrError, code: string) => {\n // Reusing comment error handler since annotations are treated as comments to user\n this.deleteCommentErrorCallback(error, code, annotationId);\n },\n );\n };\n\n /**\n * Creates a key for the cache\n *\n * @param {string} id folder id\n * @return {string} key\n */\n getCacheKey(id: string): string {\n return `${TYPED_ID_FEED_PREFIX}${id}`;\n }\n\n /**\n * Gets the items from the cache\n *\n * @param {string} id the cache id\n */\n getCachedItems(id: string): ?FeedItemsCache {\n const cache = this.getCache();\n const cacheKey = this.getCacheKey(id);\n return cache.get(cacheKey);\n }\n\n /**\n * Sets the items in the cache\n *\n * @param {string} id - the cache id\n * @param {Array} items - the feed items to cache\n */\n setCachedItems(id: string, items: FeedItems) {\n const cache = this.getCache();\n const cacheKey = this.getCacheKey(id);\n cache.set(cacheKey, {\n errors: this.errors,\n items,\n });\n }\n\n /**\n * Gets the feed items\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {boolean} shouldRefreshCache - Optionally updates the cache\n * @param {Function} successCallback - the success callback which is called after data fetching is complete\n * @param {Function} errorCallback - the error callback which is called after data fetching is complete if there was an error\n * @param {Function} onError - the function to be called immediately after an error occurs\n * @param {Object} [options]- feature flips, etc\n * @param {Object} [options.shouldShowAppActivity] - feature flip the new app activity api\n */\n feedItems(\n file: BoxItem,\n shouldRefreshCache: boolean,\n successCallback: Function,\n errorCallback: (feedItems: FeedItems, errors: ElementsXhrError[]) => void,\n onError: ErrorCallback,\n {\n shouldShowAnnotations = false,\n shouldShowAppActivity = false,\n shouldShowReplies = false,\n shouldShowTasks = true,\n shouldShowVersions = true,\n }: {\n shouldShowAnnotations?: boolean,\n shouldShowAppActivity?: boolean,\n shouldShowReplies?: boolean,\n shouldShowTasks?: boolean,\n shouldShowVersions?: boolean,\n } = {},\n ): void {\n const { id, permissions = {} } = file;\n const cachedItems = this.getCachedItems(id);\n if (cachedItems) {\n const { errors, items } = cachedItems;\n if (errors.length) {\n errorCallback(items, errors);\n } else {\n successCallback(items);\n }\n\n if (!shouldRefreshCache) {\n return;\n }\n }\n\n this.file = file;\n this.errors = [];\n this.errorCallback = onError;\n const annotationsPromise = shouldShowAnnotations\n ? this.fetchAnnotations(permissions, shouldShowReplies)\n : Promise.resolve();\n const versionsPromise = shouldShowVersions ? this.fetchVersions() : Promise.resolve();\n const currentVersionPromise = shouldShowVersions ? this.fetchCurrentVersion() : Promise.resolve();\n const commentsPromise = shouldShowReplies\n ? this.fetchThreadedComments(permissions)\n : this.fetchComments(permissions);\n const tasksPromise = shouldShowTasks ? this.fetchTasksNew() : Promise.resolve();\n const appActivityPromise = shouldShowAppActivity ? this.fetchAppActivity(permissions) : Promise.resolve();\n\n Promise.all([\n versionsPromise,\n currentVersionPromise,\n commentsPromise,\n tasksPromise,\n appActivityPromise,\n annotationsPromise,\n ]).then(([versions: ?FileVersions, currentVersion: ?BoxItemVersion, ...feedItems]) => {\n const versionsWithCurrent = currentVersion\n ? this.versionsAPI.addCurrentVersion(currentVersion, versions, this.file)\n : undefined;\n const sortedFeedItems = sortFeedItems(versionsWithCurrent, ...feedItems);\n if (!this.isDestroyed()) {\n this.setCachedItems(id, sortedFeedItems);\n if (this.errors.length) {\n errorCallback(sortedFeedItems, this.errors);\n } else {\n successCallback(sortedFeedItems);\n }\n }\n });\n }\n\n fetchAnnotations(permissions: BoxItemPermission, shouldFetchReplies?: boolean): Promise<?Annotations> {\n this.annotationsAPI = new AnnotationsAPI(this.options);\n return new Promise(resolve => {\n this.annotationsAPI.getAnnotations(\n this.file.id,\n undefined,\n permissions,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n undefined,\n undefined,\n shouldFetchReplies,\n );\n });\n }\n\n /**\n * Fetches the comments for a file\n *\n * @param {Object} permissions - the file permissions\n * @return {Promise} - the file comments\n */\n fetchComments(permissions: BoxItemPermission): Promise<?Comments> {\n this.commentsAPI = new CommentsAPI(this.options);\n return new Promise(resolve => {\n this.commentsAPI.getComments(\n this.file.id,\n permissions,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Fetches the comments with replies for a file\n *\n * @param {Object} permissions - the file permissions\n * @return {Promise} - the file comments\n */\n fetchThreadedComments(permissions: BoxItemPermission): Promise<?ThreadedCommentsType> {\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n return new Promise(resolve => {\n this.threadedCommentsAPI.getComments({\n errorCallback: this.fetchFeedItemErrorCallback.bind(this, resolve),\n fileId: this.file.id,\n permissions,\n successCallback: resolve,\n });\n });\n }\n\n /**\n * Fetches replies (comments) of a comment or annotation\n *\n * @param {BoxItem} file - The file to which the comment or annotation belongs to\n * @param {string} commentFeedItemId - ID of the comment or annotation\n * @param {CommentFeedItemType} commentFeedItemType - Type of the comment or annotation\n * @param {Function} successCallback\n * @param {ErrorCallback} errorCallback\n * @return {void}\n */\n fetchReplies(\n file: BoxItem,\n commentFeedItemId: string,\n commentFeedItemType: CommentFeedItemType,\n successCallback: (comments: Array<Comment>) => void,\n errorCallback: ErrorCallback,\n ): void {\n const { id, permissions } = file;\n if (!id || !permissions) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n\n this.updateFeedItem({ isRepliesLoading: true }, commentFeedItemId);\n\n const successCallbackFn = (comments: ThreadedCommentsType) => {\n this.updateFeedItem({ isRepliesLoading: false, replies: comments.entries }, commentFeedItemId);\n successCallback(comments.entries);\n };\n const errorCallbackFn = (error: ErrorResponseData, code: string) => {\n this.fetchRepliesErrorCallback(error, code, commentFeedItemId);\n };\n\n if (commentFeedItemType === FEED_ITEM_TYPE_ANNOTATION) {\n this.annotationsAPI = new AnnotationsAPI(this.options);\n\n this.annotationsAPI.getAnnotationReplies(\n file.id,\n commentFeedItemId,\n permissions,\n successCallbackFn,\n errorCallbackFn,\n );\n } else if (commentFeedItemType === FEED_ITEM_TYPE_COMMENT) {\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.getCommentReplies({\n fileId: file.id,\n commentId: commentFeedItemId,\n permissions,\n successCallback: successCallbackFn,\n errorCallback: errorCallbackFn,\n });\n }\n }\n\n /**\n * Fetches the versions for a file\n *\n * @return {Promise} - the file versions\n */\n fetchVersions(): Promise<?FileVersions> {\n this.versionsAPI = new VersionsAPI(this.options);\n\n return new Promise(resolve => {\n this.versionsAPI.getVersions(\n this.file.id,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n undefined,\n undefined,\n FEED_FILE_VERSIONS_FIELDS_TO_FETCH,\n );\n });\n }\n\n /**\n * Fetches the current version for a file\n *\n * @return {Promise} - the file versions\n */\n fetchCurrentVersion(): Promise<?BoxItemVersion> {\n this.versionsAPI = new VersionsAPI(this.options);\n\n return new Promise(resolve => {\n const { file_version = {} } = this.file;\n this.versionsAPI.getVersion(\n this.file.id,\n file_version.id,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Fetches the tasks for a file\n *\n * @return {Promise} - the feed items\n */\n fetchTasksNew(): Promise<?Tasks> {\n this.tasksNewAPI = new TasksNewAPI(this.options);\n\n return new Promise(resolve => {\n this.tasksNewAPI.getTasksForFile({\n file: { id: this.file.id },\n successCallback: resolve,\n errorCallback: (err, code) => this.fetchFeedItemErrorCallback(resolve, err, code),\n });\n });\n }\n\n /**\n * Error callback for fetching feed items.\n * Should only call the error callback if the response is a 401, 429 or >= 500\n *\n * @param {Function} resolve - the function which will be called on error\n * @param {Object} e - the axios error\n * @param {string} code - the error code\n * @return {void}\n */\n fetchFeedItemErrorCallback(resolve: Function, e: ElementsXhrError, code: string) {\n const { status } = e;\n const shouldDisplayError = isUserCorrectableError(status);\n this.feedErrorCallback(shouldDisplayError, e, code);\n resolve();\n }\n\n /**\n * Updates a task assignment\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} taskId - ID of task to be updated\n * @param {string} taskCollaboratorId - Task assignment ID\n * @param {TaskCollabStatus} taskCollaboratorStatus - New task assignment status\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n updateTaskCollaborator = (\n file: BoxItem,\n taskId: string,\n taskCollaboratorId: string,\n taskCollaboratorStatus: TaskCollabStatus,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, taskId);\n const collaboratorsApi = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(collaboratorsApi);\n const taskCollaboratorPayload = {\n id: taskCollaboratorId,\n status: taskCollaboratorStatus,\n };\n const handleError = (e: ElementsXhrError, code: string) => {\n let errorMessage;\n switch (taskCollaboratorStatus) {\n case TASK_NEW_APPROVED:\n errorMessage = messages.taskApproveErrorMessage;\n break;\n case TASK_NEW_COMPLETED:\n errorMessage = messages.taskCompleteErrorMessage;\n break;\n case TASK_NEW_REJECTED:\n errorMessage = messages.taskRejectErrorMessage;\n break;\n default:\n errorMessage = messages.taskCompleteErrorMessage;\n }\n this.updateFeedItem(this.createFeedError(errorMessage, messages.taskActionErrorTitle), taskId);\n this.feedErrorCallback(true, e, code);\n };\n collaboratorsApi.updateTaskCollaborator({\n file,\n taskCollaborator: taskCollaboratorPayload,\n successCallback: (taskCollab: TaskCollabAssignee) => {\n this.updateTaskCollaboratorSuccessCallback(taskId, file, taskCollab, successCallback, handleError);\n },\n errorCallback: handleError,\n });\n };\n\n /**\n * Updates the task assignment state of the updated task\n *\n * @param {string} taskId - Box task id\n * @param {TaskAssignment} updatedCollaborator - New task assignment from API\n * @param {Function} successCallback - the function which will be called on success\n * @return {void}\n */\n updateTaskCollaboratorSuccessCallback = (\n taskId: string,\n file: { id: string },\n updatedCollaborator: TaskCollabAssignee,\n successCallback: Function,\n errorCallback: Function,\n ): void => {\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.tasksNewAPI.getTask({\n id: taskId,\n file,\n successCallback: task => {\n this.updateFeedItem({ ...task, isPending: false }, taskId);\n successCallback(updatedCollaborator);\n },\n errorCallback,\n });\n };\n\n /**\n * Updates a task in the new API\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} task - The update task payload object\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n updateTaskNew = async (\n file: BoxItem,\n task: TaskUpdatePayload,\n successCallback: () => void = noop,\n errorCallback: ErrorCallback = noop,\n ) => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.updateFeedItem({ isPending: true }, task.id);\n\n try {\n // create request for the size of each group by ID\n // TODO: use async/await for both creating and editing tasks\n const groupInfoPromises: Array<Promise<any>> = task.addedAssignees\n .filter(\n (assignee: SelectorItem<UserMini | GroupMini>) => assignee.item && assignee.item.type === 'group',\n )\n .map(assignee => assignee.id)\n .map(groupId => {\n return new GroupsAPI(this.options).getGroupCount({\n file,\n group: { id: groupId },\n });\n });\n\n const groupCounts: Array<{ total_count: number }> = await Promise.all(groupInfoPromises);\n const hasAnyGroupCountExceeded: boolean = groupCounts.some(\n groupInfo => groupInfo.total_count > TASK_MAX_GROUP_ASSIGNEES,\n );\n const warning = {\n code: ERROR_CODE_GROUP_EXCEEDS_LIMIT,\n type: 'warning',\n };\n\n if (hasAnyGroupCountExceeded) {\n this.feedErrorCallback(false, warning, ERROR_CODE_GROUP_EXCEEDS_LIMIT);\n return;\n }\n\n await new Promise((resolve, reject) => {\n this.tasksNewAPI.updateTaskWithDeps({\n file,\n task,\n successCallback: resolve,\n errorCallback: reject,\n });\n });\n\n await new Promise((resolve, reject) => {\n this.tasksNewAPI.getTask({\n file,\n id: task.id,\n successCallback: (taskData: Task) => {\n this.updateFeedItem(\n {\n ...taskData,\n isPending: false,\n },\n task.id,\n );\n\n resolve();\n },\n errorCallback: (e: ElementsXhrError) => {\n this.updateFeedItem({ isPending: false }, task.id);\n this.feedErrorCallback(false, e, ERROR_CODE_UPDATE_TASK);\n reject();\n },\n });\n });\n\n // everything succeeded, so call the passed in success callback\n if (!this.isDestroyed()) {\n successCallback();\n }\n } catch (e) {\n this.updateFeedItem({ isPending: false }, task.id);\n this.feedErrorCallback(false, e, ERROR_CODE_UPDATE_TASK);\n }\n };\n\n /**\n * Deletes a comment.\n *\n * @param {BoxItem} file - The file to which the comment belongs to\n * @param {string} commentId - Comment ID\n * @param {BoxCommentPermission} permissions - Permissions for the comment\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteComment = (\n file: BoxItem,\n commentId: string,\n permissions: BoxCommentPermission,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n this.commentsAPI = new CommentsAPI(this.options);\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, commentId);\n\n this.commentsAPI.deleteComment({\n file,\n commentId,\n permissions,\n successCallback: this.deleteFeedItem.bind(this, commentId, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.deleteCommentErrorCallback(e, code, commentId);\n },\n });\n };\n\n /**\n * Deletes a threaded comment (using ThreadedComments API).\n *\n * @param {BoxItem} file - The file to which the comment belongs to\n * @param {string} commentId - Comment ID\n * @param {BoxCommentPermission} permissions - Permissions for the comment\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteThreadedComment = (\n file: BoxItem,\n commentId: string,\n permissions: BoxCommentPermission,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, commentId);\n\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.deleteComment({\n fileId: file.id,\n commentId,\n permissions,\n successCallback: this.deleteFeedItem.bind(this, commentId, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.deleteCommentErrorCallback(e, code, commentId);\n },\n });\n };\n\n /**\n * Deletes a reply (using ThreadedComments API).\n *\n * @param {BoxItem} file - The file to which the comment belongs to\n * @param {string} id - id of the reply (comment)\n * @param {string} parentId - id of the parent feed item\n * @param {BoxCommentPermission} permissions - Permissions for the comment\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteReply = (\n file: BoxItem,\n id: string,\n parentId: string,\n permissions: BoxCommentPermission,\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateReplyItem({ isPending: true }, parentId, id);\n\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.deleteComment({\n fileId: file.id,\n commentId: id,\n permissions,\n successCallback: this.deleteReplyItem.bind(this, id, parentId, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.deleteReplyErrorCallback(e, code, id, parentId);\n },\n });\n };\n\n /**\n * Error callback for deleting a comment\n *\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code\n * @param {string} commentId - the comment id\n * @return {void}\n */\n deleteCommentErrorCallback = (e: ElementsXhrError, code: string, commentId: string) => {\n this.updateFeedItem(this.createFeedError(messages.commentDeleteErrorMessage), commentId);\n this.feedErrorCallback(true, e, code);\n };\n\n /**\n * Error callback for deleting a reply\n *\n * @param {ElementsXhrError} error - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the reply (comment) id\n * @param {string} parentId - the comment id of the parent feed item\n * @return {void}\n */\n deleteReplyErrorCallback = (error: ElementsXhrError, code: string, id: string, parentId: string) => {\n this.updateReplyItem(this.createFeedError(messages.commentDeleteErrorMessage), parentId, id);\n this.feedErrorCallback(true, error, code);\n };\n\n /**\n * Creates a task.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} message - Task text\n * @param {Array} assignees - List of assignees\n * @param {number} dueAt - Task's due date\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n createTaskNew = (\n file: BoxItem,\n currentUser: User,\n message: string,\n assignees: SelectorItems<>,\n taskType: TaskType,\n dueAt: ?string,\n completionRule: TaskCompletionRule,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n const uuid = uniqueId('task_');\n let dueAtString;\n if (dueAt) {\n const dueAtDate: Date = new Date(dueAt);\n dueAtString = dueAtDate.toISOString();\n }\n\n // TODO: make pending task generator a function\n const pendingTask: TaskNew = {\n created_by: {\n type: 'task_collaborator',\n target: currentUser,\n id: uniqueId(),\n role: 'CREATOR',\n status: TASK_NEW_INITIAL_STATUS,\n },\n completion_rule: completionRule,\n created_at: new Date().toISOString(),\n due_at: dueAtString,\n id: uuid,\n description: message,\n type: FEED_ITEM_TYPE_TASK,\n assigned_to: {\n entries: assignees.map((assignee: SelectorItem<UserMini | GroupMini>) => ({\n id: uniqueId(),\n target: { ...assignee, avatar_url: '', type: 'user' },\n status: TASK_NEW_INITIAL_STATUS,\n permissions: {\n can_delete: false,\n can_update: false,\n },\n role: 'ASSIGNEE',\n type: 'task_collaborator',\n })),\n limit: 10,\n next_marker: null,\n },\n permissions: {\n can_update: false,\n can_delete: false,\n can_create_task_collaborator: false,\n can_create_task_link: false,\n },\n task_links: {\n entries: [\n {\n id: uniqueId(),\n type: 'task_link',\n target: {\n type: 'file',\n ...file,\n },\n permissions: {\n can_delete: false,\n can_update: false,\n },\n },\n ],\n limit: 1,\n next_marker: null,\n },\n task_type: taskType,\n status: TASK_NEW_NOT_STARTED,\n };\n\n const taskPayload: TaskPayload = {\n description: message,\n due_at: dueAtString,\n task_type: taskType,\n completion_rule: completionRule,\n };\n\n // create request for the size of each group by ID\n const groupInfoPromises: Array<Promise<any>> = assignees\n .filter((assignee: SelectorItem<UserMini | GroupMini>) => (assignee.item && assignee.item.type) === 'group')\n .map(assignee => assignee.id)\n .map(groupId => {\n return new GroupsAPI(this.options).getGroupCount({\n file,\n group: { id: groupId },\n });\n });\n\n // Fetch each group size in parallel --> return an array of group sizes\n Promise.all(groupInfoPromises)\n .then((groupCounts: Array<{ total_count: number }>) => {\n const hasAnyGroupCountExceeded: boolean = groupCounts.some(\n groupInfo => groupInfo.total_count > TASK_MAX_GROUP_ASSIGNEES,\n );\n const warning = {\n code: ERROR_CODE_GROUP_EXCEEDS_LIMIT,\n type: 'warning',\n };\n if (hasAnyGroupCountExceeded) {\n this.feedErrorCallback(false, warning, ERROR_CODE_GROUP_EXCEEDS_LIMIT);\n return;\n }\n\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.tasksNewAPI.createTaskWithDeps({\n file,\n task: taskPayload,\n assignees,\n successCallback: (taskWithDepsData: any) => {\n this.addPendingItem(this.file.id, currentUser, pendingTask);\n this.updateFeedItem(\n {\n ...taskWithDepsData,\n task_links: {\n entries: taskWithDepsData.task_links,\n next_marker: null,\n limit: 1,\n },\n assigned_to: {\n entries: taskWithDepsData.assigned_to,\n next_marker: null,\n limit: taskWithDepsData.assigned_to.length,\n },\n isPending: false,\n },\n uuid,\n );\n successCallback(taskWithDepsData);\n },\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.feedErrorCallback(false, e, code);\n },\n });\n })\n .catch(error => {\n this.feedErrorCallback(false, error, ERROR_CODE_CREATE_TASK);\n });\n };\n\n /**\n * Creates a task group via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task|TaskUpdatePayload} task - The newly created or existing task from the API\n * @param {SelectorItem} assignee - The user assigned to this task\n * @param {Function} errorCallback - Task create error callback\n * @return {Promise<TaskAssignment>}\n */\n createTaskCollaboratorsforGroup(\n file: BoxItem,\n task: Task | TaskUpdatePayload,\n assignee: SelectorItem<UserMini | GroupMini>,\n ): Promise<Array<TaskCollabAssignee>> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n return new Promise((resolve, reject) => {\n const taskCollaboratorsAPI = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(taskCollaboratorsAPI);\n taskCollaboratorsAPI.createTaskCollaboratorsforGroup({\n file,\n task,\n group: assignee,\n successCallback: resolve,\n errorCallback: (e: ElementsXhrError) => {\n reject(e);\n },\n });\n });\n }\n\n /**\n * Creates a task collaborator via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task|TaskUpdatePayload} task - The newly created or existing task from the API\n * @param {SelectorItem} assignee - The user assigned to this task\n * @param {Function} errorCallback - Task create error callback\n * @return {Promise<TaskAssignment>}\n */\n createTaskCollaborator(\n file: BoxItem,\n task: Task | TaskUpdatePayload,\n assignee: SelectorItem<UserMini | GroupMini>,\n ): Promise<TaskCollabAssignee> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n return new Promise((resolve, reject) => {\n const taskCollaboratorsAPI = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(taskCollaboratorsAPI);\n\n taskCollaboratorsAPI.createTaskCollaborator({\n file,\n task,\n user: assignee,\n successCallback: resolve,\n errorCallback: (e: ElementsXhrError) => {\n reject(e);\n },\n });\n });\n }\n\n /**\n * Deletes a task collaborator via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task|TaskUpdatePayload} task - The newly deleted or existing task from the API\n * @param {TaskCollabAssignee} assignee - The user assigned to this task\n * @param {Function} errorCallback - Task delete error callback\n * @return {Promise<TaskAssignment>}\n */\n deleteTaskCollaborator(\n file: BoxItem,\n task: Task | TaskUpdatePayload,\n assignee: TaskCollabAssignee,\n ): Promise<TaskCollabAssignee> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file.id = file.id;\n return new Promise((resolve, reject) => {\n const taskCollaboratorsAPI = new TaskCollaboratorsAPI(this.options);\n this.taskCollaboratorsAPI.push(taskCollaboratorsAPI);\n\n taskCollaboratorsAPI.deleteTaskCollaborator({\n file,\n task,\n taskCollaborator: { id: assignee.id },\n successCallback: resolve,\n errorCallback: (e: ElementsXhrError) => {\n reject(e);\n },\n });\n });\n }\n\n /**\n * Creates a task link via the API.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Task} task - The newly created task from the API\n * @param {Function} errorCallback - Task create error callback\n * @return {Promise<TaskAssignment}\n */\n createTaskLink(file: BoxItem, task: Task): Promise<TaskLink> {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n return new Promise((resolve, reject) => {\n const taskLinksAPI = new TaskLinksAPI(this.options);\n this.taskLinksAPI.push(taskLinksAPI);\n\n taskLinksAPI.createTaskLink({\n file,\n task,\n successCallback: resolve,\n errorCallback: reject,\n });\n });\n }\n\n /**\n * Deletes a task in the new API\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} taskId - The task's id\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteTaskNew = (\n file: BoxItem,\n task: TaskNew,\n successCallback: (taskId: string) => void = noop,\n errorCallback: ErrorCallback = noop,\n ) => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.tasksNewAPI = new TasksNewAPI(this.options);\n this.updateFeedItem({ isPending: true }, task.id);\n\n this.tasksNewAPI.deleteTask({\n file,\n task,\n successCallback: this.deleteFeedItem.bind(this, task.id, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.updateFeedItem(this.createFeedError(messages.taskDeleteErrorMessage), task.id);\n this.feedErrorCallback(true, e, code);\n },\n });\n };\n\n /**\n * Deletes a feed item from the cache\n *\n * @param {string} id - The id of the feed item to be deleted\n * @param {Function} successCallback - function to be called after the delete\n */\n deleteFeedItem = (id: string, successCallback: Function = noop) => {\n const cachedItems = this.getCachedItems(this.file.id);\n if (cachedItems) {\n const feedItems = cachedItems.items.filter(feedItem => feedItem.id !== id);\n this.setCachedItems(this.file.id, feedItems);\n\n if (!this.isDestroyed()) {\n successCallback(id);\n }\n }\n };\n\n /**\n * Deletes a reply from the cache\n *\n * @param {string} id - The id of the feed item to be deleted\n * @param {string} parentId - The id of the parent feed item\n * @param {Function} successCallback - function to be called after the delete\n */\n deleteReplyItem = (\n id: string,\n parentId: string,\n successCallback: (id: string, parentId: string) => void = noop,\n ) => {\n const cachedItems = this.getCachedItems(this.file.id) || { items: [], errors: [] };\n const feedItems = cachedItems.items.map(item => {\n if (item.id !== parentId) {\n return item;\n }\n if (item.type === FEED_ITEM_TYPE_ANNOTATION) {\n return getItemWithFilteredReplies<Annotation>(item, id);\n }\n if (item.type === FEED_ITEM_TYPE_COMMENT) {\n return getItemWithFilteredReplies<Comment>(item, id);\n }\n return item;\n });\n this.setCachedItems(this.file.id, feedItems);\n\n if (!this.isDestroyed()) {\n successCallback(id, parentId);\n }\n };\n\n /**\n * Network error callback\n *\n * @param {boolean} hasError - true if the UI should display an error\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code for the error which occured\n * @return {void}\n */\n feedErrorCallback = (hasError: boolean = false, e: ElementsXhrError, code: string): void => {\n if (hasError) {\n this.errors.push({ ...e, code });\n }\n\n if (!this.isDestroyed() && this.errorCallback) {\n this.errorCallback(e, code, {\n error: e,\n [IS_ERROR_DISPLAYED]: hasError,\n });\n }\n\n console.error(e); // eslint-disable-line no-console\n };\n\n /**\n * Add a placeholder pending feed item.\n *\n * @param {string} id - the file id\n * @param {Object} currentUser - the user who performed the action\n * @param {Object} itemBase - Base properties for item to be added to the feed as pending.\n * @return {void}\n */\n addPendingItem = (id: string, currentUser: User, itemBase: Object): Comment | Task | TaskNew | BoxItemVersion => {\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const date = new Date().toISOString();\n const pendingFeedItem = {\n created_at: date,\n created_by: currentUser,\n modified_at: date,\n isPending: true,\n ...itemBase,\n };\n const cachedItems = this.getCachedItems(this.file.id);\n const feedItems = cachedItems ? cachedItems.items : [];\n const feedItemsWithPendingItem = [...feedItems, pendingFeedItem];\n this.setCachedItems(id, feedItemsWithPendingItem);\n\n return pendingFeedItem;\n };\n\n /**\n * Add a placeholder pending comment (reply).\n *\n * @param {string} parentId - id of parent comment or annotation\n * @param {Object} currentUser - the user who performed the action\n * @param {Object} commentBase - Base properties for reply (comment) to be added to the feed as pending.\n * @return {Comment} - newly created pending reply\n */\n addPendingReply = (parentId: string, currentUser: User, commentBase: Object): Comment => {\n if (!this.file.id) {\n throw getBadItemError();\n }\n if (!currentUser) {\n throw getBadUserError();\n }\n\n const date = new Date().toISOString();\n const pendingReply: Comment = {\n created_at: date,\n created_by: currentUser,\n modified_at: date,\n isPending: true,\n ...commentBase,\n };\n\n const cachedItems = this.getCachedItems(this.file.id);\n if (cachedItems) {\n const updatedFeedItems = cachedItems.items.map(item => {\n if (item.id === parentId && item.type === FEED_ITEM_TYPE_COMMENT) {\n return getItemWithPendingReply<Comment>(item, pendingReply);\n }\n if (item.id === parentId && item.type === FEED_ITEM_TYPE_ANNOTATION) {\n return getItemWithPendingReply<Annotation>(item, pendingReply);\n }\n return item;\n });\n\n this.setCachedItems(this.file.id, updatedFeedItems);\n }\n\n return pendingReply;\n };\n\n /**\n * Callback for successful creation of a Comment.\n *\n * @param {Comment} commentData - API returned Comment\n * @param {string} id - ID of the feed item to update with the new comment data\n * @return {void}\n */\n createCommentSuccessCallback = (commentData: Comment, id: string, successCallback: Function): void => {\n const { message = '', tagged_message = '' } = commentData;\n // Comment component uses tagged_message only\n commentData.tagged_message = tagged_message || message;\n\n this.updateFeedItem(\n {\n ...commentData,\n isPending: false,\n },\n id,\n );\n\n if (!this.isDestroyed()) {\n successCallback(commentData);\n }\n };\n\n /**\n * Callback for failed creation of a Comment.\n *\n * @param {Object} e - The axios error\n * @param {string} code - the error code\n * @param {string} id - ID of the feed item to update\n * @return {void}\n */\n createCommentErrorCallback = (e: ElementsXhrError, code: string, id: string) => {\n const errorMessage =\n e.status === HTTP_STATUS_CODE_CONFLICT\n ? messages.commentCreateConflictMessage\n : messages.commentCreateErrorMessage;\n this.updateFeedItem(this.createFeedError(errorMessage), id);\n this.feedErrorCallback(false, e, code);\n };\n\n /**\n * Callback for successful creation of a Comment.\n *\n * @param {Comment} commentData - API returned Comment\n * @param {string} parentId - ID of the parent feed item\n * @param {string} id - ID of the reply to update with the new comment data\n * @param {Function} successCallback - success callback\n * @return {void}\n */\n createReplySuccessCallback = (\n commentData: Comment,\n parentId: string,\n id: string,\n successCallback: Function,\n ): void => {\n this.updateReplyItem(\n {\n ...commentData,\n isPending: false,\n },\n parentId,\n id,\n );\n\n if (!this.isDestroyed()) {\n successCallback(commentData);\n }\n };\n\n /**\n * Callback for failed creation of a reply.\n *\n * @param {ElementsXhrError} error - The axios error\n * @param {string} code - the error code\n * @param {string} parentId - ID of the parent feed item\n * @param {string} id - ID of the feed item to update\n * @return {void}\n */\n createReplyErrorCallback = (error: ElementsXhrError, code: string, parentId: string, id: string) => {\n const errorMessage =\n error.status === HTTP_STATUS_CODE_CONFLICT\n ? messages.commentCreateConflictMessage\n : messages.commentCreateErrorMessage;\n this.updateReplyItem(this.createFeedError(errorMessage), parentId, id);\n this.feedErrorCallback(false, error, code);\n };\n\n /**\n * Constructs an error object that renders to an inline feed error\n *\n * @param {string} message - The error message body.\n * @param {string} title - The error message title.\n * @return {Object} An error message object\n */\n createFeedError(message: MessageDescriptor, title: MessageDescriptor = commonMessages.errorOccured) {\n return {\n error: { message, title },\n };\n }\n\n /**\n * Replace a feed item with new feed item data.\n *\n * @param {Object} updates - The new data to be applied to the feed item.\n * @param {string} id - ID of the feed item to replace.\n * @return {void}\n */\n updateFeedItem = (updates: Object, id: string): ?FeedItems => {\n if (!this.file.id) {\n throw getBadItemError();\n }\n\n const cachedItems = this.getCachedItems(this.file.id);\n if (cachedItems) {\n const updatedFeedItems = cachedItems.items.map((item: FeedItem) => {\n if (item.id === id) {\n return {\n ...item,\n ...updates,\n };\n }\n\n return item;\n });\n\n this.setCachedItems(this.file.id, updatedFeedItems);\n return updatedFeedItems;\n }\n\n return null;\n };\n\n /**\n * Replace a reply of feed item with new comment data.\n *\n * @param {Object} replyUpdates - New data to be applied to the reply.\n * @param {string} parentId - ID of the parent feed item.\n * @param {string} id - ID of the reply to replace.\n * @return {void}\n */\n updateReplyItem = (replyUpdates: Object, parentId: string, id: string) => {\n if (!this.file.id) {\n throw getBadItemError();\n }\n\n const getItemWithUpdatedReply = <T: { replies?: Array<Comment> }>(\n item: T,\n replyId: string,\n updates: Object,\n ): T => {\n const updatedItem: T = { ...item };\n if (updatedItem.replies) {\n updatedItem.replies = updatedItem.replies.map(reply => {\n if (reply.id === replyId) {\n return {\n ...reply,\n ...updates,\n };\n }\n return reply;\n });\n }\n return updatedItem;\n };\n\n const cachedItems = this.getCachedItems(this.file.id);\n if (cachedItems) {\n const updatedFeedItems = cachedItems.items.map((item: FeedItem) => {\n if (item.id === parentId && item.type === FEED_ITEM_TYPE_COMMENT) {\n return getItemWithUpdatedReply<Comment>(item, id, replyUpdates);\n }\n if (item.id === parentId && item.type === FEED_ITEM_TYPE_ANNOTATION) {\n return getItemWithUpdatedReply<Annotation>(item, id, replyUpdates);\n }\n return item;\n });\n\n this.setCachedItems(this.file.id, updatedFeedItems);\n }\n };\n\n /**\n * Create a comment, and make a pending item to be replaced once the API is successful.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} text - the comment text\n * @param {boolean} hasMention - true if there is an @mention in the text\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n createComment = (\n file: BoxItem,\n currentUser: User,\n text: string,\n hasMention: boolean,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n const uuid = uniqueId('comment_');\n const commentData = {\n id: uuid,\n tagged_message: text,\n type: FEED_ITEM_TYPE_COMMENT,\n };\n\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.addPendingItem(this.file.id, currentUser, commentData);\n\n const message = {};\n if (hasMention) {\n message.taggedMessage = text;\n } else {\n message.message = text;\n }\n\n this.commentsAPI = new CommentsAPI(this.options);\n\n this.commentsAPI.createComment({\n file,\n ...message,\n successCallback: (comment: Comment) => {\n this.createCommentSuccessCallback(comment, uuid, successCallback);\n },\n errorCallback: (e: ErrorResponseData, code: string) => {\n this.createCommentErrorCallback(e, code, uuid);\n },\n });\n };\n\n /**\n * Create a threaded comment (using ThreadedComments API),\n * and make a pending item to be replaced once the API is successful.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} text - the comment text\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n createThreadedComment = (\n file: BoxItem,\n currentUser: User,\n text: string,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n const uuid = uniqueId('comment_');\n const commentData = {\n id: uuid,\n tagged_message: text,\n type: FEED_ITEM_TYPE_COMMENT,\n };\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.addPendingItem(this.file.id, currentUser, commentData);\n\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.createComment({\n file,\n message: text,\n successCallback: (comment: Comment) => {\n this.createCommentSuccessCallback(comment, uuid, successCallback);\n },\n errorCallback: (e: ErrorResponseData, code: string) => {\n this.createCommentErrorCallback(e, code, uuid);\n },\n });\n };\n\n /**\n * Create a reply to annotation or comment, and make a pending item to be replaced once the API is successful.\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {Object} currentUser - the user who performed the action\n * @param {string} parentId - id of the parent item\n * @param {CommentFeedItemType} parentType - type of the parent item\n * @param {string} text - the comment text\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n createReply(\n file: BoxItem,\n currentUser: User,\n parentId: string,\n parentType: CommentFeedItemType,\n text: string,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void {\n const { id, permissions } = file;\n if (!id || !permissions) {\n throw getBadItemError();\n }\n\n const uuid = uniqueId('comment_');\n const commentData = {\n id: uuid,\n tagged_message: text,\n type: FEED_ITEM_TYPE_COMMENT,\n };\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.addPendingReply(parentId, currentUser, commentData);\n\n const successCallbackFn = (comment: Comment) => {\n this.createReplySuccessCallback(comment, parentId, uuid, successCallback);\n };\n const errorCallbackFn = (error: ErrorResponseData, code: string) => {\n this.createReplyErrorCallback(error, code, parentId, uuid);\n };\n\n if (parentType === FEED_ITEM_TYPE_ANNOTATION) {\n this.annotationsAPI = new AnnotationsAPI(this.options);\n\n this.annotationsAPI.createAnnotationReply(\n file.id,\n parentId,\n permissions,\n text,\n successCallbackFn,\n errorCallbackFn,\n );\n } else if (parentType === FEED_ITEM_TYPE_COMMENT) {\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.createCommentReply({\n fileId: file.id,\n commentId: parentId,\n permissions,\n message: text,\n successCallback: successCallbackFn,\n errorCallback: errorCallbackFn,\n });\n }\n }\n\n /**\n * Update a comment\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} commentId - Comment ID\n * @param {string} text - the comment text\n * @param {boolean} hasMention - true if there is an @mention in the text\n * @param {BoxCommentPermission} permissions - Permissions to attach to the app activity items\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n updateComment = (\n file: BoxItem,\n commentId: string,\n text: string,\n hasMention: boolean,\n permissions: BoxCommentPermission,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n const commentData = {\n tagged_message: text,\n };\n\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ ...commentData, isPending: true }, commentId);\n\n const message = {};\n if (hasMention) {\n message.tagged_message = text;\n } else {\n message.message = text;\n }\n\n this.commentsAPI = new CommentsAPI(this.options);\n\n this.commentsAPI.updateComment({\n file,\n commentId,\n permissions,\n ...message,\n successCallback: (comment: Comment) => {\n // use the request payload instead of response in the\n // feed item update because response may not contain\n // the tagged version of the message\n this.updateFeedItem(\n {\n ...message,\n isPending: false,\n },\n commentId,\n );\n if (!this.isDestroyed()) {\n successCallback(comment);\n }\n },\n errorCallback: (e: ErrorResponseData, code: string) => {\n this.updateCommentErrorCallback(e, code, commentId);\n },\n });\n };\n\n /**\n * Update a threaded comment\n *\n * @param {BoxItem} file - The file to which the task is assigned\n * @param {string} commentId - Comment ID\n * @param {string} text - the comment text\n * @param {FeedItemStatus} status - status of the comment\n * @param {BoxCommentPermission} permissions - Permissions to attach to the app activity items\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n updateThreadedComment = (\n file: BoxItem,\n commentId: string,\n text?: string,\n status?: FeedItemStatus,\n permissions: BoxCommentPermission,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n if (!text && !status) {\n throw getMissingItemTextOrStatus();\n }\n\n const commentData = {};\n if (text) {\n commentData.tagged_message = text;\n }\n if (status) {\n commentData.status = status;\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ ...commentData, isPending: true }, commentId);\n\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.updateComment({\n fileId: file.id,\n commentId,\n permissions,\n message: text,\n status,\n successCallback: (comment: Comment) => {\n this.updateFeedItem(\n {\n ...comment,\n isPending: false,\n },\n commentId,\n );\n if (!this.isDestroyed()) {\n successCallback(comment);\n }\n },\n errorCallback: (e: ErrorResponseData, code: string) => {\n this.updateCommentErrorCallback(e, code, commentId);\n },\n });\n };\n\n /**\n * Update a reply\n *\n * @param {BoxItem} file - The file to which the reply with its parent is assigned\n * @param {string} id - id of the reply\n * @param {string} parentId - id of the parent item\n * @param {string} text - the updated text\n * @param {BoxCommentPermission} permissions - Permissions to attach to the app activity items\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @return {void}\n */\n updateReply = (\n file: BoxItem,\n id: string,\n parentId: string,\n text: string,\n permissions: BoxCommentPermission,\n successCallback: (comment: Comment) => void,\n errorCallback: ErrorCallback,\n ): void => {\n if (!file.id) {\n throw getBadItemError();\n }\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateReplyItem({ tagged_message: text, isPending: true }, parentId, id);\n\n this.threadedCommentsAPI = new ThreadedCommentsAPI(this.options);\n\n this.threadedCommentsAPI.updateComment({\n fileId: file.id,\n commentId: id,\n permissions,\n message: text,\n undefined,\n successCallback: (comment: Comment) => {\n this.updateReplyItem(\n {\n ...comment,\n isPending: false,\n },\n parentId,\n id,\n );\n if (!this.isDestroyed()) {\n successCallback(comment);\n }\n },\n errorCallback: (error: ErrorResponseData, code: string) => {\n this.updateReplyErrorCallback(error, code, id, parentId);\n },\n });\n };\n\n destroyTaskCollaborators() {\n if (Array.isArray(this.taskCollaboratorsAPI)) {\n this.taskCollaboratorsAPI.forEach(api => api.destroy());\n this.taskCollaboratorsAPI = [];\n }\n }\n\n destroyTaskLinks() {\n if (Array.isArray(this.taskLinksAPI)) {\n this.taskLinksAPI.forEach(api => api.destroy());\n this.taskLinksAPI = [];\n }\n }\n\n /**\n * Fetches app activities for a file\n * @param {BoxItemPermission} permissions - Permissions to attach to the app activity items\n *\n * @return {Promise} - the feed items\n */\n fetchAppActivity(permissions: BoxItemPermission): Promise<?AppActivityItems> {\n this.appActivityAPI = new AppActivityAPI(this.options);\n\n return new Promise(resolve => {\n this.appActivityAPI.getAppActivity(\n this.file.id,\n permissions,\n resolve,\n this.fetchFeedItemErrorCallback.bind(this, resolve),\n );\n });\n }\n\n /**\n * Deletes an app activity item.\n *\n * @param {BoxItem} file - The file to which the app activity belongs to\n * @param {string} appActivityId - The app activity item id to delete\n * @param {Function} successCallback - the function which will be called on success\n * @param {Function} errorCallback - the function which will be called on error\n * @return {void}\n */\n deleteAppActivity = (\n file: BoxItem,\n appActivityId: string,\n successCallback: Function,\n errorCallback: ErrorCallback,\n ): void => {\n const { id } = file;\n if (!id) {\n throw getBadItemError();\n }\n\n this.appActivityAPI = new AppActivityAPI(this.options);\n\n this.file = file;\n this.errorCallback = errorCallback;\n this.updateFeedItem({ isPending: true }, appActivityId);\n\n this.appActivityAPI.deleteAppActivity({\n id,\n appActivityId,\n successCallback: this.deleteFeedItem.bind(this, appActivityId, successCallback),\n errorCallback: (e: ElementsXhrError, code: string) => {\n this.deleteAppActivityErrorCallback(e, code, appActivityId);\n },\n });\n };\n\n /**\n * Error callback for deleting an app activity item\n *\n * @param {ElementsXhrError} e - the error returned by the API\n * @param {string} code - the error code\n * @param {string} id - the app activity id\n * @return {void}\n */\n deleteAppActivityErrorCallback = (e: ElementsXhrError, code: string, id: string) => {\n this.updateFeedItem(this.createFeedError(messages.appActivityDeleteErrorMessage), id);\n this.feedErrorCallback(true, e, code);\n };\n\n /**\n * Destroys all the task feed API's\n *\n * @return {void}\n */\n destroy() {\n super.destroy();\n\n if (this.annotationsAPI) {\n this.annotationsAPI.destroy();\n delete this.annotationsAPI;\n }\n\n if (this.commentsAPI) {\n this.commentsAPI.destroy();\n delete this.commentsAPI;\n }\n\n if (this.threadedCommentsAPI) {\n this.threadedCommentsAPI.destroy();\n delete this.threadedCommentsAPI;\n }\n\n if (this.versionsAPI) {\n this.versionsAPI.destroy();\n delete this.versionsAPI;\n }\n\n if (this.appActivityAPI) {\n this.appActivityAPI.destroy();\n delete this.appActivityAPI;\n }\n\n if (this.tasksNewAPI) {\n this.tasksNewAPI.destroy();\n delete this.tasksNewAPI;\n }\n\n this.destroyTaskCollaborators();\n this.destroyTaskLinks();\n }\n}\n\nexport default Feed;\n"],"file":"Feed.js"}
|
|
@@ -76,6 +76,23 @@ function (_MarkerBasedAPI) {
|
|
|
76
76
|
}));
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
+
_defineProperty(_assertThisInitialized(_this), "getCollaboratorsWithQuery", function (fileId, successCallback, errorCallback, searchStr) {
|
|
80
|
+
var _ref = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
|
|
81
|
+
_ref$includeGroups = _ref.includeGroups,
|
|
82
|
+
includeGroups = _ref$includeGroups === void 0 ? false : _ref$includeGroups;
|
|
83
|
+
|
|
84
|
+
// Do not fetch without filter
|
|
85
|
+
if (!searchStr || searchStr.trim() === '') {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
_this.getFileCollaborators(fileId, successCallback, errorCallback, {
|
|
90
|
+
filter_term: searchStr,
|
|
91
|
+
include_groups: includeGroups,
|
|
92
|
+
include_uploader_collabs: false
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
79
96
|
return _this;
|
|
80
97
|
}
|
|
81
98
|
|
|
@@ -127,6 +144,18 @@ function (_MarkerBasedAPI) {
|
|
|
127
144
|
requestData: requestData
|
|
128
145
|
});
|
|
129
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Fetches file @mention's
|
|
149
|
+
*
|
|
150
|
+
* @oaram {string} fileId
|
|
151
|
+
* @param {Function} successCallback
|
|
152
|
+
* @param {Function} errorCallback
|
|
153
|
+
* @param {string} searchStr - Search string to filter file collaborators by
|
|
154
|
+
* @param {Object} [options]
|
|
155
|
+
* @param {boolean} [options.includeGroups] - return groups as well as users
|
|
156
|
+
* @return {void}
|
|
157
|
+
*/
|
|
158
|
+
|
|
130
159
|
}]);
|
|
131
160
|
|
|
132
161
|
return FileCollaborators;
|
|
@@ -87,6 +87,36 @@ class FileCollaborators extends MarkerBasedAPI {
|
|
|
87
87
|
requestData,
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Fetches file @mention's
|
|
93
|
+
*
|
|
94
|
+
* @oaram {string} fileId
|
|
95
|
+
* @param {Function} successCallback
|
|
96
|
+
* @param {Function} errorCallback
|
|
97
|
+
* @param {string} searchStr - Search string to filter file collaborators by
|
|
98
|
+
* @param {Object} [options]
|
|
99
|
+
* @param {boolean} [options.includeGroups] - return groups as well as users
|
|
100
|
+
* @return {void}
|
|
101
|
+
*/
|
|
102
|
+
getCollaboratorsWithQuery = (
|
|
103
|
+
fileId: string,
|
|
104
|
+
successCallback: ({ entries: Array<SelectorItem<UserMini | GroupMini>>, next_marker: ?string }) => void,
|
|
105
|
+
errorCallback: ElementsErrorCallback,
|
|
106
|
+
searchStr: string,
|
|
107
|
+
{ includeGroups = false }: { includeGroups: boolean } = {},
|
|
108
|
+
) => {
|
|
109
|
+
// Do not fetch without filter
|
|
110
|
+
if (!searchStr || searchStr.trim() === '') {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this.getFileCollaborators(fileId, successCallback, errorCallback, {
|
|
115
|
+
filter_term: searchStr,
|
|
116
|
+
include_groups: includeGroups,
|
|
117
|
+
include_uploader_collabs: false,
|
|
118
|
+
});
|
|
119
|
+
};
|
|
90
120
|
}
|
|
91
121
|
|
|
92
122
|
export default FileCollaborators;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/api/FileCollaborators.js"],"names":["MarkerBasedAPI","DEFAULT_MAX_COLLABORATORS","FileCollaborators","data","isDestroyed","successCallback","collaboratorSelectorItems","entries","map","collab","item","type","email","login","id","name","
|
|
1
|
+
{"version":3,"sources":["../../src/api/FileCollaborators.js"],"names":["MarkerBasedAPI","DEFAULT_MAX_COLLABORATORS","FileCollaborators","data","isDestroyed","successCallback","collaboratorSelectorItems","entries","map","collab","item","type","email","login","id","name","fileId","errorCallback","searchStr","includeGroups","trim","getFileCollaborators","filter_term","include_groups","include_uploader_collabs","Error","getBaseApiUrl","requestData","limit","markerGet"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAMA,OAAOA,cAAP,MAA2B,kBAA3B;AACA,SAASC,yBAAT,QAA0C,cAA1C;;IASMC,iB;;;;;;;;;;;;;;;;;;qEAoBe,UAACC,IAAD,EAA0C;AACvD,UAAI,MAAKC,WAAL,MAAsB,OAAO,MAAKC,eAAZ,KAAgC,UAA1D,EAAsE;AAClE;AACH,OAHsD,CAKvD;;;AACA,UAAMC,yBAA8D,GAAGH,IAAI,CAACI,OAAL,CAAaC,GAAb,CACnE,UAACC,MAAD,EAAkC;AAC9B,YAAIC,IAAJ;;AACA,YAAID,MAAM,CAACE,IAAP,KAAgB,OAApB,EAA6B;AACzBD,UAAAA,IAAI,GAAGD,MAAP,CADyB,CACV;AAClB,SAFD,MAEO;AACHC,UAAAA,IAAI,GAAGD,MAAP;AACAC,UAAAA,IAAI,CAACE,KAAL,GAAaF,IAAI,CAACG,KAAlB,CAFG,CAEsB;AAC5B;;AACD,eAAO;AACHC,UAAAA,EAAE,EAAEL,MAAM,CAACK,EADR;AAEHC,UAAAA,IAAI,EAAEN,MAAM,CAACM,IAFV;AAGHL,UAAAA,IAAI,EAAJA;AAHG,SAAP;AAKH,OAdkE,CAAvE;;AAiBA,YAAKL,eAAL,mBAA0BF,IAA1B;AAAgCI,QAAAA,OAAO,EAAED;AAAzC;AACH,K;;gFAyC2B,UACxBU,MADwB,EAExBX,eAFwB,EAGxBY,aAHwB,EAIxBC,SAJwB,EAMvB;AAAA,qFADuD,EACvD;AAAA,oCADCC,aACD;AAAA,UADCA,aACD,mCADiB,KACjB;;AACD;AACA,UAAI,CAACD,SAAD,IAAcA,SAAS,CAACE,IAAV,OAAqB,EAAvC,EAA2C;AACvC;AACH;;AAED,YAAKC,oBAAL,CAA0BL,MAA1B,EAAkCX,eAAlC,EAAmDY,aAAnD,EAAkE;AAC9DK,QAAAA,WAAW,EAAEJ,SADiD;AAE9DK,QAAAA,cAAc,EAAEJ,aAF8C;AAG9DK,QAAAA,wBAAwB,EAAE;AAHoC,OAAlE;AAKH,K;;;;;;;;AArGD;;;;;;2BAMOV,E,EAAoB;AACvB,UAAI,CAACA,EAAL,EAAS;AACL,cAAM,IAAIW,KAAJ,CAAU,kBAAV,CAAN;AACH;;AAED,uBAAU,KAAKC,aAAL,EAAV,oBAAwCZ,EAAxC;AACH;AAED;;;;;;;;;AA+BA;;;;;;;;;;yCAWIA,E,EACAT,e,EACAY,a,EAGI;AAAA,UAFJU,WAEI,uEAFkB,EAElB;AAAA,UADJC,KACI,uEADY3B,yBACZ;AACJ;AACA;AACA,WAAK4B,SAAL,CAAe;AACXf,QAAAA,EAAE,EAAFA,EADW;AAEXc,QAAAA,KAAK,EAALA,KAFW;AAGXvB,QAAAA,eAAe,EAAfA,eAHW;AAIXY,QAAAA,aAAa,EAAbA,aAJW;AAKXU,QAAAA,WAAW,EAAXA;AALW,OAAf;AAOH;AAED;;;;;;;;;;;;;;;EA1E4B3B,c;;AAyGhC,eAAeE,iBAAf","sourcesContent":["/**\n * @flow\n * @file Helper for the box collaborators API\n * @author Box\n */\n\nimport MarkerBasedAPI from './MarkerBasedAPI';\nimport { DEFAULT_MAX_COLLABORATORS } from '../constants';\nimport type { ElementsErrorCallback } from '../common/types/api';\nimport type { SelectorItem, SelectorItems, UserMini, GroupMini } from '../common/types/core';\n\ntype CollaboratorsAPIResponse = {\n entries: Array<GroupMini | UserMini>,\n next_marker: ?string,\n};\n\nclass FileCollaborators extends MarkerBasedAPI {\n /**\n * API URL for comments\n *\n * @param {string} [id] - a box file id\n * @return {string} base url for files\n */\n getUrl(id: string): string {\n if (!id) {\n throw new Error('Missing file id!');\n }\n\n return `${this.getBaseApiUrl()}/files/${id}/collaborators`;\n }\n\n /**\n * Transform result of API response\n *\n * @param {Object} data the response data\n */\n successHandler = (data: CollaboratorsAPIResponse): void => {\n if (this.isDestroyed() || typeof this.successCallback !== 'function') {\n return;\n }\n\n // Transform into \"mention selector\" format:\n const collaboratorSelectorItems: SelectorItems<UserMini | GroupMini> = data.entries.map(\n (collab: UserMini | GroupMini) => {\n let item;\n if (collab.type === 'group') {\n item = collab; // flow needs assignment to happen after type refinement\n } else {\n item = collab;\n item.email = item.login; // transform user object\n }\n return {\n id: collab.id,\n name: collab.name,\n item,\n };\n },\n );\n\n this.successCallback({ ...data, entries: collaboratorSelectorItems });\n };\n\n /**\n * API for fetching collaborators on a file\n *\n * @param {string} id - the file id\n * @param {Function} successCallback - the success callback\n * @param {Function} errorCallback - the error callback\n * @param {Object} requestData - any additional request data\n * @param {number} limit - the max number of collaborators to return\n * @returns {void}\n */\n getFileCollaborators(\n id: string,\n successCallback: ({ entries: Array<SelectorItem<UserMini | GroupMini>>, next_marker: ?string }) => void,\n errorCallback: ElementsErrorCallback,\n requestData: Object = {},\n limit: number = DEFAULT_MAX_COLLABORATORS,\n ): void {\n // NOTE: successCallback is called with the result\n // of this.successHandler, not the API response!\n this.markerGet({\n id,\n limit,\n successCallback,\n errorCallback,\n requestData,\n });\n }\n\n /**\n * Fetches file @mention's\n *\n * @oaram {string} fileId\n * @param {Function} successCallback\n * @param {Function} errorCallback\n * @param {string} searchStr - Search string to filter file collaborators by\n * @param {Object} [options]\n * @param {boolean} [options.includeGroups] - return groups as well as users\n * @return {void}\n */\n getCollaboratorsWithQuery = (\n fileId: string,\n successCallback: ({ entries: Array<SelectorItem<UserMini | GroupMini>>, next_marker: ?string }) => void,\n errorCallback: ElementsErrorCallback,\n searchStr: string,\n { includeGroups = false }: { includeGroups: boolean } = {},\n ) => {\n // Do not fetch without filter\n if (!searchStr || searchStr.trim() === '') {\n return;\n }\n\n this.getFileCollaborators(fileId, successCallback, errorCallback, {\n filter_term: searchStr,\n include_groups: includeGroups,\n include_uploader_collabs: false,\n });\n };\n}\n\nexport default FileCollaborators;\n"],"file":"FileCollaborators.js"}
|