From eff9d6f559f72ad488acb0bea38080d7df0bc81b Mon Sep 17 00:00:00 2001 From: Hayden Date: Wed, 20 Jan 2021 18:24:17 -0900 Subject: [PATCH] unified upload button + download backups --- frontend/src/api.js | 4 +- frontend/src/api/api-utils.js | 12 ++-- frontend/src/api/backup.js | 5 ++ frontend/src/api/upload.js | 13 ++++ .../Settings/Backup/ImportDialog.vue | 10 +-- .../src/components/Settings/Backup/index.vue | 11 ++-- frontend/src/components/UI/UploadBtn.vue | 62 +++++++++++++++---- mealie/routes/backup_routes.py | 31 +++++++++- 8 files changed, 118 insertions(+), 30 deletions(-) create mode 100644 frontend/src/api/upload.js diff --git a/frontend/src/api.js b/frontend/src/api.js index 7f7449ff5..1ca4d2f4a 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -4,8 +4,7 @@ import mealplan from "./api/mealplan"; import settings from "./api/settings"; import themes from "./api/themes"; import migration from "./api/migration"; - -// import api from "../api"; +import myUtils from "./api/upload"; export default { recipes: recipe, @@ -14,4 +13,5 @@ export default { settings: settings, themes: themes, migrations: migration, + utils: myUtils, }; diff --git a/frontend/src/api/api-utils.js b/frontend/src/api/api-utils.js index d1fcc1dee..e8d578e21 100644 --- a/frontend/src/api/api-utils.js +++ b/frontend/src/api/api-utils.js @@ -16,8 +16,8 @@ function processResponse(response) { } const apiReq = { - post: async function(url, data) { - let response = await axios.post(url, data).catch(function(error) { + post: async function (url, data) { + let response = await axios.post(url, data).catch(function (error) { if (error.response) { processResponse(error.response); return error.response; @@ -27,8 +27,8 @@ const apiReq = { return response; }, - get: async function(url, data) { - let response = await axios.get(url, data).catch(function(error) { + get: async function (url, data) { + let response = await axios.get(url, data).catch(function (error) { if (error.response) { processResponse(error.response); return response; @@ -38,8 +38,8 @@ const apiReq = { return response; }, - delete: async function(url, data) { - let response = await axios.delete(url, data).catch(function(error) { + delete: async function (url, data) { + let response = await axios.delete(url, data).catch(function (error) { if (error.response) { processResponse(error.response); return response; diff --git a/frontend/src/api/backup.js b/frontend/src/api/backup.js index c326b684d..42e6ce076 100644 --- a/frontend/src/api/backup.js +++ b/frontend/src/api/backup.js @@ -10,6 +10,7 @@ const backupURLs = { createBackup: `${backupBase}export/database/`, importBackup: (fileName) => `${backupBase}${fileName}/import/`, deleteBackup: (fileName) => `${backupBase}${fileName}/delete/`, + downloadBackup: (fileName) => `${backupBase}${fileName}/download/`, }; export default { @@ -32,4 +33,8 @@ export default { let response = apiReq.post(backupURLs.createBackup, data); return response; }, + async download(fileName) { + let response = await apiReq.get(backupURLs.downloadBackup(fileName)); + return response.data; + }, }; diff --git a/frontend/src/api/upload.js b/frontend/src/api/upload.js new file mode 100644 index 000000000..1c7655185 --- /dev/null +++ b/frontend/src/api/upload.js @@ -0,0 +1,13 @@ +import { apiReq } from "./api-utils"; + +export default { + // import api from "../api"; + async uploadFile(url, fileObject) { + let response = await apiReq.post(url, fileObject, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + return response.data; + }, +}; diff --git a/frontend/src/components/Settings/Backup/ImportDialog.vue b/frontend/src/components/Settings/Backup/ImportDialog.vue index 7a298d756..10d63ef64 100644 --- a/frontend/src/components/Settings/Backup/ImportDialog.vue +++ b/frontend/src/components/Settings/Backup/ImportDialog.vue @@ -8,7 +8,7 @@ - + - - {{$t('general.download')}} + + {{ $t("general.download") }} - {{$t('general.delete')}} + {{ $t("general.delete") }} - {{$t('general.import')}} + {{ $t("general.import") }} diff --git a/frontend/src/components/Settings/Backup/index.vue b/frontend/src/components/Settings/Backup/index.vue index defa661b2..c37198dcb 100644 --- a/frontend/src/components/Settings/Backup/index.vue +++ b/frontend/src/components/Settings/Backup/index.vue @@ -21,10 +21,10 @@ Available Backups - - Upload - mdi-cloud-upload - + import api from "../../../api"; import SuccessFailureAlert from "../../UI/SuccessFailureAlert"; +import UploadBtn from "../../UI/UploadBtn"; import AvailableBackupCard from "./AvailableBackupCard"; import NewBackupCard from "./NewBackupCard"; export default { components: { SuccessFailureAlert, + UploadBtn, AvailableBackupCard, NewBackupCard, }, @@ -70,6 +72,7 @@ export default { let response = await api.backups.requestAvailable(); this.availableBackups = response.imports; this.availableTemplates = response.templates; + console.log(this.availableBackups); }, deleteBackup() { if (this.$refs.form.validate()) { diff --git a/frontend/src/components/UI/UploadBtn.vue b/frontend/src/components/UI/UploadBtn.vue index fc84f027e..a2d770afb 100644 --- a/frontend/src/components/UI/UploadBtn.vue +++ b/frontend/src/components/UI/UploadBtn.vue @@ -1,24 +1,62 @@