{"version":3,"file":"useAILocalizationJobsPolling.mjs","sources":["../../../admin/src/hooks/useAILocalizationJobsPolling.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, adminApi } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\n\nimport { AILocalizationJobs } from '../../../shared/contracts/ai-localization-jobs';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { getTranslation } from '../utils/getTranslation';\n\ninterface UseAILocalizationJobsPollingOptions {\n  documentId?: string;\n  model?: string;\n  collectionType?: string;\n}\n\nexport const useAILocalizationJobsPolling = ({\n  documentId,\n  model,\n  collectionType,\n}: UseAILocalizationJobsPollingOptions) => {\n  const { toggleNotification } = useNotification();\n  const { formatMessage } = useIntl();\n  const dispatch = useDispatch();\n\n  const [previousJobStatus, setPreviousJobStatus] = React.useState<\n    AILocalizationJobs['status'] | null\n  >(null);\n\n  /**\n   * NOTE:\n   * Due to a limitation with RTK query it is not possible to dynamically update the polling interval\n   * @see https://github.com/reduxjs/redux-toolkit/issues/1651\n   */\n  const { data: initialJobData } = useGetAILocalizationJobsByDocumentQuery({\n    documentId: documentId!,\n    model: model!,\n    collectionType: collectionType!,\n  });\n\n  const shouldPoll =\n    initialJobData?.data?.status === 'processing' || previousJobStatus === 'processing';\n  const { data: jobData } = useGetAILocalizationJobsByDocumentQuery(\n    { documentId: documentId!, model: model!, collectionType: collectionType! },\n    {\n      skip: !shouldPoll,\n      pollingInterval: 1000,\n    }\n  );\n\n  const job = jobData?.data || initialJobData?.data;\n  const currentJobStatus = job?.status;\n\n  const invalidateDocument = React.useCallback(() => {\n    dispatch(\n      adminApi.util.invalidateTags([\n        {\n          // @ts-expect-error tag isn't available\n          type: 'Document',\n          id: collectionType !== 'single-types' ? `${model}_${documentId}` : model,\n        },\n      ])\n    );\n  }, [dispatch, collectionType, model, documentId]);\n\n  // Check for job status changes and trigger callbacks\n  React.useEffect(() => {\n    if (!currentJobStatus) return;\n\n    // Detect transition from 'processing' to a terminal state\n    if (previousJobStatus === 'processing' && currentJobStatus === 'completed') {\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({\n          id: getTranslation('CMEditViewAITranslation.job-completed'),\n          defaultMessage: 'AI translation completed successfully!',\n        }),\n      });\n      invalidateDocument();\n    }\n\n    if (previousJobStatus === 'processing' && currentJobStatus === 'failed') {\n      toggleNotification({\n        type: 'warning',\n        message: formatMessage({\n          id: getTranslation('CMEditViewAITranslation.job-failed'),\n          defaultMessage: 'AI translation failed. Please try again.',\n        }),\n      });\n      invalidateDocument();\n    }\n\n    // Update the previous status if it changed\n    if (previousJobStatus !== currentJobStatus) {\n      setPreviousJobStatus(currentJobStatus);\n    }\n  }, [\n    currentJobStatus,\n    previousJobStatus,\n    setPreviousJobStatus,\n    toggleNotification,\n    formatMessage,\n    invalidateDocument,\n  ]);\n\n  return {\n    status: job?.status,\n  };\n};\n"],"names":["useAILocalizationJobsPolling","documentId","model","collectionType","toggleNotification","useNotification","formatMessage","useIntl","dispatch","useDispatch","previousJobStatus","setPreviousJobStatus","React","useState","data","initialJobData","useGetAILocalizationJobsByDocumentQuery","shouldPoll","status","jobData","skip","pollingInterval","job","currentJobStatus","invalidateDocument","useCallback","adminApi","util","invalidateTags","type","id","useEffect","message","getTranslation","defaultMessage"],"mappings":"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"}