{"version":3,"file":"EditAssetContent.mjs","sources":["../../../../admin/src/components/EditAssetDialog/EditAssetContent.tsx"],"sourcesContent":["/**\n *\n * EditAssetDialog\n *\n */\nimport * as React from 'react';\n\nimport {\n  Button,\n  Field,\n  Flex,\n  Grid,\n  Loader,\n  Modal,\n  TextInput,\n  VisuallyHidden,\n} from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useEditAsset } from '../../hooks/useEditAsset';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getFileExtension, formatBytes } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { DialogHeader } from './DialogHeader';\nimport { PreviewBox } from './PreviewBox/PreviewBox';\nimport { ReplaceMediaButton } from './ReplaceMediaButton';\n\nimport type {\n  File as FileDefinition,\n  RawFile,\n  FocalPoint,\n} from '../../../../shared/contracts/files';\n\nconst LoadingBody = styled(Flex)`\n  /* 80px are coming from the Tabs component that is not included in the ModalBody */\n  min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nconst focalPointSchema = yup\n  .object({\n    x: yup.number().min(0).max(100).required(),\n    y: yup.number().min(0).max(100).required(),\n  })\n  .nullable()\n  .default(null);\n\nconst fileInfoSchema = yup.object({\n  name: yup.string().required(),\n  alternativeText: yup.string(),\n  caption: yup.string(),\n  focalPoint: focalPointSchema,\n  folder: yup.number(),\n});\n\nexport interface Asset extends Omit<FileDefinition, 'folder'> {\n  isLocal?: boolean;\n  rawFile?: RawFile;\n  folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface EditAssetContentProps {\n  asset?: Asset;\n  canUpdate?: boolean;\n  canCopyLink?: boolean;\n  canDownload?: boolean;\n  trackedLocation?: string;\n  onClose: (arg?: Asset | null | boolean) => void;\n  omitFields?: ('caption' | 'alternativeText')[];\n  omitActions?: 'replace'[];\n}\n\ninterface FormInitialData {\n  name?: string;\n  alternativeText?: string;\n  caption?: string;\n  focalPoint?: FocalPoint | null;\n  parent?: {\n    value?: number;\n    label: string;\n  };\n}\n\nexport const EditAssetContent = ({\n  onClose,\n  asset,\n  canUpdate = false,\n  canCopyLink = false,\n  canDownload = false,\n  trackedLocation,\n  omitFields = [],\n  omitActions = [],\n}: EditAssetContentProps) => {\n  const { formatMessage, formatDate } = useIntl();\n  const { trackUsage } = useTracking();\n  const submitButtonRef = React.useRef<HTMLButtonElement>(null);\n  const [isCropping, setIsCropping] = React.useState(false);\n  const [isFocalPointMode, setIsFocalPointMode] = React.useState(false);\n  const [replacementFile, setReplacementFile] = React.useState<File | undefined>();\n  const { editAsset, isLoading } = useEditAsset();\n\n  const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n    enabled: true,\n  });\n\n  const handleSubmit = async (values: FormInitialData) => {\n    const nextAsset = { ...asset, ...values, folder: values.parent?.value } as Asset;\n\n    if (asset?.isLocal) {\n      onClose(nextAsset);\n    } else {\n      const editedAsset = (await editAsset(nextAsset, replacementFile!)) as Asset;\n\n      const assetType = asset?.mime?.split('/')[0];\n      // if the folder parent was the root of Media Library, its id is null\n      // we know it changed location if the new parent value exists\n      const didChangeLocation = asset?.folder?.id\n        ? asset.folder.id !== values.parent?.value\n        : asset?.folder === null && !!values.parent?.value;\n\n      trackUsage('didEditMediaLibraryElements', {\n        location: trackedLocation,\n        type: assetType,\n        changeLocation: didChangeLocation,\n      });\n\n      onClose(editedAsset);\n    }\n  };\n\n  const handleStartCropping = () => {\n    setIsCropping(true);\n  };\n\n  const handleCancelCropping = () => {\n    setIsCropping(false);\n  };\n\n  const handleFinishCropping = () => {\n    setIsCropping(false);\n    onClose();\n  };\n\n  const handleFocalPointStart = () => {\n    setIsFocalPointMode(true);\n  };\n\n  const handleFocalPointCancel = () => {\n    setIsFocalPointMode(false);\n  };\n\n  const formDisabled = !canUpdate || isCropping || isFocalPointMode;\n\n  const handleConfirmClose = () => {\n    // eslint-disable-next-line no-alert\n    const confirm = window.confirm(\n      formatMessage({\n        id: 'window.confirm.close-modal.file',\n        defaultMessage: 'Are you sure? Your changes will be lost.',\n      })\n    );\n\n    if (confirm) {\n      onClose();\n    }\n  };\n\n  const activeFolderId = asset?.folder?.id;\n  const initialFormData = !folderStructureIsLoading && {\n    name: asset?.name,\n    alternativeText: asset?.alternativeText ?? undefined,\n    caption: asset?.caption ?? undefined,\n    focalPoint: asset?.focalPoint ?? null,\n    parent: {\n      value: activeFolderId ?? undefined,\n      label:\n        findRecursiveFolderByValue(folderStructure!, activeFolderId!)?.label ??\n        folderStructure![0].label,\n    },\n  };\n\n  const handleClose = (values?: { [key: string]: unknown }) => {\n    if (!isEqual(initialFormData, values)) {\n      handleConfirmClose();\n    } else {\n      onClose();\n    }\n  };\n\n  if (folderStructureIsLoading) {\n    return (\n      <>\n        <DialogHeader />\n        <LoadingBody minHeight=\"60vh\" justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n          <Loader>\n            {formatMessage({\n              id: getTrad('content.isLoading'),\n              defaultMessage: 'Content is loading.',\n            })}\n          </Loader>\n        </LoadingBody>\n        <Modal.Footer>\n          <Button onClick={() => handleClose()} variant=\"tertiary\">\n            {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n          </Button>\n        </Modal.Footer>\n      </>\n    );\n  }\n\n  return (\n    <Formik\n      validationSchema={fileInfoSchema}\n      validateOnChange={false}\n      onSubmit={handleSubmit}\n      initialValues={initialFormData}\n    >\n      {({ values, errors, handleChange, setFieldValue }) => (\n        <>\n          <DialogHeader />\n          <Modal.Body>\n            <Grid.Root gap={4}>\n              <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n                <PreviewBox\n                  asset={asset!}\n                  canUpdate={canUpdate}\n                  canCopyLink={canCopyLink}\n                  canDownload={canDownload}\n                  onDelete={onClose}\n                  onCropFinish={handleFinishCropping}\n                  onCropStart={handleStartCropping}\n                  onCropCancel={handleCancelCropping}\n                  replacementFile={replacementFile}\n                  trackedLocation={trackedLocation}\n                  formFocalPoint={values.focalPoint}\n                  onFocalPointStart={handleFocalPointStart}\n                  onFocalPointFinish={(focalPoint) => {\n                    setIsFocalPointMode(false);\n                    setFieldValue('focalPoint', focalPoint);\n                  }}\n                  onFocalPointCancel={handleFocalPointCancel}\n                />\n              </Grid.Item>\n              <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n                <Form noValidate>\n                  <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n                    <ContextInfo\n                      blocks={[\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.size'),\n                            defaultMessage: 'Size',\n                          }),\n                          value: formatBytes(asset?.size ? asset.size : 0),\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.dimensions'),\n                            defaultMessage: 'Dimensions',\n                          }),\n                          value:\n                            asset?.height && asset.width ? `${asset.width}✕${asset.height}` : null,\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.date'),\n                            defaultMessage: 'Date',\n                          }),\n                          value: formatDate(new Date(asset?.createdAt ? asset.createdAt : '')),\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.extension'),\n                            defaultMessage: 'Extension',\n                          }),\n                          value: getFileExtension(asset?.ext)!,\n                        },\n\n                        {\n                          label: formatMessage({\n                            id: getTrad('modal.file-details.id'),\n                            defaultMessage: 'Asset ID',\n                          }),\n                          value: asset?.id ? asset.id : null,\n                        },\n\n                        ...(values.focalPoint\n                          ? [\n                              {\n                                label: formatMessage({\n                                  id: getTrad('modal.file-details.focal-point'),\n                                  defaultMessage: 'Focal point',\n                                }),\n                                value: `x: ${values.focalPoint.x}% - y: ${values.focalPoint.y}%`,\n                              },\n                            ]\n                          : []),\n                      ]}\n                    />\n                    <Field.Root name=\"name\" error={errors.name}>\n                      <Field.Label>\n                        {formatMessage({\n                          id: getTrad('form.input.label.file-name'),\n                          defaultMessage: 'File name',\n                        })}\n                      </Field.Label>\n                      <TextInput\n                        value={values.name}\n                        onChange={handleChange}\n                        disabled={formDisabled}\n                        type=\"text\"\n                      />\n                      <Field.Error />\n                    </Field.Root>\n\n                    {!omitFields?.includes('alternativeText') && (\n                      <Field.Root\n                        name=\"alternativeText\"\n                        hint={formatMessage({\n                          id: getTrad('form.input.description.file-alt'),\n                          defaultMessage:\n                            'This text will be displayed if the asset can’t be shown.',\n                        })}\n                        error={errors.alternativeText}\n                      >\n                        <Field.Label>\n                          {formatMessage({\n                            id: getTrad('form.input.label.file-alt'),\n                            defaultMessage: 'Alternative text',\n                          })}\n                        </Field.Label>\n                        <TextInput\n                          value={values.alternativeText}\n                          onChange={handleChange}\n                          disabled={formDisabled}\n                          type=\"text\"\n                        />\n                        <Field.Hint />\n                        <Field.Error />\n                      </Field.Root>\n                    )}\n\n                    {!omitFields?.includes('caption') && (\n                      <Field.Root name=\"caption\" error={errors.caption}>\n                        <Field.Label>\n                          {formatMessage({\n                            id: getTrad('form.input.label.file-caption'),\n                            defaultMessage: 'Caption',\n                          })}\n                        </Field.Label>\n                        <TextInput\n                          value={values.caption}\n                          onChange={handleChange}\n                          disabled={formDisabled}\n                          type=\"text\"\n                        />\n                      </Field.Root>\n                    )}\n\n                    <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n                      <Field.Root name=\"parent\" id=\"asset-folder\">\n                        <Field.Label>\n                          {formatMessage({\n                            id: getTrad('form.input.label.file-location'),\n                            defaultMessage: 'Location',\n                          })}\n                        </Field.Label>\n\n                        <SelectTree\n                          name=\"parent\"\n                          defaultValue={values.parent}\n                          options={folderStructure!}\n                          onChange={(value) => {\n                            setFieldValue('parent', value);\n                          }}\n                          menuPortalTarget={document.querySelector('body')}\n                          inputId=\"asset-folder\"\n                          isDisabled={formDisabled}\n                          error={errors?.parent}\n                          ariaErrorMessage=\"folder-parent-error\"\n                        />\n                      </Field.Root>\n                    </Flex>\n                  </Flex>\n\n                  <VisuallyHidden>\n                    <button\n                      type=\"submit\"\n                      tabIndex={-1}\n                      ref={submitButtonRef}\n                      disabled={formDisabled}\n                    >\n                      {formatMessage({ id: 'submit', defaultMessage: 'Submit' })}\n                    </button>\n                  </VisuallyHidden>\n                </Form>\n              </Grid.Item>\n            </Grid.Root>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button onClick={() => handleClose({ ...values })} variant=\"tertiary\">\n              {formatMessage({ id: 'global.cancel', defaultMessage: 'Cancel' })}\n            </Button>\n            <Flex gap={2}>\n              {!omitActions?.includes('replace') && (\n                <ReplaceMediaButton\n                  onSelectMedia={setReplacementFile}\n                  acceptedMime={asset?.mime ?? ''}\n                  disabled={formDisabled}\n                  trackedLocation={trackedLocation}\n                />\n              )}\n\n              <Button\n                onClick={() => submitButtonRef.current?.click()}\n                loading={isLoading}\n                disabled={formDisabled}\n              >\n                {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n              </Button>\n            </Flex>\n          </Modal.Footer>\n        </>\n      )}\n    </Formik>\n  );\n};\n\ninterface EditAssetDialogProps {\n  asset: Asset;\n  canUpdate?: boolean;\n  canCopyLink?: boolean;\n  canDownload?: boolean;\n  trackedLocation?: string;\n  open: boolean;\n  onClose: (arg?: Asset | null | boolean) => void;\n}\n\nexport const EditAssetDialog = ({\n  open,\n  onClose,\n  canUpdate = false,\n  canCopyLink = false,\n  canDownload = false,\n  ...restProps\n}: EditAssetDialogProps) => {\n  return (\n    <Modal.Root open={open} onOpenChange={onClose}>\n      <Modal.Content>\n        <EditAssetContent\n          onClose={onClose}\n          canUpdate={canUpdate}\n          canCopyLink={canCopyLink}\n          canDownload={canDownload}\n          {...restProps}\n        />\n      </Modal.Content>\n    </Modal.Root>\n  );\n};\n"],"names":["LoadingBody","styled","Flex","focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","EditAssetContent","onClose","asset","canUpdate","canCopyLink","canDownload","trackedLocation","omitFields","omitActions","formatMessage","formatDate","useIntl","trackUsage","useTracking","submitButtonRef","React","useRef","isCropping","setIsCropping","useState","isFocalPointMode","setIsFocalPointMode","replacementFile","setReplacementFile","editAsset","isLoading","useEditAsset","data","folderStructure","folderStructureIsLoading","useFolderStructure","enabled","handleSubmit","values","nextAsset","parent","value","isLocal","editedAsset","assetType","mime","split","didChangeLocation","id","location","type","changeLocation","handleStartCropping","handleCancelCropping","handleFinishCropping","handleFocalPointStart","handleFocalPointCancel","formDisabled","handleConfirmClose","confirm","window","defaultMessage","activeFolderId","initialFormData","undefined","label","findRecursiveFolderByValue","handleClose","isEqual","_jsxs","_Fragment","_jsx","DialogHeader","minHeight","justifyContent","paddingTop","paddingBottom","Loader","getTrad","Modal","Footer","Button","onClick","variant","Formik","validationSchema","validateOnChange","onSubmit","initialValues","errors","handleChange","setFieldValue","Body","Grid","Root","gap","Item","xs","col","direction","alignItems","PreviewBox","onDelete","onCropFinish","onCropStart","onCropCancel","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","Form","noValidate","ContextInfo","blocks","formatBytes","size","height","width","Date","createdAt","getFileExtension","ext","Field","error","Label","TextInput","onChange","disabled","Error","includes","hint","Hint","SelectTree","defaultValue","options","menuPortalTarget","document","querySelector","inputId","isDisabled","ariaErrorMessage","VisuallyHidden","button","tabIndex","ref","ReplaceMediaButton","onSelectMedia","acceptedMime","current","click","loading","EditAssetDialog","open","restProps","onOpenChange","Content"],"mappings":"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"}