Skip to content

Commit 4c1434a

Browse files
committed
Use app logic for loading default file in embed
1 parent 3373eb2 commit 4c1434a

File tree

4 files changed

+58
-24
lines changed

4 files changed

+58
-24
lines changed

packages/app/src/embed/components/App/index.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,13 +225,16 @@ export default class App extends React.PureComponent<
225225
getCurrentModuleFromPath = (sandbox: Sandbox): Module => {
226226
const { currentModule: currentModulePath } = this.state;
227227

228-
return (
229-
findCurrentModule(
228+
return findCurrentModule(
229+
sandbox.modules,
230+
sandbox.directories,
231+
currentModulePath,
232+
findMainModule(
230233
sandbox.modules,
231234
sandbox.directories,
232-
currentModulePath,
233-
findMainModule(sandbox.modules, sandbox.directories, sandbox.entry)
234-
) || sandbox.modules[0]
235+
sandbox.entry,
236+
sandbox.template
237+
)
235238
);
236239
};
237240

packages/app/src/embed/components/Content/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,12 @@ export default class Content extends React.PureComponent<Props, State> {
387387
} = this.props;
388388

389389
const mainModule = isInProjectView
390-
? findMainModule(sandbox.modules, sandbox.directories, sandbox.entry)
390+
? findMainModule(
391+
sandbox.modules,
392+
sandbox.directories,
393+
sandbox.entry,
394+
sandbox.template
395+
)
391396
: currentModule;
392397

393398
if (!mainModule) throw new Error('Cannot find main module');

packages/common/src/sandbox/modules.ts

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import memoize from 'lodash/memoize';
22
import { Module, Directory } from '../types';
3+
import getTemplateDefinition, { TemplateType } from '../templates';
34

45
const compareTitle = (
56
original: string,
@@ -251,14 +252,30 @@ export const isMainModule = (
251252
export const findMainModule = (
252253
modules: Module[],
253254
directories: Directory[],
254-
entry: string = 'index.js'
255+
entry: string = 'index.js',
256+
template?: TemplateType
255257
) => {
256258
try {
259+
// first attempt: try loading the entry file if it exists
257260
const module = resolveModule(entry, modules, directories);
258-
259261
return module;
260262
} catch (e) {
261-
return modules[0];
263+
try {
264+
// second attempt: try loading the first file that exists from
265+
// the list of possible defaults in the template defination
266+
const templateDefinition = getTemplateDefinition(template);
267+
268+
const defaultOpenedFiles = templateDefinition.getDefaultOpenedFiles({});
269+
270+
const defaultOpenModule = defaultOpenedFiles
271+
.map(path => resolveModuleWrapped({ modules, directories })(path))
272+
.find(module => module);
273+
274+
return defaultOpenModule;
275+
} catch (nestedError) {
276+
// third attempt: give up and load the first file in the list
277+
return modules[0];
278+
}
262279
}
263280
};
264281

@@ -284,3 +301,19 @@ export const findCurrentModule = (
284301
mainModule
285302
);
286303
};
304+
305+
export const resolveModuleWrapped = sandbox => (path: string) => {
306+
try {
307+
return resolveModule(path, sandbox.modules, sandbox.directories);
308+
} catch (e) {
309+
return undefined;
310+
}
311+
};
312+
313+
export const resolveDirectoryWrapped = sandbox => (path: string) => {
314+
try {
315+
return resolveDirectory(path, sandbox.modules, sandbox.directories);
316+
} catch (e) {
317+
return undefined;
318+
}
319+
};
Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
import { resolveModule, resolveDirectory } from '../../sandbox/modules';
1+
import {
2+
resolveModuleWrapped,
3+
resolveDirectoryWrapped,
4+
} from '../../sandbox/modules';
25

3-
export const resolveModuleWrapped = sandbox => (path: string) => {
4-
try {
5-
return resolveModule(path, sandbox.modules, sandbox.directories);
6-
} catch (e) {
7-
return undefined;
8-
}
9-
};
6+
// keeping this file around to reduce merge conflicts
7+
// with other open branches
8+
// TODO @sid: Replace the usage of this file after overmind refactor is complete.
109

11-
export const resolveDirectoryWrapped = sandbox => (path: string) => {
12-
try {
13-
return resolveDirectory(path, sandbox.modules, sandbox.directories);
14-
} catch (e) {
15-
return undefined;
16-
}
17-
};
10+
export { resolveModuleWrapped, resolveDirectoryWrapped };

0 commit comments

Comments
 (0)