Skip to content

Commit 898bae6

Browse files
authored
feat: use the file name as default when project name is empty (#347)
1 parent 7ae2b99 commit 898bae6

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

frontend/src/components/menu/index.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ export interface MenuBarProps {
1414
editor: Editor;
1515
}
1616

17+
18+
interface FileHelper {
19+
fileName: string;
20+
reader: FileReader;
21+
}
1722
/**
1823
*
1924
* MenuBar component
@@ -23,8 +28,8 @@ function MenuBar(props: MenuBarProps) {
2328

2429
const theme = useTheme();
2530
const isDark = theme.palette.type === 'dark';
26-
const projectReader = new FileReader();
27-
const blockReader = new FileReader();
31+
const projectReader : FileHelper = {'fileName': '', 'reader': new FileReader()};
32+
const blockReader: FileHelper = {'fileName': '', 'reader': new FileReader()};
2833
const { editor } = props;
2934

3035
/**
@@ -54,12 +59,13 @@ function MenuBar(props: MenuBarProps) {
5459
* @param _event Mouse click event. Unused
5560
*/
5661
const openProject = (_event: ClickEvent) => {
62+
projectReader.fileName = '';
5763
// Simulate click to open file selection dialog.
5864
document.getElementById('openProjectInput')?.click();
59-
projectReader.onload = (event) => {
65+
projectReader.reader.onload = (event) => {
6066
if (event.target?.result) {
6167
// Parse file as JSON
62-
editor.loadProject(JSON.parse(event.target.result.toString()))
68+
editor.loadProject(JSON.parse(event.target.result.toString()), projectReader.fileName);
6369
}
6470
};
6571
}
@@ -114,11 +120,12 @@ function MenuBar(props: MenuBarProps) {
114120
* @param event File field change event.
115121
* @param reader Reader to open the uploaded file as text
116122
*/
117-
const onFileUpload = (event: ChangeEvent<HTMLInputElement>, reader: FileReader) => {
123+
const onFileUpload = (event: ChangeEvent<HTMLInputElement>, fileHelper: FileHelper) => {
118124
const file = event.target.files?.length ? event.target.files[0] : null;
119125
event.target.value = '';
120126
if (file) {
121-
reader.readAsText(file);
127+
fileHelper.fileName = file.name;
128+
fileHelper.reader.readAsText(file);
122129
}
123130
}
124131

@@ -138,10 +145,11 @@ function MenuBar(props: MenuBarProps) {
138145
* @param _event Mouse click event. Unused
139146
*/
140147
const addAsBlock = (_event: ClickEvent) => {
148+
blockReader.fileName = '';
141149
document.getElementById('addAsBlockInput')?.click();
142-
blockReader.onload = (event) => {
150+
blockReader.reader.onload = (event) => {
143151
if (event.target?.result) {
144-
editor.addAsBlock(JSON.parse(event.target.result.toString()));
152+
editor.addAsBlock(JSON.parse(event.target.result.toString()), blockReader.fileName);
145153
}
146154
};
147155
}

frontend/src/core/editor.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,16 @@ class Editor {
105105
* "dependencies": {...}
106106
* }
107107
*/
108-
public loadProject(jsonModel: any) {
108+
public loadProject(jsonModel: any, filename: string = '') {
109109
const model = new DiagramModel();
110110
const editor = jsonModel.editor;
111111
if (editor) {
112112
model.deserializeModel(editor, this.engine);
113113
this.activeModel = model;
114114
this.projectInfo = jsonModel.package;
115+
if (this.projectInfo.name === '' && filename !== '') {
116+
this.projectInfo.name = filename;
117+
}
115118
this.engine.setModel(model)
116119
}
117120
}
@@ -385,12 +388,15 @@ class Editor {
385388
* "dependencies": {...}
386389
* }
387390
*/
388-
public addAsBlock(jsonModel: any) {
391+
public addAsBlock(jsonModel: any, fileName: string = '') {
389392
// Helper to convert JSON object to block.
390393
const block = loadPackage(jsonModel);
391394
// Get a default position and set it as blocks position
392395
// TODO: Better way would be to get an empty position dynamically or track mouse's current position.
393396
if (block) {
397+
if (block.info.name === '' && fileName !== '') {
398+
block.info.name = fileName;
399+
}
394400
block.setPosition(...getInitialPosition())
395401
this.activeModel.addNode(block);
396402
// Once the block is added, the page has to rendered again, this is done by repainting the canvas.

0 commit comments

Comments
 (0)