Skip to content

Commit 7229fc5

Browse files
authored
fix: not allowed to reload the initialize method (#580)
* fix: add extensions loaded flag * test: unit tests for _isLoaded logic of Extensions
1 parent 0118b43 commit 7229fc5

File tree

4 files changed

+43
-4
lines changed

4 files changed

+43
-4
lines changed

src/provider/__tests__/molecule.test.tsx

+8-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@ import '@testing-library/jest-dom';
44
import renderer from 'react-test-renderer';
55

66
import { select } from 'mo/common/dom';
7-
import { MoleculeProvider, Workbench } from 'mo';
7+
import molecule, { MoleculeProvider, Workbench } from 'mo';
88

99
import { customExtensions } from '../../../stories/extensions';
1010

1111
describe('Test MoleculeProvider', () => {
12+
beforeEach(() => {
13+
// Reset the extensions loaded state
14+
molecule.extension.setLoaded(false);
15+
});
16+
1217
test('Match The MoleculeProvider snapshot', () => {
1318
const component = renderer.create(
1419
<MoleculeProvider>
@@ -36,13 +41,13 @@ describe('Test MoleculeProvider', () => {
3641
).toBeInTheDocument();
3742
});
3843

39-
test('MoleculeProvider load the extensions', () => {
44+
test('MoleculeProvider load the extensions', async () => {
4045
render(
4146
<MoleculeProvider extensions={customExtensions}>
4247
<Workbench />
4348
</MoleculeProvider>
4449
);
45-
expect(
50+
await expect(
4651
select('div[data-id="ActivityBarTestPane"]')
4752
).toBeInTheDocument();
4853
});

src/provider/molecule.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ export class MoleculeProvider extends Component<IMoleculeProps> {
4848
}
4949

5050
componentDidMount() {
51-
this.initialize();
51+
if (!this.extensionService.isLoaded()) {
52+
this.initialize();
53+
}
5254
}
5355

5456
initialize() {
@@ -73,6 +75,9 @@ export class MoleculeProvider extends Component<IMoleculeProps> {
7375

7476
// Finally, handle the rest of extensions
7577
this.extensionService.load(restExts);
78+
79+
// Mark the extensionService as loaded
80+
this.extensionService.setLoaded();
7681
}
7782

7883
initLocaleExts(languages: IExtension[]) {

src/services/__tests__/extensionService.test.ts

+8
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,12 @@ describe('Test ExtensionService', () => {
181181
expect(languagesExts.length).toBe(1);
182182
expect(otherExts.length).toBe(1);
183183
});
184+
185+
test('The ExtensionService loaded status', () => {
186+
expect(instance.isLoaded()).not.toBeTruthy();
187+
instance.setLoaded();
188+
expect(instance.isLoaded()).toBeTruthy();
189+
instance.setLoaded(false);
190+
expect(instance.isLoaded()).not.toBeTruthy();
191+
});
184192
});

src/services/extensionService.ts

+21
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ export interface IExtensionService {
9696
* @returns [ languagesExts, otherExtensions ]
9797
*/
9898
splitLanguagesExts(extensions: IExtension[]): [IExtension[], IExtension[]];
99+
/**
100+
* whether the extensions are loaded
101+
*/
102+
isLoaded(): boolean;
103+
/**
104+
* Set the extensions are loaded
105+
*/
106+
setLoaded(flag?: boolean): void;
99107
}
100108

101109
@singleton()
@@ -105,13 +113,26 @@ export class ExtensionService implements IExtensionService {
105113
private readonly monacoService: IMonacoService;
106114
private _inactive: Function | undefined;
107115
private readonly localeService: ILocaleService;
116+
/**
117+
* TODO: This property is used for marking the extensions were loaded
118+
* we are going to refactor this logic after redesign the Molecule lifecycle.
119+
*/
120+
private _isLoaded: boolean = false;
108121

109122
constructor() {
110123
this.colorThemeService = container.resolve(ColorThemeService);
111124
this.monacoService = container.resolve(MonacoService);
112125
this.localeService = container.resolve(LocaleService);
113126
}
114127

128+
public setLoaded(flag?: boolean): void {
129+
this._isLoaded = flag !== undefined ? flag : true;
130+
}
131+
132+
public isLoaded(): boolean {
133+
return this._isLoaded;
134+
}
135+
115136
public getExtension(id: UniqueId): IExtension | undefined {
116137
return this.extensions.find(searchById(id));
117138
}

0 commit comments

Comments
 (0)