Skip to content

Commit b5e8328

Browse files
committed
Fix some flaws with the devserver
1 parent b30801a commit b5e8328

File tree

3 files changed

+52
-5
lines changed

3 files changed

+52
-5
lines changed

devserver/src/components/Playground.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import classNames from 'classnames';
44
import { SourceDocumentation, getNames, runInContext, type Context } from 'js-slang';
55
// Importing this straight from js-slang doesn't work for whatever reason
66
import createContext from 'js-slang/dist/createContext';
7+
import { setModulesStaticURL } from 'js-slang/dist/modules/loader';
78
import { Chapter, Variant } from 'js-slang/dist/types';
89
import { stringify } from 'js-slang/dist/utils/stringify';
910
import React from 'react';
@@ -50,7 +51,16 @@ const createContextHelper = (onConsoleLog: (arg: string) => void) => {
5051
const Playground: React.FC = () => {
5152
const consoleLogs = React.useRef<string[]>([]);
5253
const [moduleBackend, setModuleBackend] = React.useState<string | null>(null);
53-
const [useCompiledTabs, setUseCompiledTabs] = React.useState(false);
54+
55+
React.useEffect(() => {
56+
const savedBackend = localStorage.getItem('backend');
57+
if (savedBackend != undefined) {
58+
setModuleBackend(savedBackend);
59+
setModulesStaticURL(savedBackend);
60+
}
61+
}, []);
62+
63+
const [useCompiledTabs, setUseCompiledTabs] = React.useState(!!localStorage.getItem('compiledTabs'));
5464

5565
const [dynamicTabs, setDynamicTabs] = React.useState<SideContentTab[]>([]);
5666
const [selectedTabId, setSelectedTab] = React.useState(testTabContent.id);
@@ -184,9 +194,16 @@ const Playground: React.FC = () => {
184194
placement="right"
185195
content={<SettingsPopup
186196
backend={moduleBackend ?? ''}
187-
onBackendChange={setModuleBackend}
197+
onBackendChange={value => {
198+
setModuleBackend(value);
199+
setModulesStaticURL(value);
200+
localStorage.setItem('backend', value);
201+
}}
188202
useCompiledForTabs={useCompiledTabs}
189-
onUseCompiledChange={setUseCompiledTabs}
203+
onUseCompiledChange={value => {
204+
setUseCompiledTabs(value);
205+
localStorage.setItem('compiledTabs', value ? 'true' : '');
206+
}}
190207
/>}
191208
renderTarget={({ isOpen: _isOpen, ...targetProps }) => {
192209
return (

devserver/src/components/SettingsPopup.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Card, EditableText, Switch, Tooltip } from '@blueprintjs/core';
2+
import { useState } from 'react';
23

34
type SettingsPopupProps = {
45
backend: string
@@ -8,6 +9,8 @@ type SettingsPopupProps = {
89
};
910

1011
export default function SettingsPopup(props: SettingsPopupProps) {
12+
const [backendText, setBackendText] = useState(props.backend);
13+
1114
return <Card>
1215
<div style={{
1316
display: 'flex',
@@ -20,11 +23,14 @@ export default function SettingsPopup(props: SettingsPopupProps) {
2023
flexDirection: 'row',
2124
justifyContent: 'space-between'
2225
}}>
23-
<p>Modules Backend:</p>
24-
<EditableText value={props.backend}
26+
<p>Modules Backend: </p>
27+
<EditableText value={backendText}
28+
alwaysRenderInput
29+
onChange={setBackendText}
2530
onConfirm={v => {
2631
if (props.onBackendChange) props.onBackendChange(v);
2732
}}
33+
onCancel={() => setBackendText(props.backend)}
2834
/>
2935
</div>
3036
<br/>

devserver/vite.config.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,30 @@ export default defineConfig(({ mode }) => {
2525
include: ['path']
2626
}),
2727
react(),
28+
// TODO: Investigate how to include bundles into hot reload
29+
// {
30+
// name: 'Bundle Provider',
31+
// resolveId(source) {
32+
// const RE = /^@sourceacademy\/bundle-.+(?:$|\/(.+)$)/
33+
// const match = RE.exec(source);
34+
35+
// if (source.startsWith('@sourceacademy')) {
36+
// console.log('trying to resolve', source)
37+
// }
38+
39+
// if (!match) return undefined;
40+
41+
// const [, bundleName, path] = match!;
42+
// if (!path) {
43+
// const newPath = pathlib.resolve(import.meta.dirname, '../src/bundles', bundleName, 'src/index.ts')
44+
// console.log('oldPath', source, 'newPath', newPath)
45+
// } else {
46+
// const newPath = pathlib.resolve(import.meta.dirname, '../src/bundles', bundleName, 'src', `${path}.ts`)
47+
// console.log('oldPath', source, 'newPath', newPath)
48+
// }
49+
// return undefined;
50+
// }
51+
// }
2852
],
2953
resolve: {
3054
preserveSymlinks: true,

0 commit comments

Comments
 (0)