Skip to content

Commit 8de8676

Browse files
committed
feat(json-crdt-extensions): 🎸 improve .points() iteration at offset
1 parent 4767697 commit 8de8676

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/json-crdt-extensions/peritext/overlay/Overlay.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ export class Overlay<T = string> implements Printable, Stateful {
203203
return () => (closed ? u : (closed = true, [u, u]));
204204
}
205205
let p1: OverlayPoint<T> | undefined;
206-
let p2: OverlayPoint<T> | undefined;
206+
let p2: OverlayPoint<T> | undefined = after;
207207
const iterator = this.points0(after);
208208
return () => {
209209
const next = iterator();

src/json-crdt-extensions/peritext/overlay/__tests__/Overlay.pairs.spec.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {MarkerOverlayPoint} from '../MarkerOverlayPoint';
55
import {OverlayPoint} from '../OverlayPoint';
66

77
const runPairsTests = (setup: () => Kit) => {
8-
describe('.pairs()', () => {
8+
describe('.pairs() full range', () => {
99
test('returns [undef, undef] single pair for an empty overlay', () => {
1010
const {peritext} = setup();
1111
const overlay = peritext.overlay;
@@ -133,6 +133,34 @@ const runPairsTests = (setup: () => Kit) => {
133133
expect(p3.refs.length).toBe(2);
134134
});
135135
});
136+
137+
describe('.pairs() at offset', () => {
138+
test('in empty overlay, after caret returns the last edge', () => {
139+
const {peritext} = setup();
140+
const overlay = peritext.overlay;
141+
peritext.editor.cursor.setAt(5);
142+
overlay.refresh();
143+
const first = overlay.first()!;
144+
const pairs = [...overlay.pairs(first)];
145+
expect(pairs).toEqual([
146+
[first, undefined],
147+
]);
148+
});
149+
150+
test('in empty overlay, after selection start returns the selection and the edge', () => {
151+
const {peritext} = setup();
152+
const overlay = peritext.overlay;
153+
peritext.editor.cursor.setAt(2, 4);
154+
overlay.refresh();
155+
const p1 = overlay.first()!;
156+
const p2 = next(p1)!;
157+
const list = [...overlay.pairs(p1)];
158+
expect(list).toEqual([
159+
[p1, p2],
160+
[p2, undefined],
161+
]);
162+
});
163+
});
136164
};
137165

138166
describe('numbers "0123456789", no edits', () => {

0 commit comments

Comments
 (0)