mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #19547 from overleaf/jpa-move-v2-doc-versions
[overleaf-editor-core] keep v2DocVersions in-sync with fileMap GitOrigin-RevId: 23491dfe51b71561837c96b8c550f75b0835a176
This commit is contained in:
parent
a39ce05a09
commit
e43491a04f
3 changed files with 40 additions and 0 deletions
|
@ -133,6 +133,7 @@ class Snapshot {
|
|||
*/
|
||||
moveFile(pathname, newPathname) {
|
||||
this.fileMap.moveFile(pathname, newPathname)
|
||||
if (this.v2DocVersions) this.v2DocVersions.moveFile(pathname, newPathname)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -50,6 +50,23 @@ class V2DocVersions {
|
|||
_.assign(snapshot.v2DocVersions.data, this.data)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Move or remove a doc.
|
||||
* Must be called after FileMap#moveFile, which validates the paths.
|
||||
*/
|
||||
moveFile(pathname, newPathname) {
|
||||
for (const [id, v] of Object.entries(this.data)) {
|
||||
if (v.pathname !== pathname) continue
|
||||
|
||||
if (newPathname === '') {
|
||||
delete this.data[id]
|
||||
} else {
|
||||
v.pathname = newPathname
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = V2DocVersions
|
||||
|
|
|
@ -5,6 +5,9 @@ const ot = require('..')
|
|||
const File = ot.File
|
||||
const MoveFileOperation = ot.MoveFileOperation
|
||||
const Snapshot = ot.Snapshot
|
||||
const Operation = ot.Operation
|
||||
const V2DocVersions = ot.V2DocVersions
|
||||
const TextOperation = ot.TextOperation
|
||||
|
||||
describe('MoveFileOperation', function () {
|
||||
function makeEmptySnapshot() {
|
||||
|
@ -39,4 +42,23 @@ describe('MoveFileOperation', function () {
|
|||
expect(snapshot.getFile('a').getContent()).to.equal('test: foo')
|
||||
expect(snapshot.getFile('bar').getContent()).to.equal('test: bar')
|
||||
})
|
||||
|
||||
it('should keep v2DocVersions in-sync', function () {
|
||||
const snapshot = makeTwoFileSnapshot()
|
||||
snapshot.setV2DocVersions(
|
||||
V2DocVersions.fromRaw({
|
||||
id1: { pathname: 'foo', v: 1 },
|
||||
id2: { pathname: 'bar', v: 1 },
|
||||
})
|
||||
)
|
||||
Operation.moveFile('foo', 'foo-after').applyTo(snapshot)
|
||||
Operation.editFile(
|
||||
'foo-after',
|
||||
TextOperation.fromJSON({ textOperation: [9, 'edit'] })
|
||||
).applyTo(snapshot)
|
||||
Operation.removeFile('bar').applyTo(snapshot)
|
||||
expect(snapshot.getV2DocVersions().toRaw()).to.deep.equal({
|
||||
id1: { pathname: 'foo-after', v: 1 },
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue