@rowsncolumns/y-spreadsheet 15.0.3 → 15.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/helpers.d.ts +5 -5
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +21 -17
- package/dist/cjs/types.d.ts +36 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.d.ts +9 -3
- package/dist/cjs/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.js +14 -13
- package/dist/cjs/use-yspreadsheet.d.ts +6 -4
- package/dist/cjs/use-yspreadsheet.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet.js +17 -15
- package/dist/esm/helpers.d.ts +5 -5
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +17 -17
- package/dist/esm/types.d.ts +36 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.d.ts +9 -3
- package/dist/esm/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.js +11 -10
- package/dist/esm/use-yspreadsheet.d.ts +6 -4
- package/dist/esm/use-yspreadsheet.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet.js +13 -13
- package/package.json +1 -2
package/dist/cjs/helpers.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type HistoryType, type SheetData, type SpreadsheetPatch } from "@rowsnc
|
|
|
3
3
|
import type { Patch } from "immer";
|
|
4
4
|
import * as Y from "yjs";
|
|
5
5
|
import type { YRowData, YSheetData } from "./use-yspreadsheet-v2";
|
|
6
|
-
import type { CellKeyV3, CellDataV3, ParsedCellKeyV3 } from "./types";
|
|
6
|
+
import type { CellKeyV3, CellDataV3, ParsedCellKeyV3, YjsRuntime } from "./types";
|
|
7
7
|
/**
|
|
8
8
|
* Simplified structure to pass event data synchronously
|
|
9
9
|
*/
|
|
@@ -24,7 +24,7 @@ export type SheetDataEvent = {
|
|
|
24
24
|
* @param source
|
|
25
25
|
* @param sheetDataVersion - Version of sheet data format ("v2" or "v3"). Falls back to docMeta if undefined.
|
|
26
26
|
*/
|
|
27
|
-
export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][], source?: "agent" | "user" | "backend", sheetDataVersion?: "v2" | "v3") => void;
|
|
27
|
+
export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][], source?: "agent" | "user" | "backend", sheetDataVersion?: "v2" | "v3", yjs?: YjsRuntime) => void;
|
|
28
28
|
/**
|
|
29
29
|
* Add sheet data to a yjs map using immer patches
|
|
30
30
|
*
|
|
@@ -33,10 +33,10 @@ export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, p
|
|
|
33
33
|
* 1. Deduplicating patches targeting the same cell (later patches win)
|
|
34
34
|
* 2. Grouping updates by sheet/row for efficient batch application
|
|
35
35
|
*/
|
|
36
|
-
export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[]) => void;
|
|
37
|
-
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number) => YSheetData;
|
|
36
|
+
export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[], yjs?: YjsRuntime) => void;
|
|
37
|
+
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number, yjs?: YjsRuntime) => YSheetData;
|
|
38
38
|
export declare const deleteSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number) => void;
|
|
39
|
-
export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string) => Y.Array<CellData | null>;
|
|
39
|
+
export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string, yjs?: YjsRuntime) => Y.Array<CellData | null>;
|
|
40
40
|
export declare const setCellDataInRowData: (rowData: Y.Array<CellData | null>, columnIndex: number | string, cellData?: CellData | null) => void;
|
|
41
41
|
export declare const removeRowData: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string) => void;
|
|
42
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,KAAK,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAOzB,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/helpers.js
CHANGED
|
@@ -17,9 +17,10 @@ var unset_1 = tslib_1.__importDefault(require("lodash/unset"));
|
|
|
17
17
|
* @param source
|
|
18
18
|
* @param sheetDataVersion - Version of sheet data format ("v2" or "v3"). Falls back to docMeta if undefined.
|
|
19
19
|
*/
|
|
20
|
-
var applyPatchesToYDoc = function (doc, userId, patches, source, sheetDataVersion) {
|
|
20
|
+
var applyPatchesToYDoc = function (doc, userId, patches, source, sheetDataVersion, yjs) {
|
|
21
21
|
var e_1, _a;
|
|
22
22
|
var _b, _c;
|
|
23
|
+
if (yjs === void 0) { yjs = Y; }
|
|
23
24
|
var ySheetDataV2 = doc.getMap("sheetDataV2");
|
|
24
25
|
var ySheetDataV3 = doc.getMap("sheetDataV3");
|
|
25
26
|
var yDocMeta = doc.getMap("docMeta");
|
|
@@ -50,7 +51,7 @@ var applyPatchesToYDoc = function (doc, userId, patches, source, sheetDataVersio
|
|
|
50
51
|
(0, exports.addSheetDataPatchesV3)(ySheetDataV3, patches_2);
|
|
51
52
|
}
|
|
52
53
|
else {
|
|
53
|
-
(0, exports.addSheetDataPatches)(ySheetDataV2, patches_2);
|
|
54
|
+
(0, exports.addSheetDataPatches)(ySheetDataV2, patches_2, yjs);
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
if (patch.sheets) {
|
|
@@ -131,8 +132,9 @@ exports.applyPatchesToYDoc = applyPatchesToYDoc;
|
|
|
131
132
|
* 1. Deduplicating patches targeting the same cell (later patches win)
|
|
132
133
|
* 2. Grouping updates by sheet/row for efficient batch application
|
|
133
134
|
*/
|
|
134
|
-
var addSheetDataPatches = function (ySheetData, patches) {
|
|
135
|
+
var addSheetDataPatches = function (ySheetData, patches, yjs) {
|
|
135
136
|
var e_2, _a;
|
|
137
|
+
if (yjs === void 0) { yjs = Y; }
|
|
136
138
|
// Optimization: consecutive cell-level patches are consolidated (later
|
|
137
139
|
// patches override earlier ones for the same cell) and applied together,
|
|
138
140
|
// grouped by sheet and row so bulk operations like paste (10k+ rows) cost
|
|
@@ -169,11 +171,11 @@ var addSheetDataPatches = function (ySheetData, patches) {
|
|
|
169
171
|
try {
|
|
170
172
|
for (var sheetRowUpdates_1 = tslib_1.__values(sheetRowUpdates), sheetRowUpdates_1_1 = sheetRowUpdates_1.next(); !sheetRowUpdates_1_1.done; sheetRowUpdates_1_1 = sheetRowUpdates_1.next()) {
|
|
171
173
|
var _g = tslib_1.__read(sheetRowUpdates_1_1.value, 2), sheetIdStr = _g[0], rowUpdates = _g[1];
|
|
172
|
-
var ysheet = (0, exports.getSheetFromYSheetData)(ySheetData, sheetIdStr);
|
|
174
|
+
var ysheet = (0, exports.getSheetFromYSheetData)(ySheetData, sheetIdStr, yjs);
|
|
173
175
|
try {
|
|
174
176
|
for (var rowUpdates_1 = (e_5 = void 0, tslib_1.__values(rowUpdates)), rowUpdates_1_1 = rowUpdates_1.next(); !rowUpdates_1_1.done; rowUpdates_1_1 = rowUpdates_1.next()) {
|
|
175
177
|
var _h = tslib_1.__read(rowUpdates_1_1.value, 2), rowIdx = _h[0], colUpdates = _h[1];
|
|
176
|
-
var rowData = (0, exports.getRowDataFromSheet)(ysheet, rowIdx);
|
|
178
|
+
var rowData = (0, exports.getRowDataFromSheet)(ysheet, rowIdx, yjs);
|
|
177
179
|
try {
|
|
178
180
|
for (var colUpdates_1 = (e_6 = void 0, tslib_1.__values(colUpdates)), colUpdates_1_1 = colUpdates_1.next(); !colUpdates_1_1.done; colUpdates_1_1 = colUpdates_1.next()) {
|
|
179
181
|
var _j = tslib_1.__read(colUpdates_1_1.value, 2), colIdx = _j[0], value = _j[1];
|
|
@@ -229,12 +231,12 @@ var addSheetDataPatches = function (ySheetData, patches) {
|
|
|
229
231
|
return;
|
|
230
232
|
}
|
|
231
233
|
if (op === "replace" || op === "add") {
|
|
232
|
-
var ysheet_1 = (0, exports.getSheetFromYSheetData)(ySheetData, sheetId);
|
|
234
|
+
var ysheet_1 = (0, exports.getSheetFromYSheetData)(ySheetData, sheetId, yjs);
|
|
233
235
|
// Cell-level patches (path.length === 4) are already handled above via consolidation
|
|
234
236
|
// [sheetId, rowIndex, 'values'] - Replace values array directly
|
|
235
237
|
if (path.length === 3 && path[2] === "values") {
|
|
236
238
|
var _c = tslib_1.__read(path, 2), rowIndex = _c[1];
|
|
237
|
-
var rowData_1 = (0, exports.getRowDataFromSheet)(ysheet_1, rowIndex);
|
|
239
|
+
var rowData_1 = (0, exports.getRowDataFromSheet)(ysheet_1, rowIndex, yjs);
|
|
238
240
|
// Clear existing row data
|
|
239
241
|
rowData_1.delete(0, rowData_1.length);
|
|
240
242
|
if (Array.isArray(value)) {
|
|
@@ -257,7 +259,7 @@ var addSheetDataPatches = function (ySheetData, patches) {
|
|
|
257
259
|
var _d = tslib_1.__read(path, 2), rowIndex = _d[1];
|
|
258
260
|
if (value === null || value === void 0 ? void 0 : value.values) {
|
|
259
261
|
// Replace entire row with new values
|
|
260
|
-
var rowData_2 = (0, exports.getRowDataFromSheet)(ysheet_1, rowIndex);
|
|
262
|
+
var rowData_2 = (0, exports.getRowDataFromSheet)(ysheet_1, rowIndex, yjs);
|
|
261
263
|
// Clear existing row data
|
|
262
264
|
rowData_2.delete(0, rowData_2.length);
|
|
263
265
|
// Add new cell values
|
|
@@ -293,7 +295,7 @@ var addSheetDataPatches = function (ySheetData, patches) {
|
|
|
293
295
|
.forEach(function (_a) {
|
|
294
296
|
var _b = tslib_1.__read(_a, 2), rowIndex = _b[0], rowData = _b[1];
|
|
295
297
|
if (rowData === null || rowData === void 0 ? void 0 : rowData.values) {
|
|
296
|
-
var rowDataArray_1 = (0, exports.getRowDataFromSheet)(ysheet_1, Number(rowIndex));
|
|
298
|
+
var rowDataArray_1 = (0, exports.getRowDataFromSheet)(ysheet_1, Number(rowIndex), yjs);
|
|
297
299
|
Object.entries(rowData.values)
|
|
298
300
|
.sort(function (_a, _b) {
|
|
299
301
|
var _c = tslib_1.__read(_a, 1), a = _c[0];
|
|
@@ -314,7 +316,7 @@ var addSheetDataPatches = function (ySheetData, patches) {
|
|
|
314
316
|
// [sheetId, rowIndex] - Remove entire row
|
|
315
317
|
if (path.length === 2) {
|
|
316
318
|
var _e = tslib_1.__read(path, 2), rowIndex = _e[1];
|
|
317
|
-
var ysheet = (0, exports.getSheetFromYSheetData)(ySheetData, sheetId);
|
|
319
|
+
var ysheet = (0, exports.getSheetFromYSheetData)(ySheetData, sheetId, yjs);
|
|
318
320
|
(0, exports.removeRowData)(ysheet, rowIndex);
|
|
319
321
|
}
|
|
320
322
|
// [sheetId] - Remove entire sheet
|
|
@@ -359,11 +361,12 @@ var addSheetDataPatches = function (ySheetData, patches) {
|
|
|
359
361
|
flushPendingCellUpdates();
|
|
360
362
|
};
|
|
361
363
|
exports.addSheetDataPatches = addSheetDataPatches;
|
|
362
|
-
var getSheetFromYSheetData = function (ySheetData, sheetId) {
|
|
364
|
+
var getSheetFromYSheetData = function (ySheetData, sheetId, yjs) {
|
|
365
|
+
if (yjs === void 0) { yjs = Y; }
|
|
363
366
|
var id = String(sheetId);
|
|
364
367
|
var sheet = ySheetData.get(id);
|
|
365
368
|
if (!sheet) {
|
|
366
|
-
sheet = new
|
|
369
|
+
sheet = new yjs.Array();
|
|
367
370
|
ySheetData.set(id, sheet);
|
|
368
371
|
}
|
|
369
372
|
return sheet;
|
|
@@ -374,7 +377,8 @@ var deleteSheetFromYSheetData = function (ySheetData, sheetId) {
|
|
|
374
377
|
ySheetData.delete(id);
|
|
375
378
|
};
|
|
376
379
|
exports.deleteSheetFromYSheetData = deleteSheetFromYSheetData;
|
|
377
|
-
var getRowDataFromSheet = function (ysheet, rowIndex) {
|
|
380
|
+
var getRowDataFromSheet = function (ysheet, rowIndex, yjs) {
|
|
381
|
+
if (yjs === void 0) { yjs = Y; }
|
|
378
382
|
var index = Number(rowIndex);
|
|
379
383
|
if (index < 0) {
|
|
380
384
|
throw new Error("Row index cannot be negative");
|
|
@@ -385,8 +389,8 @@ var getRowDataFromSheet = function (ysheet, rowIndex) {
|
|
|
385
389
|
ysheet.insert(ysheet.length, padding);
|
|
386
390
|
ysheet.insert(index, [null]); // Insert null first
|
|
387
391
|
// Create new row data
|
|
388
|
-
var newRowData = new
|
|
389
|
-
newRowData.set("values", new
|
|
392
|
+
var newRowData = new yjs.Map();
|
|
393
|
+
newRowData.set("values", new yjs.Array());
|
|
390
394
|
// Replace the null
|
|
391
395
|
ysheet.insert(index, [newRowData]);
|
|
392
396
|
ysheet.delete(index + 1, 1);
|
|
@@ -404,8 +408,8 @@ var getRowDataFromSheet = function (ysheet, rowIndex) {
|
|
|
404
408
|
var rowData = ysheet.get(index);
|
|
405
409
|
if (!rowData || !rowData.get("values")) {
|
|
406
410
|
// Create new row data if it doesn't exist or is incomplete
|
|
407
|
-
var newRowData = new
|
|
408
|
-
newRowData.set("values", new
|
|
411
|
+
var newRowData = new yjs.Map();
|
|
412
|
+
newRowData.set("values", new yjs.Array());
|
|
409
413
|
// Replace the existing item
|
|
410
414
|
ysheet.insert(index, [newRowData]);
|
|
411
415
|
ysheet.delete(index + 1, 1);
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
import type { Patch } from "immer";
|
|
2
2
|
import type { RecalcCellCoordinate } from "@rowsncolumns/spreadsheet-state";
|
|
3
3
|
import type { CellData } from "@rowsncolumns/spreadsheet";
|
|
4
|
+
import type * as Y from "yjs";
|
|
5
|
+
/**
|
|
6
|
+
* The Yjs members y-spreadsheet needs as runtime values: the shared-type
|
|
7
|
+
* constructors it instantiates and `instanceof`-checks, and the update
|
|
8
|
+
* functions `useYSpreadsheet` calls on the document. Defaults to the `yjs`
|
|
9
|
+
* (13) module; pass the namespace of the Yjs implementation that created
|
|
10
|
+
* `doc` (for example a yjs-13-compatible layer over `@y/y` 14) so the types
|
|
11
|
+
* this hook creates belong to the same implementation as the document and
|
|
12
|
+
* its `instanceof` checks see that implementation's classes. The members are
|
|
13
|
+
* typed against yjs 13, so another implementation is passed with a cast.
|
|
14
|
+
*/
|
|
15
|
+
export type YjsRuntime = {
|
|
16
|
+
Map: typeof Y.Map;
|
|
17
|
+
Array: typeof Y.Array;
|
|
18
|
+
YArrayEvent: typeof Y.YArrayEvent;
|
|
19
|
+
Doc: typeof Y.Doc;
|
|
20
|
+
applyUpdate: typeof Y.applyUpdate;
|
|
21
|
+
diffUpdate: typeof Y.diffUpdate;
|
|
22
|
+
encodeStateAsUpdate: typeof Y.encodeStateAsUpdate;
|
|
23
|
+
encodeStateVector: typeof Y.encodeStateVector;
|
|
24
|
+
};
|
|
25
|
+
/** The awareness surface the hooks use (y-protocols and @y/protocols both satisfy it). */
|
|
26
|
+
export type AwarenessLike = {
|
|
27
|
+
getStates(): Map<number, Record<string, any>>;
|
|
28
|
+
on(event: "change", callback: (...args: any[]) => void): void;
|
|
29
|
+
off(event: "change", callback: (...args: any[]) => void): void;
|
|
30
|
+
setLocalState(state: Record<string, any> | null): void;
|
|
31
|
+
setLocalStateField(field: string, value: any): void;
|
|
32
|
+
};
|
|
33
|
+
/** A collaboration provider as the hooks see it: an optional awareness plus sync/status events. */
|
|
34
|
+
export type CollabProviderLike = {
|
|
35
|
+
awareness?: AwarenessLike | null;
|
|
36
|
+
synced?: boolean;
|
|
37
|
+
on?(event: string, callback: (...args: any[]) => void): void;
|
|
38
|
+
off?(event: string, callback: (...args: any[]) => void): void;
|
|
39
|
+
};
|
|
4
40
|
export type PatchDocument<T = Patch> = {
|
|
5
41
|
userId: string | number;
|
|
6
42
|
patches: T[];
|
package/dist/cjs/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ import type { CellInterface, SelectionArea } from "@rowsncolumns/grid";
|
|
|
4
4
|
import { PivotTable, type CellData, type Collaborator, type ConditionalFormatRule, type DataValidationRuleRecord, type EmbeddedChart, type EmbeddedObject, type NamedRange, type ProtectedRange, type Sheet, type TableView } from "@rowsncolumns/spreadsheet";
|
|
5
5
|
import { type CalculateNowOptions, type CalculationOperation, type CellXfs, type HistoryType, type SheetData, type SharedStrings, type SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
6
6
|
import type { Patch } from "immer";
|
|
7
|
-
import type { WebsocketProvider } from "y-websocket";
|
|
8
7
|
import * as Y from "yjs";
|
|
8
|
+
import type { CollabProviderLike, YjsRuntime } from "./types";
|
|
9
9
|
export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject> = {
|
|
10
10
|
/**
|
|
11
11
|
* Scopes awareness updates to a single document.
|
|
@@ -56,8 +56,14 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
56
56
|
* needed so agents touching A1:E10 don't appear to be sitting on A1.
|
|
57
57
|
*/
|
|
58
58
|
selections?: SelectionArea[];
|
|
59
|
-
provider?: HocuspocusProvider |
|
|
59
|
+
provider?: HocuspocusProvider | CollabProviderLike | any;
|
|
60
60
|
doc: Y.Doc;
|
|
61
|
+
/**
|
|
62
|
+
* The Yjs implementation `doc` belongs to (its shared-type constructors and
|
|
63
|
+
* event classes). Defaults to `yjs`; pass the namespace that created `doc`
|
|
64
|
+
* when it is not the `yjs` module (see `YjsRuntime`).
|
|
65
|
+
*/
|
|
66
|
+
yjs?: YjsRuntime;
|
|
61
67
|
calculateNow(options?: CalculateNowOptions): Promise<void>;
|
|
62
68
|
initialSheets: S[];
|
|
63
69
|
/**
|
|
@@ -154,7 +160,7 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
154
160
|
};
|
|
155
161
|
export type YRowData = Y.Map<Y.Array<CellData | null>>;
|
|
156
162
|
export type YSheetData = Y.Array<YRowData | null>;
|
|
157
|
-
export declare const useYSpreadsheetV2: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
163
|
+
export declare const useYSpreadsheetV2: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
158
164
|
synced: boolean;
|
|
159
165
|
users: Collaborator[];
|
|
160
166
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-yspreadsheet-v2.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAEL,UAAU,EACV,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,SAAS,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-yspreadsheet-v2.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,9 @@ var helpers_1 = require("./helpers");
|
|
|
12
12
|
/**
|
|
13
13
|
* Convert Y.js events to SheetDataEvent format for incremental processing
|
|
14
14
|
*/
|
|
15
|
-
var convertToSheetDataEvents = function (events) {
|
|
15
|
+
var convertToSheetDataEvents = function (events, yjs) {
|
|
16
16
|
return events.map(function (event) {
|
|
17
|
-
var isYArrayEvent = event instanceof
|
|
17
|
+
var isYArrayEvent = event instanceof yjs.YArrayEvent;
|
|
18
18
|
return {
|
|
19
19
|
path: event.path,
|
|
20
20
|
delta: isYArrayEvent
|
|
@@ -57,10 +57,10 @@ var observables_1 = require("./observables");
|
|
|
57
57
|
// Add a single null entry to the YSheetData
|
|
58
58
|
var origin = "local";
|
|
59
59
|
var useYSpreadsheetV2 = function (_a) {
|
|
60
|
-
var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onAfterBroadcastPatch = _a.onAfterBroadcastPatch, recalcCellsMaxEntries = _a.recalcCellsMaxEntries, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onChangePivotTables = _a.onChangePivotTables, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, reevaluateDerivationsForCells = _a.reevaluateDerivationsForCells, onChangeCellXfs = _a.onChangeCellXfs, onChangeSharedStrings = _a.onChangeSharedStrings, calculateNow = _a.calculateNow, onChangeActiveSheet = _a.onChangeActiveSheet, clientOnlyFunctionPattern = _a.clientOnlyFunctionPattern, initialSheets = _a.initialSheets, awarenessScopeId = _a.awarenessScopeId, _b = _a.canWrite, canWrite = _b === void 0 ? true : _b, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, kind = _a.kind, agentInitiator = _a.agentInitiator, selections = _a.selections, doc = _a.doc, provider = _a.provider, _c = _a.
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
60
|
+
var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onAfterBroadcastPatch = _a.onAfterBroadcastPatch, recalcCellsMaxEntries = _a.recalcCellsMaxEntries, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onChangePivotTables = _a.onChangePivotTables, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, reevaluateDerivationsForCells = _a.reevaluateDerivationsForCells, onChangeCellXfs = _a.onChangeCellXfs, onChangeSharedStrings = _a.onChangeSharedStrings, calculateNow = _a.calculateNow, onChangeActiveSheet = _a.onChangeActiveSheet, clientOnlyFunctionPattern = _a.clientOnlyFunctionPattern, initialSheets = _a.initialSheets, awarenessScopeId = _a.awarenessScopeId, _b = _a.canWrite, canWrite = _b === void 0 ? true : _b, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, kind = _a.kind, agentInitiator = _a.agentInitiator, selections = _a.selections, doc = _a.doc, provider = _a.provider, _c = _a.yjs, yjs = _c === void 0 ? Y : _c, _d = _a.useV3, useV3 = _d === void 0 ? false : _d, _e = _a.sheetDataVersion, sheetDataVersion = _e === void 0 ? "v2" : _e, onMigrationComplete = _a.onMigrationComplete, _f = _a.deleteV2AfterMigration, deleteV2AfterMigration = _f === void 0 ? false : _f, _g = _a.skipInitialSync, skipInitialSync = _g === void 0 ? false : _g, _h = _a.supportLegacySharedStringsArray, supportLegacySharedStringsArray = _h === void 0 ? false : _h;
|
|
61
|
+
var _j = tslib_1.__read((0, react_1.useState)(false), 2), synced = _j[0], setSynced = _j[1];
|
|
62
|
+
var _k = tslib_1.__read((0, react_1.useState)([]), 2), users = _k[0], setUsers = _k[1];
|
|
63
|
+
var _l = tslib_1.__read((0, react_1.useState)(false), 2), isLeader = _l[0], setIsLeader = _l[1];
|
|
64
64
|
var isLeaderRef = (0, react_1.useRef)(false);
|
|
65
65
|
var resolvedAwarenessScopeId = awarenessScopeId;
|
|
66
66
|
// Listen to awareness
|
|
@@ -571,7 +571,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
571
571
|
var origin_1 = (_b = (_a = events === null || events === void 0 ? void 0 : events[0]) === null || _a === void 0 ? void 0 : _a.transaction) === null || _b === void 0 ? void 0 : _b.origin;
|
|
572
572
|
if (origin_1 !== "local") {
|
|
573
573
|
// Convert Y.js events to SheetDataEvent format and apply incremental updates
|
|
574
|
-
var sheetDataEvents_1 = convertToSheetDataEvents(events);
|
|
574
|
+
var sheetDataEvents_1 = convertToSheetDataEvents(events, yjs);
|
|
575
575
|
onChangeSheetData(function (prevSheetData) {
|
|
576
576
|
var result = (0, helpers_1.processSheetDataEvents)(sheetDataEvents_1, prevSheetData, ySheetDataV2);
|
|
577
577
|
// Fall back to full serialization only if incremental update fails
|
|
@@ -636,7 +636,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
636
636
|
var subs = [];
|
|
637
637
|
var _loop_1 = function (mappingKey, ydoc, callback) {
|
|
638
638
|
// Only observe Arrays (shared strings Map is handled separately if needed)
|
|
639
|
-
if (ydoc instanceof
|
|
639
|
+
if (ydoc instanceof yjs.Array) {
|
|
640
640
|
var subscription = (0, observables_1.createDeepObservable)(ydoc).subscribe(function (events) {
|
|
641
641
|
var e_7, _a;
|
|
642
642
|
var _b;
|
|
@@ -664,7 +664,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
664
664
|
});
|
|
665
665
|
subs.push(subscription);
|
|
666
666
|
}
|
|
667
|
-
else if (ydoc instanceof
|
|
667
|
+
else if (ydoc instanceof yjs.Map && mappingKey === "sharedStrings") {
|
|
668
668
|
// Handle shared strings Map observation
|
|
669
669
|
var callback_map_1 = function (event) {
|
|
670
670
|
if (event.transaction.origin !== "local") {
|
|
@@ -818,7 +818,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
818
818
|
(0, helpers_1.addSheetDataPatchesV3)(ySheetDataV3, persistableErrorCellPatches_1);
|
|
819
819
|
}
|
|
820
820
|
else {
|
|
821
|
-
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, persistableErrorCellPatches_1);
|
|
821
|
+
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, persistableErrorCellPatches_1, yjs);
|
|
822
822
|
}
|
|
823
823
|
}, origin);
|
|
824
824
|
}
|
|
@@ -844,7 +844,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
844
844
|
(0, helpers_1.addSheetDataPatchesV3)(ySheetDataV3, patches_3);
|
|
845
845
|
}
|
|
846
846
|
else {
|
|
847
|
-
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, patches_3);
|
|
847
|
+
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, patches_3, yjs);
|
|
848
848
|
}
|
|
849
849
|
}
|
|
850
850
|
if (patch.cellXfs) {
|
|
@@ -857,10 +857,10 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
857
857
|
if (patch === null || patch === void 0 ? void 0 : patch[mappingKey]) {
|
|
858
858
|
var patches_5 = (_e = patch[mappingKey]) === null || _e === void 0 ? void 0 : _e[patchKey];
|
|
859
859
|
// Handle shared strings Map (always use Map now)
|
|
860
|
-
if (mappingKey === "sharedStrings" && ydoc instanceof
|
|
860
|
+
if (mappingKey === "sharedStrings" && ydoc instanceof yjs.Map) {
|
|
861
861
|
(0, helpers_1.applyMapPatches)(ydoc, patches_5);
|
|
862
862
|
}
|
|
863
|
-
else if (ydoc instanceof
|
|
863
|
+
else if (ydoc instanceof yjs.Array) {
|
|
864
864
|
// Check if we are updating sheets
|
|
865
865
|
if (mappingKey === "sheets" && ydoc.length === 0) {
|
|
866
866
|
// Add initial sheets
|
|
@@ -906,6 +906,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
906
906
|
onAfterBroadcastPatch,
|
|
907
907
|
documentMap,
|
|
908
908
|
yRecalcCells,
|
|
909
|
+
yjs,
|
|
909
910
|
doc,
|
|
910
911
|
userId,
|
|
911
912
|
yDisableRecalc,
|
|
@@ -3,15 +3,17 @@ import type { CellInterface } from "@rowsncolumns/grid";
|
|
|
3
3
|
import type { CellData, Collaborator, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, ProtectedRange, Sheet, TableView } from "@rowsncolumns/spreadsheet";
|
|
4
4
|
import type { CalculateNowOptions, CalculationOperation, HistoryType, SheetData, SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
5
5
|
import type { Patch } from "immer";
|
|
6
|
-
import
|
|
7
|
-
import type
|
|
6
|
+
import * as Y from "yjs";
|
|
7
|
+
import type { CollabProviderLike, YjsRuntime } from "./types";
|
|
8
8
|
export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject> = {
|
|
9
9
|
userId: string | number;
|
|
10
10
|
title: string;
|
|
11
11
|
sheetId: number;
|
|
12
12
|
activeCell?: CellInterface;
|
|
13
|
-
provider?: HocuspocusProvider |
|
|
13
|
+
provider?: HocuspocusProvider | CollabProviderLike | any;
|
|
14
14
|
doc: Y.Doc;
|
|
15
|
+
/** The Yjs implementation `doc` belongs to; defaults to `yjs` (see `YjsRuntime`). */
|
|
16
|
+
yjs?: YjsRuntime;
|
|
15
17
|
calculateNow(options?: CalculateNowOptions): void;
|
|
16
18
|
onChangeSheetData: React.Dispatch<React.SetStateAction<SheetData<T>>>;
|
|
17
19
|
onChangeTables: React.Dispatch<React.SetStateAction<TableView[]>>;
|
|
@@ -31,7 +33,7 @@ export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends
|
|
|
31
33
|
* Does not load initial data
|
|
32
34
|
* @returns
|
|
33
35
|
*/
|
|
34
|
-
export declare const useYSpreadsheet: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
36
|
+
export declare const useYSpreadsheet: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
35
37
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined][]) => void;
|
|
36
38
|
users: Collaborator[];
|
|
37
39
|
synced: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,UAAU,EACV,cAAc,EACd,KAAK,EACL,SAAS,EACV,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EAEX,SAAS,EACT,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,15 @@ var spreadsheet_1 = require("@rowsncolumns/spreadsheet");
|
|
|
6
6
|
var immer_1 = require("immer");
|
|
7
7
|
var uniqBy_1 = tslib_1.__importDefault(require("lodash/uniqBy"));
|
|
8
8
|
var react_1 = require("react");
|
|
9
|
-
var
|
|
10
|
-
var getStateVector = function (doc
|
|
9
|
+
var Y = tslib_1.__importStar(require("yjs"));
|
|
10
|
+
var getStateVector = function (doc, yjs) {
|
|
11
|
+
return yjs.encodeStateVector(doc);
|
|
12
|
+
};
|
|
11
13
|
// Function to get updates between two state vectors
|
|
12
|
-
var getUpdatesBetween = function (doc, stateVector1, stateVector2) {
|
|
13
|
-
var diff =
|
|
14
|
-
var newDiff =
|
|
15
|
-
return
|
|
14
|
+
var getUpdatesBetween = function (doc, stateVector1, stateVector2, yjs) {
|
|
15
|
+
var diff = yjs.encodeStateAsUpdate(doc, stateVector1);
|
|
16
|
+
var newDiff = yjs.encodeStateAsUpdate(doc, stateVector2);
|
|
17
|
+
return yjs.diffUpdate(diff, newDiff);
|
|
16
18
|
};
|
|
17
19
|
/**
|
|
18
20
|
* Connects to a Y server and picks up the most recent change
|
|
@@ -20,9 +22,9 @@ var getUpdatesBetween = function (doc, stateVector1, stateVector2) {
|
|
|
20
22
|
* @returns
|
|
21
23
|
*/
|
|
22
24
|
var useYSpreadsheet = function (_a) {
|
|
23
|
-
var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onError = _a.onError, enqueueCalculation = _a.enqueueCalculation, calculateNow = _a.calculateNow, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, doc = _a.doc, provider = _a.provider;
|
|
24
|
-
var
|
|
25
|
-
var
|
|
25
|
+
var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onError = _a.onError, enqueueCalculation = _a.enqueueCalculation, calculateNow = _a.calculateNow, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, doc = _a.doc, provider = _a.provider, _b = _a.yjs, yjs = _b === void 0 ? Y : _b;
|
|
26
|
+
var _c = tslib_1.__read((0, react_1.useState)([]), 2), users = _c[0], setUsers = _c[1];
|
|
27
|
+
var _d = tslib_1.__read((0, react_1.useState)(false), 2), synced = _d[0], setSynced = _d[1];
|
|
26
28
|
var previousStateVectorRef = (0, react_1.useRef)(undefined);
|
|
27
29
|
var currentStateVectorRef = (0, react_1.useRef)(undefined);
|
|
28
30
|
// Recalc cells
|
|
@@ -96,10 +98,10 @@ var useYSpreadsheet = function (_a) {
|
|
|
96
98
|
var syncedDoc = doc;
|
|
97
99
|
if (previousStateVectorRef.current) {
|
|
98
100
|
// Capture the current state vector on subsequent syncs
|
|
99
|
-
currentStateVectorRef.current = getStateVector(doc);
|
|
100
|
-
var updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current);
|
|
101
|
-
var newDoc = new
|
|
102
|
-
|
|
101
|
+
currentStateVectorRef.current = getStateVector(doc, yjs);
|
|
102
|
+
var updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current, yjs);
|
|
103
|
+
var newDoc = new yjs.Doc({ gc: true });
|
|
104
|
+
yjs.applyUpdate(newDoc, updates);
|
|
103
105
|
syncedDoc = newDoc;
|
|
104
106
|
previousStateVectorRef.current = currentStateVectorRef.current;
|
|
105
107
|
}
|
|
@@ -169,7 +171,7 @@ var useYSpreadsheet = function (_a) {
|
|
|
169
171
|
});
|
|
170
172
|
// Set synced
|
|
171
173
|
setSynced(true);
|
|
172
|
-
}, [calculateNow, docMap, onError, doc]);
|
|
174
|
+
}, [calculateNow, docMap, onError, doc, yjs]);
|
|
173
175
|
// Sync state
|
|
174
176
|
if ((provider === null || provider === void 0 ? void 0 : provider.synced) && !synced) {
|
|
175
177
|
onSynced();
|
|
@@ -180,7 +182,7 @@ var useYSpreadsheet = function (_a) {
|
|
|
180
182
|
var onConnectionStatusChange = function (_a) {
|
|
181
183
|
var status = _a.status;
|
|
182
184
|
if (status === "disconnected") {
|
|
183
|
-
previousStateVectorRef.current = getStateVector(doc);
|
|
185
|
+
previousStateVectorRef.current = getStateVector(doc, yjs);
|
|
184
186
|
}
|
|
185
187
|
};
|
|
186
188
|
provider === null || provider === void 0 ? void 0 : provider.on("status", onConnectionStatusChange);
|
package/dist/esm/helpers.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type HistoryType, type SheetData, type SpreadsheetPatch } from "@rowsnc
|
|
|
3
3
|
import type { Patch } from "immer";
|
|
4
4
|
import * as Y from "yjs";
|
|
5
5
|
import type { YRowData, YSheetData } from "./use-yspreadsheet-v2";
|
|
6
|
-
import type { CellKeyV3, CellDataV3, ParsedCellKeyV3 } from "./types";
|
|
6
|
+
import type { CellKeyV3, CellDataV3, ParsedCellKeyV3, YjsRuntime } from "./types";
|
|
7
7
|
/**
|
|
8
8
|
* Simplified structure to pass event data synchronously
|
|
9
9
|
*/
|
|
@@ -24,7 +24,7 @@ export type SheetDataEvent = {
|
|
|
24
24
|
* @param source
|
|
25
25
|
* @param sheetDataVersion - Version of sheet data format ("v2" or "v3"). Falls back to docMeta if undefined.
|
|
26
26
|
*/
|
|
27
|
-
export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][], source?: "agent" | "user" | "backend", sheetDataVersion?: "v2" | "v3") => void;
|
|
27
|
+
export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][], source?: "agent" | "user" | "backend", sheetDataVersion?: "v2" | "v3", yjs?: YjsRuntime) => void;
|
|
28
28
|
/**
|
|
29
29
|
* Add sheet data to a yjs map using immer patches
|
|
30
30
|
*
|
|
@@ -33,10 +33,10 @@ export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, p
|
|
|
33
33
|
* 1. Deduplicating patches targeting the same cell (later patches win)
|
|
34
34
|
* 2. Grouping updates by sheet/row for efficient batch application
|
|
35
35
|
*/
|
|
36
|
-
export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[]) => void;
|
|
37
|
-
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number) => YSheetData;
|
|
36
|
+
export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[], yjs?: YjsRuntime) => void;
|
|
37
|
+
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number, yjs?: YjsRuntime) => YSheetData;
|
|
38
38
|
export declare const deleteSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number) => void;
|
|
39
|
-
export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string) => Y.Array<CellData | null>;
|
|
39
|
+
export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string, yjs?: YjsRuntime) => Y.Array<CellData | null>;
|
|
40
40
|
export declare const setCellDataInRowData: (rowData: Y.Array<CellData | null>, columnIndex: number | string, cellData?: CellData | null) => void;
|
|
41
41
|
export declare const removeRowData: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string) => void;
|
|
42
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,KAAK,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAOzB,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/helpers.js
CHANGED
|
@@ -13,7 +13,7 @@ import unset from "lodash/unset";
|
|
|
13
13
|
* @param source
|
|
14
14
|
* @param sheetDataVersion - Version of sheet data format ("v2" or "v3"). Falls back to docMeta if undefined.
|
|
15
15
|
*/
|
|
16
|
-
export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersion) => {
|
|
16
|
+
export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersion, yjs = Y) => {
|
|
17
17
|
const ySheetDataV2 = doc.getMap("sheetDataV2");
|
|
18
18
|
const ySheetDataV3 = doc.getMap("sheetDataV3");
|
|
19
19
|
const yDocMeta = doc.getMap("docMeta");
|
|
@@ -42,7 +42,7 @@ export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersio
|
|
|
42
42
|
addSheetDataPatchesV3(ySheetDataV3, patches);
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
|
-
addSheetDataPatches(ySheetDataV2, patches);
|
|
45
|
+
addSheetDataPatches(ySheetDataV2, patches, yjs);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
if (patch.sheets) {
|
|
@@ -114,7 +114,7 @@ export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersio
|
|
|
114
114
|
* 1. Deduplicating patches targeting the same cell (later patches win)
|
|
115
115
|
* 2. Grouping updates by sheet/row for efficient batch application
|
|
116
116
|
*/
|
|
117
|
-
export const addSheetDataPatches = (ySheetData, patches) => {
|
|
117
|
+
export const addSheetDataPatches = (ySheetData, patches, yjs = Y) => {
|
|
118
118
|
// Optimization: consecutive cell-level patches are consolidated (later
|
|
119
119
|
// patches override earlier ones for the same cell) and applied together,
|
|
120
120
|
// grouped by sheet and row so bulk operations like paste (10k+ rows) cost
|
|
@@ -138,9 +138,9 @@ export const addSheetDataPatches = (ySheetData, patches) => {
|
|
|
138
138
|
rowUpdates.get(rowIdx).set(colIdx, value);
|
|
139
139
|
}
|
|
140
140
|
for (const [sheetIdStr, rowUpdates] of sheetRowUpdates) {
|
|
141
|
-
const ysheet = getSheetFromYSheetData(ySheetData, sheetIdStr);
|
|
141
|
+
const ysheet = getSheetFromYSheetData(ySheetData, sheetIdStr, yjs);
|
|
142
142
|
for (const [rowIdx, colUpdates] of rowUpdates) {
|
|
143
|
-
const rowData = getRowDataFromSheet(ysheet, rowIdx);
|
|
143
|
+
const rowData = getRowDataFromSheet(ysheet, rowIdx, yjs);
|
|
144
144
|
for (const [colIdx, value] of colUpdates) {
|
|
145
145
|
setCellDataInRowData(rowData, colIdx, value);
|
|
146
146
|
}
|
|
@@ -169,12 +169,12 @@ export const addSheetDataPatches = (ySheetData, patches) => {
|
|
|
169
169
|
return;
|
|
170
170
|
}
|
|
171
171
|
if (op === "replace" || op === "add") {
|
|
172
|
-
const ysheet = getSheetFromYSheetData(ySheetData, sheetId);
|
|
172
|
+
const ysheet = getSheetFromYSheetData(ySheetData, sheetId, yjs);
|
|
173
173
|
// Cell-level patches (path.length === 4) are already handled above via consolidation
|
|
174
174
|
// [sheetId, rowIndex, 'values'] - Replace values array directly
|
|
175
175
|
if (path.length === 3 && path[2] === "values") {
|
|
176
176
|
const [, rowIndex] = path;
|
|
177
|
-
const rowData = getRowDataFromSheet(ysheet, rowIndex);
|
|
177
|
+
const rowData = getRowDataFromSheet(ysheet, rowIndex, yjs);
|
|
178
178
|
// Clear existing row data
|
|
179
179
|
rowData.delete(0, rowData.length);
|
|
180
180
|
if (Array.isArray(value)) {
|
|
@@ -192,7 +192,7 @@ export const addSheetDataPatches = (ySheetData, patches) => {
|
|
|
192
192
|
const [, rowIndex] = path;
|
|
193
193
|
if (value?.values) {
|
|
194
194
|
// Replace entire row with new values
|
|
195
|
-
const rowData = getRowDataFromSheet(ysheet, rowIndex);
|
|
195
|
+
const rowData = getRowDataFromSheet(ysheet, rowIndex, yjs);
|
|
196
196
|
// Clear existing row data
|
|
197
197
|
rowData.delete(0, rowData.length);
|
|
198
198
|
// Add new cell values
|
|
@@ -218,7 +218,7 @@ export const addSheetDataPatches = (ySheetData, patches) => {
|
|
|
218
218
|
.sort(([a], [b]) => Number(a) - Number(b))
|
|
219
219
|
.forEach(([rowIndex, rowData]) => {
|
|
220
220
|
if (rowData?.values) {
|
|
221
|
-
const rowDataArray = getRowDataFromSheet(ysheet, Number(rowIndex));
|
|
221
|
+
const rowDataArray = getRowDataFromSheet(ysheet, Number(rowIndex), yjs);
|
|
222
222
|
Object.entries(rowData.values)
|
|
223
223
|
.sort(([a], [b]) => Number(a) - Number(b))
|
|
224
224
|
.forEach(([columnIndex, cellData]) => {
|
|
@@ -234,7 +234,7 @@ export const addSheetDataPatches = (ySheetData, patches) => {
|
|
|
234
234
|
// [sheetId, rowIndex] - Remove entire row
|
|
235
235
|
if (path.length === 2) {
|
|
236
236
|
const [, rowIndex] = path;
|
|
237
|
-
const ysheet = getSheetFromYSheetData(ySheetData, sheetId);
|
|
237
|
+
const ysheet = getSheetFromYSheetData(ySheetData, sheetId, yjs);
|
|
238
238
|
removeRowData(ysheet, rowIndex);
|
|
239
239
|
}
|
|
240
240
|
// [sheetId] - Remove entire sheet
|
|
@@ -268,11 +268,11 @@ export const addSheetDataPatches = (ySheetData, patches) => {
|
|
|
268
268
|
}
|
|
269
269
|
flushPendingCellUpdates();
|
|
270
270
|
};
|
|
271
|
-
export const getSheetFromYSheetData = (ySheetData, sheetId) => {
|
|
271
|
+
export const getSheetFromYSheetData = (ySheetData, sheetId, yjs = Y) => {
|
|
272
272
|
const id = String(sheetId);
|
|
273
273
|
let sheet = ySheetData.get(id);
|
|
274
274
|
if (!sheet) {
|
|
275
|
-
sheet = new
|
|
275
|
+
sheet = new yjs.Array();
|
|
276
276
|
ySheetData.set(id, sheet);
|
|
277
277
|
}
|
|
278
278
|
return sheet;
|
|
@@ -281,7 +281,7 @@ export const deleteSheetFromYSheetData = (ySheetData, sheetId) => {
|
|
|
281
281
|
const id = String(sheetId);
|
|
282
282
|
ySheetData.delete(id);
|
|
283
283
|
};
|
|
284
|
-
export const getRowDataFromSheet = (ysheet, rowIndex) => {
|
|
284
|
+
export const getRowDataFromSheet = (ysheet, rowIndex, yjs = Y) => {
|
|
285
285
|
const index = Number(rowIndex);
|
|
286
286
|
if (index < 0) {
|
|
287
287
|
throw new Error("Row index cannot be negative");
|
|
@@ -292,8 +292,8 @@ export const getRowDataFromSheet = (ysheet, rowIndex) => {
|
|
|
292
292
|
ysheet.insert(ysheet.length, padding);
|
|
293
293
|
ysheet.insert(index, [null]); // Insert null first
|
|
294
294
|
// Create new row data
|
|
295
|
-
const newRowData = new
|
|
296
|
-
newRowData.set("values", new
|
|
295
|
+
const newRowData = new yjs.Map();
|
|
296
|
+
newRowData.set("values", new yjs.Array());
|
|
297
297
|
// Replace the null
|
|
298
298
|
ysheet.insert(index, [newRowData]);
|
|
299
299
|
ysheet.delete(index + 1, 1);
|
|
@@ -311,8 +311,8 @@ export const getRowDataFromSheet = (ysheet, rowIndex) => {
|
|
|
311
311
|
let rowData = ysheet.get(index);
|
|
312
312
|
if (!rowData || !rowData.get("values")) {
|
|
313
313
|
// Create new row data if it doesn't exist or is incomplete
|
|
314
|
-
const newRowData = new
|
|
315
|
-
newRowData.set("values", new
|
|
314
|
+
const newRowData = new yjs.Map();
|
|
315
|
+
newRowData.set("values", new yjs.Array());
|
|
316
316
|
// Replace the existing item
|
|
317
317
|
ysheet.insert(index, [newRowData]);
|
|
318
318
|
ysheet.delete(index + 1, 1);
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
import type { Patch } from "immer";
|
|
2
2
|
import type { RecalcCellCoordinate } from "@rowsncolumns/spreadsheet-state";
|
|
3
3
|
import type { CellData } from "@rowsncolumns/spreadsheet";
|
|
4
|
+
import type * as Y from "yjs";
|
|
5
|
+
/**
|
|
6
|
+
* The Yjs members y-spreadsheet needs as runtime values: the shared-type
|
|
7
|
+
* constructors it instantiates and `instanceof`-checks, and the update
|
|
8
|
+
* functions `useYSpreadsheet` calls on the document. Defaults to the `yjs`
|
|
9
|
+
* (13) module; pass the namespace of the Yjs implementation that created
|
|
10
|
+
* `doc` (for example a yjs-13-compatible layer over `@y/y` 14) so the types
|
|
11
|
+
* this hook creates belong to the same implementation as the document and
|
|
12
|
+
* its `instanceof` checks see that implementation's classes. The members are
|
|
13
|
+
* typed against yjs 13, so another implementation is passed with a cast.
|
|
14
|
+
*/
|
|
15
|
+
export type YjsRuntime = {
|
|
16
|
+
Map: typeof Y.Map;
|
|
17
|
+
Array: typeof Y.Array;
|
|
18
|
+
YArrayEvent: typeof Y.YArrayEvent;
|
|
19
|
+
Doc: typeof Y.Doc;
|
|
20
|
+
applyUpdate: typeof Y.applyUpdate;
|
|
21
|
+
diffUpdate: typeof Y.diffUpdate;
|
|
22
|
+
encodeStateAsUpdate: typeof Y.encodeStateAsUpdate;
|
|
23
|
+
encodeStateVector: typeof Y.encodeStateVector;
|
|
24
|
+
};
|
|
25
|
+
/** The awareness surface the hooks use (y-protocols and @y/protocols both satisfy it). */
|
|
26
|
+
export type AwarenessLike = {
|
|
27
|
+
getStates(): Map<number, Record<string, any>>;
|
|
28
|
+
on(event: "change", callback: (...args: any[]) => void): void;
|
|
29
|
+
off(event: "change", callback: (...args: any[]) => void): void;
|
|
30
|
+
setLocalState(state: Record<string, any> | null): void;
|
|
31
|
+
setLocalStateField(field: string, value: any): void;
|
|
32
|
+
};
|
|
33
|
+
/** A collaboration provider as the hooks see it: an optional awareness plus sync/status events. */
|
|
34
|
+
export type CollabProviderLike = {
|
|
35
|
+
awareness?: AwarenessLike | null;
|
|
36
|
+
synced?: boolean;
|
|
37
|
+
on?(event: string, callback: (...args: any[]) => void): void;
|
|
38
|
+
off?(event: string, callback: (...args: any[]) => void): void;
|
|
39
|
+
};
|
|
4
40
|
export type PatchDocument<T = Patch> = {
|
|
5
41
|
userId: string | number;
|
|
6
42
|
patches: T[];
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ import type { CellInterface, SelectionArea } from "@rowsncolumns/grid";
|
|
|
4
4
|
import { PivotTable, type CellData, type Collaborator, type ConditionalFormatRule, type DataValidationRuleRecord, type EmbeddedChart, type EmbeddedObject, type NamedRange, type ProtectedRange, type Sheet, type TableView } from "@rowsncolumns/spreadsheet";
|
|
5
5
|
import { type CalculateNowOptions, type CalculationOperation, type CellXfs, type HistoryType, type SheetData, type SharedStrings, type SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
6
6
|
import type { Patch } from "immer";
|
|
7
|
-
import type { WebsocketProvider } from "y-websocket";
|
|
8
7
|
import * as Y from "yjs";
|
|
8
|
+
import type { CollabProviderLike, YjsRuntime } from "./types";
|
|
9
9
|
export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject> = {
|
|
10
10
|
/**
|
|
11
11
|
* Scopes awareness updates to a single document.
|
|
@@ -56,8 +56,14 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
56
56
|
* needed so agents touching A1:E10 don't appear to be sitting on A1.
|
|
57
57
|
*/
|
|
58
58
|
selections?: SelectionArea[];
|
|
59
|
-
provider?: HocuspocusProvider |
|
|
59
|
+
provider?: HocuspocusProvider | CollabProviderLike | any;
|
|
60
60
|
doc: Y.Doc;
|
|
61
|
+
/**
|
|
62
|
+
* The Yjs implementation `doc` belongs to (its shared-type constructors and
|
|
63
|
+
* event classes). Defaults to `yjs`; pass the namespace that created `doc`
|
|
64
|
+
* when it is not the `yjs` module (see `YjsRuntime`).
|
|
65
|
+
*/
|
|
66
|
+
yjs?: YjsRuntime;
|
|
61
67
|
calculateNow(options?: CalculateNowOptions): Promise<void>;
|
|
62
68
|
initialSheets: S[];
|
|
63
69
|
/**
|
|
@@ -154,7 +160,7 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
154
160
|
};
|
|
155
161
|
export type YRowData = Y.Map<Y.Array<CellData | null>>;
|
|
156
162
|
export type YSheetData = Y.Array<YRowData | null>;
|
|
157
|
-
export declare const useYSpreadsheetV2: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
163
|
+
export declare const useYSpreadsheetV2: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
158
164
|
synced: boolean;
|
|
159
165
|
users: Collaborator[];
|
|
160
166
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-yspreadsheet-v2.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAEL,UAAU,EACV,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,SAAS,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-yspreadsheet-v2.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,9 @@ import { addSheetDataPatches, addSheetDataPatchesV3, applyMapPatches, createCell
|
|
|
8
8
|
/**
|
|
9
9
|
* Convert Y.js events to SheetDataEvent format for incremental processing
|
|
10
10
|
*/
|
|
11
|
-
const convertToSheetDataEvents = (events) => {
|
|
11
|
+
const convertToSheetDataEvents = (events, yjs) => {
|
|
12
12
|
return events.map((event) => {
|
|
13
|
-
const isYArrayEvent = event instanceof
|
|
13
|
+
const isYArrayEvent = event instanceof yjs.YArrayEvent;
|
|
14
14
|
return {
|
|
15
15
|
path: event.path,
|
|
16
16
|
delta: isYArrayEvent
|
|
@@ -52,7 +52,7 @@ const getUserEnteredValueFromYDocV3 = (ySheetDataV3, sheetId, rowIndex, columnIn
|
|
|
52
52
|
import { createDeepObservable, createObservable, createSheetDataObservable, getPatchDeltasFromEvent, } from "./observables";
|
|
53
53
|
// Add a single null entry to the YSheetData
|
|
54
54
|
const origin = "local";
|
|
55
|
-
export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite = true, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, useV3 = false, sheetDataVersion = "v2", onMigrationComplete, deleteV2AfterMigration = false, skipInitialSync = false, supportLegacySharedStringsArray = false, }) => {
|
|
55
|
+
export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite = true, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs = Y, useV3 = false, sheetDataVersion = "v2", onMigrationComplete, deleteV2AfterMigration = false, skipInitialSync = false, supportLegacySharedStringsArray = false, }) => {
|
|
56
56
|
const [synced, setSynced] = useState(false);
|
|
57
57
|
const [users, setUsers] = useState([]);
|
|
58
58
|
const [isLeader, setIsLeader] = useState(false);
|
|
@@ -488,7 +488,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
488
488
|
const origin = events?.[0]?.transaction?.origin;
|
|
489
489
|
if (origin !== "local") {
|
|
490
490
|
// Convert Y.js events to SheetDataEvent format and apply incremental updates
|
|
491
|
-
const sheetDataEvents = convertToSheetDataEvents(events);
|
|
491
|
+
const sheetDataEvents = convertToSheetDataEvents(events, yjs);
|
|
492
492
|
onChangeSheetData((prevSheetData) => {
|
|
493
493
|
const result = processSheetDataEvents(sheetDataEvents, prevSheetData, ySheetDataV2);
|
|
494
494
|
// Fall back to full serialization only if incremental update fails
|
|
@@ -551,7 +551,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
551
551
|
const subs = [];
|
|
552
552
|
for (const [mappingKey, [ydoc, callback]] of documentMap.entries()) {
|
|
553
553
|
// Only observe Arrays (shared strings Map is handled separately if needed)
|
|
554
|
-
if (ydoc instanceof
|
|
554
|
+
if (ydoc instanceof yjs.Array) {
|
|
555
555
|
const subscription = createDeepObservable(ydoc).subscribe((events) => {
|
|
556
556
|
for (const event of events) {
|
|
557
557
|
if (event.transaction.origin !== "local") {
|
|
@@ -567,7 +567,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
567
567
|
});
|
|
568
568
|
subs.push(subscription);
|
|
569
569
|
}
|
|
570
|
-
else if (ydoc instanceof
|
|
570
|
+
else if (ydoc instanceof yjs.Map && mappingKey === "sharedStrings") {
|
|
571
571
|
// Handle shared strings Map observation
|
|
572
572
|
const callback_map = (event) => {
|
|
573
573
|
if (event.transaction.origin !== "local") {
|
|
@@ -671,7 +671,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
671
671
|
addSheetDataPatchesV3(ySheetDataV3, persistableErrorCellPatches);
|
|
672
672
|
}
|
|
673
673
|
else {
|
|
674
|
-
addSheetDataPatches(ySheetDataV2, persistableErrorCellPatches);
|
|
674
|
+
addSheetDataPatches(ySheetDataV2, persistableErrorCellPatches, yjs);
|
|
675
675
|
}
|
|
676
676
|
}, origin);
|
|
677
677
|
}
|
|
@@ -693,7 +693,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
693
693
|
addSheetDataPatchesV3(ySheetDataV3, patches);
|
|
694
694
|
}
|
|
695
695
|
else {
|
|
696
|
-
addSheetDataPatches(ySheetDataV2, patches);
|
|
696
|
+
addSheetDataPatches(ySheetDataV2, patches, yjs);
|
|
697
697
|
}
|
|
698
698
|
}
|
|
699
699
|
if (patch.cellXfs) {
|
|
@@ -704,10 +704,10 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
704
704
|
if (patch?.[mappingKey]) {
|
|
705
705
|
const patches = patch[mappingKey]?.[patchKey];
|
|
706
706
|
// Handle shared strings Map (always use Map now)
|
|
707
|
-
if (mappingKey === "sharedStrings" && ydoc instanceof
|
|
707
|
+
if (mappingKey === "sharedStrings" && ydoc instanceof yjs.Map) {
|
|
708
708
|
applyMapPatches(ydoc, patches);
|
|
709
709
|
}
|
|
710
|
-
else if (ydoc instanceof
|
|
710
|
+
else if (ydoc instanceof yjs.Array) {
|
|
711
711
|
// Check if we are updating sheets
|
|
712
712
|
if (mappingKey === "sheets" && ydoc.length === 0) {
|
|
713
713
|
// Add initial sheets
|
|
@@ -737,6 +737,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
737
737
|
onAfterBroadcastPatch,
|
|
738
738
|
documentMap,
|
|
739
739
|
yRecalcCells,
|
|
740
|
+
yjs,
|
|
740
741
|
doc,
|
|
741
742
|
userId,
|
|
742
743
|
yDisableRecalc,
|
|
@@ -3,15 +3,17 @@ import type { CellInterface } from "@rowsncolumns/grid";
|
|
|
3
3
|
import type { CellData, Collaborator, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, ProtectedRange, Sheet, TableView } from "@rowsncolumns/spreadsheet";
|
|
4
4
|
import type { CalculateNowOptions, CalculationOperation, HistoryType, SheetData, SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
5
5
|
import type { Patch } from "immer";
|
|
6
|
-
import
|
|
7
|
-
import type
|
|
6
|
+
import * as Y from "yjs";
|
|
7
|
+
import type { CollabProviderLike, YjsRuntime } from "./types";
|
|
8
8
|
export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject> = {
|
|
9
9
|
userId: string | number;
|
|
10
10
|
title: string;
|
|
11
11
|
sheetId: number;
|
|
12
12
|
activeCell?: CellInterface;
|
|
13
|
-
provider?: HocuspocusProvider |
|
|
13
|
+
provider?: HocuspocusProvider | CollabProviderLike | any;
|
|
14
14
|
doc: Y.Doc;
|
|
15
|
+
/** The Yjs implementation `doc` belongs to; defaults to `yjs` (see `YjsRuntime`). */
|
|
16
|
+
yjs?: YjsRuntime;
|
|
15
17
|
calculateNow(options?: CalculateNowOptions): void;
|
|
16
18
|
onChangeSheetData: React.Dispatch<React.SetStateAction<SheetData<T>>>;
|
|
17
19
|
onChangeTables: React.Dispatch<React.SetStateAction<TableView[]>>;
|
|
@@ -31,7 +33,7 @@ export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends
|
|
|
31
33
|
* Does not load initial data
|
|
32
34
|
* @returns
|
|
33
35
|
*/
|
|
34
|
-
export declare const useYSpreadsheet: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
36
|
+
export declare const useYSpreadsheet: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
35
37
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined][]) => void;
|
|
36
38
|
users: Collaborator[];
|
|
37
39
|
synced: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,UAAU,EACV,cAAc,EACd,KAAK,EACL,SAAS,EACV,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EAEX,SAAS,EACT,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,20 +2,20 @@ import { scheduleNormalPriorityCallback, useIsomorphicLayoutEffect, } from "@row
|
|
|
2
2
|
import { applyPatches } from "immer";
|
|
3
3
|
import uniqBy from "lodash/uniqBy";
|
|
4
4
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
5
|
-
import
|
|
6
|
-
const getStateVector = (doc) => encodeStateVector(doc);
|
|
5
|
+
import * as Y from "yjs";
|
|
6
|
+
const getStateVector = (doc, yjs) => yjs.encodeStateVector(doc);
|
|
7
7
|
// Function to get updates between two state vectors
|
|
8
|
-
const getUpdatesBetween = (doc, stateVector1, stateVector2) => {
|
|
9
|
-
const diff = encodeStateAsUpdate(doc, stateVector1);
|
|
10
|
-
const newDiff = encodeStateAsUpdate(doc, stateVector2);
|
|
11
|
-
return diffUpdate(diff, newDiff);
|
|
8
|
+
const getUpdatesBetween = (doc, stateVector1, stateVector2, yjs) => {
|
|
9
|
+
const diff = yjs.encodeStateAsUpdate(doc, stateVector1);
|
|
10
|
+
const newDiff = yjs.encodeStateAsUpdate(doc, stateVector2);
|
|
11
|
+
return yjs.diffUpdate(diff, newDiff);
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
14
|
* Connects to a Y server and picks up the most recent change
|
|
15
15
|
* Does not load initial data
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
|
-
export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, }) => {
|
|
18
|
+
export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs = Y, }) => {
|
|
19
19
|
const [users, setUsers] = useState([]);
|
|
20
20
|
const [synced, setSynced] = useState(false);
|
|
21
21
|
const previousStateVectorRef = useRef(undefined);
|
|
@@ -89,10 +89,10 @@ export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTab
|
|
|
89
89
|
let syncedDoc = doc;
|
|
90
90
|
if (previousStateVectorRef.current) {
|
|
91
91
|
// Capture the current state vector on subsequent syncs
|
|
92
|
-
currentStateVectorRef.current = getStateVector(doc);
|
|
93
|
-
const updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current);
|
|
94
|
-
const newDoc = new Doc({ gc: true });
|
|
95
|
-
applyUpdate(newDoc, updates);
|
|
92
|
+
currentStateVectorRef.current = getStateVector(doc, yjs);
|
|
93
|
+
const updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current, yjs);
|
|
94
|
+
const newDoc = new yjs.Doc({ gc: true });
|
|
95
|
+
yjs.applyUpdate(newDoc, updates);
|
|
96
96
|
syncedDoc = newDoc;
|
|
97
97
|
previousStateVectorRef.current = currentStateVectorRef.current;
|
|
98
98
|
}
|
|
@@ -137,7 +137,7 @@ export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTab
|
|
|
137
137
|
});
|
|
138
138
|
// Set synced
|
|
139
139
|
setSynced(true);
|
|
140
|
-
}, [calculateNow, docMap, onError, doc]);
|
|
140
|
+
}, [calculateNow, docMap, onError, doc, yjs]);
|
|
141
141
|
// Sync state
|
|
142
142
|
if (provider?.synced && !synced) {
|
|
143
143
|
onSynced();
|
|
@@ -147,7 +147,7 @@ export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTab
|
|
|
147
147
|
provider?.on("synced", onSynced);
|
|
148
148
|
const onConnectionStatusChange = ({ status }) => {
|
|
149
149
|
if (status === "disconnected") {
|
|
150
|
-
previousStateVectorRef.current = getStateVector(doc);
|
|
150
|
+
previousStateVectorRef.current = getStateVector(doc, yjs);
|
|
151
151
|
}
|
|
152
152
|
};
|
|
153
153
|
provider?.on("status", onConnectionStatusChange);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rowsncolumns/y-spreadsheet",
|
|
3
|
-
"version": "15.0
|
|
3
|
+
"version": "15.1.0",
|
|
4
4
|
"main": "./dist/cjs/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -56,7 +56,6 @@
|
|
|
56
56
|
"@rowsncolumns/utils": ">=9.3.0",
|
|
57
57
|
"react": ">=18.0.0",
|
|
58
58
|
"react-dom": ">=18.0.0",
|
|
59
|
-
"y-websocket": ">=2.0.0",
|
|
60
59
|
"yjs": ">=13.0.0"
|
|
61
60
|
},
|
|
62
61
|
"dependencies": {
|