Skip to content

Commit 882439b

Browse files
Disable run button when running (#38)
Co-authored-by: Samuel Colvin <[email protected]>
1 parent 28ee84f commit 882439b

File tree

5 files changed

+25
-5
lines changed

5 files changed

+25
-5
lines changed

src/frontend/src/app.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const ansiConverter = new Convert({ colors: { 1: '#CE9178', 4: '#569CFF', 5: '#F
1010

1111
export default function () {
1212
const [status, setStatus] = createSignal<string | null>(null)
13+
const [running, setRunning] = createSignal(false)
1314
const [installed, setInstalled] = createSignal('')
1415
const [outputHtml, setOutputHtml] = createSignal('')
1516
const [versions, setVersions] = createSignal<Versions | null>(null)
@@ -33,6 +34,8 @@ export default function () {
3334
terminalOutput += data.message
3435
} else if (data.kind == 'installed') {
3536
setInstalled(data.message.length > 0 ? `Installed dependencies: ${data.message}` : '')
37+
} else if (data.kind == 'end') {
38+
setRunning(false)
3639
} else {
3740
setVersions(data as Versions)
3841
}
@@ -53,6 +56,7 @@ export default function () {
5356
})
5457

5558
async function runCode(files: CodeFile[]) {
59+
setRunning(true)
5660
setStatus('Starting Python...')
5761
setInstalled('')
5862
setOutputHtml('')
@@ -74,7 +78,7 @@ export default function () {
7478
</aside>
7579
</header>
7680
<section>
77-
<Editor runCode={runCode} />
81+
<Editor runCode={runCode} running={running()} />
7882
<div class="col">
7983
<div class="status my-5">{status() || <>&nbsp;</>}</div>
8084
<div class="installed">{installed()}</div>

src/frontend/src/editor.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import type { Editor } from './monacoEditor'
77

88
interface EditorProps {
99
runCode: (files: CodeFile[]) => void
10+
running: boolean
1011
}
1112

12-
export default function ({ runCode }: EditorProps) {
13+
export default function (props: EditorProps) {
1314
const [saveActive, setSaveActive] = createSignal(false)
1415
const [saveStatus, setSaveStatus] = createSignal('Changes not saved')
1516
const [showSave, setShowSave] = createSignal(false)
@@ -93,7 +94,7 @@ export default function ({ runCode }: EditorProps) {
9394

9495
function run() {
9596
const files = updateFiles(editor!.getValue())
96-
runCode(files)
97+
props.runCode(files)
9798
save(files)
9899
}
99100

@@ -187,7 +188,12 @@ export default function ({ runCode }: EditorProps) {
187188
</div>
188189
)}
189190
<div>
190-
<button class="green" onClick={run} title="Run code in your browser and display the output">
191+
<button
192+
class="green"
193+
onClick={run}
194+
disabled={props.running}
195+
title="Run code in your browser and display the output"
196+
>
191197
Run
192198
</button>
193199
</div>

src/frontend/src/style.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ button {
113113
&:hover {
114114
background: color.adjust($btn-green, $lightness: -10%);
115115
}
116+
&:disabled {
117+
background: color.adjust($btn-green, $lightness: 20%);
118+
opacity: 0.6;
119+
cursor: default;
120+
}
116121
}
117122
&.blue {
118123
background: $btn-blue;

src/frontend/src/types.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@ export interface Versions {
2222
python: string
2323
pyodide: string
2424
}
25+
export interface EndRun {
26+
kind: 'end'
27+
}
2528

26-
export type WorkerResponse = Print | Message | Versions
29+
export type WorkerResponse = Print | Message | Versions | EndRun

src/frontend/src/worker.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,13 @@ self.onmessage = async ({ data }: { data: RunCode }) => {
4949
sys.stderr.flush()
5050
postPrint()
5151
post({ kind: 'status', message: `${msg}ran code in ${asMs(execTime)}` })
52+
post({ kind: 'end' })
5253
} catch (err) {
5354
postPrint()
5455
console.warn(err)
5556
post({ kind: 'status', message: `${msg}Error occurred` })
5657
post({ kind: 'error', message: formatError(err) })
58+
post({ kind: 'end' })
5759
}
5860
}
5961

0 commit comments

Comments
 (0)