@strapi/upload 5.30.0 → 5.30.1
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/admin/ai/components/AIAssetCard.js +27 -7
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
- package/dist/admin/ai/components/AIAssetCard.mjs +21 -1
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.js +1 -1
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.mjs +1 -1
- package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.js +5 -4
- package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs +2 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCardBase.js +1 -1
- package/dist/admin/components/AssetCard/AssetCardBase.mjs +1 -1
- package/dist/admin/components/AssetCard/DocAssetCard.js +3 -7
- package/dist/admin/components/AssetCard/DocAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/DocAssetCard.mjs +3 -7
- package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.js +5 -4
- package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +2 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.js +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +2 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +2 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +1 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +1 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +1 -1
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +1 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +1 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +15 -34
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +15 -34
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +3 -2
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +2 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +1 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +1 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +1 -1
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +1 -1
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -1
- package/dist/admin/components/FilterList/FilterList.js.map +1 -1
- package/dist/admin/components/FilterList/FilterList.mjs.map +1 -1
- package/dist/admin/components/FilterList/FilterTag.js.map +1 -1
- package/dist/admin/components/FilterList/FilterTag.mjs.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -1
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +8 -10
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +5 -7
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/components/SelectTree/Option.js.map +1 -1
- package/dist/admin/components/SelectTree/Option.mjs.map +1 -1
- package/dist/admin/components/SelectTree/SelectTree.js.map +1 -1
- package/dist/admin/components/SelectTree/SelectTree.mjs.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
- package/dist/admin/components/SortPicker/SortPicker.js +1 -0
- package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
- package/dist/admin/components/SortPicker/SortPicker.mjs +1 -0
- package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
- package/dist/admin/components/TableList/CellContent.js +1 -1
- package/dist/admin/components/TableList/CellContent.mjs +1 -1
- package/dist/admin/components/TableList/PreviewCell.js +5 -4
- package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.mjs +2 -1
- package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
- package/dist/admin/components/TableList/TableList.js +1 -0
- package/dist/admin/components/TableList/TableList.js.map +1 -1
- package/dist/admin/components/TableList/TableList.mjs +1 -0
- package/dist/admin/components/TableList/TableList.mjs.map +1 -1
- package/dist/admin/components/TableList/TableRows.js +1 -0
- package/dist/admin/components/TableList/TableRows.js.map +1 -1
- package/dist/admin/components/TableList/TableRows.mjs +1 -0
- package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
- package/dist/admin/components/UploadProgress/UploadProgress.js.map +1 -1
- package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +1 -1
- package/dist/admin/constants.js +5 -10
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs +5 -11
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/enums.js +20 -0
- package/dist/admin/enums.js.map +1 -0
- package/dist/admin/enums.mjs +17 -0
- package/dist/admin/enums.mjs.map +1 -0
- package/dist/admin/hooks/useBulkEdit.js +1 -1
- package/dist/admin/hooks/useBulkEdit.mjs +1 -1
- package/dist/admin/hooks/useBulkMove.js +1 -1
- package/dist/admin/hooks/useBulkMove.mjs +1 -1
- package/dist/admin/hooks/useBulkRemove.js +1 -1
- package/dist/admin/hooks/useBulkRemove.mjs +1 -1
- package/dist/admin/hooks/useEditAsset.js +1 -1
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.mjs +1 -1
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
- package/dist/admin/hooks/useEditFolder.js.map +1 -1
- package/dist/admin/hooks/useEditFolder.mjs.map +1 -1
- package/dist/admin/hooks/useFolder.js +1 -1
- package/dist/admin/hooks/useFolder.js.map +1 -1
- package/dist/admin/hooks/useFolder.mjs +1 -1
- package/dist/admin/hooks/useFolder.mjs.map +1 -1
- package/dist/admin/hooks/useFolderStructure.js +1 -1
- package/dist/admin/hooks/useFolderStructure.mjs +1 -1
- package/dist/admin/hooks/useRemoveAsset.js.map +1 -1
- package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +4 -1
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +5 -2
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +5 -5
- package/dist/admin/package.json.mjs +5 -5
- package/dist/admin/pages/App/App.js +1 -1
- package/dist/admin/pages/App/App.mjs +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +1 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +1 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +1 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +1 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Filters.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.js +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.mjs +1 -1
- package/dist/admin/pages/App/MediaLibrary/components/Header.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +1 -0
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +1 -0
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/src/components/AssetCard/UploadingAssetCard.d.ts +1 -1
- package/dist/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.d.ts +1 -1
- package/dist/admin/src/constants.d.ts +0 -6
- package/dist/admin/src/enums.d.ts +12 -0
- package/dist/admin/src/utils/icons.d.ts +14 -0
- package/dist/admin/src/utils/rawFileToAsset.d.ts +1 -1
- package/dist/admin/src/utils/typeFromMime.d.ts +2 -2
- package/dist/admin/src/utils/urlsToAssets.d.ts +1 -1
- package/dist/admin/translations/pt-BR.json.js +75 -7
- package/dist/admin/translations/pt-BR.json.js.map +1 -1
- package/dist/admin/translations/pt-BR.json.mjs +75 -7
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
- package/dist/admin/utils/formatBytes.js.map +1 -1
- package/dist/admin/utils/formatBytes.mjs.map +1 -1
- package/dist/admin/utils/formatDuration.js.map +1 -1
- package/dist/admin/utils/formatDuration.mjs.map +1 -1
- package/dist/admin/utils/getFolderURL.js.map +1 -1
- package/dist/admin/utils/getFolderURL.mjs.map +1 -1
- package/dist/admin/utils/getTrad.js.map +1 -1
- package/dist/admin/utils/getTrad.mjs.map +1 -1
- package/dist/admin/utils/icons.js +23 -0
- package/dist/admin/utils/icons.js.map +1 -0
- package/dist/admin/utils/icons.mjs +19 -0
- package/dist/admin/utils/icons.mjs.map +1 -0
- package/dist/admin/utils/normalizeAPIError.js.map +1 -1
- package/dist/admin/utils/normalizeAPIError.mjs.map +1 -1
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +1 -1
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
- package/dist/admin/utils/typeFromMime.js +15 -11
- package/dist/admin/utils/typeFromMime.js.map +1 -1
- package/dist/admin/utils/typeFromMime.mjs +15 -11
- package/dist/admin/utils/typeFromMime.mjs.map +1 -1
- package/dist/server/controllers/admin-folder-file.js.map +1 -1
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
- package/dist/server/controllers/utils/folders.js.map +1 -1
- package/dist/server/controllers/utils/folders.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/folder-file.js.map +1 -1
- package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/folder.js +1 -1
- package/dist/server/controllers/validation/admin/folder.js.map +1 -1
- package/dist/server/controllers/validation/admin/folder.mjs +1 -1
- package/dist/server/controllers/validation/admin/folder.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/api-upload-folder.js.map +1 -1
- package/dist/server/services/api-upload-folder.mjs.map +1 -1
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/services/metrics.js +4 -1
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +4 -1
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/utils/cron.js.map +1 -1
- package/dist/server/utils/cron.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport {
|
|
1
|
+
{"version":3,"file":"CarouselAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { createAssetUrl } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Image)) {\n const assetUrl = createAssetUrl(asset, true);\n if (!assetUrl) return null;\n\n // Adding a param to the url to bust the cache and force the refresh of the image when replaced\n // Only add updatedAt parameter if the URL is not signed to prevent signature invalidation\n const cacheBustedUrl = asset.isUrlSigned\n ? assetUrl\n : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;\n\n return (\n <Box\n tag=\"img\"\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={cacheBustedUrl}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n const IconComponent = getFileIconComponent(asset.ext);\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n <IconComponent aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","AssetType","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","assetUrl","cacheBustedUrl","isUrlSigned","updatedAt","tag","maxHeight","maxWidth","src","IconComponent","getFileIconComponent","ext","width","justifyContent","hasRadius","aria-label"],"mappings":";;;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,MAAOC,CAAAA,IAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,MAAOG,CAAAA,GAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,MAAOG,CAAAA,GAAAA,CAAI;;;;;AAKvC,CAAC;AAEYE,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAASC,CAAAA,SAAAA,CAAUC,KAAK,CAAG,EAAA;AACzC,QAAA,qBACEC,GAACT,CAAAA,mBAAAA,EAAAA;YAAoBU,MAAO,EAAA,MAAA;AAC1B,YAAA,QAAA,gBAAAD,GAACE,CAAAA,YAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,eAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,SAAAA,CAAUU,KAAK,CAAG,EAAA;AACzC,QAAA,qBACER,GAACP,CAAAA,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,GAACS,CAAAA,YAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,eAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,SAAAA,CAAUY,KAAK,CAAG,EAAA;QACzC,MAAMC,QAAAA,GAAWP,eAAeT,KAAO,EAAA,IAAA,CAAA;QACvC,IAAI,CAACgB,UAAU,OAAO,IAAA;;;AAItB,QAAA,MAAMC,iBAAiBjB,KAAMkB,CAAAA,WAAW,GACpCF,QAAAA,GACA,GAAGA,QAAWA,CAAAA,EAAAA,QAAAA,CAASd,QAAQ,CAAC,OAAO,GAAM,GAAA,GAAA,CAAI,UAAU,EAAEF,KAAAA,CAAMmB,SAAS,CAAE,CAAA;AAElF,QAAA,qBACEd,GAACR,CAAAA,GAAAA,EAAAA;YACCuB,GAAI,EAAA,KAAA;YACJC,SAAU,EAAA,MAAA;YACVC,QAAS,EAAA,MAAA;YACTC,GAAKN,EAAAA,cAAAA;AACLP,YAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;AAG1C;IAEA,MAAMY,aAAAA,GAAgBC,oBAAqBzB,CAAAA,KAAAA,CAAM0B,GAAG,CAAA;AAEpD,IAAA,qBACErB,GAACZ,CAAAA,QAAAA,EAAAA;QAASkC,KAAM,EAAA,MAAA;QAAOrB,MAAO,EAAA,MAAA;QAAOsB,cAAe,EAAA,QAAA;QAASC,SAAS,EAAA,IAAA;AACpE,QAAA,QAAA,gBAAAxB,GAACmB,CAAAA,aAAAA,EAAAA;AAAcM,YAAAA,YAAAA,EAAY9B,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEe,KAAM,EAAA,MAAA;YAAOrB,MAAO,EAAA;;;AAG1F;;;;"}
|
|
@@ -9,7 +9,7 @@ require('byte-size');
|
|
|
9
9
|
require('date-fns');
|
|
10
10
|
var getTrad = require('../../../utils/getTrad.js');
|
|
11
11
|
require('qs');
|
|
12
|
-
require('../../../
|
|
12
|
+
require('../../../utils/typeFromMime.js');
|
|
13
13
|
require('../../../utils/urlYupSchema.js');
|
|
14
14
|
var CopyLinkButton = require('../../CopyLinkButton/CopyLinkButton.js');
|
|
15
15
|
|
|
@@ -7,7 +7,7 @@ import 'byte-size';
|
|
|
7
7
|
import 'date-fns';
|
|
8
8
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
9
9
|
import 'qs';
|
|
10
|
-
import '../../../
|
|
10
|
+
import '../../../utils/typeFromMime.mjs';
|
|
11
11
|
import '../../../utils/urlYupSchema.mjs';
|
|
12
12
|
import { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton.mjs';
|
|
13
13
|
|
|
@@ -12,6 +12,7 @@ require('date-fns');
|
|
|
12
12
|
var getTrad = require('../../../utils/getTrad.js');
|
|
13
13
|
require('qs');
|
|
14
14
|
var rawFileToAsset = require('../../../utils/rawFileToAsset.js');
|
|
15
|
+
require('../../../utils/typeFromMime.js');
|
|
15
16
|
require('../../../utils/urlYupSchema.js');
|
|
16
17
|
|
|
17
18
|
function _interopNamespaceDefault(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyStateAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle as PicturePlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetSource } from '../../../constants';\nimport { getTrad, rawFileToAsset } from '../../../utils';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\nconst TextAlignTypography = styled(Typography)`\n align-items: center;\n`;\n\ntype FileWithoutIdHash = Omit<File, 'id' | 'hash'>;\n\ninterface EmptyStateAssetProps {\n disabled?: boolean;\n onClick: (asset?: File, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDropAsset: (assets: FileWithoutIdHash[]) => void;\n}\n\nexport const EmptyStateAsset = ({\n disabled = false,\n onClick,\n onDropAsset,\n}: EmptyStateAssetProps) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = React.useState(false);\n\n const handleDragEnter = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLButtonElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setDragOver(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n };\n\n const handleDrop = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (e?.dataTransfer?.files) {\n const files = e.dataTransfer.files;\n const assets: FileWithoutIdHash[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n if (file) {\n const asset = rawFileToAsset(file, AssetSource.Computer);\n\n assets.push(asset);\n }\n }\n\n onDropAsset(assets);\n }\n\n setDragOver(false);\n };\n\n return (\n <Flex\n borderStyle={dragOver ? 'dashed' : undefined}\n borderWidth={dragOver ? '1px' : undefined}\n borderColor={dragOver ? 'primary600' : undefined}\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"100%\"\n width=\"100%\"\n tag=\"button\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick as unknown as React.MouseEventHandler<HTMLButtonElement>}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n gap={3}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n <PicturePlus\n aria-hidden\n width=\"3.2rem\"\n height=\"3.2rem\"\n fill={disabled ? 'neutral400' : 'primary600'}\n />\n <TextAlignTypography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor=\"neutral600\"\n style={{ textAlign: 'center' }}\n tag=\"span\"\n >\n {formatMessage({\n id: getTrad('mediaLibraryInput.placeholder'),\n defaultMessage: 'Click to add an asset or drag and drop one in this area',\n })}\n </TextAlignTypography>\n </Flex>\n );\n};\n"],"names":["TextAlignTypography","styled","Typography","EmptyStateAsset","disabled","onClick","onDropAsset","formatMessage","useIntl","dragOver","setDragOver","React","useState","handleDragEnter","e","preventDefault","handleDragLeave","currentTarget","contains","relatedTarget","handleDragOver","handleDrop","dataTransfer","files","assets","i","length","file","item","asset","rawFileToAsset","AssetSource","Computer","push","_jsxs","Flex","borderStyle","undefined","borderWidth","borderColor","direction","justifyContent","alignItems","height","width","tag","type","onDragEnter","onDragLeave","onDragOver","onDrop","gap","style","cursor","_jsx","PicturePlus","aria-hidden","fill","variant","fontWeight","textColor","textAlign","id","getTrad","defaultMessage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"EmptyStateAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle as PicturePlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetSource } from '../../../constants';\nimport { getTrad, rawFileToAsset } from '../../../utils';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\nconst TextAlignTypography = styled(Typography)`\n align-items: center;\n`;\n\ntype FileWithoutIdHash = Omit<File, 'id' | 'hash'>;\n\ninterface EmptyStateAssetProps {\n disabled?: boolean;\n onClick: (asset?: File, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDropAsset: (assets: FileWithoutIdHash[]) => void;\n}\n\nexport const EmptyStateAsset = ({\n disabled = false,\n onClick,\n onDropAsset,\n}: EmptyStateAssetProps) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = React.useState(false);\n\n const handleDragEnter = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLButtonElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setDragOver(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n };\n\n const handleDrop = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (e?.dataTransfer?.files) {\n const files = e.dataTransfer.files;\n const assets: FileWithoutIdHash[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n if (file) {\n const asset = rawFileToAsset(file, AssetSource.Computer);\n\n assets.push(asset);\n }\n }\n\n onDropAsset(assets);\n }\n\n setDragOver(false);\n };\n\n return (\n <Flex\n borderStyle={dragOver ? 'dashed' : undefined}\n borderWidth={dragOver ? '1px' : undefined}\n borderColor={dragOver ? 'primary600' : undefined}\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"100%\"\n width=\"100%\"\n tag=\"button\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick as unknown as React.MouseEventHandler<HTMLButtonElement>}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n gap={3}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n <PicturePlus\n aria-hidden\n width=\"3.2rem\"\n height=\"3.2rem\"\n fill={disabled ? 'neutral400' : 'primary600'}\n />\n <TextAlignTypography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor=\"neutral600\"\n style={{ textAlign: 'center' }}\n tag=\"span\"\n >\n {formatMessage({\n id: getTrad('mediaLibraryInput.placeholder'),\n defaultMessage: 'Click to add an asset or drag and drop one in this area',\n })}\n </TextAlignTypography>\n </Flex>\n );\n};\n"],"names":["TextAlignTypography","styled","Typography","EmptyStateAsset","disabled","onClick","onDropAsset","formatMessage","useIntl","dragOver","setDragOver","React","useState","handleDragEnter","e","preventDefault","handleDragLeave","currentTarget","contains","relatedTarget","handleDragOver","handleDrop","dataTransfer","files","assets","i","length","file","item","asset","rawFileToAsset","AssetSource","Computer","push","_jsxs","Flex","borderStyle","undefined","borderWidth","borderColor","direction","justifyContent","alignItems","height","width","tag","type","onDragEnter","onDragLeave","onDragOver","onDrop","gap","style","cursor","_jsx","PicturePlus","aria-hidden","fill","variant","fontWeight","textColor","textAlign","id","getTrad","defaultMessage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAMA,mBAAAA,GAAsBC,uBAAOC,CAAAA,uBAAAA,CAAW;;AAE9C,CAAC;AAUM,MAAMC,eAAkB,GAAA,CAAC,EAC9BC,QAAAA,GAAW,KAAK,EAChBC,OAAO,EACPC,WAAW,EACU,GAAA;IACrB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAE/C,IAAA,MAAMC,kBAAkB,CAACC,CAAAA,GAAAA;AACvBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;QAChBL,WAAY,CAAA,IAAA,CAAA;AACd,KAAA;AAEA,IAAA,MAAMM,kBAAkB,CAACF,CAAAA,GAAAA;QACvB,IAAI,CAACA,EAAEG,aAAa,CAACC,QAAQ,CAACJ,CAAAA,CAAEK,aAAa,CAAW,EAAA;YACtDT,WAAY,CAAA,KAAA,CAAA;AACd;AACF,KAAA;AAEA,IAAA,MAAMU,iBAAiB,CAACN,CAAAA,GAAAA;AACtBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAClB,KAAA;AAEA,IAAA,MAAMM,aAAa,CAACP,CAAAA,GAAAA;AAClBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;QAEhB,IAAID,CAAAA,EAAGQ,cAAcC,KAAO,EAAA;AAC1B,YAAA,MAAMA,KAAQT,GAAAA,CAAAA,CAAEQ,YAAY,CAACC,KAAK;AAClC,YAAA,MAAMC,SAA8B,EAAE;AAEtC,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIF,KAAMG,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;gBACrC,MAAME,IAAAA,GAAOJ,KAAMK,CAAAA,IAAI,CAACH,CAAAA,CAAAA;AACxB,gBAAA,IAAIE,IAAM,EAAA;AACR,oBAAA,MAAME,KAAQC,GAAAA,6BAAAA,CAAeH,IAAMI,EAAAA,qBAAAA,CAAYC,QAAQ,CAAA;AAEvDR,oBAAAA,MAAAA,CAAOS,IAAI,CAACJ,KAAAA,CAAAA;AACd;AACF;YAEAvB,WAAYkB,CAAAA,MAAAA,CAAAA;AACd;QAEAd,WAAY,CAAA,KAAA,CAAA;AACd,KAAA;AAEA,IAAA,qBACEwB,eAACC,CAAAA,iBAAAA,EAAAA;AACCC,QAAAA,WAAAA,EAAa3B,WAAW,QAAW4B,GAAAA,SAAAA;AACnCC,QAAAA,WAAAA,EAAa7B,WAAW,KAAQ4B,GAAAA,SAAAA;AAChCE,QAAAA,WAAAA,EAAa9B,WAAW,YAAe4B,GAAAA,SAAAA;QACvCG,SAAU,EAAA,QAAA;QACVC,cAAe,EAAA,QAAA;QACfC,UAAW,EAAA,QAAA;QACXC,MAAO,EAAA,MAAA;QACPC,KAAM,EAAA,MAAA;QACNC,GAAI,EAAA,QAAA;QACJC,IAAK,EAAA,QAAA;QACL1C,QAAUA,EAAAA,QAAAA;QACVC,OAASA,EAAAA,OAAAA;QACT0C,WAAalC,EAAAA,eAAAA;QACbmC,WAAahC,EAAAA,eAAAA;QACbiC,UAAY7B,EAAAA,cAAAA;QACZ8B,MAAQ7B,EAAAA,UAAAA;QACR8B,GAAK,EAAA,CAAA;QACLC,KAAO,EAAA;AAAEC,YAAAA,MAAAA,EAAQjD,WAAW,aAAgB,GAAA;AAAU,SAAA;;0BAEtDkD,cAACC,CAAAA,gBAAAA,EAAAA;gBACCC,aAAW,EAAA,IAAA;gBACXZ,KAAM,EAAA,QAAA;gBACND,MAAO,EAAA,QAAA;AACPc,gBAAAA,IAAAA,EAAMrD,WAAW,YAAe,GAAA;;0BAElCkD,cAACtD,CAAAA,mBAAAA,EAAAA;gBACC0D,OAAQ,EAAA,IAAA;gBACRC,UAAW,EAAA,MAAA;gBACXC,SAAU,EAAA,YAAA;gBACVR,KAAO,EAAA;oBAAES,SAAW,EAAA;AAAS,iBAAA;gBAC7BhB,GAAI,EAAA,MAAA;0BAEHtC,aAAc,CAAA;AACbuD,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,+BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;;;;AAIR;;;;"}
|
|
@@ -10,6 +10,7 @@ import 'date-fns';
|
|
|
10
10
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
11
11
|
import 'qs';
|
|
12
12
|
import { rawFileToAsset } from '../../../utils/rawFileToAsset.mjs';
|
|
13
|
+
import '../../../utils/typeFromMime.mjs';
|
|
13
14
|
import '../../../utils/urlYupSchema.mjs';
|
|
14
15
|
|
|
15
16
|
const TextAlignTypography = styled(Typography)`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyStateAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle as PicturePlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetSource } from '../../../constants';\nimport { getTrad, rawFileToAsset } from '../../../utils';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\nconst TextAlignTypography = styled(Typography)`\n align-items: center;\n`;\n\ntype FileWithoutIdHash = Omit<File, 'id' | 'hash'>;\n\ninterface EmptyStateAssetProps {\n disabled?: boolean;\n onClick: (asset?: File, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDropAsset: (assets: FileWithoutIdHash[]) => void;\n}\n\nexport const EmptyStateAsset = ({\n disabled = false,\n onClick,\n onDropAsset,\n}: EmptyStateAssetProps) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = React.useState(false);\n\n const handleDragEnter = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLButtonElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setDragOver(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n };\n\n const handleDrop = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (e?.dataTransfer?.files) {\n const files = e.dataTransfer.files;\n const assets: FileWithoutIdHash[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n if (file) {\n const asset = rawFileToAsset(file, AssetSource.Computer);\n\n assets.push(asset);\n }\n }\n\n onDropAsset(assets);\n }\n\n setDragOver(false);\n };\n\n return (\n <Flex\n borderStyle={dragOver ? 'dashed' : undefined}\n borderWidth={dragOver ? '1px' : undefined}\n borderColor={dragOver ? 'primary600' : undefined}\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"100%\"\n width=\"100%\"\n tag=\"button\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick as unknown as React.MouseEventHandler<HTMLButtonElement>}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n gap={3}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n <PicturePlus\n aria-hidden\n width=\"3.2rem\"\n height=\"3.2rem\"\n fill={disabled ? 'neutral400' : 'primary600'}\n />\n <TextAlignTypography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor=\"neutral600\"\n style={{ textAlign: 'center' }}\n tag=\"span\"\n >\n {formatMessage({\n id: getTrad('mediaLibraryInput.placeholder'),\n defaultMessage: 'Click to add an asset or drag and drop one in this area',\n })}\n </TextAlignTypography>\n </Flex>\n );\n};\n"],"names":["TextAlignTypography","styled","Typography","EmptyStateAsset","disabled","onClick","onDropAsset","formatMessage","useIntl","dragOver","setDragOver","React","useState","handleDragEnter","e","preventDefault","handleDragLeave","currentTarget","contains","relatedTarget","handleDragOver","handleDrop","dataTransfer","files","assets","i","length","file","item","asset","rawFileToAsset","AssetSource","Computer","push","_jsxs","Flex","borderStyle","undefined","borderWidth","borderColor","direction","justifyContent","alignItems","height","width","tag","type","onDragEnter","onDragLeave","onDragOver","onDrop","gap","style","cursor","_jsx","PicturePlus","aria-hidden","fill","variant","fontWeight","textColor","textAlign","id","getTrad","defaultMessage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"EmptyStateAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle as PicturePlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetSource } from '../../../constants';\nimport { getTrad, rawFileToAsset } from '../../../utils';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\nconst TextAlignTypography = styled(Typography)`\n align-items: center;\n`;\n\ntype FileWithoutIdHash = Omit<File, 'id' | 'hash'>;\n\ninterface EmptyStateAssetProps {\n disabled?: boolean;\n onClick: (asset?: File, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDropAsset: (assets: FileWithoutIdHash[]) => void;\n}\n\nexport const EmptyStateAsset = ({\n disabled = false,\n onClick,\n onDropAsset,\n}: EmptyStateAssetProps) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = React.useState(false);\n\n const handleDragEnter = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLButtonElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setDragOver(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n };\n\n const handleDrop = (e: React.DragEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (e?.dataTransfer?.files) {\n const files = e.dataTransfer.files;\n const assets: FileWithoutIdHash[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n if (file) {\n const asset = rawFileToAsset(file, AssetSource.Computer);\n\n assets.push(asset);\n }\n }\n\n onDropAsset(assets);\n }\n\n setDragOver(false);\n };\n\n return (\n <Flex\n borderStyle={dragOver ? 'dashed' : undefined}\n borderWidth={dragOver ? '1px' : undefined}\n borderColor={dragOver ? 'primary600' : undefined}\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"100%\"\n width=\"100%\"\n tag=\"button\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick as unknown as React.MouseEventHandler<HTMLButtonElement>}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n gap={3}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n <PicturePlus\n aria-hidden\n width=\"3.2rem\"\n height=\"3.2rem\"\n fill={disabled ? 'neutral400' : 'primary600'}\n />\n <TextAlignTypography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor=\"neutral600\"\n style={{ textAlign: 'center' }}\n tag=\"span\"\n >\n {formatMessage({\n id: getTrad('mediaLibraryInput.placeholder'),\n defaultMessage: 'Click to add an asset or drag and drop one in this area',\n })}\n </TextAlignTypography>\n </Flex>\n );\n};\n"],"names":["TextAlignTypography","styled","Typography","EmptyStateAsset","disabled","onClick","onDropAsset","formatMessage","useIntl","dragOver","setDragOver","React","useState","handleDragEnter","e","preventDefault","handleDragLeave","currentTarget","contains","relatedTarget","handleDragOver","handleDrop","dataTransfer","files","assets","i","length","file","item","asset","rawFileToAsset","AssetSource","Computer","push","_jsxs","Flex","borderStyle","undefined","borderWidth","borderColor","direction","justifyContent","alignItems","height","width","tag","type","onDragEnter","onDragLeave","onDragOver","onDrop","gap","style","cursor","_jsx","PicturePlus","aria-hidden","fill","variant","fontWeight","textColor","textAlign","id","getTrad","defaultMessage"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ require('date-fns');
|
|
|
9
9
|
var getAllowedFiles = require('../../utils/getAllowedFiles.js');
|
|
10
10
|
var getTrad = require('../../utils/getTrad.js');
|
|
11
11
|
require('qs');
|
|
12
|
-
require('../../
|
|
12
|
+
require('../../utils/typeFromMime.js');
|
|
13
13
|
require('../../utils/urlYupSchema.js');
|
|
14
14
|
var AssetDialog = require('../AssetDialog/AssetDialog.js');
|
|
15
15
|
var EditFolderDialog = require('../EditFolderDialog/EditFolderDialog.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryInput.js","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = null, multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: (allowedTypes ?? []).join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles as AllowedFiles[]);\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={allowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAgBA,MAAMA,KAAQ,GAAA;IACZC,WAAa,EAAA,aAAA;IACbC,WAAa,EAAA,aAAA;IACbC,YAAc,EAAA;AAChB,CAAA;AAeaC,MAAAA,iBAAAA,iBAAoBC,gBAAMC,CAAAA,UAAU,CAC/C,CACE,EACEC,SAAW,EAAA,EAAEC,eAAe,IAAI,EAAEC,QAAW,GAAA,KAAK,EAAE,GAAG,EAAE,EACzDC,KAAK,EACLC,IAAI,EACJC,WAAW,KAAK,EAChBC,WAAcC,GAAAA,SAAS,EACvBC,IAAI,EACJC,QAAW,GAAA,KAAK,EACjB,EACDC,YAAAA,GAAAA;IAEA,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGC,oBAASR,CAAAA,IAAAA,CAAAA;AAC5C,IAAA,MAAM,CAACS,aAAeC,EAAAA,gBAAAA,CAAiB,GAAGpB,gBAAMqB,CAAAA,QAAQ,CAAmB,EAAE,CAAA;AAC7E,IAAA,MAAM,CAACC,IAAMC,EAAAA,OAAAA,CAAQ,GAAGvB,gBAAAA,CAAMqB,QAAQ,CAAqBZ,SAAAA,CAAAA;AAC3D,IAAA,MAAM,CAACe,aAAeC,EAAAA,gBAAAA,CAAiB,GAAGzB,gBAAAA,CAAMqB,QAAQ,CAAC,CAAA,CAAA;AACzD,IAAA,MAAM,CAACK,aAAAA,EAAeC,gBAAiB,CAAA,GAAG3B,iBAAMqB,QAAQ,EAAA;AACxD,IAAA,MAAM,CAACO,QAAUC,EAAAA,WAAAA,CAAY,GAAG7B,gBAAAA,CAAMqB,QAAQ,CAAgB,IAAA,CAAA;IAC9D,MAAM,EAAES,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAE/B/B,IAAAA,gBAAAA,CAAMgC,SAAS,CAAC,IAAA;;AAEd,QAAA,IAAIV,SAASb,SAAW,EAAA;AACtBW,YAAAA,gBAAAA,CAAiB,EAAE,CAAA;AACrB;KACC,EAAA;AAACE,QAAAA;AAAK,KAAA,CAAA;AAET,IAAA,IAAIW,iBAAyB,EAAE;IAE/B,IAAIC,KAAAA,CAAMC,OAAO,CAACnB,KAAQ,CAAA,EAAA;QACxBiB,cAAiBjB,GAAAA,KAAAA;AACnB,KAAA,MAAO,IAAIA,KAAO,EAAA;QAChBiB,cAAiB,GAAA;AAACjB,YAAAA;AAAM,SAAA;AAC1B;AAEA,IAAA,MAAMoB,mBAAmB,CAACC,kBAAAA,GAAAA;AACxB,QAAA,MAAMrB,KAAQZ,GAAAA,QAAAA,GAAWiC,kBAAqBA,GAAAA,kBAAkB,CAAC,CAAE,CAAA;AACnEtB,QAAAA,QAAAA,CAASL,IAAMM,EAAAA,KAAAA,CAAAA;QACfO,OAAQd,CAAAA,SAAAA,CAAAA;AACV,KAAA;AAEA,IAAA,MAAM6B,iCAAoC,GAAA,IAAA;QACxC,IAAIC,SAAAA;AAEJ,QAAA,IAAInC,QAAU,EAAA;AACZ,YAAA,MAAMiC,qBAAqBJ,cAAeO,CAAAA,MAAM,CAC9C,CAACC,CAAAA,EAAGC,aAAeA,UAAelB,KAAAA,aAAAA,CAAAA;AAEpCe,YAAAA,SAAAA,GAAYF,kBAAmBM,CAAAA,MAAM,GAAG,CAAA,GAAIN,kBAAqB,GAAA,IAAA;SAC5D,MAAA;YACLE,SAAY,GAAA,IAAA;AACd;AAEA,QAAA,MAAMvB,KAAQuB,GAAAA,SAAAA;AACdxB,QAAAA,QAAAA,CAASL,IAAMM,EAAAA,KAAAA,CAAAA;QAEfS,gBAAiB,CAAA,CAAA,CAAA;AACnB,KAAA;AAEA,IAAA,MAAMmB,oBAAoB,CAACC,KAAAA,GAAAA;QACzB,IAAIN,SAAAA;AAEJ,QAAA,IAAInC,QAAU,EAAA;YACZ,MAAMiC,kBAAAA,GAAqBJ,cAAeO,CAAAA,MAAM,CAAC,CAACM,YAAcA,SAAUC,CAAAA,EAAE,KAAKF,KAAAA,CAAME,EAAE,CAAA;AAEzFR,YAAAA,SAAAA,GAAYF,kBAAmBM,CAAAA,MAAM,GAAG,CAAA,GAAIN,kBAAqB,GAAA,IAAA;SAC5D,MAAA;YACLE,SAAY,GAAA,IAAA;AACd;AAEAxB,QAAAA,QAAAA,CAASL,IAAM6B,EAAAA,SAAAA,CAAAA;QAEfd,gBAAiB,CAAA,CAAA,CAAA;AACnB,KAAA;AAEA,IAAA,MAAMuB,kBAAkB,CAACH,KAAAA,GAAAA;AACvB,QAAA,MAAMR,kBAAqBJ,GAAAA,cAAAA,CAAegB,GAAG,CAAC,CAACH,SAAAA,GAC7CA,SAAUC,CAAAA,EAAE,KAAKF,KAAAA,CAAME,EAAE,GAAGF,KAAQC,GAAAA,SAAAA,CAAAA;AAGtC/B,QAAAA,QAAAA,CAASL,IAAMN,EAAAA,QAAAA,GAAWiC,kBAAqBA,GAAAA,kBAAkB,CAAC,CAAE,CAAA,CAAA;AACtE,KAAA;IAEA,MAAMa,mBAAAA,GAAsB,CAC1BC,MACAC,EAAAA,QAAAA,GAAAA;QAEA,MAAMC,aAAAA,GAAgBC,gCAAgBnD,YAAcgD,EAAAA,MAAAA,CAAAA;QAEpD,IAAIE,aAAAA,CAAcV,MAAM,GAAG,CAAG,EAAA;YAC5BS,QAASC,CAAAA,aAAAA,CAAAA;SACJ,MAAA;YACLvB,kBAAmB,CAAA;gBACjByB,IAAM,EAAA,QAAA;gBACNC,OAAS,EAAA,IAAA;AACTC,gBAAAA,OAAAA,EAAS5C,aACP,CAAA;AACEkC,oBAAAA,EAAAA,EAAIW,eAAQ,CAAA,kCAAA,CAAA;oBACZC,cAAgB,EAAA,CAAC,mCAAmC;iBAEtD,EAAA;AACEC,oBAAAA,SAAAA,EAAW,CAACzD,YAAAA,IAAgB,EAAE,EAAE0D,IAAI,CAAC,GAAA;AACvC,iBAAA;AAEJ,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMC,kBAAkB,CAACX,MAAAA,GAAAA;AACvBD,QAAAA,mBAAAA,CAAoBC,QAAQ,CAACE,aAAAA,GAAAA;YAC3B1B,gBAAiB0B,CAAAA,aAAAA,CAAAA;AACjB9B,YAAAA,OAAAA,CAAQ5B,MAAME,WAAW,CAAA;AAC3B,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,IAAIO,QAAY6B,IAAAA,cAAAA,CAAeU,MAAM,GAAG,CAAG,EAAA;AACzCtC,QAAAA,KAAAA,GAAQ,CAAC,EAAEA,KAAM,CAAA,EAAE,EAAEmB,aAAAA,GAAgB,CAAE,CAAA,GAAG,EAAES,cAAAA,CAAeU,MAAM,CAAC,CAAC,CAAC;AACtE;AAEA,IAAA,MAAMoB,UAAa,GAAA,IAAA;QACjBtC,gBAAiB,CAAA,CAACuC,UAAaA,OAAU/B,GAAAA,cAAAA,CAAeU,MAAM,GAAG,CAAA,GAAIqB,UAAU,CAAI,GAAA,CAAA,CAAA;AACrF,KAAA;AAEA,IAAA,MAAMC,cAAiB,GAAA,IAAA;QACrBxC,gBAAiB,CAAA,CAACuC,UAAaA,OAAU,GAAA,CAAA,GAAIA,UAAU,CAAI/B,GAAAA,cAAAA,CAAeU,MAAM,GAAG,CAAA,CAAA;AACrF,KAAA;AAEA,IAAA,MAAMuB,6BAA6B,CAAC/C,aAAAA,GAAAA;AAClCC,QAAAA,gBAAAA,CAAiB,CAAC+C,IAAS,GAAA;AAAIA,gBAAAA,GAAAA,IAAAA;AAAShD,gBAAAA,GAAAA;AAAc,aAAA,CAAA;AACxD,KAAA;AAEA,IAAA,IAAIiD,uBAA0BnC,GAAAA,cAAAA;IAE9B,IAAId,aAAAA,CAAcwB,MAAM,GAAG,CAAG,EAAA;QAC5B,MAAM0B,oBAAAA,GAAuBf,gCAAgBnD,YAAcgB,EAAAA,aAAAA,CAAAA;AAE3DiD,QAAAA,uBAAAA,GAA0BhE,QACtB,GAAA;AAAIiE,YAAAA,GAAAA,oBAAAA;AAAyBpC,YAAAA,GAAAA;SAAe,GAC5C;AAACoC,YAAAA,oBAAoB,CAAC,CAAE;AAAC,SAAA;AAC/B;IAEA,qBACEC,eAAA,CAAAC,mBAAA,EAAA;;0BACEC,cAACC,CAAAA,6BAAAA,EAAAA;gBACCC,GAAK9D,EAAAA,YAAAA;gBACLuC,MAAQlB,EAAAA,cAAAA;gBACR1B,QAAUA,EAAAA,QAAAA;gBACVF,KAAOA,EAAAA,KAAAA;gBACPG,WAAaA,EAAAA,WAAAA;gBACbmE,aAAe/B,EAAAA,iBAAAA;gBACfgC,6BAA+BtC,EAAAA,iCAAAA;gBAC/BuC,UAAY,EAAA,IAAMtD,OAAQ5B,CAAAA,KAAAA,CAAMC,WAAW,CAAA;gBAC3CkF,WAAahB,EAAAA,eAAAA;gBACbiB,WAAa/B,EAAAA,eAAAA;gBACbgC,MAAQjB,EAAAA,UAAAA;gBACRkB,UAAYhB,EAAAA,cAAAA;gBACZhD,KAAOA,EAAAA,KAAAA;gBACPX,IAAMA,EAAAA,IAAAA;gBACNK,QAAUA,EAAAA,QAAAA;gBACVuE,kBAAoB1D,EAAAA,aAAAA;gBACpB2D,eAAgB,EAAA;;YAGjB7D,IAAS3B,KAAAA,KAAAA,CAAMC,WAAW,kBACzB4E,cAACY,CAAAA,uBAAAA,EAAAA;gBACCjF,YAAcA,EAAAA,YAAAA;gBACdiE,uBAAyBA,EAAAA,uBAAAA;gBACzBxC,QAAUA,EAAAA,QAAAA;gBACVyD,OAAS,EAAA,IAAA;oBACP9D,OAAQd,CAAAA,SAAAA,CAAAA;oBACRoB,WAAY,CAAA,IAAA,CAAA;AACd,iBAAA;gBACAyD,IAAMhE,EAAAA,IAAAA,KAAS3B,MAAMC,WAAW;gBAChC2F,UAAYnD,EAAAA,gBAAAA;gBACZhC,QAAUA,EAAAA,QAAAA;gBACVyE,UAAY,EAAA,IAAMtD,OAAQ5B,CAAAA,KAAAA,CAAME,WAAW,CAAA;gBAC3C2F,WAAa,EAAA,IAAMjE,OAAQ5B,CAAAA,KAAAA,CAAMG,YAAY,CAAA;gBAC7C2F,cAAgB,EAAA,CAACC,SAAW7D,WAAY6D,CAAAA,MAAAA,CAAAA;gBACxCP,eAAgB,EAAA;;YAInB7D,IAAS3B,KAAAA,KAAAA,CAAME,WAAW,kBACzB2E,cAACmB,CAAAA,mCAAAA,EAAAA;gBACCL,IAAMhE,EAAAA,IAAAA,KAAS3B,MAAME,WAAW;gBAChCwF,OAAS,EAAA,IAAM9D,OAAQ5B,CAAAA,KAAAA,CAAMC,WAAW,CAAA;gBACxCgG,kBAAoBlE,EAAAA,aAAAA;gBACpBmE,gBAAkB3B,EAAAA,0BAAAA;gBAClBiB,eAAgB,EAAA,iBAAA;gBAChBvD,QAAUA,EAAAA,QAAAA;gBACVsB,mBAAqBA,EAAAA;;YAIxB5B,IAAS3B,KAAAA,KAAAA,CAAMG,YAAY,kBAC1B0E,cAACsB,CAAAA,iCAAAA,EAAAA;gBACCR,IAAMhE,EAAAA,IAAAA,KAAS3B,MAAMG,YAAY;gBACjCuF,OAAS,EAAA,IAAM9D,OAAQ5B,CAAAA,KAAAA,CAAMC,WAAW,CAAA;gBACxCmG,cAAgBnE,EAAAA;;;;AAK1B,CACA;;;;"}
|
|
1
|
+
{"version":3,"file":"MediaLibraryInput.js","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = null, multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: (allowedTypes ?? []).join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles as AllowedFiles[]);\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={allowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import 'date-fns';
|
|
|
7
7
|
import { getAllowedFiles } from '../../utils/getAllowedFiles.mjs';
|
|
8
8
|
import { getTrad } from '../../utils/getTrad.mjs';
|
|
9
9
|
import 'qs';
|
|
10
|
-
import '../../
|
|
10
|
+
import '../../utils/typeFromMime.mjs';
|
|
11
11
|
import '../../utils/urlYupSchema.mjs';
|
|
12
12
|
import { AssetDialog } from '../AssetDialog/AssetDialog.mjs';
|
|
13
13
|
import { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryInput.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = null, multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: (allowedTypes ?? []).join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles as AllowedFiles[]);\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={allowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MediaLibraryInput.mjs","sources":["../../../../admin/src/components/MediaLibraryInput/MediaLibraryInput.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { useField, useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getAllowedFiles, AllowedFiles } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { UploadAssetDialog, Asset } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../shared/contracts/files';\ntype AllowedTypes = 'files' | 'images' | 'videos' | 'audios';\n\nconst STEPS = {\n AssetSelect: 'SelectAsset',\n AssetUpload: 'UploadAsset',\n FolderCreate: 'FolderCreate',\n};\n\nexport interface MediaLibraryInputProps {\n required?: boolean;\n name: string;\n labelAction?: React.ReactNode;\n label?: string;\n hint?: string;\n disabled?: boolean;\n attribute?: {\n allowedTypes?: AllowedTypes[];\n multiple?: boolean;\n };\n}\n\nexport const MediaLibraryInput = React.forwardRef<CarouselAssetsProps, MediaLibraryInputProps>(\n (\n {\n attribute: { allowedTypes = null, multiple = false } = {},\n label,\n hint,\n disabled = false,\n labelAction = undefined,\n name,\n required = false,\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const { onChange, value, error } = useField(name);\n const [uploadedFiles, setUploadedFiles] = React.useState<Asset[] | File[]>([]);\n const [step, setStep] = React.useState<string | undefined>(undefined);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [droppedAssets, setDroppedAssets] = React.useState<AllowedFiles[]>();\n const [folderId, setFolderId] = React.useState<number | null>(null);\n const { toggleNotification } = useNotification();\n\n React.useEffect(() => {\n // Clear the uploaded files on close\n if (step === undefined) {\n setUploadedFiles([]);\n }\n }, [step]);\n\n let selectedAssets: File[] = [];\n\n if (Array.isArray(value)) {\n selectedAssets = value;\n } else if (value) {\n selectedAssets = [value];\n }\n\n const handleValidation = (nextSelectedAssets: File[]) => {\n const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];\n onChange(name, value);\n setStep(undefined);\n };\n\n const handleDeleteAssetFromMediaLibrary = () => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter(\n (_, assetIndex) => assetIndex !== selectedIndex\n );\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n const value = nextValue;\n onChange(name, value);\n\n setSelectedIndex(0);\n };\n\n const handleDeleteAsset = (asset: File) => {\n let nextValue;\n\n if (multiple) {\n const nextSelectedAssets = selectedAssets.filter((prevAsset) => prevAsset.id !== asset.id);\n\n nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;\n } else {\n nextValue = null;\n }\n\n onChange(name, nextValue);\n\n setSelectedIndex(0);\n };\n\n const handleAssetEdit = (asset: File) => {\n const nextSelectedAssets = selectedAssets.map((prevAsset) =>\n prevAsset.id === asset.id ? asset : prevAsset\n );\n\n onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);\n };\n\n const validateAssetsTypes = (\n assets: FileWithoutIdHash[] | Asset[],\n callback: (assets?: AllowedFiles[], error?: string) => void\n ) => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (allowedAssets.length > 0) {\n callback(allowedAssets);\n } else {\n toggleNotification({\n type: 'danger',\n timeout: 4000,\n message: formatMessage(\n {\n id: getTrad('input.notification.not-supported'),\n defaultMessage: `You can't upload this type of file.`,\n },\n {\n fileTypes: (allowedTypes ?? []).join(','),\n }\n ),\n });\n }\n };\n\n const handleAssetDrop = (assets: FileWithoutIdHash[]) => {\n validateAssetsTypes(assets, (allowedAssets?: AllowedFiles[]) => {\n setDroppedAssets(allowedAssets);\n setStep(STEPS.AssetUpload);\n });\n };\n\n if (multiple && selectedAssets.length > 0) {\n label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;\n }\n\n const handleNext = () => {\n setSelectedIndex((current) => (current < selectedAssets.length - 1 ? current + 1 : 0));\n };\n\n const handlePrevious = () => {\n setSelectedIndex((current) => (current > 0 ? current - 1 : selectedAssets.length - 1));\n };\n\n const handleFilesUploadSucceeded = (uploadedFiles: Asset[] | File[]) => {\n setUploadedFiles((prev) => [...prev, ...uploadedFiles]);\n };\n\n let initiallySelectedAssets = selectedAssets;\n\n if (uploadedFiles.length > 0) {\n const allowedUploadedFiles = getAllowedFiles(allowedTypes, uploadedFiles as AllowedFiles[]);\n\n initiallySelectedAssets = multiple\n ? [...allowedUploadedFiles, ...selectedAssets]\n : [allowedUploadedFiles[0]];\n }\n\n return (\n <>\n <CarouselAssets\n ref={forwardedRef}\n assets={selectedAssets}\n disabled={disabled}\n label={label!}\n labelAction={labelAction}\n onDeleteAsset={handleDeleteAsset}\n onDeleteAssetFromMediaLibrary={handleDeleteAssetFromMediaLibrary}\n onAddAsset={() => setStep(STEPS.AssetSelect)}\n onDropAsset={handleAssetDrop}\n onEditAsset={handleAssetEdit}\n onNext={handleNext}\n onPrevious={handlePrevious}\n error={error}\n hint={hint}\n required={required}\n selectedAssetIndex={selectedIndex}\n trackedLocation=\"content-manager\"\n />\n\n {step === STEPS.AssetSelect && (\n <AssetDialog\n allowedTypes={allowedTypes as AllowedTypes[]}\n initiallySelectedAssets={initiallySelectedAssets}\n folderId={folderId}\n onClose={() => {\n setStep(undefined);\n setFolderId(null);\n }}\n open={step === STEPS.AssetSelect}\n onValidate={handleValidation}\n multiple={multiple}\n onAddAsset={() => setStep(STEPS.AssetUpload)}\n onAddFolder={() => setStep(STEPS.FolderCreate)}\n onChangeFolder={(folder) => setFolderId(folder)}\n trackedLocation=\"content-manager\"\n />\n )}\n\n {step === STEPS.AssetUpload && (\n <UploadAssetDialog\n open={step === STEPS.AssetUpload}\n onClose={() => setStep(STEPS.AssetSelect)}\n initialAssetsToAdd={droppedAssets as Asset[]}\n addUploadedFiles={handleFilesUploadSucceeded}\n trackedLocation=\"content-manager\"\n folderId={folderId}\n validateAssetsTypes={validateAssetsTypes}\n />\n )}\n\n {step === STEPS.FolderCreate && (\n <EditFolderDialog\n open={step === STEPS.FolderCreate}\n onClose={() => setStep(STEPS.AssetSelect)}\n parentFolderId={folderId}\n />\n )}\n </>\n );\n }\n);\n"],"names":["STEPS","AssetSelect","AssetUpload","FolderCreate","MediaLibraryInput","React","forwardRef","attribute","allowedTypes","multiple","label","hint","disabled","labelAction","undefined","name","required","forwardedRef","formatMessage","useIntl","onChange","value","error","useField","uploadedFiles","setUploadedFiles","useState","step","setStep","selectedIndex","setSelectedIndex","droppedAssets","setDroppedAssets","folderId","setFolderId","toggleNotification","useNotification","useEffect","selectedAssets","Array","isArray","handleValidation","nextSelectedAssets","handleDeleteAssetFromMediaLibrary","nextValue","filter","_","assetIndex","length","handleDeleteAsset","asset","prevAsset","id","handleAssetEdit","map","validateAssetsTypes","assets","callback","allowedAssets","getAllowedFiles","type","timeout","message","getTrad","defaultMessage","fileTypes","join","handleAssetDrop","handleNext","current","handlePrevious","handleFilesUploadSucceeded","prev","initiallySelectedAssets","allowedUploadedFiles","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.js","sources":["../../../../admin/src/components/SelectTree/Option.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { components, OptionProps as ReactSelectOptionProps } from 'react-select';\nimport { styled } from 'styled-components';\n\nimport type { Folder } from '../../../../shared/contracts/folders';\n\nconst ToggleButton = styled(Flex)`\n align-self: flex-end;\n height: 2.2rem;\n width: 2.8rem;\n\n &:hover,\n &:focus {\n background-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\ninterface SelectProps {\n maxDisplayDepth: number;\n openValues: string[];\n onOptionToggle: (value: string) => void;\n}\n\ninterface FolderWithDepth extends Folder {\n depth: number;\n value: string;\n}\n\ninterface OptionProps extends ReactSelectOptionProps<FolderWithDepth, false> {\n selectProps: SelectProps & ReactSelectOptionProps<FolderWithDepth, false>['selectProps'];\n}\n\nexport const Option = ({ children, data, selectProps, ...props }: OptionProps) => {\n const { formatMessage } = useIntl();\n const { depth, value, children: options } = data;\n const { maxDisplayDepth, openValues, onOptionToggle } = selectProps;\n const isOpen = openValues.includes(value);\n\n const Icon = isOpen ? ChevronUp : ChevronDown;\n\n return (\n <components.Option data={data} selectProps={selectProps} {...props}>\n <Flex alignItems=\"start\">\n <Typography textColor=\"neutral800\" ellipsis>\n <span style={{ paddingLeft: `${Math.min(depth, maxDisplayDepth) * 14}px` }}>\n {children}\n </span>\n </Typography>\n\n {options && options?.length > 0 && (\n <ToggleButton\n aria-label={formatMessage({\n id: 'app.utils.toggle',\n defaultMessage: 'Toggle',\n })}\n tag=\"button\"\n alignItems=\"center\"\n hasRadius\n justifyContent=\"center\"\n marginLeft=\"auto\"\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n onOptionToggle(value);\n }}\n >\n <Icon width=\"1.4rem\" fill=\"neutral500\" />\n </ToggleButton>\n )}\n </Flex>\n </components.Option>\n );\n};\n"],"names":["ToggleButton","styled","Flex","theme","colors","primary200","Option","children","data","selectProps","props","formatMessage","useIntl","depth","value","options","maxDisplayDepth","openValues","onOptionToggle","isOpen","includes","Icon","ChevronUp","ChevronDown","_jsx","components","_jsxs","alignItems","Typography","textColor","ellipsis","span","style","paddingLeft","Math","min","length","aria-label","id","defaultMessage","tag","hasRadius","justifyContent","marginLeft","onClick","event","preventDefault","stopPropagation","width","fill"],"mappings":";;;;;;;;;;AAUA,MAAMA,YAAAA,GAAeC,uBAAOC,CAAAA,iBAAAA,CAAK;;;;;;;sBAOX,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE/D,CAAC;AAiBM,MAAMC,MAAS,GAAA,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,KAAoB,EAAA,GAAA;IAC3E,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEP,QAAUQ,EAAAA,OAAO,EAAE,GAAGP,IAAAA;AAC5C,IAAA,MAAM,EAAEQ,eAAe,EAAEC,UAAU,EAAEC,cAAc,EAAE,GAAGT,WAAAA;IACxD,MAAMU,MAAAA,GAASF,UAAWG,CAAAA,QAAQ,CAACN,KAAAA,CAAAA;IAEnC,MAAMO,IAAAA,GAAOF,SAASG,eAAYC,GAAAA,iBAAAA;IAElC,qBACEC,cAAA,CAACC,uBAAWnB,MAAM,EAAA;QAACE,IAAMA,EAAAA,IAAAA;QAAMC,WAAaA,EAAAA,WAAAA;AAAc,QAAA,GAAGC,KAAK;AAChE,QAAA,QAAA,gBAAAgB,eAACxB,CAAAA,iBAAAA,EAAAA;YAAKyB,UAAW,EAAA,OAAA;;8BACfH,cAACI,CAAAA,uBAAAA,EAAAA;oBAAWC,SAAU,EAAA,YAAA;oBAAaC,QAAQ,EAAA,IAAA;AACzC,oBAAA,QAAA,gBAAAN,cAACO,CAAAA,MAAAA,EAAAA;wBAAKC,KAAO,EAAA;4BAAEC,WAAa,EAAA,
|
|
1
|
+
{"version":3,"file":"Option.js","sources":["../../../../admin/src/components/SelectTree/Option.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { components, OptionProps as ReactSelectOptionProps } from 'react-select';\nimport { styled } from 'styled-components';\n\nimport type { Folder } from '../../../../shared/contracts/folders';\n\nconst ToggleButton = styled(Flex)`\n align-self: flex-end;\n height: 2.2rem;\n width: 2.8rem;\n\n &:hover,\n &:focus {\n background-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\ninterface SelectProps {\n maxDisplayDepth: number;\n openValues: string[];\n onOptionToggle: (value: string) => void;\n}\n\ninterface FolderWithDepth extends Folder {\n depth: number;\n value: string;\n}\n\ninterface OptionProps extends ReactSelectOptionProps<FolderWithDepth, false> {\n selectProps: SelectProps & ReactSelectOptionProps<FolderWithDepth, false>['selectProps'];\n}\n\nexport const Option = ({ children, data, selectProps, ...props }: OptionProps) => {\n const { formatMessage } = useIntl();\n const { depth, value, children: options } = data;\n const { maxDisplayDepth, openValues, onOptionToggle } = selectProps;\n const isOpen = openValues.includes(value);\n\n const Icon = isOpen ? ChevronUp : ChevronDown;\n\n return (\n <components.Option data={data} selectProps={selectProps} {...props}>\n <Flex alignItems=\"start\">\n <Typography textColor=\"neutral800\" ellipsis>\n <span style={{ paddingLeft: `${Math.min(depth, maxDisplayDepth) * 14}px` }}>\n {children}\n </span>\n </Typography>\n\n {options && options?.length > 0 && (\n <ToggleButton\n aria-label={formatMessage({\n id: 'app.utils.toggle',\n defaultMessage: 'Toggle',\n })}\n tag=\"button\"\n alignItems=\"center\"\n hasRadius\n justifyContent=\"center\"\n marginLeft=\"auto\"\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n onOptionToggle(value);\n }}\n >\n <Icon width=\"1.4rem\" fill=\"neutral500\" />\n </ToggleButton>\n )}\n </Flex>\n </components.Option>\n );\n};\n"],"names":["ToggleButton","styled","Flex","theme","colors","primary200","Option","children","data","selectProps","props","formatMessage","useIntl","depth","value","options","maxDisplayDepth","openValues","onOptionToggle","isOpen","includes","Icon","ChevronUp","ChevronDown","_jsx","components","_jsxs","alignItems","Typography","textColor","ellipsis","span","style","paddingLeft","Math","min","length","aria-label","id","defaultMessage","tag","hasRadius","justifyContent","marginLeft","onClick","event","preventDefault","stopPropagation","width","fill"],"mappings":";;;;;;;;;;AAUA,MAAMA,YAAAA,GAAeC,uBAAOC,CAAAA,iBAAAA,CAAK;;;;;;;sBAOX,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE/D,CAAC;AAiBM,MAAMC,MAAS,GAAA,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,KAAoB,EAAA,GAAA;IAC3E,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEP,QAAUQ,EAAAA,OAAO,EAAE,GAAGP,IAAAA;AAC5C,IAAA,MAAM,EAAEQ,eAAe,EAAEC,UAAU,EAAEC,cAAc,EAAE,GAAGT,WAAAA;IACxD,MAAMU,MAAAA,GAASF,UAAWG,CAAAA,QAAQ,CAACN,KAAAA,CAAAA;IAEnC,MAAMO,IAAAA,GAAOF,SAASG,eAAYC,GAAAA,iBAAAA;IAElC,qBACEC,cAAA,CAACC,uBAAWnB,MAAM,EAAA;QAACE,IAAMA,EAAAA,IAAAA;QAAMC,WAAaA,EAAAA,WAAAA;AAAc,QAAA,GAAGC,KAAK;AAChE,QAAA,QAAA,gBAAAgB,eAACxB,CAAAA,iBAAAA,EAAAA;YAAKyB,UAAW,EAAA,OAAA;;8BACfH,cAACI,CAAAA,uBAAAA,EAAAA;oBAAWC,SAAU,EAAA,YAAA;oBAAaC,QAAQ,EAAA,IAAA;AACzC,oBAAA,QAAA,gBAAAN,cAACO,CAAAA,MAAAA,EAAAA;wBAAKC,KAAO,EAAA;4BAAEC,WAAa,EAAA,CAAA,EAAGC,KAAKC,GAAG,CAACtB,OAAOG,eAAmB,CAAA,GAAA,EAAA,CAAG,EAAE;AAAE,yBAAA;AACtET,wBAAAA,QAAAA,EAAAA;;;gBAIJQ,OAAWA,IAAAA,OAAAA,EAASqB,MAAS,GAAA,CAAA,kBAC5BZ,cAACxB,CAAAA,YAAAA,EAAAA;AACCqC,oBAAAA,YAAAA,EAAY1B,aAAc,CAAA;wBACxB2B,EAAI,EAAA,kBAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAC,GAAI,EAAA,QAAA;oBACJb,UAAW,EAAA,QAAA;oBACXc,SAAS,EAAA,IAAA;oBACTC,cAAe,EAAA,QAAA;oBACfC,UAAW,EAAA,MAAA;AACXC,oBAAAA,OAAAA,EAAS,CAACC,KAAAA,GAAAA;AACRA,wBAAAA,KAAAA,CAAMC,cAAc,EAAA;AACpBD,wBAAAA,KAAAA,CAAME,eAAe,EAAA;wBAErB7B,cAAeJ,CAAAA,KAAAA,CAAAA;AACjB,qBAAA;AAEA,oBAAA,QAAA,gBAAAU,cAACH,CAAAA,IAAAA,EAAAA;wBAAK2B,KAAM,EAAA,QAAA;wBAASC,IAAK,EAAA;;;;;;AAMtC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.mjs","sources":["../../../../admin/src/components/SelectTree/Option.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { components, OptionProps as ReactSelectOptionProps } from 'react-select';\nimport { styled } from 'styled-components';\n\nimport type { Folder } from '../../../../shared/contracts/folders';\n\nconst ToggleButton = styled(Flex)`\n align-self: flex-end;\n height: 2.2rem;\n width: 2.8rem;\n\n &:hover,\n &:focus {\n background-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\ninterface SelectProps {\n maxDisplayDepth: number;\n openValues: string[];\n onOptionToggle: (value: string) => void;\n}\n\ninterface FolderWithDepth extends Folder {\n depth: number;\n value: string;\n}\n\ninterface OptionProps extends ReactSelectOptionProps<FolderWithDepth, false> {\n selectProps: SelectProps & ReactSelectOptionProps<FolderWithDepth, false>['selectProps'];\n}\n\nexport const Option = ({ children, data, selectProps, ...props }: OptionProps) => {\n const { formatMessage } = useIntl();\n const { depth, value, children: options } = data;\n const { maxDisplayDepth, openValues, onOptionToggle } = selectProps;\n const isOpen = openValues.includes(value);\n\n const Icon = isOpen ? ChevronUp : ChevronDown;\n\n return (\n <components.Option data={data} selectProps={selectProps} {...props}>\n <Flex alignItems=\"start\">\n <Typography textColor=\"neutral800\" ellipsis>\n <span style={{ paddingLeft: `${Math.min(depth, maxDisplayDepth) * 14}px` }}>\n {children}\n </span>\n </Typography>\n\n {options && options?.length > 0 && (\n <ToggleButton\n aria-label={formatMessage({\n id: 'app.utils.toggle',\n defaultMessage: 'Toggle',\n })}\n tag=\"button\"\n alignItems=\"center\"\n hasRadius\n justifyContent=\"center\"\n marginLeft=\"auto\"\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n onOptionToggle(value);\n }}\n >\n <Icon width=\"1.4rem\" fill=\"neutral500\" />\n </ToggleButton>\n )}\n </Flex>\n </components.Option>\n );\n};\n"],"names":["ToggleButton","styled","Flex","theme","colors","primary200","Option","children","data","selectProps","props","formatMessage","useIntl","depth","value","options","maxDisplayDepth","openValues","onOptionToggle","isOpen","includes","Icon","ChevronUp","ChevronDown","_jsx","components","_jsxs","alignItems","Typography","textColor","ellipsis","span","style","paddingLeft","Math","min","length","aria-label","id","defaultMessage","tag","hasRadius","justifyContent","marginLeft","onClick","event","preventDefault","stopPropagation","width","fill"],"mappings":";;;;;;;;AAUA,MAAMA,YAAAA,GAAeC,MAAOC,CAAAA,IAAAA,CAAK;;;;;;;sBAOX,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE/D,CAAC;AAiBM,MAAMC,MAAS,GAAA,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,KAAoB,EAAA,GAAA;IAC3E,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEP,QAAUQ,EAAAA,OAAO,EAAE,GAAGP,IAAAA;AAC5C,IAAA,MAAM,EAAEQ,eAAe,EAAEC,UAAU,EAAEC,cAAc,EAAE,GAAGT,WAAAA;IACxD,MAAMU,MAAAA,GAASF,UAAWG,CAAAA,QAAQ,CAACN,KAAAA,CAAAA;IAEnC,MAAMO,IAAAA,GAAOF,SAASG,SAAYC,GAAAA,WAAAA;IAElC,qBACEC,GAAA,CAACC,WAAWnB,MAAM,EAAA;QAACE,IAAMA,EAAAA,IAAAA;QAAMC,WAAaA,EAAAA,WAAAA;AAAc,QAAA,GAAGC,KAAK;AAChE,QAAA,QAAA,gBAAAgB,IAACxB,CAAAA,IAAAA,EAAAA;YAAKyB,UAAW,EAAA,OAAA;;8BACfH,GAACI,CAAAA,UAAAA,EAAAA;oBAAWC,SAAU,EAAA,YAAA;oBAAaC,QAAQ,EAAA,IAAA;AACzC,oBAAA,QAAA,gBAAAN,GAACO,CAAAA,MAAAA,EAAAA;wBAAKC,KAAO,EAAA;4BAAEC,WAAa,EAAA,
|
|
1
|
+
{"version":3,"file":"Option.mjs","sources":["../../../../admin/src/components/SelectTree/Option.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { components, OptionProps as ReactSelectOptionProps } from 'react-select';\nimport { styled } from 'styled-components';\n\nimport type { Folder } from '../../../../shared/contracts/folders';\n\nconst ToggleButton = styled(Flex)`\n align-self: flex-end;\n height: 2.2rem;\n width: 2.8rem;\n\n &:hover,\n &:focus {\n background-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\ninterface SelectProps {\n maxDisplayDepth: number;\n openValues: string[];\n onOptionToggle: (value: string) => void;\n}\n\ninterface FolderWithDepth extends Folder {\n depth: number;\n value: string;\n}\n\ninterface OptionProps extends ReactSelectOptionProps<FolderWithDepth, false> {\n selectProps: SelectProps & ReactSelectOptionProps<FolderWithDepth, false>['selectProps'];\n}\n\nexport const Option = ({ children, data, selectProps, ...props }: OptionProps) => {\n const { formatMessage } = useIntl();\n const { depth, value, children: options } = data;\n const { maxDisplayDepth, openValues, onOptionToggle } = selectProps;\n const isOpen = openValues.includes(value);\n\n const Icon = isOpen ? ChevronUp : ChevronDown;\n\n return (\n <components.Option data={data} selectProps={selectProps} {...props}>\n <Flex alignItems=\"start\">\n <Typography textColor=\"neutral800\" ellipsis>\n <span style={{ paddingLeft: `${Math.min(depth, maxDisplayDepth) * 14}px` }}>\n {children}\n </span>\n </Typography>\n\n {options && options?.length > 0 && (\n <ToggleButton\n aria-label={formatMessage({\n id: 'app.utils.toggle',\n defaultMessage: 'Toggle',\n })}\n tag=\"button\"\n alignItems=\"center\"\n hasRadius\n justifyContent=\"center\"\n marginLeft=\"auto\"\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n onOptionToggle(value);\n }}\n >\n <Icon width=\"1.4rem\" fill=\"neutral500\" />\n </ToggleButton>\n )}\n </Flex>\n </components.Option>\n );\n};\n"],"names":["ToggleButton","styled","Flex","theme","colors","primary200","Option","children","data","selectProps","props","formatMessage","useIntl","depth","value","options","maxDisplayDepth","openValues","onOptionToggle","isOpen","includes","Icon","ChevronUp","ChevronDown","_jsx","components","_jsxs","alignItems","Typography","textColor","ellipsis","span","style","paddingLeft","Math","min","length","aria-label","id","defaultMessage","tag","hasRadius","justifyContent","marginLeft","onClick","event","preventDefault","stopPropagation","width","fill"],"mappings":";;;;;;;;AAUA,MAAMA,YAAAA,GAAeC,MAAOC,CAAAA,IAAAA,CAAK;;;;;;;sBAOX,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE/D,CAAC;AAiBM,MAAMC,MAAS,GAAA,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,KAAoB,EAAA,GAAA;IAC3E,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEP,QAAUQ,EAAAA,OAAO,EAAE,GAAGP,IAAAA;AAC5C,IAAA,MAAM,EAAEQ,eAAe,EAAEC,UAAU,EAAEC,cAAc,EAAE,GAAGT,WAAAA;IACxD,MAAMU,MAAAA,GAASF,UAAWG,CAAAA,QAAQ,CAACN,KAAAA,CAAAA;IAEnC,MAAMO,IAAAA,GAAOF,SAASG,SAAYC,GAAAA,WAAAA;IAElC,qBACEC,GAAA,CAACC,WAAWnB,MAAM,EAAA;QAACE,IAAMA,EAAAA,IAAAA;QAAMC,WAAaA,EAAAA,WAAAA;AAAc,QAAA,GAAGC,KAAK;AAChE,QAAA,QAAA,gBAAAgB,IAACxB,CAAAA,IAAAA,EAAAA;YAAKyB,UAAW,EAAA,OAAA;;8BACfH,GAACI,CAAAA,UAAAA,EAAAA;oBAAWC,SAAU,EAAA,YAAA;oBAAaC,QAAQ,EAAA,IAAA;AACzC,oBAAA,QAAA,gBAAAN,GAACO,CAAAA,MAAAA,EAAAA;wBAAKC,KAAO,EAAA;4BAAEC,WAAa,EAAA,CAAA,EAAGC,KAAKC,GAAG,CAACtB,OAAOG,eAAmB,CAAA,GAAA,EAAA,CAAG,EAAE;AAAE,yBAAA;AACtET,wBAAAA,QAAAA,EAAAA;;;gBAIJQ,OAAWA,IAAAA,OAAAA,EAASqB,MAAS,GAAA,CAAA,kBAC5BZ,GAACxB,CAAAA,YAAAA,EAAAA;AACCqC,oBAAAA,YAAAA,EAAY1B,aAAc,CAAA;wBACxB2B,EAAI,EAAA,kBAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAC,GAAI,EAAA,QAAA;oBACJb,UAAW,EAAA,QAAA;oBACXc,SAAS,EAAA,IAAA;oBACTC,cAAe,EAAA,QAAA;oBACfC,UAAW,EAAA,MAAA;AACXC,oBAAAA,OAAAA,EAAS,CAACC,KAAAA,GAAAA;AACRA,wBAAAA,KAAAA,CAAMC,cAAc,EAAA;AACpBD,wBAAAA,KAAAA,CAAME,eAAe,EAAA;wBAErB7B,cAAeJ,CAAAA,KAAAA,CAAAA;AACjB,qBAAA;AAEA,oBAAA,QAAA,gBAAAU,GAACH,CAAAA,IAAAA,EAAAA;wBAAK2B,KAAM,EAAA,QAAA;wBAASC,IAAK,EAAA;;;;;;AAMtC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTree.js","sources":["../../../../admin/src/components/SelectTree/SelectTree.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { Cross, CaretDown } from '@strapi/icons';\nimport ReactSelect, {\n components,\n GroupBase,\n StylesConfig,\n ClearIndicatorProps,\n} from 'react-select';\nimport { styled, useTheme, DefaultTheme } from 'styled-components';\n\nimport { Option } from './Option';\nimport { flattenTree, FlattenedNode } from './utils/flattenTree';\nimport { getOpenValues } from './utils/getOpenValues';\nimport { getValuesToClose } from './utils/getValuesToClose';\n\nconst hasParent = (option: FlattenedNode<string | number | null>) => !option.parent;\n\nexport type OptionSelectTree = {\n value: string | number | null;\n label?: string;\n children?: OptionSelectTree[];\n};\n\nexport interface SelectTreeProps<\n Option = unknown,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n IsMulti extends boolean = false,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n maxDisplayDepth?: number;\n defaultValue?: {\n value?: string | number | null;\n };\n options: OptionSelectTree[];\n onChange?: (value: Record<string, string | number>) => void;\n name?: string;\n menuPortalTarget?: HTMLElement | null;\n inputId?: string;\n error?: string;\n ariaErrorMessage?: string;\n isDisabled?: boolean;\n disabled?: boolean;\n}\n\nexport const SelectTree = ({\n options: defaultOptions,\n maxDisplayDepth = 5,\n defaultValue,\n ...props\n}: SelectTreeProps) => {\n const flatDefaultOptions = React.useMemo(() => flattenTree(defaultOptions), [defaultOptions]);\n const optionsFiltered = React.useMemo(\n () => flatDefaultOptions.filter(hasParent),\n [flatDefaultOptions]\n );\n const [options, setOptions] = React.useState(optionsFiltered);\n const [openValues, setOpenValues] = React.useState(\n getOpenValues(flatDefaultOptions, defaultValue)\n );\n\n React.useEffect(() => {\n if (openValues.length === 0) {\n setOptions(flatDefaultOptions.filter((option) => option.parent === undefined));\n } else {\n const allOpenValues = openValues.reduce<(string | number | null)[]>((acc, value) => {\n const options = flatDefaultOptions.filter(\n (option) => option.value === value || option.parent === value\n );\n\n options.forEach((option) => {\n const values = getOpenValues(flatDefaultOptions, option);\n acc = [...acc, ...values];\n });\n\n return acc;\n }, []);\n\n const nextOptions = flatDefaultOptions.filter((option) =>\n allOpenValues.includes(option.value)\n );\n\n setOptions(nextOptions);\n }\n }, [openValues, flatDefaultOptions, optionsFiltered]);\n\n const handleToggle = (value: string | number | null) => {\n if (openValues.includes(value)) {\n const valuesToClose = getValuesToClose(flatDefaultOptions, value);\n setOpenValues((prev) => prev.filter((prevData) => !valuesToClose.includes(prevData)));\n } else {\n setOpenValues((prev) => [...prev, value]);\n }\n };\n\n return (\n <Select\n components={{ Option }}\n options={options}\n defaultValue={defaultValue}\n isSearchable={false}\n /* -- custom props, used by the Option component */\n maxDisplayDepth={maxDisplayDepth}\n openValues={openValues}\n onOptionToggle={handleToggle}\n /* -- / custom props */\n {...props}\n />\n );\n};\n\ntype SelectOption = { value?: string | number | null; label?: string };\n\ninterface SelectProps<\n Option = SelectOption,\n IsMulti extends boolean = false,\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n components?: object;\n styles?: StylesConfig<Option, IsMulti, Group>;\n error?: string;\n ariaErrorMessage?: string;\n options: OptionSelectTree[];\n defaultValue?: {\n value?: string | number | null;\n };\n isSearchable?: boolean;\n maxDisplayDepth?: number;\n openValues?: (string | number | null)[];\n onOptionToggle?: (value: string | number | null) => void;\n}\n\nconst Select = ({\n components = {},\n styles = {},\n error,\n ariaErrorMessage,\n ...props\n}: SelectProps) => {\n const theme = useTheme();\n const customStyles = getSelectStyles(theme, error);\n\n return (\n <ReactSelect\n menuPosition=\"fixed\"\n components={{\n ...components,\n ClearIndicator,\n DropdownIndicator,\n IndicatorSeparator: () => null,\n LoadingIndicator: () => null,\n }}\n aria-errormessage={error && ariaErrorMessage}\n aria-invalid={!!error}\n styles={\n { ...customStyles, ...styles } as StylesConfig<SelectOption, false, GroupBase<SelectOption>>\n }\n {...props}\n />\n );\n};\n\nconst IconBox = styled(Box)`\n background: transparent;\n border: none;\n position: relative;\n z-index: 1;\n\n svg {\n height: 1.1rem;\n width: 1.1rem;\n }\n\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst ClearIndicator = (\n props: ClearIndicatorProps<SelectOption, false, GroupBase<SelectOption>>\n) => {\n const Component = components.ClearIndicator;\n\n return (\n <Component {...props}>\n <IconBox tag=\"button\" type=\"button\">\n <Cross />\n </IconBox>\n </Component>\n );\n};\n\nconst CarretBox = styled(IconBox)`\n display: flex;\n background: none;\n border: none;\n\n svg {\n width: 0.9rem;\n }\n`;\n\nconst DropdownIndicator = ({ innerProps }: { innerProps: object }) => {\n return (\n <CarretBox paddingRight={3} {...innerProps}>\n <CaretDown />\n </CarretBox>\n );\n};\n\nconst getSelectStyles = (\n theme: DefaultTheme,\n error?: string\n): StylesConfig<SelectOption, false, GroupBase<SelectOption>> => {\n return {\n clearIndicator: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n container: (base: object) => ({\n ...base,\n background: theme.colors.neutral0,\n lineHeight: 'normal',\n }),\n control(base: object, state: { isFocused: boolean; isDisabled: boolean }) {\n let borderColor = theme.colors.neutral200;\n let boxShadowColor: string | undefined = undefined;\n let backgroundColor: string | undefined = undefined;\n\n if (state.isFocused) {\n borderColor = theme.colors.primary600;\n boxShadowColor = theme.colors.primary600;\n } else if (error) {\n borderColor = theme.colors.danger600;\n }\n\n if (state.isDisabled) {\n backgroundColor = `${theme.colors.neutral150} !important`;\n }\n\n return {\n ...base,\n fontSize: theme.fontSizes[2],\n height: 40,\n border: `1px solid ${borderColor} !important`,\n outline: 0,\n backgroundColor,\n borderRadius: theme.borderRadius,\n boxShadow: boxShadowColor ? `${boxShadowColor} 0px 0px 0px 2px` : '',\n };\n },\n indicatorsContainer: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n input: (base: object) => ({\n ...base,\n margin: 0,\n padding: 0,\n color: theme.colors.neutral800,\n gridTemplateColumns: '0 100%',\n }),\n menuPortal: (base: object) => ({\n ...base,\n zIndex: theme.zIndices.dialog,\n pointerEvents: 'auto',\n }),\n menu(base: object) {\n return {\n ...base,\n width: '100%',\n marginTop: theme.spaces[1],\n backgroundColor: theme.colors.neutral0,\n color: theme.colors.neutral800,\n borderRadius: theme.borderRadius,\n border: `1px solid ${theme.colors.neutral200}`,\n boxShadow: theme.shadows.tableShadow,\n fontSize: theme.fontSizes[2],\n zIndex: 2,\n };\n },\n menuList: (base: object) => ({\n ...base,\n paddingLeft: theme.spaces[1],\n paddingTop: theme.spaces[1],\n paddingRight: theme.spaces[1],\n paddingBottom: theme.spaces[1],\n }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n option(base: any, state: { isFocused: boolean; isSelected: boolean }) {\n let backgroundColor = base?.backgroundColor as string;\n\n if (state.isFocused || state.isSelected) {\n backgroundColor = theme.colors.primary100;\n }\n\n return {\n ...base,\n color: theme.colors.neutral800,\n lineHeight: theme.spaces[5],\n backgroundColor,\n borderRadius: theme.borderRadius,\n '&:active': {\n backgroundColor: theme.colors.primary100,\n },\n };\n },\n placeholder: (base: object) => ({\n ...base,\n color: theme.colors.neutral600,\n marginLeft: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '80%',\n }),\n singleValue(base: object, state: { isDisabled: boolean }) {\n let color = theme.colors.neutral800;\n\n if (state.isDisabled) {\n color = theme.colors.neutral600;\n }\n\n return { ...base, marginLeft: 0, color };\n },\n valueContainer: (base: object) => ({\n ...base,\n cursor: 'pointer',\n padding: 0,\n paddingLeft: theme.spaces[4],\n marginLeft: 0,\n marginRight: 0,\n }),\n };\n};\n"],"names":["hasParent","option","parent","SelectTree","options","defaultOptions","maxDisplayDepth","defaultValue","props","flatDefaultOptions","React","useMemo","flattenTree","optionsFiltered","filter","setOptions","useState","openValues","setOpenValues","getOpenValues","useEffect","length","undefined","allOpenValues","reduce","acc","value","forEach","values","nextOptions","includes","handleToggle","valuesToClose","getValuesToClose","prev","prevData","_jsx","Select","components","Option","isSearchable","onOptionToggle","styles","error","ariaErrorMessage","theme","useTheme","customStyles","getSelectStyles","ReactSelect","menuPosition","ClearIndicator","DropdownIndicator","IndicatorSeparator","LoadingIndicator","aria-errormessage","aria-invalid","IconBox","styled","Box","colors","neutral600","Component","tag","type","Cross","CarretBox","innerProps","paddingRight","CaretDown","clearIndicator","base","padding","spaces","container","background","neutral0","lineHeight","control","state","borderColor","neutral200","boxShadowColor","backgroundColor","isFocused","primary600","danger600","isDisabled","neutral150","fontSize","fontSizes","height","border","outline","borderRadius","boxShadow","indicatorsContainer","input","margin","color","neutral800","gridTemplateColumns","menuPortal","zIndex","zIndices","dialog","pointerEvents","menu","width","marginTop","shadows","tableShadow","menuList","paddingLeft","paddingTop","paddingBottom","isSelected","primary100","placeholder","marginLeft","overflow","textOverflow","whiteSpace","maxWidth","singleValue","valueContainer","cursor","marginRight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAMA,SAAY,GAAA,CAACC,MAAkD,GAAA,CAACA,OAAOC,MAAM;AA8BtEC,MAAAA,UAAAA,GAAa,CAAC,EACzBC,OAASC,EAAAA,cAAc,EACvBC,eAAAA,GAAkB,CAAC,EACnBC,YAAY,EACZ,GAAGC,KACa,EAAA,GAAA;AAChB,IAAA,MAAMC,qBAAqBC,gBAAMC,CAAAA,OAAO,CAAC,IAAMC,wBAAYP,cAAiB,CAAA,EAAA;AAACA,QAAAA;AAAe,KAAA,CAAA;IAC5F,MAAMQ,eAAAA,GAAkBH,iBAAMC,OAAO,CACnC,IAAMF,kBAAmBK,CAAAA,MAAM,CAACd,SAChC,CAAA,EAAA;AAACS,QAAAA;AAAmB,KAAA,CAAA;AAEtB,IAAA,MAAM,CAACL,OAASW,EAAAA,UAAAA,CAAW,GAAGL,gBAAAA,CAAMM,QAAQ,CAACH,eAAAA,CAAAA;IAC7C,MAAM,CAACI,YAAYC,aAAc,CAAA,GAAGR,iBAAMM,QAAQ,CAChDG,4BAAcV,kBAAoBF,EAAAA,YAAAA,CAAAA,CAAAA;AAGpCG,IAAAA,gBAAAA,CAAMU,SAAS,CAAC,IAAA;QACd,IAAIH,UAAAA,CAAWI,MAAM,KAAK,CAAG,EAAA;AAC3BN,YAAAA,UAAAA,CAAWN,mBAAmBK,MAAM,CAAC,CAACb,MAAWA,GAAAA,MAAAA,CAAOC,MAAM,KAAKoB,SAAAA,CAAAA,CAAAA;SAC9D,MAAA;AACL,YAAA,MAAMC,aAAgBN,GAAAA,UAAAA,CAAWO,MAAM,CAA6B,CAACC,GAAKC,EAAAA,KAAAA,GAAAA;AACxE,gBAAA,MAAMtB,OAAUK,GAAAA,kBAAAA,CAAmBK,MAAM,CACvC,CAACb,MAAAA,GAAWA,MAAOyB,CAAAA,KAAK,KAAKA,KAAAA,IAASzB,MAAOC,CAAAA,MAAM,KAAKwB,KAAAA,CAAAA;gBAG1DtB,OAAQuB,CAAAA,OAAO,CAAC,CAAC1B,MAAAA,GAAAA;oBACf,MAAM2B,MAAAA,GAAST,4BAAcV,kBAAoBR,EAAAA,MAAAA,CAAAA;oBACjDwB,GAAM,GAAA;AAAIA,wBAAAA,GAAAA,GAAAA;AAAQG,wBAAAA,GAAAA;AAAO,qBAAA;AAC3B,iBAAA,CAAA;gBAEA,OAAOH,GAAAA;AACT,aAAA,EAAG,EAAE,CAAA;YAEL,MAAMI,WAAAA,GAAcpB,kBAAmBK,CAAAA,MAAM,CAAC,CAACb,SAC7CsB,aAAcO,CAAAA,QAAQ,CAAC7B,MAAAA,CAAOyB,KAAK,CAAA,CAAA;YAGrCX,UAAWc,CAAAA,WAAAA,CAAAA;AACb;KACC,EAAA;AAACZ,QAAAA,UAAAA;AAAYR,QAAAA,kBAAAA;AAAoBI,QAAAA;AAAgB,KAAA,CAAA;AAEpD,IAAA,MAAMkB,eAAe,CAACL,KAAAA,GAAAA;QACpB,IAAIT,UAAAA,CAAWa,QAAQ,CAACJ,KAAQ,CAAA,EAAA;YAC9B,MAAMM,aAAAA,GAAgBC,kCAAiBxB,kBAAoBiB,EAAAA,KAAAA,CAAAA;YAC3DR,aAAc,CAAA,CAACgB,IAASA,GAAAA,IAAAA,CAAKpB,MAAM,CAAC,CAACqB,QAAa,GAAA,CAACH,aAAcF,CAAAA,QAAQ,CAACK,QAAAA,CAAAA,CAAAA,CAAAA;SACrE,MAAA;AACLjB,YAAAA,aAAAA,CAAc,CAACgB,IAAS,GAAA;AAAIA,oBAAAA,GAAAA,IAAAA;AAAMR,oBAAAA;AAAM,iBAAA,CAAA;AAC1C;AACF,KAAA;AAEA,IAAA,qBACEU,cAACC,CAAAA,MAAAA,EAAAA;QACCC,UAAY,EAAA;AAAEC,oBAAAA;AAAO,SAAA;QACrBnC,OAASA,EAAAA,OAAAA;QACTG,YAAcA,EAAAA,YAAAA;QACdiC,YAAc,EAAA,KAAA;AACd,4DACAlC,eAAiBA,EAAAA,eAAAA;QACjBW,UAAYA,EAAAA,UAAAA;QACZwB,cAAgBV,EAAAA,YAAAA;AAEf,QAAA,GAAGvB;;AAGV;AAuBA,MAAM6B,SAAS,CAAC,EACdC,UAAa,GAAA,EAAE,EACfI,MAAAA,GAAS,EAAE,EACXC,KAAK,EACLC,gBAAgB,EAChB,GAAGpC,KACS,EAAA,GAAA;AACZ,IAAA,MAAMqC,KAAQC,GAAAA,yBAAAA,EAAAA;IACd,MAAMC,YAAAA,GAAeC,gBAAgBH,KAAOF,EAAAA,KAAAA,CAAAA;AAE5C,IAAA,qBACEP,cAACa,CAAAA,WAAAA,EAAAA;QACCC,YAAa,EAAA,OAAA;QACbZ,UAAY,EAAA;AACV,YAAA,GAAGA,UAAU;AACba,YAAAA,cAAAA;AACAC,YAAAA,iBAAAA;AACAC,YAAAA,kBAAAA,EAAoB,IAAM,IAAA;AAC1BC,YAAAA,gBAAAA,EAAkB,IAAM;AAC1B,SAAA;AACAC,QAAAA,mBAAAA,EAAmBZ,KAASC,IAAAA,gBAAAA;AAC5BY,QAAAA,cAAAA,EAAc,CAAC,CAACb,KAAAA;QAChBD,MACE,EAAA;AAAE,YAAA,GAAGK,YAAY;AAAE,YAAA,GAAGL;AAAO,SAAA;AAE9B,QAAA,GAAGlC;;AAGV,CAAA;AAEA,MAAMiD,OAAAA,GAAUC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;;;;;;;;;UAYjB,EAAE,CAAC,EAAEd,KAAK,EAAE,GAAKA,KAAMe,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAEnD,CAAC;AAED,MAAMV,iBAAiB,CACrB3C,KAAAA,GAAAA;IAEA,MAAMsD,SAAAA,GAAYxB,uBAAWa,cAAc;AAE3C,IAAA,qBACEf,cAAC0B,CAAAA,SAAAA,EAAAA;AAAW,QAAA,GAAGtD,KAAK;AAClB,QAAA,QAAA,gBAAA4B,cAACqB,CAAAA,OAAAA,EAAAA;YAAQM,GAAI,EAAA,QAAA;YAASC,IAAK,EAAA,QAAA;AACzB,YAAA,QAAA,gBAAA5B,cAAC6B,CAAAA,WAAAA,EAAAA,EAAAA;;;AAIT,CAAA;AAEA,MAAMC,SAAAA,GAAYR,uBAAOD,CAAAA,OAAAA,CAAQ;;;;;;;;AAQjC,CAAC;AAED,MAAML,iBAAoB,GAAA,CAAC,EAAEe,UAAU,EAA0B,GAAA;AAC/D,IAAA,qBACE/B,cAAC8B,CAAAA,SAAAA,EAAAA;QAAUE,YAAc,EAAA,CAAA;AAAI,QAAA,GAAGD,UAAU;AACxC,QAAA,QAAA,gBAAA/B,cAACiC,CAAAA,eAAAA,EAAAA,EAAAA;;AAGP,CAAA;AAEA,MAAMrB,eAAAA,GAAkB,CACtBH,KACAF,EAAAA,KAAAA,GAAAA;IAEA,OAAO;QACL2B,cAAgB,EAAA,CAACC,QAAkB;AAAE,gBAAA,GAAGA,IAAI;gBAAEC,OAAS,EAAA,CAAA;gBAAGJ,YAAcvB,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE;aAAC,CAAA;QACxFC,SAAW,EAAA,CAACH,QAAkB;AAC5B,gBAAA,GAAGA,IAAI;gBACPI,UAAY9B,EAAAA,KAAAA,CAAMe,MAAM,CAACgB,QAAQ;gBACjCC,UAAY,EAAA;aACd,CAAA;QACAC,OAAQP,CAAAA,CAAAA,IAAY,EAAEQ,KAAkD,EAAA;AACtE,YAAA,IAAIC,WAAcnC,GAAAA,KAAAA,CAAMe,MAAM,CAACqB,UAAU;AACzC,YAAA,IAAIC,cAAqC5D,GAAAA,SAAAA;AACzC,YAAA,IAAI6D,eAAsC7D,GAAAA,SAAAA;YAE1C,IAAIyD,KAAAA,CAAMK,SAAS,EAAE;gBACnBJ,WAAcnC,GAAAA,KAAAA,CAAMe,MAAM,CAACyB,UAAU;gBACrCH,cAAiBrC,GAAAA,KAAAA,CAAMe,MAAM,CAACyB,UAAU;AAC1C,aAAA,MAAO,IAAI1C,KAAO,EAAA;gBAChBqC,WAAcnC,GAAAA,KAAAA,CAAMe,MAAM,CAAC0B,SAAS;AACtC;YAEA,IAAIP,KAAAA,CAAMQ,UAAU,EAAE;gBACpBJ,eAAkB,GAAA,CAAC,EAAEtC,KAAMe,CAAAA,MAAM,CAAC4B,UAAU,CAAC,WAAW,CAAC;AAC3D;YAEA,OAAO;AACL,gBAAA,GAAGjB,IAAI;gBACPkB,QAAU5C,EAAAA,KAAAA,CAAM6C,SAAS,CAAC,CAAE,CAAA;gBAC5BC,MAAQ,EAAA,EAAA;AACRC,gBAAAA,MAAAA,EAAQ,CAAC,UAAU,EAAEZ,WAAAA,CAAY,WAAW,CAAC;gBAC7Ca,OAAS,EAAA,CAAA;AACTV,gBAAAA,eAAAA;AACAW,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;AAChCC,gBAAAA,SAAAA,EAAWb,iBAAiB,CAAC,EAAEA,cAAe,CAAA,gBAAgB,CAAC,GAAG;AACpE,aAAA;AACF,SAAA;QACAc,mBAAqB,EAAA,CAACzB,QAAkB;AAAE,gBAAA,GAAGA,IAAI;gBAAEC,OAAS,EAAA,CAAA;gBAAGJ,YAAcvB,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE;aAAC,CAAA;QAC7FwB,KAAO,EAAA,CAAC1B,QAAkB;AACxB,gBAAA,GAAGA,IAAI;gBACP2B,MAAQ,EAAA,CAAA;gBACR1B,OAAS,EAAA,CAAA;gBACT2B,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;gBAC9BC,mBAAqB,EAAA;aACvB,CAAA;QACAC,UAAY,EAAA,CAAC/B,QAAkB;AAC7B,gBAAA,GAAGA,IAAI;gBACPgC,MAAQ1D,EAAAA,KAAAA,CAAM2D,QAAQ,CAACC,MAAM;gBAC7BC,aAAe,EAAA;aACjB,CAAA;AACAC,QAAAA,IAAAA,CAAAA,CAAKpC,IAAY,EAAA;YACf,OAAO;AACL,gBAAA,GAAGA,IAAI;gBACPqC,KAAO,EAAA,MAAA;gBACPC,SAAWhE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC1BU,eAAiBtC,EAAAA,KAAAA,CAAMe,MAAM,CAACgB,QAAQ;gBACtCuB,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;AAC9BN,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;gBAChCF,MAAQ,EAAA,CAAC,UAAU,EAAE/C,KAAAA,CAAMe,MAAM,CAACqB,UAAU,CAAC,CAAC;gBAC9Cc,SAAWlD,EAAAA,KAAAA,CAAMiE,OAAO,CAACC,WAAW;gBACpCtB,QAAU5C,EAAAA,KAAAA,CAAM6C,SAAS,CAAC,CAAE,CAAA;gBAC5Ba,MAAQ,EAAA;AACV,aAAA;AACF,SAAA;QACAS,QAAU,EAAA,CAACzC,QAAkB;AAC3B,gBAAA,GAAGA,IAAI;gBACP0C,WAAapE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC5ByC,UAAYrE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC3BL,YAAcvB,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC7B0C,aAAetE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE;aAChC,CAAA;;QAEAxE,MAAOsE,CAAAA,CAAAA,IAAS,EAAEQ,KAAkD,EAAA;AAClE,YAAA,IAAII,kBAAkBZ,IAAMY,EAAAA,eAAAA;AAE5B,YAAA,IAAIJ,KAAMK,CAAAA,SAAS,IAAIL,KAAAA,CAAMqC,UAAU,EAAE;gBACvCjC,eAAkBtC,GAAAA,KAAAA,CAAMe,MAAM,CAACyD,UAAU;AAC3C;YAEA,OAAO;AACL,gBAAA,GAAG9C,IAAI;gBACP4B,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;gBAC9BvB,UAAYhC,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;AAC3BU,gBAAAA,eAAAA;AACAW,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;gBAChC,UAAY,EAAA;oBACVX,eAAiBtC,EAAAA,KAAAA,CAAMe,MAAM,CAACyD;AAChC;AACF,aAAA;AACF,SAAA;QACAC,WAAa,EAAA,CAAC/C,QAAkB;AAC9B,gBAAA,GAAGA,IAAI;gBACP4B,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACC,UAAU;gBAC9B0D,UAAY,EAAA,CAAA;gBACZC,QAAU,EAAA,QAAA;gBACVC,YAAc,EAAA,UAAA;gBACdC,UAAY,EAAA,QAAA;gBACZC,QAAU,EAAA;aACZ,CAAA;QACAC,WAAYrD,CAAAA,CAAAA,IAAY,EAAEQ,KAA8B,EAAA;AACtD,YAAA,IAAIoB,KAAQtD,GAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;YAEnC,IAAIrB,KAAAA,CAAMQ,UAAU,EAAE;gBACpBY,KAAQtD,GAAAA,KAAAA,CAAMe,MAAM,CAACC,UAAU;AACjC;YAEA,OAAO;AAAE,gBAAA,GAAGU,IAAI;gBAAEgD,UAAY,EAAA,CAAA;AAAGpB,gBAAAA;AAAM,aAAA;AACzC,SAAA;QACA0B,cAAgB,EAAA,CAACtD,QAAkB;AACjC,gBAAA,GAAGA,IAAI;gBACPuD,MAAQ,EAAA,SAAA;gBACRtD,OAAS,EAAA,CAAA;gBACTyC,WAAapE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC5B8C,UAAY,EAAA,CAAA;gBACZQ,WAAa,EAAA;aACf;AACF,KAAA;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"SelectTree.js","sources":["../../../../admin/src/components/SelectTree/SelectTree.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { Cross, CaretDown } from '@strapi/icons';\nimport ReactSelect, {\n components,\n GroupBase,\n StylesConfig,\n ClearIndicatorProps,\n} from 'react-select';\nimport { styled, useTheme, DefaultTheme } from 'styled-components';\n\nimport { Option } from './Option';\nimport { flattenTree, FlattenedNode } from './utils/flattenTree';\nimport { getOpenValues } from './utils/getOpenValues';\nimport { getValuesToClose } from './utils/getValuesToClose';\n\nconst hasParent = (option: FlattenedNode<string | number | null>) => !option.parent;\n\nexport type OptionSelectTree = {\n value: string | number | null;\n label?: string;\n children?: OptionSelectTree[];\n};\n\nexport interface SelectTreeProps<\n Option = unknown,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n IsMulti extends boolean = false,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n maxDisplayDepth?: number;\n defaultValue?: {\n value?: string | number | null;\n };\n options: OptionSelectTree[];\n onChange?: (value: Record<string, string | number>) => void;\n name?: string;\n menuPortalTarget?: HTMLElement | null;\n inputId?: string;\n error?: string;\n ariaErrorMessage?: string;\n isDisabled?: boolean;\n disabled?: boolean;\n}\n\nexport const SelectTree = ({\n options: defaultOptions,\n maxDisplayDepth = 5,\n defaultValue,\n ...props\n}: SelectTreeProps) => {\n const flatDefaultOptions = React.useMemo(() => flattenTree(defaultOptions), [defaultOptions]);\n const optionsFiltered = React.useMemo(\n () => flatDefaultOptions.filter(hasParent),\n [flatDefaultOptions]\n );\n const [options, setOptions] = React.useState(optionsFiltered);\n const [openValues, setOpenValues] = React.useState(\n getOpenValues(flatDefaultOptions, defaultValue)\n );\n\n React.useEffect(() => {\n if (openValues.length === 0) {\n setOptions(flatDefaultOptions.filter((option) => option.parent === undefined));\n } else {\n const allOpenValues = openValues.reduce<(string | number | null)[]>((acc, value) => {\n const options = flatDefaultOptions.filter(\n (option) => option.value === value || option.parent === value\n );\n\n options.forEach((option) => {\n const values = getOpenValues(flatDefaultOptions, option);\n acc = [...acc, ...values];\n });\n\n return acc;\n }, []);\n\n const nextOptions = flatDefaultOptions.filter((option) =>\n allOpenValues.includes(option.value)\n );\n\n setOptions(nextOptions);\n }\n }, [openValues, flatDefaultOptions, optionsFiltered]);\n\n const handleToggle = (value: string | number | null) => {\n if (openValues.includes(value)) {\n const valuesToClose = getValuesToClose(flatDefaultOptions, value);\n setOpenValues((prev) => prev.filter((prevData) => !valuesToClose.includes(prevData)));\n } else {\n setOpenValues((prev) => [...prev, value]);\n }\n };\n\n return (\n <Select\n components={{ Option }}\n options={options}\n defaultValue={defaultValue}\n isSearchable={false}\n /* -- custom props, used by the Option component */\n maxDisplayDepth={maxDisplayDepth}\n openValues={openValues}\n onOptionToggle={handleToggle}\n /* -- / custom props */\n {...props}\n />\n );\n};\n\ntype SelectOption = { value?: string | number | null; label?: string };\n\ninterface SelectProps<\n Option = SelectOption,\n IsMulti extends boolean = false,\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n components?: object;\n styles?: StylesConfig<Option, IsMulti, Group>;\n error?: string;\n ariaErrorMessage?: string;\n options: OptionSelectTree[];\n defaultValue?: {\n value?: string | number | null;\n };\n isSearchable?: boolean;\n maxDisplayDepth?: number;\n openValues?: (string | number | null)[];\n onOptionToggle?: (value: string | number | null) => void;\n}\n\nconst Select = ({\n components = {},\n styles = {},\n error,\n ariaErrorMessage,\n ...props\n}: SelectProps) => {\n const theme = useTheme();\n const customStyles = getSelectStyles(theme, error);\n\n return (\n <ReactSelect\n menuPosition=\"fixed\"\n components={{\n ...components,\n ClearIndicator,\n DropdownIndicator,\n IndicatorSeparator: () => null,\n LoadingIndicator: () => null,\n }}\n aria-errormessage={error && ariaErrorMessage}\n aria-invalid={!!error}\n styles={\n { ...customStyles, ...styles } as StylesConfig<SelectOption, false, GroupBase<SelectOption>>\n }\n {...props}\n />\n );\n};\n\nconst IconBox = styled(Box)`\n background: transparent;\n border: none;\n position: relative;\n z-index: 1;\n\n svg {\n height: 1.1rem;\n width: 1.1rem;\n }\n\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst ClearIndicator = (\n props: ClearIndicatorProps<SelectOption, false, GroupBase<SelectOption>>\n) => {\n const Component = components.ClearIndicator;\n\n return (\n <Component {...props}>\n <IconBox tag=\"button\" type=\"button\">\n <Cross />\n </IconBox>\n </Component>\n );\n};\n\nconst CarretBox = styled(IconBox)`\n display: flex;\n background: none;\n border: none;\n\n svg {\n width: 0.9rem;\n }\n`;\n\nconst DropdownIndicator = ({ innerProps }: { innerProps: object }) => {\n return (\n <CarretBox paddingRight={3} {...innerProps}>\n <CaretDown />\n </CarretBox>\n );\n};\n\nconst getSelectStyles = (\n theme: DefaultTheme,\n error?: string\n): StylesConfig<SelectOption, false, GroupBase<SelectOption>> => {\n return {\n clearIndicator: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n container: (base: object) => ({\n ...base,\n background: theme.colors.neutral0,\n lineHeight: 'normal',\n }),\n control(base: object, state: { isFocused: boolean; isDisabled: boolean }) {\n let borderColor = theme.colors.neutral200;\n let boxShadowColor: string | undefined = undefined;\n let backgroundColor: string | undefined = undefined;\n\n if (state.isFocused) {\n borderColor = theme.colors.primary600;\n boxShadowColor = theme.colors.primary600;\n } else if (error) {\n borderColor = theme.colors.danger600;\n }\n\n if (state.isDisabled) {\n backgroundColor = `${theme.colors.neutral150} !important`;\n }\n\n return {\n ...base,\n fontSize: theme.fontSizes[2],\n height: 40,\n border: `1px solid ${borderColor} !important`,\n outline: 0,\n backgroundColor,\n borderRadius: theme.borderRadius,\n boxShadow: boxShadowColor ? `${boxShadowColor} 0px 0px 0px 2px` : '',\n };\n },\n indicatorsContainer: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n input: (base: object) => ({\n ...base,\n margin: 0,\n padding: 0,\n color: theme.colors.neutral800,\n gridTemplateColumns: '0 100%',\n }),\n menuPortal: (base: object) => ({\n ...base,\n zIndex: theme.zIndices.dialog,\n pointerEvents: 'auto',\n }),\n menu(base: object) {\n return {\n ...base,\n width: '100%',\n marginTop: theme.spaces[1],\n backgroundColor: theme.colors.neutral0,\n color: theme.colors.neutral800,\n borderRadius: theme.borderRadius,\n border: `1px solid ${theme.colors.neutral200}`,\n boxShadow: theme.shadows.tableShadow,\n fontSize: theme.fontSizes[2],\n zIndex: 2,\n };\n },\n menuList: (base: object) => ({\n ...base,\n paddingLeft: theme.spaces[1],\n paddingTop: theme.spaces[1],\n paddingRight: theme.spaces[1],\n paddingBottom: theme.spaces[1],\n }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n option(base: any, state: { isFocused: boolean; isSelected: boolean }) {\n let backgroundColor = base?.backgroundColor as string;\n\n if (state.isFocused || state.isSelected) {\n backgroundColor = theme.colors.primary100;\n }\n\n return {\n ...base,\n color: theme.colors.neutral800,\n lineHeight: theme.spaces[5],\n backgroundColor,\n borderRadius: theme.borderRadius,\n '&:active': {\n backgroundColor: theme.colors.primary100,\n },\n };\n },\n placeholder: (base: object) => ({\n ...base,\n color: theme.colors.neutral600,\n marginLeft: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '80%',\n }),\n singleValue(base: object, state: { isDisabled: boolean }) {\n let color = theme.colors.neutral800;\n\n if (state.isDisabled) {\n color = theme.colors.neutral600;\n }\n\n return { ...base, marginLeft: 0, color };\n },\n valueContainer: (base: object) => ({\n ...base,\n cursor: 'pointer',\n padding: 0,\n paddingLeft: theme.spaces[4],\n marginLeft: 0,\n marginRight: 0,\n }),\n };\n};\n"],"names":["hasParent","option","parent","SelectTree","options","defaultOptions","maxDisplayDepth","defaultValue","props","flatDefaultOptions","React","useMemo","flattenTree","optionsFiltered","filter","setOptions","useState","openValues","setOpenValues","getOpenValues","useEffect","length","undefined","allOpenValues","reduce","acc","value","forEach","values","nextOptions","includes","handleToggle","valuesToClose","getValuesToClose","prev","prevData","_jsx","Select","components","Option","isSearchable","onOptionToggle","styles","error","ariaErrorMessage","theme","useTheme","customStyles","getSelectStyles","ReactSelect","menuPosition","ClearIndicator","DropdownIndicator","IndicatorSeparator","LoadingIndicator","aria-errormessage","aria-invalid","IconBox","styled","Box","colors","neutral600","Component","tag","type","Cross","CarretBox","innerProps","paddingRight","CaretDown","clearIndicator","base","padding","spaces","container","background","neutral0","lineHeight","control","state","borderColor","neutral200","boxShadowColor","backgroundColor","isFocused","primary600","danger600","isDisabled","neutral150","fontSize","fontSizes","height","border","outline","borderRadius","boxShadow","indicatorsContainer","input","margin","color","neutral800","gridTemplateColumns","menuPortal","zIndex","zIndices","dialog","pointerEvents","menu","width","marginTop","shadows","tableShadow","menuList","paddingLeft","paddingTop","paddingBottom","isSelected","primary100","placeholder","marginLeft","overflow","textOverflow","whiteSpace","maxWidth","singleValue","valueContainer","cursor","marginRight"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTree.mjs","sources":["../../../../admin/src/components/SelectTree/SelectTree.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { Cross, CaretDown } from '@strapi/icons';\nimport ReactSelect, {\n components,\n GroupBase,\n StylesConfig,\n ClearIndicatorProps,\n} from 'react-select';\nimport { styled, useTheme, DefaultTheme } from 'styled-components';\n\nimport { Option } from './Option';\nimport { flattenTree, FlattenedNode } from './utils/flattenTree';\nimport { getOpenValues } from './utils/getOpenValues';\nimport { getValuesToClose } from './utils/getValuesToClose';\n\nconst hasParent = (option: FlattenedNode<string | number | null>) => !option.parent;\n\nexport type OptionSelectTree = {\n value: string | number | null;\n label?: string;\n children?: OptionSelectTree[];\n};\n\nexport interface SelectTreeProps<\n Option = unknown,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n IsMulti extends boolean = false,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n maxDisplayDepth?: number;\n defaultValue?: {\n value?: string | number | null;\n };\n options: OptionSelectTree[];\n onChange?: (value: Record<string, string | number>) => void;\n name?: string;\n menuPortalTarget?: HTMLElement | null;\n inputId?: string;\n error?: string;\n ariaErrorMessage?: string;\n isDisabled?: boolean;\n disabled?: boolean;\n}\n\nexport const SelectTree = ({\n options: defaultOptions,\n maxDisplayDepth = 5,\n defaultValue,\n ...props\n}: SelectTreeProps) => {\n const flatDefaultOptions = React.useMemo(() => flattenTree(defaultOptions), [defaultOptions]);\n const optionsFiltered = React.useMemo(\n () => flatDefaultOptions.filter(hasParent),\n [flatDefaultOptions]\n );\n const [options, setOptions] = React.useState(optionsFiltered);\n const [openValues, setOpenValues] = React.useState(\n getOpenValues(flatDefaultOptions, defaultValue)\n );\n\n React.useEffect(() => {\n if (openValues.length === 0) {\n setOptions(flatDefaultOptions.filter((option) => option.parent === undefined));\n } else {\n const allOpenValues = openValues.reduce<(string | number | null)[]>((acc, value) => {\n const options = flatDefaultOptions.filter(\n (option) => option.value === value || option.parent === value\n );\n\n options.forEach((option) => {\n const values = getOpenValues(flatDefaultOptions, option);\n acc = [...acc, ...values];\n });\n\n return acc;\n }, []);\n\n const nextOptions = flatDefaultOptions.filter((option) =>\n allOpenValues.includes(option.value)\n );\n\n setOptions(nextOptions);\n }\n }, [openValues, flatDefaultOptions, optionsFiltered]);\n\n const handleToggle = (value: string | number | null) => {\n if (openValues.includes(value)) {\n const valuesToClose = getValuesToClose(flatDefaultOptions, value);\n setOpenValues((prev) => prev.filter((prevData) => !valuesToClose.includes(prevData)));\n } else {\n setOpenValues((prev) => [...prev, value]);\n }\n };\n\n return (\n <Select\n components={{ Option }}\n options={options}\n defaultValue={defaultValue}\n isSearchable={false}\n /* -- custom props, used by the Option component */\n maxDisplayDepth={maxDisplayDepth}\n openValues={openValues}\n onOptionToggle={handleToggle}\n /* -- / custom props */\n {...props}\n />\n );\n};\n\ntype SelectOption = { value?: string | number | null; label?: string };\n\ninterface SelectProps<\n Option = SelectOption,\n IsMulti extends boolean = false,\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n components?: object;\n styles?: StylesConfig<Option, IsMulti, Group>;\n error?: string;\n ariaErrorMessage?: string;\n options: OptionSelectTree[];\n defaultValue?: {\n value?: string | number | null;\n };\n isSearchable?: boolean;\n maxDisplayDepth?: number;\n openValues?: (string | number | null)[];\n onOptionToggle?: (value: string | number | null) => void;\n}\n\nconst Select = ({\n components = {},\n styles = {},\n error,\n ariaErrorMessage,\n ...props\n}: SelectProps) => {\n const theme = useTheme();\n const customStyles = getSelectStyles(theme, error);\n\n return (\n <ReactSelect\n menuPosition=\"fixed\"\n components={{\n ...components,\n ClearIndicator,\n DropdownIndicator,\n IndicatorSeparator: () => null,\n LoadingIndicator: () => null,\n }}\n aria-errormessage={error && ariaErrorMessage}\n aria-invalid={!!error}\n styles={\n { ...customStyles, ...styles } as StylesConfig<SelectOption, false, GroupBase<SelectOption>>\n }\n {...props}\n />\n );\n};\n\nconst IconBox = styled(Box)`\n background: transparent;\n border: none;\n position: relative;\n z-index: 1;\n\n svg {\n height: 1.1rem;\n width: 1.1rem;\n }\n\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst ClearIndicator = (\n props: ClearIndicatorProps<SelectOption, false, GroupBase<SelectOption>>\n) => {\n const Component = components.ClearIndicator;\n\n return (\n <Component {...props}>\n <IconBox tag=\"button\" type=\"button\">\n <Cross />\n </IconBox>\n </Component>\n );\n};\n\nconst CarretBox = styled(IconBox)`\n display: flex;\n background: none;\n border: none;\n\n svg {\n width: 0.9rem;\n }\n`;\n\nconst DropdownIndicator = ({ innerProps }: { innerProps: object }) => {\n return (\n <CarretBox paddingRight={3} {...innerProps}>\n <CaretDown />\n </CarretBox>\n );\n};\n\nconst getSelectStyles = (\n theme: DefaultTheme,\n error?: string\n): StylesConfig<SelectOption, false, GroupBase<SelectOption>> => {\n return {\n clearIndicator: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n container: (base: object) => ({\n ...base,\n background: theme.colors.neutral0,\n lineHeight: 'normal',\n }),\n control(base: object, state: { isFocused: boolean; isDisabled: boolean }) {\n let borderColor = theme.colors.neutral200;\n let boxShadowColor: string | undefined = undefined;\n let backgroundColor: string | undefined = undefined;\n\n if (state.isFocused) {\n borderColor = theme.colors.primary600;\n boxShadowColor = theme.colors.primary600;\n } else if (error) {\n borderColor = theme.colors.danger600;\n }\n\n if (state.isDisabled) {\n backgroundColor = `${theme.colors.neutral150} !important`;\n }\n\n return {\n ...base,\n fontSize: theme.fontSizes[2],\n height: 40,\n border: `1px solid ${borderColor} !important`,\n outline: 0,\n backgroundColor,\n borderRadius: theme.borderRadius,\n boxShadow: boxShadowColor ? `${boxShadowColor} 0px 0px 0px 2px` : '',\n };\n },\n indicatorsContainer: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n input: (base: object) => ({\n ...base,\n margin: 0,\n padding: 0,\n color: theme.colors.neutral800,\n gridTemplateColumns: '0 100%',\n }),\n menuPortal: (base: object) => ({\n ...base,\n zIndex: theme.zIndices.dialog,\n pointerEvents: 'auto',\n }),\n menu(base: object) {\n return {\n ...base,\n width: '100%',\n marginTop: theme.spaces[1],\n backgroundColor: theme.colors.neutral0,\n color: theme.colors.neutral800,\n borderRadius: theme.borderRadius,\n border: `1px solid ${theme.colors.neutral200}`,\n boxShadow: theme.shadows.tableShadow,\n fontSize: theme.fontSizes[2],\n zIndex: 2,\n };\n },\n menuList: (base: object) => ({\n ...base,\n paddingLeft: theme.spaces[1],\n paddingTop: theme.spaces[1],\n paddingRight: theme.spaces[1],\n paddingBottom: theme.spaces[1],\n }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n option(base: any, state: { isFocused: boolean; isSelected: boolean }) {\n let backgroundColor = base?.backgroundColor as string;\n\n if (state.isFocused || state.isSelected) {\n backgroundColor = theme.colors.primary100;\n }\n\n return {\n ...base,\n color: theme.colors.neutral800,\n lineHeight: theme.spaces[5],\n backgroundColor,\n borderRadius: theme.borderRadius,\n '&:active': {\n backgroundColor: theme.colors.primary100,\n },\n };\n },\n placeholder: (base: object) => ({\n ...base,\n color: theme.colors.neutral600,\n marginLeft: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '80%',\n }),\n singleValue(base: object, state: { isDisabled: boolean }) {\n let color = theme.colors.neutral800;\n\n if (state.isDisabled) {\n color = theme.colors.neutral600;\n }\n\n return { ...base, marginLeft: 0, color };\n },\n valueContainer: (base: object) => ({\n ...base,\n cursor: 'pointer',\n padding: 0,\n paddingLeft: theme.spaces[4],\n marginLeft: 0,\n marginRight: 0,\n }),\n };\n};\n"],"names":["hasParent","option","parent","SelectTree","options","defaultOptions","maxDisplayDepth","defaultValue","props","flatDefaultOptions","React","useMemo","flattenTree","optionsFiltered","filter","setOptions","useState","openValues","setOpenValues","getOpenValues","useEffect","length","undefined","allOpenValues","reduce","acc","value","forEach","values","nextOptions","includes","handleToggle","valuesToClose","getValuesToClose","prev","prevData","_jsx","Select","components","Option","isSearchable","onOptionToggle","styles","error","ariaErrorMessage","theme","useTheme","customStyles","getSelectStyles","ReactSelect","menuPosition","ClearIndicator","DropdownIndicator","IndicatorSeparator","LoadingIndicator","aria-errormessage","aria-invalid","IconBox","styled","Box","colors","neutral600","Component","tag","type","Cross","CarretBox","innerProps","paddingRight","CaretDown","clearIndicator","base","padding","spaces","container","background","neutral0","lineHeight","control","state","borderColor","neutral200","boxShadowColor","backgroundColor","isFocused","primary600","danger600","isDisabled","neutral150","fontSize","fontSizes","height","border","outline","borderRadius","boxShadow","indicatorsContainer","input","margin","color","neutral800","gridTemplateColumns","menuPortal","zIndex","zIndices","dialog","pointerEvents","menu","width","marginTop","shadows","tableShadow","menuList","paddingLeft","paddingTop","paddingBottom","isSelected","primary100","placeholder","marginLeft","overflow","textOverflow","whiteSpace","maxWidth","singleValue","valueContainer","cursor","marginRight"],"mappings":";;;;;;;;;;;AAiBA,MAAMA,SAAY,GAAA,CAACC,MAAkD,GAAA,CAACA,OAAOC,MAAM;AA8BtEC,MAAAA,UAAAA,GAAa,CAAC,EACzBC,OAASC,EAAAA,cAAc,EACvBC,eAAAA,GAAkB,CAAC,EACnBC,YAAY,EACZ,GAAGC,KACa,EAAA,GAAA;AAChB,IAAA,MAAMC,qBAAqBC,KAAMC,CAAAA,OAAO,CAAC,IAAMC,YAAYP,cAAiB,CAAA,EAAA;AAACA,QAAAA;AAAe,KAAA,CAAA;IAC5F,MAAMQ,eAAAA,GAAkBH,MAAMC,OAAO,CACnC,IAAMF,kBAAmBK,CAAAA,MAAM,CAACd,SAChC,CAAA,EAAA;AAACS,QAAAA;AAAmB,KAAA,CAAA;AAEtB,IAAA,MAAM,CAACL,OAASW,EAAAA,UAAAA,CAAW,GAAGL,KAAAA,CAAMM,QAAQ,CAACH,eAAAA,CAAAA;IAC7C,MAAM,CAACI,YAAYC,aAAc,CAAA,GAAGR,MAAMM,QAAQ,CAChDG,cAAcV,kBAAoBF,EAAAA,YAAAA,CAAAA,CAAAA;AAGpCG,IAAAA,KAAAA,CAAMU,SAAS,CAAC,IAAA;QACd,IAAIH,UAAAA,CAAWI,MAAM,KAAK,CAAG,EAAA;AAC3BN,YAAAA,UAAAA,CAAWN,mBAAmBK,MAAM,CAAC,CAACb,MAAWA,GAAAA,MAAAA,CAAOC,MAAM,KAAKoB,SAAAA,CAAAA,CAAAA;SAC9D,MAAA;AACL,YAAA,MAAMC,aAAgBN,GAAAA,UAAAA,CAAWO,MAAM,CAA6B,CAACC,GAAKC,EAAAA,KAAAA,GAAAA;AACxE,gBAAA,MAAMtB,OAAUK,GAAAA,kBAAAA,CAAmBK,MAAM,CACvC,CAACb,MAAAA,GAAWA,MAAOyB,CAAAA,KAAK,KAAKA,KAAAA,IAASzB,MAAOC,CAAAA,MAAM,KAAKwB,KAAAA,CAAAA;gBAG1DtB,OAAQuB,CAAAA,OAAO,CAAC,CAAC1B,MAAAA,GAAAA;oBACf,MAAM2B,MAAAA,GAAST,cAAcV,kBAAoBR,EAAAA,MAAAA,CAAAA;oBACjDwB,GAAM,GAAA;AAAIA,wBAAAA,GAAAA,GAAAA;AAAQG,wBAAAA,GAAAA;AAAO,qBAAA;AAC3B,iBAAA,CAAA;gBAEA,OAAOH,GAAAA;AACT,aAAA,EAAG,EAAE,CAAA;YAEL,MAAMI,WAAAA,GAAcpB,kBAAmBK,CAAAA,MAAM,CAAC,CAACb,SAC7CsB,aAAcO,CAAAA,QAAQ,CAAC7B,MAAAA,CAAOyB,KAAK,CAAA,CAAA;YAGrCX,UAAWc,CAAAA,WAAAA,CAAAA;AACb;KACC,EAAA;AAACZ,QAAAA,UAAAA;AAAYR,QAAAA,kBAAAA;AAAoBI,QAAAA;AAAgB,KAAA,CAAA;AAEpD,IAAA,MAAMkB,eAAe,CAACL,KAAAA,GAAAA;QACpB,IAAIT,UAAAA,CAAWa,QAAQ,CAACJ,KAAQ,CAAA,EAAA;YAC9B,MAAMM,aAAAA,GAAgBC,iBAAiBxB,kBAAoBiB,EAAAA,KAAAA,CAAAA;YAC3DR,aAAc,CAAA,CAACgB,IAASA,GAAAA,IAAAA,CAAKpB,MAAM,CAAC,CAACqB,QAAa,GAAA,CAACH,aAAcF,CAAAA,QAAQ,CAACK,QAAAA,CAAAA,CAAAA,CAAAA;SACrE,MAAA;AACLjB,YAAAA,aAAAA,CAAc,CAACgB,IAAS,GAAA;AAAIA,oBAAAA,GAAAA,IAAAA;AAAMR,oBAAAA;AAAM,iBAAA,CAAA;AAC1C;AACF,KAAA;AAEA,IAAA,qBACEU,GAACC,CAAAA,MAAAA,EAAAA;QACCC,UAAY,EAAA;AAAEC,YAAAA;AAAO,SAAA;QACrBnC,OAASA,EAAAA,OAAAA;QACTG,YAAcA,EAAAA,YAAAA;QACdiC,YAAc,EAAA,KAAA;AACd,4DACAlC,eAAiBA,EAAAA,eAAAA;QACjBW,UAAYA,EAAAA,UAAAA;QACZwB,cAAgBV,EAAAA,YAAAA;AAEf,QAAA,GAAGvB;;AAGV;AAuBA,MAAM6B,SAAS,CAAC,EACdC,UAAa,GAAA,EAAE,EACfI,MAAAA,GAAS,EAAE,EACXC,KAAK,EACLC,gBAAgB,EAChB,GAAGpC,KACS,EAAA,GAAA;AACZ,IAAA,MAAMqC,KAAQC,GAAAA,QAAAA,EAAAA;IACd,MAAMC,YAAAA,GAAeC,gBAAgBH,KAAOF,EAAAA,KAAAA,CAAAA;AAE5C,IAAA,qBACEP,GAACa,CAAAA,WAAAA,EAAAA;QACCC,YAAa,EAAA,OAAA;QACbZ,UAAY,EAAA;AACV,YAAA,GAAGA,UAAU;AACba,YAAAA,cAAAA;AACAC,YAAAA,iBAAAA;AACAC,YAAAA,kBAAAA,EAAoB,IAAM,IAAA;AAC1BC,YAAAA,gBAAAA,EAAkB,IAAM;AAC1B,SAAA;AACAC,QAAAA,mBAAAA,EAAmBZ,KAASC,IAAAA,gBAAAA;AAC5BY,QAAAA,cAAAA,EAAc,CAAC,CAACb,KAAAA;QAChBD,MACE,EAAA;AAAE,YAAA,GAAGK,YAAY;AAAE,YAAA,GAAGL;AAAO,SAAA;AAE9B,QAAA,GAAGlC;;AAGV,CAAA;AAEA,MAAMiD,OAAAA,GAAUC,MAAOC,CAAAA,GAAAA,CAAI;;;;;;;;;;;;UAYjB,EAAE,CAAC,EAAEd,KAAK,EAAE,GAAKA,KAAMe,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAEnD,CAAC;AAED,MAAMV,iBAAiB,CACrB3C,KAAAA,GAAAA;IAEA,MAAMsD,SAAAA,GAAYxB,WAAWa,cAAc;AAE3C,IAAA,qBACEf,GAAC0B,CAAAA,SAAAA,EAAAA;AAAW,QAAA,GAAGtD,KAAK;AAClB,QAAA,QAAA,gBAAA4B,GAACqB,CAAAA,OAAAA,EAAAA;YAAQM,GAAI,EAAA,QAAA;YAASC,IAAK,EAAA,QAAA;AACzB,YAAA,QAAA,gBAAA5B,GAAC6B,CAAAA,KAAAA,EAAAA,EAAAA;;;AAIT,CAAA;AAEA,MAAMC,SAAAA,GAAYR,MAAOD,CAAAA,OAAAA,CAAQ;;;;;;;;AAQjC,CAAC;AAED,MAAML,iBAAoB,GAAA,CAAC,EAAEe,UAAU,EAA0B,GAAA;AAC/D,IAAA,qBACE/B,GAAC8B,CAAAA,SAAAA,EAAAA;QAAUE,YAAc,EAAA,CAAA;AAAI,QAAA,GAAGD,UAAU;AACxC,QAAA,QAAA,gBAAA/B,GAACiC,CAAAA,SAAAA,EAAAA,EAAAA;;AAGP,CAAA;AAEA,MAAMrB,eAAAA,GAAkB,CACtBH,KACAF,EAAAA,KAAAA,GAAAA;IAEA,OAAO;QACL2B,cAAgB,EAAA,CAACC,QAAkB;AAAE,gBAAA,GAAGA,IAAI;gBAAEC,OAAS,EAAA,CAAA;gBAAGJ,YAAcvB,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE;aAAC,CAAA;QACxFC,SAAW,EAAA,CAACH,QAAkB;AAC5B,gBAAA,GAAGA,IAAI;gBACPI,UAAY9B,EAAAA,KAAAA,CAAMe,MAAM,CAACgB,QAAQ;gBACjCC,UAAY,EAAA;aACd,CAAA;QACAC,OAAQP,CAAAA,CAAAA,IAAY,EAAEQ,KAAkD,EAAA;AACtE,YAAA,IAAIC,WAAcnC,GAAAA,KAAAA,CAAMe,MAAM,CAACqB,UAAU;AACzC,YAAA,IAAIC,cAAqC5D,GAAAA,SAAAA;AACzC,YAAA,IAAI6D,eAAsC7D,GAAAA,SAAAA;YAE1C,IAAIyD,KAAAA,CAAMK,SAAS,EAAE;gBACnBJ,WAAcnC,GAAAA,KAAAA,CAAMe,MAAM,CAACyB,UAAU;gBACrCH,cAAiBrC,GAAAA,KAAAA,CAAMe,MAAM,CAACyB,UAAU;AAC1C,aAAA,MAAO,IAAI1C,KAAO,EAAA;gBAChBqC,WAAcnC,GAAAA,KAAAA,CAAMe,MAAM,CAAC0B,SAAS;AACtC;YAEA,IAAIP,KAAAA,CAAMQ,UAAU,EAAE;gBACpBJ,eAAkB,GAAA,CAAC,EAAEtC,KAAMe,CAAAA,MAAM,CAAC4B,UAAU,CAAC,WAAW,CAAC;AAC3D;YAEA,OAAO;AACL,gBAAA,GAAGjB,IAAI;gBACPkB,QAAU5C,EAAAA,KAAAA,CAAM6C,SAAS,CAAC,CAAE,CAAA;gBAC5BC,MAAQ,EAAA,EAAA;AACRC,gBAAAA,MAAAA,EAAQ,CAAC,UAAU,EAAEZ,WAAAA,CAAY,WAAW,CAAC;gBAC7Ca,OAAS,EAAA,CAAA;AACTV,gBAAAA,eAAAA;AACAW,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;AAChCC,gBAAAA,SAAAA,EAAWb,iBAAiB,CAAC,EAAEA,cAAe,CAAA,gBAAgB,CAAC,GAAG;AACpE,aAAA;AACF,SAAA;QACAc,mBAAqB,EAAA,CAACzB,QAAkB;AAAE,gBAAA,GAAGA,IAAI;gBAAEC,OAAS,EAAA,CAAA;gBAAGJ,YAAcvB,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE;aAAC,CAAA;QAC7FwB,KAAO,EAAA,CAAC1B,QAAkB;AACxB,gBAAA,GAAGA,IAAI;gBACP2B,MAAQ,EAAA,CAAA;gBACR1B,OAAS,EAAA,CAAA;gBACT2B,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;gBAC9BC,mBAAqB,EAAA;aACvB,CAAA;QACAC,UAAY,EAAA,CAAC/B,QAAkB;AAC7B,gBAAA,GAAGA,IAAI;gBACPgC,MAAQ1D,EAAAA,KAAAA,CAAM2D,QAAQ,CAACC,MAAM;gBAC7BC,aAAe,EAAA;aACjB,CAAA;AACAC,QAAAA,IAAAA,CAAAA,CAAKpC,IAAY,EAAA;YACf,OAAO;AACL,gBAAA,GAAGA,IAAI;gBACPqC,KAAO,EAAA,MAAA;gBACPC,SAAWhE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC1BU,eAAiBtC,EAAAA,KAAAA,CAAMe,MAAM,CAACgB,QAAQ;gBACtCuB,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;AAC9BN,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;gBAChCF,MAAQ,EAAA,CAAC,UAAU,EAAE/C,KAAAA,CAAMe,MAAM,CAACqB,UAAU,CAAC,CAAC;gBAC9Cc,SAAWlD,EAAAA,KAAAA,CAAMiE,OAAO,CAACC,WAAW;gBACpCtB,QAAU5C,EAAAA,KAAAA,CAAM6C,SAAS,CAAC,CAAE,CAAA;gBAC5Ba,MAAQ,EAAA;AACV,aAAA;AACF,SAAA;QACAS,QAAU,EAAA,CAACzC,QAAkB;AAC3B,gBAAA,GAAGA,IAAI;gBACP0C,WAAapE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC5ByC,UAAYrE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC3BL,YAAcvB,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC7B0C,aAAetE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE;aAChC,CAAA;;QAEAxE,MAAOsE,CAAAA,CAAAA,IAAS,EAAEQ,KAAkD,EAAA;AAClE,YAAA,IAAII,kBAAkBZ,IAAMY,EAAAA,eAAAA;AAE5B,YAAA,IAAIJ,KAAMK,CAAAA,SAAS,IAAIL,KAAAA,CAAMqC,UAAU,EAAE;gBACvCjC,eAAkBtC,GAAAA,KAAAA,CAAMe,MAAM,CAACyD,UAAU;AAC3C;YAEA,OAAO;AACL,gBAAA,GAAG9C,IAAI;gBACP4B,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;gBAC9BvB,UAAYhC,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;AAC3BU,gBAAAA,eAAAA;AACAW,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;gBAChC,UAAY,EAAA;oBACVX,eAAiBtC,EAAAA,KAAAA,CAAMe,MAAM,CAACyD;AAChC;AACF,aAAA;AACF,SAAA;QACAC,WAAa,EAAA,CAAC/C,QAAkB;AAC9B,gBAAA,GAAGA,IAAI;gBACP4B,KAAOtD,EAAAA,KAAAA,CAAMe,MAAM,CAACC,UAAU;gBAC9B0D,UAAY,EAAA,CAAA;gBACZC,QAAU,EAAA,QAAA;gBACVC,YAAc,EAAA,UAAA;gBACdC,UAAY,EAAA,QAAA;gBACZC,QAAU,EAAA;aACZ,CAAA;QACAC,WAAYrD,CAAAA,CAAAA,IAAY,EAAEQ,KAA8B,EAAA;AACtD,YAAA,IAAIoB,KAAQtD,GAAAA,KAAAA,CAAMe,MAAM,CAACwC,UAAU;YAEnC,IAAIrB,KAAAA,CAAMQ,UAAU,EAAE;gBACpBY,KAAQtD,GAAAA,KAAAA,CAAMe,MAAM,CAACC,UAAU;AACjC;YAEA,OAAO;AAAE,gBAAA,GAAGU,IAAI;gBAAEgD,UAAY,EAAA,CAAA;AAAGpB,gBAAAA;AAAM,aAAA;AACzC,SAAA;QACA0B,cAAgB,EAAA,CAACtD,QAAkB;AACjC,gBAAA,GAAGA,IAAI;gBACPuD,MAAQ,EAAA,SAAA;gBACRtD,OAAS,EAAA,CAAA;gBACTyC,WAAapE,EAAAA,KAAAA,CAAM4B,MAAM,CAAC,CAAE,CAAA;gBAC5B8C,UAAY,EAAA,CAAA;gBACZQ,WAAa,EAAA;aACf;AACF,KAAA;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"SelectTree.mjs","sources":["../../../../admin/src/components/SelectTree/SelectTree.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { Cross, CaretDown } from '@strapi/icons';\nimport ReactSelect, {\n components,\n GroupBase,\n StylesConfig,\n ClearIndicatorProps,\n} from 'react-select';\nimport { styled, useTheme, DefaultTheme } from 'styled-components';\n\nimport { Option } from './Option';\nimport { flattenTree, FlattenedNode } from './utils/flattenTree';\nimport { getOpenValues } from './utils/getOpenValues';\nimport { getValuesToClose } from './utils/getValuesToClose';\n\nconst hasParent = (option: FlattenedNode<string | number | null>) => !option.parent;\n\nexport type OptionSelectTree = {\n value: string | number | null;\n label?: string;\n children?: OptionSelectTree[];\n};\n\nexport interface SelectTreeProps<\n Option = unknown,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n IsMulti extends boolean = false,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n maxDisplayDepth?: number;\n defaultValue?: {\n value?: string | number | null;\n };\n options: OptionSelectTree[];\n onChange?: (value: Record<string, string | number>) => void;\n name?: string;\n menuPortalTarget?: HTMLElement | null;\n inputId?: string;\n error?: string;\n ariaErrorMessage?: string;\n isDisabled?: boolean;\n disabled?: boolean;\n}\n\nexport const SelectTree = ({\n options: defaultOptions,\n maxDisplayDepth = 5,\n defaultValue,\n ...props\n}: SelectTreeProps) => {\n const flatDefaultOptions = React.useMemo(() => flattenTree(defaultOptions), [defaultOptions]);\n const optionsFiltered = React.useMemo(\n () => flatDefaultOptions.filter(hasParent),\n [flatDefaultOptions]\n );\n const [options, setOptions] = React.useState(optionsFiltered);\n const [openValues, setOpenValues] = React.useState(\n getOpenValues(flatDefaultOptions, defaultValue)\n );\n\n React.useEffect(() => {\n if (openValues.length === 0) {\n setOptions(flatDefaultOptions.filter((option) => option.parent === undefined));\n } else {\n const allOpenValues = openValues.reduce<(string | number | null)[]>((acc, value) => {\n const options = flatDefaultOptions.filter(\n (option) => option.value === value || option.parent === value\n );\n\n options.forEach((option) => {\n const values = getOpenValues(flatDefaultOptions, option);\n acc = [...acc, ...values];\n });\n\n return acc;\n }, []);\n\n const nextOptions = flatDefaultOptions.filter((option) =>\n allOpenValues.includes(option.value)\n );\n\n setOptions(nextOptions);\n }\n }, [openValues, flatDefaultOptions, optionsFiltered]);\n\n const handleToggle = (value: string | number | null) => {\n if (openValues.includes(value)) {\n const valuesToClose = getValuesToClose(flatDefaultOptions, value);\n setOpenValues((prev) => prev.filter((prevData) => !valuesToClose.includes(prevData)));\n } else {\n setOpenValues((prev) => [...prev, value]);\n }\n };\n\n return (\n <Select\n components={{ Option }}\n options={options}\n defaultValue={defaultValue}\n isSearchable={false}\n /* -- custom props, used by the Option component */\n maxDisplayDepth={maxDisplayDepth}\n openValues={openValues}\n onOptionToggle={handleToggle}\n /* -- / custom props */\n {...props}\n />\n );\n};\n\ntype SelectOption = { value?: string | number | null; label?: string };\n\ninterface SelectProps<\n Option = SelectOption,\n IsMulti extends boolean = false,\n Group extends GroupBase<Option> = GroupBase<Option>,\n> {\n components?: object;\n styles?: StylesConfig<Option, IsMulti, Group>;\n error?: string;\n ariaErrorMessage?: string;\n options: OptionSelectTree[];\n defaultValue?: {\n value?: string | number | null;\n };\n isSearchable?: boolean;\n maxDisplayDepth?: number;\n openValues?: (string | number | null)[];\n onOptionToggle?: (value: string | number | null) => void;\n}\n\nconst Select = ({\n components = {},\n styles = {},\n error,\n ariaErrorMessage,\n ...props\n}: SelectProps) => {\n const theme = useTheme();\n const customStyles = getSelectStyles(theme, error);\n\n return (\n <ReactSelect\n menuPosition=\"fixed\"\n components={{\n ...components,\n ClearIndicator,\n DropdownIndicator,\n IndicatorSeparator: () => null,\n LoadingIndicator: () => null,\n }}\n aria-errormessage={error && ariaErrorMessage}\n aria-invalid={!!error}\n styles={\n { ...customStyles, ...styles } as StylesConfig<SelectOption, false, GroupBase<SelectOption>>\n }\n {...props}\n />\n );\n};\n\nconst IconBox = styled(Box)`\n background: transparent;\n border: none;\n position: relative;\n z-index: 1;\n\n svg {\n height: 1.1rem;\n width: 1.1rem;\n }\n\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst ClearIndicator = (\n props: ClearIndicatorProps<SelectOption, false, GroupBase<SelectOption>>\n) => {\n const Component = components.ClearIndicator;\n\n return (\n <Component {...props}>\n <IconBox tag=\"button\" type=\"button\">\n <Cross />\n </IconBox>\n </Component>\n );\n};\n\nconst CarretBox = styled(IconBox)`\n display: flex;\n background: none;\n border: none;\n\n svg {\n width: 0.9rem;\n }\n`;\n\nconst DropdownIndicator = ({ innerProps }: { innerProps: object }) => {\n return (\n <CarretBox paddingRight={3} {...innerProps}>\n <CaretDown />\n </CarretBox>\n );\n};\n\nconst getSelectStyles = (\n theme: DefaultTheme,\n error?: string\n): StylesConfig<SelectOption, false, GroupBase<SelectOption>> => {\n return {\n clearIndicator: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n container: (base: object) => ({\n ...base,\n background: theme.colors.neutral0,\n lineHeight: 'normal',\n }),\n control(base: object, state: { isFocused: boolean; isDisabled: boolean }) {\n let borderColor = theme.colors.neutral200;\n let boxShadowColor: string | undefined = undefined;\n let backgroundColor: string | undefined = undefined;\n\n if (state.isFocused) {\n borderColor = theme.colors.primary600;\n boxShadowColor = theme.colors.primary600;\n } else if (error) {\n borderColor = theme.colors.danger600;\n }\n\n if (state.isDisabled) {\n backgroundColor = `${theme.colors.neutral150} !important`;\n }\n\n return {\n ...base,\n fontSize: theme.fontSizes[2],\n height: 40,\n border: `1px solid ${borderColor} !important`,\n outline: 0,\n backgroundColor,\n borderRadius: theme.borderRadius,\n boxShadow: boxShadowColor ? `${boxShadowColor} 0px 0px 0px 2px` : '',\n };\n },\n indicatorsContainer: (base: object) => ({ ...base, padding: 0, paddingRight: theme.spaces[3] }),\n input: (base: object) => ({\n ...base,\n margin: 0,\n padding: 0,\n color: theme.colors.neutral800,\n gridTemplateColumns: '0 100%',\n }),\n menuPortal: (base: object) => ({\n ...base,\n zIndex: theme.zIndices.dialog,\n pointerEvents: 'auto',\n }),\n menu(base: object) {\n return {\n ...base,\n width: '100%',\n marginTop: theme.spaces[1],\n backgroundColor: theme.colors.neutral0,\n color: theme.colors.neutral800,\n borderRadius: theme.borderRadius,\n border: `1px solid ${theme.colors.neutral200}`,\n boxShadow: theme.shadows.tableShadow,\n fontSize: theme.fontSizes[2],\n zIndex: 2,\n };\n },\n menuList: (base: object) => ({\n ...base,\n paddingLeft: theme.spaces[1],\n paddingTop: theme.spaces[1],\n paddingRight: theme.spaces[1],\n paddingBottom: theme.spaces[1],\n }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n option(base: any, state: { isFocused: boolean; isSelected: boolean }) {\n let backgroundColor = base?.backgroundColor as string;\n\n if (state.isFocused || state.isSelected) {\n backgroundColor = theme.colors.primary100;\n }\n\n return {\n ...base,\n color: theme.colors.neutral800,\n lineHeight: theme.spaces[5],\n backgroundColor,\n borderRadius: theme.borderRadius,\n '&:active': {\n backgroundColor: theme.colors.primary100,\n },\n };\n },\n placeholder: (base: object) => ({\n ...base,\n color: theme.colors.neutral600,\n marginLeft: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '80%',\n }),\n singleValue(base: object, state: { isDisabled: boolean }) {\n let color = theme.colors.neutral800;\n\n if (state.isDisabled) {\n color = theme.colors.neutral600;\n }\n\n return { ...base, marginLeft: 0, color };\n },\n valueContainer: (base: object) => ({\n ...base,\n cursor: 'pointer',\n padding: 0,\n paddingLeft: theme.spaces[4],\n marginLeft: 0,\n marginRight: 0,\n }),\n };\n};\n"],"names":["hasParent","option","parent","SelectTree","options","defaultOptions","maxDisplayDepth","defaultValue","props","flatDefaultOptions","React","useMemo","flattenTree","optionsFiltered","filter","setOptions","useState","openValues","setOpenValues","getOpenValues","useEffect","length","undefined","allOpenValues","reduce","acc","value","forEach","values","nextOptions","includes","handleToggle","valuesToClose","getValuesToClose","prev","prevData","_jsx","Select","components","Option","isSearchable","onOptionToggle","styles","error","ariaErrorMessage","theme","useTheme","customStyles","getSelectStyles","ReactSelect","menuPosition","ClearIndicator","DropdownIndicator","IndicatorSeparator","LoadingIndicator","aria-errormessage","aria-invalid","IconBox","styled","Box","colors","neutral600","Component","tag","type","Cross","CarretBox","innerProps","paddingRight","CaretDown","clearIndicator","base","padding","spaces","container","background","neutral0","lineHeight","control","state","borderColor","neutral200","boxShadowColor","backgroundColor","isFocused","primary600","danger600","isDisabled","neutral150","fontSize","fontSizes","height","border","outline","borderRadius","boxShadow","indicatorsContainer","input","margin","color","neutral800","gridTemplateColumns","menuPortal","zIndex","zIndices","dialog","pointerEvents","menu","width","marginTop","shadows","tableShadow","menuList","paddingLeft","paddingTop","paddingBottom","isSelected","primary100","placeholder","marginLeft","overflow","textOverflow","whiteSpace","maxWidth","singleValue","valueContainer","cursor","marginRight"],"mappings":"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"}
|