@strapi/upload 5.58.0 → 5.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js +141 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +139 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js +129 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +127 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.js +144 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +142 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +397 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +395 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +45 -0
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +43 -0
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +1 -0
- package/dist/admin/hooks/useAIMetadataAvailability.js +5 -1
- package/dist/admin/hooks/useAIMetadataAvailability.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataAvailability.mjs +5 -1
- package/dist/admin/hooks/useAIMetadataAvailability.mjs.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.js +7 -1
- package/dist/admin/hooks/useAIMetadataEnabled.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.mjs +7 -1
- package/dist/admin/hooks/useAIMetadataEnabled.mjs.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.js +4 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs +4 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +5 -1
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +5 -1
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/index.js +7 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +7 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetCard/AssetCardBase.js.map +1 -1
- package/dist/admin/legacy/components/AssetCard/AssetCardBase.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.js +2 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.js.map +1 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.mjs +2 -1
- package/dist/admin/legacy/components/AssetCard/VideoPreview.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.js +3 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.mjs +3 -1
- package/dist/admin/legacy/components/AssetDialog/AssetDialog.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.js +3 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.mjs +3 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
- package/dist/admin/legacy/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -1
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.js +7 -6
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.js.map +1 -1
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.mjs +7 -6
- package/dist/admin/legacy/components/AssetGridList/AssetGridList.mjs.map +1 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.js +2 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +2 -1
- package/dist/admin/legacy/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.js +2 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.mjs +2 -1
- package/dist/admin/legacy/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.js +3 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.mjs +3 -1
- package/dist/admin/legacy/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/legacy/components/FilterList/FilterList.js.map +1 -1
- package/dist/admin/legacy/components/FilterList/FilterList.mjs.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterPopover.js.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterPopover.mjs.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.js +2 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.js.map +1 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.mjs +2 -1
- package/dist/admin/legacy/components/FilterPopover/FilterValueInput.mjs.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.js +4 -2
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.mjs +4 -2
- package/dist/admin/legacy/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.js +2 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.mjs +2 -1
- package/dist/admin/legacy/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.js +3 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.js.map +1 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.mjs +3 -1
- package/dist/admin/legacy/components/SelectTree/SelectTree.mjs.map +1 -1
- package/dist/admin/legacy/components/TableList/TableList.js +3 -1
- package/dist/admin/legacy/components/TableList/TableList.js.map +1 -1
- package/dist/admin/legacy/components/TableList/TableList.mjs +3 -1
- package/dist/admin/legacy/components/TableList/TableList.mjs.map +1 -1
- package/dist/admin/legacy/components/TableList/TableRows.js +3 -1
- package/dist/admin/legacy/components/TableList/TableRows.js.map +1 -1
- package/dist/admin/legacy/components/TableList/TableRows.mjs +3 -1
- package/dist/admin/legacy/components/TableList/TableRows.mjs.map +1 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.js +3 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.mjs +3 -1
- package/dist/admin/legacy/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.js +2 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.js.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.mjs +2 -1
- package/dist/admin/legacy/pages/App/components/BulkActions.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.js +2 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.js.map +1 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.mjs +2 -1
- package/dist/admin/legacy/pages/App/components/BulkMoveButton.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.js +2 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs +2 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.js +2 -1
- package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.mjs +2 -1
- package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/BulkActionsBar.js +3 -1
- package/dist/admin/pages/Assets/components/BulkActionsBar.js.map +1 -1
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +3 -1
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/DateRangeCalendar.js +10 -7
- package/dist/admin/pages/Assets/components/DateRangeCalendar.js.map +1 -1
- package/dist/admin/pages/Assets/components/DateRangeCalendar.mjs +10 -7
- package/dist/admin/pages/Assets/components/DateRangeCalendar.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.js +4 -2
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +5 -3
- package/dist/admin/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FilterBadges.js +32 -3
- package/dist/admin/pages/Assets/components/FilterBadges.js.map +1 -1
- package/dist/admin/pages/Assets/components/FilterBadges.mjs +33 -4
- package/dist/admin/pages/Assets/components/FilterBadges.mjs.map +1 -1
- package/dist/admin/services/api.js +15 -5
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +15 -5
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/src/components/MediaLibraryInput/AddAssetMenu.d.ts +19 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetDropZone.d.ts +13 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +15 -0
- package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +26 -0
- package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +10 -0
- package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +1 -0
- package/dist/admin/src/legacy/components/BulkMoveDialog/BulkMoveDialog.d.ts +1 -1
- package/dist/admin/src/legacy/pages/App/components/BulkActions.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +6 -0
- package/dist/admin/src/utils/allowedMediaTypes.d.ts +16 -0
- package/dist/admin/translations/ca.json.js +3 -3
- package/dist/admin/translations/ca.json.mjs +3 -3
- package/dist/admin/translations/da.json.js +1 -1
- package/dist/admin/translations/da.json.mjs +1 -1
- package/dist/admin/translations/de.json.js +1 -1
- package/dist/admin/translations/de.json.mjs +1 -1
- package/dist/admin/translations/en.json.js +9 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +9 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +1 -1
- package/dist/admin/translations/es.json.mjs +1 -1
- package/dist/admin/translations/sk.json.js +2 -2
- package/dist/admin/translations/sk.json.mjs +2 -2
- package/dist/admin/translations/tr.json.js +2 -2
- package/dist/admin/translations/tr.json.mjs +2 -2
- package/dist/admin/translations/zh-Hans.json.js +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +1 -1
- package/dist/admin/translations/zh.json.js +2 -2
- package/dist/admin/translations/zh.json.mjs +2 -2
- package/dist/admin/utils/allowedMediaTypes.js +42 -0
- package/dist/admin/utils/allowedMediaTypes.js.map +1 -0
- package/dist/admin/utils/allowedMediaTypes.mjs +39 -0
- package/dist/admin/utils/allowedMediaTypes.mjs.map +1 -0
- package/dist/server/config.js +6 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +6 -0
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -1
- package/dist/server/mcp/ambient-instance.js +7 -5
- package/dist/server/mcp/ambient-instance.js.map +1 -1
- package/dist/server/mcp/ambient-instance.mjs +7 -5
- package/dist/server/mcp/ambient-instance.mjs.map +1 -1
- package/dist/server/mcp/handlers/folder-handlers.js +4 -16
- package/dist/server/mcp/handlers/folder-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/folder-handlers.mjs +5 -17
- package/dist/server/mcp/handlers/folder-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/read-handlers.js +6 -14
- package/dist/server/mcp/handlers/read-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/read-handlers.mjs +7 -15
- package/dist/server/mcp/handlers/read-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/write-handlers.js +3 -13
- package/dist/server/mcp/handlers/write-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/write-handlers.mjs +3 -13
- package/dist/server/mcp/handlers/write-handlers.mjs.map +1 -1
- package/dist/server/mcp/register-upload-mcp-tools.js +215 -195
- package/dist/server/mcp/register-upload-mcp-tools.js.map +1 -1
- package/dist/server/mcp/register-upload-mcp-tools.mjs +215 -195
- package/dist/server/mcp/register-upload-mcp-tools.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js +33 -14
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs +33 -14
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/src/config.d.ts +3 -0
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts +7 -5
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/folder-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/read-handlers.d.ts +3 -2
- package/dist/server/src/mcp/handlers/read-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/write-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/register-upload-mcp-tools.d.ts +9 -14
- package/dist/server/src/mcp/register-upload-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +1 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -36,12 +36,13 @@ function _interopNamespace(e) {
|
|
|
36
36
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
37
37
|
|
|
38
38
|
// TODO: find a better naming convention for the file that was an index file before
|
|
39
|
+
const EMPTY_ATTRIBUTE = {};
|
|
39
40
|
const STEPS = {
|
|
40
41
|
AssetSelect: 'SelectAsset',
|
|
41
42
|
AssetUpload: 'UploadAsset',
|
|
42
43
|
FolderCreate: 'FolderCreate'
|
|
43
44
|
};
|
|
44
|
-
const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute: { allowedTypes = null, multiple = false } =
|
|
45
|
+
const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute: { allowedTypes = null, multiple = false } = EMPTY_ATTRIBUTE, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
|
|
45
46
|
const { formatMessage } = reactIntl.useIntl();
|
|
46
47
|
const { onChange, value, error } = strapiAdmin.useField(name);
|
|
47
48
|
const [uploadedFiles, setUploadedFiles] = React__namespace.useState([]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryInput.js","sources":["../../../../../admin/src/legacy/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 { AllowedFiles, getAllowedFiles, getTrad } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { Asset, UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\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<File | File[] | null>(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 !== null && value !== undefined) {\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 const handleDoubleClickAsset = (asset: File) => {\n if (disabled) return;\n handleAssetEdit(asset);\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 onDoubleClickAsset={handleDoubleClickAsset}\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","handleDoubleClickAsset","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","onDoubleClickAsset","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MediaLibraryInput.js","sources":["../../../../../admin/src/legacy/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 { AllowedFiles, getAllowedFiles, getTrad } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { Asset, UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\nconst EMPTY_ATTRIBUTE: NonNullable<MediaLibraryInputProps['attribute']> = {};\n\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 } = EMPTY_ATTRIBUTE,\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<File | File[] | null>(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 !== null && value !== undefined) {\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 const handleDoubleClickAsset = (asset: File) => {\n if (disabled) return;\n handleAssetEdit(asset);\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 onDoubleClickAsset={handleDoubleClickAsset}\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":["EMPTY_ATTRIBUTE","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","handleDoubleClickAsset","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","onDoubleClickAsset","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
@@ -14,12 +14,13 @@ import { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog.mjs';
|
|
|
14
14
|
import { CarouselAssets } from './Carousel/CarouselAssets.mjs';
|
|
15
15
|
|
|
16
16
|
// TODO: find a better naming convention for the file that was an index file before
|
|
17
|
+
const EMPTY_ATTRIBUTE = {};
|
|
17
18
|
const STEPS = {
|
|
18
19
|
AssetSelect: 'SelectAsset',
|
|
19
20
|
AssetUpload: 'UploadAsset',
|
|
20
21
|
FolderCreate: 'FolderCreate'
|
|
21
22
|
};
|
|
22
|
-
const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowedTypes = null, multiple = false } =
|
|
23
|
+
const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowedTypes = null, multiple = false } = EMPTY_ATTRIBUTE, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
|
|
23
24
|
const { formatMessage } = useIntl();
|
|
24
25
|
const { onChange, value, error } = useField(name);
|
|
25
26
|
const [uploadedFiles, setUploadedFiles] = React.useState([]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryInput.mjs","sources":["../../../../../admin/src/legacy/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 { AllowedFiles, getAllowedFiles, getTrad } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { Asset, UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\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<File | File[] | null>(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 !== null && value !== undefined) {\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 const handleDoubleClickAsset = (asset: File) => {\n if (disabled) return;\n handleAssetEdit(asset);\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 onDoubleClickAsset={handleDoubleClickAsset}\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","handleDoubleClickAsset","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","onDoubleClickAsset","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/legacy/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 { AllowedFiles, getAllowedFiles, getTrad } from '../../utils';\nimport { AssetDialog } from '../AssetDialog/AssetDialog';\nimport { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog';\nimport { Asset, UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog';\n\nimport { CarouselAssets, CarouselAssetsProps, FileWithoutIdHash } from './Carousel/CarouselAssets';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\nconst EMPTY_ATTRIBUTE: NonNullable<MediaLibraryInputProps['attribute']> = {};\n\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 } = EMPTY_ATTRIBUTE,\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<File | File[] | null>(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 !== null && value !== undefined) {\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 const handleDoubleClickAsset = (asset: File) => {\n if (disabled) return;\n handleAssetEdit(asset);\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 onDoubleClickAsset={handleDoubleClickAsset}\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":["EMPTY_ATTRIBUTE","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","handleDoubleClickAsset","_jsxs","_Fragment","_jsx","CarouselAssets","ref","onDeleteAsset","onDeleteAssetFromMediaLibrary","onAddAsset","onDropAsset","onEditAsset","onNext","onPrevious","onDoubleClickAsset","selectedAssetIndex","trackedLocation","AssetDialog","onClose","open","onValidate","onAddFolder","onChangeFolder","folder","UploadAssetDialog","initialAssetsToAdd","addUploadedFiles","EditFolderDialog","parentFolderId"],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ function _interopNamespace(e) {
|
|
|
34
34
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
35
35
|
var ReactSelect__default = /*#__PURE__*/_interopDefault(ReactSelect);
|
|
36
36
|
|
|
37
|
+
const EMPTY_COMPONENTS = {};
|
|
38
|
+
const EMPTY_STYLES = {};
|
|
37
39
|
const hasParent = (option)=>!option.parent;
|
|
38
40
|
const SelectTree = ({ options: defaultOptions, maxDisplayDepth = 5, defaultValue, ...props })=>{
|
|
39
41
|
const flatDefaultOptions = React__namespace.useMemo(()=>flattenTree.flattenTree(defaultOptions), [
|
|
@@ -91,7 +93,7 @@ const SelectTree = ({ options: defaultOptions, maxDisplayDepth = 5, defaultValue
|
|
|
91
93
|
...props
|
|
92
94
|
});
|
|
93
95
|
};
|
|
94
|
-
const Select = ({ components =
|
|
96
|
+
const Select = ({ components = EMPTY_COMPONENTS, styles = EMPTY_STYLES, error, ariaErrorMessage, ...props })=>{
|
|
95
97
|
const theme = styledComponents.useTheme();
|
|
96
98
|
const customStyles = getSelectStyles(theme, error);
|
|
97
99
|
return /*#__PURE__*/ jsxRuntime.jsx(ReactSelect__default.default, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTree.js","sources":["../../../../../admin/src/legacy/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
|
+
{"version":3,"file":"SelectTree.js","sources":["../../../../../admin/src/legacy/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 EMPTY_COMPONENTS: NonNullable<SelectProps['components']> = {};\nconst EMPTY_STYLES: NonNullable<SelectProps['styles']> = {};\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 = EMPTY_COMPONENTS,\n styles = EMPTY_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":["EMPTY_COMPONENTS","EMPTY_STYLES","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,mBAA2D,EAAC;AAClE,MAAMC,eAAmD,EAAC;AAE1D,MAAMC,SAAAA,GAAY,CAACC,MAAAA,GAAkD,CAACA,OAAOC,MAAM;AA8B5E,MAAMC,UAAAA,GAAa,CAAC,EACzBC,OAAAA,EAASC,cAAc,EACvBC,eAAAA,GAAkB,CAAC,EACnBC,YAAY,EACZ,GAAGC,KAAAA,EACa,GAAA;AAChB,IAAA,MAAMC,qBAAqBC,gBAAAA,CAAMC,OAAO,CAAC,IAAMC,wBAAYP,cAAAA,CAAAA,EAAiB;AAACA,QAAAA;AAAe,KAAA,CAAA;IAC5F,MAAMQ,eAAAA,GAAkBH,iBAAMC,OAAO,CACnC,IAAMF,kBAAAA,CAAmBK,MAAM,CAACd,SAAAA,CAAAA,EAChC;AAACS,QAAAA;AAAmB,KAAA,CAAA;AAEtB,IAAA,MAAM,CAACL,OAAAA,EAASW,UAAAA,CAAW,GAAGL,gBAAAA,CAAMM,QAAQ,CAACH,eAAAA,CAAAA;IAC7C,MAAM,CAACI,YAAYC,aAAAA,CAAc,GAAGR,iBAAMM,QAAQ,CAChDG,4BAAcV,kBAAAA,EAAoBF,YAAAA,CAAAA,CAAAA;AAGpCG,IAAAA,gBAAAA,CAAMU,SAAS,CAAC,IAAA;QACd,IAAIH,UAAAA,CAAWI,MAAM,KAAK,CAAA,EAAG;AAC3BN,YAAAA,UAAAA,CAAWN,mBAAmBK,MAAM,CAAC,CAACb,MAAAA,GAAWA,MAAAA,CAAOC,MAAM,KAAKoB,SAAAA,CAAAA,CAAAA;QACrE,CAAA,MAAO;AACL,YAAA,MAAMC,aAAAA,GAAgBN,UAAAA,CAAWO,MAAM,CAA6B,CAACC,GAAAA,EAAKC,KAAAA,GAAAA;AACxE,gBAAA,MAAMtB,OAAAA,GAAUK,kBAAAA,CAAmBK,MAAM,CACvC,CAACb,MAAAA,GAAWA,MAAAA,CAAOyB,KAAK,KAAKA,KAAAA,IAASzB,MAAAA,CAAOC,MAAM,KAAKwB,KAAAA,CAAAA;gBAG1DtB,OAAAA,CAAQuB,OAAO,CAAC,CAAC1B,MAAAA,GAAAA;oBACf,MAAM2B,MAAAA,GAAST,4BAAcV,kBAAAA,EAAoBR,MAAAA,CAAAA;oBACjDwB,GAAAA,GAAM;AAAIA,wBAAAA,GAAAA,GAAAA;AAAQG,wBAAAA,GAAAA;AAAO,qBAAA;AAC3B,gBAAA,CAAA,CAAA;gBAEA,OAAOH,GAAAA;AACT,YAAA,CAAA,EAAG,EAAE,CAAA;YAEL,MAAMI,WAAAA,GAAcpB,kBAAAA,CAAmBK,MAAM,CAAC,CAACb,SAC7CsB,aAAAA,CAAcO,QAAQ,CAAC7B,MAAAA,CAAOyB,KAAK,CAAA,CAAA;YAGrCX,UAAAA,CAAWc,WAAAA,CAAAA;AACb,QAAA;IACF,CAAA,EAAG;AAACZ,QAAAA,UAAAA;AAAYR,QAAAA,kBAAAA;AAAoBI,QAAAA;AAAgB,KAAA,CAAA;AAEpD,IAAA,MAAMkB,eAAe,CAACL,KAAAA,GAAAA;QACpB,IAAIT,UAAAA,CAAWa,QAAQ,CAACJ,KAAAA,CAAAA,EAAQ;YAC9B,MAAMM,aAAAA,GAAgBC,kCAAiBxB,kBAAAA,EAAoBiB,KAAAA,CAAAA;YAC3DR,aAAAA,CAAc,CAACgB,IAAAA,GAASA,IAAAA,CAAKpB,MAAM,CAAC,CAACqB,QAAAA,GAAa,CAACH,aAAAA,CAAcF,QAAQ,CAACK,QAAAA,CAAAA,CAAAA,CAAAA;QAC5E,CAAA,MAAO;AACLjB,YAAAA,aAAAA,CAAc,CAACgB,IAAAA,GAAS;AAAIA,oBAAAA,GAAAA,IAAAA;AAAMR,oBAAAA;AAAM,iBAAA,CAAA;AAC1C,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEU,cAAA,CAACC,MAAAA,EAAAA;QACCC,UAAAA,EAAY;AAAEC,oBAAAA;AAAO,SAAA;QACrBnC,OAAAA,EAASA,OAAAA;QACTG,YAAAA,EAAcA,YAAAA;QACdiC,YAAAA,EAAc,KAAA;AACd,4DACAlC,eAAAA,EAAiBA,eAAAA;QACjBW,UAAAA,EAAYA,UAAAA;QACZwB,cAAAA,EAAgBV,YAAAA;AAEf,QAAA,GAAGvB;;AAGV;AAuBA,MAAM6B,MAAAA,GAAS,CAAC,EACdC,UAAAA,GAAaxC,gBAAgB,EAC7B4C,MAAAA,GAAS3C,YAAY,EACrB4C,KAAK,EACLC,gBAAgB,EAChB,GAAGpC,KAAAA,EACS,GAAA;AACZ,IAAA,MAAMqC,KAAAA,GAAQC,yBAAAA,EAAAA;IACd,MAAMC,YAAAA,GAAeC,gBAAgBH,KAAAA,EAAOF,KAAAA,CAAAA;AAE5C,IAAA,qBACEP,cAAA,CAACa,4BAAAA,EAAAA;QACCC,YAAAA,EAAa,OAAA;QACbZ,UAAAA,EAAY;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,KAAAA,IAASC,gBAAAA;AAC5BY,QAAAA,cAAAA,EAAc,CAAC,CAACb,KAAAA;QAChBD,MAAAA,EACE;AAAE,YAAA,GAAGK,YAAY;AAAE,YAAA,GAAGL;AAAO,SAAA;AAE9B,QAAA,GAAGlC;;AAGV,CAAA;AAEA,MAAMiD,OAAAA,GAAUC,uBAAAA,CAAOC,gBAAAA,CAAI;;;;;;;;;;;;UAYjB,EAAE,CAAC,EAAEd,KAAK,EAAE,GAAKA,KAAAA,CAAMe,MAAM,CAACC,UAAU,CAAC;;AAEnD,CAAC;AAED,MAAMV,iBAAiB,CACrB3C,KAAAA,GAAAA;IAEA,MAAMsD,SAAAA,GAAYxB,uBAAWa,cAAc;AAE3C,IAAA,qBACEf,cAAA,CAAC0B,SAAAA,EAAAA;AAAW,QAAA,GAAGtD,KAAK;AAClB,QAAA,QAAA,gBAAA4B,cAAA,CAACqB,OAAAA,EAAAA;YAAQM,GAAAA,EAAI,QAAA;YAASC,IAAAA,EAAK,QAAA;AACzB,YAAA,QAAA,gBAAA5B,cAAA,CAAC6B,WAAAA,EAAAA,EAAAA;;;AAIT,CAAA;AAEA,MAAMC,SAAAA,GAAYR,uBAAAA,CAAOD,OAAAA,CAAQ;;;;;;;;AAQjC,CAAC;AAED,MAAML,iBAAAA,GAAoB,CAAC,EAAEe,UAAU,EAA0B,GAAA;AAC/D,IAAA,qBACE/B,cAAA,CAAC8B,SAAAA,EAAAA;QAAUE,YAAAA,EAAc,CAAA;AAAI,QAAA,GAAGD,UAAU;AACxC,QAAA,QAAA,gBAAA/B,cAAA,CAACiC,eAAAA,EAAAA,EAAAA;;AAGP,CAAA;AAEA,MAAMrB,eAAAA,GAAkB,CACtBH,KAAAA,EACAF,KAAAA,GAAAA;IAEA,OAAO;QACL2B,cAAAA,EAAgB,CAACC,QAAkB;AAAE,gBAAA,GAAGA,IAAI;gBAAEC,OAAAA,EAAS,CAAA;gBAAGJ,YAAAA,EAAcvB,KAAAA,CAAM4B,MAAM,CAAC,CAAA;aAAG,CAAA;QACxFC,SAAAA,EAAW,CAACH,QAAkB;AAC5B,gBAAA,GAAGA,IAAI;gBACPI,UAAAA,EAAY9B,KAAAA,CAAMe,MAAM,CAACgB,QAAQ;gBACjCC,UAAAA,EAAY;aACd,CAAA;QACAC,OAAAA,CAAAA,CAAQP,IAAY,EAAEQ,KAAkD,EAAA;AACtE,YAAA,IAAIC,WAAAA,GAAcnC,KAAAA,CAAMe,MAAM,CAACqB,UAAU;AACzC,YAAA,IAAIC,cAAAA,GAAqC5D,SAAAA;AACzC,YAAA,IAAI6D,eAAAA,GAAsC7D,SAAAA;YAE1C,IAAIyD,KAAAA,CAAMK,SAAS,EAAE;gBACnBJ,WAAAA,GAAcnC,KAAAA,CAAMe,MAAM,CAACyB,UAAU;gBACrCH,cAAAA,GAAiBrC,KAAAA,CAAMe,MAAM,CAACyB,UAAU;AAC1C,YAAA,CAAA,MAAO,IAAI1C,KAAAA,EAAO;gBAChBqC,WAAAA,GAAcnC,KAAAA,CAAMe,MAAM,CAAC0B,SAAS;AACtC,YAAA;YAEA,IAAIP,KAAAA,CAAMQ,UAAU,EAAE;AACpBJ,gBAAAA,eAAAA,GAAkB,GAAGtC,KAAAA,CAAMe,MAAM,CAAC4B,UAAU,CAAC,WAAW,CAAC;AAC3D,YAAA;YAEA,OAAO;AACL,gBAAA,GAAGjB,IAAI;gBACPkB,QAAAA,EAAU5C,KAAAA,CAAM6C,SAAS,CAAC,CAAA,CAAE;gBAC5BC,MAAAA,EAAQ,EAAA;AACRC,gBAAAA,MAAAA,EAAQ,CAAC,UAAU,EAAEZ,WAAAA,CAAY,WAAW,CAAC;gBAC7Ca,OAAAA,EAAS,CAAA;AACTV,gBAAAA,eAAAA;AACAW,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;AAChCC,gBAAAA,SAAAA,EAAWb,cAAAA,GAAiB,CAAA,EAAGA,cAAAA,CAAe,gBAAgB,CAAC,GAAG;AACpE,aAAA;AACF,QAAA,CAAA;QACAc,mBAAAA,EAAqB,CAACzB,QAAkB;AAAE,gBAAA,GAAGA,IAAI;gBAAEC,OAAAA,EAAS,CAAA;gBAAGJ,YAAAA,EAAcvB,KAAAA,CAAM4B,MAAM,CAAC,CAAA;aAAG,CAAA;QAC7FwB,KAAAA,EAAO,CAAC1B,QAAkB;AACxB,gBAAA,GAAGA,IAAI;gBACP2B,MAAAA,EAAQ,CAAA;gBACR1B,OAAAA,EAAS,CAAA;gBACT2B,KAAAA,EAAOtD,KAAAA,CAAMe,MAAM,CAACwC,UAAU;gBAC9BC,mBAAAA,EAAqB;aACvB,CAAA;QACAC,UAAAA,EAAY,CAAC/B,QAAkB;AAC7B,gBAAA,GAAGA,IAAI;gBACPgC,MAAAA,EAAQ1D,KAAAA,CAAM2D,QAAQ,CAACC,MAAM;gBAC7BC,aAAAA,EAAe;aACjB,CAAA;AACAC,QAAAA,IAAAA,CAAAA,CAAKpC,IAAY,EAAA;YACf,OAAO;AACL,gBAAA,GAAGA,IAAI;gBACPqC,KAAAA,EAAO,MAAA;gBACPC,SAAAA,EAAWhE,KAAAA,CAAM4B,MAAM,CAAC,CAAA,CAAE;gBAC1BU,eAAAA,EAAiBtC,KAAAA,CAAMe,MAAM,CAACgB,QAAQ;gBACtCuB,KAAAA,EAAOtD,KAAAA,CAAMe,MAAM,CAACwC,UAAU;AAC9BN,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;AAChCF,gBAAAA,MAAAA,EAAQ,CAAC,UAAU,EAAE/C,MAAMe,MAAM,CAACqB,UAAU,CAAA,CAAE;gBAC9Cc,SAAAA,EAAWlD,KAAAA,CAAMiE,OAAO,CAACC,WAAW;gBACpCtB,QAAAA,EAAU5C,KAAAA,CAAM6C,SAAS,CAAC,CAAA,CAAE;gBAC5Ba,MAAAA,EAAQ;AACV,aAAA;AACF,QAAA,CAAA;QACAS,QAAAA,EAAU,CAACzC,QAAkB;AAC3B,gBAAA,GAAGA,IAAI;gBACP0C,WAAAA,EAAapE,KAAAA,CAAM4B,MAAM,CAAC,CAAA,CAAE;gBAC5ByC,UAAAA,EAAYrE,KAAAA,CAAM4B,MAAM,CAAC,CAAA,CAAE;gBAC3BL,YAAAA,EAAcvB,KAAAA,CAAM4B,MAAM,CAAC,CAAA,CAAE;gBAC7B0C,aAAAA,EAAetE,KAAAA,CAAM4B,MAAM,CAAC,CAAA;aAC9B,CAAA;;QAEAxE,MAAAA,CAAAA,CAAOsE,IAAS,EAAEQ,KAAkD,EAAA;AAClE,YAAA,IAAII,kBAAkBZ,IAAAA,EAAMY,eAAAA;AAE5B,YAAA,IAAIJ,KAAAA,CAAMK,SAAS,IAAIL,KAAAA,CAAMqC,UAAU,EAAE;gBACvCjC,eAAAA,GAAkBtC,KAAAA,CAAMe,MAAM,CAACyD,UAAU;AAC3C,YAAA;YAEA,OAAO;AACL,gBAAA,GAAG9C,IAAI;gBACP4B,KAAAA,EAAOtD,KAAAA,CAAMe,MAAM,CAACwC,UAAU;gBAC9BvB,UAAAA,EAAYhC,KAAAA,CAAM4B,MAAM,CAAC,CAAA,CAAE;AAC3BU,gBAAAA,eAAAA;AACAW,gBAAAA,YAAAA,EAAcjD,MAAMiD,YAAY;gBAChC,UAAA,EAAY;oBACVX,eAAAA,EAAiBtC,KAAAA,CAAMe,MAAM,CAACyD;AAChC;AACF,aAAA;AACF,QAAA,CAAA;QACAC,WAAAA,EAAa,CAAC/C,QAAkB;AAC9B,gBAAA,GAAGA,IAAI;gBACP4B,KAAAA,EAAOtD,KAAAA,CAAMe,MAAM,CAACC,UAAU;gBAC9B0D,UAAAA,EAAY,CAAA;gBACZC,QAAAA,EAAU,QAAA;gBACVC,YAAAA,EAAc,UAAA;gBACdC,UAAAA,EAAY,QAAA;gBACZC,QAAAA,EAAU;aACZ,CAAA;QACAC,WAAAA,CAAAA,CAAYrD,IAAY,EAAEQ,KAA8B,EAAA;AACtD,YAAA,IAAIoB,KAAAA,GAAQtD,KAAAA,CAAMe,MAAM,CAACwC,UAAU;YAEnC,IAAIrB,KAAAA,CAAMQ,UAAU,EAAE;gBACpBY,KAAAA,GAAQtD,KAAAA,CAAMe,MAAM,CAACC,UAAU;AACjC,YAAA;YAEA,OAAO;AAAE,gBAAA,GAAGU,IAAI;gBAAEgD,UAAAA,EAAY,CAAA;AAAGpB,gBAAAA;AAAM,aAAA;AACzC,QAAA,CAAA;QACA0B,cAAAA,EAAgB,CAACtD,QAAkB;AACjC,gBAAA,GAAGA,IAAI;gBACPuD,MAAAA,EAAQ,SAAA;gBACRtD,OAAAA,EAAS,CAAA;gBACTyC,WAAAA,EAAapE,KAAAA,CAAM4B,MAAM,CAAC,CAAA,CAAE;gBAC5B8C,UAAAA,EAAY,CAAA;gBACZQ,WAAAA,EAAa;aACf;AACF,KAAA;AACF,CAAA;;;;"}
|
|
@@ -9,6 +9,8 @@ import { flattenTree } from './utils/flattenTree.mjs';
|
|
|
9
9
|
import { getOpenValues } from './utils/getOpenValues.mjs';
|
|
10
10
|
import { getValuesToClose } from './utils/getValuesToClose.mjs';
|
|
11
11
|
|
|
12
|
+
const EMPTY_COMPONENTS = {};
|
|
13
|
+
const EMPTY_STYLES = {};
|
|
12
14
|
const hasParent = (option)=>!option.parent;
|
|
13
15
|
const SelectTree = ({ options: defaultOptions, maxDisplayDepth = 5, defaultValue, ...props })=>{
|
|
14
16
|
const flatDefaultOptions = React.useMemo(()=>flattenTree(defaultOptions), [
|
|
@@ -66,7 +68,7 @@ const SelectTree = ({ options: defaultOptions, maxDisplayDepth = 5, defaultValue
|
|
|
66
68
|
...props
|
|
67
69
|
});
|
|
68
70
|
};
|
|
69
|
-
const Select = ({ components =
|
|
71
|
+
const Select = ({ components = EMPTY_COMPONENTS, styles = EMPTY_STYLES, error, ariaErrorMessage, ...props })=>{
|
|
70
72
|
const theme = useTheme();
|
|
71
73
|
const customStyles = getSelectStyles(theme, error);
|
|
72
74
|
return /*#__PURE__*/ jsx(ReactSelect, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTree.mjs","sources":["../../../../../admin/src/legacy/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
|
+
{"version":3,"file":"SelectTree.mjs","sources":["../../../../../admin/src/legacy/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 EMPTY_COMPONENTS: NonNullable<SelectProps['components']> = {};\nconst EMPTY_STYLES: NonNullable<SelectProps['styles']> = {};\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 = EMPTY_COMPONENTS,\n styles = EMPTY_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":["EMPTY_COMPONENTS","EMPTY_STYLES","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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"}
|
|
@@ -14,7 +14,9 @@ require('../../utils/urlYupSchema.js');
|
|
|
14
14
|
var TableRows = require('./TableRows.js');
|
|
15
15
|
|
|
16
16
|
// TODO: find a better naming convention for the file that was an index file before
|
|
17
|
-
const
|
|
17
|
+
const EMPTY_ROWS = [];
|
|
18
|
+
const EMPTY_SELECTED = [];
|
|
19
|
+
const TableList = ({ assetCount = 0, folderCount = 0, indeterminate = false, onChangeSort = null, onChangeFolder = null, onEditAsset = null, onEditFolder = null, onSelectAll, onSelectOne, rows = EMPTY_ROWS, selected = EMPTY_SELECTED, shouldDisableBulkSelect = false, sortQuery = '' })=>{
|
|
18
20
|
const { formatMessage } = reactIntl.useIntl();
|
|
19
21
|
const [sortBy, sortOrder] = sortQuery.split(':');
|
|
20
22
|
const handleClickSort = (isSorted, name)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableList.js","sources":["../../../../../admin/src/legacy/components/TableList/TableList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport {\n Checkbox,\n IconButton,\n Table,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { tableHeaders } from '../../../constants';\nimport { getTrad } from '../../utils';\n\nimport { TableRows } from './TableRows';\n\nimport type { File } from '../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nexport interface FileRow extends File {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface TableListProps {\n isFolderSelectionAllowed?: boolean;\n allowedTypes?: AllowedTypes[];\n assetCount?: number;\n folderCount?: number;\n indeterminate?: boolean;\n onChangeSort?: ((sortQuery: string) => void) | null;\n onChangeFolder?: ((folderId: number, folderPath?: string) => void) | null;\n onEditAsset?: ((asset: FileRow) => void) | null;\n onEditFolder?: ((folder: FolderRow) => void) | null;\n onSelectAll: (checked: boolean | string, rows?: FolderRow[] | FileRow[]) => void;\n onSelectOne: (element: FileRow | FolderRow) => void;\n rows?: FileRow[] | FolderRow[];\n selected?: FileRow[] | FolderRow[];\n shouldDisableBulkSelect?: boolean;\n sortQuery?: string;\n}\n\nexport const TableList = ({\n assetCount = 0,\n folderCount = 0,\n indeterminate = false,\n onChangeSort = null,\n onChangeFolder = null,\n onEditAsset = null,\n onEditFolder = null,\n onSelectAll,\n onSelectOne,\n rows =
|
|
1
|
+
{"version":3,"file":"TableList.js","sources":["../../../../../admin/src/legacy/components/TableList/TableList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport {\n Checkbox,\n IconButton,\n Table,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { tableHeaders } from '../../../constants';\nimport { getTrad } from '../../utils';\n\nimport { TableRows } from './TableRows';\n\nimport type { File } from '../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nconst EMPTY_ROWS: NonNullable<TableListProps['rows']> = [];\nconst EMPTY_SELECTED: NonNullable<TableListProps['selected']> = [];\n\nexport interface FileRow extends File {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface TableListProps {\n isFolderSelectionAllowed?: boolean;\n allowedTypes?: AllowedTypes[];\n assetCount?: number;\n folderCount?: number;\n indeterminate?: boolean;\n onChangeSort?: ((sortQuery: string) => void) | null;\n onChangeFolder?: ((folderId: number, folderPath?: string) => void) | null;\n onEditAsset?: ((asset: FileRow) => void) | null;\n onEditFolder?: ((folder: FolderRow) => void) | null;\n onSelectAll: (checked: boolean | string, rows?: FolderRow[] | FileRow[]) => void;\n onSelectOne: (element: FileRow | FolderRow) => void;\n rows?: FileRow[] | FolderRow[];\n selected?: FileRow[] | FolderRow[];\n shouldDisableBulkSelect?: boolean;\n sortQuery?: string;\n}\n\nexport const TableList = ({\n assetCount = 0,\n folderCount = 0,\n indeterminate = false,\n onChangeSort = null,\n onChangeFolder = null,\n onEditAsset = null,\n onEditFolder = null,\n onSelectAll,\n onSelectOne,\n rows = EMPTY_ROWS,\n selected = EMPTY_SELECTED,\n shouldDisableBulkSelect = false,\n sortQuery = '',\n}: TableListProps) => {\n const { formatMessage } = useIntl();\n const [sortBy, sortOrder] = sortQuery.split(':');\n\n const handleClickSort = (isSorted: boolean, name: string) => {\n const nextSortOrder = isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC';\n const nextSort = `${name}:${nextSortOrder}`;\n\n onChangeSort?.(nextSort);\n };\n\n return (\n <Table colCount={tableHeaders.length + 2} rowCount={assetCount + folderCount + 1}>\n <Thead>\n <Tr>\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n disabled={shouldDisableBulkSelect}\n onCheckedChange={(checked) => onSelectAll(checked, rows)}\n checked={\n indeterminate && !shouldDisableBulkSelect\n ? 'indeterminate'\n : (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n />\n </Th>\n {tableHeaders.map(({ metadatas: { label, isSortable }, name, key }) => {\n const isSorted = sortBy === name;\n const isUp = sortOrder === 'ASC';\n const tableHeaderLabel = formatMessage(label);\n const sortLabel = formatMessage(\n { id: 'list.table.header.sort', defaultMessage: 'Sort on {label}' },\n { label: tableHeaderLabel }\n );\n\n return (\n <Th\n action={\n isSorted && (\n <IconButton\n label={sortLabel}\n onClick={() => handleClickSort(isSorted, name)}\n variant=\"ghost\"\n >\n {isUp ? <CaretUp /> : <CaretDown />}\n </IconButton>\n )\n }\n key={key}\n >\n <Tooltip label={isSortable ? sortLabel : tableHeaderLabel}>\n {isSortable ? (\n <Typography\n onClick={() => handleClickSort(isSorted, name)}\n tag={isSorted ? 'span' : 'button'}\n textColor=\"neutral600\"\n variant=\"sigma\"\n >\n {tableHeaderLabel}\n </Typography>\n ) : (\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n )}\n </Tooltip>\n </Th>\n );\n })}\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('list.table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableRows\n onChangeFolder={onChangeFolder}\n onEditAsset={onEditAsset!}\n onEditFolder={onEditFolder!}\n rows={rows}\n onSelectOne={onSelectOne}\n selected={selected}\n />\n </Table>\n );\n};\n"],"names":["EMPTY_ROWS","EMPTY_SELECTED","TableList","assetCount","folderCount","indeterminate","onChangeSort","onChangeFolder","onEditAsset","onEditFolder","onSelectAll","onSelectOne","rows","selected","shouldDisableBulkSelect","sortQuery","formatMessage","useIntl","sortBy","sortOrder","split","handleClickSort","isSorted","name","nextSortOrder","nextSort","_jsxs","Table","colCount","tableHeaders","length","rowCount","_jsx","Thead","Tr","Th","Checkbox","aria-label","id","getTrad","defaultMessage","disabled","onCheckedChange","checked","map","metadatas","label","isSortable","key","isUp","tableHeaderLabel","sortLabel","action","IconButton","onClick","variant","CaretUp","CaretDown","Tooltip","Typography","tag","textColor","VisuallyHidden","TableRows"],"mappings":"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"}
|
|
@@ -12,7 +12,9 @@ import '../../utils/urlYupSchema.mjs';
|
|
|
12
12
|
import { TableRows } from './TableRows.mjs';
|
|
13
13
|
|
|
14
14
|
// TODO: find a better naming convention for the file that was an index file before
|
|
15
|
-
const
|
|
15
|
+
const EMPTY_ROWS = [];
|
|
16
|
+
const EMPTY_SELECTED = [];
|
|
17
|
+
const TableList = ({ assetCount = 0, folderCount = 0, indeterminate = false, onChangeSort = null, onChangeFolder = null, onEditAsset = null, onEditFolder = null, onSelectAll, onSelectOne, rows = EMPTY_ROWS, selected = EMPTY_SELECTED, shouldDisableBulkSelect = false, sortQuery = '' })=>{
|
|
16
18
|
const { formatMessage } = useIntl();
|
|
17
19
|
const [sortBy, sortOrder] = sortQuery.split(':');
|
|
18
20
|
const handleClickSort = (isSorted, name)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableList.mjs","sources":["../../../../../admin/src/legacy/components/TableList/TableList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport {\n Checkbox,\n IconButton,\n Table,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { tableHeaders } from '../../../constants';\nimport { getTrad } from '../../utils';\n\nimport { TableRows } from './TableRows';\n\nimport type { File } from '../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nexport interface FileRow extends File {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface TableListProps {\n isFolderSelectionAllowed?: boolean;\n allowedTypes?: AllowedTypes[];\n assetCount?: number;\n folderCount?: number;\n indeterminate?: boolean;\n onChangeSort?: ((sortQuery: string) => void) | null;\n onChangeFolder?: ((folderId: number, folderPath?: string) => void) | null;\n onEditAsset?: ((asset: FileRow) => void) | null;\n onEditFolder?: ((folder: FolderRow) => void) | null;\n onSelectAll: (checked: boolean | string, rows?: FolderRow[] | FileRow[]) => void;\n onSelectOne: (element: FileRow | FolderRow) => void;\n rows?: FileRow[] | FolderRow[];\n selected?: FileRow[] | FolderRow[];\n shouldDisableBulkSelect?: boolean;\n sortQuery?: string;\n}\n\nexport const TableList = ({\n assetCount = 0,\n folderCount = 0,\n indeterminate = false,\n onChangeSort = null,\n onChangeFolder = null,\n onEditAsset = null,\n onEditFolder = null,\n onSelectAll,\n onSelectOne,\n rows =
|
|
1
|
+
{"version":3,"file":"TableList.mjs","sources":["../../../../../admin/src/legacy/components/TableList/TableList.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport {\n Checkbox,\n IconButton,\n Table,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { tableHeaders } from '../../../constants';\nimport { getTrad } from '../../utils';\n\nimport { TableRows } from './TableRows';\n\nimport type { File } from '../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nconst EMPTY_ROWS: NonNullable<TableListProps['rows']> = [];\nconst EMPTY_SELECTED: NonNullable<TableListProps['selected']> = [];\n\nexport interface FileRow extends File {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface TableListProps {\n isFolderSelectionAllowed?: boolean;\n allowedTypes?: AllowedTypes[];\n assetCount?: number;\n folderCount?: number;\n indeterminate?: boolean;\n onChangeSort?: ((sortQuery: string) => void) | null;\n onChangeFolder?: ((folderId: number, folderPath?: string) => void) | null;\n onEditAsset?: ((asset: FileRow) => void) | null;\n onEditFolder?: ((folder: FolderRow) => void) | null;\n onSelectAll: (checked: boolean | string, rows?: FolderRow[] | FileRow[]) => void;\n onSelectOne: (element: FileRow | FolderRow) => void;\n rows?: FileRow[] | FolderRow[];\n selected?: FileRow[] | FolderRow[];\n shouldDisableBulkSelect?: boolean;\n sortQuery?: string;\n}\n\nexport const TableList = ({\n assetCount = 0,\n folderCount = 0,\n indeterminate = false,\n onChangeSort = null,\n onChangeFolder = null,\n onEditAsset = null,\n onEditFolder = null,\n onSelectAll,\n onSelectOne,\n rows = EMPTY_ROWS,\n selected = EMPTY_SELECTED,\n shouldDisableBulkSelect = false,\n sortQuery = '',\n}: TableListProps) => {\n const { formatMessage } = useIntl();\n const [sortBy, sortOrder] = sortQuery.split(':');\n\n const handleClickSort = (isSorted: boolean, name: string) => {\n const nextSortOrder = isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC';\n const nextSort = `${name}:${nextSortOrder}`;\n\n onChangeSort?.(nextSort);\n };\n\n return (\n <Table colCount={tableHeaders.length + 2} rowCount={assetCount + folderCount + 1}>\n <Thead>\n <Tr>\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n disabled={shouldDisableBulkSelect}\n onCheckedChange={(checked) => onSelectAll(checked, rows)}\n checked={\n indeterminate && !shouldDisableBulkSelect\n ? 'indeterminate'\n : (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n />\n </Th>\n {tableHeaders.map(({ metadatas: { label, isSortable }, name, key }) => {\n const isSorted = sortBy === name;\n const isUp = sortOrder === 'ASC';\n const tableHeaderLabel = formatMessage(label);\n const sortLabel = formatMessage(\n { id: 'list.table.header.sort', defaultMessage: 'Sort on {label}' },\n { label: tableHeaderLabel }\n );\n\n return (\n <Th\n action={\n isSorted && (\n <IconButton\n label={sortLabel}\n onClick={() => handleClickSort(isSorted, name)}\n variant=\"ghost\"\n >\n {isUp ? <CaretUp /> : <CaretDown />}\n </IconButton>\n )\n }\n key={key}\n >\n <Tooltip label={isSortable ? sortLabel : tableHeaderLabel}>\n {isSortable ? (\n <Typography\n onClick={() => handleClickSort(isSorted, name)}\n tag={isSorted ? 'span' : 'button'}\n textColor=\"neutral600\"\n variant=\"sigma\"\n >\n {tableHeaderLabel}\n </Typography>\n ) : (\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n )}\n </Tooltip>\n </Th>\n );\n })}\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('list.table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableRows\n onChangeFolder={onChangeFolder}\n onEditAsset={onEditAsset!}\n onEditFolder={onEditFolder!}\n rows={rows}\n onSelectOne={onSelectOne}\n selected={selected}\n />\n </Table>\n );\n};\n"],"names":["EMPTY_ROWS","EMPTY_SELECTED","TableList","assetCount","folderCount","indeterminate","onChangeSort","onChangeFolder","onEditAsset","onEditFolder","onSelectAll","onSelectOne","rows","selected","shouldDisableBulkSelect","sortQuery","formatMessage","useIntl","sortBy","sortOrder","split","handleClickSort","isSorted","name","nextSortOrder","nextSort","_jsxs","Table","colCount","tableHeaders","length","rowCount","_jsx","Thead","Tr","Th","Checkbox","aria-label","id","getTrad","defaultMessage","disabled","onCheckedChange","checked","map","metadatas","label","isSortable","key","isUp","tableHeaderLabel","sortLabel","action","IconButton","onClick","variant","CaretUp","CaretDown","Tooltip","Typography","tag","textColor","VisuallyHidden","TableRows"],"mappings":"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"}
|
|
@@ -14,7 +14,9 @@ require('qs');
|
|
|
14
14
|
require('../../utils/urlYupSchema.js');
|
|
15
15
|
var CellContent = require('./CellContent.js');
|
|
16
16
|
|
|
17
|
-
const
|
|
17
|
+
const EMPTY_ROWS = [];
|
|
18
|
+
const EMPTY_SELECTED = [];
|
|
19
|
+
const TableRows = ({ onChangeFolder = null, onEditAsset, onEditFolder, onSelectOne, rows = EMPTY_ROWS, selected = EMPTY_SELECTED })=>{
|
|
18
20
|
const { formatMessage } = reactIntl.useIntl();
|
|
19
21
|
const handleRowClickFn = (element, id, path, elementType)=>{
|
|
20
22
|
if (elementType === 'asset') {
|