Files
overleaf-cep/services/web/app/src/Features/Project/ProjectEntityRestoreHandler.mjs
T
Andrew Rumble f02f6475ac Update paths
GitOrigin-RevId: a9474c8f36e8b287de4dd8fda29bc082001444ac
2025-10-23 08:06:10 +00:00

46 lines
1.3 KiB
JavaScript

import { callbackify } from 'node:util'
import Path from 'node:path'
import ProjectEntityHandler from './ProjectEntityHandler.mjs'
import EditorController from '../Editor/EditorController.mjs'
// generate a new name based on the original, with an optional label.
// e.g. origname-20210101-122345.tex (default)
// origname-restored-20210101-122345.tex (label="restored")
function generateRestoredName(docName, label) {
const formattedTimestamp = new Date()
.toISOString()
.replace('T', '-')
.replace(/[^0-9-]/g, '')
const extension = Path.extname(docName)
const basename =
Path.basename(docName, extension) + (label ? `-${label}` : '')
return `${basename}-${formattedTimestamp}${extension}`
}
async function restoreDeletedDoc(projectId, docId, docName, userId) {
const deletedDoc = await ProjectEntityHandler.promises.getDoc(
projectId,
docId,
{ include_deleted: true }
)
const deletedDocName = generateRestoredName(docName)
// Create the doc and emit a websocket message.
return await EditorController.promises.addDocWithRanges(
projectId,
null,
`${deletedDocName}`,
deletedDoc.lines,
deletedDoc.ranges,
null,
userId
)
}
export default {
restoreDeletedDoc: callbackify(restoreDeletedDoc),
generateRestoredName,
promises: {
restoreDeletedDoc,
},
}