Skip to content

Commit fa7923b

Browse files
committed
feat(json-crdt-extensions): 🎸 support right character retrieval for deleted points
1 parent dc982cd commit fa7923b

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

‎src/json-crdt-extensions/peritext/point/Point.ts‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,13 @@ export class Point implements Pick<Stateful, 'refresh'>, Printable {
180180
return chunk ? new ChunkSlice(chunk, 0, 1) : undefined;
181181
}
182182
let chunk = this.chunk();
183-
if (!chunk || chunk.del) return;
183+
if (!chunk) return;
184+
if (chunk.del) {
185+
const nextId = this.nextId();
186+
if (!nextId) return;
187+
const tmp = new Point(this.txt, nextId, Anchor.Before);
188+
return tmp.rightChar();
189+
}
184190
if (this.anchor === Anchor.Before) {
185191
const off = this.id.time - chunk.id.time;
186192
return new ChunkSlice(chunk, off, 1);

‎src/json-crdt-extensions/peritext/point/__tests__/Point.spec.ts‎

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -552,12 +552,16 @@ describe('.rightChar()', () => {
552552
expect(end.rightChar()).toBe(undefined);
553553
});
554554

555-
test('retrieves left char of a deleted point', () => {
556-
const {peritext, chunkD1} = setupWithChunkedText();
555+
test('retrieves right char of a deleted point', () => {
556+
const {peritext, chunkD1, chunkD2} = setupWithChunkedText();
557557
const p1 = peritext.point(chunkD1.id, Anchor.Before);
558-
expect(p1.leftChar()!.view()).toBe('3');
558+
expect(p1.rightChar()!.view()).toBe('4');
559559
const p2 = peritext.point(chunkD1.id, Anchor.After);
560-
expect(p2.leftChar()!.view()).toBe('3');
560+
expect(p2.rightChar()!.view()).toBe('4');
561+
const p3 = peritext.point(chunkD2.id, Anchor.Before);
562+
expect(p3.rightChar()!.view()).toBe('7');
563+
const p4 = peritext.point(chunkD2.id, Anchor.After);
564+
expect(p4.rightChar()!.view()).toBe('7');
561565
});
562566
});
563567

@@ -630,4 +634,16 @@ describe('.leftChar()', () => {
630634
expect(char.view()).toBe(res[i]);
631635
}
632636
});
637+
638+
test('retrieves left char of a deleted point', () => {
639+
const {peritext, chunkD1, chunkD2} = setupWithChunkedText();
640+
const p1 = peritext.point(chunkD1.id, Anchor.Before);
641+
expect(p1.leftChar()!.view()).toBe('3');
642+
const p2 = peritext.point(chunkD1.id, Anchor.After);
643+
expect(p2.leftChar()!.view()).toBe('3');
644+
const p3 = peritext.point(chunkD2.id, Anchor.Before);
645+
expect(p3.leftChar()!.view()).toBe('6');
646+
const p4 = peritext.point(chunkD2.id, Anchor.After);
647+
expect(p4.leftChar()!.view()).toBe('6');
648+
});
633649
});

0 commit comments

Comments
 (0)