@ynput/ayon-frontend-shared 0.2.13 → 0.2.15
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/DetailsPanel.cjs.js +8 -0
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +8 -0
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +5 -0
- package/dist/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/ProjectTreeTable.es.js +5 -0
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/Slicer.cjs.js +2 -0
- package/dist/Slicer.cjs.js.map +1 -1
- package/dist/Slicer.es.js +3 -1
- package/dist/Slicer.es.js.map +1 -1
- package/dist/_virtual/index.cjs10.js +3 -5
- package/dist/_virtual/index.cjs10.js.map +1 -1
- package/dist/_virtual/index.cjs7.js +5 -3
- package/dist/_virtual/index.cjs7.js.map +1 -1
- package/dist/_virtual/index.cjs8.js +4 -4
- package/dist/_virtual/index.cjs9.js +4 -4
- package/dist/_virtual/index.es10.js +2 -5
- package/dist/_virtual/index.es10.js.map +1 -1
- package/dist/_virtual/index.es7.js +5 -2
- package/dist/_virtual/index.es7.js.map +1 -1
- package/dist/_virtual/index.es8.js +4 -4
- package/dist/_virtual/index.es9.js +4 -4
- package/dist/api.cjs.js +2 -0
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +3 -1
- package/dist/components.cjs.js +15 -0
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +16 -1
- package/dist/components.es.js.map +1 -1
- package/dist/context.cjs.js +4 -0
- package/dist/context.cjs.js.map +1 -1
- package/dist/context.es.js +4 -0
- package/dist/context.es.js.map +1 -1
- package/dist/index.cjs.js +8 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +8 -0
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/shared/src/api/generated/actions.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/actions.es.js.map +1 -1
- package/dist/shared/src/api/generated/addons.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/addons.es.js.map +1 -1
- package/dist/shared/src/api/generated/anatomy.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/anatomy.es.js.map +1 -1
- package/dist/shared/src/api/generated/attributes.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/attributes.es.js.map +1 -1
- package/dist/shared/src/api/generated/configuration.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/configuration.es.js.map +1 -1
- package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
- package/dist/shared/src/api/generated/events.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/events.es.js.map +1 -1
- package/dist/shared/src/api/generated/files.cjs.js +5 -0
- package/dist/shared/src/api/generated/files.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/files.es.js +5 -0
- package/dist/shared/src/api/generated/files.es.js.map +1 -1
- package/dist/shared/src/api/generated/operations.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/operations.es.js.map +1 -1
- package/dist/shared/src/api/generated/projects.cjs.js +16 -0
- package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/projects.es.js +16 -0
- package/dist/shared/src/api/generated/projects.es.js.map +1 -1
- package/dist/shared/src/api/generated/reviewables.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/reviewables.es.js.map +1 -1
- package/dist/shared/src/api/generated/system.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/system.es.js.map +1 -1
- package/dist/shared/src/api/generated/tasks.cjs.js +8 -0
- package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/tasks.es.js +8 -0
- package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
- package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/users.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +66 -4
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +66 -4
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -0
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +1 -0
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +8 -0
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +8 -0
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +69 -0
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +69 -0
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +48 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +48 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js +102 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js +102 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PricingLink.cjs.js +13 -0
- package/dist/shared/src/components/Powerpack/PricingLink.cjs.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PricingLink.es.js +13 -0
- package/dist/shared/src/components/Powerpack/PricingLink.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +4 -10
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +1 -7
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +5 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.cjs.js +13 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.es.js +13 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +50 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +50 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +8 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +8 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +8 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +8 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +8 -0
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +8 -0
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/filterDates.cjs.js +167 -0
- package/dist/shared/src/components/SearchFilter/filterDates.cjs.js.map +1 -0
- package/dist/shared/src/components/SearchFilter/filterDates.es.js +167 -0
- package/dist/shared/src/components/SearchFilter/filterDates.es.js.map +1 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +547 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +547 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +6 -2
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +6 -2
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +19 -3
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +20 -4
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -0
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +1 -0
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +8 -0
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +8 -0
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +8 -0
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +8 -0
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +8 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +8 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +8 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +8 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +8 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +8 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +9 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +9 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +1 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -0
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +1 -0
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -0
- package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.es.js +1 -0
- package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +2 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +2 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -0
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +1 -0
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +5 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +5 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +1 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +22 -11
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +22 -11
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js +6 -0
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js +6 -0
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js +3 -3
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js +3 -3
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -0
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +1 -0
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +1 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js +2 -1
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js +2 -1
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +45 -16
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +45 -16
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +45 -7
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +45 -7
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +202 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +202 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +14 -6
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +14 -6
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js +11 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js +11 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +22 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +22 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js +116 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js +116 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +137 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +137 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/{useOverviewTable.cjs.js → useBuildProjectDataTable.cjs.js} +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/{useOverviewTable.es.js → useBuildProjectDataTable.es.js} +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +39 -19
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +39 -19
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +108 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +108 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js +29 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js +30 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js.map +1 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +8 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +8 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js +37 -0
- package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js.map +1 -0
- package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js +37 -0
- package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js.map +1 -0
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -0
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +1 -0
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +65 -0
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -0
- package/dist/shared/src/context/PowerpackContext.es.js +65 -0
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -0
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -0
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +1 -0
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.cjs.js +7 -1
- package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.es.js +7 -1
- package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -1
- package/dist/shared/src/util/getEntityTypeIcon.cjs.js +9 -0
- package/dist/shared/src/util/getEntityTypeIcon.cjs.js.map +1 -1
- package/dist/shared/src/util/getEntityTypeIcon.es.js +9 -0
- package/dist/shared/src/util/getEntityTypeIcon.es.js.map +1 -1
- package/dist/types/api/generated/actions.d.ts +3 -2
- package/dist/types/api/generated/addons.d.ts +8 -1
- package/dist/types/api/generated/anatomy.d.ts +1 -14
- package/dist/types/api/generated/attributes.d.ts +4 -2
- package/dist/types/api/generated/configuration.d.ts +6 -0
- package/dist/types/api/generated/entityLists.d.ts +2 -0
- package/dist/types/api/generated/events.d.ts +1 -1
- package/dist/types/api/generated/files.d.ts +11 -0
- package/dist/types/api/generated/operations.d.ts +1 -1
- package/dist/types/api/generated/projects.d.ts +59 -0
- package/dist/types/api/generated/reviewables.d.ts +1 -0
- package/dist/types/api/generated/system.d.ts +5 -2
- package/dist/types/api/generated/tasks.d.ts +48 -9
- package/dist/types/api/generated/users.d.ts +1 -4
- package/dist/types/api/queries/overview/getOverview.d.ts +350 -482
- package/dist/types/api/queries/project/getProject.d.ts +6 -0
- package/dist/types/components/Powerpack/PowerpackButton.d.ts +7 -0
- package/dist/types/components/Powerpack/PowerpackDialog.d.ts +4 -0
- package/dist/types/components/Powerpack/PowerpackDialog.styled.d.ts +8 -0
- package/dist/types/components/Powerpack/PricingLink.d.ts +4 -0
- package/dist/types/components/Powerpack/index.d.ts +3 -0
- package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +2 -1
- package/dist/types/components/ProjectTableSettings/TableSettings.styled.d.ts +1 -0
- package/dist/types/components/ProjectTableSettings/TableSettingsFallback.d.ts +10 -0
- package/dist/types/components/ProjectTableSettings/index.d.ts +1 -0
- package/dist/types/components/SearchFilter/filterDates.d.ts +56 -0
- package/dist/types/components/SearchFilter/index.d.ts +2 -0
- package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +30 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.d.ts +1 -1
- package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.d.ts +1 -1
- package/dist/types/containers/Feed/components/FileUploadCard/FileUploadCard.d.ts +4 -3
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +5 -1
- package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +3 -1
- package/dist/types/containers/ProjectTreeTable/components/GroupSettingsFallback.d.ts +11 -0
- package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +7 -0
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +11 -5
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +12 -0
- package/dist/types/containers/ProjectTreeTable/context/index.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +25 -0
- package/dist/types/containers/ProjectTreeTable/hooks/{useOverviewTable.d.ts → useBuildProjectDataTable.d.ts} +3 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +2 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useFolderRelationships.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/types/table.d.ts +13 -5
- package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +13 -0
- package/dist/types/containers/ProjectTreeTable/widgets/LoadMoreWidget.d.ts +8 -0
- package/dist/types/containers/ProjectTreeTable/widgets/index.d.ts +1 -0
- package/dist/types/containers/Slicer/index.d.ts +1 -0
- package/dist/types/containers/Slicer/useFiltersWithHierarchy.d.ts +10 -0
- package/dist/types/context/PowerpackContext.d.ts +20 -0
- package/dist/types/context/index.d.ts +1 -0
- package/dist/types/util/getAttributeIcon.d.ts +1 -1
- package/dist/types/util/getEntityTypeIcon.d.ts +1 -0
- package/dist/util.cjs.js +1 -0
- package/dist/util.cjs.js.map +1 -1
- package/dist/util.es.js +2 -1
- package/package.json +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.cjs.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.es.js.map +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import useGetEntityTypeData from "./useGetEntityTypeData.es.js";
|
|
2
|
+
const NEXT_PAGE_ID = "next-page";
|
|
3
|
+
const valueToStringArray = (value) => value ? Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()] : [];
|
|
4
|
+
const getGroupData = (groupById, groupValue, groups) => {
|
|
5
|
+
if (!groups)
|
|
6
|
+
return {
|
|
7
|
+
value: groupValue,
|
|
8
|
+
label: groupValue
|
|
9
|
+
};
|
|
10
|
+
const group = groups.find((g) => g.value === groupValue);
|
|
11
|
+
if (!group) {
|
|
12
|
+
return {
|
|
13
|
+
value: groupValue,
|
|
14
|
+
label: groupValue
|
|
15
|
+
};
|
|
16
|
+
} else {
|
|
17
|
+
return {
|
|
18
|
+
value: group.value,
|
|
19
|
+
label: group.label || group.value,
|
|
20
|
+
color: group.color,
|
|
21
|
+
icon: group.icon,
|
|
22
|
+
count: group.count,
|
|
23
|
+
img: groupById === "assignees" ? `/api/users/${group.value}/avatar` : void 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const GROUP_BY_ID = "_GROUP_";
|
|
28
|
+
const buildGroupId = (value) => `${GROUP_BY_ID}${value}`;
|
|
29
|
+
const useBuildGroupByTableData = (props) => {
|
|
30
|
+
const { project, entities, entityType, groups = [] } = props;
|
|
31
|
+
const getEntityTypeData = useGetEntityTypeData({ projectInfo: project });
|
|
32
|
+
const entityToGroupRow = (task) => {
|
|
33
|
+
const typeData = getEntityTypeData("task", task.taskType);
|
|
34
|
+
return {
|
|
35
|
+
id: task.id,
|
|
36
|
+
entityType: "task",
|
|
37
|
+
parentId: task.folderId,
|
|
38
|
+
name: task.name || "",
|
|
39
|
+
label: task.label || task.name || "",
|
|
40
|
+
icon: (typeData == null ? void 0 : typeData.icon) || null,
|
|
41
|
+
color: (typeData == null ? void 0 : typeData.color) || null,
|
|
42
|
+
status: task.status,
|
|
43
|
+
assignees: task.assignees,
|
|
44
|
+
tags: task.tags,
|
|
45
|
+
img: null,
|
|
46
|
+
subRows: [],
|
|
47
|
+
subType: task.taskType || null,
|
|
48
|
+
attrib: task.attrib,
|
|
49
|
+
ownAttrib: task.ownAttrib,
|
|
50
|
+
path: task.folder.path,
|
|
51
|
+
updatedAt: task.updatedAt
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const buildGroupByTableData = (groupBy) => {
|
|
55
|
+
var _a;
|
|
56
|
+
const groupsMap = /* @__PURE__ */ new Map();
|
|
57
|
+
for (const group of groups) {
|
|
58
|
+
const groupValue = group.value;
|
|
59
|
+
const groupId = buildGroupId(groupValue);
|
|
60
|
+
const groupData = getGroupData(groupBy.id, groupValue, groups);
|
|
61
|
+
groupsMap.set(groupValue, {
|
|
62
|
+
id: groupId,
|
|
63
|
+
name: groupValue,
|
|
64
|
+
entityType: "group",
|
|
65
|
+
subRows: [],
|
|
66
|
+
label: groupData.label,
|
|
67
|
+
group: groupData
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const ungroupedId = GROUP_BY_ID + "__ungrouped";
|
|
71
|
+
const getUnGroupedGroup = () => {
|
|
72
|
+
let ungroupedGroup = groupsMap.get(ungroupedId);
|
|
73
|
+
if (!ungroupedGroup) {
|
|
74
|
+
ungroupedGroup = {
|
|
75
|
+
id: ungroupedId,
|
|
76
|
+
name: "Ungrouped",
|
|
77
|
+
entityType: "group",
|
|
78
|
+
subRows: [],
|
|
79
|
+
label: "Ungrouped",
|
|
80
|
+
group: { value: ungroupedId, label: "Ungrouped" }
|
|
81
|
+
};
|
|
82
|
+
groupsMap.set(ungroupedId, ungroupedGroup);
|
|
83
|
+
}
|
|
84
|
+
return ungroupedGroup;
|
|
85
|
+
};
|
|
86
|
+
for (const [id, entity] of entities) {
|
|
87
|
+
if (entity.entityType !== entityType) continue;
|
|
88
|
+
let groupValues = [];
|
|
89
|
+
if (groupBy.id.startsWith("attrib_")) {
|
|
90
|
+
const attributeId = groupBy.id.split("_")[1];
|
|
91
|
+
groupValues = valueToStringArray((_a = entity.attrib) == null ? void 0 : _a[attributeId]);
|
|
92
|
+
} else {
|
|
93
|
+
groupValues = valueToStringArray(entity[groupBy.id]);
|
|
94
|
+
}
|
|
95
|
+
if (groupValues.length === 0) {
|
|
96
|
+
const ungroupedGroup = getUnGroupedGroup();
|
|
97
|
+
ungroupedGroup.subRows.push(entityToGroupRow(entity));
|
|
98
|
+
}
|
|
99
|
+
for (const groupValue of groupValues) {
|
|
100
|
+
const groupRow = groupsMap.get(groupValue);
|
|
101
|
+
if (groupRow) {
|
|
102
|
+
groupRow.subRows.push(entityToGroupRow(entity));
|
|
103
|
+
} else {
|
|
104
|
+
const ungroupedGroup = getUnGroupedGroup();
|
|
105
|
+
ungroupedGroup.subRows.push(entityToGroupRow(entity));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if ("groups" in entity && Array.isArray(entity.groups)) {
|
|
109
|
+
for (const group of entity.groups) {
|
|
110
|
+
const hasNextPageGroup = group.hasNextPage;
|
|
111
|
+
if (hasNextPageGroup && groupsMap.has(group.value)) {
|
|
112
|
+
const groupRow = groupsMap.get(group.value);
|
|
113
|
+
if (groupRow) {
|
|
114
|
+
groupRow.subRows.push({
|
|
115
|
+
id: `${group.value}-next-page`,
|
|
116
|
+
name: `Load more tasks...`,
|
|
117
|
+
entityType: NEXT_PAGE_ID,
|
|
118
|
+
subRows: [],
|
|
119
|
+
label: `Next page for ${group.value}`,
|
|
120
|
+
group: { value: group.value, label: group.value }
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return Array.from(groupsMap.values());
|
|
128
|
+
};
|
|
129
|
+
return buildGroupByTableData;
|
|
130
|
+
};
|
|
131
|
+
export {
|
|
132
|
+
GROUP_BY_ID,
|
|
133
|
+
NEXT_PAGE_ID,
|
|
134
|
+
buildGroupId,
|
|
135
|
+
useBuildGroupByTableData as default
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=useBuildGroupByTableData.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBuildGroupByTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { ProjectModel, TaskGroup } from '@shared/api'\nimport { TableGroupBy, TableUser } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport useGetEntityTypeData from './useGetEntityTypeData'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: TaskGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n project?: ProjectModel\n entities: EntitiesMap\n entityType?: GroupByEntityType\n groups?: TaskGroup[]\n}\n\nconst useBuildGroupByTableData = (props: BuildGroupByTableProps) => {\n const { project, entities, entityType, groups = [] } = props\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = (task: EditorTaskNode): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id,\n entityType: 'task',\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n path: task.folder.path,\n updatedAt: task.updatedAt,\n }\n }\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '__ungrouped'\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib_')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('_')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows.push(entityToGroupRow(entity as EditorTaskNode))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n })\n }\n }\n }\n }\n }\n\n return Array.from(groupsMap.values())\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ const React = require("react");
|
|
|
3
3
|
const loadingUtils = require("../utils/loadingUtils.cjs.js");
|
|
4
4
|
const useGetEntityTypeData = require("./useGetEntityTypeData.cjs.js");
|
|
5
5
|
const TASKS_INFINITE_QUERY_COUNT = 100;
|
|
6
|
-
function
|
|
6
|
+
function useBuildProjectDataTable({
|
|
7
7
|
foldersMap,
|
|
8
8
|
tasksMap,
|
|
9
9
|
rows,
|
|
@@ -191,5 +191,5 @@ function useOverviewTable({
|
|
|
191
191
|
isLoadingMore
|
|
192
192
|
]);
|
|
193
193
|
}
|
|
194
|
-
module.exports =
|
|
195
|
-
//# sourceMappingURL=
|
|
194
|
+
module.exports = useBuildProjectDataTable;
|
|
195
|
+
//# sourceMappingURL=useBuildProjectDataTable.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBuildProjectDataTable.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport {\n EditorTaskNode,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport { ExpandedState } from '@tanstack/react-table'\nimport { generateLoadingRows } from '../utils/loadingUtils'\nconst TASKS_INFINITE_QUERY_COUNT = 100\nimport { LoadingTasks } from '../types'\nimport { ProjectModel } from '../types/project'\nimport useGetEntityTypeData from './useGetEntityTypeData'\nimport { TableGroupBy } from '../context'\n\ntype Params = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n rows?: TableRow[]\n expanded: ExpandedState\n projectInfo?: ProjectModel\n showHierarchy: boolean\n loadingTasks?: LoadingTasks\n isLoadingMore?: boolean\n groupBy?: TableGroupBy\n}\n\nexport default function useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows,\n tasksByFolderMap,\n expanded,\n projectInfo,\n showHierarchy,\n loadingTasks = {},\n isLoadingMore = false,\n}: Params): TableRow[] {\n const getEntityTypeData = useGetEntityTypeData({ projectInfo })\n\n // Convert expanded object to a stable string for memoization comparison\n const expandedKey = useMemo(() => JSON.stringify(expanded), [expanded])\n\n // Memoize expandedFolderIds set for efficient lookups\n const expandedFolderIds = useMemo(() => {\n return new Set(\n Object.entries(expanded)\n .filter(([_, isExpanded]) => isExpanded)\n .map(([id]) => id),\n )\n }, [expandedKey])\n\n // Memoize relationship maps to avoid rebuilding them on every render\n const { childToParentMap, parentToChildrenMap } = useMemo(() => {\n const childToParent = new Map<string, string>()\n const parentToChildren = new Map<string, Set<string>>()\n\n // Construct relationship maps in a single pass\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n const parentId = folder.parentId\n if (parentId) {\n childToParent.set(folder.id, parentId)\n\n let children = parentToChildren.get(parentId)\n if (!children) {\n children = new Set<string>()\n parentToChildren.set(parentId, children)\n }\n children.add(folder.id)\n }\n }\n\n return { childToParentMap: childToParent, parentToChildrenMap: parentToChildren }\n }, [foldersMap])\n\n // Memoize visible folders calculation\n const visibleFolders = useMemo(() => {\n const visible = new Set<string>()\n\n // Start with root folders and folders with non-existent parents\n const queue: string[] = []\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n // Include folders with no parent OR with a parent that doesn't exist\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n visible.add(folder.id)\n queue.push(folder.id)\n }\n }\n\n // Process queue to identify visible folders (BFS)\n while (queue.length > 0) {\n const folderId = queue.shift()!\n const isParentExpanded = expandedFolderIds.has(folderId)\n\n if (!isParentExpanded) continue\n\n // Add children of expanded folders to visible set\n const childrenIds = parentToChildrenMap.get(folderId)\n if (childrenIds) {\n for (const childId of childrenIds) {\n if (!visible.has(childId)) {\n visible.add(childId)\n queue.push(childId)\n }\n }\n }\n }\n\n return visible\n }, [foldersMap, parentToChildrenMap, expandedFolderIds])\n\n // Final memoized result - build the table tree\n return useMemo(() => {\n // Helper function to create a task row\n const createTaskRow = (task: EditorTaskNode, parentId?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id,\n entityType: 'task',\n parentId: parentId || task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n path: task.folder.path,\n updatedAt: task.updatedAt,\n }\n }\n\n // If showHierarchy is false, create a flat list of task rows\n if (!showHierarchy) {\n const flatRows: TableRow[] = []\n\n // Loop through all tasks\n for (const task of tasksMap.values()) {\n if (!task.id) continue\n flatRows.push(createTaskRow(task))\n }\n\n // Loop through all extra rows\n for (const row of rows || []) {\n flatRows.push(row)\n }\n\n // if we are loading more tasks, add loading rows\n if (isLoadingMore) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n // number of tasks we loading with the infinite query\n const count = TASKS_INFINITE_QUERY_COUNT\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n })\n\n flatRows.push(...loadingTaskRows)\n }\n }\n\n return flatRows\n }\n\n // Use Map for O(1) lookups\n const rowsById = new Map<string, TableRow>()\n const rootRows: TableRow[] = []\n\n // Create minimal rows for only visible folders\n for (const folderId of visibleFolders) {\n const folder = foldersMap.get(folderId)\n if (!folder) continue\n\n // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\n name: folder.name || '',\n label: folder.label || folder.name || '',\n icon: getEntityTypeData('folder', folder.folderType)?.icon || null,\n color: null,\n img: null,\n subRows: [],\n status: folder.status,\n tags: folder.tags || [],\n subType: folder.folderType || null,\n ownAttrib: folder.ownAttrib || [],\n path: folder.path,\n attrib: folder.attrib || {},\n childOnlyMatch: folder.childOnlyMatch || false,\n updatedAt: folder.updatedAt,\n }\n\n rowsById.set(folderId, row)\n\n // Add root rows directly to the rootRows array\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n rootRows.push(row)\n }\n\n // Process tasks immediately if folder is expanded\n if (expandedFolderIds.has(folderId)) {\n // because tasksByFolderMap is a map of tasks by folder ID\n // we can directly get the tasks for the current folder\n const folderTaskIds = tasksByFolderMap.get(folderId) || []\n const folderTasks = folderTaskIds.flatMap((taskId) => tasksMap.get(taskId) || [])\n\n if (folderTasks.length || loadingTasks[folderId]) {\n // Use array literal with known length for better performance\n const taskRows = new Array<TableRow>(folderTasks.length)\n\n // Direct array assignment is faster than push operations\n for (let i = 0; i < folderTasks.length; i++) {\n taskRows[i] = createTaskRow(folderTasks[i], folderId)\n }\n\n // Add loading rows if applicable\n if (loadingTasks[folderId]) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n const count = loadingTasks[folderId]\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n parentId: folderId,\n })\n\n taskRows.push(...loadingTaskRows)\n }\n }\n\n row.subRows = taskRows\n }\n }\n }\n\n // Build the folder hierarchy efficiently\n for (const folderId of visibleFolders) {\n const parentId = childToParentMap.get(folderId)\n if (!parentId || !expandedFolderIds.has(parentId)) continue\n\n const childRow = rowsById.get(folderId)\n const parentRow = rowsById.get(parentId)\n\n if (!childRow || !parentRow) continue\n\n // Add folder to its parent's subRows\n parentRow.subRows.push(childRow)\n }\n\n // Add any extra rows to the root rows\n for (const row of rows || []) {\n rootRows.push(row)\n }\n\n return rootRows\n }, [\n foldersMap,\n tasksMap,\n rows,\n visibleFolders,\n childToParentMap,\n expandedFolderIds,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n ])\n}\n"],"names":["useMemo","generateLoadingRows"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { useMemo } from "react";
|
|
|
2
2
|
import { generateLoadingRows } from "../utils/loadingUtils.es.js";
|
|
3
3
|
import useGetEntityTypeData from "./useGetEntityTypeData.es.js";
|
|
4
4
|
const TASKS_INFINITE_QUERY_COUNT = 100;
|
|
5
|
-
function
|
|
5
|
+
function useBuildProjectDataTable({
|
|
6
6
|
foldersMap,
|
|
7
7
|
tasksMap,
|
|
8
8
|
rows,
|
|
@@ -191,6 +191,6 @@ function useOverviewTable({
|
|
|
191
191
|
]);
|
|
192
192
|
}
|
|
193
193
|
export {
|
|
194
|
-
|
|
194
|
+
useBuildProjectDataTable as default
|
|
195
195
|
};
|
|
196
|
-
//# sourceMappingURL=
|
|
196
|
+
//# sourceMappingURL=useBuildProjectDataTable.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBuildProjectDataTable.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport {\n EditorTaskNode,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport { ExpandedState } from '@tanstack/react-table'\nimport { generateLoadingRows } from '../utils/loadingUtils'\nconst TASKS_INFINITE_QUERY_COUNT = 100\nimport { LoadingTasks } from '../types'\nimport { ProjectModel } from '../types/project'\nimport useGetEntityTypeData from './useGetEntityTypeData'\nimport { TableGroupBy } from '../context'\n\ntype Params = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n rows?: TableRow[]\n expanded: ExpandedState\n projectInfo?: ProjectModel\n showHierarchy: boolean\n loadingTasks?: LoadingTasks\n isLoadingMore?: boolean\n groupBy?: TableGroupBy\n}\n\nexport default function useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows,\n tasksByFolderMap,\n expanded,\n projectInfo,\n showHierarchy,\n loadingTasks = {},\n isLoadingMore = false,\n}: Params): TableRow[] {\n const getEntityTypeData = useGetEntityTypeData({ projectInfo })\n\n // Convert expanded object to a stable string for memoization comparison\n const expandedKey = useMemo(() => JSON.stringify(expanded), [expanded])\n\n // Memoize expandedFolderIds set for efficient lookups\n const expandedFolderIds = useMemo(() => {\n return new Set(\n Object.entries(expanded)\n .filter(([_, isExpanded]) => isExpanded)\n .map(([id]) => id),\n )\n }, [expandedKey])\n\n // Memoize relationship maps to avoid rebuilding them on every render\n const { childToParentMap, parentToChildrenMap } = useMemo(() => {\n const childToParent = new Map<string, string>()\n const parentToChildren = new Map<string, Set<string>>()\n\n // Construct relationship maps in a single pass\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n const parentId = folder.parentId\n if (parentId) {\n childToParent.set(folder.id, parentId)\n\n let children = parentToChildren.get(parentId)\n if (!children) {\n children = new Set<string>()\n parentToChildren.set(parentId, children)\n }\n children.add(folder.id)\n }\n }\n\n return { childToParentMap: childToParent, parentToChildrenMap: parentToChildren }\n }, [foldersMap])\n\n // Memoize visible folders calculation\n const visibleFolders = useMemo(() => {\n const visible = new Set<string>()\n\n // Start with root folders and folders with non-existent parents\n const queue: string[] = []\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n // Include folders with no parent OR with a parent that doesn't exist\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n visible.add(folder.id)\n queue.push(folder.id)\n }\n }\n\n // Process queue to identify visible folders (BFS)\n while (queue.length > 0) {\n const folderId = queue.shift()!\n const isParentExpanded = expandedFolderIds.has(folderId)\n\n if (!isParentExpanded) continue\n\n // Add children of expanded folders to visible set\n const childrenIds = parentToChildrenMap.get(folderId)\n if (childrenIds) {\n for (const childId of childrenIds) {\n if (!visible.has(childId)) {\n visible.add(childId)\n queue.push(childId)\n }\n }\n }\n }\n\n return visible\n }, [foldersMap, parentToChildrenMap, expandedFolderIds])\n\n // Final memoized result - build the table tree\n return useMemo(() => {\n // Helper function to create a task row\n const createTaskRow = (task: EditorTaskNode, parentId?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id,\n entityType: 'task',\n parentId: parentId || task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n path: task.folder.path,\n updatedAt: task.updatedAt,\n }\n }\n\n // If showHierarchy is false, create a flat list of task rows\n if (!showHierarchy) {\n const flatRows: TableRow[] = []\n\n // Loop through all tasks\n for (const task of tasksMap.values()) {\n if (!task.id) continue\n flatRows.push(createTaskRow(task))\n }\n\n // Loop through all extra rows\n for (const row of rows || []) {\n flatRows.push(row)\n }\n\n // if we are loading more tasks, add loading rows\n if (isLoadingMore) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n // number of tasks we loading with the infinite query\n const count = TASKS_INFINITE_QUERY_COUNT\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n })\n\n flatRows.push(...loadingTaskRows)\n }\n }\n\n return flatRows\n }\n\n // Use Map for O(1) lookups\n const rowsById = new Map<string, TableRow>()\n const rootRows: TableRow[] = []\n\n // Create minimal rows for only visible folders\n for (const folderId of visibleFolders) {\n const folder = foldersMap.get(folderId)\n if (!folder) continue\n\n // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\n name: folder.name || '',\n label: folder.label || folder.name || '',\n icon: getEntityTypeData('folder', folder.folderType)?.icon || null,\n color: null,\n img: null,\n subRows: [],\n status: folder.status,\n tags: folder.tags || [],\n subType: folder.folderType || null,\n ownAttrib: folder.ownAttrib || [],\n path: folder.path,\n attrib: folder.attrib || {},\n childOnlyMatch: folder.childOnlyMatch || false,\n updatedAt: folder.updatedAt,\n }\n\n rowsById.set(folderId, row)\n\n // Add root rows directly to the rootRows array\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n rootRows.push(row)\n }\n\n // Process tasks immediately if folder is expanded\n if (expandedFolderIds.has(folderId)) {\n // because tasksByFolderMap is a map of tasks by folder ID\n // we can directly get the tasks for the current folder\n const folderTaskIds = tasksByFolderMap.get(folderId) || []\n const folderTasks = folderTaskIds.flatMap((taskId) => tasksMap.get(taskId) || [])\n\n if (folderTasks.length || loadingTasks[folderId]) {\n // Use array literal with known length for better performance\n const taskRows = new Array<TableRow>(folderTasks.length)\n\n // Direct array assignment is faster than push operations\n for (let i = 0; i < folderTasks.length; i++) {\n taskRows[i] = createTaskRow(folderTasks[i], folderId)\n }\n\n // Add loading rows if applicable\n if (loadingTasks[folderId]) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n const count = loadingTasks[folderId]\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n parentId: folderId,\n })\n\n taskRows.push(...loadingTaskRows)\n }\n }\n\n row.subRows = taskRows\n }\n }\n }\n\n // Build the folder hierarchy efficiently\n for (const folderId of visibleFolders) {\n const parentId = childToParentMap.get(folderId)\n if (!parentId || !expandedFolderIds.has(parentId)) continue\n\n const childRow = rowsById.get(folderId)\n const parentRow = rowsById.get(parentId)\n\n if (!childRow || !parentRow) continue\n\n // Add folder to its parent's subRows\n parentRow.subRows.push(childRow)\n }\n\n // Add any extra rows to the root rows\n for (const row of rows || []) {\n rootRows.push(row)\n }\n\n return rootRows\n }, [\n foldersMap,\n tasksMap,\n rows,\n visibleFolders,\n childToParentMap,\n expandedFolderIds,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n ])\n}\n"],"names":[],"mappings":";;;AAUA,MAAM,6BAA6B;AAmBnC,SAAwB,yBAAyB;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AAAA,EAChB,gBAAgB;AAClB,GAAuB;AACrB,QAAM,oBAAoB,qBAAqB,EAAE,aAAa;AAGxD,QAAA,cAAc,QAAQ,MAAM,KAAK,UAAU,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAGhE,QAAA,oBAAoB,QAAQ,MAAM;AACtC,WAAO,IAAI;AAAA,MACT,OAAO,QAAQ,QAAQ,EACpB,OAAO,CAAC,CAAC,GAAG,UAAU,MAAM,UAAU,EACtC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,WAAW,CAAC;AAGhB,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,QAAQ,MAAM;AACxD,UAAA,oCAAoB,IAAoB;AACxC,UAAA,uCAAuB,IAAyB;AAG3C,eAAA,UAAU,WAAW,UAAU;AACpC,UAAA,EAAC,iCAAQ,IAAI;AAEjB,YAAM,WAAW,OAAO;AACxB,UAAI,UAAU;AACE,sBAAA,IAAI,OAAO,IAAI,QAAQ;AAEjC,YAAA,WAAW,iBAAiB,IAAI,QAAQ;AAC5C,YAAI,CAAC,UAAU;AACb,yCAAe,IAAY;AACV,2BAAA,IAAI,UAAU,QAAQ;AAAA,QAAA;AAEhC,iBAAA,IAAI,OAAO,EAAE;AAAA,MAAA;AAAA,IACxB;AAGF,WAAO,EAAE,kBAAkB,eAAe,qBAAqB,iBAAiB;AAAA,EAAA,GAC/E,CAAC,UAAU,CAAC;AAGT,QAAA,iBAAiB,QAAQ,MAAM;AAC7B,UAAA,8BAAc,IAAY;AAGhC,UAAM,QAAkB,CAAC;AACd,eAAA,UAAU,WAAW,UAAU;AACpC,UAAA,EAAC,iCAAQ,IAAI;AAGb,UAAA,CAAC,OAAO,YAAY,CAAC,WAAW,IAAI,OAAO,QAAQ,GAAG;AAChD,gBAAA,IAAI,OAAO,EAAE;AACf,cAAA,KAAK,OAAO,EAAE;AAAA,MAAA;AAAA,IACtB;AAIK,WAAA,MAAM,SAAS,GAAG;AACjB,YAAA,WAAW,MAAM,MAAM;AACvB,YAAA,mBAAmB,kBAAkB,IAAI,QAAQ;AAEvD,UAAI,CAAC,iBAAkB;AAGjB,YAAA,cAAc,oBAAoB,IAAI,QAAQ;AACpD,UAAI,aAAa;AACf,mBAAW,WAAW,aAAa;AACjC,cAAI,CAAC,QAAQ,IAAI,OAAO,GAAG;AACzB,oBAAQ,IAAI,OAAO;AACnB,kBAAM,KAAK,OAAO;AAAA,UAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAGK,WAAA;AAAA,EACN,GAAA,CAAC,YAAY,qBAAqB,iBAAiB,CAAC;AAGvD,SAAO,QAAQ,MAAM;;AAEb,UAAA,gBAAgB,CAAC,MAAsB,aAAgC;AAC3E,YAAM,WAAW,kBAAkB,QAAQ,KAAK,QAAQ;AACjD,aAAA;AAAA,QACL,IAAI,KAAK;AAAA,QACT,YAAY;AAAA,QACZ,UAAU,YAAY,KAAK;AAAA,QAC3B,MAAM,KAAK,QAAQ;AAAA,QACnB,OAAO,KAAK,SAAS,KAAK,QAAQ;AAAA,QAClC,OAAM,qCAAU,SAAQ;AAAA,QACxB,QAAO,qCAAU,UAAS;AAAA,QAC1B,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,KAAK;AAAA,QACL,SAAS,CAAC;AAAA,QACV,SAAS,KAAK,YAAY;AAAA,QAC1B,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK,OAAO;AAAA,QAClB,WAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAGA,QAAI,CAAC,eAAe;AAClB,YAAM,WAAuB,CAAC;AAGnB,iBAAA,QAAQ,SAAS,UAAU;AAChC,YAAA,CAAC,KAAK,GAAI;AACL,iBAAA,KAAK,cAAc,IAAI,CAAC;AAAA,MAAA;AAIxB,iBAAA,OAAO,QAAQ,IAAI;AAC5B,iBAAS,KAAK,GAAG;AAAA,MAAA;AAInB,UAAI,eAAe;AACX,cAAA,oBAAkB,0BAAS,UAAU,WAAnB,mBAA2B,UAA3B,mBAAmC,OAAnC,mBAAuC,WAAU,CAAC;AAC1E,cAAM,iBAAiB,OAAO,KAAK,eAAe,EAAE,IAAI,CAAC,SAAS;AAAA,UAChE,MAAM;AAAA,QAAA,EACN;AAEF,cAAM,QAAQ;AACC;AACP,gBAAA,kBAAkB,oBAAoB,gBAAgB,OAAO;AAAA,YACjE,MAAM;AAAA,UAAA,CACP;AAEQ,mBAAA,KAAK,GAAG,eAAe;AAAA,QAAA;AAAA,MAClC;AAGK,aAAA;AAAA,IAAA;AAIH,UAAA,+BAAe,IAAsB;AAC3C,UAAM,WAAuB,CAAC;AAG9B,eAAW,YAAY,gBAAgB;AAC/B,YAAA,SAAS,WAAW,IAAI,QAAQ;AACtC,UAAI,CAAC,OAAQ;AAGb,YAAM,MAAgB;AAAA,QACpB,IAAI;AAAA,QACJ,YAAY;AAAA,QACZ,UAAU,OAAO,YAAY;AAAA,QAC7B,MAAM,OAAO,QAAQ;AAAA,QACrB,OAAO,OAAO,SAAS,OAAO,QAAQ;AAAA,QACtC,QAAM,uBAAkB,UAAU,OAAO,UAAU,MAA7C,mBAAgD,SAAQ;AAAA,QAC9D,OAAO;AAAA,QACP,KAAK;AAAA,QACL,SAAS,CAAC;AAAA,QACV,QAAQ,OAAO;AAAA,QACf,MAAM,OAAO,QAAQ,CAAC;AAAA,QACtB,SAAS,OAAO,cAAc;AAAA,QAC9B,WAAW,OAAO,aAAa,CAAC;AAAA,QAChC,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO,UAAU,CAAC;AAAA,QAC1B,gBAAgB,OAAO,kBAAkB;AAAA,QACzC,WAAW,OAAO;AAAA,MACpB;AAES,eAAA,IAAI,UAAU,GAAG;AAGtB,UAAA,CAAC,OAAO,YAAY,CAAC,WAAW,IAAI,OAAO,QAAQ,GAAG;AACxD,iBAAS,KAAK,GAAG;AAAA,MAAA;AAIf,UAAA,kBAAkB,IAAI,QAAQ,GAAG;AAGnC,cAAM,gBAAgB,iBAAiB,IAAI,QAAQ,KAAK,CAAC;AACnD,cAAA,cAAc,cAAc,QAAQ,CAAC,WAAW,SAAS,IAAI,MAAM,KAAK,EAAE;AAEhF,YAAI,YAAY,UAAU,aAAa,QAAQ,GAAG;AAEhD,gBAAM,WAAW,IAAI,MAAgB,YAAY,MAAM;AAGvD,mBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,qBAAS,CAAC,IAAI,cAAc,YAAY,CAAC,GAAG,QAAQ;AAAA,UAAA;AAIlD,cAAA,aAAa,QAAQ,GAAG;AACpB,kBAAA,oBAAkB,0BAAS,UAAU,WAAnB,mBAA2B,UAA3B,mBAAmC,OAAnC,mBAAuC,WAAU,CAAC;AAC1E,kBAAM,iBAAiB,OAAO,KAAK,eAAe,EAAE,IAAI,CAAC,SAAS;AAAA,cAChE,MAAM;AAAA,YAAA,EACN;AACI,kBAAA,QAAQ,aAAa,QAAQ;AACnC,gBAAI,QAAQ,GAAG;AACP,oBAAA,kBAAkB,oBAAoB,gBAAgB,OAAO;AAAA,gBACjE,MAAM;AAAA,gBACN,UAAU;AAAA,cAAA,CACX;AAEQ,uBAAA,KAAK,GAAG,eAAe;AAAA,YAAA;AAAA,UAClC;AAGF,cAAI,UAAU;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAIF,eAAW,YAAY,gBAAgB;AAC/B,YAAA,WAAW,iBAAiB,IAAI,QAAQ;AAC9C,UAAI,CAAC,YAAY,CAAC,kBAAkB,IAAI,QAAQ,EAAG;AAE7C,YAAA,WAAW,SAAS,IAAI,QAAQ;AAChC,YAAA,YAAY,SAAS,IAAI,QAAQ;AAEnC,UAAA,CAAC,YAAY,CAAC,UAAW;AAGnB,gBAAA,QAAQ,KAAK,QAAQ;AAAA,IAAA;AAItB,eAAA,OAAO,QAAQ,IAAI;AAC5B,eAAS,KAAK,GAAG;AAAA,IAAA;AAGZ,WAAA;AAAA,EAAA,GACN;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACH;"}
|
|
@@ -7,12 +7,15 @@ const ClipboardContext = require("../context/ClipboardContext.cjs.js");
|
|
|
7
7
|
const SelectionCellsContext = require("../context/SelectionCellsContext.cjs.js");
|
|
8
8
|
const ProjectTableContext = require("../context/ProjectTableContext.cjs.js");
|
|
9
9
|
const CellEditingContext = require("../context/CellEditingContext.cjs.js");
|
|
10
|
+
const useBuildGroupByTableData = require("./useBuildGroupByTableData.cjs.js");
|
|
10
11
|
const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
11
12
|
const {
|
|
12
13
|
projectName,
|
|
13
14
|
showHierarchy,
|
|
14
15
|
getEntityById,
|
|
15
16
|
toggleExpandAll,
|
|
17
|
+
toggleExpands,
|
|
18
|
+
expanded,
|
|
16
19
|
contextMenuItems = []
|
|
17
20
|
} = ProjectTableContext.useProjectTableContext();
|
|
18
21
|
const { copyToClipboard, exportCSV, pasteFromClipboard } = ClipboardContext.useClipboard();
|
|
@@ -51,22 +54,21 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
51
54
|
return acc;
|
|
52
55
|
}, []);
|
|
53
56
|
};
|
|
54
|
-
const copyAndPasteItems = (e, cell, selected,
|
|
57
|
+
const copyAndPasteItems = (e, cell, selected, meta) => {
|
|
55
58
|
var _a;
|
|
56
59
|
return [
|
|
57
60
|
{
|
|
58
61
|
label: "Copy",
|
|
59
62
|
icon: "content_copy",
|
|
60
63
|
shortcut: platform.getPlatformShortcutKey("c", [platform.KeyMode.Ctrl]),
|
|
61
|
-
command: () => copyToClipboard(
|
|
62
|
-
hidden:
|
|
63
|
-
// Always shown
|
|
64
|
+
command: () => copyToClipboard(meta.selectedCells),
|
|
65
|
+
hidden: cell.isGroup
|
|
64
66
|
},
|
|
65
67
|
{
|
|
66
|
-
label: `Copy row${
|
|
68
|
+
label: `Copy row${meta.selectedFullRows.length > 1 ? "s" : ""}`,
|
|
67
69
|
icon: "content_copy",
|
|
68
|
-
command: () => copyToClipboard(
|
|
69
|
-
hidden: cell.columnId !== "name" || !
|
|
70
|
+
command: () => copyToClipboard(meta.selectedFullRows, true),
|
|
71
|
+
hidden: cell.columnId !== "name" || !meta.selectedFullRows.some(
|
|
70
72
|
(cellId) => {
|
|
71
73
|
var _a2, _b;
|
|
72
74
|
return ((_a2 = cellUtils.parseCellId(cellId)) == null ? void 0 : _a2.rowId) === ((_b = cellUtils.parseCellId(cell.cellId)) == null ? void 0 : _b.rowId);
|
|
@@ -77,8 +79,8 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
77
79
|
label: "Paste",
|
|
78
80
|
icon: "content_paste",
|
|
79
81
|
shortcut: platform.getPlatformShortcutKey("v", [platform.KeyMode.Ctrl]),
|
|
80
|
-
command: () => pasteFromClipboard(
|
|
81
|
-
hidden: cell.columnId === "name",
|
|
82
|
+
command: () => pasteFromClipboard(meta.selectedCells),
|
|
83
|
+
hidden: cell.columnId === "name" || cell.isGroup,
|
|
82
84
|
disabled: (_a = cell.attribField) == null ? void 0 : _a.readOnly
|
|
83
85
|
}
|
|
84
86
|
];
|
|
@@ -91,7 +93,7 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
91
93
|
const rowSelectionCellId = cellUtils.getCellId(cell.entityId, SelectionCellsContext.ROW_SELECTION_COLUMN_ID);
|
|
92
94
|
selectCell(rowSelectionCellId, false, false);
|
|
93
95
|
},
|
|
94
|
-
hidden: cell.columnId !== "name" || meta.selectedRows.length > 1
|
|
96
|
+
hidden: cell.columnId !== "name" || meta.selectedRows.length > 1 || cell.isGroup
|
|
95
97
|
});
|
|
96
98
|
const expandCollapseChildrenItems = (e, cell, selected, meta) => [
|
|
97
99
|
{
|
|
@@ -99,14 +101,26 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
99
101
|
icon: "expand_all",
|
|
100
102
|
shortcut: "Alt + click",
|
|
101
103
|
command: () => toggleExpandAll(meta.selectedRows, true),
|
|
102
|
-
hidden: cell.columnId !== "name"
|
|
104
|
+
hidden: cell.columnId !== "name" || cell.entityType !== "folder"
|
|
103
105
|
},
|
|
104
106
|
{
|
|
105
107
|
label: "Collapse children",
|
|
106
108
|
icon: "collapse_all",
|
|
107
109
|
shortcut: "Alt + click",
|
|
108
110
|
command: () => toggleExpandAll(meta.selectedRows, false),
|
|
109
|
-
hidden: cell.columnId !== "name"
|
|
111
|
+
hidden: cell.columnId !== "name" || cell.entityType !== "folder"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
label: "Expand",
|
|
115
|
+
icon: "expand_all",
|
|
116
|
+
command: () => toggleExpands(meta.selectedRows, true),
|
|
117
|
+
hidden: cell.columnId !== "name" || !cell.isGroup || expanded[cell.entityId]
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
label: "Collapse",
|
|
121
|
+
icon: "collapse_all",
|
|
122
|
+
command: () => toggleExpands(meta.selectedRows, false),
|
|
123
|
+
hidden: cell.columnId !== "name" || !cell.isGroup || !expanded[cell.entityId]
|
|
110
124
|
}
|
|
111
125
|
];
|
|
112
126
|
const deleteItem = (e, cell, selected, meta) => ({
|
|
@@ -114,7 +128,7 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
114
128
|
icon: "delete",
|
|
115
129
|
danger: true,
|
|
116
130
|
command: () => deleteEntities(meta.selectedCells),
|
|
117
|
-
hidden: cell.columnId !== "name"
|
|
131
|
+
hidden: cell.columnId !== "name" || cell.isGroup
|
|
118
132
|
});
|
|
119
133
|
const inheritItem = (e, cell, selected, meta) => {
|
|
120
134
|
const entitiesToInherit = getEntitiesToInherit(meta.selectedCells);
|
|
@@ -126,12 +140,11 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
126
140
|
hidden: !canInheritFromParent
|
|
127
141
|
};
|
|
128
142
|
};
|
|
129
|
-
const exportItem = () => ({
|
|
143
|
+
const exportItem = (e, cell) => ({
|
|
130
144
|
label: "Export selection",
|
|
131
145
|
icon: "download",
|
|
132
146
|
command: () => exportCSV(Array.from(selectedCells), projectName),
|
|
133
|
-
hidden:
|
|
134
|
-
// Always shown
|
|
147
|
+
hidden: cell.isGroup
|
|
135
148
|
});
|
|
136
149
|
const createFolderItems = (e, cell) => [
|
|
137
150
|
{
|
|
@@ -176,7 +189,8 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
176
189
|
columnId: colId,
|
|
177
190
|
entityId: (cellEntityData == null ? void 0 : cellEntityData.entityId) || rowId,
|
|
178
191
|
entityType: cellEntityData == null ? void 0 : cellEntityData.entityType,
|
|
179
|
-
attribField
|
|
192
|
+
attribField,
|
|
193
|
+
isGroup: rowId.startsWith(useBuildGroupByTableData.GROUP_BY_ID)
|
|
180
194
|
};
|
|
181
195
|
};
|
|
182
196
|
const handleTableBodyContextMenu = (e) => {
|
|
@@ -197,11 +211,13 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
197
211
|
const selectedCellRows = [];
|
|
198
212
|
const selectedCellColumns = [];
|
|
199
213
|
const selectedCellFullRows = [];
|
|
214
|
+
const selectedCellsGroups = [];
|
|
200
215
|
for (const { entityId, columnId } of selectedCellsData) {
|
|
201
216
|
if (entityId && !selectedCellRows.includes(entityId)) selectedCellRows.push(entityId);
|
|
202
217
|
if (columnId && !selectedCellColumns.includes(columnId)) selectedCellColumns.push(columnId);
|
|
203
218
|
if (columnId === SelectionCellsContext.ROW_SELECTION_COLUMN_ID && !selectedCellFullRows.includes(entityId))
|
|
204
219
|
selectedCellFullRows.push(entityId);
|
|
220
|
+
if (entityId.startsWith(useBuildGroupByTableData.GROUP_BY_ID)) selectedCellsGroups.push(entityId);
|
|
205
221
|
}
|
|
206
222
|
const constructedMenuItems = contextMenuItems.flatMap(
|
|
207
223
|
(constructor) => {
|
|
@@ -215,7 +231,9 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
215
231
|
// all selected cells
|
|
216
232
|
selectedRows: selectedCellRows,
|
|
217
233
|
selectedColumns: selectedCellColumns,
|
|
218
|
-
selectedFullRows: selectedCellFullRows
|
|
234
|
+
selectedFullRows: selectedCellFullRows,
|
|
235
|
+
selectedGroups: selectedCellsGroups
|
|
236
|
+
// groups if any
|
|
219
237
|
},
|
|
220
238
|
{
|
|
221
239
|
history
|
|
@@ -230,7 +248,9 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
|
|
|
230
248
|
// all selected cells
|
|
231
249
|
selectedRows: selectedCellRows,
|
|
232
250
|
selectedColumns: selectedCellColumns,
|
|
233
|
-
selectedFullRows: selectedCellFullRows
|
|
251
|
+
selectedFullRows: selectedCellFullRows,
|
|
252
|
+
selectedGroups: selectedCellsGroups
|
|
253
|
+
// groups if any
|
|
234
254
|
},
|
|
235
255
|
{ history }
|
|
236
256
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCellContextMenu.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useCellContextMenu.ts"],"sourcesContent":["import { ContextMenuItemType, useCreateContextMenu } from '../../ContextMenu/useCreateContextMenu'\nimport useDeleteEntities from './useDeleteEntities'\nimport { getPlatformShortcutKey, KeyMode } from '../../../util/platform'\nimport { getCellId, parseCellId } from '../utils/cellUtils'\nimport { useClipboard } from '../context/ClipboardContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { useCellEditing } from '../context/CellEditingContext'\nimport { InheritFromParentEntity } from './useUpdateTableData'\nimport { ProjectTableAttribute } from '../types'\nimport { UseHistoryReturn } from './useHistory'\n\ntype ContextEvent = React.MouseEvent<HTMLTableSectionElement, MouseEvent>\n\nexport type TableCellContextData = {\n entityId: string\n cellId: string\n columnId: string\n entityType: 'folder' | 'task' | 'product' | 'version' | undefined\n attribField: ProjectTableAttribute | undefined\n}\ntype DefaultMenuItem =\n | 'copy-paste'\n | 'show-details'\n | 'expand-collapse'\n | 'inherit'\n | 'delete'\n | 'export'\n | 'create-folder'\n | 'create-task'\nexport type ContextMenuItemConstructor = (\n e: ContextEvent,\n cell: TableCellContextData,\n selectedCells: TableCellContextData[],\n meta: {\n selectedCells: string[]\n selectedRows: string[]\n selectedColumns: string[]\n selectedFullRows: string[] // if the full row is selected\n },\n context: {\n history: UseHistoryReturn\n },\n) => ContextMenuItemType | ContextMenuItemType[] | undefined\nexport type ContextMenuItemConstructors = (DefaultMenuItem | ContextMenuItemConstructor)[]\n\ntype CellContextMenuProps = {\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n}\n\nconst useCellContextMenu = ({ attribs, onOpenNew }: CellContextMenuProps) => {\n // context hooks\n const {\n projectName,\n showHierarchy,\n getEntityById,\n toggleExpandAll,\n contextMenuItems = [],\n } = useProjectTableContext()\n const { copyToClipboard, exportCSV, pasteFromClipboard } = useClipboard()\n const { selectedCells, clearSelection, selectCell, focusCell } = useSelectionCellsContext()\n const { inheritFromParent, history } = useCellEditing()\n\n // update entity context\n\n // data mutations\n const deleteEntities = useDeleteEntities({})\n\n const [cellContextMenuShow] = useCreateContextMenu()\n\n // Helper function to identify attributes that can be inherited\n const getEntitiesToInherit = (selected: string[]): InheritFromParentEntity[] => {\n return selected.reduce((acc, cellId) => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId || !colId.startsWith('attrib_')) return acc\n\n const entity = getEntityById(rowId)\n if (!entity) return acc\n\n const attribName = colId.replace('attrib_', '')\n // get attrib model\n const attribModel = attribs.find((attrib) => attrib.name === attribName)\n // is the attrib inheritable?\n const isInheritable = attribModel?.data.inherit\n\n // Check if this attribute is owned by the entity (not inherited)\n if (entity.ownAttrib?.includes(attribName) && isInheritable) {\n // Find existing entry or create new one\n const existingIndex = acc.findIndex((item) => item.entityId === rowId)\n\n if (existingIndex >= 0) {\n // Add to existing entity's attribs if not already there\n if (!acc[existingIndex].attribs.includes(attribName)) {\n acc[existingIndex].attribs.push(attribName)\n }\n } else {\n // Create new entity entry\n acc.push({\n rowId: rowId,\n entityId: rowId,\n entityType: 'folderId' in entity ? 'task' : 'folder',\n attribs: [attribName],\n ownAttrib: entity.ownAttrib || [],\n // @ts-ignore\n folderId: entity.parentId ?? entity.folderId,\n })\n }\n }\n\n return acc\n }, [] as InheritFromParentEntity[])\n }\n\n const copyAndPasteItems: ContextMenuItemConstructor = (e, cell, selected, config) => {\n return [\n {\n label: 'Copy',\n icon: 'content_copy',\n shortcut: getPlatformShortcutKey('c', [KeyMode.Ctrl]),\n command: () => copyToClipboard(config.selectedCells),\n hidden: false, // Always shown\n },\n {\n label: `Copy row${config.selectedFullRows.length > 1 ? 's' : ''}`,\n icon: 'content_copy',\n command: () => copyToClipboard(config.selectedFullRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !config.selectedFullRows.some(\n (cellId) => parseCellId(cellId)?.rowId === parseCellId(cell.cellId)?.rowId,\n ),\n },\n {\n label: 'Paste',\n icon: 'content_paste',\n shortcut: getPlatformShortcutKey('v', [KeyMode.Ctrl]),\n command: () => pasteFromClipboard(config.selectedCells),\n hidden: cell.columnId === 'name',\n disabled: cell.attribField?.readOnly,\n },\n ]\n }\n\n const showDetailsItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Show details',\n icon: 'dock_to_left',\n shortcut: 'Double click',\n command: () => {\n const rowSelectionCellId = getCellId(cell.entityId, ROW_SELECTION_COLUMN_ID)\n // select the row to open the details\n selectCell(rowSelectionCellId, false, false)\n },\n hidden: cell.columnId !== 'name' || meta.selectedRows.length > 1,\n })\n\n const expandCollapseChildrenItems: ContextMenuItemConstructor = (e, cell, selected, meta) => [\n {\n label: 'Expand children',\n icon: 'expand_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, true),\n hidden: cell.columnId !== 'name',\n },\n {\n label: 'Collapse children',\n icon: 'collapse_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, false),\n hidden: cell.columnId !== 'name',\n },\n ]\n\n const deleteItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Delete',\n icon: 'delete',\n danger: true,\n command: () => deleteEntities(meta.selectedCells),\n hidden: cell.columnId !== 'name',\n })\n\n const inheritItem: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n const entitiesToInherit = getEntitiesToInherit(meta.selectedCells)\n const canInheritFromParent =\n entitiesToInherit.length > 0 &&\n showHierarchy &&\n !(meta.selectedRows.length > 1 && meta.selectedColumns.length > 1)\n\n return {\n label: 'Inherit from parent',\n icon: 'disabled_by_default',\n command: () => inheritFromParent(entitiesToInherit),\n hidden: !canInheritFromParent,\n }\n }\n\n const exportItem: ContextMenuItemConstructor = () => ({\n label: 'Export selection',\n icon: 'download',\n command: () => exportCSV(Array.from(selectedCells), projectName),\n hidden: false, // Always shown\n })\n\n const createFolderItems: ContextMenuItemConstructor = (e, cell) => [\n {\n label: 'Create folder',\n icon: 'create_new_folder',\n command: () => onOpenNew?.('folder'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n {\n label: 'Create root folder',\n icon: 'create_new_folder',\n command: () => {\n clearSelection()\n onOpenNew?.('folder')\n },\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n ]\n\n const createTaskItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Create task',\n icon: 'add_task',\n command: () => onOpenNew?.('task'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n })\n\n const builtInMenuItems: Record<DefaultMenuItem, ContextMenuItemConstructor> = {\n ['copy-paste']: copyAndPasteItems,\n ['show-details']: showDetailsItem,\n ['expand-collapse']: expandCollapseChildrenItems,\n ['delete']: deleteItem,\n ['inherit']: inheritItem,\n ['export']: exportItem,\n ['create-folder']: createFolderItems,\n ['create-task']: createTaskItem,\n }\n\n const getCellData = (cellId: string): TableCellContextData | undefined => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId) return undefined\n const cellEntityData = getEntityById(rowId)\n const attribField = attribs.find((attrib) => attrib.name === colId?.replace('attrib_', ''))\n return {\n cellId: cellId,\n columnId: colId,\n entityId: cellEntityData?.entityId || rowId,\n entityType: cellEntityData?.entityType,\n attribField: attribField,\n }\n }\n\n const handleTableBodyContextMenu = (e: ContextEvent) => {\n const target = e.target as HTMLElement\n const tdEl = target.closest('td')\n // get id of first child of td\n const cellId = tdEl?.firstElementChild?.id\n\n if (!cellId) return\n\n const cellData = getCellData(cellId)\n\n if (!cellData) return\n\n let currentSelectedCells = Array.from(selectedCells)\n // if selecting a cell outside of the current selection\n if (!currentSelectedCells.includes(cellId) || !currentSelectedCells.length) {\n currentSelectedCells = [cellId]\n // update selection\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n\n const selectedCellsData = currentSelectedCells.flatMap((cellId) => getCellData(cellId) || [])\n const selectedCellRows: string[] = []\n const selectedCellColumns: string[] = []\n const selectedCellFullRows: string[] = []\n for (const { entityId, columnId } of selectedCellsData) {\n if (entityId && !selectedCellRows.includes(entityId)) selectedCellRows.push(entityId)\n if (columnId && !selectedCellColumns.includes(columnId)) selectedCellColumns.push(columnId)\n if (columnId === ROW_SELECTION_COLUMN_ID && !selectedCellFullRows.includes(entityId))\n selectedCellFullRows.push(entityId)\n }\n\n const constructedMenuItems = contextMenuItems.flatMap((constructor) =>\n typeof constructor === 'function'\n ? constructor(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: currentSelectedCells, // all selected cells\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n },\n {\n history,\n },\n )\n : builtInMenuItems[constructor]?.(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: currentSelectedCells, // all selected cells\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n },\n { history },\n ),\n )\n\n cellContextMenuShow(e, constructedMenuItems)\n }\n\n return { handleTableBodyContextMenu }\n}\n\nexport default useCellContextMenu\n"],"names":["useProjectTableContext","useClipboard","useSelectionCellsContext","useCellEditing","useCreateContextMenu","parseCellId","getPlatformShortcutKey","KeyMode","getCellId","ROW_SELECTION_COLUMN_ID","cellId","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCellContextMenu.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useCellContextMenu.ts"],"sourcesContent":["import { ContextMenuItemType, useCreateContextMenu } from '../../ContextMenu/useCreateContextMenu'\nimport useDeleteEntities from './useDeleteEntities'\nimport { getPlatformShortcutKey, KeyMode } from '../../../util/platform'\nimport { getCellId, parseCellId } from '../utils/cellUtils'\nimport { useClipboard } from '../context/ClipboardContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { useCellEditing } from '../context/CellEditingContext'\nimport { InheritFromParentEntity } from './useUpdateTableData'\nimport { ProjectTableAttribute } from '../types'\nimport { UseHistoryReturn } from './useHistory'\nimport { GROUP_BY_ID } from './useBuildGroupByTableData'\n\ntype ContextEvent = React.MouseEvent<HTMLTableSectionElement, MouseEvent>\n\nexport type TableCellContextData = {\n entityId: string\n cellId: string\n columnId: string\n entityType: 'folder' | 'task' | 'product' | 'version' | undefined\n attribField: ProjectTableAttribute | undefined\n isGroup: boolean // if the cell is a group header\n}\ntype DefaultMenuItem =\n | 'copy-paste'\n | 'show-details'\n | 'expand-collapse'\n | 'inherit'\n | 'delete'\n | 'export'\n | 'create-folder'\n | 'create-task'\nexport type ContextMenuItemConstructor = (\n e: ContextEvent,\n cell: TableCellContextData,\n selectedCells: TableCellContextData[],\n meta: {\n selectedCells: string[]\n selectedRows: string[]\n selectedColumns: string[]\n selectedFullRows: string[] // if the full row is selected\n selectedGroups: string[] // groups if any\n },\n context: {\n history: UseHistoryReturn\n },\n) => ContextMenuItemType | ContextMenuItemType[] | undefined\nexport type ContextMenuItemConstructors = (DefaultMenuItem | ContextMenuItemConstructor)[]\n\ntype CellContextMenuProps = {\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n}\n\nconst useCellContextMenu = ({ attribs, onOpenNew }: CellContextMenuProps) => {\n // context hooks\n const {\n projectName,\n showHierarchy,\n getEntityById,\n toggleExpandAll,\n toggleExpands,\n expanded,\n contextMenuItems = [],\n } = useProjectTableContext()\n const { copyToClipboard, exportCSV, pasteFromClipboard } = useClipboard()\n const { selectedCells, clearSelection, selectCell, focusCell } = useSelectionCellsContext()\n const { inheritFromParent, history } = useCellEditing()\n\n // update entity context\n\n // data mutations\n const deleteEntities = useDeleteEntities({})\n\n const [cellContextMenuShow] = useCreateContextMenu()\n\n // Helper function to identify attributes that can be inherited\n const getEntitiesToInherit = (selected: string[]): InheritFromParentEntity[] => {\n return selected.reduce((acc, cellId) => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId || !colId.startsWith('attrib_')) return acc\n\n const entity = getEntityById(rowId)\n if (!entity) return acc\n\n const attribName = colId.replace('attrib_', '')\n // get attrib model\n const attribModel = attribs.find((attrib) => attrib.name === attribName)\n // is the attrib inheritable?\n const isInheritable = attribModel?.data.inherit\n\n // Check if this attribute is owned by the entity (not inherited)\n if (entity.ownAttrib?.includes(attribName) && isInheritable) {\n // Find existing entry or create new one\n const existingIndex = acc.findIndex((item) => item.entityId === rowId)\n\n if (existingIndex >= 0) {\n // Add to existing entity's attribs if not already there\n if (!acc[existingIndex].attribs.includes(attribName)) {\n acc[existingIndex].attribs.push(attribName)\n }\n } else {\n // Create new entity entry\n acc.push({\n rowId: rowId,\n entityId: rowId,\n entityType: 'folderId' in entity ? 'task' : 'folder',\n attribs: [attribName],\n ownAttrib: entity.ownAttrib || [],\n // @ts-ignore\n folderId: entity.parentId ?? entity.folderId,\n })\n }\n }\n\n return acc\n }, [] as InheritFromParentEntity[])\n }\n\n const copyAndPasteItems: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n return [\n {\n label: 'Copy',\n icon: 'content_copy',\n shortcut: getPlatformShortcutKey('c', [KeyMode.Ctrl]),\n command: () => copyToClipboard(meta.selectedCells),\n hidden: cell.isGroup,\n },\n {\n label: `Copy row${meta.selectedFullRows.length > 1 ? 's' : ''}`,\n icon: 'content_copy',\n command: () => copyToClipboard(meta.selectedFullRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !meta.selectedFullRows.some(\n (cellId) => parseCellId(cellId)?.rowId === parseCellId(cell.cellId)?.rowId,\n ),\n },\n {\n label: 'Paste',\n icon: 'content_paste',\n shortcut: getPlatformShortcutKey('v', [KeyMode.Ctrl]),\n command: () => pasteFromClipboard(meta.selectedCells),\n hidden: cell.columnId === 'name' || cell.isGroup,\n disabled: cell.attribField?.readOnly,\n },\n ]\n }\n\n const showDetailsItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Show details',\n icon: 'dock_to_left',\n shortcut: 'Double click',\n command: () => {\n const rowSelectionCellId = getCellId(cell.entityId, ROW_SELECTION_COLUMN_ID)\n // select the row to open the details\n selectCell(rowSelectionCellId, false, false)\n },\n hidden: cell.columnId !== 'name' || meta.selectedRows.length > 1 || cell.isGroup,\n })\n\n const expandCollapseChildrenItems: ContextMenuItemConstructor = (e, cell, selected, meta) => [\n {\n label: 'Expand children',\n icon: 'expand_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, true),\n hidden: cell.columnId !== 'name' || cell.entityType !== 'folder',\n },\n {\n label: 'Collapse children',\n icon: 'collapse_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, false),\n hidden: cell.columnId !== 'name' || cell.entityType !== 'folder',\n },\n {\n label: 'Expand',\n icon: 'expand_all',\n command: () => toggleExpands(meta.selectedRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !cell.isGroup ||\n expanded[cell.entityId as keyof typeof expanded],\n },\n {\n label: 'Collapse',\n icon: 'collapse_all',\n command: () => toggleExpands(meta.selectedRows, false),\n hidden:\n cell.columnId !== 'name' ||\n !cell.isGroup ||\n !expanded[cell.entityId as keyof typeof expanded],\n },\n ]\n\n const deleteItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Delete',\n icon: 'delete',\n danger: true,\n command: () => deleteEntities(meta.selectedCells),\n hidden: cell.columnId !== 'name' || cell.isGroup,\n })\n\n const inheritItem: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n const entitiesToInherit = getEntitiesToInherit(meta.selectedCells)\n const canInheritFromParent =\n entitiesToInherit.length > 0 &&\n showHierarchy &&\n !(meta.selectedRows.length > 1 && meta.selectedColumns.length > 1)\n\n return {\n label: 'Inherit from parent',\n icon: 'disabled_by_default',\n command: () => inheritFromParent(entitiesToInherit),\n hidden: !canInheritFromParent,\n }\n }\n\n const exportItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Export selection',\n icon: 'download',\n command: () => exportCSV(Array.from(selectedCells), projectName),\n hidden: cell.isGroup,\n })\n\n const createFolderItems: ContextMenuItemConstructor = (e, cell) => [\n {\n label: 'Create folder',\n icon: 'create_new_folder',\n command: () => onOpenNew?.('folder'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n {\n label: 'Create root folder',\n icon: 'create_new_folder',\n command: () => {\n clearSelection()\n onOpenNew?.('folder')\n },\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n ]\n\n const createTaskItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Create task',\n icon: 'add_task',\n command: () => onOpenNew?.('task'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n })\n\n const builtInMenuItems: Record<DefaultMenuItem, ContextMenuItemConstructor> = {\n ['copy-paste']: copyAndPasteItems,\n ['show-details']: showDetailsItem,\n ['expand-collapse']: expandCollapseChildrenItems,\n ['delete']: deleteItem,\n ['inherit']: inheritItem,\n ['export']: exportItem,\n ['create-folder']: createFolderItems,\n ['create-task']: createTaskItem,\n }\n\n const getCellData = (cellId: string): TableCellContextData | undefined => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId) return undefined\n const cellEntityData = getEntityById(rowId)\n const attribField = attribs.find((attrib) => attrib.name === colId?.replace('attrib_', ''))\n return {\n cellId: cellId,\n columnId: colId,\n entityId: cellEntityData?.entityId || rowId,\n entityType: cellEntityData?.entityType,\n attribField: attribField,\n isGroup: rowId.startsWith(GROUP_BY_ID),\n }\n }\n\n const handleTableBodyContextMenu = (e: ContextEvent) => {\n const target = e.target as HTMLElement\n const tdEl = target.closest('td')\n // get id of first child of td\n const cellId = tdEl?.firstElementChild?.id\n\n if (!cellId) return\n\n const cellData = getCellData(cellId)\n\n if (!cellData) return\n\n let currentSelectedCells = Array.from(selectedCells)\n // if selecting a cell outside of the current selection\n if (!currentSelectedCells.includes(cellId) || !currentSelectedCells.length) {\n currentSelectedCells = [cellId]\n // update selection\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n\n const selectedCellsData = currentSelectedCells.flatMap((cellId) => getCellData(cellId) || [])\n const selectedCellRows: string[] = []\n const selectedCellColumns: string[] = []\n const selectedCellFullRows: string[] = []\n const selectedCellsGroups: string[] = [] // find cells that are group headers\n for (const { entityId, columnId } of selectedCellsData) {\n if (entityId && !selectedCellRows.includes(entityId)) selectedCellRows.push(entityId)\n if (columnId && !selectedCellColumns.includes(columnId)) selectedCellColumns.push(columnId)\n if (columnId === ROW_SELECTION_COLUMN_ID && !selectedCellFullRows.includes(entityId))\n selectedCellFullRows.push(entityId)\n if (entityId.startsWith(GROUP_BY_ID)) selectedCellsGroups.push(entityId)\n }\n\n const constructedMenuItems = contextMenuItems.flatMap((constructor) =>\n typeof constructor === 'function'\n ? constructor(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: currentSelectedCells, // all selected cells\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n selectedGroups: selectedCellsGroups, // groups if any\n },\n {\n history,\n },\n )\n : builtInMenuItems[constructor]?.(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: currentSelectedCells, // all selected cells\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n selectedGroups: selectedCellsGroups, // groups if any\n },\n { history },\n ),\n )\n\n cellContextMenuShow(e, constructedMenuItems)\n }\n\n return { handleTableBodyContextMenu }\n}\n\nexport default useCellContextMenu\n"],"names":["useProjectTableContext","useClipboard","useSelectionCellsContext","useCellEditing","useCreateContextMenu","parseCellId","getPlatformShortcutKey","KeyMode","getCellId","ROW_SELECTION_COLUMN_ID","GROUP_BY_ID","cellId","_a"],"mappings":"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"}
|