diff --git a/packages/api/src/controllers/files.js b/packages/api/src/controllers/files.js
index 2a6f4ee06..c69e36642 100644
--- a/packages/api/src/controllers/files.js
+++ b/packages/api/src/controllers/files.js
@@ -3,14 +3,16 @@ const path = require('path');
const { filesdir } = require('../utility/directories');
const socket = require('../utility/socket');
-function serialize(folder, data) {
- if (folder == 'sql') return data;
- return JSON.stringify(data);
+function serialize(format, data) {
+ if (format == 'text') return data;
+ if (format == 'json') return JSON.stringify(data);
+ throw new Error(`Invalid format: ${format}`);
}
-function deserialize(folder, text) {
- if (folder == 'sql') return text;
- return JSON.parse(text);
+function deserialize(format, text) {
+ if (format == 'text') return text;
+ if (format == 'json') return JSON.parse(text);
+ throw new Error(`Invalid format: ${format}`);
}
module.exports = {
@@ -18,7 +20,7 @@ module.exports = {
async list({ folder }) {
const dir = path.join(filesdir(), folder);
if (!(await fs.exists(dir))) return [];
- const files = (await fs.readdir(dir)).map((name) => ({ name }));
+ const files = (await fs.readdir(dir)).map((file) => ({ folder, file }));
return files;
},
@@ -29,18 +31,18 @@ module.exports = {
},
load_meta: 'post',
- async load({ folder, file }) {
+ async load({ folder, file, format }) {
const text = await fs.readFile(path.join(filesdir(), folder, file), { encoding: 'utf-8' });
- return deserialize(folder, text);
+ return deserialize(format, text);
},
save_meta: 'post',
- async save({ folder, file, data }) {
+ async save({ folder, file, data, format }) {
const dir = path.join(filesdir(), folder);
if (!(await fs.exists(dir))) {
await fs.mkdir(dir);
}
- await fs.writeFile(path.join(dir, file), serialize(folder, data));
+ await fs.writeFile(path.join(dir, file), serialize(format, data));
socket.emitChanged(`files-changed-${folder}`);
},
};
diff --git a/packages/web/src/appobj/SavedSqlFileAppObject.js b/packages/web/src/appobj/SavedSqlFileAppObject.js
index 92017844b..891badf29 100644
--- a/packages/web/src/appobj/SavedSqlFileAppObject.js
+++ b/packages/web/src/appobj/SavedSqlFileAppObject.js
@@ -17,21 +17,21 @@ function Menu({ data }) {
}
function SavedSqlFileAppObject({ data, commonProps }) {
- const { name } = data;
+ const { file } = data;
const newQuery = useNewQuery();
const onClick = async () => {
- const resp = await axios.post('files/load', { folder: 'sql', file: name });
+ const resp = await axios.post('files/load', { folder: 'sql', file, format: 'text' });
newQuery({
- title: name,
+ title: file,
// @ts-ignore
initialScript: resp.data,
});
};
- return ;
+ return ;
}
-SavedSqlFileAppObject.extractKey = (data) => data.name;
+SavedSqlFileAppObject.extractKey = (data) => data.file;
export default SavedSqlFileAppObject;
diff --git a/packages/web/src/modals/SaveSqlFileModal.js b/packages/web/src/modals/SaveFileModal.js
similarity index 78%
rename from packages/web/src/modals/SaveSqlFileModal.js
rename to packages/web/src/modals/SaveFileModal.js
index e680cd5d4..572ad3e97 100644
--- a/packages/web/src/modals/SaveSqlFileModal.js
+++ b/packages/web/src/modals/SaveFileModal.js
@@ -9,16 +9,16 @@ import ModalContent from './ModalContent';
import ModalFooter from './ModalFooter';
// import FormikForm from '../utility/FormikForm';
-export default function SaveSqlFileModal({ storageKey, modalState, name, onSave = undefined }) {
+export default function SaveFileModal({ getData, folder, format, modalState, name, onSave = undefined }) {
const handleSubmit = async (values) => {
const { name } = values;
- await axios.post('files/save', { folder: 'sql', file: name, data: localStorage.getItem(storageKey) });
+ await axios.post('files/save', { folder, file: name, data: getData(), format });
modalState.close();
if (onSave) onSave(name);
};
return (
- Save SQL file
+ Save file