diff --git a/services/clsi/app/js/OutputFileArchiveManager.js b/services/clsi/app/js/OutputFileArchiveManager.js index 3c5a6c8197..a64d634e12 100644 --- a/services/clsi/app/js/OutputFileArchiveManager.js +++ b/services/clsi/app/js/OutputFileArchiveManager.js @@ -7,7 +7,7 @@ const { NotFoundError } = require('./Errors') const logger = require('@overleaf/logger') // NOTE: Updating this list requires a corresponding change in -// * services/web/frontend/js/features/pdf-preview/util/file-list.js +// * services/web/frontend/js/features/pdf-preview/util/file-list.ts const ignoreFiles = ['output.fls', 'output.fdb_latexmk'] function getContentDir(projectId, userId) { diff --git a/services/web/frontend/js/features/pdf-preview/util/file-list.js b/services/web/frontend/js/features/pdf-preview/util/file-list.ts similarity index 81% rename from services/web/frontend/js/features/pdf-preview/util/file-list.js rename to services/web/frontend/js/features/pdf-preview/util/file-list.ts index 73bcc4806e..106234f1fe 100644 --- a/services/web/frontend/js/features/pdf-preview/util/file-list.js +++ b/services/web/frontend/js/features/pdf-preview/util/file-list.ts @@ -1,15 +1,19 @@ +import { + CompileOutputFile, + CompileResponseData, +} from '../../../../../types/compile' +import { PdfFileDataList } from '@/features/pdf-preview/util/types' + const topFileTypes = ['bbl', 'gls', 'ind'] // NOTE: Updating this list requires a corresponding change in // * services/clsi/app/js/OutputFileArchiveManager.js const ignoreFiles = ['output.fls', 'output.fdb_latexmk'] -export const buildFileList = ( - outputFiles, - clsiServerId, - compileGroup, - outputFilesArchive -) => { - const files = { top: [], other: [] } +export function buildFileList( + outputFiles: Map, + { clsiServerId, compileGroup, outputFilesArchive }: CompileResponseData +): PdfFileDataList { + const files: PdfFileDataList = { top: [], other: [] } if (outputFiles) { const params = new URLSearchParams() diff --git a/services/web/frontend/js/features/pdf-preview/util/types.ts b/services/web/frontend/js/features/pdf-preview/util/types.ts index 78e953a3aa..922db116a9 100644 --- a/services/web/frontend/js/features/pdf-preview/util/types.ts +++ b/services/web/frontend/js/features/pdf-preview/util/types.ts @@ -1,4 +1,5 @@ import React from 'react' +import { CompileOutputFile } from '../../../../../types/compile' export type LogEntry = { raw: string @@ -31,8 +32,8 @@ export type SourceLocation = { column?: number } -export type PdfFileData = { path: string; url: string } -type PdfFileArchiveData = { path: string; url: string; fileCount: number } +export type PdfFileData = CompileOutputFile +type PdfFileArchiveData = CompileOutputFile & { fileCount: number } export type PdfFileDataList = { top: PdfFileData[] diff --git a/services/web/frontend/js/shared/context/local-compile-context.tsx b/services/web/frontend/js/shared/context/local-compile-context.tsx index 0eb223a5be..e673ba237d 100644 --- a/services/web/frontend/js/shared/context/local-compile-context.tsx +++ b/services/web/frontend/js/shared/context/local-compile-context.tsx @@ -38,6 +38,7 @@ import { useFileTreePathContext } from '@/features/file-tree/contexts/file-tree- import { useUserSettingsContext } from '@/shared/context/user-settings-context' import { useFeatureFlag } from '@/shared/context/split-test-context' import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context' +import { CompileResponseData } from '../../../../types/compile' import { PdfScrollPosition, usePdfScrollPosition, @@ -167,10 +168,10 @@ export const LocalCompileProvider: FC = ({ children }) => { useState(false) // the id of the CLSI server which ran the compile - const [clsiServerId, setClsiServerId] = useState() + const [clsiServerId, setClsiServerId] = useState() // data received in response to a compile request - const [data, setData] = useState>() + const [data, setData] = useState() // the rootDocId used in the most recent compile request, which may not be the // same as the project rootDocId. This is used to calculate correct paths when @@ -392,14 +393,7 @@ export const LocalCompileProvider: FC = ({ children }) => { setPdfFile(handleOutputFiles(outputFiles, projectId, data)) } - setFileList( - buildFileList( - outputFiles, - data.clsiServerId, - data.compileGroup, - data.outputFilesArchive - ) - ) + setFileList(buildFileList(outputFiles, data)) // handle log files // asynchronous (TODO: cancel on new compile?) diff --git a/services/web/types/compile.ts b/services/web/types/compile.ts new file mode 100644 index 0000000000..11767f36ef --- /dev/null +++ b/services/web/types/compile.ts @@ -0,0 +1,35 @@ +export type CompileOutputFile = { + path: string + url: string + type: string + build: string + ranges?: { + start: number + end: number + hash: string + objectId: string + }[] + contentId?: string + size?: number + + // assigned by buildFileList in frontend + main?: boolean +} + +export type CompileResponseData = { + fromCache?: boolean + status: string + outputFiles: CompileOutputFile[] + compileGroup?: string + clsiServerId?: string + pdfDownloadDomain?: string + pdfCachingMinChunkSize: number + validationProblems: any + stats: any + timings: any + outputFilesArchive?: CompileOutputFile + + // assigned on response body by DocumentCompiler in frontend + rootDocId?: string + options: any +}