{"version":3,"file":"CarouselAssets.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { CarouselInput, CarouselSlide } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { EditAssetDialog } from '../../EditAssetDialog/EditAssetContent';\n\nimport { CarouselAsset } from './CarouselAsset';\nimport { CarouselAssetActions } from './CarouselAssetActions';\nimport { EmptyStateAsset } from './EmptyStateAsset';\n\nimport type { File as FileAsset, RawFile } from '../../../../../shared/contracts/files';\n\nexport type FileWithoutIdHash = Omit<FileAsset, 'id' | 'hash'>;\n\ninterface Asset extends Omit<FileAsset, 'folder'> {\n  isLocal?: boolean;\n  rawFile?: RawFile;\n  folder?: FileAsset['folder'] & { id: number };\n}\n\nexport interface CarouselAssetsProps {\n  assets: FileAsset[];\n  disabled?: boolean;\n  error?: string;\n  hint?: string;\n  label: string;\n  labelAction?: React.ReactNode;\n  onAddAsset: (asset?: FileAsset, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n  onDeleteAsset: (asset: FileAsset) => void;\n  onDeleteAssetFromMediaLibrary: () => void;\n  onDropAsset?: (assets: FileWithoutIdHash[]) => void;\n  onEditAsset?: (asset: FileAsset) => void;\n  onNext: () => void;\n  onPrevious: () => void;\n  onDoubleClickAsset: (asset: FileAsset, event?: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n  required?: boolean;\n  selectedAssetIndex: number;\n  trackedLocation?: string;\n}\n\nexport const CarouselAssets = React.forwardRef(\n  (\n    {\n      assets,\n      disabled = false,\n      error,\n      hint,\n      label,\n      labelAction,\n      onAddAsset,\n      onDeleteAsset,\n      onDeleteAssetFromMediaLibrary,\n      onDropAsset,\n      onEditAsset,\n      onNext,\n      onPrevious,\n      onDoubleClickAsset,\n      required = false,\n      selectedAssetIndex,\n      trackedLocation,\n    }: CarouselAssetsProps,\n    forwardedRef\n  ) => {\n    const { formatMessage } = useIntl();\n    const [isEditingAsset, setIsEditingAsset] = React.useState(false);\n\n    const currentAsset = assets[selectedAssetIndex];\n    const canEditMedia = !disabled && onEditAsset;\n\n    return (\n      <>\n        <CarouselInput\n          ref={forwardedRef as React.Ref<HTMLDivElement>}\n          label={label}\n          labelAction={labelAction}\n          secondaryLabel={currentAsset?.name}\n          selectedSlide={selectedAssetIndex}\n          previousLabel={formatMessage({\n            id: getTrad('mediaLibraryInput.actions.previousSlide'),\n            defaultMessage: 'Previous slide',\n          })}\n          nextLabel={formatMessage({\n            id: getTrad('mediaLibraryInput.actions.nextSlide'),\n            defaultMessage: 'Next slide',\n          })}\n          onNext={onNext}\n          onPrevious={onPrevious}\n          hint={hint}\n          error={error}\n          required={required}\n          actions={\n            currentAsset ? (\n              <CarouselAssetActions\n                asset={currentAsset}\n                onDeleteAsset={disabled ? undefined : onDeleteAsset}\n                onAddAsset={disabled ? undefined : onAddAsset}\n                onEditAsset={canEditMedia ? () => setIsEditingAsset(true) : undefined}\n              />\n            ) : undefined\n          }\n        >\n          {assets.length === 0 ? (\n            <CarouselSlide\n              label={formatMessage(\n                {\n                  id: getTrad('mediaLibraryInput.slideCount'),\n                  defaultMessage: '{n} of {m} slides',\n                },\n                { n: 1, m: 1 }\n              )}\n            >\n              <EmptyStateAsset\n                disabled={disabled}\n                onClick={onAddAsset}\n                onDropAsset={onDropAsset!}\n              />\n            </CarouselSlide>\n          ) : (\n            assets.map((asset, index) => (\n              <CarouselSlide\n                key={asset.id}\n                label={formatMessage(\n                  {\n                    id: getTrad('mediaLibraryInput.slideCount'),\n                    defaultMessage: '{n} of {m} slides',\n                  },\n                  { n: index + 1, m: assets.length }\n                )}\n                onDoubleClick={(event) => {\n                  setIsEditingAsset(true);\n                  onDoubleClickAsset(asset, event);\n                }}\n                aria-selected={currentAsset.id === asset.id}\n              >\n                <CarouselAsset asset={asset} />\n              </CarouselSlide>\n            ))\n          )}\n        </CarouselInput>\n        <EditAssetDialog\n          open={isEditingAsset}\n          onClose={(editedAsset) => {\n            setIsEditingAsset(false);\n\n            // The asset has been deleted\n            if (editedAsset === null) {\n              onDeleteAssetFromMediaLibrary();\n            }\n            if (editedAsset && typeof editedAsset !== 'boolean') {\n              onEditAsset?.(editedAsset);\n            }\n          }}\n          asset={currentAsset as Asset}\n          canUpdate\n          canCopyLink\n          canDownload\n          trackedLocation={trackedLocation}\n        />\n      </>\n    );\n  }\n);\n"],"names":["CarouselAssets","React","forwardRef","assets","disabled","error","hint","label","labelAction","onAddAsset","onDeleteAsset","onDeleteAssetFromMediaLibrary","onDropAsset","onEditAsset","onNext","onPrevious","onDoubleClickAsset","required","selectedAssetIndex","trackedLocation","forwardedRef","formatMessage","useIntl","isEditingAsset","setIsEditingAsset","useState","currentAsset","canEditMedia","_jsxs","_Fragment","_jsx","CarouselInput","ref","secondaryLabel","name","selectedSlide","previousLabel","id","getTrad","defaultMessage","nextLabel","actions","CarouselAssetActions","asset","undefined","length","CarouselSlide","n","m","EmptyStateAsset","onClick","map","index","onDoubleClick","event","aria-selected","CarouselAsset","EditAssetDialog","open","onClose","editedAsset","canUpdate","canCopyLink","canDownload"],"mappings":"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"}