Skip to content

Commit 2b87714

Browse files
author
Ives van Hoorne
committed
Add boilerplate functionality for current module view
1 parent 1579383 commit 2b87714

File tree

4 files changed

+46
-14
lines changed

4 files changed

+46
-14
lines changed

src/app/components/sandbox/Preview/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import type { Module, Sandbox, Directory } from 'common/types';
99

1010
import { frameUrl } from 'app/utils/url-generator';
1111
import { findMainModule } from 'app/store/entities/sandboxes/modules/selectors';
12-
import defaultBoilerplates from 'app/store/entities/sandboxes/boilerplates/default-boilerplates';
1312
import sandboxActionCreators from 'app/store/entities/sandboxes/actions';
1413
import shouldUpdate from './utils/should-update';
1514

@@ -227,6 +226,7 @@ export default class Preview extends React.PureComponent {
227226
externalResources,
228227
preferences,
229228
dependencies,
229+
isInProjectView,
230230
runActionFromPreview,
231231
} = this.props;
232232
if (preferences.clearConsoleEnabled) {
@@ -238,14 +238,14 @@ export default class Preview extends React.PureComponent {
238238
const renderedModule = this.getRenderedModule();
239239
this.sendMessage({
240240
type: 'compile',
241-
boilerplates: defaultBoilerplates,
242241
module: renderedModule,
243242
changedModule: module,
244243
dependencies,
245244
modules,
246245
directories,
247246
externalResources,
248247
hasActions: !!runActionFromPreview,
248+
isModuleView: !isInProjectView,
249249
});
250250
};
251251

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
export const JS = {
2+
id: 'js',
3+
extension: '.js',
4+
condition: '.jsx?$',
5+
code: `
6+
import React from 'react';
7+
import { render } from 'react-dom';
8+
export default function(module) {
9+
const node = document.createElement('div');
10+
document.body.appendChild(node);
11+
render(React.createElement(module.default), node);
12+
}
13+
`,
14+
};
15+
16+
export const HTML = {
17+
id: 'html',
18+
extension: '.html',
19+
condition: '.html$',
20+
code: `
21+
export default function(module) {
22+
document.body.innerHTML = module
23+
}
24+
`,
25+
};
26+
27+
export default [JS, HTML];

src/sandbox/boilerplates/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ export function evalBoilerplates(
2323
type: '',
2424
};
2525

26-
const module = evalModule(fakeModule, modules, directories, externals);
26+
const module = evalModule(
27+
fakeModule,
28+
[fakeModule, ...modules],
29+
directories,
30+
externals,
31+
);
2732
return { ...boilerplate, module };
2833
});
2934
}

src/sandbox/index.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
} from 'app/store/entities/sandboxes/modules/selectors';
88

99
import evalModule, { deleteCache, clearCache } from './eval';
10-
import NoDomChangeError from './errors/no-dom-change-error';
1110
import loadDependencies from './npm';
1211
import sendMessage, { isStandalone } from './utils/send-message';
1312
import host from './utils/host';
@@ -20,6 +19,7 @@ import { resetScreen } from './status-screen';
2019

2120
import { inject, uninject } from './react-error-overlay/overlay';
2221

22+
import defaultBoilerplates from './boilerplates/default-boilerplates';
2323
import {
2424
getBoilerplates,
2525
evalBoilerplates,
@@ -72,12 +72,12 @@ async function compile(message) {
7272
const {
7373
modules,
7474
directories,
75-
boilerplates = [],
7675
module,
7776
changedModule,
7877
externalResources,
7978
dependencies,
8079
hasActions,
80+
isModuleView = false,
8181
} = message.data;
8282
uninject();
8383
inject();
@@ -130,19 +130,19 @@ async function compile(message) {
130130
const evalled = await evalModule(module, modules, directories, externals);
131131
const domChanged = document.body.innerHTML !== html;
132132

133-
if (!domChanged && !module.title.endsWith('.html')) {
133+
if (isModuleView && !domChanged && !module.title.endsWith('.html')) {
134134
const isReact = module.code && module.code.includes('React');
135-
const functionName = evalled.default ? evalled.default.name : '';
136135

137136
if (isReact) {
138137
// initiate boilerplates
139-
if (
140-
boilerplates.length !== 0 &&
141-
getBoilerplates().length === 0 &&
142-
externals != null
143-
) {
138+
if (getBoilerplates().length === 0 && externals != null) {
144139
try {
145-
evalBoilerplates(boilerplates, modules, directories, externals);
140+
evalBoilerplates(
141+
defaultBoilerplates,
142+
modules,
143+
directories,
144+
externals,
145+
);
146146
} catch (e) {
147147
console.log("Couldn't load all boilerplates");
148148
}
@@ -153,7 +153,7 @@ async function compile(message) {
153153
try {
154154
boilerplate.module.default(evalled);
155155
} catch (e) {
156-
throw new NoDomChangeError(isReact, functionName);
156+
console.error(e);
157157
}
158158
}
159159
}

0 commit comments

Comments
 (0)