@ynput/ayon-frontend-shared 0.2.26 → 0.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DetailsPanel.cjs.js +1 -1
- package/dist/DetailsPanel.es.js +25 -22
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/Views.cjs.js +1 -1
- package/dist/Views.cjs.js.map +1 -1
- package/dist/Views.es.js +13 -11
- package/dist/Views.es.js.map +1 -1
- package/dist/api.cjs.js +1 -1
- package/dist/api.es.js +153 -151
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +62 -51
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +12 -6
- package/dist/index.es.js.map +1 -1
- package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
- package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/users.es.js.map +1 -1
- package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/views.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +142 -117
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js +110 -95
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +21 -17
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/components/AccessUser/AccessUser.cjs.js +2 -0
- package/dist/shared/src/components/AccessUser/AccessUser.cjs.js.map +1 -0
- package/dist/shared/src/components/AccessUser/AccessUser.es.js +33 -0
- package/dist/shared/src/components/AccessUser/AccessUser.es.js.map +1 -0
- package/dist/shared/src/components/AccessUser/AccessUser.styled.cjs.js +42 -0
- package/dist/shared/src/components/AccessUser/AccessUser.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/AccessUser/AccessUser.styled.es.js +46 -0
- package/dist/shared/src/components/AccessUser/AccessUser.styled.es.js.map +1 -0
- package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.cjs.js +34 -0
- package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.cjs.js.map +1 -0
- package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.es.js +46 -0
- package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.es.js.map +1 -0
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +20 -10
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +81 -67
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +3 -3
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +59 -52
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +5 -2
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +5 -2
- package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +5 -2
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +2 -0
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -0
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +205 -0
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -0
- package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +2 -0
- package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js.map +1 -0
- package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +25 -0
- package/dist/shared/src/components/ListMetaData/ListMetaData.es.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +3 -3
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +5 -5
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +5 -2
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.cjs.js +9 -0
- package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.cjs.js.map +1 -0
- package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.es.js +25 -0
- package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.es.js.map +1 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +7 -4
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +18 -21
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +5 -2
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +6 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +5 -2
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.cjs.js +2 -0
- package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.cjs.js.map +1 -0
- package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.es.js +17 -0
- package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.es.js.map +1 -0
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +2 -2
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +5 -2
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +5 -2
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +5 -2
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +5 -2
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +146 -157
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js +7 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js +13 -6
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +5 -2
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +6 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +6 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +5 -2
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +5 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +5 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +5 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +413 -396
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +104 -25
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +131 -52
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +136 -129
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +16 -53
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +100 -120
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js +7 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js +12 -8
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +250 -235
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +24 -21
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.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/clipboardValidation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +10 -10
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +13 -9
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +65 -60
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +5 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +16 -13
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.es.js +41 -14
- package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +7 -7
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +110 -104
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js +8 -8
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +44 -43
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +7 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +5 -2
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +118 -103
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.cjs.js +16 -4
- package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.es.js +13 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.es.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js +62 -50
- package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.cjs.js +2 -0
- package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.es.js +64 -0
- package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.es.js.map +1 -0
- package/dist/shared/src/context/MenuContext.cjs.js +2 -0
- package/dist/shared/src/context/MenuContext.cjs.js.map +1 -0
- package/dist/shared/src/context/MenuContext.es.js +28 -0
- package/dist/shared/src/context/MenuContext.es.js.map +1 -0
- package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +20 -15
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js +19 -19
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +2 -0
- package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/Menu.es.js +55 -0
- package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js +254 -0
- package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js +265 -0
- package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/MenuContainer2.cjs.js +2 -0
- package/dist/src/components/Menu/MenuComponents/MenuContainer2.cjs.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/MenuContainer2.es.js +80 -0
- package/dist/src/components/Menu/MenuComponents/MenuContainer2.es.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +2 -0
- package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/MenuItem.es.js +59 -0
- package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +2 -0
- package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/MenuList.es.js +112 -0
- package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/useMenuPosition.cjs.js +2 -0
- package/dist/src/components/Menu/MenuComponents/useMenuPosition.cjs.js.map +1 -0
- package/dist/src/components/Menu/MenuComponents/useMenuPosition.es.js +35 -0
- package/dist/src/components/Menu/MenuComponents/useMenuPosition.es.js.map +1 -0
- package/dist/types/api/generated/entityLists.d.ts +8 -8
- package/dist/types/api/generated/users.d.ts +18 -14
- package/dist/types/api/generated/views.d.ts +47 -9
- package/dist/types/api/queries/entityLists/getLists.d.ts +133 -0
- package/dist/types/api/queries/entityLists/types.d.ts +2 -1
- package/dist/types/api/queries/permissions/getPermissions.d.ts +22 -22
- package/dist/types/api/queries/users/getUsers.d.ts +132 -0
- package/dist/types/api/queries/users/updateUsers.d.ts +3 -3
- package/dist/types/components/AccessUser/AccessUser.d.ts +22 -0
- package/dist/types/components/AccessUser/AccessUser.styled.d.ts +1 -0
- package/dist/types/components/AccessUser/index.d.ts +1 -0
- package/dist/types/components/DetailsMetaData/DetailsMetaData.d.ts +8 -0
- package/dist/types/components/DetailsMetaData/index.d.ts +1 -0
- package/dist/types/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.d.ts +4 -0
- package/dist/types/components/ListAttributeForm/ListAttributeForm.d.ts +13 -0
- package/dist/types/components/ListAttributeForm/index.d.ts +1 -0
- package/dist/types/components/ListMetaData/ListMetaData.d.ts +8 -0
- package/dist/types/components/ListMetaData/index.d.ts +1 -0
- package/dist/types/components/Powerpack/RequiredPowerpackVersion.d.ts +5 -0
- package/dist/types/components/Powerpack/index.d.ts +1 -0
- package/dist/types/components/ShareOptionIcon/ShareOptionIcon.d.ts +10 -0
- package/dist/types/components/ShareOptionIcon/index.d.ts +2 -0
- package/dist/types/components/index.d.ts +4 -0
- package/dist/types/containers/DetailsPanel/DetailsPanel.styled.d.ts +7 -0
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.styled.d.ts +3 -1
- package/dist/types/containers/ProjectTreeTable/components/ColumnHeaderMenu.d.ts +4 -1
- package/dist/types/containers/ProjectTreeTable/context/ProjectDataContext.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/context/clipboard/clipboardTypes.d.ts +3 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useAttributesList.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/utils/getReadOnlyLists.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/widgets/BooleanWidget.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/widgets/EnumCellValue.d.ts +2 -2
- package/dist/types/containers/SimpleTable/SimpleTable.d.ts +3 -0
- package/dist/types/containers/SimpleTable/SimpleTableRowTemplate.d.ts +5 -1
- package/dist/types/containers/Views/hooks/pages/useReportsViewSettings.d.ts +11 -0
- package/dist/types/containers/Views/index.d.ts +6 -2
- package/dist/types/context/MenuContext.d.ts +12 -0
- package/dist/types/context/PowerpackContext.d.ts +1 -1
- package/dist/types/index.d.ts +1 -0
- package/package.json +1 -1
package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanelHeader.cjs.js","sources":["../../../../../../src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { union, upperFirst } from 'lodash'\nimport clsx from 'clsx'\nimport { Icon } from '@ynput/ayon-react-components'\n\nimport { EntityPanelUploader, StackedThumbnails } from '@shared/components'\nimport { Actions, DetailsPanelProps } from '@shared/containers'\n// shared\nimport { useGetEntitiesChecklistsQuery, useGetAttributeConfigQuery } from '@shared/api'\nimport type { DetailsPanelEntityData } from '@shared/api'\nimport { getPriorityOptions } from '@shared/util'\nimport { useScopedStatuses, useEntityUpdate } from '@shared/hooks'\nimport { DetailsPanelTab, useDetailsPanelContext } from '@shared/context'\n\nimport FeedFilters from '../FeedFilters/FeedFilters'\nimport * as Styled from './DetailsPanelHeader.styled'\nimport getThumbnails from '../helpers/getThumbnails'\nimport { buildDetailsPanelTitles } from '../helpers/buildDetailsPanelTitles'\nimport { PlayableIcon } from '@shared/components/PlayableIcon/PlayableIcon'\n\nexport type EntityTypeIcons = {\n folder: Record<string, string>\n task: Record<string, string>\n product: Record<string, string>\n}\n\ntype DetailsPanelHeaderProps = {\n entityType: 'folder' | 'task' | 'version' | 'representation'\n entitySubTypes: string[]\n entities: DetailsPanelEntityData[]\n disabledAssignees?: any[]\n users?: any[]\n disabledStatuses?: string[]\n tagsOptions?: any[]\n isFetching?: boolean\n isCompact?: boolean\n currentTab: DetailsPanelTab\n onTabChange: (tab: DetailsPanelTab) => void\n onOpenViewer: (args: any) => void\n onEntityFocus: DetailsPanelProps['onEntityFocus']\n entityTypeIcons: EntityTypeIcons\n}\n\nconst DetailsPanelHeader = ({\n entityType,\n entitySubTypes,\n entities = [],\n disabledAssignees = [],\n users = [],\n disabledStatuses,\n tagsOptions = [],\n isFetching,\n isCompact = false,\n currentTab,\n onTabChange,\n entityTypeIcons,\n onOpenViewer,\n onEntityFocus,\n}: DetailsPanelHeaderProps) => {\n const { useSearchParams, useNavigate, isDeveloperMode } = useDetailsPanelContext()\n const navigate = useNavigate()\n const [searchParams, setSearchParams] = useSearchParams()\n\n const statuses = useScopedStatuses(\n entities.map((entity) => entity.projectName),\n [entityType],\n )\n\n // for selected entities, get flat list of assignees\n const entityUsers: string[] = useMemo(\n () =>\n union(\n ...entities.flatMap((entity) => [\n entity.task?.assignees || [],\n entity.version?.author || [],\n ]),\n ),\n [entities],\n )\n\n let firstEntity = entities[0]\n // If there's no data return null\n const isLoading = entities.length === 0 || !firstEntity || isFetching\n // placeholder entity\n if (!firstEntity) {\n firstEntity = {\n id: 'placeholder',\n name: 'loading...',\n label: 'loading...',\n entityType,\n status: 'loading',\n projectName: 'loading...',\n tags: [],\n hasReviewables: false,\n attrib: {},\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n }\n\n const projectName = entities.length > 1 ? undefined : firstEntity?.projectName\n\n const entityIds = entities\n .filter((e) => e.projectName === firstEntity?.projectName && e.id)\n .map((entity) => entity.id)\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: firstEntity?.projectName,\n entityIds,\n },\n { skip: !firstEntity?.projectName || !entityIds.length },\n )\n let checklistsLabel\n if (checklistCount?.total && checklistCount.total > 0) {\n checklistsLabel = `${checklistCount.checked}/${checklistCount.total}`\n }\n\n // get priorities\n // get priority attribute so we know the colors and icons for each priority\n const { data: priorityAttrib } = useGetAttributeConfigQuery({ attributeName: 'priority' })\n const priorities = getPriorityOptions(priorityAttrib, entityType)\n\n const thumbnails = useMemo(\n () => getThumbnails(entities, entityType, entityTypeIcons),\n [entities, entityType, entityTypeIcons],\n )\n\n // we need to get the intersection of all the statuses of the projects for the selected entities\n // this means that if we have 2 entities from 2 different projects, we need to get the intersection of the statuses of those 2 projects\n // and it prevents us from showing statuses that are not available for the selected entities\n const statusesValue = useMemo(() => entities.map((t) => t.status), [entities])\n const priorityValues = useMemo(() => entities.map((t) => t.attrib?.priority), [entities])\n const tagsValues: string[][] = useMemo(() => entities.map((t) => t.tags), [entities])\n const tagsOptionsObject = useMemo(\n () =>\n tagsOptions.reduce((acc, tag) => {\n acc[tag.name] = tag\n return acc\n }, {}),\n [tagsOptions],\n )\n\n const isMultiple = entities.length > 1\n\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((e) => ({\n id: e.id,\n projectName: e.projectName,\n users: e.task?.assignees || [],\n folderId: e.folder?.id,\n productId: e.product?.id,\n })),\n entityType,\n })\n\n const handleUpdate = (field: string, value: any) => {\n if (value === null || value === undefined) return console.error('value is null or undefined')\n return updateEntity(field, value)\n }\n\n const handleThumbnailClick = () => {\n let versionIds,\n id = firstEntity.id,\n entityTypeKey = entityType + 'Id'\n\n if (entityType === 'version' && firstEntity.product?.id) {\n versionIds = [firstEntity.id]\n id = firstEntity.product?.id\n entityTypeKey = 'productId'\n }\n\n if (id) {\n onOpenViewer({\n [entityTypeKey]: id,\n projectName,\n versionIds,\n })\n }\n }\n\n const hasUser =\n ['task', 'version', 'representation'].includes(entityType) &&\n (entityUsers.length > 0 || entityType === 'task')\n\n const usersOptions = users.map((u) => u)\n if (hasUser) {\n // check if all users are in options, otherwise add them\n const allUsers = users.map((u) => u.name)\n const usersToAdd = entityUsers.filter((u) => !allUsers.includes(u))\n if (usersToAdd.length) {\n usersOptions.push(...usersToAdd.map((u) => ({ name: u, fullName: u })))\n }\n }\n\n // Get title and subtitle from the imported function\n const { title, subTitle } = buildDetailsPanelTitles(entities, entityType)\n\n return (\n <Styled.HeaderContainer>\n <EntityPanelUploader\n entities={entities}\n entityType={entityType}\n projectName={projectName}\n onVersionCreated={(id) => onEntityFocus?.(id, 'version')}\n >\n <Styled.Grid className={clsx('details-panel-header', { isCompact })}>\n <Styled.Header\n className={clsx('titles', { isCompact, loading: isLoading }, 'no-shimmer')}\n >\n <div style={{ position: 'relative' }}>\n <StackedThumbnails\n isLoading={isLoading}\n shimmer={isLoading}\n thumbnails={thumbnails}\n onClick={thumbnails.length === 1 ? handleThumbnailClick : undefined}\n hoverIcon={'play_circle'}\n />\n {!isMultiple && firstEntity?.hasReviewables && <PlayableIcon />}\n </div>\n <Styled.Content className={clsx({ loading: isLoading })}>\n <Styled.Title>\n <h2>{title}</h2>\n <Styled.TagsSelect\n value={union(...tagsValues)}\n tags={tagsOptionsObject}\n options={[]}\n editable\n editor\n onChange={(value) => handleUpdate('tags', value)}\n align=\"right\"\n styleDropdown={{ display: isLoading ? 'none' : 'unset' }}\n className=\"tags-select\"\n />\n </Styled.Title>\n <div className=\"sub-title\">\n <span className=\"entity-type\">{upperFirst(entityType)} - </span>\n <h3>{subTitle}</h3>\n </div>\n </Styled.Content>\n </Styled.Header>\n <Styled.StatusSelect\n value={statusesValue}\n options={statuses || []}\n disabledValues={disabledStatuses}\n invert\n style={{ maxWidth: 'unset' }}\n onChange={(value) => handleUpdate('status', value)}\n className={clsx('status-select', { loading: isLoading })}\n align={isCompact ? 'right' : 'left'}\n />\n {!isCompact &&\n (!hasUser || isLoading ? (\n <div></div>\n ) : (\n <Styled.AssigneeSelect\n value={entityUsers}\n options={usersOptions}\n disabledValues={disabledAssignees.map((u) => u.name)}\n isMultiple={isMultiple && entityUsers.length > 1 && entityType === 'task'}\n readOnly={entityType !== 'task'}\n emptyMessage={entityType === 'task' ? 'Assign user' : ''}\n align=\"right\"\n onChange={(value) => handleUpdate('assignees', value)}\n className=\"assignee-select\"\n data-tooltip={\n entityUsers.length ? (entityType === 'task' ? 'Assigned users' : 'Author') : ''\n }\n />\n ))}\n <Actions\n entities={entities}\n entityType={entityType}\n entitySubTypes={entitySubTypes}\n isLoadingEntity={!!isFetching || !!isLoading}\n searchParams={searchParams}\n isDeveloperMode={isDeveloperMode}\n onSetSearchParams={setSearchParams}\n onNavigate={navigate}\n />\n {priorities ? (\n <Styled.PriorityEnumDropdown\n options={priorities}\n placeholder=\"No priority\"\n value={priorityValues}\n onChange={(value) => handleUpdate('attrib', { priority: value[0] })}\n align=\"right\"\n />\n ) : (\n <div style={{ height: 32 }}></div>\n )}\n <FeedFilters\n isLoading={isLoading}\n entityType={entityType}\n className=\"filters\"\n overrides={{\n checklists: {\n label: checklistsLabel,\n },\n }}\n currentTab={currentTab}\n onTabChange={onTabChange}\n />\n </Styled.Grid>\n </EntityPanelUploader>\n </Styled.HeaderContainer>\n )\n}\n\nexport default DetailsPanelHeader\n"],"names":["DetailsPanelHeader","entityType","entitySubTypes","entities","disabledAssignees","users","disabledStatuses","tagsOptions","isFetching","isCompact","currentTab","onTabChange","entityTypeIcons","onOpenViewer","onEntityFocus","useSearchParams","useNavigate","isDeveloperMode","useDetailsPanelContext","navigate","searchParams","setSearchParams","statuses","useScopedStatuses","entity","entityUsers","useMemo","union","_a","_b","firstEntity","isLoading","projectName","entityIds","checklistCount","useGetEntitiesChecklistsQuery","checklistsLabel","priorityAttrib","useGetAttributeConfigQuery","priorities","getPriorityOptions","thumbnails","getThumbnails","statusesValue","t","priorityValues","tagsValues","tagsOptionsObject","acc","tag","isMultiple","updateEntity","useEntityUpdate","_c","handleUpdate","field","value","handleThumbnailClick","versionIds","id","entityTypeKey","hasUser","usersOptions","u","allUsers","usersToAdd","title","subTitle","buildDetailsPanelTitles","jsx","Styled.HeaderContainer","EntityPanelUploader","jsxs","Styled.Grid","clsx","Styled.Header","StackedThumbnails","PlayableIcon","Styled.Content","Styled.Title","Styled.TagsSelect","upperFirst","Styled.StatusSelect","Styled.AssigneeSelect","Actions","Styled.PriorityEnumDropdown","FeedFilters"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DetailsPanelHeader.cjs.js","sources":["../../../../../../src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { union, upperFirst } from 'lodash'\nimport clsx from 'clsx'\nimport { Icon } from '@ynput/ayon-react-components'\n\nimport { EntityPanelUploader, StackedThumbnails } from '@shared/components'\nimport { Actions, DetailsPanelProps } from '@shared/containers'\n// shared\nimport { useGetEntitiesChecklistsQuery, useGetAttributeConfigQuery } from '@shared/api'\nimport type { DetailsPanelEntityData } from '@shared/api'\nimport { getPriorityOptions } from '@shared/util'\nimport { useScopedStatuses, useEntityUpdate } from '@shared/hooks'\nimport { DetailsPanelTab, useDetailsPanelContext } from '@shared/context'\n\nimport FeedFilters from '../FeedFilters/FeedFilters'\nimport * as Styled from './DetailsPanelHeader.styled'\nimport getThumbnails from '../helpers/getThumbnails'\nimport { buildDetailsPanelTitles } from '../helpers/buildDetailsPanelTitles'\nimport { PlayableIcon } from '@shared/components/PlayableIcon/PlayableIcon'\n\nexport type EntityTypeIcons = {\n folder: Record<string, string>\n task: Record<string, string>\n product: Record<string, string>\n}\n\ntype DetailsPanelHeaderProps = {\n entityType: 'folder' | 'task' | 'version' | 'representation'\n entitySubTypes: string[]\n entities: DetailsPanelEntityData[]\n disabledAssignees?: any[]\n users?: any[]\n disabledStatuses?: string[]\n tagsOptions?: any[]\n isFetching?: boolean\n isCompact?: boolean\n currentTab: DetailsPanelTab\n onTabChange: (tab: DetailsPanelTab) => void\n onOpenViewer: (args: any) => void\n onEntityFocus: DetailsPanelProps['onEntityFocus']\n entityTypeIcons: EntityTypeIcons\n}\n\nconst DetailsPanelHeader = ({\n entityType,\n entitySubTypes,\n entities = [],\n disabledAssignees = [],\n users = [],\n disabledStatuses,\n tagsOptions = [],\n isFetching,\n isCompact = false,\n currentTab,\n onTabChange,\n entityTypeIcons,\n onOpenViewer,\n onEntityFocus,\n}: DetailsPanelHeaderProps) => {\n const { useSearchParams, useNavigate, isDeveloperMode } = useDetailsPanelContext()\n const navigate = useNavigate()\n const [searchParams, setSearchParams] = useSearchParams()\n\n const statuses = useScopedStatuses(\n entities.map((entity) => entity.projectName),\n [entityType],\n )\n\n // for selected entities, get flat list of assignees\n const entityUsers: string[] = useMemo(\n () =>\n union(\n ...entities.flatMap((entity) => [\n entity.task?.assignees || [],\n entity.version?.author || [],\n ]),\n ),\n [entities],\n )\n\n let firstEntity = entities[0]\n // If there's no data return null\n const isLoading = entities.length === 0 || !firstEntity || isFetching\n // placeholder entity\n if (!firstEntity) {\n firstEntity = {\n id: 'placeholder',\n name: 'loading...',\n label: 'loading...',\n entityType,\n status: 'loading',\n projectName: 'loading...',\n tags: [],\n hasReviewables: false,\n attrib: {},\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n }\n\n const projectName = entities.length > 1 ? undefined : firstEntity?.projectName\n\n const entityIds = entities\n .filter((e) => e.projectName === firstEntity?.projectName && e.id)\n .map((entity) => entity.id)\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: firstEntity?.projectName,\n entityIds,\n },\n { skip: !firstEntity?.projectName || !entityIds.length },\n )\n let checklistsLabel\n if (checklistCount?.total && checklistCount.total > 0) {\n checklistsLabel = `${checklistCount.checked}/${checklistCount.total}`\n }\n\n // get priorities\n // get priority attribute so we know the colors and icons for each priority\n const { data: priorityAttrib } = useGetAttributeConfigQuery({ attributeName: 'priority' })\n const priorities = getPriorityOptions(priorityAttrib, entityType)\n\n const thumbnails = useMemo(\n () => getThumbnails(entities, entityType, entityTypeIcons),\n [entities, entityType, entityTypeIcons],\n )\n\n // we need to get the intersection of all the statuses of the projects for the selected entities\n // this means that if we have 2 entities from 2 different projects, we need to get the intersection of the statuses of those 2 projects\n // and it prevents us from showing statuses that are not available for the selected entities\n const statusesValue = useMemo(() => entities.map((t) => t.status), [entities])\n const priorityValues = useMemo(() => entities.map((t) => t.attrib?.priority), [entities])\n const tagsValues: string[][] = useMemo(() => entities.map((t) => t.tags), [entities])\n const tagsOptionsObject = useMemo(\n () =>\n tagsOptions.reduce((acc, tag) => {\n acc[tag.name] = tag\n return acc\n }, {}),\n [tagsOptions],\n )\n\n const isMultiple = entities.length > 1\n\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((e) => ({\n id: e.id,\n projectName: e.projectName,\n users: e.task?.assignees || [],\n folderId: e.folder?.id,\n productId: e.product?.id,\n })),\n entityType,\n })\n\n const handleUpdate = (field: string, value: any) => {\n if (value === null || value === undefined) return console.error('value is null or undefined')\n return updateEntity(field, value)\n }\n\n const handleThumbnailClick = () => {\n let versionIds,\n id = firstEntity.id,\n entityTypeKey = entityType + 'Id'\n\n if (entityType === 'version' && firstEntity.product?.id) {\n versionIds = [firstEntity.id]\n id = firstEntity.product?.id\n entityTypeKey = 'productId'\n }\n\n if (id) {\n onOpenViewer({\n [entityTypeKey]: id,\n projectName,\n versionIds,\n })\n }\n }\n\n const hasUser =\n ['task', 'version', 'representation'].includes(entityType) &&\n (entityUsers.length > 0 || entityType === 'task')\n\n const usersOptions = users.map((u) => u)\n if (hasUser) {\n // check if all users are in options, otherwise add them\n const allUsers = users.map((u) => u.name)\n const usersToAdd = entityUsers.filter((u) => !allUsers.includes(u))\n if (usersToAdd.length) {\n usersOptions.push(...usersToAdd.map((u) => ({ name: u, fullName: u })))\n }\n }\n\n // Get title and subtitle from the imported function\n const { title, subTitle } = buildDetailsPanelTitles(entities, entityType)\n\n return (\n <Styled.HeaderContainer>\n <EntityPanelUploader\n entities={entities}\n entityType={entityType}\n projectName={projectName}\n onVersionCreated={(id) => onEntityFocus?.(id, 'version')}\n >\n <Styled.Grid className={clsx('details-panel-header', { isCompact })}>\n <Styled.Header\n className={clsx('titles', { isCompact, loading: isLoading }, 'no-shimmer')}\n >\n <div style={{ position: 'relative' }}>\n <StackedThumbnails\n isLoading={isLoading}\n shimmer={isLoading}\n thumbnails={thumbnails}\n onClick={thumbnails.length === 1 ? handleThumbnailClick : undefined}\n hoverIcon={'play_circle'}\n />\n {!isMultiple && firstEntity?.hasReviewables && <PlayableIcon />}\n </div>\n <Styled.Content className={clsx({ loading: isLoading })}>\n <Styled.Title>\n <h2>{title}</h2>\n <Styled.TagsSelect\n value={union(...tagsValues)}\n tags={tagsOptionsObject}\n options={[]}\n editable\n editor\n onChange={(value) => handleUpdate('tags', value)}\n align=\"right\"\n styleDropdown={{ display: isLoading ? 'none' : 'unset' }}\n className=\"tags-select\"\n />\n </Styled.Title>\n <div className=\"sub-title\">\n <span className=\"entity-type\">{upperFirst(entityType)} - </span>\n <h3>{subTitle}</h3>\n </div>\n </Styled.Content>\n </Styled.Header>\n <Styled.StatusSelect\n value={statusesValue}\n options={statuses || []}\n disabledValues={disabledStatuses}\n invert\n style={{ maxWidth: 'unset' }}\n onChange={(value) => handleUpdate('status', value)}\n className={clsx('status-select', { loading: isLoading })}\n align={isCompact ? 'right' : 'left'}\n />\n {!isCompact &&\n (!hasUser || isLoading ? (\n <div></div>\n ) : (\n <Styled.AssigneeSelect\n value={entityUsers}\n options={usersOptions}\n disabledValues={disabledAssignees.map((u) => u.name)}\n isMultiple={isMultiple && entityUsers.length > 1 && entityType === 'task'}\n readOnly={entityType !== 'task'}\n emptyMessage={entityType === 'task' ? 'Assign user' : ''}\n align=\"right\"\n onChange={(value) => handleUpdate('assignees', value)}\n className=\"assignee-select\"\n data-tooltip={\n entityUsers.length ? (entityType === 'task' ? 'Assigned users' : 'Author') : ''\n }\n />\n ))}\n <Actions\n entities={entities}\n entityType={entityType}\n entitySubTypes={entitySubTypes}\n isLoadingEntity={!!isFetching || !!isLoading}\n searchParams={searchParams}\n isDeveloperMode={isDeveloperMode}\n onSetSearchParams={setSearchParams}\n onNavigate={navigate}\n />\n {priorities ? (\n <Styled.PriorityEnumDropdown\n options={priorities}\n placeholder=\"No priority\"\n value={priorityValues}\n onChange={(value) => handleUpdate('attrib', { priority: value[0] })}\n align=\"right\"\n />\n ) : (\n <div style={{ height: 32 }}></div>\n )}\n <FeedFilters\n isLoading={isLoading}\n entityType={entityType}\n className=\"filters\"\n overrides={{\n checklists: {\n label: checklistsLabel,\n },\n }}\n currentTab={currentTab}\n onTabChange={onTabChange}\n />\n </Styled.Grid>\n </EntityPanelUploader>\n </Styled.HeaderContainer>\n )\n}\n\nexport default DetailsPanelHeader\n"],"names":["DetailsPanelHeader","entityType","entitySubTypes","entities","disabledAssignees","users","disabledStatuses","tagsOptions","isFetching","isCompact","currentTab","onTabChange","entityTypeIcons","onOpenViewer","onEntityFocus","useSearchParams","useNavigate","isDeveloperMode","useDetailsPanelContext","navigate","searchParams","setSearchParams","statuses","useScopedStatuses","entity","entityUsers","useMemo","union","_a","_b","firstEntity","isLoading","projectName","entityIds","checklistCount","useGetEntitiesChecklistsQuery","checklistsLabel","priorityAttrib","useGetAttributeConfigQuery","priorities","getPriorityOptions","thumbnails","getThumbnails","statusesValue","t","priorityValues","tagsValues","tagsOptionsObject","acc","tag","isMultiple","updateEntity","useEntityUpdate","_c","handleUpdate","field","value","handleThumbnailClick","versionIds","id","entityTypeKey","hasUser","usersOptions","u","allUsers","usersToAdd","title","subTitle","buildDetailsPanelTitles","jsx","Styled.HeaderContainer","EntityPanelUploader","jsxs","Styled.Grid","clsx","Styled.Header","StackedThumbnails","PlayableIcon","Styled.Content","Styled.Title","Styled.TagsSelect","upperFirst","Styled.StatusSelect","Styled.AssigneeSelect","Actions","Styled.PriorityEnumDropdown","FeedFilters"],"mappings":"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"}
|
|
@@ -124,11 +124,11 @@ import "react-redux";
|
|
|
124
124
|
import "custom-protocol-check";
|
|
125
125
|
import "../../../components/Watchers/Watchers.es.js";
|
|
126
126
|
import "../../../components/ProjectTableSettings/ProjectTableSettings.es.js";
|
|
127
|
-
import "react-router-dom";
|
|
128
127
|
import "../../../components/Powerpack/PowerpackButton.es.js";
|
|
129
128
|
import "../../../components/Powerpack/PricingLink.es.js";
|
|
130
129
|
import "../../../components/Powerpack/PowerpackDialog.styled.es.js";
|
|
131
130
|
import "../../../components/Powerpack/CTAButton.es.js";
|
|
131
|
+
import "../../../components/Powerpack/RequiredPowerpackVersion.es.js";
|
|
132
132
|
import "../../../components/SettingsPanel/SettingsPanel.es.js";
|
|
133
133
|
import "../../../components/SettingsPanel/SettingsPanelItemTemplate.es.js";
|
|
134
134
|
import "../../../components/AttributeEditor/components/MinMaxField.es.js";
|
|
@@ -159,6 +159,7 @@ import "../../Feed/components/CommentInput/quillToMarkdown.es.js";
|
|
|
159
159
|
import "../../Feed/components/ActivityComment/ActivityComment.styled.es.js";
|
|
160
160
|
import "../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.es.js";
|
|
161
161
|
import "../../Feed/components/ActivityReference/ActivityReference.styled.es.js";
|
|
162
|
+
import "react-router-dom";
|
|
162
163
|
import "../../Feed/components/ActivityStatus/ActivityStatus.es.js";
|
|
163
164
|
import "../../Feed/components/ActivityHeader/ActivityHeader.styled.es.js";
|
|
164
165
|
import "../../Feed/components/ActivityDate.es.js";
|
|
@@ -211,7 +212,9 @@ import "../../Views/Views.styled.es.js";
|
|
|
211
212
|
import "../../Views/ViewsMenuContainer/ViewsMenuContainer.es.js";
|
|
212
213
|
import "../../Views/ViewsMenu/ViewsMenu.es.js";
|
|
213
214
|
import "../../EntityPickerDialog/EntityPickerDialog.es.js";
|
|
214
|
-
|
|
215
|
+
import "../../../components/DetailsMetaData/DetailsMetaData.es.js";
|
|
216
|
+
import "../../../components/AccessUser/AccessUser.es.js";
|
|
217
|
+
const km = ({
|
|
215
218
|
entityType: p,
|
|
216
219
|
entitySubTypes: M,
|
|
217
220
|
entities: m = [],
|
|
@@ -427,6 +430,6 @@ const vm = ({
|
|
|
427
430
|
) });
|
|
428
431
|
};
|
|
429
432
|
export {
|
|
430
|
-
|
|
433
|
+
km as default
|
|
431
434
|
};
|
|
432
435
|
//# sourceMappingURL=DetailsPanelHeader.es.js.map
|
package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanelHeader.es.js","sources":["../../../../../../src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { union, upperFirst } from 'lodash'\nimport clsx from 'clsx'\nimport { Icon } from '@ynput/ayon-react-components'\n\nimport { EntityPanelUploader, StackedThumbnails } from '@shared/components'\nimport { Actions, DetailsPanelProps } from '@shared/containers'\n// shared\nimport { useGetEntitiesChecklistsQuery, useGetAttributeConfigQuery } from '@shared/api'\nimport type { DetailsPanelEntityData } from '@shared/api'\nimport { getPriorityOptions } from '@shared/util'\nimport { useScopedStatuses, useEntityUpdate } from '@shared/hooks'\nimport { DetailsPanelTab, useDetailsPanelContext } from '@shared/context'\n\nimport FeedFilters from '../FeedFilters/FeedFilters'\nimport * as Styled from './DetailsPanelHeader.styled'\nimport getThumbnails from '../helpers/getThumbnails'\nimport { buildDetailsPanelTitles } from '../helpers/buildDetailsPanelTitles'\nimport { PlayableIcon } from '@shared/components/PlayableIcon/PlayableIcon'\n\nexport type EntityTypeIcons = {\n folder: Record<string, string>\n task: Record<string, string>\n product: Record<string, string>\n}\n\ntype DetailsPanelHeaderProps = {\n entityType: 'folder' | 'task' | 'version' | 'representation'\n entitySubTypes: string[]\n entities: DetailsPanelEntityData[]\n disabledAssignees?: any[]\n users?: any[]\n disabledStatuses?: string[]\n tagsOptions?: any[]\n isFetching?: boolean\n isCompact?: boolean\n currentTab: DetailsPanelTab\n onTabChange: (tab: DetailsPanelTab) => void\n onOpenViewer: (args: any) => void\n onEntityFocus: DetailsPanelProps['onEntityFocus']\n entityTypeIcons: EntityTypeIcons\n}\n\nconst DetailsPanelHeader = ({\n entityType,\n entitySubTypes,\n entities = [],\n disabledAssignees = [],\n users = [],\n disabledStatuses,\n tagsOptions = [],\n isFetching,\n isCompact = false,\n currentTab,\n onTabChange,\n entityTypeIcons,\n onOpenViewer,\n onEntityFocus,\n}: DetailsPanelHeaderProps) => {\n const { useSearchParams, useNavigate, isDeveloperMode } = useDetailsPanelContext()\n const navigate = useNavigate()\n const [searchParams, setSearchParams] = useSearchParams()\n\n const statuses = useScopedStatuses(\n entities.map((entity) => entity.projectName),\n [entityType],\n )\n\n // for selected entities, get flat list of assignees\n const entityUsers: string[] = useMemo(\n () =>\n union(\n ...entities.flatMap((entity) => [\n entity.task?.assignees || [],\n entity.version?.author || [],\n ]),\n ),\n [entities],\n )\n\n let firstEntity = entities[0]\n // If there's no data return null\n const isLoading = entities.length === 0 || !firstEntity || isFetching\n // placeholder entity\n if (!firstEntity) {\n firstEntity = {\n id: 'placeholder',\n name: 'loading...',\n label: 'loading...',\n entityType,\n status: 'loading',\n projectName: 'loading...',\n tags: [],\n hasReviewables: false,\n attrib: {},\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n }\n\n const projectName = entities.length > 1 ? undefined : firstEntity?.projectName\n\n const entityIds = entities\n .filter((e) => e.projectName === firstEntity?.projectName && e.id)\n .map((entity) => entity.id)\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: firstEntity?.projectName,\n entityIds,\n },\n { skip: !firstEntity?.projectName || !entityIds.length },\n )\n let checklistsLabel\n if (checklistCount?.total && checklistCount.total > 0) {\n checklistsLabel = `${checklistCount.checked}/${checklistCount.total}`\n }\n\n // get priorities\n // get priority attribute so we know the colors and icons for each priority\n const { data: priorityAttrib } = useGetAttributeConfigQuery({ attributeName: 'priority' })\n const priorities = getPriorityOptions(priorityAttrib, entityType)\n\n const thumbnails = useMemo(\n () => getThumbnails(entities, entityType, entityTypeIcons),\n [entities, entityType, entityTypeIcons],\n )\n\n // we need to get the intersection of all the statuses of the projects for the selected entities\n // this means that if we have 2 entities from 2 different projects, we need to get the intersection of the statuses of those 2 projects\n // and it prevents us from showing statuses that are not available for the selected entities\n const statusesValue = useMemo(() => entities.map((t) => t.status), [entities])\n const priorityValues = useMemo(() => entities.map((t) => t.attrib?.priority), [entities])\n const tagsValues: string[][] = useMemo(() => entities.map((t) => t.tags), [entities])\n const tagsOptionsObject = useMemo(\n () =>\n tagsOptions.reduce((acc, tag) => {\n acc[tag.name] = tag\n return acc\n }, {}),\n [tagsOptions],\n )\n\n const isMultiple = entities.length > 1\n\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((e) => ({\n id: e.id,\n projectName: e.projectName,\n users: e.task?.assignees || [],\n folderId: e.folder?.id,\n productId: e.product?.id,\n })),\n entityType,\n })\n\n const handleUpdate = (field: string, value: any) => {\n if (value === null || value === undefined) return console.error('value is null or undefined')\n return updateEntity(field, value)\n }\n\n const handleThumbnailClick = () => {\n let versionIds,\n id = firstEntity.id,\n entityTypeKey = entityType + 'Id'\n\n if (entityType === 'version' && firstEntity.product?.id) {\n versionIds = [firstEntity.id]\n id = firstEntity.product?.id\n entityTypeKey = 'productId'\n }\n\n if (id) {\n onOpenViewer({\n [entityTypeKey]: id,\n projectName,\n versionIds,\n })\n }\n }\n\n const hasUser =\n ['task', 'version', 'representation'].includes(entityType) &&\n (entityUsers.length > 0 || entityType === 'task')\n\n const usersOptions = users.map((u) => u)\n if (hasUser) {\n // check if all users are in options, otherwise add them\n const allUsers = users.map((u) => u.name)\n const usersToAdd = entityUsers.filter((u) => !allUsers.includes(u))\n if (usersToAdd.length) {\n usersOptions.push(...usersToAdd.map((u) => ({ name: u, fullName: u })))\n }\n }\n\n // Get title and subtitle from the imported function\n const { title, subTitle } = buildDetailsPanelTitles(entities, entityType)\n\n return (\n <Styled.HeaderContainer>\n <EntityPanelUploader\n entities={entities}\n entityType={entityType}\n projectName={projectName}\n onVersionCreated={(id) => onEntityFocus?.(id, 'version')}\n >\n <Styled.Grid className={clsx('details-panel-header', { isCompact })}>\n <Styled.Header\n className={clsx('titles', { isCompact, loading: isLoading }, 'no-shimmer')}\n >\n <div style={{ position: 'relative' }}>\n <StackedThumbnails\n isLoading={isLoading}\n shimmer={isLoading}\n thumbnails={thumbnails}\n onClick={thumbnails.length === 1 ? handleThumbnailClick : undefined}\n hoverIcon={'play_circle'}\n />\n {!isMultiple && firstEntity?.hasReviewables && <PlayableIcon />}\n </div>\n <Styled.Content className={clsx({ loading: isLoading })}>\n <Styled.Title>\n <h2>{title}</h2>\n <Styled.TagsSelect\n value={union(...tagsValues)}\n tags={tagsOptionsObject}\n options={[]}\n editable\n editor\n onChange={(value) => handleUpdate('tags', value)}\n align=\"right\"\n styleDropdown={{ display: isLoading ? 'none' : 'unset' }}\n className=\"tags-select\"\n />\n </Styled.Title>\n <div className=\"sub-title\">\n <span className=\"entity-type\">{upperFirst(entityType)} - </span>\n <h3>{subTitle}</h3>\n </div>\n </Styled.Content>\n </Styled.Header>\n <Styled.StatusSelect\n value={statusesValue}\n options={statuses || []}\n disabledValues={disabledStatuses}\n invert\n style={{ maxWidth: 'unset' }}\n onChange={(value) => handleUpdate('status', value)}\n className={clsx('status-select', { loading: isLoading })}\n align={isCompact ? 'right' : 'left'}\n />\n {!isCompact &&\n (!hasUser || isLoading ? (\n <div></div>\n ) : (\n <Styled.AssigneeSelect\n value={entityUsers}\n options={usersOptions}\n disabledValues={disabledAssignees.map((u) => u.name)}\n isMultiple={isMultiple && entityUsers.length > 1 && entityType === 'task'}\n readOnly={entityType !== 'task'}\n emptyMessage={entityType === 'task' ? 'Assign user' : ''}\n align=\"right\"\n onChange={(value) => handleUpdate('assignees', value)}\n className=\"assignee-select\"\n data-tooltip={\n entityUsers.length ? (entityType === 'task' ? 'Assigned users' : 'Author') : ''\n }\n />\n ))}\n <Actions\n entities={entities}\n entityType={entityType}\n entitySubTypes={entitySubTypes}\n isLoadingEntity={!!isFetching || !!isLoading}\n searchParams={searchParams}\n isDeveloperMode={isDeveloperMode}\n onSetSearchParams={setSearchParams}\n onNavigate={navigate}\n />\n {priorities ? (\n <Styled.PriorityEnumDropdown\n options={priorities}\n placeholder=\"No priority\"\n value={priorityValues}\n onChange={(value) => handleUpdate('attrib', { priority: value[0] })}\n align=\"right\"\n />\n ) : (\n <div style={{ height: 32 }}></div>\n )}\n <FeedFilters\n isLoading={isLoading}\n entityType={entityType}\n className=\"filters\"\n overrides={{\n checklists: {\n label: checklistsLabel,\n },\n }}\n currentTab={currentTab}\n onTabChange={onTabChange}\n />\n </Styled.Grid>\n </EntityPanelUploader>\n </Styled.HeaderContainer>\n )\n}\n\nexport default DetailsPanelHeader\n"],"names":["DetailsPanelHeader","entityType","entitySubTypes","entities","disabledAssignees","users","disabledStatuses","tagsOptions","isFetching","isCompact","currentTab","onTabChange","entityTypeIcons","onOpenViewer","onEntityFocus","useSearchParams","useNavigate","isDeveloperMode","useDetailsPanelContext","navigate","searchParams","setSearchParams","statuses","useScopedStatuses","entity","entityUsers","useMemo","union","_a","_b","firstEntity","isLoading","projectName","entityIds","e","checklistCount","useGetEntitiesChecklistsQuery","checklistsLabel","priorityAttrib","useGetAttributeConfigQuery","priorities","getPriorityOptions","thumbnails","getThumbnails","statusesValue","t","priorityValues","tagsValues","tagsOptionsObject","acc","tag","isMultiple","updateEntity","useEntityUpdate","_c","handleUpdate","field","value","handleThumbnailClick","versionIds","id","entityTypeKey","hasUser","usersOptions","u","allUsers","usersToAdd","title","subTitle","buildDetailsPanelTitles","jsx","Styled.HeaderContainer","EntityPanelUploader","jsxs","Styled.Grid","clsx","Styled.Header","StackedThumbnails","PlayableIcon","Styled.Content","Styled.Title","Styled.TagsSelect","upperFirst","Styled.StatusSelect","Styled.AssigneeSelect","Actions","Styled.PriorityEnumDropdown","FeedFilters"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DetailsPanelHeader.es.js","sources":["../../../../../../src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { union, upperFirst } from 'lodash'\nimport clsx from 'clsx'\nimport { Icon } from '@ynput/ayon-react-components'\n\nimport { EntityPanelUploader, StackedThumbnails } from '@shared/components'\nimport { Actions, DetailsPanelProps } from '@shared/containers'\n// shared\nimport { useGetEntitiesChecklistsQuery, useGetAttributeConfigQuery } from '@shared/api'\nimport type { DetailsPanelEntityData } from '@shared/api'\nimport { getPriorityOptions } from '@shared/util'\nimport { useScopedStatuses, useEntityUpdate } from '@shared/hooks'\nimport { DetailsPanelTab, useDetailsPanelContext } from '@shared/context'\n\nimport FeedFilters from '../FeedFilters/FeedFilters'\nimport * as Styled from './DetailsPanelHeader.styled'\nimport getThumbnails from '../helpers/getThumbnails'\nimport { buildDetailsPanelTitles } from '../helpers/buildDetailsPanelTitles'\nimport { PlayableIcon } from '@shared/components/PlayableIcon/PlayableIcon'\n\nexport type EntityTypeIcons = {\n folder: Record<string, string>\n task: Record<string, string>\n product: Record<string, string>\n}\n\ntype DetailsPanelHeaderProps = {\n entityType: 'folder' | 'task' | 'version' | 'representation'\n entitySubTypes: string[]\n entities: DetailsPanelEntityData[]\n disabledAssignees?: any[]\n users?: any[]\n disabledStatuses?: string[]\n tagsOptions?: any[]\n isFetching?: boolean\n isCompact?: boolean\n currentTab: DetailsPanelTab\n onTabChange: (tab: DetailsPanelTab) => void\n onOpenViewer: (args: any) => void\n onEntityFocus: DetailsPanelProps['onEntityFocus']\n entityTypeIcons: EntityTypeIcons\n}\n\nconst DetailsPanelHeader = ({\n entityType,\n entitySubTypes,\n entities = [],\n disabledAssignees = [],\n users = [],\n disabledStatuses,\n tagsOptions = [],\n isFetching,\n isCompact = false,\n currentTab,\n onTabChange,\n entityTypeIcons,\n onOpenViewer,\n onEntityFocus,\n}: DetailsPanelHeaderProps) => {\n const { useSearchParams, useNavigate, isDeveloperMode } = useDetailsPanelContext()\n const navigate = useNavigate()\n const [searchParams, setSearchParams] = useSearchParams()\n\n const statuses = useScopedStatuses(\n entities.map((entity) => entity.projectName),\n [entityType],\n )\n\n // for selected entities, get flat list of assignees\n const entityUsers: string[] = useMemo(\n () =>\n union(\n ...entities.flatMap((entity) => [\n entity.task?.assignees || [],\n entity.version?.author || [],\n ]),\n ),\n [entities],\n )\n\n let firstEntity = entities[0]\n // If there's no data return null\n const isLoading = entities.length === 0 || !firstEntity || isFetching\n // placeholder entity\n if (!firstEntity) {\n firstEntity = {\n id: 'placeholder',\n name: 'loading...',\n label: 'loading...',\n entityType,\n status: 'loading',\n projectName: 'loading...',\n tags: [],\n hasReviewables: false,\n attrib: {},\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n }\n\n const projectName = entities.length > 1 ? undefined : firstEntity?.projectName\n\n const entityIds = entities\n .filter((e) => e.projectName === firstEntity?.projectName && e.id)\n .map((entity) => entity.id)\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: firstEntity?.projectName,\n entityIds,\n },\n { skip: !firstEntity?.projectName || !entityIds.length },\n )\n let checklistsLabel\n if (checklistCount?.total && checklistCount.total > 0) {\n checklistsLabel = `${checklistCount.checked}/${checklistCount.total}`\n }\n\n // get priorities\n // get priority attribute so we know the colors and icons for each priority\n const { data: priorityAttrib } = useGetAttributeConfigQuery({ attributeName: 'priority' })\n const priorities = getPriorityOptions(priorityAttrib, entityType)\n\n const thumbnails = useMemo(\n () => getThumbnails(entities, entityType, entityTypeIcons),\n [entities, entityType, entityTypeIcons],\n )\n\n // we need to get the intersection of all the statuses of the projects for the selected entities\n // this means that if we have 2 entities from 2 different projects, we need to get the intersection of the statuses of those 2 projects\n // and it prevents us from showing statuses that are not available for the selected entities\n const statusesValue = useMemo(() => entities.map((t) => t.status), [entities])\n const priorityValues = useMemo(() => entities.map((t) => t.attrib?.priority), [entities])\n const tagsValues: string[][] = useMemo(() => entities.map((t) => t.tags), [entities])\n const tagsOptionsObject = useMemo(\n () =>\n tagsOptions.reduce((acc, tag) => {\n acc[tag.name] = tag\n return acc\n }, {}),\n [tagsOptions],\n )\n\n const isMultiple = entities.length > 1\n\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((e) => ({\n id: e.id,\n projectName: e.projectName,\n users: e.task?.assignees || [],\n folderId: e.folder?.id,\n productId: e.product?.id,\n })),\n entityType,\n })\n\n const handleUpdate = (field: string, value: any) => {\n if (value === null || value === undefined) return console.error('value is null or undefined')\n return updateEntity(field, value)\n }\n\n const handleThumbnailClick = () => {\n let versionIds,\n id = firstEntity.id,\n entityTypeKey = entityType + 'Id'\n\n if (entityType === 'version' && firstEntity.product?.id) {\n versionIds = [firstEntity.id]\n id = firstEntity.product?.id\n entityTypeKey = 'productId'\n }\n\n if (id) {\n onOpenViewer({\n [entityTypeKey]: id,\n projectName,\n versionIds,\n })\n }\n }\n\n const hasUser =\n ['task', 'version', 'representation'].includes(entityType) &&\n (entityUsers.length > 0 || entityType === 'task')\n\n const usersOptions = users.map((u) => u)\n if (hasUser) {\n // check if all users are in options, otherwise add them\n const allUsers = users.map((u) => u.name)\n const usersToAdd = entityUsers.filter((u) => !allUsers.includes(u))\n if (usersToAdd.length) {\n usersOptions.push(...usersToAdd.map((u) => ({ name: u, fullName: u })))\n }\n }\n\n // Get title and subtitle from the imported function\n const { title, subTitle } = buildDetailsPanelTitles(entities, entityType)\n\n return (\n <Styled.HeaderContainer>\n <EntityPanelUploader\n entities={entities}\n entityType={entityType}\n projectName={projectName}\n onVersionCreated={(id) => onEntityFocus?.(id, 'version')}\n >\n <Styled.Grid className={clsx('details-panel-header', { isCompact })}>\n <Styled.Header\n className={clsx('titles', { isCompact, loading: isLoading }, 'no-shimmer')}\n >\n <div style={{ position: 'relative' }}>\n <StackedThumbnails\n isLoading={isLoading}\n shimmer={isLoading}\n thumbnails={thumbnails}\n onClick={thumbnails.length === 1 ? handleThumbnailClick : undefined}\n hoverIcon={'play_circle'}\n />\n {!isMultiple && firstEntity?.hasReviewables && <PlayableIcon />}\n </div>\n <Styled.Content className={clsx({ loading: isLoading })}>\n <Styled.Title>\n <h2>{title}</h2>\n <Styled.TagsSelect\n value={union(...tagsValues)}\n tags={tagsOptionsObject}\n options={[]}\n editable\n editor\n onChange={(value) => handleUpdate('tags', value)}\n align=\"right\"\n styleDropdown={{ display: isLoading ? 'none' : 'unset' }}\n className=\"tags-select\"\n />\n </Styled.Title>\n <div className=\"sub-title\">\n <span className=\"entity-type\">{upperFirst(entityType)} - </span>\n <h3>{subTitle}</h3>\n </div>\n </Styled.Content>\n </Styled.Header>\n <Styled.StatusSelect\n value={statusesValue}\n options={statuses || []}\n disabledValues={disabledStatuses}\n invert\n style={{ maxWidth: 'unset' }}\n onChange={(value) => handleUpdate('status', value)}\n className={clsx('status-select', { loading: isLoading })}\n align={isCompact ? 'right' : 'left'}\n />\n {!isCompact &&\n (!hasUser || isLoading ? (\n <div></div>\n ) : (\n <Styled.AssigneeSelect\n value={entityUsers}\n options={usersOptions}\n disabledValues={disabledAssignees.map((u) => u.name)}\n isMultiple={isMultiple && entityUsers.length > 1 && entityType === 'task'}\n readOnly={entityType !== 'task'}\n emptyMessage={entityType === 'task' ? 'Assign user' : ''}\n align=\"right\"\n onChange={(value) => handleUpdate('assignees', value)}\n className=\"assignee-select\"\n data-tooltip={\n entityUsers.length ? (entityType === 'task' ? 'Assigned users' : 'Author') : ''\n }\n />\n ))}\n <Actions\n entities={entities}\n entityType={entityType}\n entitySubTypes={entitySubTypes}\n isLoadingEntity={!!isFetching || !!isLoading}\n searchParams={searchParams}\n isDeveloperMode={isDeveloperMode}\n onSetSearchParams={setSearchParams}\n onNavigate={navigate}\n />\n {priorities ? (\n <Styled.PriorityEnumDropdown\n options={priorities}\n placeholder=\"No priority\"\n value={priorityValues}\n onChange={(value) => handleUpdate('attrib', { priority: value[0] })}\n align=\"right\"\n />\n ) : (\n <div style={{ height: 32 }}></div>\n )}\n <FeedFilters\n isLoading={isLoading}\n entityType={entityType}\n className=\"filters\"\n overrides={{\n checklists: {\n label: checklistsLabel,\n },\n }}\n currentTab={currentTab}\n onTabChange={onTabChange}\n />\n </Styled.Grid>\n </EntityPanelUploader>\n </Styled.HeaderContainer>\n )\n}\n\nexport default DetailsPanelHeader\n"],"names":["DetailsPanelHeader","entityType","entitySubTypes","entities","disabledAssignees","users","disabledStatuses","tagsOptions","isFetching","isCompact","currentTab","onTabChange","entityTypeIcons","onOpenViewer","onEntityFocus","useSearchParams","useNavigate","isDeveloperMode","useDetailsPanelContext","navigate","searchParams","setSearchParams","statuses","useScopedStatuses","entity","entityUsers","useMemo","union","_a","_b","firstEntity","isLoading","projectName","entityIds","e","checklistCount","useGetEntitiesChecklistsQuery","checklistsLabel","priorityAttrib","useGetAttributeConfigQuery","priorities","getPriorityOptions","thumbnails","getThumbnails","statusesValue","t","priorityValues","tagsValues","tagsOptionsObject","acc","tag","isMultiple","updateEntity","useEntityUpdate","_c","handleUpdate","field","value","handleThumbnailClick","versionIds","id","entityTypeKey","hasUser","usersOptions","u","allUsers","usersToAdd","title","subTitle","buildDetailsPanelTitles","jsx","Styled.HeaderContainer","EntityPanelUploader","jsxs","Styled.Grid","clsx","Styled.Header","StackedThumbnails","PlayableIcon","Styled.Content","Styled.Title","Styled.TagsSelect","upperFirst","Styled.StatusSelect","Styled.AssigneeSelect","Actions","Styled.PriorityEnumDropdown","FeedFilters"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../../../_virtual/jsx-runtime.cjs.js"),w=require("react"),z=require("./util/entityHierarchies.cjs.js"),A=require("lodash");require("react-toastify");require("uuid");require("../../util/pubsub.cjs.js");const L=require("./components/EntityTypeTable.cjs.js");require("../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/react-table");require("@tanstack/react-virtual");require("clsx");require("@tanstack/match-sorter-utils");const X=require("../SimpleTable/context/SimpleTableContext.cjs.js");require("../SimpleTable/SimpleTableRowTemplate.cjs.js");const a=require("@ynput/ayon-react-components");require("../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("axios");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../components/Thumbnail/StackedThumbnails.cjs.js");require("../Feed/context/FeedContext.cjs.js");require("../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../Feed/components/CommentInput/CommentInput.cjs.js");require("../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../Feed/components/ActivityDate.cjs.js");require("../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../Feed/Feed.styled.cjs.js");require("date-fns");require("../ProjectTreeTable/ProjectTreeTable.cjs.js");require("../ProjectTreeTable/context/CellEditingContext.cjs.js");require("../ProjectTreeTable/widgets/CollapsedWidget.cjs.js");require("../ProjectTreeTable/widgets/DateWidget.cjs.js");require("../ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../ProjectTreeTable/widgets/TextWidget.cjs.js");require("../ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../ProjectTreeTable/widgets/CellWidget.cjs.js");require("../ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../../components/LinksManager/LinksManagerDialog.cjs.js");require("../ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../ProjectTreeTable/ProjectTreeTable.styled.cjs.js");require("../ProjectTreeTable/components/SelectionCell.cjs.js");require("../ProjectTreeTable/components/RowSelectionHeader.cjs.js");require("../ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");require("../ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../ProjectTreeTable/context/ProjectTableContext.cjs.js");require("../ProjectTreeTable/context/ClipboardContext.cjs.js");require("../ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("../ProjectTreeTable/context/ProjectDataContext.cjs.js");require("../ProjectTreeTable/components/HeaderActionButton.cjs.js");require("../ProjectTreeTable/components/ColumnHeaderMenu.cjs.js");require("../DetailsPanel/DetailsPanel.styled.cjs.js");require("../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");require("../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../components/PlayableIcon/PlayableIcon.cjs.js");require("../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../Actions/Actions.styled.cjs.js");require("../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../Actions/ActionIcon.cjs.js");require("../Views/context/ViewsContext.cjs.js");require("../Views/Views.styled.cjs.js");require("../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../components/EntityPath/EntityPath.styled.cjs.js");require("../../components/EntityPath/SegmentProvider.cjs.js");require("../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../components/Watchers/Watchers.cjs.js");require("../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../components/Powerpack/PowerpackButton.cjs.js");require("../../components/Powerpack/PricingLink.cjs.js");require("../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../components/Powerpack/CTAButton.cjs.js");require("../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../components/AttributeEditor/components/MinMaxField.cjs.js");require("../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../components/SearchFilter/filterDates.cjs.js");require("../../components/Badge/Badge.cjs.js");require("../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../components/Feedback/FeedbackContext.cjs.js");require("../../components/Feedback/SupportBubble.cjs.js");require("../../components/Chips/Chips.cjs.js");require("../../components/LinksManager/LinksManager.styled.cjs.js");const J=require("styled-components"),K=require("./hooks/useGetEntityPickerData.cjs.js"),Q=require("./hooks/useExpandedWithInitialFolders.cjs.js"),U=600,V=J.div`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../../../_virtual/jsx-runtime.cjs.js"),w=require("react"),z=require("./util/entityHierarchies.cjs.js"),A=require("lodash");require("react-toastify");require("uuid");require("../../util/pubsub.cjs.js");const L=require("./components/EntityTypeTable.cjs.js");require("../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/react-table");require("@tanstack/react-virtual");require("clsx");require("@tanstack/match-sorter-utils");const X=require("../SimpleTable/context/SimpleTableContext.cjs.js");require("../SimpleTable/SimpleTableRowTemplate.cjs.js");const a=require("@ynput/ayon-react-components");require("../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("axios");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../components/Thumbnail/StackedThumbnails.cjs.js");require("../Feed/context/FeedContext.cjs.js");require("../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../Feed/components/CommentInput/CommentInput.cjs.js");require("../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../Feed/components/ActivityDate.cjs.js");require("../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../Feed/Feed.styled.cjs.js");require("date-fns");require("../ProjectTreeTable/ProjectTreeTable.cjs.js");require("../ProjectTreeTable/context/CellEditingContext.cjs.js");require("../ProjectTreeTable/widgets/CollapsedWidget.cjs.js");require("../ProjectTreeTable/widgets/DateWidget.cjs.js");require("../ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../ProjectTreeTable/widgets/TextWidget.cjs.js");require("../ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../ProjectTreeTable/widgets/CellWidget.cjs.js");require("../ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../../components/LinksManager/LinksManagerDialog.cjs.js");require("../ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../ProjectTreeTable/ProjectTreeTable.styled.cjs.js");require("../ProjectTreeTable/components/SelectionCell.cjs.js");require("../ProjectTreeTable/components/RowSelectionHeader.cjs.js");require("../ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");require("../ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../ProjectTreeTable/context/ProjectTableContext.cjs.js");require("../ProjectTreeTable/context/ClipboardContext.cjs.js");require("../ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("../ProjectTreeTable/context/ProjectDataContext.cjs.js");require("../ProjectTreeTable/components/HeaderActionButton.cjs.js");require("../ProjectTreeTable/components/ColumnHeaderMenu.cjs.js");require("../DetailsPanel/DetailsPanel.styled.cjs.js");require("../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");require("../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../components/PlayableIcon/PlayableIcon.cjs.js");require("../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../Actions/Actions.styled.cjs.js");require("../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../Actions/ActionIcon.cjs.js");require("../Views/context/ViewsContext.cjs.js");require("../Views/Views.styled.cjs.js");require("../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../components/EntityPath/EntityPath.styled.cjs.js");require("../../components/EntityPath/SegmentProvider.cjs.js");require("../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../components/Watchers/Watchers.cjs.js");require("../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../components/Powerpack/PowerpackButton.cjs.js");require("../../components/Powerpack/PricingLink.cjs.js");require("../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../components/Powerpack/CTAButton.cjs.js");require("../../components/Powerpack/RequiredPowerpackVersion.cjs.js");require("../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../components/AttributeEditor/components/MinMaxField.cjs.js");require("../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../components/SearchFilter/filterDates.cjs.js");require("../../components/Badge/Badge.cjs.js");require("../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../components/Feedback/FeedbackContext.cjs.js");require("../../components/Feedback/SupportBubble.cjs.js");require("../../components/Chips/Chips.cjs.js");require("../../components/LinksManager/LinksManager.styled.cjs.js");require("../../components/DetailsMetaData/DetailsMetaData.cjs.js");require("../../components/AccessUser/AccessUser.cjs.js");const J=require("styled-components"),K=require("./hooks/useGetEntityPickerData.cjs.js"),Q=require("./hooks/useExpandedWithInitialFolders.cjs.js"),U=600,V=J.div`
|
|
2
2
|
display: grid;
|
|
3
3
|
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
|
|
4
4
|
gap: var(--base-gap-large);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPickerDialog.cjs.js","sources":["../../../../../src/containers/EntityPickerDialog/EntityPickerDialog.tsx"],"sourcesContent":["// This components lets you pick a specific entity from the tree table.\n// Each entity type has it's own table\n\nimport { ExpandedState, RowSelectionState } from '@tanstack/react-table'\nimport { FC, useState } from 'react'\nimport { entityHierarchies } from './util'\nimport EntityTypeTable from './components/EntityTypeTable'\nimport { SimpleTableProvider } from '@shared/containers/SimpleTable'\nimport { Button, Dialog, DialogProps } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport { useGetEntityPickerData } from './hooks/useGetEntityPickerData'\nimport { upperFirst } from 'lodash'\nimport useExpandedWithInitialFolders from './hooks/useExpandedWithInitialFolders'\n\nconst COL_MAX_WIDTH = 600\n\nconst TablesContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));\n gap: var(--base-gap-large);\n height: 100%;\n overflow: hidden;\n flex: 1;\n\n table {\n height: 100%;\n\n td:has(.path) {\n .value {\n font-weight: bold;\n }\n }\n }\n`\n\nexport type PickerEntityType =\n | 'folder'\n | 'task'\n | 'product'\n | 'version'\n | 'representation'\n | 'workfile'\nexport type PickerSelection = Record<PickerEntityType, RowSelectionState>\nexport type PickerSearch = Record<PickerEntityType, string | undefined>\n\ninterface EntityPickerDialogProps extends Pick<DialogProps, 'onClose'> {\n projectName: string // The name of the project\n entityType: PickerEntityType // The type of entity to pick\n initialSelection?: Partial<PickerSelection> // Initial selection of entities\n isMultiSelect?: boolean // Whether to allow multiple selection\n onSubmit: (selection: string[]) => void // Callback when the user selects an entity/entities\n showMoveToRoot?: boolean // Whether to show \"Move to root\" button\n onMoveToRoot?: () => void // Callback when user clicks \"Move to root\"\n disabledIds?: string[] // IDs to display as disabled/unselectable\n disabledMessage?: string // Default tooltip message for disabled items\n getDisabledMessage?: (id: string) => string | undefined // Custom message per disabled item\n}\n\nexport const EntityPickerDialog: FC<EntityPickerDialogProps> = ({\n projectName,\n entityType,\n initialSelection,\n isMultiSelect,\n onSubmit,\n showMoveToRoot,\n onMoveToRoot,\n disabledIds = [],\n disabledMessage = \"Cannot select this item\",\n getDisabledMessage,\n ...props\n}) => {\n const initSelectionState: PickerSelection = {\n folder: initialSelection?.folder || {},\n task: initialSelection?.task || {},\n product: initialSelection?.product || {},\n version: initialSelection?.version || {},\n representation: initialSelection?.representation || {},\n workfile: initialSelection?.workfile || {},\n }\n\n const [rowSelection, setRowSelection] = useState<PickerSelection>(initSelectionState)\n\n // helper function to set the row selection for each entity type\n const setEntityRowSelection = (selection: RowSelectionState, entityType: PickerEntityType) => {\n setRowSelection((prev) => ({\n ...prev,\n [entityType]: selection,\n }))\n }\n\n const [search, setSearch] = useState<PickerSearch>({\n folder: undefined,\n task: undefined,\n product: undefined,\n version: undefined,\n representation: undefined,\n workfile: undefined,\n })\n\n // helper function to set the search for each entity type\n const setEntitySearch = (searchValue: string | undefined, entityType: PickerEntityType) => {\n setSearch((prev) => ({\n ...prev,\n [entityType]: searchValue,\n }))\n }\n\n // convert row selection into a list of ids for each entity type to make it easier to work with\n const entitySelection = Object.fromEntries(\n Object.entries(rowSelection).map(([type, selection]) => [\n type,\n Object.keys(selection).filter((id) => selection[id]),\n ]),\n ) as Record<PickerEntityType, string[]>\n\n const entityData = useGetEntityPickerData({\n entityType,\n projectName,\n search,\n selection: entitySelection,\n })\n\n const handleFetchNextPage = (entityType: PickerEntityType) => {\n const entityDataForType = entityData[entityType]\n if (entityDataForType?.hasNextPage && !entityDataForType.isFetchingNextPage) {\n entityDataForType.fetchNextPage?.()\n }\n }\n\n const [expanded, setExpanded] = useExpandedWithInitialFolders({\n foldersSelection: initSelectionState.folder,\n foldersData: entityData.folder,\n })\n\n // Get the complete hierarchy for the target entity type!\n const entityHierarchy = entityHierarchies[entityType]\n\n // Process table data to filter out excluded IDs and mark disabled rows\n const recursivelyProcessRows = (row:{id:string, subRows:any[]}, disabledIds:string[], parentIsDisabled: boolean) => {\n // Determine if the current row should be disabled.\n\n // A row is disabled if its parent is disabled OR its own ID is in the disabledIds list.\n const isDisabled = parentIsDisabled || disabledIds.includes(row.id);\n const disabledRowMessage = isDisabled\n ? (getDisabledMessage?.(row.id) || disabledMessage)\n : undefined;\n\n // Create a new row object with the updated disabled state.\n const newRow = {\n ...row,\n isDisabled,\n disabledMessage: disabledRowMessage\n };\n\n // If the row has subRows, recursively process each of them.\n if (row.subRows && row.subRows.length > 0) {\n newRow.subRows = row.subRows.map((subRow:any ) =>\n recursivelyProcessRows(subRow, disabledIds, isDisabled)\n );\n }\n\n return newRow;\n };\n\n const processTableDataWithDisabled = (tableData:any ) => {\n\n\n if (!disabledIds || disabledIds.length === 0) {\n return tableData;\n }\n\n // Iterate over the top-level rows and start the recursive processing.\n return tableData.map((row:any) => recursivelyProcessRows(row, disabledIds, false));\n };\n\n const handleSubmit = () => {\n // check the target entity has a selection\n if (!entitySelection[entityType]?.length) {\n return\n }\n const selection = isMultiSelect\n ? entitySelection[entityType]\n : entitySelection[entityType].slice(0, 1)\n // Call the onSubmit callback with the selected entity ids\n onSubmit(selection)\n }\n\n // based on the entity type, we need to create a new table for each parent\n return (\n <Dialog\n {...props}\n className=\"entity-picker-dialog\"\n header={`Select ${upperFirst(entityType)}`}\n isOpen\n size=\"full\"\n style={{ height: '80vh', maxWidth: entityHierarchy.length * COL_MAX_WIDTH }}\n footer={\n <>\n {showMoveToRoot && onMoveToRoot && (\n <Button\n label=\"Move to root\"\n variant=\"text\"\n onClick={onMoveToRoot}\n />\n )}\n <Button\n label={`Select ${entityType}${isMultiSelect ? 's' : ''}`}\n variant=\"filled\"\n disabled={!entitySelection[entityType]?.length}\n onClick={handleSubmit}\n />\n </>\n }\n >\n <TablesContainer>\n {entityHierarchy.map((tableEntityType) => (\n <SimpleTableProvider\n rowSelection={rowSelection[tableEntityType] || {}}\n onRowSelectionChange={(s) => setEntityRowSelection(s, tableEntityType)}\n // expanded state is only used for folders, so we only pass it when the entity type is folder\n expanded={tableEntityType === 'folder' ? expanded : undefined}\n setExpanded={tableEntityType === 'folder' ? setExpanded : undefined}\n key={tableEntityType}\n >\n <EntityTypeTable\n key={tableEntityType}\n entityType={tableEntityType}\n search={search[tableEntityType]}\n tableData={processTableDataWithDisabled(entityData[tableEntityType]?.table || [])}\n isFolderHierarchy={tableEntityType === 'folder' && !search.folder}\n onSearch={(v) => setEntitySearch(v, tableEntityType)}\n isMultiSelect={tableEntityType === entityType ? !!isMultiSelect : true}\n onRowSubmit={(id) => (tableEntityType === entityType ? onSubmit([id]) : undefined)}\n onScrollBottom={() => handleFetchNextPage(tableEntityType)}\n />\n </SimpleTableProvider>\n ))}\n </TablesContainer>\n </Dialog>\n )\n}\n"],"names":["COL_MAX_WIDTH","TablesContainer","styled","EntityPickerDialog","projectName","entityType","initialSelection","isMultiSelect","onSubmit","showMoveToRoot","onMoveToRoot","disabledIds","disabledMessage","getDisabledMessage","props","initSelectionState","rowSelection","setRowSelection","useState","setEntityRowSelection","selection","prev","search","setSearch","setEntitySearch","searchValue","entitySelection","type","id","entityData","useGetEntityPickerData","handleFetchNextPage","entityDataForType","_a","expanded","setExpanded","useExpandedWithInitialFolders","entityHierarchy","entityHierarchies","recursivelyProcessRows","row","parentIsDisabled","isDisabled","disabledRowMessage","newRow","subRow","processTableDataWithDisabled","tableData","handleSubmit","jsx","Dialog","upperFirst","jsxs","Fragment","Button","tableEntityType","SimpleTableProvider","s","EntityTypeTable","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityPickerDialog.cjs.js","sources":["../../../../../src/containers/EntityPickerDialog/EntityPickerDialog.tsx"],"sourcesContent":["// This components lets you pick a specific entity from the tree table.\n// Each entity type has it's own table\n\nimport { ExpandedState, RowSelectionState } from '@tanstack/react-table'\nimport { FC, useState } from 'react'\nimport { entityHierarchies } from './util'\nimport EntityTypeTable from './components/EntityTypeTable'\nimport { SimpleTableProvider } from '@shared/containers/SimpleTable'\nimport { Button, Dialog, DialogProps } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport { useGetEntityPickerData } from './hooks/useGetEntityPickerData'\nimport { upperFirst } from 'lodash'\nimport useExpandedWithInitialFolders from './hooks/useExpandedWithInitialFolders'\n\nconst COL_MAX_WIDTH = 600\n\nconst TablesContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));\n gap: var(--base-gap-large);\n height: 100%;\n overflow: hidden;\n flex: 1;\n\n table {\n height: 100%;\n\n td:has(.path) {\n .value {\n font-weight: bold;\n }\n }\n }\n`\n\nexport type PickerEntityType =\n | 'folder'\n | 'task'\n | 'product'\n | 'version'\n | 'representation'\n | 'workfile'\nexport type PickerSelection = Record<PickerEntityType, RowSelectionState>\nexport type PickerSearch = Record<PickerEntityType, string | undefined>\n\ninterface EntityPickerDialogProps extends Pick<DialogProps, 'onClose'> {\n projectName: string // The name of the project\n entityType: PickerEntityType // The type of entity to pick\n initialSelection?: Partial<PickerSelection> // Initial selection of entities\n isMultiSelect?: boolean // Whether to allow multiple selection\n onSubmit: (selection: string[]) => void // Callback when the user selects an entity/entities\n showMoveToRoot?: boolean // Whether to show \"Move to root\" button\n onMoveToRoot?: () => void // Callback when user clicks \"Move to root\"\n disabledIds?: string[] // IDs to display as disabled/unselectable\n disabledMessage?: string // Default tooltip message for disabled items\n getDisabledMessage?: (id: string) => string | undefined // Custom message per disabled item\n}\n\nexport const EntityPickerDialog: FC<EntityPickerDialogProps> = ({\n projectName,\n entityType,\n initialSelection,\n isMultiSelect,\n onSubmit,\n showMoveToRoot,\n onMoveToRoot,\n disabledIds = [],\n disabledMessage = \"Cannot select this item\",\n getDisabledMessage,\n ...props\n}) => {\n const initSelectionState: PickerSelection = {\n folder: initialSelection?.folder || {},\n task: initialSelection?.task || {},\n product: initialSelection?.product || {},\n version: initialSelection?.version || {},\n representation: initialSelection?.representation || {},\n workfile: initialSelection?.workfile || {},\n }\n\n const [rowSelection, setRowSelection] = useState<PickerSelection>(initSelectionState)\n\n // helper function to set the row selection for each entity type\n const setEntityRowSelection = (selection: RowSelectionState, entityType: PickerEntityType) => {\n setRowSelection((prev) => ({\n ...prev,\n [entityType]: selection,\n }))\n }\n\n const [search, setSearch] = useState<PickerSearch>({\n folder: undefined,\n task: undefined,\n product: undefined,\n version: undefined,\n representation: undefined,\n workfile: undefined,\n })\n\n // helper function to set the search for each entity type\n const setEntitySearch = (searchValue: string | undefined, entityType: PickerEntityType) => {\n setSearch((prev) => ({\n ...prev,\n [entityType]: searchValue,\n }))\n }\n\n // convert row selection into a list of ids for each entity type to make it easier to work with\n const entitySelection = Object.fromEntries(\n Object.entries(rowSelection).map(([type, selection]) => [\n type,\n Object.keys(selection).filter((id) => selection[id]),\n ]),\n ) as Record<PickerEntityType, string[]>\n\n const entityData = useGetEntityPickerData({\n entityType,\n projectName,\n search,\n selection: entitySelection,\n })\n\n const handleFetchNextPage = (entityType: PickerEntityType) => {\n const entityDataForType = entityData[entityType]\n if (entityDataForType?.hasNextPage && !entityDataForType.isFetchingNextPage) {\n entityDataForType.fetchNextPage?.()\n }\n }\n\n const [expanded, setExpanded] = useExpandedWithInitialFolders({\n foldersSelection: initSelectionState.folder,\n foldersData: entityData.folder,\n })\n\n // Get the complete hierarchy for the target entity type!\n const entityHierarchy = entityHierarchies[entityType]\n\n // Process table data to filter out excluded IDs and mark disabled rows\n const recursivelyProcessRows = (row:{id:string, subRows:any[]}, disabledIds:string[], parentIsDisabled: boolean) => {\n // Determine if the current row should be disabled.\n\n // A row is disabled if its parent is disabled OR its own ID is in the disabledIds list.\n const isDisabled = parentIsDisabled || disabledIds.includes(row.id);\n const disabledRowMessage = isDisabled\n ? (getDisabledMessage?.(row.id) || disabledMessage)\n : undefined;\n\n // Create a new row object with the updated disabled state.\n const newRow = {\n ...row,\n isDisabled,\n disabledMessage: disabledRowMessage\n };\n\n // If the row has subRows, recursively process each of them.\n if (row.subRows && row.subRows.length > 0) {\n newRow.subRows = row.subRows.map((subRow:any ) =>\n recursivelyProcessRows(subRow, disabledIds, isDisabled)\n );\n }\n\n return newRow;\n };\n\n const processTableDataWithDisabled = (tableData:any ) => {\n\n\n if (!disabledIds || disabledIds.length === 0) {\n return tableData;\n }\n\n // Iterate over the top-level rows and start the recursive processing.\n return tableData.map((row:any) => recursivelyProcessRows(row, disabledIds, false));\n };\n\n const handleSubmit = () => {\n // check the target entity has a selection\n if (!entitySelection[entityType]?.length) {\n return\n }\n const selection = isMultiSelect\n ? entitySelection[entityType]\n : entitySelection[entityType].slice(0, 1)\n // Call the onSubmit callback with the selected entity ids\n onSubmit(selection)\n }\n\n // based on the entity type, we need to create a new table for each parent\n return (\n <Dialog\n {...props}\n className=\"entity-picker-dialog\"\n header={`Select ${upperFirst(entityType)}`}\n isOpen\n size=\"full\"\n style={{ height: '80vh', maxWidth: entityHierarchy.length * COL_MAX_WIDTH }}\n footer={\n <>\n {showMoveToRoot && onMoveToRoot && (\n <Button\n label=\"Move to root\"\n variant=\"text\"\n onClick={onMoveToRoot}\n />\n )}\n <Button\n label={`Select ${entityType}${isMultiSelect ? 's' : ''}`}\n variant=\"filled\"\n disabled={!entitySelection[entityType]?.length}\n onClick={handleSubmit}\n />\n </>\n }\n >\n <TablesContainer>\n {entityHierarchy.map((tableEntityType) => (\n <SimpleTableProvider\n rowSelection={rowSelection[tableEntityType] || {}}\n onRowSelectionChange={(s) => setEntityRowSelection(s, tableEntityType)}\n // expanded state is only used for folders, so we only pass it when the entity type is folder\n expanded={tableEntityType === 'folder' ? expanded : undefined}\n setExpanded={tableEntityType === 'folder' ? setExpanded : undefined}\n key={tableEntityType}\n >\n <EntityTypeTable\n key={tableEntityType}\n entityType={tableEntityType}\n search={search[tableEntityType]}\n tableData={processTableDataWithDisabled(entityData[tableEntityType]?.table || [])}\n isFolderHierarchy={tableEntityType === 'folder' && !search.folder}\n onSearch={(v) => setEntitySearch(v, tableEntityType)}\n isMultiSelect={tableEntityType === entityType ? !!isMultiSelect : true}\n onRowSubmit={(id) => (tableEntityType === entityType ? onSubmit([id]) : undefined)}\n onScrollBottom={() => handleFetchNextPage(tableEntityType)}\n />\n </SimpleTableProvider>\n ))}\n </TablesContainer>\n </Dialog>\n )\n}\n"],"names":["COL_MAX_WIDTH","TablesContainer","styled","EntityPickerDialog","projectName","entityType","initialSelection","isMultiSelect","onSubmit","showMoveToRoot","onMoveToRoot","disabledIds","disabledMessage","getDisabledMessage","props","initSelectionState","rowSelection","setRowSelection","useState","setEntityRowSelection","selection","prev","search","setSearch","setEntitySearch","searchValue","entitySelection","type","id","entityData","useGetEntityPickerData","handleFetchNextPage","entityDataForType","_a","expanded","setExpanded","useExpandedWithInitialFolders","entityHierarchy","entityHierarchies","recursivelyProcessRows","row","parentIsDisabled","isDisabled","disabledRowMessage","newRow","subRow","processTableDataWithDisabled","tableData","handleSubmit","jsx","Dialog","upperFirst","jsxs","Fragment","Button","tableEntityType","SimpleTableProvider","s","EntityTypeTable","v"],"mappings":"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"}
|
|
@@ -202,6 +202,7 @@ import "../../components/Powerpack/PowerpackButton.es.js";
|
|
|
202
202
|
import "../../components/Powerpack/PricingLink.es.js";
|
|
203
203
|
import "../../components/Powerpack/PowerpackDialog.styled.es.js";
|
|
204
204
|
import "../../components/Powerpack/CTAButton.es.js";
|
|
205
|
+
import "../../components/Powerpack/RequiredPowerpackVersion.es.js";
|
|
205
206
|
import "../../components/SettingsPanel/SettingsPanel.es.js";
|
|
206
207
|
import "../../components/SettingsPanel/SettingsPanelItemTemplate.es.js";
|
|
207
208
|
import "../../components/AttributeEditor/components/MinMaxField.es.js";
|
|
@@ -214,6 +215,8 @@ import "../../components/Feedback/FeedbackContext.es.js";
|
|
|
214
215
|
import "../../components/Feedback/SupportBubble.es.js";
|
|
215
216
|
import "../../components/Chips/Chips.es.js";
|
|
216
217
|
import "../../components/LinksManager/LinksManager.styled.es.js";
|
|
218
|
+
import "../../components/DetailsMetaData/DetailsMetaData.es.js";
|
|
219
|
+
import "../../components/AccessUser/AccessUser.es.js";
|
|
217
220
|
import Q from "styled-components";
|
|
218
221
|
import { useGetEntityPickerData as U } from "./hooks/useGetEntityPickerData.es.js";
|
|
219
222
|
import V from "./hooks/useExpandedWithInitialFolders.es.js";
|
|
@@ -234,7 +237,7 @@ const Y = 600, Z = Q.div`
|
|
|
234
237
|
}
|
|
235
238
|
}
|
|
236
239
|
}
|
|
237
|
-
`,
|
|
240
|
+
`, op = ({
|
|
238
241
|
projectName: C,
|
|
239
242
|
entityType: p,
|
|
240
243
|
initialSelection: m,
|
|
@@ -364,6 +367,6 @@ const Y = 600, Z = Q.div`
|
|
|
364
367
|
);
|
|
365
368
|
};
|
|
366
369
|
export {
|
|
367
|
-
|
|
370
|
+
op as EntityPickerDialog
|
|
368
371
|
};
|
|
369
372
|
//# sourceMappingURL=EntityPickerDialog.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPickerDialog.es.js","sources":["../../../../../src/containers/EntityPickerDialog/EntityPickerDialog.tsx"],"sourcesContent":["// This components lets you pick a specific entity from the tree table.\n// Each entity type has it's own table\n\nimport { ExpandedState, RowSelectionState } from '@tanstack/react-table'\nimport { FC, useState } from 'react'\nimport { entityHierarchies } from './util'\nimport EntityTypeTable from './components/EntityTypeTable'\nimport { SimpleTableProvider } from '@shared/containers/SimpleTable'\nimport { Button, Dialog, DialogProps } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport { useGetEntityPickerData } from './hooks/useGetEntityPickerData'\nimport { upperFirst } from 'lodash'\nimport useExpandedWithInitialFolders from './hooks/useExpandedWithInitialFolders'\n\nconst COL_MAX_WIDTH = 600\n\nconst TablesContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));\n gap: var(--base-gap-large);\n height: 100%;\n overflow: hidden;\n flex: 1;\n\n table {\n height: 100%;\n\n td:has(.path) {\n .value {\n font-weight: bold;\n }\n }\n }\n`\n\nexport type PickerEntityType =\n | 'folder'\n | 'task'\n | 'product'\n | 'version'\n | 'representation'\n | 'workfile'\nexport type PickerSelection = Record<PickerEntityType, RowSelectionState>\nexport type PickerSearch = Record<PickerEntityType, string | undefined>\n\ninterface EntityPickerDialogProps extends Pick<DialogProps, 'onClose'> {\n projectName: string // The name of the project\n entityType: PickerEntityType // The type of entity to pick\n initialSelection?: Partial<PickerSelection> // Initial selection of entities\n isMultiSelect?: boolean // Whether to allow multiple selection\n onSubmit: (selection: string[]) => void // Callback when the user selects an entity/entities\n showMoveToRoot?: boolean // Whether to show \"Move to root\" button\n onMoveToRoot?: () => void // Callback when user clicks \"Move to root\"\n disabledIds?: string[] // IDs to display as disabled/unselectable\n disabledMessage?: string // Default tooltip message for disabled items\n getDisabledMessage?: (id: string) => string | undefined // Custom message per disabled item\n}\n\nexport const EntityPickerDialog: FC<EntityPickerDialogProps> = ({\n projectName,\n entityType,\n initialSelection,\n isMultiSelect,\n onSubmit,\n showMoveToRoot,\n onMoveToRoot,\n disabledIds = [],\n disabledMessage = \"Cannot select this item\",\n getDisabledMessage,\n ...props\n}) => {\n const initSelectionState: PickerSelection = {\n folder: initialSelection?.folder || {},\n task: initialSelection?.task || {},\n product: initialSelection?.product || {},\n version: initialSelection?.version || {},\n representation: initialSelection?.representation || {},\n workfile: initialSelection?.workfile || {},\n }\n\n const [rowSelection, setRowSelection] = useState<PickerSelection>(initSelectionState)\n\n // helper function to set the row selection for each entity type\n const setEntityRowSelection = (selection: RowSelectionState, entityType: PickerEntityType) => {\n setRowSelection((prev) => ({\n ...prev,\n [entityType]: selection,\n }))\n }\n\n const [search, setSearch] = useState<PickerSearch>({\n folder: undefined,\n task: undefined,\n product: undefined,\n version: undefined,\n representation: undefined,\n workfile: undefined,\n })\n\n // helper function to set the search for each entity type\n const setEntitySearch = (searchValue: string | undefined, entityType: PickerEntityType) => {\n setSearch((prev) => ({\n ...prev,\n [entityType]: searchValue,\n }))\n }\n\n // convert row selection into a list of ids for each entity type to make it easier to work with\n const entitySelection = Object.fromEntries(\n Object.entries(rowSelection).map(([type, selection]) => [\n type,\n Object.keys(selection).filter((id) => selection[id]),\n ]),\n ) as Record<PickerEntityType, string[]>\n\n const entityData = useGetEntityPickerData({\n entityType,\n projectName,\n search,\n selection: entitySelection,\n })\n\n const handleFetchNextPage = (entityType: PickerEntityType) => {\n const entityDataForType = entityData[entityType]\n if (entityDataForType?.hasNextPage && !entityDataForType.isFetchingNextPage) {\n entityDataForType.fetchNextPage?.()\n }\n }\n\n const [expanded, setExpanded] = useExpandedWithInitialFolders({\n foldersSelection: initSelectionState.folder,\n foldersData: entityData.folder,\n })\n\n // Get the complete hierarchy for the target entity type!\n const entityHierarchy = entityHierarchies[entityType]\n\n // Process table data to filter out excluded IDs and mark disabled rows\n const recursivelyProcessRows = (row:{id:string, subRows:any[]}, disabledIds:string[], parentIsDisabled: boolean) => {\n // Determine if the current row should be disabled.\n\n // A row is disabled if its parent is disabled OR its own ID is in the disabledIds list.\n const isDisabled = parentIsDisabled || disabledIds.includes(row.id);\n const disabledRowMessage = isDisabled\n ? (getDisabledMessage?.(row.id) || disabledMessage)\n : undefined;\n\n // Create a new row object with the updated disabled state.\n const newRow = {\n ...row,\n isDisabled,\n disabledMessage: disabledRowMessage\n };\n\n // If the row has subRows, recursively process each of them.\n if (row.subRows && row.subRows.length > 0) {\n newRow.subRows = row.subRows.map((subRow:any ) =>\n recursivelyProcessRows(subRow, disabledIds, isDisabled)\n );\n }\n\n return newRow;\n };\n\n const processTableDataWithDisabled = (tableData:any ) => {\n\n\n if (!disabledIds || disabledIds.length === 0) {\n return tableData;\n }\n\n // Iterate over the top-level rows and start the recursive processing.\n return tableData.map((row:any) => recursivelyProcessRows(row, disabledIds, false));\n };\n\n const handleSubmit = () => {\n // check the target entity has a selection\n if (!entitySelection[entityType]?.length) {\n return\n }\n const selection = isMultiSelect\n ? entitySelection[entityType]\n : entitySelection[entityType].slice(0, 1)\n // Call the onSubmit callback with the selected entity ids\n onSubmit(selection)\n }\n\n // based on the entity type, we need to create a new table for each parent\n return (\n <Dialog\n {...props}\n className=\"entity-picker-dialog\"\n header={`Select ${upperFirst(entityType)}`}\n isOpen\n size=\"full\"\n style={{ height: '80vh', maxWidth: entityHierarchy.length * COL_MAX_WIDTH }}\n footer={\n <>\n {showMoveToRoot && onMoveToRoot && (\n <Button\n label=\"Move to root\"\n variant=\"text\"\n onClick={onMoveToRoot}\n />\n )}\n <Button\n label={`Select ${entityType}${isMultiSelect ? 's' : ''}`}\n variant=\"filled\"\n disabled={!entitySelection[entityType]?.length}\n onClick={handleSubmit}\n />\n </>\n }\n >\n <TablesContainer>\n {entityHierarchy.map((tableEntityType) => (\n <SimpleTableProvider\n rowSelection={rowSelection[tableEntityType] || {}}\n onRowSelectionChange={(s) => setEntityRowSelection(s, tableEntityType)}\n // expanded state is only used for folders, so we only pass it when the entity type is folder\n expanded={tableEntityType === 'folder' ? expanded : undefined}\n setExpanded={tableEntityType === 'folder' ? setExpanded : undefined}\n key={tableEntityType}\n >\n <EntityTypeTable\n key={tableEntityType}\n entityType={tableEntityType}\n search={search[tableEntityType]}\n tableData={processTableDataWithDisabled(entityData[tableEntityType]?.table || [])}\n isFolderHierarchy={tableEntityType === 'folder' && !search.folder}\n onSearch={(v) => setEntitySearch(v, tableEntityType)}\n isMultiSelect={tableEntityType === entityType ? !!isMultiSelect : true}\n onRowSubmit={(id) => (tableEntityType === entityType ? onSubmit([id]) : undefined)}\n onScrollBottom={() => handleFetchNextPage(tableEntityType)}\n />\n </SimpleTableProvider>\n ))}\n </TablesContainer>\n </Dialog>\n )\n}\n"],"names":["COL_MAX_WIDTH","TablesContainer","styled","EntityPickerDialog","projectName","entityType","initialSelection","isMultiSelect","onSubmit","showMoveToRoot","onMoveToRoot","disabledIds","disabledMessage","getDisabledMessage","props","initSelectionState","rowSelection","setRowSelection","useState","setEntityRowSelection","selection","prev","search","setSearch","setEntitySearch","searchValue","entitySelection","type","id","entityData","useGetEntityPickerData","handleFetchNextPage","entityDataForType","_a","expanded","setExpanded","useExpandedWithInitialFolders","entityHierarchy","entityHierarchies","recursivelyProcessRows","row","parentIsDisabled","isDisabled","disabledRowMessage","newRow","subRow","processTableDataWithDisabled","tableData","handleSubmit","jsx","Dialog","upperFirst","jsxs","Fragment","Button","tableEntityType","SimpleTableProvider","s","EntityTypeTable","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityPickerDialog.es.js","sources":["../../../../../src/containers/EntityPickerDialog/EntityPickerDialog.tsx"],"sourcesContent":["// This components lets you pick a specific entity from the tree table.\n// Each entity type has it's own table\n\nimport { ExpandedState, RowSelectionState } from '@tanstack/react-table'\nimport { FC, useState } from 'react'\nimport { entityHierarchies } from './util'\nimport EntityTypeTable from './components/EntityTypeTable'\nimport { SimpleTableProvider } from '@shared/containers/SimpleTable'\nimport { Button, Dialog, DialogProps } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport { useGetEntityPickerData } from './hooks/useGetEntityPickerData'\nimport { upperFirst } from 'lodash'\nimport useExpandedWithInitialFolders from './hooks/useExpandedWithInitialFolders'\n\nconst COL_MAX_WIDTH = 600\n\nconst TablesContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));\n gap: var(--base-gap-large);\n height: 100%;\n overflow: hidden;\n flex: 1;\n\n table {\n height: 100%;\n\n td:has(.path) {\n .value {\n font-weight: bold;\n }\n }\n }\n`\n\nexport type PickerEntityType =\n | 'folder'\n | 'task'\n | 'product'\n | 'version'\n | 'representation'\n | 'workfile'\nexport type PickerSelection = Record<PickerEntityType, RowSelectionState>\nexport type PickerSearch = Record<PickerEntityType, string | undefined>\n\ninterface EntityPickerDialogProps extends Pick<DialogProps, 'onClose'> {\n projectName: string // The name of the project\n entityType: PickerEntityType // The type of entity to pick\n initialSelection?: Partial<PickerSelection> // Initial selection of entities\n isMultiSelect?: boolean // Whether to allow multiple selection\n onSubmit: (selection: string[]) => void // Callback when the user selects an entity/entities\n showMoveToRoot?: boolean // Whether to show \"Move to root\" button\n onMoveToRoot?: () => void // Callback when user clicks \"Move to root\"\n disabledIds?: string[] // IDs to display as disabled/unselectable\n disabledMessage?: string // Default tooltip message for disabled items\n getDisabledMessage?: (id: string) => string | undefined // Custom message per disabled item\n}\n\nexport const EntityPickerDialog: FC<EntityPickerDialogProps> = ({\n projectName,\n entityType,\n initialSelection,\n isMultiSelect,\n onSubmit,\n showMoveToRoot,\n onMoveToRoot,\n disabledIds = [],\n disabledMessage = \"Cannot select this item\",\n getDisabledMessage,\n ...props\n}) => {\n const initSelectionState: PickerSelection = {\n folder: initialSelection?.folder || {},\n task: initialSelection?.task || {},\n product: initialSelection?.product || {},\n version: initialSelection?.version || {},\n representation: initialSelection?.representation || {},\n workfile: initialSelection?.workfile || {},\n }\n\n const [rowSelection, setRowSelection] = useState<PickerSelection>(initSelectionState)\n\n // helper function to set the row selection for each entity type\n const setEntityRowSelection = (selection: RowSelectionState, entityType: PickerEntityType) => {\n setRowSelection((prev) => ({\n ...prev,\n [entityType]: selection,\n }))\n }\n\n const [search, setSearch] = useState<PickerSearch>({\n folder: undefined,\n task: undefined,\n product: undefined,\n version: undefined,\n representation: undefined,\n workfile: undefined,\n })\n\n // helper function to set the search for each entity type\n const setEntitySearch = (searchValue: string | undefined, entityType: PickerEntityType) => {\n setSearch((prev) => ({\n ...prev,\n [entityType]: searchValue,\n }))\n }\n\n // convert row selection into a list of ids for each entity type to make it easier to work with\n const entitySelection = Object.fromEntries(\n Object.entries(rowSelection).map(([type, selection]) => [\n type,\n Object.keys(selection).filter((id) => selection[id]),\n ]),\n ) as Record<PickerEntityType, string[]>\n\n const entityData = useGetEntityPickerData({\n entityType,\n projectName,\n search,\n selection: entitySelection,\n })\n\n const handleFetchNextPage = (entityType: PickerEntityType) => {\n const entityDataForType = entityData[entityType]\n if (entityDataForType?.hasNextPage && !entityDataForType.isFetchingNextPage) {\n entityDataForType.fetchNextPage?.()\n }\n }\n\n const [expanded, setExpanded] = useExpandedWithInitialFolders({\n foldersSelection: initSelectionState.folder,\n foldersData: entityData.folder,\n })\n\n // Get the complete hierarchy for the target entity type!\n const entityHierarchy = entityHierarchies[entityType]\n\n // Process table data to filter out excluded IDs and mark disabled rows\n const recursivelyProcessRows = (row:{id:string, subRows:any[]}, disabledIds:string[], parentIsDisabled: boolean) => {\n // Determine if the current row should be disabled.\n\n // A row is disabled if its parent is disabled OR its own ID is in the disabledIds list.\n const isDisabled = parentIsDisabled || disabledIds.includes(row.id);\n const disabledRowMessage = isDisabled\n ? (getDisabledMessage?.(row.id) || disabledMessage)\n : undefined;\n\n // Create a new row object with the updated disabled state.\n const newRow = {\n ...row,\n isDisabled,\n disabledMessage: disabledRowMessage\n };\n\n // If the row has subRows, recursively process each of them.\n if (row.subRows && row.subRows.length > 0) {\n newRow.subRows = row.subRows.map((subRow:any ) =>\n recursivelyProcessRows(subRow, disabledIds, isDisabled)\n );\n }\n\n return newRow;\n };\n\n const processTableDataWithDisabled = (tableData:any ) => {\n\n\n if (!disabledIds || disabledIds.length === 0) {\n return tableData;\n }\n\n // Iterate over the top-level rows and start the recursive processing.\n return tableData.map((row:any) => recursivelyProcessRows(row, disabledIds, false));\n };\n\n const handleSubmit = () => {\n // check the target entity has a selection\n if (!entitySelection[entityType]?.length) {\n return\n }\n const selection = isMultiSelect\n ? entitySelection[entityType]\n : entitySelection[entityType].slice(0, 1)\n // Call the onSubmit callback with the selected entity ids\n onSubmit(selection)\n }\n\n // based on the entity type, we need to create a new table for each parent\n return (\n <Dialog\n {...props}\n className=\"entity-picker-dialog\"\n header={`Select ${upperFirst(entityType)}`}\n isOpen\n size=\"full\"\n style={{ height: '80vh', maxWidth: entityHierarchy.length * COL_MAX_WIDTH }}\n footer={\n <>\n {showMoveToRoot && onMoveToRoot && (\n <Button\n label=\"Move to root\"\n variant=\"text\"\n onClick={onMoveToRoot}\n />\n )}\n <Button\n label={`Select ${entityType}${isMultiSelect ? 's' : ''}`}\n variant=\"filled\"\n disabled={!entitySelection[entityType]?.length}\n onClick={handleSubmit}\n />\n </>\n }\n >\n <TablesContainer>\n {entityHierarchy.map((tableEntityType) => (\n <SimpleTableProvider\n rowSelection={rowSelection[tableEntityType] || {}}\n onRowSelectionChange={(s) => setEntityRowSelection(s, tableEntityType)}\n // expanded state is only used for folders, so we only pass it when the entity type is folder\n expanded={tableEntityType === 'folder' ? expanded : undefined}\n setExpanded={tableEntityType === 'folder' ? setExpanded : undefined}\n key={tableEntityType}\n >\n <EntityTypeTable\n key={tableEntityType}\n entityType={tableEntityType}\n search={search[tableEntityType]}\n tableData={processTableDataWithDisabled(entityData[tableEntityType]?.table || [])}\n isFolderHierarchy={tableEntityType === 'folder' && !search.folder}\n onSearch={(v) => setEntitySearch(v, tableEntityType)}\n isMultiSelect={tableEntityType === entityType ? !!isMultiSelect : true}\n onRowSubmit={(id) => (tableEntityType === entityType ? onSubmit([id]) : undefined)}\n onScrollBottom={() => handleFetchNextPage(tableEntityType)}\n />\n </SimpleTableProvider>\n ))}\n </TablesContainer>\n </Dialog>\n )\n}\n"],"names":["COL_MAX_WIDTH","TablesContainer","styled","EntityPickerDialog","projectName","entityType","initialSelection","isMultiSelect","onSubmit","showMoveToRoot","onMoveToRoot","disabledIds","disabledMessage","getDisabledMessage","props","initSelectionState","rowSelection","setRowSelection","useState","setEntityRowSelection","selection","prev","search","setSearch","setEntitySearch","searchValue","entitySelection","type","id","entityData","useGetEntityPickerData","handleFetchNextPage","entityDataForType","_a","expanded","setExpanded","useExpandedWithInitialFolders","entityHierarchy","entityHierarchies","recursivelyProcessRows","row","parentIsDisabled","isDisabled","disabledRowMessage","newRow","subRow","processTableDataWithDisabled","tableData","handleSubmit","jsx","Dialog","upperFirst","jsxs","Fragment","Button","tableEntityType","SimpleTableProvider","s","EntityTypeTable","v"],"mappings":"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"}
|