diff --git a/src/common/Constants.ts b/src/common/Constants.ts index 312ec13f..a760a845 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -1436,6 +1436,10 @@ export const CLICKSTREAM_EVENT_NAMES = { name: 'FA_TRAINING_MATERIAL_ITEM_LOADED', description: 'Training material item loaded', }, + FA_TRAINING_MATERIAL_ITEM_CLOSED: { + name: 'FA_TRAINING_MATERIAL_ITEM_CLOSED', + description: 'Training material item closed', + }, FA_TRAINING_MATERIAL_PDF_PAGE_CHANGED: { name: 'FA_TRAINING_MATERIAL_PDF_PAGE_CHANGED', description: 'Training material PDF page changed', diff --git a/src/components/pdfRenderer/PdfRenderer.tsx b/src/components/pdfRenderer/PdfRenderer.tsx index 2a692538..54c16f81 100644 --- a/src/components/pdfRenderer/PdfRenderer.tsx +++ b/src/components/pdfRenderer/PdfRenderer.tsx @@ -13,19 +13,29 @@ import { DocumentContentType } from '@screens/caseDetails/interface'; const ERROR_STATE = 'ERROR'; -const PdfRenderer: React.FC = ({ docId, url, onPageChange }) => { +const PdfRenderer: React.FC = ({ docId, onPageChange, getFileUri }) => { const [pdfFilePath, setPdfFilePath] = useState(''); const isLoading = !pdfFilePath; const error = pdfFilePath === ERROR_STATE; - const saveFileToCache = async () => { + const checkIfFileExists = async () => { const cacheDirectory = RNFetchBlob.fs.dirs.CacheDir; const cacheFilePath = `${cacheDirectory}/${docId}.pdf`; const doesFileExist = await RNFetchBlob.fs.exists(cacheFilePath); + return { doesFileExist, cacheFilePath }; + }; + + const saveFileToCache = async () => { + const { doesFileExist, cacheFilePath } = await checkIfFileExists(); if (doesFileExist) { setPdfFilePath(cacheFilePath); return; } + const url = await getFileUri(); + if (!url) { + setPdfFilePath(ERROR_STATE); + return; + } const highQualityResponse = await RNFetchBlob.fetch('GET', url); if (highQualityResponse.respInfo.status !== 200) { setPdfFilePath(ERROR_STATE); @@ -46,7 +56,7 @@ const PdfRenderer: React.FC = ({ docId, url, onPageChange }) => { useEffect(() => { saveFileToCache(); - }, [url]); + }, []); const handlePageChange = (pageNumber: number) => { if (isNaN(pageNumber) || !isFunction(onPageChange)) return; diff --git a/src/components/pdfRenderer/interfaces.ts b/src/components/pdfRenderer/interfaces.ts index 5075386e..abe34bf0 100644 --- a/src/components/pdfRenderer/interfaces.ts +++ b/src/components/pdfRenderer/interfaces.ts @@ -1,5 +1,5 @@ export interface IPdfRenderer { - docId: string; - url: string; - onPageChange?: (pageNumber: number) => void; -} \ No newline at end of file + docId: string; + getFileUri: () => Promise; + onPageChange?: (pageNumber: number) => void; +} diff --git a/src/screens/trainingMaterial/TrainingMaterialDetail.tsx b/src/screens/trainingMaterial/TrainingMaterialDetail.tsx index c14cfae9..bd118c38 100644 --- a/src/screens/trainingMaterial/TrainingMaterialDetail.tsx +++ b/src/screens/trainingMaterial/TrainingMaterialDetail.tsx @@ -32,13 +32,12 @@ const TrainingMaterialDetail: React.FC = (props) => showError: false, }); - const getFileDetails = async () => { + const getFileUri = async () => { try { - setFileDetails({ ...fileDetails, loading: true, showError: false }); const data = await getTrainingMaterialDetails(referenceId); - setFileDetails({ ...data, loading: false }); + return data?.signedUri; } catch { - setFileDetails({ ...fileDetails, loading: false, showError: true }); + return ''; } }; @@ -47,7 +46,12 @@ const TrainingMaterialDetail: React.FC = (props) => fileType, referenceId, }); - getFileDetails(); + return () => { + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_TRAINING_MATERIAL_ITEM_CLOSED, { + fileType, + referenceId, + }); + }; }, []); const handlePageChange = (pageNumber: number) => { @@ -71,9 +75,9 @@ const TrainingMaterialDetail: React.FC = (props) => ) : ( )}