Skip to content

Commit 4194d91

Browse files
committed
fix(core): load/unload resources for base units
1 parent 2d85df2 commit 4194d91

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

packages/core/src/services/resource-loader/__tests__/resource-loader.service.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ describe('ResourceLoaderService', () => {
2828
let sheetAdded$: Subject<unknown>;
2929
let docAdded$: Subject<unknown>;
3030
let slideAdded$: Subject<unknown>;
31+
let baseAdded$: Subject<unknown>;
3132
let sheetDisposed$: Subject<unknown>;
3233
let docDisposed$: Subject<unknown>;
34+
let baseDisposed$: Subject<unknown>;
3335
let slideDisposed$: Subject<unknown>;
3436
let resourceManagerService: {
3537
getAllResourceHooks: ReturnType<typeof vi.fn>;
@@ -50,8 +52,10 @@ describe('ResourceLoaderService', () => {
5052
sheetAdded$ = new Subject();
5153
docAdded$ = new Subject();
5254
slideAdded$ = new Subject();
55+
baseAdded$ = new Subject();
5356
sheetDisposed$ = new Subject();
5457
docDisposed$ = new Subject();
58+
baseDisposed$ = new Subject();
5559
slideDisposed$ = new Subject();
5660
resourceManagerService = {
5761
getAllResourceHooks: vi.fn(() => []),
@@ -65,11 +69,13 @@ describe('ResourceLoaderService', () => {
6569
getTypeOfUnitAdded$: vi.fn((type) => {
6670
if (type === UniverInstanceType.UNIVER_SHEET) return sheetAdded$;
6771
if (type === UniverInstanceType.UNIVER_DOC) return docAdded$;
72+
if (type === UniverInstanceType.UNIVER_BASE) return baseAdded$;
6873
return slideAdded$;
6974
}),
7075
getTypeOfUnitDisposed$: vi.fn((type) => {
7176
if (type === UniverInstanceType.UNIVER_SHEET) return sheetDisposed$;
7277
if (type === UniverInstanceType.UNIVER_DOC) return docDisposed$;
78+
if (type === UniverInstanceType.UNIVER_BASE) return baseDisposed$;
7379
return slideDisposed$;
7480
}),
7581
getUnit: vi.fn(),
@@ -109,6 +115,19 @@ describe('ResourceLoaderService', () => {
109115
expect(resourceManagerService.unloadResources).toHaveBeenCalledWith('book-1', UniverInstanceType.UNIVER_SHEET);
110116
});
111117

118+
it('loads resources when a base unit is added and unloads them when disposed', () => {
119+
const base = {
120+
getUnitId: () => 'base-1',
121+
getSnapshot: () => ({ resources: [{ name: 'base-plugin', data: '{}' }] }),
122+
};
123+
124+
baseAdded$.next({ unit: base });
125+
baseDisposed$.next(base);
126+
127+
expect(resourceManagerService.loadResources).toHaveBeenCalledWith('base-1', [{ name: 'base-plugin', data: '{}' }]);
128+
expect(resourceManagerService.unloadResources).toHaveBeenCalledWith('base-1', UniverInstanceType.UNIVER_BASE);
129+
});
130+
112131
it('saves a unit snapshot with current plugin resources', () => {
113132
univerInstanceService.getUnit.mockReturnValue({
114133
type: UniverInstanceType.UNIVER_SHEET,

packages/core/src/services/resource-loader/resource-loader.service.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ export class ResourceLoaderService extends Disposable implements IResourceLoader
7878
});
7979
break;
8080
}
81+
case UniverInstanceType.UNIVER_BASE: {
82+
this._univerInstanceService.getAllUnitsForType<UnitModel<{ resources?: IResources }>>(UniverInstanceType.UNIVER_BASE).forEach((base) => {
83+
loadHookResource(hook, base.getUnitId(), base.getSnapshot().resources, 'Base');
84+
});
85+
break;
86+
}
8187
}
8288
});
8389
};
@@ -109,6 +115,12 @@ export class ResourceLoaderService extends Disposable implements IResourceLoader
109115
})
110116
);
111117

118+
this.disposeWithMe(
119+
this._univerInstanceService.getTypeOfUnitAdded$<UnitModel<{ resources?: IResources }>>(UniverInstanceType.UNIVER_BASE).subscribe((event) => {
120+
const { unit: base } = event;
121+
this._resourceManagerService.loadResources(base.getUnitId(), base.getSnapshot().resources);
122+
})
123+
);
112124
this.disposeWithMe(
113125
this._univerInstanceService.getTypeOfUnitDisposed$<Workbook>(UniverInstanceType.UNIVER_SHEET).subscribe((workbook) => {
114126
this._resourceManagerService.unloadResources(workbook.getUnitId(), UniverInstanceType.UNIVER_SHEET);
@@ -120,6 +132,11 @@ export class ResourceLoaderService extends Disposable implements IResourceLoader
120132
this._resourceManagerService.unloadResources(doc.getUnitId(), UniverInstanceType.UNIVER_DOC);
121133
})
122134
);
135+
this.disposeWithMe(
136+
this._univerInstanceService.getTypeOfUnitDisposed$<UnitModel<{ resources?: IResources }>>(UniverInstanceType.UNIVER_BASE).subscribe((base) => {
137+
this._resourceManagerService.unloadResources(base.getUnitId(), UniverInstanceType.UNIVER_BASE);
138+
})
139+
);
123140
this.disposeWithMe(
124141
this._univerInstanceService.getTypeOfUnitDisposed$<UnitModel>(UniverInstanceType.UNIVER_SLIDE).subscribe((slide) => {
125142
this._resourceManagerService.unloadResources(slide.getUnitId(), UniverInstanceType.UNIVER_SLIDE);

0 commit comments

Comments
 (0)