New import card

This commit is contained in:
Hayden 2021-01-16 09:06:38 -09:00
commit fb44d4f806
4 changed files with 81 additions and 59 deletions

View file

@ -18,8 +18,8 @@ export default {
return response.data; return response.data;
}, },
async import(fileName) { async import(fileName, data) {
let response = await apiReq.post(backupURLs.importBackup(fileName)); let response = await apiReq.post(backupURLs.importBackup(fileName), data);
store.dispatch("requestRecentRecipes"); store.dispatch("requestRecentRecipes");
return response; return response;
}, },

View file

@ -4,13 +4,15 @@
:name="selectedName" :name="selectedName"
:date="selectedDate" :date="selectedDate"
ref="import_dialog" ref="import_dialog"
@import="importBackup"
@delete="deleteBackup"
/> />
<v-row> <v-row>
<v-col <v-col
:sm="6" :sm="6"
:md="6" :md="6"
:lg="3" :lg="4"
:xl="3" :xl="4"
v-for="backup in backups" v-for="backup in backups"
:key="backup.name" :key="backup.name"
> >
@ -24,7 +26,7 @@
<div> <div>
<strong>{{ backup.name }}</strong> <strong>{{ backup.name }}</strong>
</div> </div>
<div>{{ backup.date }}</div> <div>{{ readableTime(backup.date) }}</div>
</v-col> </v-col>
</v-row> </v-row>
</v-card-text> </v-card-text>
@ -36,9 +38,11 @@
<script> <script>
import ImportDialog from "./ImportDialog"; import ImportDialog from "./ImportDialog";
import api from "../../../api";
import utils from "../../../utils";
export default { export default {
props: { props: {
backups: Object, backups: Array,
}, },
components: { components: {
ImportDialog, ImportDialog,
@ -47,20 +51,37 @@ export default {
return { return {
selectedName: "", selectedName: "",
selectedDate: "", selectedDate: "",
// backups: [ loading: false,
// { name: "Backup 1", date: " August 23rd" },
// { name: "Backup 2", date: " August 24rd" },
// { name: "Backup 3", date: " August 25rd" },
// { name: "Backup 4", date: " August 25rd" },
// ],
}; };
}, },
methods: { methods: {
openDialog(backup) { openDialog(backup) {
this.selectedDate = backup.date; this.selectedDate = this.readableTime(backup.date);
this.selectedName = backup.name; this.selectedName = backup.name;
this.$refs.import_dialog.open(); this.$refs.import_dialog.open();
}, },
readableTime(timestamp) {
let date = new Date(timestamp);
return utils.getDateAsText(date);
},
async importBackup(data) {
this.$emit("loading");
let response = await api.backups.import(data.name, data);
let failed = response.data.failed;
let succesful = response.data.successful;
this.$emit("finished", succesful, failed);
},
deleteBackup(data) {
this.$emit("loading");
api.backups.delete(data.name);
this.selectedBackup = null;
this.backupLoading = false;
this.$emit("finished");
},
}, },
}; };
</script> </script>

View file

@ -13,19 +13,22 @@
class="mb-n4 mt-1" class="mb-n4 mt-1"
dense dense
label="Import Recipes" label="Import Recipes"
v-model="importRecipes"
></v-checkbox> ></v-checkbox>
<v-checkbox <v-checkbox
class="my-n4" class="my-n4"
dense dense
label="Import Themes" label="Import Themes"
v-model="importThemes"
></v-checkbox> ></v-checkbox>
<v-checkbox <v-checkbox
class="my-n4" class="my-n4"
dense dense
label="Import Settings" label="Import Settings"
v-model="importSettings"
></v-checkbox> ></v-checkbox>
</v-col> </v-col>
<v-col> <!-- <v-col>
<v-tooltip top> <v-tooltip top>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<span v-on="on" v-bind="attrs"> <span v-on="on" v-bind="attrs">
@ -33,6 +36,7 @@
class="mb-n4 mt-1" class="mb-n4 mt-1"
dense dense
label="Force" label="Force"
v-model="forceImport"
></v-checkbox> ></v-checkbox>
</span> </span>
</template> </template>
@ -45,6 +49,7 @@
class="mb-n4 mt-1" class="mb-n4 mt-1"
dense dense
label="Rebase" label="Rebase"
v-model="rebaseImport"
></v-checkbox> ></v-checkbox>
</span> </span>
</template> </template>
@ -53,26 +58,29 @@
backup</span backup</span
> >
</v-tooltip> </v-tooltip>
</v-col> </v-col> -->
</v-row> </v-row>
</v-card-text> </v-card-text>
<v-divider></v-divider> <v-divider></v-divider>
<v-card-actions> <v-card-actions>
<v-btn color="success" text @click="dialog = false"> Download </v-btn> <v-btn disabled color="success" text @click="raiseEvent('download')">
Download
</v-btn>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn color="error" text @click="dialog = false"> Delete </v-btn> <v-btn color="error" text @click="raiseEvent('delete')">
<v-btn color="success" text @click="dialog = false"> Import </v-btn> Delete
</v-btn>
<v-btn color="success" text @click="raiseEvent('import')">
Import
</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
</div> </div>
</template> </template>
<script>
export default {};
</script>
<script> <script>
export default { export default {
@ -87,12 +95,32 @@ export default {
data() { data() {
return { return {
dialog: false, dialog: false,
importRecipes: true,
forceImport: false,
rebaseImport: false,
importThemes: false,
importSettings: false,
}; };
}, },
methods: { methods: {
open() { open() {
this.dialog = true; this.dialog = true;
}, },
close() {
this.dialog = false;
},
raiseEvent(event) {
let eventData = {
name: this.name,
recipes: this.importRecipes,
force: this.forceImport,
rebase: this.rebaseImport,
themes: this.importThemes,
settings: this.importSettings,
};
this.close();
this.$emit(event, eventData);
},
}, },
}; };
</script> </script>

View file

@ -31,32 +31,11 @@
</v-btn> </v-btn>
</v-col> </v-col>
</v-row> </v-row>
<BackupCard
<v-row dense align="center"> @loading="backupLoading = true"
<v-col dense cols="12" sm="12" md="4"> @finished="processFinished"
<v-form ref="form"> :backups="availableBackups"
<v-combobox />
auto-select-first
label="Select a Backup for Import"
:items="availableBackups"
v-model="selectedBackup"
:rules="[(v) => !!v || 'Backup Selection is Required']"
required
></v-combobox>
</v-form>
</v-col>
<v-col dense cols="12" sm="12" md="3" lg="2">
<v-btn block color="accent" @click="importBackup">
Import Backup
</v-btn>
</v-col>
<v-col dense cols="12" sm="12" md="2" lg="2">
<v-btn block color="error" @click="deleteBackup">
Delete Backup
</v-btn>
</v-col>
</v-row>
<BackupCard :backups="availableBackups" />
<SuccessFailureAlert <SuccessFailureAlert
success-header="Successfully Imported" success-header="Successfully Imported"
:success="successfulImports" :success="successfulImports"
@ -98,18 +77,6 @@ export default {
this.availableBackups = response.imports; this.availableBackups = response.imports;
this.availableTemplates = response.templates; this.availableTemplates = response.templates;
}, },
async importBackup() {
if (this.$refs.form.validate()) {
this.backupLoading = true;
let response = await api.backups.import(this.selectedBackup);
console.log(response.data);
this.failedImports = response.data.failed;
this.successfulImports = response.data.successful;
this.backupLoading = false;
}
},
deleteBackup() { deleteBackup() {
if (this.$refs.form.validate()) { if (this.$refs.form.validate()) {
this.backupLoading = true; this.backupLoading = true;
@ -132,6 +99,12 @@ export default {
this.backupLoading = false; this.backupLoading = false;
} }
}, },
processFinished(successful = null, failed = null) {
this.getAvailableBackups();
this.backupLoading = false;
this.successfulImports = successful;
this.failedImports = failed;
},
}, },
}; };
</script> </script>