mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #18305 from overleaf/mj-add-comment-invert
[overleaf-editor-core] Make AddCommentOperation inversion restore state GitOrigin-RevId: 5a47a2463e3650ba7a6b0a0f53c895fa6ec1b54c
This commit is contained in:
parent
37bf30be2c
commit
478a6157cc
2 changed files with 89 additions and 18 deletions
|
@ -55,13 +55,23 @@ class AddCommentOperation extends EditOperation {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @returns {DeleteCommentOperation}
|
||||
* @inheritdoc
|
||||
* @param {StringFileData} previousState
|
||||
* @returns {EditOperation}
|
||||
*/
|
||||
invert() {
|
||||
invert(previousState) {
|
||||
const comment = previousState.comments.getComment(this.commentId)
|
||||
if (!comment) {
|
||||
return new core.DeleteCommentOperation(this.commentId)
|
||||
}
|
||||
|
||||
return new core.AddCommentOperation(
|
||||
comment.id,
|
||||
comment.ranges.slice(),
|
||||
comment.resolved
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
* @param {EditOperation} other
|
||||
|
|
|
@ -44,8 +44,10 @@ describe('AddCommentOperation', function () {
|
|||
])
|
||||
})
|
||||
|
||||
it('should invert operation', function () {
|
||||
const fileData = new StringFileData('abc')
|
||||
describe('invert', function () {
|
||||
it('should delete added comment', function () {
|
||||
const initialFileData = new StringFileData('abc')
|
||||
const fileData = StringFileData.fromRaw(initialFileData.toRaw())
|
||||
const op = new AddCommentOperation('123', [new Range(0, 1)])
|
||||
op.apply(fileData)
|
||||
expect(fileData.getComments().toRaw()).to.eql([
|
||||
|
@ -56,11 +58,70 @@ describe('AddCommentOperation', function () {
|
|||
},
|
||||
])
|
||||
|
||||
const invertedOp = op.invert()
|
||||
const invertedOp = op.invert(initialFileData)
|
||||
invertedOp.apply(fileData)
|
||||
expect(fileData.getComments().toRaw()).to.eql([])
|
||||
})
|
||||
|
||||
it('should restore previous comment ranges', function () {
|
||||
const initialComments = [
|
||||
{
|
||||
id: '123',
|
||||
ranges: [{ pos: 0, length: 1 }],
|
||||
resolved: false,
|
||||
},
|
||||
]
|
||||
|
||||
const initialFileData = new StringFileData(
|
||||
'the quick brown fox jumps over the lazy dog',
|
||||
initialComments
|
||||
)
|
||||
const fileData = StringFileData.fromRaw(initialFileData.toRaw())
|
||||
const op = new AddCommentOperation('123', [new Range(12, 7)], true)
|
||||
op.apply(fileData)
|
||||
expect(fileData.getComments().toRaw()).to.eql([
|
||||
{
|
||||
id: '123',
|
||||
ranges: [{ pos: 12, length: 7 }],
|
||||
resolved: true,
|
||||
},
|
||||
])
|
||||
|
||||
const invertedOp = op.invert(initialFileData)
|
||||
invertedOp.apply(fileData)
|
||||
expect(fileData.getComments().toRaw()).to.deep.equal(initialComments)
|
||||
})
|
||||
|
||||
it('should restore previous comment resolution status', function () {
|
||||
const initialComments = [
|
||||
{
|
||||
id: '123',
|
||||
ranges: [{ pos: 0, length: 1 }],
|
||||
resolved: false,
|
||||
},
|
||||
]
|
||||
|
||||
const initialFileData = new StringFileData(
|
||||
'the quick brown fox jumps over the lazy dog',
|
||||
initialComments
|
||||
)
|
||||
const fileData = StringFileData.fromRaw(initialFileData.toRaw())
|
||||
const op = new AddCommentOperation('123', [new Range(0, 1)], true)
|
||||
op.apply(fileData)
|
||||
expect(fileData.getComments().toRaw()).to.eql([
|
||||
{
|
||||
id: '123',
|
||||
ranges: [{ pos: 0, length: 1 }],
|
||||
resolved: true,
|
||||
},
|
||||
])
|
||||
|
||||
const invertedOp = op.invert(initialFileData)
|
||||
invertedOp.apply(fileData)
|
||||
expect(fileData.getComments().toRaw()).to.deep.equal(initialComments)
|
||||
})
|
||||
})
|
||||
|
||||
it('should compose with DeleteCommentOperation', function () {
|
||||
const addOp = new AddCommentOperation('123', [new Range(0, 1)])
|
||||
const deleteOp = new DeleteCommentOperation('123')
|
||||
|
|
Loading…
Reference in a new issue