1- import type { ModelJSON , IRangeMap , IRange , IModel , YjsModelJson } from '@excel/shared' ;
2- import { isSameRange , toIRange } from '@excel/shared' ;
3- import * as Y from 'yjs' ;
1+ import type { ModelJSON , IRangeMap , IRange , IModel } from '@excel/shared' ;
42
53export class RangeMap implements IRangeMap {
64 private model : IModel ;
5+ private rangeMap : ModelJSON [ 'rangeMap' ] = { } ;
76 constructor ( model : IModel ) {
87 this . model = model ;
98 }
10- private get rangeMap ( ) {
11- return this . model . getRoot ( ) . get ( 'rangeMap' ) ;
12- }
139 validateRange ( range : IRange ) {
1410 if ( ! range ) {
1511 return false ;
@@ -37,20 +33,23 @@ export class RangeMap implements IRangeMap {
3733 }
3834 fromJSON ( json : ModelJSON ) : void {
3935 const data = json . rangeMap || { } ;
40- const rangeMap = new Y . Map ( ) as YjsModelJson [ 'rangeMap' ] ;
36+ const rangeMap : ModelJSON [ 'rangeMap' ] = { } ;
4137 for ( const range of Object . values ( data ) ) {
4238 range . sheetId = range . sheetId || this . model . getCurrentSheetId ( ) ;
4339 if ( ! this . model . validateRange ( range ) ) {
4440 continue ;
4541 }
46- rangeMap . set ( range . sheetId , range ) ;
42+ rangeMap [ range . sheetId ] = { ... range } ;
4743 }
48- this . model . getRoot ( ) . set ( 'rangeMap' , rangeMap ) ;
44+ this . rangeMap = rangeMap ;
45+ }
46+ toJSON ( ) {
47+ return { ...this . rangeMap }
4948 }
5049 getActiveRange ( ) {
5150 const id = this . model . getCurrentSheetId ( ) ;
5251
53- const range = this . rangeMap ?. get ( id ) ;
52+ const range = this . rangeMap [ id ] ;
5453 if ( range ) {
5554 range . sheetId = range . sheetId || id ;
5655 return {
@@ -74,18 +73,9 @@ export class RangeMap implements IRangeMap {
7473 if ( ! this . validateRange ( newRange ) ) {
7574 return ;
7675 }
77- let rangeMap = this . rangeMap ;
78- if ( ! rangeMap ) {
79- rangeMap = new Y . Map ( ) as YjsModelJson [ 'rangeMap' ] ;
80- this . model . getRoot ( ) . set ( 'rangeMap' , rangeMap ) ;
81- }
82- const oldValue = rangeMap . get ( newRange . sheetId ) ;
83- if ( oldValue && isSameRange ( oldValue , newRange ) ) {
84- return ;
85- }
86- rangeMap . set ( newRange . sheetId , toIRange ( newRange ) ) ;
76+ this . rangeMap [ newRange . sheetId ] = { ...newRange } ;
8777 }
8878 deleteAll ( sheetId ?: string ) : void {
89- this . rangeMap ?. delete ( sheetId || this . model . getCurrentSheetId ( ) ) ;
79+ delete this . rangeMap [ sheetId || this . model . getCurrentSheetId ( ) ] ;
9080 }
9181}
0 commit comments