@ynput/ayon-frontend-shared 0.2.3 → 0.2.5
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/ContextMenu.cjs.js +1 -0
- package/dist/ContextMenu.cjs.js.map +1 -1
- package/dist/ContextMenu.es.js +1 -0
- package/dist/ContextMenu.es.js.map +1 -1
- package/dist/DetailsPanel.cjs.js +23 -1
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +23 -1
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +12 -1
- package/dist/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/ProjectTreeTable.es.js +14 -3
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/_virtual/_commonjsHelpers.cjs.js +0 -2
- package/dist/_virtual/_commonjsHelpers.cjs.js.map +1 -1
- package/dist/_virtual/_commonjsHelpers.es.js +0 -2
- package/dist/_virtual/_commonjsHelpers.es.js.map +1 -1
- package/dist/_virtual/index.cjs5.js +3 -5
- package/dist/_virtual/index.cjs5.js.map +1 -1
- package/dist/_virtual/index.cjs6.js +5 -3
- package/dist/_virtual/index.cjs6.js.map +1 -1
- package/dist/_virtual/index.es5.js +2 -5
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/_virtual/index.es6.js +5 -2
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/api.cjs.js +24 -1
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +26 -3
- package/dist/api.es.js.map +1 -1
- package/dist/components.cjs.js +12 -0
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +12 -0
- package/dist/components.es.js.map +1 -1
- package/dist/context.cjs.js +3 -0
- package/dist/context.cjs.js.map +1 -1
- package/dist/context.es.js +3 -0
- package/dist/context.es.js.map +1 -1
- package/dist/index.cjs.js +24 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +24 -2
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.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/shared/src/api/base/client.cjs.js +3 -0
- package/dist/shared/src/api/base/client.cjs.js.map +1 -1
- package/dist/shared/src/api/base/client.es.js +3 -0
- package/dist/shared/src/api/base/client.es.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +130 -0
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +130 -0
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +8 -4
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +9 -5
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +4 -0
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js +4 -0
- package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +267 -0
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +267 -0
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js +51 -0
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js +51 -0
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +169 -0
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js +169 -0
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/updateListsAttributes.cjs.js +29 -0
- package/dist/shared/src/api/queries/entityLists/updateListsAttributes.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/entityLists/updateListsAttributes.es.js +29 -0
- package/dist/shared/src/api/queries/entityLists/updateListsAttributes.es.js.map +1 -0
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +3 -4
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +3 -4
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +40 -5
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.es.js +40 -5
- package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -1
- package/dist/shared/src/api/queries/review/getReview.es.js +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +6 -2
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +7 -3
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +355 -0
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -0
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +355 -0
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -0
- package/dist/shared/src/components/AttributeEditor/components/MinMaxField.cjs.js +93 -0
- package/dist/shared/src/components/AttributeEditor/components/MinMaxField.cjs.js.map +1 -0
- package/dist/shared/src/components/AttributeEditor/components/MinMaxField.es.js +93 -0
- package/dist/shared/src/components/AttributeEditor/components/MinMaxField.es.js.map +1 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +4 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +4 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +6 -2
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +6 -2
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +1 -1
- package/dist/shared/src/components/EmptyPlaceholder/EmptyPlaceholder.cjs.js +4 -2
- package/dist/shared/src/components/EmptyPlaceholder/EmptyPlaceholder.cjs.js.map +1 -1
- package/dist/shared/src/components/EmptyPlaceholder/EmptyPlaceholder.es.js +4 -2
- package/dist/shared/src/components/EmptyPlaceholder/EmptyPlaceholder.es.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +3 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +3 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +23 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +23 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js +194 -0
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js +195 -0
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.cjs.js +128 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.cjs.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.es.js +128 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.es.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.styled.cjs.js +185 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.styled.es.js +185 -0
- package/dist/shared/src/components/EnumEditor/EnumEditor.styled.es.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.cjs.js +67 -0
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.cjs.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.es.js +68 -0
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.es.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/util/index.cjs.js +19 -0
- package/dist/shared/src/components/EnumEditor/util/index.cjs.js.map +1 -0
- package/dist/shared/src/components/EnumEditor/util/index.es.js +19 -0
- package/dist/shared/src/components/EnumEditor/util/index.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnItem.cjs.js +78 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnItem.cjs.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnItem.es.js +79 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnItem.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +352 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +353 -0
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +113 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +113 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.cjs.js +52 -0
- package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.cjs.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.es.js +53 -0
- package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.es.js.map +1 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +4 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +4 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +23 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +23 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +23 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +23 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +23 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +23 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +103 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +103 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js +83 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js.map +1 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js +83 -0
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js.map +1 -0
- 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/components/Watchers/Watchers.cjs.js +4 -0
- package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.es.js +4 -0
- package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +23 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +23 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +6 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +6 -1
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js +2 -2
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.es.js +2 -2
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +23 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +23 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenu.css +54 -19
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js +11 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js +11 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +23 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +23 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +25 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +25 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +24 -2
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +24 -2
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +26 -4
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +26 -4
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +5 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +5 -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/DetailsPanel/helpers/getThumbnails.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.es.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +6 -2
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +6 -2
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.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/ActivityMarkdownComponents.cjs.js +2 -2
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityMarkdownComponents.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityMarkdownComponents.es.js +2 -2
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityMarkdownComponents.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.es.js +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 +1 -0
- 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 +1 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.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/Tooltips/EntityTooltip/EntityTooltip.cjs.js +2 -1
- 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 +2 -1
- 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 +5 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +5 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +7 -3
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +7 -3
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.es.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +198 -222
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +201 -225
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +1 -3
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +1 -3
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +361 -0
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +361 -0
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.cjs.js +41 -20
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.es.js +41 -20
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +29 -35
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +31 -37
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js +33 -4
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js +34 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +17 -11
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +17 -11
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableQueriesContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardTypes.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardTypes.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardUtils.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardUtils.es.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +190 -146
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +190 -146
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +10 -3
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +10 -3
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js +15 -12
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js +15 -12
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +44 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +45 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.cjs.js +15 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.es.js +15 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.cjs.js +27 -31
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.es.js +27 -31
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/{useUpdateOverview.cjs.js → useUpdateTableData.cjs.js} +48 -20
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/{useUpdateOverview.es.js → useUpdateTableData.es.js} +48 -20
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js +25 -20
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js +25 -20
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.cjs.js +36 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.es.js +36 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +39 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +39 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/loadingUtils.cjs.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/loadingUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/loadingUtils.es.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/loadingUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js +57 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js +58 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +10 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +10 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +2 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +2 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +17 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +17 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +53 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +53 -0
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +24 -2
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +24 -2
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +6 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +6 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js +4 -0
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js +4 -0
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/context/SettingsPanelContext.cjs.js +63 -0
- package/dist/shared/src/context/SettingsPanelContext.cjs.js.map +1 -0
- package/dist/shared/src/context/SettingsPanelContext.es.js +63 -0
- package/dist/shared/src/context/SettingsPanelContext.es.js.map +1 -0
- package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js +1 -0
- package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ThumbnailUploaderContext.es.js +1 -0
- package/dist/shared/src/context/ThumbnailUploaderContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +5 -0
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +5 -0
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js +6 -2
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.es.js +6 -2
- package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
- package/dist/shared/src/util/confirmDelete.cjs.js +3 -3
- package/dist/shared/src/util/confirmDelete.cjs.js.map +1 -1
- package/dist/shared/src/util/confirmDelete.es.js +3 -3
- package/dist/shared/src/util/confirmDelete.es.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.cjs.js +48 -0
- package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -0
- package/dist/shared/src/util/getAttributeIcon.es.js +48 -0
- package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -0
- package/dist/shared/src/util/platform.cjs.js +7 -6
- package/dist/shared/src/util/platform.cjs.js.map +1 -1
- package/dist/shared/src/util/platform.es.js +7 -6
- package/dist/shared/src/util/platform.es.js.map +1 -1
- package/dist/types/SimpleTable/SimpleTable.d.ts +43 -0
- package/dist/types/SimpleTable/SimpleTable.styled.d.ts +10 -0
- package/dist/types/SimpleTable/SimpleTableRowTemplate.d.ts +13 -0
- package/dist/types/SimpleTable/context/SimpleTableContext.d.ts +23 -0
- package/dist/types/SimpleTable/index.d.ts +5 -0
- package/dist/types/api/generated/graphql.d.ts +255 -39
- package/dist/types/api/queries/activities/getActivities.d.ts +16 -0
- package/dist/types/api/queries/activities/updateActivities.d.ts +32 -0
- package/dist/types/api/queries/entities/getEntity.d.ts +16 -0
- package/dist/types/api/queries/entities/getEntityPanel.d.ts +16 -0
- package/dist/types/api/queries/entities/updateEntity.d.ts +16 -0
- package/dist/types/api/queries/entityLists/getLists.d.ts +3009 -0
- package/dist/types/api/queries/entityLists/getListsAttributes.d.ts +148 -0
- package/dist/types/api/queries/entityLists/index.d.ts +5 -0
- package/dist/types/api/queries/entityLists/types.d.ts +71 -0
- package/dist/types/api/queries/entityLists/updateLists.d.ts +1137 -0
- package/dist/types/api/queries/entityLists/updateListsAttributes.d.ts +176 -0
- package/dist/types/api/queries/index.d.ts +1 -0
- package/dist/types/api/queries/overview/getOverview.d.ts +17 -1
- package/dist/types/api/queries/overview/updateOverview.d.ts +2 -2
- package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +16 -0
- package/dist/types/api/queries/users/getUsers.d.ts +16 -0
- package/dist/types/components/AttributeEditor/AttributeEditor.d.ts +18 -0
- package/dist/types/components/AttributeEditor/components/MinMaxField.d.ts +14 -0
- package/dist/types/components/AttributeEditor/components/index.d.ts +1 -0
- package/dist/types/components/AttributeEditor/index.d.ts +1 -0
- package/dist/types/components/EnumEditor/DraggableEnumEditorItem.d.ts +10 -0
- package/dist/types/components/EnumEditor/EnumEditor.d.ts +22 -0
- package/dist/types/components/EnumEditor/EnumEditor.styled.d.ts +23 -0
- package/dist/types/components/EnumEditor/hooks/useDraggable.d.ts +17 -0
- package/dist/types/components/EnumEditor/index.d.ts +1 -0
- package/dist/types/components/EnumEditor/util/index.d.ts +1 -0
- package/dist/types/components/ProjectTableSettings/ColumnItem.d.ts +14 -0
- package/dist/types/components/ProjectTableSettings/ColumnsSettings.d.ts +9 -0
- package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +18 -0
- package/dist/types/components/ProjectTableSettings/SortableColumnItem.d.ts +13 -0
- package/dist/types/components/ProjectTableSettings/index.d.ts +1 -0
- package/dist/types/components/SettingsPanel/SettingsPanel.d.ts +16 -0
- package/dist/types/components/SettingsPanel/SettingsPanelItemTemplate.d.ts +20 -0
- package/dist/types/components/SettingsPanel/index.d.ts +2 -0
- package/dist/types/components/index.d.ts +4 -0
- package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +3 -1
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +20 -7
- package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +23 -0
- package/dist/types/containers/ProjectTreeTable/context/CellEditingContext.d.ts +3 -3
- package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +6 -2
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +41 -34
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableQueriesContext.d.ts +3 -2
- package/dist/types/containers/ProjectTreeTable/context/clipboard/clipboardTypes.d.ts +4 -1
- package/dist/types/containers/ProjectTreeTable/context/clipboard/clipboardUtils.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +21 -2
- package/dist/types/containers/ProjectTreeTable/hooks/useFolderRelationships.d.ts +7 -7
- package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +6 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useHistory.d.ts +5 -3
- package/dist/types/containers/ProjectTreeTable/hooks/useOverviewTable.d.ts +5 -20
- package/dist/types/containers/ProjectTreeTable/hooks/{useUpdateOverview.d.ts → useUpdateTableData.d.ts} +12 -3
- package/dist/types/containers/ProjectTreeTable/index.d.ts +5 -1
- package/dist/types/containers/ProjectTreeTable/types/index.d.ts +4 -6
- package/dist/types/containers/ProjectTreeTable/types/table.d.ts +51 -12
- package/dist/types/containers/ProjectTreeTable/utils/cellUtils.d.ts +2 -3
- package/dist/types/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.d.ts +14 -2
- package/dist/types/containers/ProjectTreeTable/utils/getReadOnlyLists.d.ts +5 -0
- package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +14 -0
- package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
- package/dist/types/containers/ProjectTreeTable/utils/validateUpdateEntities.d.ts +4 -0
- package/dist/types/containers/ProjectTreeTable/widgets/EntityNameWidget.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/widgets/EnumWidget.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/widgets/TextWidget.d.ts +2 -0
- package/dist/types/containers/ProjectTreeTable/widgets/ThumbnailWidget.d.ts +9 -0
- package/dist/types/containers/ProjectTreeTable/widgets/index.d.ts +1 -0
- package/dist/types/context/SettingsPanelContext.d.ts +20 -0
- package/dist/types/context/index.d.ts +1 -0
- package/dist/types/util/getAttributeIcon.d.ts +4 -0
- package/dist/types/util/index.d.ts +1 -0
- package/dist/util.cjs.js +2 -0
- package/dist/util.cjs.js.map +1 -1
- package/dist/util.es.js +2 -0
- package/dist/util.es.js.map +1 -1
- package/package.json +2 -1
- package/dist/_virtual/lodash.cjs.js +0 -6
- package/dist/_virtual/lodash.cjs.js.map +0 -1
- package/dist/_virtual/lodash.cjs2.js +0 -5
- package/dist/_virtual/lodash.cjs2.js.map +0 -1
- package/dist/_virtual/lodash.es.js +0 -6
- package/dist/_virtual/lodash.es.js.map +0 -1
- package/dist/_virtual/lodash.es2.js +0 -5
- package/dist/_virtual/lodash.es2.js.map +0 -1
- package/dist/shared/node_modules/lodash/lodash.cjs.js +0 -5492
- package/dist/shared/node_modules/lodash/lodash.cjs.js.map +0 -1
- package/dist/shared/node_modules/lodash/lodash.es.js +0 -5492
- package/dist/shared/node_modules/lodash/lodash.es.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTableColumns.cjs.js +0 -269
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTableColumns.cjs.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTableColumns.es.js +0 -270
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTableColumns.es.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateOverview.cjs.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateOverview.es.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useValidateUpdates.cjs.js +0 -69
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useValidateUpdates.cjs.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useValidateUpdates.es.js +0 -70
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useValidateUpdates.es.js.map +0 -1
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTableColumns.d.ts +0 -16
- package/dist/types/containers/ProjectTreeTable/hooks/useValidateUpdates.d.ts +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFolderRelationships.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport { EditorTaskNode, FolderNodeMap, MatchingFolder, TaskNodeMap } from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { AttributeWithPermissions } from '../types'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: AttributeWithPermissions[] | undefined\n}\n\nexport default function useFolderRelationships({\n foldersMap,\n tasksMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n for (const folder of foldersMap.values()) {\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [foldersMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id) {\n const folder = foldersMap.get(currentId)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap.get(currentId)\n if (taskIds?.length) {\n for (const taskId of taskIds) {\n const task = tasksMap.get(taskId)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [foldersMap, tasksByFolderMap, tasksMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = foldersMap.get(currentId)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [foldersMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap.get(taskId)\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":["useMemo","useCallback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFolderRelationships.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport {\n EditorTaskNode,\n EMapResult,\n EntitiesMap,\n FolderNodeMap,\n MatchingFolder,\n TaskNodeMap,\n} from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { ProjectTableAttribute } from '../types'\nimport { getEntityDataById } from '../utils/cellUtils'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n tasksMap?: TaskNodeMap\n entitiesMap?: EntitiesMap\n tasksByFolderMap?: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: ProjectTableAttribute[] | undefined\n}\n\nexport default function useFolderRelationships({\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n if (!entitiesMap) return map\n for (const folder of entitiesMap.values()) {\n // Skip if not a folder\n if (folder.entityType !== 'folder') continue\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [entitiesMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id && entitiesMap) {\n const folder = getEntityDataById<'folder'>(currentId, entitiesMap)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap?.get(currentId)\n if (taskIds?.length && entitiesMap) {\n for (const taskId of taskIds) {\n const task = getEntityDataById<'task'>(taskId, entitiesMap)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = entitiesMap && getEntityDataById<'folder'>(currentId, entitiesMap)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [entitiesMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap?.get(taskId) as EMapResult<'task'>\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":["useMemo","useCallback","getEntityDataById"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useMemo, useCallback } from "react";
|
|
2
|
+
import { getEntityDataById } from "../utils/cellUtils.es.js";
|
|
2
3
|
function useFolderRelationships({
|
|
3
|
-
foldersMap,
|
|
4
4
|
tasksMap,
|
|
5
|
+
entitiesMap,
|
|
5
6
|
tasksByFolderMap,
|
|
6
7
|
getEntityById,
|
|
7
8
|
projectAttrib,
|
|
@@ -9,7 +10,9 @@ function useFolderRelationships({
|
|
|
9
10
|
}) {
|
|
10
11
|
const folderChildrenMap = useMemo(() => {
|
|
11
12
|
const map = /* @__PURE__ */ new Map();
|
|
12
|
-
|
|
13
|
+
if (!entitiesMap) return map;
|
|
14
|
+
for (const folder of entitiesMap.values()) {
|
|
15
|
+
if (folder.entityType !== "folder") continue;
|
|
13
16
|
const parentId = folder.parentId;
|
|
14
17
|
if (!parentId) continue;
|
|
15
18
|
if (!map.has(parentId)) {
|
|
@@ -18,7 +21,7 @@ function useFolderRelationships({
|
|
|
18
21
|
map.get(parentId).push(folder.id);
|
|
19
22
|
}
|
|
20
23
|
return map;
|
|
21
|
-
}, [
|
|
24
|
+
}, [entitiesMap]);
|
|
22
25
|
const getChildrenEntities = useCallback(
|
|
23
26
|
(id) => {
|
|
24
27
|
const descendants = [];
|
|
@@ -28,14 +31,14 @@ function useFolderRelationships({
|
|
|
28
31
|
const currentId = queue.shift();
|
|
29
32
|
if (visited.has(currentId)) continue;
|
|
30
33
|
visited.add(currentId);
|
|
31
|
-
if (currentId !== id) {
|
|
32
|
-
const folder =
|
|
34
|
+
if (currentId !== id && entitiesMap) {
|
|
35
|
+
const folder = getEntityDataById(currentId, entitiesMap);
|
|
33
36
|
if (folder) descendants.push({ ...folder, entityType: "folder" });
|
|
34
37
|
}
|
|
35
|
-
const taskIds = tasksByFolderMap.get(currentId);
|
|
36
|
-
if (taskIds == null ? void 0 : taskIds.length) {
|
|
38
|
+
const taskIds = tasksByFolderMap == null ? void 0 : tasksByFolderMap.get(currentId);
|
|
39
|
+
if ((taskIds == null ? void 0 : taskIds.length) && entitiesMap) {
|
|
37
40
|
for (const taskId of taskIds) {
|
|
38
|
-
const task =
|
|
41
|
+
const task = getEntityDataById(taskId, entitiesMap);
|
|
39
42
|
if (task) descendants.push({ ...task, entityType: "task" });
|
|
40
43
|
}
|
|
41
44
|
}
|
|
@@ -46,25 +49,25 @@ function useFolderRelationships({
|
|
|
46
49
|
}
|
|
47
50
|
return descendants;
|
|
48
51
|
},
|
|
49
|
-
[
|
|
52
|
+
[entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap]
|
|
50
53
|
);
|
|
51
54
|
const getAncestorsOf = useCallback(
|
|
52
55
|
(id) => {
|
|
53
56
|
const ancestors = [];
|
|
54
57
|
let currentId = id;
|
|
55
58
|
while (true) {
|
|
56
|
-
const entity =
|
|
59
|
+
const entity = entitiesMap && getEntityDataById(currentId, entitiesMap);
|
|
57
60
|
if (!entity || !entity.parentId) break;
|
|
58
61
|
ancestors.push(entity.parentId);
|
|
59
62
|
currentId = entity.parentId;
|
|
60
63
|
}
|
|
61
64
|
return ancestors;
|
|
62
65
|
},
|
|
63
|
-
[
|
|
66
|
+
[entitiesMap]
|
|
64
67
|
);
|
|
65
68
|
const getTaskAncestors = useCallback(
|
|
66
69
|
(taskId) => {
|
|
67
|
-
const task = tasksMap.get(taskId);
|
|
70
|
+
const task = tasksMap == null ? void 0 : tasksMap.get(taskId);
|
|
68
71
|
if (!task || !task.folderId) return [];
|
|
69
72
|
const ancestors = [task.folderId];
|
|
70
73
|
const folderAncestors = getAncestorsOf(task.folderId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFolderRelationships.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport { EditorTaskNode, FolderNodeMap, MatchingFolder, TaskNodeMap } from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { AttributeWithPermissions } from '../types'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: AttributeWithPermissions[] | undefined\n}\n\nexport default function useFolderRelationships({\n foldersMap,\n tasksMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n for (const folder of foldersMap.values()) {\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [foldersMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id) {\n const folder = foldersMap.get(currentId)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap.get(currentId)\n if (taskIds?.length) {\n for (const taskId of taskIds) {\n const task = tasksMap.get(taskId)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [foldersMap, tasksByFolderMap, tasksMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = foldersMap.get(currentId)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [foldersMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap.get(taskId)\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFolderRelationships.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport {\n EditorTaskNode,\n EMapResult,\n EntitiesMap,\n FolderNodeMap,\n MatchingFolder,\n TaskNodeMap,\n} from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { ProjectTableAttribute } from '../types'\nimport { getEntityDataById } from '../utils/cellUtils'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n tasksMap?: TaskNodeMap\n entitiesMap?: EntitiesMap\n tasksByFolderMap?: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: ProjectTableAttribute[] | undefined\n}\n\nexport default function useFolderRelationships({\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n if (!entitiesMap) return map\n for (const folder of entitiesMap.values()) {\n // Skip if not a folder\n if (folder.entityType !== 'folder') continue\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [entitiesMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id && entitiesMap) {\n const folder = getEntityDataById<'folder'>(currentId, entitiesMap)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap?.get(currentId)\n if (taskIds?.length && entitiesMap) {\n for (const taskId of taskIds) {\n const task = getEntityDataById<'task'>(taskId, entitiesMap)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = entitiesMap && getEntityDataById<'folder'>(currentId, entitiesMap)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [entitiesMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap?.get(taskId) as EMapResult<'task'>\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const React = require("react");
|
|
3
|
+
const productTypes = require("../../../util/productTypes.cjs.js");
|
|
4
|
+
require("lodash");
|
|
5
|
+
require("react-toastify");
|
|
6
|
+
require("../../../util/pubsub.cjs.js");
|
|
7
|
+
const useGetEntityTypeData = ({ projectInfo }) => {
|
|
8
|
+
const { folderTypes = [], taskTypes = [] } = projectInfo || {};
|
|
9
|
+
const folderTypesByName = React.useMemo(() => {
|
|
10
|
+
const map = /* @__PURE__ */ new Map();
|
|
11
|
+
for (const folderType of folderTypes) {
|
|
12
|
+
map.set(folderType.name, folderType);
|
|
13
|
+
}
|
|
14
|
+
return map;
|
|
15
|
+
}, [folderTypes]);
|
|
16
|
+
const taskTypesByName = React.useMemo(() => {
|
|
17
|
+
const map = /* @__PURE__ */ new Map();
|
|
18
|
+
for (const taskType of taskTypes) {
|
|
19
|
+
map.set(taskType.name, taskType);
|
|
20
|
+
}
|
|
21
|
+
return map;
|
|
22
|
+
}, [taskTypes]);
|
|
23
|
+
const productTypesByName = React.useMemo(() => {
|
|
24
|
+
const map = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const name in productTypes) {
|
|
26
|
+
map.set(name, productTypes[name]);
|
|
27
|
+
}
|
|
28
|
+
return map;
|
|
29
|
+
}, [productTypes]);
|
|
30
|
+
const getEntityTypeData = (type, subType) => {
|
|
31
|
+
if (!type || !subType) return;
|
|
32
|
+
switch (type) {
|
|
33
|
+
case "folder":
|
|
34
|
+
return folderTypesByName.get(subType);
|
|
35
|
+
case "task":
|
|
36
|
+
return taskTypesByName.get(subType);
|
|
37
|
+
case "product":
|
|
38
|
+
return productTypesByName.get(subType);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return getEntityTypeData;
|
|
42
|
+
};
|
|
43
|
+
module.exports = useGetEntityTypeData;
|
|
44
|
+
//# sourceMappingURL=useGetEntityTypeData.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGetEntityTypeData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { ProjectModel, TaskType, FolderType } from '../types/project'\nimport { productTypes } from '@shared/util'\n\ntype Props = {\n projectInfo?: ProjectModel\n}\n\nconst useGetEntityTypeData = ({ projectInfo }: Props) => {\n const { folderTypes = [], taskTypes = [] } = projectInfo || {}\n\n // create a map of folder types by name for efficient lookups\n const folderTypesByName = useMemo(() => {\n const map: Map<string, FolderType> = new Map()\n for (const folderType of folderTypes) {\n map.set(folderType.name, folderType)\n }\n return map\n }, [folderTypes])\n\n // create a map of task types by name for efficient lookups\n const taskTypesByName = useMemo(() => {\n const map: Map<string, TaskType> = new Map()\n for (const taskType of taskTypes) {\n map.set(taskType.name, taskType)\n }\n return map\n }, [taskTypes])\n\n // convert object to map for product types\n const productTypesByName = useMemo(() => {\n const map: Map<string, any> = new Map()\n for (const name in productTypes) {\n map.set(name, productTypes[name])\n }\n return map\n }, [productTypes])\n\n const getEntityTypeData = (\n type: 'folder' | 'task' | 'product' | string | undefined,\n subType?: string,\n ) => {\n if (!type || !subType) return\n switch (type) {\n case 'folder':\n return folderTypesByName.get(subType)\n case 'task':\n return taskTypesByName.get(subType)\n case 'product':\n return productTypesByName.get(subType)\n\n default:\n break\n }\n }\n\n return getEntityTypeData\n}\n\nexport default useGetEntityTypeData\n"],"names":["useMemo"],"mappings":";;;;;;AAQA,MAAM,uBAAuB,CAAC,EAAE,kBAAyB;AACjD,QAAA,EAAE,cAAc,CAAC,GAAG,YAAY,CAAC,EAAA,IAAM,eAAe,CAAC;AAGvD,QAAA,oBAAoBA,MAAAA,QAAQ,MAAM;AAChC,UAAA,0BAAmC,IAAI;AAC7C,eAAW,cAAc,aAAa;AAChC,UAAA,IAAI,WAAW,MAAM,UAAU;AAAA,IAAA;AAE9B,WAAA;AAAA,EAAA,GACN,CAAC,WAAW,CAAC;AAGV,QAAA,kBAAkBA,MAAAA,QAAQ,MAAM;AAC9B,UAAA,0BAAiC,IAAI;AAC3C,eAAW,YAAY,WAAW;AAC5B,UAAA,IAAI,SAAS,MAAM,QAAQ;AAAA,IAAA;AAE1B,WAAA;AAAA,EAAA,GACN,CAAC,SAAS,CAAC;AAGR,QAAA,qBAAqBA,MAAAA,QAAQ,MAAM;AACjC,UAAA,0BAA4B,IAAI;AACtC,eAAW,QAAQ,cAAc;AAC/B,UAAI,IAAI,MAAM,aAAa,IAAI,CAAC;AAAA,IAAA;AAE3B,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,CAAC;AAEX,QAAA,oBAAoB,CACxB,MACA,YACG;AACC,QAAA,CAAC,QAAQ,CAAC,QAAS;AACvB,YAAQ,MAAM;AAAA,MACZ,KAAK;AACI,eAAA,kBAAkB,IAAI,OAAO;AAAA,MACtC,KAAK;AACI,eAAA,gBAAgB,IAAI,OAAO;AAAA,MACpC,KAAK;AACI,eAAA,mBAAmB,IAAI,OAAO;AAAA,IAGrC;AAAA,EAEN;AAEO,SAAA;AACT;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import productTypes from "../../../util/productTypes.es.js";
|
|
3
|
+
import "lodash";
|
|
4
|
+
import "react-toastify";
|
|
5
|
+
import "../../../util/pubsub.es.js";
|
|
6
|
+
const useGetEntityTypeData = ({ projectInfo }) => {
|
|
7
|
+
const { folderTypes = [], taskTypes = [] } = projectInfo || {};
|
|
8
|
+
const folderTypesByName = useMemo(() => {
|
|
9
|
+
const map = /* @__PURE__ */ new Map();
|
|
10
|
+
for (const folderType of folderTypes) {
|
|
11
|
+
map.set(folderType.name, folderType);
|
|
12
|
+
}
|
|
13
|
+
return map;
|
|
14
|
+
}, [folderTypes]);
|
|
15
|
+
const taskTypesByName = useMemo(() => {
|
|
16
|
+
const map = /* @__PURE__ */ new Map();
|
|
17
|
+
for (const taskType of taskTypes) {
|
|
18
|
+
map.set(taskType.name, taskType);
|
|
19
|
+
}
|
|
20
|
+
return map;
|
|
21
|
+
}, [taskTypes]);
|
|
22
|
+
const productTypesByName = useMemo(() => {
|
|
23
|
+
const map = /* @__PURE__ */ new Map();
|
|
24
|
+
for (const name in productTypes) {
|
|
25
|
+
map.set(name, productTypes[name]);
|
|
26
|
+
}
|
|
27
|
+
return map;
|
|
28
|
+
}, [productTypes]);
|
|
29
|
+
const getEntityTypeData = (type, subType) => {
|
|
30
|
+
if (!type || !subType) return;
|
|
31
|
+
switch (type) {
|
|
32
|
+
case "folder":
|
|
33
|
+
return folderTypesByName.get(subType);
|
|
34
|
+
case "task":
|
|
35
|
+
return taskTypesByName.get(subType);
|
|
36
|
+
case "product":
|
|
37
|
+
return productTypesByName.get(subType);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
return getEntityTypeData;
|
|
41
|
+
};
|
|
42
|
+
export {
|
|
43
|
+
useGetEntityTypeData as default
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=useGetEntityTypeData.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGetEntityTypeData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { ProjectModel, TaskType, FolderType } from '../types/project'\nimport { productTypes } from '@shared/util'\n\ntype Props = {\n projectInfo?: ProjectModel\n}\n\nconst useGetEntityTypeData = ({ projectInfo }: Props) => {\n const { folderTypes = [], taskTypes = [] } = projectInfo || {}\n\n // create a map of folder types by name for efficient lookups\n const folderTypesByName = useMemo(() => {\n const map: Map<string, FolderType> = new Map()\n for (const folderType of folderTypes) {\n map.set(folderType.name, folderType)\n }\n return map\n }, [folderTypes])\n\n // create a map of task types by name for efficient lookups\n const taskTypesByName = useMemo(() => {\n const map: Map<string, TaskType> = new Map()\n for (const taskType of taskTypes) {\n map.set(taskType.name, taskType)\n }\n return map\n }, [taskTypes])\n\n // convert object to map for product types\n const productTypesByName = useMemo(() => {\n const map: Map<string, any> = new Map()\n for (const name in productTypes) {\n map.set(name, productTypes[name])\n }\n return map\n }, [productTypes])\n\n const getEntityTypeData = (\n type: 'folder' | 'task' | 'product' | string | undefined,\n subType?: string,\n ) => {\n if (!type || !subType) return\n switch (type) {\n case 'folder':\n return folderTypesByName.get(subType)\n case 'task':\n return taskTypesByName.get(subType)\n case 'product':\n return productTypesByName.get(subType)\n\n default:\n break\n }\n }\n\n return getEntityTypeData\n}\n\nexport default useGetEntityTypeData\n"],"names":[],"mappings":";;;;;AAQA,MAAM,uBAAuB,CAAC,EAAE,kBAAyB;AACjD,QAAA,EAAE,cAAc,CAAC,GAAG,YAAY,CAAC,EAAA,IAAM,eAAe,CAAC;AAGvD,QAAA,oBAAoB,QAAQ,MAAM;AAChC,UAAA,0BAAmC,IAAI;AAC7C,eAAW,cAAc,aAAa;AAChC,UAAA,IAAI,WAAW,MAAM,UAAU;AAAA,IAAA;AAE9B,WAAA;AAAA,EAAA,GACN,CAAC,WAAW,CAAC;AAGV,QAAA,kBAAkB,QAAQ,MAAM;AAC9B,UAAA,0BAAiC,IAAI;AAC3C,eAAW,YAAY,WAAW;AAC5B,UAAA,IAAI,SAAS,MAAM,QAAQ;AAAA,IAAA;AAE1B,WAAA;AAAA,EAAA,GACN,CAAC,SAAS,CAAC;AAGR,QAAA,qBAAqB,QAAQ,MAAM;AACjC,UAAA,0BAA4B,IAAI;AACtC,eAAW,QAAQ,cAAc;AAC/B,UAAI,IAAI,MAAM,aAAa,IAAI,CAAC;AAAA,IAAA;AAE3B,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,CAAC;AAEX,QAAA,oBAAoB,CACxB,MACA,YACG;AACC,QAAA,CAAC,QAAQ,CAAC,QAAS;AACvB,YAAQ,MAAM;AAAA,MACZ,KAAK;AACI,eAAA,kBAAkB,IAAI,OAAO;AAAA,MACtC,KAAK;AACI,eAAA,gBAAgB,IAAI,OAAO;AAAA,MACpC,KAAK;AACI,eAAA,mBAAmB,IAAI,OAAO;AAAA,IAGrC;AAAA,EAEN;AAEO,SAAA;AACT;"}
|
|
@@ -14,23 +14,26 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
14
14
|
},
|
|
15
15
|
[maxHistorySize]
|
|
16
16
|
);
|
|
17
|
-
const
|
|
17
|
+
const processHistoryActions = (entities) => {
|
|
18
18
|
return entities.reduce(
|
|
19
19
|
(acc, entity) => {
|
|
20
|
-
if (entity
|
|
20
|
+
if (typeof entity === "function") {
|
|
21
|
+
acc[2].push(entity);
|
|
22
|
+
} else if (entity.wasInherited && entity.folderId) {
|
|
21
23
|
acc[1].push({
|
|
22
24
|
entityId: entity.id,
|
|
23
25
|
entityType: entity.type,
|
|
24
26
|
folderId: entity.folderId,
|
|
25
27
|
attribs: [entity.field],
|
|
26
|
-
ownAttrib: entity.ownAttrib
|
|
28
|
+
ownAttrib: entity.ownAttrib,
|
|
29
|
+
rowId: entity.rowId
|
|
27
30
|
});
|
|
28
31
|
} else {
|
|
29
32
|
acc[0].push(entity);
|
|
30
33
|
}
|
|
31
34
|
return acc;
|
|
32
35
|
},
|
|
33
|
-
[[], []]
|
|
36
|
+
[[], [], []]
|
|
34
37
|
);
|
|
35
38
|
};
|
|
36
39
|
const undo = React.useCallback(() => {
|
|
@@ -39,7 +42,7 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
39
42
|
const last = newPast.pop();
|
|
40
43
|
setPast(newPast);
|
|
41
44
|
setFuture((f) => [...f, last]);
|
|
42
|
-
return
|
|
45
|
+
return processHistoryActions(last.undo);
|
|
43
46
|
}, [past]);
|
|
44
47
|
const redo = React.useCallback(() => {
|
|
45
48
|
if (future.length === 0) return null;
|
|
@@ -47,8 +50,12 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
47
50
|
const next = newFuture.pop();
|
|
48
51
|
setFuture(newFuture);
|
|
49
52
|
setPast((p) => [...p, next]);
|
|
50
|
-
return
|
|
53
|
+
return processHistoryActions(next.redo);
|
|
51
54
|
}, [future]);
|
|
55
|
+
const removeHistoryEntries = React.useCallback((count) => {
|
|
56
|
+
setPast((prev) => prev.slice(0, Math.max(0, prev.length - count)));
|
|
57
|
+
setFuture((prev) => prev.slice(0, Math.max(0, prev.length - count)));
|
|
58
|
+
}, []);
|
|
52
59
|
const clearHistory = React.useCallback(() => {
|
|
53
60
|
setPast([]);
|
|
54
61
|
setFuture([]);
|
|
@@ -59,7 +66,8 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
59
66
|
redo,
|
|
60
67
|
canUndo: past.length > 0,
|
|
61
68
|
canRedo: future.length > 0,
|
|
62
|
-
clearHistory
|
|
69
|
+
clearHistory,
|
|
70
|
+
removeHistoryEntries
|
|
63
71
|
};
|
|
64
72
|
};
|
|
65
73
|
module.exports = useHistory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHistory.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useHistory.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { EntityUpdate, InheritFromParentEntity } from './
|
|
1
|
+
{"version":3,"file":"useHistory.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useHistory.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { EntityUpdate, InheritFromParentEntity } from './useUpdateTableData'\n\nexport interface HistoryEntityUpdate extends EntityUpdate {\n ownAttrib: string[]\n folderId?: string\n wasInherited?: boolean\n}\n\ninterface HistoryEntry {\n undo: (HistoryEntityUpdate | HistoryCustomCallback)[]\n redo: (HistoryEntityUpdate | HistoryCustomCallback)[]\n timestamp: number\n}\n\ntype SplitEntitiesByInherited = [EntityUpdate[], InheritFromParentEntity[], HistoryCustomCallback[]]\n\ntype HistoryCustomCallback = () => void\n\nexport interface UseHistoryReturn {\n pushHistory: (\n undo: (HistoryEntityUpdate | HistoryCustomCallback)[],\n redo: (HistoryEntityUpdate | HistoryCustomCallback)[],\n ) => void\n undo: () => SplitEntitiesByInherited | null\n redo: () => SplitEntitiesByInherited | null\n canUndo: boolean\n canRedo: boolean\n clearHistory: () => void\n removeHistoryEntries: (count: number) => void\n}\n\nconst useHistory = (maxHistorySize = 50): UseHistoryReturn => {\n const [past, setPast] = useState<HistoryEntry[]>([])\n const [future, setFuture] = useState<HistoryEntry[]>([])\n\n const pushHistory: UseHistoryReturn['pushHistory'] = useCallback(\n (undo, redo) => {\n if (!undo.length) return\n setPast((prev) => {\n const updated = [...prev, { undo, redo, timestamp: Date.now() }]\n return updated.length > maxHistorySize\n ? updated.slice(updated.length - maxHistorySize)\n : updated\n })\n setFuture([])\n },\n [maxHistorySize],\n )\n\n // Process actions by type: regular updates, inheritance, and custom callbacks\n const processHistoryActions = (\n entities: (HistoryEntityUpdate | HistoryCustomCallback)[],\n ): SplitEntitiesByInherited => {\n return entities.reduce(\n (acc, entity) => {\n if (typeof entity === 'function') {\n acc[2].push(entity)\n } else if (entity.wasInherited && entity.folderId) {\n acc[1].push({\n entityId: entity.id,\n entityType: entity.type,\n folderId: entity.folderId,\n attribs: [entity.field],\n ownAttrib: entity.ownAttrib,\n rowId: entity.rowId,\n })\n } else {\n acc[0].push(entity)\n }\n return acc\n },\n [[], [], []] as SplitEntitiesByInherited,\n )\n }\n\n const undo = useCallback(() => {\n if (past.length === 0) return null\n const newPast = [...past]\n const last = newPast.pop()!\n setPast(newPast)\n setFuture((f) => [...f, last])\n\n return processHistoryActions(last.undo)\n }, [past])\n\n const redo = useCallback(() => {\n if (future.length === 0) return null\n const newFuture = [...future]\n const next = newFuture.pop()!\n setFuture(newFuture)\n setPast((p) => [...p, next])\n return processHistoryActions(next.redo)\n }, [future])\n\n // function to remove x number of entries from the history undo/redo stacks\n const removeHistoryEntries = useCallback((count: number) => {\n setPast((prev) => prev.slice(0, Math.max(0, prev.length - count)))\n setFuture((prev) => prev.slice(0, Math.max(0, prev.length - count)))\n }, [])\n\n const clearHistory = useCallback(() => {\n setPast([])\n setFuture([])\n }, [])\n\n return {\n pushHistory,\n undo,\n redo,\n canUndo: past.length > 0,\n canRedo: future.length > 0,\n clearHistory,\n removeHistoryEntries,\n }\n}\n\nexport default useHistory\n"],"names":["useState","useCallback","undo","redo"],"mappings":";;AAgCM,MAAA,aAAa,CAAC,iBAAiB,OAAyB;AAC5D,QAAM,CAAC,MAAM,OAAO,IAAIA,MAAAA,SAAyB,CAAA,CAAE;AACnD,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAAyB,CAAA,CAAE;AAEvD,QAAM,cAA+CC,MAAA;AAAA,IACnD,CAACC,OAAMC,UAAS;AACV,UAAA,CAACD,MAAK,OAAQ;AAClB,cAAQ,CAAC,SAAS;AAChB,cAAM,UAAU,CAAC,GAAG,MAAM,EAAE,MAAAA,OAAM,MAAAC,OAAM,WAAW,KAAK,OAAO;AACxD,eAAA,QAAQ,SAAS,iBACpB,QAAQ,MAAM,QAAQ,SAAS,cAAc,IAC7C;AAAA,MAAA,CACL;AACD,gBAAU,CAAA,CAAE;AAAA,IACd;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAGM,QAAA,wBAAwB,CAC5B,aAC6B;AAC7B,WAAO,SAAS;AAAA,MACd,CAAC,KAAK,WAAW;AACX,YAAA,OAAO,WAAW,YAAY;AAC5B,cAAA,CAAC,EAAE,KAAK,MAAM;AAAA,QACT,WAAA,OAAO,gBAAgB,OAAO,UAAU;AAC7C,cAAA,CAAC,EAAE,KAAK;AAAA,YACV,UAAU,OAAO;AAAA,YACjB,YAAY,OAAO;AAAA,YACnB,UAAU,OAAO;AAAA,YACjB,SAAS,CAAC,OAAO,KAAK;AAAA,YACtB,WAAW,OAAO;AAAA,YAClB,OAAO,OAAO;AAAA,UAAA,CACf;AAAA,QAAA,OACI;AACD,cAAA,CAAC,EAAE,KAAK,MAAM;AAAA,QAAA;AAEb,eAAA;AAAA,MACT;AAAA,MACA,CAAC,CAAA,GAAI,CAAA,GAAI,CAAE,CAAA;AAAA,IACb;AAAA,EACF;AAEM,QAAA,OAAOF,MAAAA,YAAY,MAAM;AACzB,QAAA,KAAK,WAAW,EAAU,QAAA;AACxB,UAAA,UAAU,CAAC,GAAG,IAAI;AAClB,UAAA,OAAO,QAAQ,IAAI;AACzB,YAAQ,OAAO;AACf,cAAU,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;AAEtB,WAAA,sBAAsB,KAAK,IAAI;AAAA,EAAA,GACrC,CAAC,IAAI,CAAC;AAEH,QAAA,OAAOA,MAAAA,YAAY,MAAM;AACzB,QAAA,OAAO,WAAW,EAAU,QAAA;AAC1B,UAAA,YAAY,CAAC,GAAG,MAAM;AACtB,UAAA,OAAO,UAAU,IAAI;AAC3B,cAAU,SAAS;AACnB,YAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;AACpB,WAAA,sBAAsB,KAAK,IAAI;AAAA,EAAA,GACrC,CAAC,MAAM,CAAC;AAGL,QAAA,uBAAuBA,kBAAY,CAAC,UAAkB;AAC1D,YAAQ,CAAC,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,SAAS,KAAK,CAAC,CAAC;AACjE,cAAU,CAAC,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,SAAS,KAAK,CAAC,CAAC;AAAA,EACrE,GAAG,EAAE;AAEC,QAAA,eAAeA,MAAAA,YAAY,MAAM;AACrC,YAAQ,CAAA,CAAE;AACV,cAAU,CAAA,CAAE;AAAA,EACd,GAAG,EAAE;AAEE,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,KAAK,SAAS;AAAA,IACvB,SAAS,OAAO,SAAS;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AACF;;"}
|
|
@@ -13,23 +13,26 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
13
13
|
},
|
|
14
14
|
[maxHistorySize]
|
|
15
15
|
);
|
|
16
|
-
const
|
|
16
|
+
const processHistoryActions = (entities) => {
|
|
17
17
|
return entities.reduce(
|
|
18
18
|
(acc, entity) => {
|
|
19
|
-
if (entity
|
|
19
|
+
if (typeof entity === "function") {
|
|
20
|
+
acc[2].push(entity);
|
|
21
|
+
} else if (entity.wasInherited && entity.folderId) {
|
|
20
22
|
acc[1].push({
|
|
21
23
|
entityId: entity.id,
|
|
22
24
|
entityType: entity.type,
|
|
23
25
|
folderId: entity.folderId,
|
|
24
26
|
attribs: [entity.field],
|
|
25
|
-
ownAttrib: entity.ownAttrib
|
|
27
|
+
ownAttrib: entity.ownAttrib,
|
|
28
|
+
rowId: entity.rowId
|
|
26
29
|
});
|
|
27
30
|
} else {
|
|
28
31
|
acc[0].push(entity);
|
|
29
32
|
}
|
|
30
33
|
return acc;
|
|
31
34
|
},
|
|
32
|
-
[[], []]
|
|
35
|
+
[[], [], []]
|
|
33
36
|
);
|
|
34
37
|
};
|
|
35
38
|
const undo = useCallback(() => {
|
|
@@ -38,7 +41,7 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
38
41
|
const last = newPast.pop();
|
|
39
42
|
setPast(newPast);
|
|
40
43
|
setFuture((f) => [...f, last]);
|
|
41
|
-
return
|
|
44
|
+
return processHistoryActions(last.undo);
|
|
42
45
|
}, [past]);
|
|
43
46
|
const redo = useCallback(() => {
|
|
44
47
|
if (future.length === 0) return null;
|
|
@@ -46,8 +49,12 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
46
49
|
const next = newFuture.pop();
|
|
47
50
|
setFuture(newFuture);
|
|
48
51
|
setPast((p) => [...p, next]);
|
|
49
|
-
return
|
|
52
|
+
return processHistoryActions(next.redo);
|
|
50
53
|
}, [future]);
|
|
54
|
+
const removeHistoryEntries = useCallback((count) => {
|
|
55
|
+
setPast((prev) => prev.slice(0, Math.max(0, prev.length - count)));
|
|
56
|
+
setFuture((prev) => prev.slice(0, Math.max(0, prev.length - count)));
|
|
57
|
+
}, []);
|
|
51
58
|
const clearHistory = useCallback(() => {
|
|
52
59
|
setPast([]);
|
|
53
60
|
setFuture([]);
|
|
@@ -58,7 +65,8 @@ const useHistory = (maxHistorySize = 50) => {
|
|
|
58
65
|
redo,
|
|
59
66
|
canUndo: past.length > 0,
|
|
60
67
|
canRedo: future.length > 0,
|
|
61
|
-
clearHistory
|
|
68
|
+
clearHistory,
|
|
69
|
+
removeHistoryEntries
|
|
62
70
|
};
|
|
63
71
|
};
|
|
64
72
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHistory.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useHistory.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { EntityUpdate, InheritFromParentEntity } from './
|
|
1
|
+
{"version":3,"file":"useHistory.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useHistory.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { EntityUpdate, InheritFromParentEntity } from './useUpdateTableData'\n\nexport interface HistoryEntityUpdate extends EntityUpdate {\n ownAttrib: string[]\n folderId?: string\n wasInherited?: boolean\n}\n\ninterface HistoryEntry {\n undo: (HistoryEntityUpdate | HistoryCustomCallback)[]\n redo: (HistoryEntityUpdate | HistoryCustomCallback)[]\n timestamp: number\n}\n\ntype SplitEntitiesByInherited = [EntityUpdate[], InheritFromParentEntity[], HistoryCustomCallback[]]\n\ntype HistoryCustomCallback = () => void\n\nexport interface UseHistoryReturn {\n pushHistory: (\n undo: (HistoryEntityUpdate | HistoryCustomCallback)[],\n redo: (HistoryEntityUpdate | HistoryCustomCallback)[],\n ) => void\n undo: () => SplitEntitiesByInherited | null\n redo: () => SplitEntitiesByInherited | null\n canUndo: boolean\n canRedo: boolean\n clearHistory: () => void\n removeHistoryEntries: (count: number) => void\n}\n\nconst useHistory = (maxHistorySize = 50): UseHistoryReturn => {\n const [past, setPast] = useState<HistoryEntry[]>([])\n const [future, setFuture] = useState<HistoryEntry[]>([])\n\n const pushHistory: UseHistoryReturn['pushHistory'] = useCallback(\n (undo, redo) => {\n if (!undo.length) return\n setPast((prev) => {\n const updated = [...prev, { undo, redo, timestamp: Date.now() }]\n return updated.length > maxHistorySize\n ? updated.slice(updated.length - maxHistorySize)\n : updated\n })\n setFuture([])\n },\n [maxHistorySize],\n )\n\n // Process actions by type: regular updates, inheritance, and custom callbacks\n const processHistoryActions = (\n entities: (HistoryEntityUpdate | HistoryCustomCallback)[],\n ): SplitEntitiesByInherited => {\n return entities.reduce(\n (acc, entity) => {\n if (typeof entity === 'function') {\n acc[2].push(entity)\n } else if (entity.wasInherited && entity.folderId) {\n acc[1].push({\n entityId: entity.id,\n entityType: entity.type,\n folderId: entity.folderId,\n attribs: [entity.field],\n ownAttrib: entity.ownAttrib,\n rowId: entity.rowId,\n })\n } else {\n acc[0].push(entity)\n }\n return acc\n },\n [[], [], []] as SplitEntitiesByInherited,\n )\n }\n\n const undo = useCallback(() => {\n if (past.length === 0) return null\n const newPast = [...past]\n const last = newPast.pop()!\n setPast(newPast)\n setFuture((f) => [...f, last])\n\n return processHistoryActions(last.undo)\n }, [past])\n\n const redo = useCallback(() => {\n if (future.length === 0) return null\n const newFuture = [...future]\n const next = newFuture.pop()!\n setFuture(newFuture)\n setPast((p) => [...p, next])\n return processHistoryActions(next.redo)\n }, [future])\n\n // function to remove x number of entries from the history undo/redo stacks\n const removeHistoryEntries = useCallback((count: number) => {\n setPast((prev) => prev.slice(0, Math.max(0, prev.length - count)))\n setFuture((prev) => prev.slice(0, Math.max(0, prev.length - count)))\n }, [])\n\n const clearHistory = useCallback(() => {\n setPast([])\n setFuture([])\n }, [])\n\n return {\n pushHistory,\n undo,\n redo,\n canUndo: past.length > 0,\n canRedo: future.length > 0,\n clearHistory,\n removeHistoryEntries,\n }\n}\n\nexport default useHistory\n"],"names":["undo","redo"],"mappings":";AAgCM,MAAA,aAAa,CAAC,iBAAiB,OAAyB;AAC5D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAyB,CAAA,CAAE;AACnD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAyB,CAAA,CAAE;AAEvD,QAAM,cAA+C;AAAA,IACnD,CAACA,OAAMC,UAAS;AACV,UAAA,CAACD,MAAK,OAAQ;AAClB,cAAQ,CAAC,SAAS;AAChB,cAAM,UAAU,CAAC,GAAG,MAAM,EAAE,MAAAA,OAAM,MAAAC,OAAM,WAAW,KAAK,OAAO;AACxD,eAAA,QAAQ,SAAS,iBACpB,QAAQ,MAAM,QAAQ,SAAS,cAAc,IAC7C;AAAA,MAAA,CACL;AACD,gBAAU,CAAA,CAAE;AAAA,IACd;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAGM,QAAA,wBAAwB,CAC5B,aAC6B;AAC7B,WAAO,SAAS;AAAA,MACd,CAAC,KAAK,WAAW;AACX,YAAA,OAAO,WAAW,YAAY;AAC5B,cAAA,CAAC,EAAE,KAAK,MAAM;AAAA,QACT,WAAA,OAAO,gBAAgB,OAAO,UAAU;AAC7C,cAAA,CAAC,EAAE,KAAK;AAAA,YACV,UAAU,OAAO;AAAA,YACjB,YAAY,OAAO;AAAA,YACnB,UAAU,OAAO;AAAA,YACjB,SAAS,CAAC,OAAO,KAAK;AAAA,YACtB,WAAW,OAAO;AAAA,YAClB,OAAO,OAAO;AAAA,UAAA,CACf;AAAA,QAAA,OACI;AACD,cAAA,CAAC,EAAE,KAAK,MAAM;AAAA,QAAA;AAEb,eAAA;AAAA,MACT;AAAA,MACA,CAAC,CAAA,GAAI,CAAA,GAAI,CAAE,CAAA;AAAA,IACb;AAAA,EACF;AAEM,QAAA,OAAO,YAAY,MAAM;AACzB,QAAA,KAAK,WAAW,EAAU,QAAA;AACxB,UAAA,UAAU,CAAC,GAAG,IAAI;AAClB,UAAA,OAAO,QAAQ,IAAI;AACzB,YAAQ,OAAO;AACf,cAAU,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;AAEtB,WAAA,sBAAsB,KAAK,IAAI;AAAA,EAAA,GACrC,CAAC,IAAI,CAAC;AAEH,QAAA,OAAO,YAAY,MAAM;AACzB,QAAA,OAAO,WAAW,EAAU,QAAA;AAC1B,UAAA,YAAY,CAAC,GAAG,MAAM;AACtB,UAAA,OAAO,UAAU,IAAI;AAC3B,cAAU,SAAS;AACnB,YAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;AACpB,WAAA,sBAAsB,KAAK,IAAI;AAAA,EAAA,GACrC,CAAC,MAAM,CAAC;AAGL,QAAA,uBAAuB,YAAY,CAAC,UAAkB;AAC1D,YAAQ,CAAC,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,SAAS,KAAK,CAAC,CAAC;AACjE,cAAU,CAAC,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,SAAS,KAAK,CAAC,CAAC;AAAA,EACrE,GAAG,EAAE;AAEC,QAAA,eAAe,YAAY,MAAM;AACrC,YAAQ,CAAA,CAAE;AACV,cAAU,CAAA,CAAE;AAAA,EACd,GAAG,EAAE;AAEE,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,KAAK,SAAS;AAAA,IACvB,SAAS,OAAO,SAAS;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AACF;"}
|