{"version":3,"file":"AIUploadModal.mjs","sources":["../../../../admin/src/ai/components/AIUploadModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Alert, Button, Flex, Modal } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n  AddAssetStep,\n  FileWithRawFile,\n} from '../../components/UploadAssetDialog/AddAssetStep/AddAssetStep';\nimport { useBulkEdit } from '../../hooks/useBulkEdit';\nimport { useTracking } from '../../hooks/useTracking';\nimport { useUpload } from '../../hooks/useUpload';\nimport { getTrad } from '../../utils';\n\nimport { AIAssetCard, AIAssetCardSkeletons } from './AIAssetCard';\n\nimport type { File } from '../../../../shared/contracts/files';\n\n/* -------------------------------------------------------------------------------------------------\n * ModalBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledModalBody = styled(Modal.Body)`\n  padding: 0;\n  display: flex;\n  justify-content: center;\n\n  [data-radix-scroll-area-viewport] {\n    padding-top: ${({ theme }) => theme.spaces[6]};\n    padding-bottom: ${({ theme }) => theme.spaces[6]};\n    padding-left: ${({ theme }) => theme.spaces[7]};\n    padding-right: ${({ theme }) => theme.spaces[7]};\n  }\n`;\n\nconst StyledAlert = styled(Alert)`\n  & > button {\n    display: none;\n  }\n`;\n\nconst ModalContent = ({ onClose }: Pick<AIUploadModalProps, 'onClose'>) => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const state = useAIUploadModalContext('ModalContent', (s) => s.state);\n  const dispatch = useAIUploadModalContext('ModalContent', (s) => s.dispatch);\n  const folderId = useAIUploadModalContext('ModalContent', (s) => s.folderId);\n  const { upload } = useUpload();\n  const { edit, isLoading: isSaving } = useBulkEdit();\n  const [isUploading, setIsUploading] = React.useState(false);\n  const [uploadError, setUploadError] = React.useState<Error | null>(null);\n  const { trackUsage } = useTracking();\n\n  const handleCaptionChange = (assetId: number, caption: string) => {\n    dispatch({\n      type: 'set_uploaded_asset_caption',\n      payload: { id: assetId, caption },\n    });\n  };\n\n  const handleAltTextChange = (assetId: number, altText: string) => {\n    dispatch({\n      type: 'set_uploaded_asset_alt_text',\n      payload: { id: assetId, altText },\n    });\n  };\n\n  const resetState = () => {\n    dispatch({ type: 'set_uploaded_assets', payload: [] });\n  };\n\n  const handleFinish = async () => {\n    if (state.hasUnsavedChanges) {\n      const assetsToUpdate = state.uploadedAssets.filter(\n        (asset) => (asset.wasCaptionChanged || asset.wasAltTextChanged) && asset.file.id\n      );\n\n      if (assetsToUpdate.length > 0) {\n        if (assetsToUpdate.some((asset) => asset.wasCaptionChanged)) {\n          trackUsage('didEditAICaption');\n        }\n\n        if (assetsToUpdate.some((asset) => asset.wasAltTextChanged)) {\n          trackUsage('didEditAIAlternativeText');\n        }\n\n        // Update assets\n        const updates = assetsToUpdate.map((asset) => ({\n          id: asset.file.id!,\n          fileInfo: {\n            name: asset.file.name,\n            alternativeText: asset.file.alternativeText ?? null,\n            caption: asset.file.caption ?? null,\n            folder:\n              typeof asset.file.folder === 'object' && asset.file.folder !== null\n                ? // @ts-expect-error types are wrong\n                  asset.file.folder.id\n                : asset.file.folder,\n          },\n        }));\n\n        try {\n          await edit(updates);\n          dispatch({ type: 'clear_unsaved_changes' });\n        } catch (err) {\n          toggleNotification({\n            type: 'danger',\n            message:\n              (err instanceof Error ? err.message : null) ||\n              formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n          });\n          return; // Don't close modal on error\n        }\n      }\n    }\n\n    resetState();\n    onClose();\n  };\n\n  const handleCancel = () => {\n    resetState();\n    onClose();\n  };\n\n  const handleUpload = async (assets: FileWithRawFile[]) => {\n    dispatch({ type: 'set_assets_to_upload_length', payload: assets.length });\n    setUploadError(null);\n    setIsUploading(true);\n\n    try {\n      const assetsForUpload = assets.map((asset) => ({\n        ...asset,\n        id: asset.id ? Number(asset.id) : undefined,\n      }));\n\n      const uploadedFiles = await upload(assetsForUpload, folderId);\n      const filesWithFolder = uploadedFiles.map((file: File) => ({\n        ...file,\n        // The upload API doesn't populate the folder relation, so we add it manually\n        folder: folderId || file.folder,\n      }));\n      dispatch({ type: 'set_uploaded_assets', payload: filesWithFolder });\n    } catch (error) {\n      console.error('Upload failed:', error);\n      setUploadError(error instanceof Error ? error : new Error('Upload failed'));\n    } finally {\n      setIsUploading(false);\n    }\n  };\n\n  if (state.assetsToUploadLength === 0) {\n    return (\n      <Modal.Content>\n        <AddAssetStep onClose={onClose} onAddAsset={handleUpload} />\n      </Modal.Content>\n    );\n  }\n\n  if (\n    isUploading ||\n    (state.assetsToUploadLength > 0 && state.uploadedAssets.length === 0 && !uploadError)\n  ) {\n    return (\n      <Modal.Content>\n        <Modal.Header>\n          <Modal.Title>\n            {formatMessage({\n              id: getTrad('ai.modal.uploading.title'),\n              defaultMessage: 'Uploading and processing with AI...',\n            })}\n          </Modal.Title>\n        </Modal.Header>\n        <StyledModalBody>\n          <AIAssetCardSkeletons count={state.assetsToUploadLength} />\n        </StyledModalBody>\n      </Modal.Content>\n    );\n  }\n\n  const title = formatMessage(\n    {\n      id: getTrad('ai.modal.title'),\n      defaultMessage:\n        '{count, plural, one {# asset uploaded} other {# assets uploaded}}, review AI generated metadata',\n    },\n    { count: state.uploadedAssets.length }\n  );\n\n  if (uploadError) {\n    return (\n      <Modal.Content>\n        <Modal.Header>\n          <Modal.Title>{title}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <StyledAlert closeLabel=\"\" variant=\"danger\">\n            {formatMessage({\n              id: getTrad('ai.modal.error'),\n              defaultMessage: 'Could not generate AI metadata for the uploaded files.',\n            })}\n          </StyledAlert>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button onClick={handleCancel} variant=\"tertiary\">\n            {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n          </Button>\n          <Button onClick={handleFinish} loading={isSaving}>\n            {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n          </Button>\n        </Modal.Footer>\n      </Modal.Content>\n    );\n  }\n\n  return (\n    <Modal.Content>\n      <Modal.Header>\n        <Modal.Title>{title}</Modal.Title>\n      </Modal.Header>\n\n      <StyledModalBody>\n        <Flex gap={6} direction=\"column\" alignItems=\"stretch\">\n          {state.uploadedAssets.map(({ file: asset, wasCaptionChanged, wasAltTextChanged }) => (\n            <AIAssetCard\n              key={asset.id}\n              asset={asset}\n              onCaptionChange={(caption: string) =>\n                asset.id && handleCaptionChange(asset.id, caption)\n              }\n              onAltTextChange={(altText: string) =>\n                asset.id && handleAltTextChange(asset.id, altText)\n              }\n              wasCaptionChanged={wasCaptionChanged}\n              wasAltTextChanged={wasAltTextChanged}\n            />\n          ))}\n        </Flex>\n      </StyledModalBody>\n\n      <Modal.Footer>\n        <Button onClick={handleCancel} variant=\"tertiary\">\n          {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n        </Button>\n        <Button onClick={handleFinish} loading={isSaving}>\n          {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n        </Button>\n      </Modal.Footer>\n    </Modal.Content>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UploadModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AIUploadModalProps {\n  open: boolean;\n  onClose: () => void;\n  folderId?: number | null;\n}\n\ntype State = {\n  uploadedAssets: Array<{ file: File; wasCaptionChanged: boolean; wasAltTextChanged: boolean }>;\n  assetsToUploadLength: number;\n  hasUnsavedChanges: boolean;\n};\n\ntype Action =\n  | {\n      type: 'set_uploaded_assets';\n      payload: File[];\n    }\n  | {\n      type: 'set_assets_to_upload_length';\n      payload: number;\n    }\n  | {\n      type: 'set_uploaded_asset_caption';\n      payload: { id: number; caption: string };\n    }\n  | {\n      type: 'set_uploaded_asset_alt_text';\n      payload: { id: number; altText: string };\n    }\n  | {\n      type: 'remove_uploaded_asset';\n      payload: { id: number };\n    }\n  | {\n      type: 'edit_uploaded_asset';\n      payload: { editedAsset: File };\n    }\n  | {\n      type: 'clear_unsaved_changes';\n    };\n\nconst [AIUploadModalContext, useAIUploadModalContext] = createContext<{\n  state: State;\n  dispatch: React.Dispatch<Action>;\n  folderId: number | null;\n  onClose: () => void;\n}>('AIUploadModalContext');\n\nconst reducer = (state: State, action: Action): State => {\n  return produce(state, (draft: State) => {\n    if (action.type === 'set_uploaded_assets') {\n      draft.uploadedAssets = action.payload.map((file) => ({\n        file,\n        wasCaptionChanged: false,\n        wasAltTextChanged: false,\n      }));\n      draft.hasUnsavedChanges = false;\n    }\n\n    if (action.type === 'set_assets_to_upload_length') {\n      draft.assetsToUploadLength = action.payload;\n    }\n\n    if (action.type === 'set_uploaded_asset_caption') {\n      const asset = draft.uploadedAssets.find((a) => a.file.id === action.payload.id);\n      if (asset && asset.file.caption !== action.payload.caption) {\n        asset.file.caption = action.payload.caption;\n        asset.wasCaptionChanged = true;\n        draft.hasUnsavedChanges = true;\n      }\n    }\n\n    if (action.type === 'set_uploaded_asset_alt_text') {\n      const asset = draft.uploadedAssets.find((a) => a.file.id === action.payload.id);\n      if (asset && asset.file.alternativeText !== action.payload.altText) {\n        asset.file.alternativeText = action.payload.altText;\n        asset.wasAltTextChanged = true;\n        draft.hasUnsavedChanges = true;\n      }\n    }\n\n    if (action.type === 'remove_uploaded_asset') {\n      draft.uploadedAssets = draft.uploadedAssets.filter((a) => a.file.id !== action.payload.id);\n    }\n\n    if (action.type === 'edit_uploaded_asset') {\n      const assetIndex = draft.uploadedAssets.findIndex(\n        (a) => a.file.id === action.payload.editedAsset.id\n      );\n      if (assetIndex !== -1) {\n        draft.uploadedAssets[assetIndex] = {\n          file: action.payload.editedAsset,\n          wasCaptionChanged: draft.uploadedAssets[assetIndex].wasCaptionChanged,\n          wasAltTextChanged: draft.uploadedAssets[assetIndex].wasAltTextChanged,\n        };\n      }\n    }\n\n    if (action.type === 'clear_unsaved_changes') {\n      draft.hasUnsavedChanges = false;\n      draft.uploadedAssets.forEach((asset) => {\n        asset.wasCaptionChanged = false;\n        asset.wasAltTextChanged = false;\n      });\n    }\n  });\n};\n\nexport const AIUploadModal = ({ open, onClose, folderId = null }: AIUploadModalProps) => {\n  const [state, dispatch] = React.useReducer(reducer, {\n    uploadedAssets: [],\n    assetsToUploadLength: 0,\n    hasUnsavedChanges: false,\n  });\n\n  const handleClose = React.useCallback(() => {\n    // Reset state when modal closes\n    dispatch({ type: 'set_uploaded_assets', payload: [] });\n    onClose();\n  }, [onClose]);\n\n  return (\n    <AIUploadModalContext\n      state={state}\n      dispatch={dispatch}\n      folderId={folderId}\n      onClose={handleClose}\n    >\n      <Modal.Root open={open} onOpenChange={handleClose}>\n        <ModalContent onClose={handleClose} />\n      </Modal.Root>\n    </AIUploadModalContext>\n  );\n};\n\nexport { useAIUploadModalContext };\n"],"names":["StyledModalBody","styled","Modal","Body","theme","spaces","StyledAlert","Alert","ModalContent","onClose","formatMessage","useIntl","toggleNotification","useNotification","state","useAIUploadModalContext","s","dispatch","folderId","upload","useUpload","edit","isLoading","isSaving","useBulkEdit","isUploading","setIsUploading","React","useState","uploadError","setUploadError","trackUsage","useTracking","handleCaptionChange","assetId","caption","type","payload","id","handleAltTextChange","altText","resetState","handleFinish","hasUnsavedChanges","assetsToUpdate","uploadedAssets","filter","asset","wasCaptionChanged","wasAltTextChanged","file","length","some","updates","map","fileInfo","name","alternativeText","folder","err","message","Error","defaultMessage","handleCancel","handleUpload","assets","assetsForUpload","Number","undefined","uploadedFiles","filesWithFolder","error","console","assetsToUploadLength","_jsx","Content","AddAssetStep","onAddAsset","_jsxs","Header","Title","getTrad","AIAssetCardSkeletons","count","title","closeLabel","variant","Footer","Button","onClick","loading","Flex","gap","direction","alignItems","AIAssetCard","onCaptionChange","onAltTextChange","AIUploadModalContext","createContext","reducer","action","produce","draft","find","a","assetIndex","findIndex","editedAsset","forEach","AIUploadModal","open","useReducer","handleClose","useCallback","Root","onOpenChange"],"mappings":"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"}