Skip to content

Commit cc7ea60

Browse files
committed
Fix a cursor being lost when moved to scratch paper
1 parent 0de6f16 commit cc7ea60

File tree

4 files changed

+19
-31
lines changed

4 files changed

+19
-31
lines changed

src/frontend/components/App/index.jsx

+11-19
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class App extends React.Component {
141141
contributors: undefined,
142142
}, {
143143
name: `code.${ext}`,
144-
content: language ? language.skeleton : '', // TODO: put import statements as default
144+
content: language ? language.skeleton : '',
145145
contributors: undefined,
146146
}],
147147
});
@@ -174,6 +174,7 @@ class App extends React.Component {
174174
const { files } = this.props.current;
175175
if (editorTabIndex === files.length) this.handleAddFile();
176176
this.setState({ editorTabIndex });
177+
this.props.shouldBuild();
177178
}
178179

179180
handleAddFile() {
@@ -194,15 +195,11 @@ class App extends React.Component {
194195
this.props.renameFile(editorTabIndex, value);
195196
}
196197

197-
handleDeleteFile(file) {
198-
const { files } = this.props.current;
198+
handleDeleteFile() {
199199
const { editorTabIndex } = this.state;
200-
if (files.indexOf(file) < editorTabIndex) {
201-
this.handleChangeEditorTabIndex(editorTabIndex - 1);
202-
} else {
203-
this.handleChangeEditorTabIndex(Math.min(editorTabIndex, files.length - 2));
204-
}
205-
this.props.deleteFile(file);
200+
const { files } = this.props.current;
201+
this.handleChangeEditorTabIndex(Math.min(editorTabIndex, files.length - 2));
202+
this.props.deleteFile(editorTabIndex);
206203
}
207204

208205
toggleNavigatorOpened(navigatorOpened = !this.state.navigatorOpened) {
@@ -230,13 +227,13 @@ class App extends React.Component {
230227
const { titles, files } = this.props.current;
231228

232229
const gistSaved = this.isGistSaved();
233-
234230
const description = this.getDescription();
231+
const file = files[editorTabIndex];
235232

236233
const editorTitles = files.map(file => file.name);
237-
if (files[editorTabIndex]) {
234+
if (file) {
238235
editorTitles[editorTabIndex] = (
239-
<AutosizeInput className={styles.input_title} value={files[editorTabIndex].name}
236+
<AutosizeInput className={styles.input_title} value={file.name}
240237
onClick={e => e.stopPropagation()} onChange={e => this.handleRenameFile(e)} />
241238
);
242239
}
@@ -253,20 +250,15 @@ class App extends React.Component {
253250
<Header className={styles.header} onClickTitleBar={() => this.toggleNavigatorOpened()}
254251
navigatorOpened={navigatorOpened} loadScratchPapers={() => this.loadScratchPapers()}
255252
loadAlgorithm={params => this.loadAlgorithm(params)} gistSaved={gistSaved}
256-
file={files[editorTabIndex]} />
253+
file={file} />
257254
<ResizableContainer className={styles.workspace} horizontal weights={workspaceWeights}
258255
visibles={[navigatorOpened, true, true]}
259256
onChangeWeights={weights => this.handleChangeWorkspaceWeights(weights)}>
260257
<Navigator loadAlgorithm={params => this.loadAlgorithm(params)} />
261258
<VisualizationViewer className={styles.visualization_viewer} />
262259
<TabContainer className={styles.editor_tab_container} titles={editorTitles} tabIndex={editorTabIndex}
263260
onChangeTabIndex={tabIndex => this.handleChangeEditorTabIndex(tabIndex)}>
264-
{
265-
files.map((file, i) => ( // TODO: editor cursor should stay when moved to scratch paper
266-
<CodeEditor key={[...titles, i].join('--')} file={file}
267-
onDeleteFile={file => this.handleDeleteFile(file)} />
268-
))
269-
}
261+
<CodeEditor file={file} onClickDelete={() => this.handleDeleteFile()} />
270262
</TabContainer>
271263
</ResizableContainer>
272264
<ToastContainer className={styles.toast_container} />

src/frontend/components/CodeEditor/index.jsx

+4-6
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,19 @@ import styles from './stylesheet.scss';
1919

2020
@connect(({ current, env, player }) => ({ current, env, player }), actions)
2121
class CodeEditor extends React.Component {
22-
componentDidMount() {
23-
this.props.shouldBuild();
24-
}
25-
2622
handleChangeCode(code) {
2723
const { file } = this.props;
2824
this.props.modifyFile({ ...file, content: code });
2925
if (extension(file.name) === 'md') this.props.shouldBuild();
3026
}
3127

3228
render() {
33-
const { className, file, onDeleteFile } = this.props;
29+
const { className, file, onClickDelete } = this.props;
3430
const { user } = this.props.env;
3531
const { lineIndicator } = this.props.player;
3632

33+
if (!file) return null;
34+
3735
const fileExt = extension(file.name);
3836
const language = languages.find(language => language.ext === fileExt);
3937
const mode = language ? language.mode : fileExt === 'md' ? 'markdown' : 'plain_text';
@@ -70,7 +68,7 @@ class CodeEditor extends React.Component {
7068
}
7169
<div className={styles.empty}>
7270
<div className={styles.empty} />
73-
<Button className={styles.delete} icon={faTrashAlt} primary onClick={() => onDeleteFile(file)}
71+
<Button className={styles.delete} icon={faTrashAlt} primary onClick={onClickDelete}
7472
confirmNeeded>
7573
<Ellipsis>Delete File</Ellipsis>
7674
</Button>

src/frontend/components/TabContainer/index.jsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ class TabContainer extends React.Component {
2424
<div className={classes(styles.title, styles.fake)} />
2525
</div>
2626
<div className={styles.content}>
27-
{
28-
React.Children.toArray(children)[tabIndex]
29-
}
27+
{children}
3028
</div>
3129
</div>
3230
);

src/frontend/reducers/current.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const setCurrent = createAction(`${prefix}/SET_CURRENT`, (categoryKey, algorithm
88
const renameScratchPaper = createAction(`${prefix}/RENAME_SCRATCH_PAPER`, title => ({ titles: ['Scratch Paper', title] }));
99
const addFile = createAction(`${prefix}/ADD_FILE`, file => ({ file }));
1010
const modifyFile = createAction(`${prefix}/MODIFY_FILE`, file => ({ file }));
11-
const deleteFile = createAction(`${prefix}/DELETE_FILE`, file => ({ file }));
11+
const deleteFile = createAction(`${prefix}/DELETE_FILE`, index => ({ index }));
1212
const renameFile = createAction(`${prefix}/RENAME_FILE`, (index, name) => ({ index, name }));
1313

1414
export const actions = {
@@ -62,8 +62,8 @@ export default handleActions({
6262
return getNextState(state, files);
6363
},
6464
[deleteFile]: (state, { payload }) => {
65-
const { file } = payload;
66-
const files = state.files.filter(oldFile => oldFile.name !== file.name);
65+
const { index } = payload;
66+
const files = state.files.filter((file, i) => i !== index);
6767
return getNextState(state, files);
6868
},
6969
[renameFile]: (state, { payload }) => {

0 commit comments

Comments
 (0)