@strapi/upload 5.17.0-beta.0 → 5.18.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.
@@ -77,6 +77,15 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
77
77
  name: '',
78
78
  parent: null
79
79
  };
80
+ const formRef = React__namespace.useRef(null);
81
+ const handleKeyDown = (handleSubmit)=>(event)=>{
82
+ if (event.key === 'Enter') {
83
+ if (event.target instanceof HTMLInputElement) {
84
+ handleSubmit(event);
85
+ event.preventDefault();
86
+ }
87
+ }
88
+ };
80
89
  const handleSubmit = async (values, { setErrors })=>{
81
90
  try {
82
91
  await editFolder({
@@ -159,8 +168,10 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
159
168
  validateOnChange: false,
160
169
  onSubmit: handleSubmit,
161
170
  initialValues: initialFormData,
162
- children: ({ values, errors, handleChange, setFieldValue })=>/*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
171
+ children: ({ values, errors, handleChange, setFieldValue, handleSubmit })=>/*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
163
172
  noValidate: true,
173
+ ref: formRef,
174
+ onKeyDown: handleKeyDown(handleSubmit),
164
175
  children: [
165
176
  /*#__PURE__*/ jsxRuntime.jsx(ModalHeader.EditFolderModalHeader, {
166
177
  isEditing: isEditing
@@ -214,7 +225,7 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
214
225
  defaultMessage: 'Name'
215
226
  })
216
227
  }),
217
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
228
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Input, {
218
229
  value: values.name,
219
230
  onChange: handleChange,
220
231
  disabled: formDisabled
@@ -1 +1 @@
1
- {"version":3,"file":"EditFolderDialog.js","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Field,\n Flex,\n Grid,\n Loader,\n Modal,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue }) => (\n <Form noValidate>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","handleSubmit","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","key","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","TextInput","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
1
+ {"version":3,"file":"EditFolderDialog.js","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Field, Flex, Grid, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const handleKeyDown =\n (handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void) =>\n (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLInputElement) {\n handleSubmit(event);\n event.preventDefault();\n }\n }\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue, handleSubmit }) => (\n <Form noValidate ref={formRef} onKeyDown={handleKeyDown(handleSubmit)}>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <Field.Input\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","formRef","useRef","handleKeyDown","handleSubmit","event","key","target","HTMLInputElement","preventDefault","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","ref","onKeyDown","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","Input","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useTracking, useNotification } from '@strapi/admin/strapi-admin';
4
- import { Modal, Flex, Loader, Grid, Field, TextInput, Typography, Button } from '@strapi/design-system';
4
+ import { Modal, Flex, Loader, Grid, Field, Typography, Button } from '@strapi/design-system';
5
5
  import { Formik, Form } from 'formik';
6
6
  import isEmpty from 'lodash/isEmpty';
7
7
  import { useIntl } from 'react-intl';
@@ -55,6 +55,15 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
55
55
  name: '',
56
56
  parent: null
57
57
  };
58
+ const formRef = React.useRef(null);
59
+ const handleKeyDown = (handleSubmit)=>(event)=>{
60
+ if (event.key === 'Enter') {
61
+ if (event.target instanceof HTMLInputElement) {
62
+ handleSubmit(event);
63
+ event.preventDefault();
64
+ }
65
+ }
66
+ };
58
67
  const handleSubmit = async (values, { setErrors })=>{
59
68
  try {
60
69
  await editFolder({
@@ -137,8 +146,10 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
137
146
  validateOnChange: false,
138
147
  onSubmit: handleSubmit,
139
148
  initialValues: initialFormData,
140
- children: ({ values, errors, handleChange, setFieldValue })=>/*#__PURE__*/ jsxs(Form, {
149
+ children: ({ values, errors, handleChange, setFieldValue, handleSubmit })=>/*#__PURE__*/ jsxs(Form, {
141
150
  noValidate: true,
151
+ ref: formRef,
152
+ onKeyDown: handleKeyDown(handleSubmit),
142
153
  children: [
143
154
  /*#__PURE__*/ jsx(EditFolderModalHeader, {
144
155
  isEditing: isEditing
@@ -192,7 +203,7 @@ const EditFolderContent = ({ onClose, folder, location, parentFolderId })=>{
192
203
  defaultMessage: 'Name'
193
204
  })
194
205
  }),
195
- /*#__PURE__*/ jsx(TextInput, {
206
+ /*#__PURE__*/ jsx(Field.Input, {
196
207
  value: values.name,
197
208
  onChange: handleChange,
198
209
  disabled: formDisabled
@@ -1 +1 @@
1
- {"version":3,"file":"EditFolderDialog.mjs","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Field,\n Flex,\n Grid,\n Loader,\n Modal,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue }) => (\n <Form noValidate>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","handleSubmit","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","key","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","TextInput","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
1
+ {"version":3,"file":"EditFolderDialog.mjs","sources":["../../../../admin/src/components/EditFolderDialog/EditFolderDialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Field, Flex, Grid, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, Formik, FormikErrors } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { useBulkRemove } from '../../hooks/useBulkRemove';\nimport { useEditFolder } from '../../hooks/useEditFolder';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { findRecursiveFolderByValue, getTrad, getAPIInnerErrors } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { EditFolderModalHeader } from './ModalHeader/ModalHeader';\nimport { RemoveFolderDialog } from './RemoveFolderDialog';\n\nimport type { FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { FetchError } from '@strapi/admin/strapi-admin';\n\nconst folderSchema = yup.object({\n name: yup.string().required(),\n parent: yup\n .object({\n label: yup.string(),\n value: yup.number().nullable(true),\n })\n .nullable(true),\n});\n\ninterface ValuesSubmit {\n name: string;\n parent: null | { label?: string; value?: number };\n}\n\nexport interface EditFolderDialogProps {\n parentFolderId?: string | number | null;\n location?: string;\n folder?: FolderDefinition;\n open?: boolean;\n onClose: (payload?: { created?: boolean | undefined } | boolean) => void;\n}\n\nexport const EditFolderContent = ({\n onClose,\n folder,\n location,\n parentFolderId,\n}: EditFolderDialogProps) => {\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n const { canCreate, isLoading: isLoadingPermissions, canUpdate } = useMediaLibraryPermissions();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { editFolder, isLoading: isEditFolderLoading } = useEditFolder();\n const { remove } = useBulkRemove();\n const { toggleNotification } = useNotification();\n const isLoading = isLoadingPermissions || folderStructureIsLoading;\n const isEditing = !!folder;\n const formDisabled = (folder && !canUpdate) || (!folder && !canCreate);\n const initialFormData: ValuesSubmit = !folderStructureIsLoading\n ? {\n name: folder?.name ?? '',\n parent: {\n /* ideally we would use folderStructure[0].value, but since it is null\n react complains about rendering null as field value */\n value: parentFolderId ? parseInt(parentFolderId.toString(), 10) : undefined,\n label: parentFolderId\n ? folderStructure &&\n findRecursiveFolderByValue(folderStructure, parseInt(parentFolderId.toString(), 10))\n ?.label\n : folderStructure?.[0].label,\n },\n }\n : {\n name: '',\n parent: null,\n };\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const handleKeyDown =\n (handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void) =>\n (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLInputElement) {\n handleSubmit(event);\n event.preventDefault();\n }\n }\n };\n\n const handleSubmit = async (\n values: ValuesSubmit,\n { setErrors }: { setErrors: (errors: FormikErrors<ValuesSubmit>) => void }\n ) => {\n try {\n await editFolder(\n {\n ...values,\n parent: values.parent?.value ?? null,\n },\n folder?.id\n );\n\n toggleNotification({\n type: 'success',\n message: isEditing\n ? formatMessage({\n id: getTrad('modal.folder-notification-edited-success'),\n defaultMessage: 'Folder successfully edited',\n })\n : formatMessage({\n id: getTrad('modal.folder-notification-created-success'),\n defaultMessage: 'Folder successfully created',\n }),\n });\n\n if (isEditing) {\n const didChangeLocation = parentFolderId\n ? parseInt(parentFolderId.toString(), 10) !== values.parent?.value\n : parentFolderId === null && !!values.parent?.value;\n trackUsage('didEditMediaLibraryElements', {\n location,\n type: 'folder',\n changeLocation: didChangeLocation,\n });\n } else {\n trackUsage('didAddMediaLibraryFolders', { location: location! });\n }\n\n onClose({ created: true });\n } catch (err) {\n const errors = getAPIInnerErrors(err as FetchError, { getTrad });\n const formikErrors = Object.entries(errors!).reduce(\n (acc: Record<string, string>, [key, error]) => {\n acc[key] = error.defaultMessage;\n\n return acc;\n },\n {}\n );\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleDelete = async () => {\n if (folder) {\n await remove([folder]);\n }\n\n setShowConfirmDialog(false);\n onClose();\n };\n\n if (isLoading) {\n return (\n <>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </Modal.Body>\n </>\n );\n }\n\n return (\n <>\n <Formik\n validationSchema={folderSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue, handleSubmit }) => (\n <Form noValidate ref={formRef} onKeyDown={handleKeyDown(handleSubmit)}>\n <EditFolderModalHeader isEditing={isEditing} />\n <Modal.Body>\n <Grid.Root gap={4}>\n {isEditing && (\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.elements'),\n defaultMessage: 'Elements',\n }),\n value: formatMessage(\n {\n id: getTrad('modal.folder.elements.count'),\n defaultMessage: '{folderCount} folders, {assetCount} assets',\n },\n {\n assetCount: folder?.files?.count ?? 0,\n folderCount: folder?.children?.count ?? 0,\n }\n ),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.folder.create.creation-date'),\n defaultMessage: 'Creation Date',\n }),\n value: formatDate(new Date(folder.createdAt!)),\n },\n ]}\n />\n </Grid.Item>\n )}\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={typeof errors.name === 'string' ? errors.name : undefined}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-name'),\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <Field.Input\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-parent\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n isDisabled={formDisabled}\n defaultValue={values.parent!}\n name=\"parent\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-parent\"\n disabled={formDisabled}\n error={typeof errors.parent === 'string' ? errors.parent : undefined}\n ariaErrorMessage=\"folder-parent-error\"\n />\n\n {errors.parent && (\n <Typography\n variant=\"pi\"\n tag=\"p\"\n id=\"folder-parent-error\"\n textColor=\"danger600\"\n >\n {typeof errors.parent === 'string' ? errors.parent : undefined}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => onClose()} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {isEditing && canUpdate && (\n <Button\n type=\"button\"\n variant=\"danger-light\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"delete\"\n disabled={!canUpdate || isEditFolderLoading}\n >\n {formatMessage({\n id: getTrad('modal.folder.create.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Button>\n )}\n\n <Button\n name=\"submit\"\n loading={isEditFolderLoading}\n disabled={formDisabled}\n type=\"submit\"\n >\n {formatMessage(\n isEditing\n ? { id: getTrad('modal.folder.edit.submit'), defaultMessage: 'Save' }\n : { id: getTrad('modal.folder.create.submit'), defaultMessage: 'Create' }\n )}\n </Button>\n </Flex>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n <RemoveFolderDialog\n open={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleDelete}\n />\n </>\n );\n};\n\nexport const EditFolderDialog = ({ open, onClose, ...restProps }: EditFolderDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditFolderContent {...restProps} onClose={onClose} open={open} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["folderSchema","yup","object","name","string","required","parent","label","value","number","nullable","EditFolderContent","onClose","folder","location","parentFolderId","data","folderStructure","isLoading","folderStructureIsLoading","useFolderStructure","enabled","canCreate","isLoadingPermissions","canUpdate","useMediaLibraryPermissions","showConfirmDialog","setShowConfirmDialog","React","useState","formatMessage","formatDate","useIntl","trackUsage","useTracking","editFolder","isEditFolderLoading","useEditFolder","remove","useBulkRemove","toggleNotification","useNotification","isEditing","formDisabled","initialFormData","parseInt","toString","undefined","findRecursiveFolderByValue","formRef","useRef","handleKeyDown","handleSubmit","event","key","target","HTMLInputElement","preventDefault","values","setErrors","id","type","message","getTrad","defaultMessage","didChangeLocation","changeLocation","created","err","errors","getAPIInnerErrors","formikErrors","Object","entries","reduce","acc","error","isEmpty","handleDelete","_jsxs","_Fragment","_jsx","EditFolderModalHeader","Modal","Body","Flex","justifyContent","paddingTop","paddingBottom","Loader","Formik","validationSchema","validateOnChange","onSubmit","initialValues","handleChange","setFieldValue","Form","noValidate","ref","onKeyDown","Grid","Root","gap","Item","xs","col","direction","alignItems","ContextInfo","blocks","assetCount","files","count","folderCount","children","Date","createdAt","Field","Label","Input","onChange","disabled","Error","SelectTree","options","isDisabled","defaultValue","menuPortalTarget","document","querySelector","inputId","ariaErrorMessage","Typography","variant","tag","textColor","Footer","Button","onClick","loading","RemoveFolderDialog","open","onConfirm","EditFolderDialog","restProps","onOpenChange","Content"],"mappings":"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"}
@@ -51,6 +51,7 @@ const PreviewCell = ({ type, content })=>{
51
51
  });
52
52
  }
53
53
  const { alternativeText, ext, formats, mime, name, url } = content;
54
+ const fileExtension = getFileExtension.getFileExtension(ext);
54
55
  if (mime?.includes(constants.AssetType.Image)) {
55
56
  const mediaURL = prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(url);
56
57
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Avatar.Item, {
@@ -69,12 +70,40 @@ const PreviewCell = ({ type, content })=>{
69
70
  })
70
71
  });
71
72
  }
72
- return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
73
- background: "secondary100",
74
- color: "secondary600",
73
+ if (mime?.includes(constants.AssetType.Audio)) {
74
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
75
+ background: "neutral100",
76
+ borderRadius: "100%",
77
+ color: "neutral500",
78
+ width: "3.2rem",
79
+ height: "3.2rem",
80
+ justifyContent: "center",
81
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.VolumeUp, {
82
+ width: 16,
83
+ height: 16
84
+ })
85
+ });
86
+ }
87
+ const DOC_ICON_MAP = {
88
+ pdf: icons.FilePdf,
89
+ csv: icons.FileCsv,
90
+ xls: icons.FileXls,
91
+ zip: icons.FileZip
92
+ };
93
+ const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || icons.File : icons.File;
94
+ const testId = fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';
95
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
96
+ justifyContent: "center",
97
+ borderRadius: "100%",
98
+ background: "neutral100",
99
+ color: "neutral500",
75
100
  width: "3.2rem",
76
101
  height: "3.2rem",
77
- children: getFileExtension.getFileExtension(ext)
102
+ children: /*#__PURE__*/ jsxRuntime.jsx(DocIcon, {
103
+ width: 16,
104
+ height: 16,
105
+ "data-testid": testId
106
+ })
78
107
  });
79
108
  };
80
109
 
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewCell.js","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport { Folder } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../constants';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, mime, name, url } = content;\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n return (\n <Box background=\"secondary100\" color=\"secondary600\" width=\"3.2rem\" height=\"3.2rem\">\n {getFileExtension(ext)}\n </Box>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","mime","name","url","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","preview","fallback","Video","VideoPreview","createAssetUrl","color","getFileExtension"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,MAAMA,mBAAAA,GAAsBC,uBAAOC,CAAAA,gBAAAA,CAAI;;WAE5B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;YAChC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;;;;AAU7C,CAAC;MAOYC,WAAc,GAAA,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAoB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,IAAIH,SAAS,QAAU,EAAA;AACrB,QAAA,qBACEI,cAACC,CAAAA,iBAAAA,EAAAA;YACCC,cAAe,EAAA,QAAA;YACfC,UAAW,EAAA,cAAA;YACXC,KAAM,EAAA,QAAA;YACNC,MAAO,EAAA,QAAA;YACPC,YAAa,EAAA,KAAA;AAEb,YAAA,QAAA,gBAAAN,cAACO,CAAAA,YAAAA,EAAAA;AACCC,gBAAAA,YAAAA,EAAYV,aAAc,CAAA;AACxBW,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,kCAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAC,IAAK,EAAA,cAAA;gBACLR,KAAM,EAAA,QAAA;gBACNC,MAAO,EAAA;;;AAIf;AAEA,IAAA,MAAM,EAAEQ,eAAe,EAAEC,GAAG,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAE,GAAGrB,OAAAA;AAE3D,IAAA,IAAImB,IAAMG,EAAAA,QAAAA,CAASC,mBAAUC,CAAAA,KAAK,CAAG,EAAA;AACnC,QAAA,MAAMC,QACJC,GAAAA,uDAAAA,CAA4BR,OAASS,EAAAA,SAAAA,EAAWN,QAAQK,uDAA4BL,CAAAA,GAAAA,CAAAA;QAEtF,qBACElB,cAAA,CAACyB,oBAAOC,IAAI,EAAA;YACVC,GAAKL,EAAAA,QAAAA;AACLM,YAAAA,GAAAA,EAAKf,eAAmBgB,IAAAA,SAAAA;YACxBC,OAAO,EAAA,IAAA;YACPC,QAAUlB,EAAAA;;AAGhB;AAEA,IAAA,IAAIG,IAAMG,EAAAA,QAAAA,CAASC,mBAAUY,CAAAA,KAAK,CAAG,EAAA;AACnC,QAAA,qBACEhC,cAACV,CAAAA,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAU,cAACiC,CAAAA,yBAAAA,EAAAA;gBACCf,GAAKgB,EAAAA,6BAAAA,CAAerC,SAAS,IAAS,CAAA,IAAA,EAAA;gBACtCmB,IAAMA,EAAAA,IAAAA;AACNY,gBAAAA,GAAAA,EAAKf,eAAmBI,IAAAA;;;AAIhC;AAEA,IAAA,qBACEjB,cAACR,CAAAA,gBAAAA,EAAAA;QAAIW,UAAW,EAAA,cAAA;QAAegC,KAAM,EAAA,cAAA;QAAe/B,KAAM,EAAA,QAAA;QAASC,MAAO,EAAA,QAAA;kBACvE+B,iCAAiBtB,CAAAA,GAAAA;;AAGxB;;;;"}
1
+ {"version":3,"file":"PreviewCell.js","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Folder,\n VolumeUp,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../constants';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, mime, name, url } = content;\n\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (mime?.includes(AssetType.Audio)) {\n return (\n <Flex\n background=\"neutral100\"\n borderRadius=\"100%\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n justifyContent=\"center\"\n >\n <VolumeUp width={16} height={16} />\n </Flex>\n );\n }\n\n type IconComponent = typeof FileIcon;\n const DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n };\n\n const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n const testId =\n fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';\n\n return (\n <Flex\n justifyContent=\"center\"\n borderRadius=\"100%\"\n background=\"neutral100\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n >\n <DocIcon width={16} height={16} data-testid={testId} />\n </Flex>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","mime","name","url","fileExtension","getFileExtension","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","preview","fallback","Video","VideoPreview","createAssetUrl","Audio","color","VolumeUp","DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","DocIcon","FileIcon","testId","data-testid"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Box, Flex, Avatar } from '@strapi/design-system';
3
- import { Folder } from '@strapi/icons';
3
+ import { Folder, VolumeUp, File, FilePdf, FileCsv, FileXls, FileZip } from '@strapi/icons';
4
4
  import { useIntl } from 'react-intl';
5
5
  import { styled } from 'styled-components';
6
6
  import { AssetType } from '../../constants.mjs';
@@ -49,6 +49,7 @@ const PreviewCell = ({ type, content })=>{
49
49
  });
50
50
  }
51
51
  const { alternativeText, ext, formats, mime, name, url } = content;
52
+ const fileExtension = getFileExtension(ext);
52
53
  if (mime?.includes(AssetType.Image)) {
53
54
  const mediaURL = prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);
54
55
  return /*#__PURE__*/ jsx(Avatar.Item, {
@@ -67,12 +68,40 @@ const PreviewCell = ({ type, content })=>{
67
68
  })
68
69
  });
69
70
  }
70
- return /*#__PURE__*/ jsx(Box, {
71
- background: "secondary100",
72
- color: "secondary600",
71
+ if (mime?.includes(AssetType.Audio)) {
72
+ return /*#__PURE__*/ jsx(Flex, {
73
+ background: "neutral100",
74
+ borderRadius: "100%",
75
+ color: "neutral500",
76
+ width: "3.2rem",
77
+ height: "3.2rem",
78
+ justifyContent: "center",
79
+ children: /*#__PURE__*/ jsx(VolumeUp, {
80
+ width: 16,
81
+ height: 16
82
+ })
83
+ });
84
+ }
85
+ const DOC_ICON_MAP = {
86
+ pdf: FilePdf,
87
+ csv: FileCsv,
88
+ xls: FileXls,
89
+ zip: FileZip
90
+ };
91
+ const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || File : File;
92
+ const testId = fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';
93
+ return /*#__PURE__*/ jsx(Flex, {
94
+ justifyContent: "center",
95
+ borderRadius: "100%",
96
+ background: "neutral100",
97
+ color: "neutral500",
73
98
  width: "3.2rem",
74
99
  height: "3.2rem",
75
- children: getFileExtension(ext)
100
+ children: /*#__PURE__*/ jsx(DocIcon, {
101
+ width: 16,
102
+ height: 16,
103
+ "data-testid": testId
104
+ })
76
105
  });
77
106
  };
78
107
 
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewCell.mjs","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport { Folder } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../constants';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, mime, name, url } = content;\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n return (\n <Box background=\"secondary100\" color=\"secondary600\" width=\"3.2rem\" height=\"3.2rem\">\n {getFileExtension(ext)}\n </Box>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","mime","name","url","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","preview","fallback","Video","VideoPreview","createAssetUrl","color","getFileExtension"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAMA,mBAAAA,GAAsBC,MAAOC,CAAAA,GAAAA,CAAI;;WAE5B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;YAChC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;;;;AAU7C,CAAC;MAOYC,WAAc,GAAA,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAoB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,IAAIH,SAAS,QAAU,EAAA;AACrB,QAAA,qBACEI,GAACC,CAAAA,IAAAA,EAAAA;YACCC,cAAe,EAAA,QAAA;YACfC,UAAW,EAAA,cAAA;YACXC,KAAM,EAAA,QAAA;YACNC,MAAO,EAAA,QAAA;YACPC,YAAa,EAAA,KAAA;AAEb,YAAA,QAAA,gBAAAN,GAACO,CAAAA,MAAAA,EAAAA;AACCC,gBAAAA,YAAAA,EAAYV,aAAc,CAAA;AACxBW,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,kCAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAC,IAAK,EAAA,cAAA;gBACLR,KAAM,EAAA,QAAA;gBACNC,MAAO,EAAA;;;AAIf;AAEA,IAAA,MAAM,EAAEQ,eAAe,EAAEC,GAAG,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAE,GAAGrB,OAAAA;AAE3D,IAAA,IAAImB,IAAMG,EAAAA,QAAAA,CAASC,SAAUC,CAAAA,KAAK,CAAG,EAAA;AACnC,QAAA,MAAMC,QACJC,GAAAA,2BAAAA,CAA4BR,OAASS,EAAAA,SAAAA,EAAWN,QAAQK,2BAA4BL,CAAAA,GAAAA,CAAAA;QAEtF,qBACElB,GAAA,CAACyB,OAAOC,IAAI,EAAA;YACVC,GAAKL,EAAAA,QAAAA;AACLM,YAAAA,GAAAA,EAAKf,eAAmBgB,IAAAA,SAAAA;YACxBC,OAAO,EAAA,IAAA;YACPC,QAAUlB,EAAAA;;AAGhB;AAEA,IAAA,IAAIG,IAAMG,EAAAA,QAAAA,CAASC,SAAUY,CAAAA,KAAK,CAAG,EAAA;AACnC,QAAA,qBACEhC,GAACV,CAAAA,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAU,GAACiC,CAAAA,YAAAA,EAAAA;gBACCf,GAAKgB,EAAAA,cAAAA,CAAerC,SAAS,IAAS,CAAA,IAAA,EAAA;gBACtCmB,IAAMA,EAAAA,IAAAA;AACNY,gBAAAA,GAAAA,EAAKf,eAAmBI,IAAAA;;;AAIhC;AAEA,IAAA,qBACEjB,GAACR,CAAAA,GAAAA,EAAAA;QAAIW,UAAW,EAAA,cAAA;QAAegC,KAAM,EAAA,cAAA;QAAe/B,KAAM,EAAA,QAAA;QAASC,MAAO,EAAA,QAAA;kBACvE+B,gBAAiBtB,CAAAA,GAAAA;;AAGxB;;;;"}
1
+ {"version":3,"file":"PreviewCell.mjs","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Folder,\n VolumeUp,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../constants';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, mime, name, url } = content;\n\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (mime?.includes(AssetType.Audio)) {\n return (\n <Flex\n background=\"neutral100\"\n borderRadius=\"100%\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n justifyContent=\"center\"\n >\n <VolumeUp width={16} height={16} />\n </Flex>\n );\n }\n\n type IconComponent = typeof FileIcon;\n const DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n };\n\n const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n const testId =\n fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';\n\n return (\n <Flex\n justifyContent=\"center\"\n borderRadius=\"100%\"\n background=\"neutral100\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n >\n <DocIcon width={16} height={16} data-testid={testId} />\n </Flex>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","mime","name","url","fileExtension","getFileExtension","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","preview","fallback","Video","VideoPreview","createAssetUrl","Audio","color","VolumeUp","DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","DocIcon","FileIcon","testId","data-testid"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/upload";
6
- var version = "5.16.0";
6
+ var version = "5.18.0";
7
7
  var description = "Makes it easy to upload images and files to your Strapi Application.";
8
8
  var license = "SEE LICENSE IN LICENSE";
9
9
  var author = {
@@ -64,10 +64,10 @@ var scripts = {
64
64
  };
65
65
  var dependencies = {
66
66
  "@mux/mux-player-react": "3.1.0",
67
- "@strapi/design-system": "2.0.0-rc.26",
68
- "@strapi/icons": "2.0.0-rc.26",
69
- "@strapi/provider-upload-local": "5.16.0",
70
- "@strapi/utils": "5.16.0",
67
+ "@strapi/design-system": "2.0.0-rc.28",
68
+ "@strapi/icons": "2.0.0-rc.28",
69
+ "@strapi/provider-upload-local": "5.18.0",
70
+ "@strapi/utils": "5.18.0",
71
71
  "byte-size": "8.1.1",
72
72
  cropperjs: "1.6.1",
73
73
  "date-fns": "2.30.0",
@@ -89,8 +89,8 @@ var dependencies = {
89
89
  yup: "0.32.9"
90
90
  };
91
91
  var devDependencies = {
92
- "@strapi/admin": "5.16.0",
93
- "@strapi/types": "5.16.0",
92
+ "@strapi/admin": "5.18.0",
93
+ "@strapi/types": "5.18.0",
94
94
  "@testing-library/dom": "10.1.0",
95
95
  "@testing-library/react": "15.0.7",
96
96
  "@testing-library/user-event": "14.5.2",
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/upload";
2
- var version = "5.16.0";
2
+ var version = "5.18.0";
3
3
  var description = "Makes it easy to upload images and files to your Strapi Application.";
4
4
  var license = "SEE LICENSE IN LICENSE";
5
5
  var author = {
@@ -60,10 +60,10 @@ var scripts = {
60
60
  };
61
61
  var dependencies = {
62
62
  "@mux/mux-player-react": "3.1.0",
63
- "@strapi/design-system": "2.0.0-rc.26",
64
- "@strapi/icons": "2.0.0-rc.26",
65
- "@strapi/provider-upload-local": "5.16.0",
66
- "@strapi/utils": "5.16.0",
63
+ "@strapi/design-system": "2.0.0-rc.28",
64
+ "@strapi/icons": "2.0.0-rc.28",
65
+ "@strapi/provider-upload-local": "5.18.0",
66
+ "@strapi/utils": "5.18.0",
67
67
  "byte-size": "8.1.1",
68
68
  cropperjs: "1.6.1",
69
69
  "date-fns": "2.30.0",
@@ -85,8 +85,8 @@ var dependencies = {
85
85
  yup: "0.32.9"
86
86
  };
87
87
  var devDependencies = {
88
- "@strapi/admin": "5.16.0",
89
- "@strapi/types": "5.16.0",
88
+ "@strapi/admin": "5.18.0",
89
+ "@strapi/types": "5.18.0",
90
90
  "@testing-library/dom": "10.1.0",
91
91
  "@testing-library/react": "15.0.7",
92
92
  "@testing-library/user-event": "14.5.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/upload",
3
- "version": "5.17.0-beta.0",
3
+ "version": "5.18.0",
4
4
  "description": "Makes it easy to upload images and files to your Strapi Application.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": {
@@ -61,10 +61,10 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "@mux/mux-player-react": "3.1.0",
64
- "@strapi/design-system": "2.0.0-rc.26",
65
- "@strapi/icons": "2.0.0-rc.26",
66
- "@strapi/provider-upload-local": "5.17.0-beta.0",
67
- "@strapi/utils": "5.17.0-beta.0",
64
+ "@strapi/design-system": "2.0.0-rc.28",
65
+ "@strapi/icons": "2.0.0-rc.28",
66
+ "@strapi/provider-upload-local": "5.18.0",
67
+ "@strapi/utils": "5.18.0",
68
68
  "byte-size": "8.1.1",
69
69
  "cropperjs": "1.6.1",
70
70
  "date-fns": "2.30.0",
@@ -86,8 +86,8 @@
86
86
  "yup": "0.32.9"
87
87
  },
88
88
  "devDependencies": {
89
- "@strapi/admin": "5.17.0-beta.0",
90
- "@strapi/types": "5.17.0-beta.0",
89
+ "@strapi/admin": "5.18.0",
90
+ "@strapi/types": "5.18.0",
91
91
  "@testing-library/dom": "10.1.0",
92
92
  "@testing-library/react": "15.0.7",
93
93
  "@testing-library/user-event": "14.5.2",