@rowsncolumns/y-spreadsheet 15.0.3 → 16.0.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/Readme.md +3 -0
- package/dist/cjs/helpers.d.ts +6 -6
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +22 -18
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +38 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.d.ts +11 -4
- package/dist/cjs/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.js +13 -11
- package/dist/cjs/use-yspreadsheet.d.ts +9 -3
- package/dist/cjs/use-yspreadsheet.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet.js +16 -13
- package/dist/cjs/vitest.config.d.ts.map +1 -1
- package/dist/cjs/vitest.config.js +1 -0
- package/dist/cjs/yjs-runtime.d.ts +6 -0
- package/dist/cjs/yjs-runtime.d.ts.map +1 -0
- package/dist/cjs/yjs-runtime.js +25 -0
- package/dist/esm/helpers.d.ts +6 -6
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +22 -18
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +38 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.d.ts +11 -4
- package/dist/esm/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.js +13 -11
- package/dist/esm/use-yspreadsheet.d.ts +9 -3
- package/dist/esm/use-yspreadsheet.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet.js +14 -13
- package/dist/esm/vitest.config.d.ts.map +1 -1
- package/dist/esm/vitest.config.js +1 -0
- package/dist/esm/yjs-runtime.d.ts +6 -0
- package/dist/esm/yjs-runtime.d.ts.map +1 -0
- package/dist/esm/yjs-runtime.js +20 -0
- package/package.json +6 -2
package/Readme.md
CHANGED
|
@@ -53,6 +53,9 @@ const { enqueueCalculation, activeSheetId, ... } = useSpreadsheetState({
|
|
|
53
53
|
const { users, onBroadcastPatch } = useYSpreadsheet({
|
|
54
54
|
provider: yWebsocketProvider,
|
|
55
55
|
doc: yDoc,
|
|
56
|
+
// The Yjs implementation yDoc belongs to (the package imports none itself;
|
|
57
|
+
// or register it once with setDefaultYjsRuntime(Y)).
|
|
58
|
+
yjs: Y,
|
|
56
59
|
onChangeSheetData,
|
|
57
60
|
onChangeSheets,
|
|
58
61
|
onChangeTables,
|
package/dist/cjs/helpers.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type CellData, type CellFormat, type Sheet } from "@rowsncolumns/spreadsheet";
|
|
2
2
|
import { type HistoryType, type SheetData, type SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
3
3
|
import type { Patch } from "immer";
|
|
4
|
-
import * as Y from "yjs";
|
|
4
|
+
import type * 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", yjsRuntime?: 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[], yjsRuntime?: YjsRuntime) => void;
|
|
37
|
+
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number, yjsRuntime?: 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, yjsRuntime?: 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;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/helpers.js
CHANGED
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.processSheetDataEventsV3 = exports.addSheetDataPatchesV3 = exports.getSheetDataV3 = exports.deleteSheetV3 = exports.deleteCellV3 = exports.setCellV3 = exports.getCellV3 = exports.sheetDataV3ToV2 = exports.sheetDataV2ToV3 = exports.createCellDataV3 = exports.parseCellKeyV3 = exports.createCellKeyV3 = exports.processSheetDataEvents = exports.applyMapPatches = exports.validateSheets = exports.updateArrayType = exports.mergeErrorEffectiveValueIntoCellData = exports.shouldPersistErrorCellPatch = exports.filterErrorCellPatches = exports.getCellDataErrorValue = exports.getCellDataFromYSheetData = exports.removeRowData = exports.setCellDataInRowData = exports.getRowDataFromSheet = exports.deleteSheetFromYSheetData = exports.getSheetFromYSheetData = exports.addSheetDataPatches = exports.applyPatchesToYDoc = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var utils_1 = require("@rowsncolumns/utils");
|
|
6
|
-
var Y = tslib_1.__importStar(require("yjs"));
|
|
7
6
|
var cloneDeep_1 = tslib_1.__importDefault(require("lodash/cloneDeep"));
|
|
8
7
|
var isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual"));
|
|
9
8
|
var set_1 = tslib_1.__importDefault(require("lodash/set"));
|
|
10
9
|
var get_1 = tslib_1.__importDefault(require("lodash/get"));
|
|
11
10
|
var unset_1 = tslib_1.__importDefault(require("lodash/unset"));
|
|
11
|
+
var yjs_runtime_1 = require("./yjs-runtime");
|
|
12
12
|
/**
|
|
13
13
|
* Apply patches to yjs
|
|
14
14
|
* @param doc
|
|
@@ -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, yjsRuntime) {
|
|
21
21
|
var e_1, _a;
|
|
22
22
|
var _b, _c;
|
|
23
|
+
var yjs = (0, yjs_runtime_1.resolveYjsRuntime)(yjsRuntime);
|
|
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, yjsRuntime) {
|
|
135
136
|
var e_2, _a;
|
|
137
|
+
var yjs = (0, yjs_runtime_1.resolveYjsRuntime)(yjsRuntime);
|
|
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, yjsRuntime) {
|
|
365
|
+
var yjs = (0, yjs_runtime_1.resolveYjsRuntime)(yjsRuntime);
|
|
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, yjsRuntime) {
|
|
381
|
+
var yjs = (0, yjs_runtime_1.resolveYjsRuntime)(yjsRuntime);
|
|
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/index.d.ts
CHANGED
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -6,3 +6,4 @@ tslib_1.__exportStar(require("./use-yspreadsheet-v2"), exports);
|
|
|
6
6
|
tslib_1.__exportStar(require("./helpers"), exports);
|
|
7
7
|
tslib_1.__exportStar(require("./observables"), exports);
|
|
8
8
|
tslib_1.__exportStar(require("./types"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./yjs-runtime"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../helpers.ts","../../index.ts","../../observables.ts","../../types.ts","../../use-yspreadsheet-v2.ts","../../use-yspreadsheet.ts","../../vitest.config.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../helpers.ts","../../index.ts","../../observables.ts","../../types.ts","../../use-yspreadsheet-v2.ts","../../use-yspreadsheet.ts","../../vitest.config.ts","../../yjs-runtime.ts"],"version":"5.8.3"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,6 +1,44 @@
|
|
|
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. The package does not
|
|
9
|
+
* import a Yjs implementation: pass the namespace of the one that created
|
|
10
|
+
* `doc` (`import * as Y from "yjs"`, or a yjs-13-compatible layer over `@y/y`
|
|
11
|
+
* 14) so the types the hooks and helpers create belong to the same
|
|
12
|
+
* implementation as the document and their `instanceof` checks see that
|
|
13
|
+
* implementation's classes, or register it once with `setDefaultYjsRuntime`.
|
|
14
|
+
* The members are typed against yjs 13 (an optional peer, used for types
|
|
15
|
+
* only), so another implementation is passed with a cast.
|
|
16
|
+
*/
|
|
17
|
+
export type YjsRuntime = {
|
|
18
|
+
Map: typeof Y.Map;
|
|
19
|
+
Array: typeof Y.Array;
|
|
20
|
+
YArrayEvent: typeof Y.YArrayEvent;
|
|
21
|
+
Doc: typeof Y.Doc;
|
|
22
|
+
applyUpdate: typeof Y.applyUpdate;
|
|
23
|
+
diffUpdate: typeof Y.diffUpdate;
|
|
24
|
+
encodeStateAsUpdate: typeof Y.encodeStateAsUpdate;
|
|
25
|
+
encodeStateVector: typeof Y.encodeStateVector;
|
|
26
|
+
};
|
|
27
|
+
/** The awareness surface the hooks use (y-protocols and @y/protocols both satisfy it). */
|
|
28
|
+
export type AwarenessLike = {
|
|
29
|
+
getStates(): Map<number, Record<string, any>>;
|
|
30
|
+
on(event: "change", callback: (...args: any[]) => void): void;
|
|
31
|
+
off(event: "change", callback: (...args: any[]) => void): void;
|
|
32
|
+
setLocalState(state: Record<string, any> | null): void;
|
|
33
|
+
setLocalStateField(field: string, value: any): void;
|
|
34
|
+
};
|
|
35
|
+
/** A collaboration provider as the hooks see it: an optional awareness plus sync/status events. */
|
|
36
|
+
export type CollabProviderLike = {
|
|
37
|
+
awareness?: AwarenessLike | null;
|
|
38
|
+
synced?: boolean;
|
|
39
|
+
on?(event: string, callback: (...args: any[]) => void): void;
|
|
40
|
+
off?(event: string, callback: (...args: any[]) => void): void;
|
|
41
|
+
};
|
|
4
42
|
export type PatchDocument<T = Patch> = {
|
|
5
43
|
userId: string | number;
|
|
6
44
|
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
|
|
8
|
-
import
|
|
7
|
+
import type * 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,15 @@ 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): the namespace that created `doc`, e.g. `import * as Y
|
|
64
|
+
* from "yjs"`. Falls back to the runtime registered with
|
|
65
|
+
* `setDefaultYjsRuntime`; with neither, the hook throws (see `YjsRuntime`).
|
|
66
|
+
*/
|
|
67
|
+
yjs?: YjsRuntime;
|
|
61
68
|
calculateNow(options?: CalculateNowOptions): Promise<void>;
|
|
62
69
|
initialSheets: S[];
|
|
63
70
|
/**
|
|
@@ -154,7 +161,7 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
154
161
|
};
|
|
155
162
|
export type YRowData = Y.Map<Y.Array<CellData | null>>;
|
|
156
163
|
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>) => {
|
|
164
|
+
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: yjsRuntime, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
158
165
|
synced: boolean;
|
|
159
166
|
users: Collaborator[];
|
|
160
167
|
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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"}
|
|
@@ -7,14 +7,14 @@ var utils_1 = require("@rowsncolumns/utils");
|
|
|
7
7
|
var ui_1 = require("@rowsncolumns/ui");
|
|
8
8
|
var react_1 = require("react");
|
|
9
9
|
var react_dom_1 = require("react-dom");
|
|
10
|
-
var Y = tslib_1.__importStar(require("yjs"));
|
|
11
10
|
var helpers_1 = require("./helpers");
|
|
11
|
+
var yjs_runtime_1 = require("./yjs-runtime");
|
|
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,7 +57,8 @@ 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.useV3, useV3 = _c === void 0 ? false : _c, _d = _a.sheetDataVersion, sheetDataVersion = _d === void 0 ? "v2" : _d, onMigrationComplete = _a.onMigrationComplete, _e = _a.deleteV2AfterMigration, deleteV2AfterMigration = _e === void 0 ? false : _e, _f = _a.skipInitialSync, skipInitialSync = _f === void 0 ? false : _f, _g = _a.supportLegacySharedStringsArray, supportLegacySharedStringsArray = _g === void 0 ? false : _g;
|
|
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, yjsRuntime = _a.yjs, _c = _a.useV3, useV3 = _c === void 0 ? false : _c, _d = _a.sheetDataVersion, sheetDataVersion = _d === void 0 ? "v2" : _d, onMigrationComplete = _a.onMigrationComplete, _e = _a.deleteV2AfterMigration, deleteV2AfterMigration = _e === void 0 ? false : _e, _f = _a.skipInitialSync, skipInitialSync = _f === void 0 ? false : _f, _g = _a.supportLegacySharedStringsArray, supportLegacySharedStringsArray = _g === void 0 ? false : _g;
|
|
61
|
+
var yjs = (0, yjs_runtime_1.resolveYjsRuntime)(yjsRuntime);
|
|
61
62
|
var _h = tslib_1.__read((0, react_1.useState)(false), 2), synced = _h[0], setSynced = _h[1];
|
|
62
63
|
var _j = tslib_1.__read((0, react_1.useState)([]), 2), users = _j[0], setUsers = _j[1];
|
|
63
64
|
var _k = tslib_1.__read((0, react_1.useState)(false), 2), isLeader = _k[0], setIsLeader = _k[1];
|
|
@@ -571,7 +572,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
571
572
|
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
573
|
if (origin_1 !== "local") {
|
|
573
574
|
// Convert Y.js events to SheetDataEvent format and apply incremental updates
|
|
574
|
-
var sheetDataEvents_1 = convertToSheetDataEvents(events);
|
|
575
|
+
var sheetDataEvents_1 = convertToSheetDataEvents(events, yjs);
|
|
575
576
|
onChangeSheetData(function (prevSheetData) {
|
|
576
577
|
var result = (0, helpers_1.processSheetDataEvents)(sheetDataEvents_1, prevSheetData, ySheetDataV2);
|
|
577
578
|
// Fall back to full serialization only if incremental update fails
|
|
@@ -636,7 +637,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
636
637
|
var subs = [];
|
|
637
638
|
var _loop_1 = function (mappingKey, ydoc, callback) {
|
|
638
639
|
// Only observe Arrays (shared strings Map is handled separately if needed)
|
|
639
|
-
if (ydoc instanceof
|
|
640
|
+
if (ydoc instanceof yjs.Array) {
|
|
640
641
|
var subscription = (0, observables_1.createDeepObservable)(ydoc).subscribe(function (events) {
|
|
641
642
|
var e_7, _a;
|
|
642
643
|
var _b;
|
|
@@ -664,7 +665,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
664
665
|
});
|
|
665
666
|
subs.push(subscription);
|
|
666
667
|
}
|
|
667
|
-
else if (ydoc instanceof
|
|
668
|
+
else if (ydoc instanceof yjs.Map && mappingKey === "sharedStrings") {
|
|
668
669
|
// Handle shared strings Map observation
|
|
669
670
|
var callback_map_1 = function (event) {
|
|
670
671
|
if (event.transaction.origin !== "local") {
|
|
@@ -818,7 +819,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
818
819
|
(0, helpers_1.addSheetDataPatchesV3)(ySheetDataV3, persistableErrorCellPatches_1);
|
|
819
820
|
}
|
|
820
821
|
else {
|
|
821
|
-
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, persistableErrorCellPatches_1);
|
|
822
|
+
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, persistableErrorCellPatches_1, yjs);
|
|
822
823
|
}
|
|
823
824
|
}, origin);
|
|
824
825
|
}
|
|
@@ -844,7 +845,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
844
845
|
(0, helpers_1.addSheetDataPatchesV3)(ySheetDataV3, patches_3);
|
|
845
846
|
}
|
|
846
847
|
else {
|
|
847
|
-
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, patches_3);
|
|
848
|
+
(0, helpers_1.addSheetDataPatches)(ySheetDataV2, patches_3, yjs);
|
|
848
849
|
}
|
|
849
850
|
}
|
|
850
851
|
if (patch.cellXfs) {
|
|
@@ -857,10 +858,10 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
857
858
|
if (patch === null || patch === void 0 ? void 0 : patch[mappingKey]) {
|
|
858
859
|
var patches_5 = (_e = patch[mappingKey]) === null || _e === void 0 ? void 0 : _e[patchKey];
|
|
859
860
|
// Handle shared strings Map (always use Map now)
|
|
860
|
-
if (mappingKey === "sharedStrings" && ydoc instanceof
|
|
861
|
+
if (mappingKey === "sharedStrings" && ydoc instanceof yjs.Map) {
|
|
861
862
|
(0, helpers_1.applyMapPatches)(ydoc, patches_5);
|
|
862
863
|
}
|
|
863
|
-
else if (ydoc instanceof
|
|
864
|
+
else if (ydoc instanceof yjs.Array) {
|
|
864
865
|
// Check if we are updating sheets
|
|
865
866
|
if (mappingKey === "sheets" && ydoc.length === 0) {
|
|
866
867
|
// Add initial sheets
|
|
@@ -906,6 +907,7 @@ var useYSpreadsheetV2 = function (_a) {
|
|
|
906
907
|
onAfterBroadcastPatch,
|
|
907
908
|
documentMap,
|
|
908
909
|
yRecalcCells,
|
|
910
|
+
yjs,
|
|
909
911
|
doc,
|
|
910
912
|
userId,
|
|
911
913
|
yDisableRecalc,
|
|
@@ -3,15 +3,21 @@ 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 type { WebsocketProvider } from "y-websocket";
|
|
7
6
|
import type * 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
|
+
/**
|
|
16
|
+
* The Yjs implementation `doc` belongs to, e.g. `import * as Y from "yjs"`.
|
|
17
|
+
* Falls back to the runtime registered with `setDefaultYjsRuntime`; with
|
|
18
|
+
* neither, the hook throws (see `YjsRuntime`).
|
|
19
|
+
*/
|
|
20
|
+
yjs?: YjsRuntime;
|
|
15
21
|
calculateNow(options?: CalculateNowOptions): void;
|
|
16
22
|
onChangeSheetData: React.Dispatch<React.SetStateAction<SheetData<T>>>;
|
|
17
23
|
onChangeTables: React.Dispatch<React.SetStateAction<TableView[]>>;
|
|
@@ -31,7 +37,7 @@ export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends
|
|
|
31
37
|
* Does not load initial data
|
|
32
38
|
* @returns
|
|
33
39
|
*/
|
|
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>) => {
|
|
40
|
+
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: yjsRuntime, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
35
41
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined][]) => void;
|
|
36
42
|
users: Collaborator[];
|
|
37
43
|
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 yjs_runtime_1 = require("./yjs-runtime");
|
|
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,7 +22,8 @@ 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;
|
|
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, yjsRuntime = _a.yjs;
|
|
26
|
+
var yjs = (0, yjs_runtime_1.resolveYjsRuntime)(yjsRuntime);
|
|
24
27
|
var _b = tslib_1.__read((0, react_1.useState)([]), 2), users = _b[0], setUsers = _b[1];
|
|
25
28
|
var _c = tslib_1.__read((0, react_1.useState)(false), 2), synced = _c[0], setSynced = _c[1];
|
|
26
29
|
var previousStateVectorRef = (0, react_1.useRef)(undefined);
|
|
@@ -96,10 +99,10 @@ var useYSpreadsheet = function (_a) {
|
|
|
96
99
|
var syncedDoc = doc;
|
|
97
100
|
if (previousStateVectorRef.current) {
|
|
98
101
|
// 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
|
-
|
|
102
|
+
currentStateVectorRef.current = getStateVector(doc, yjs);
|
|
103
|
+
var updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current, yjs);
|
|
104
|
+
var newDoc = new yjs.Doc({ gc: true });
|
|
105
|
+
yjs.applyUpdate(newDoc, updates);
|
|
103
106
|
syncedDoc = newDoc;
|
|
104
107
|
previousStateVectorRef.current = currentStateVectorRef.current;
|
|
105
108
|
}
|
|
@@ -169,7 +172,7 @@ var useYSpreadsheet = function (_a) {
|
|
|
169
172
|
});
|
|
170
173
|
// Set synced
|
|
171
174
|
setSynced(true);
|
|
172
|
-
}, [calculateNow, docMap, onError, doc]);
|
|
175
|
+
}, [calculateNow, docMap, onError, doc, yjs]);
|
|
173
176
|
// Sync state
|
|
174
177
|
if ((provider === null || provider === void 0 ? void 0 : provider.synced) && !synced) {
|
|
175
178
|
onSynced();
|
|
@@ -180,7 +183,7 @@ var useYSpreadsheet = function (_a) {
|
|
|
180
183
|
var onConnectionStatusChange = function (_a) {
|
|
181
184
|
var status = _a.status;
|
|
182
185
|
if (status === "disconnected") {
|
|
183
|
-
previousStateVectorRef.current = getStateVector(doc);
|
|
186
|
+
previousStateVectorRef.current = getStateVector(doc, yjs);
|
|
184
187
|
}
|
|
185
188
|
};
|
|
186
189
|
provider === null || provider === void 0 ? void 0 : provider.on("status", onConnectionStatusChange);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../../vitest.config.ts"],"names":[],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAuBG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { YjsRuntime } from "./types";
|
|
2
|
+
/** Registers (or, with `undefined`, clears) the runtime used when a call passes none. */
|
|
3
|
+
export declare const setDefaultYjsRuntime: (runtime: YjsRuntime | undefined) => void;
|
|
4
|
+
/** The runtime a call works with: the one it was given, else the registered default. */
|
|
5
|
+
export declare const resolveYjsRuntime: (runtime?: YjsRuntime) => YjsRuntime;
|
|
6
|
+
//# sourceMappingURL=yjs-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yjs-runtime.d.ts","sourceRoot":"","sources":["../../yjs-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,GAAI,SAAS,UAAU,GAAG,SAAS,KAAG,IAEtE,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,GAAI,UAAU,UAAU,KAAG,UAQxD,CAAC"}
|