Files
overleaf-cep/services/document-updater/app/js/WebApiManager.js
T
KristinaandJimmy Domagala-Tang 9c005e4e54 [web/document-updater] display preview for accepted/rejected tracked changes (#36240)
* [web] add preview payload to track-change notification types

* [doc-updater] pass accepted/rejected change data through to web for previews

* [web] snapshot change preview onto accepted/rejected notifications

* [web] render resolved change previews instead of accepted/rejected count lines

* [web] add unit coverage for accepted/rejected change preview flow

* fix: notification carries multiple previews per accept/reject batch; extract shared group helper

* fix: one preview per accept/reject action, drop adjacency grouping

* fix: move buildResolvedChangePreviews out of the email builder class

* fix: type error, make tests more explicit

* fix: render resolver below preview

* fix: overflow text, alignment

* fix: test error

* fix: resolved count

* [document-updater/web] send sparse change preview instead of full doc lines

* fix: store sparse preview, hydrate at render, drop CE gate

* fix: advance slice cursor past tracked-delete text in sparse preview

* fix: inline buildChangeGroupPreview

* fix: changePreviewBuilder -> sparseChangePreview

* fix: rm change_contributors

* fix: copilot flagged testing issues

* fix: hydrate and truncate change preview at write time

* fix: avoid materializing full doc text when slicing preview window

* fix: update reject preview test to hydrated shape

* fix: accepted delete removing context

* [document-updater/web] split resolved change previews into one per change cluster

* fix: narrow cluster userIds to string[] for typecheck

* feat: updating to use zod schema for previews

---------

Co-authored-by: Jimmy Domagala-Tang <jimmy.domagala-tang@overleaf.com>
GitOrigin-RevId: 0740713c715a61a220180f353e497b27da6a5b0f
2026-09-17 11:58:14 +00:00

46 lines
1003 B
JavaScript

// @ts-check
const Settings = require('@overleaf/settings')
const { fetchNothing } = require('@overleaf/fetch-utils')
const MAX_HTTP_REQUEST_LENGTH = 5000
/**
* @param {string} projectId
* @param {string} docId
* @param {string[]} rejectedChangeAuthorIds
* @param {string | undefined} userId
* @param {object[]} [previews] sparse change previews from TrackedChangePreview.buildSparseChangePreviews
*/
async function notifyTrackChangesRejected(
projectId,
docId,
rejectedChangeAuthorIds,
userId,
previews
) {
const url = new URL(
`/project/${projectId}/doc/${docId}/changes/reject`,
Settings.apis.web.url
)
await fetchNothing(url, {
method: 'POST',
json: {
rejectedChangeAuthorIds,
userId,
previews,
},
basicAuth: {
user: Settings.apis.web.user,
password: Settings.apis.web.pass,
},
signal: AbortSignal.timeout(MAX_HTTP_REQUEST_LENGTH),
})
}
module.exports = {
promises: {
notifyTrackChangesRejected,
},
}