Skip to content

Commit 5acd3ea

Browse files
committed
Half working version switcher
1 parent 15e426c commit 5acd3ea

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

client/modules/IDE/components/Editor/index.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,9 @@ class Editor extends React.Component {
257257
if (!prevProps.unsavedChanges) {
258258
setTimeout(() => this.props.setUnsavedChanges(false), 400);
259259
}
260+
} else if (this.getContent().content !== this.props.file.content) {
261+
// TODO: make this not break regular edits!
262+
this._cm.setValue(this.props.file.content);
260263
}
261264
if (this.props.fontSize !== prevProps.fontSize) {
262265
this._cm.getWrapperElement().style[

client/modules/IDE/components/VersionPicker.jsx

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,35 @@
1-
import React from 'react';
2-
import { useP5Version } from '../hooks/useP5Version';
1+
import React, { useCallback } from 'react';
2+
import { useDispatch } from 'react-redux';
3+
4+
import { useP5Version, p5Versions } from '../hooks/useP5Version';
5+
import MenuItem from '../../../components/Dropdown/MenuItem';
6+
import DropdownMenu from '../../../components/Dropdown/DropdownMenu';
7+
import { updateFileContent } from '../actions/files';
38

49
const VersionPicker = () => {
5-
const versionInfo = useP5Version();
10+
const { indexID, versionInfo } = useP5Version();
11+
const dispatch = useDispatch();
12+
const dispatchReplaceVersion = useCallback(
13+
(version) => {
14+
if (!indexID || !versionInfo) return;
15+
dispatch(updateFileContent(indexID, versionInfo.replaceVersion(version)));
16+
},
17+
[indexID, versionInfo]
18+
);
19+
20+
if (!versionInfo) {
21+
return <p>Custom</p>;
22+
}
623

7-
return <p>{versionInfo?.version || 'custom'}</p>;
24+
return (
25+
<DropdownMenu anchor={<span>Version</span>} align="left">
26+
{p5Versions.map((version) => (
27+
<MenuItem key={version} onClick={() => dispatchReplaceVersion(version)}>
28+
{version}
29+
</MenuItem>
30+
))}
31+
</DropdownMenu>
32+
);
833
};
934

1035
VersionPicker.popTypes = {};

client/modules/IDE/hooks/useP5Version.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { useSelector } from 'react-redux';
88
export const p5Versions = [
99
'1.11.3',
1010
'2.0.0-beta.2',
11-
'1.11.3',
1211
'1.11.2',
1312
'1.11.1',
1413
'1.11.0',
@@ -135,12 +134,14 @@ export const p5Versions = [
135134

136135
export function useP5Version() {
137136
const files = useSelector((state) => state.files);
138-
const indexSrc = files.find(
137+
const indexFile = files.find(
139138
(file) =>
140139
file.fileType === 'file' &&
141140
file.name === 'index.html' &&
142141
file.filePath === ''
143-
)?.content;
142+
);
143+
const indexSrc = indexFile?.content;
144+
const indexID = indexFile?.id;
144145

145146
// { version: string, minified: boolean, replaceVersion: (version: string) => string } | null
146147
const versionInfo = useMemo(() => {
@@ -180,5 +181,5 @@ export function useP5Version() {
180181
return null;
181182
}, [indexSrc]);
182183

183-
return versionInfo;
184+
return { indexID, versionInfo };
184185
}

0 commit comments

Comments
 (0)