1
0
Fork 0
mirror of https://github.com/mealie-recipes/mealie.git synced 2025-08-02 20:15:24 +02:00

feat: add user recipe export functionality (#845)

* feat(frontend):  add user recipe export functionality

* remove depreciated folders

* change/remove depreciated folders

* add testing variable in config

* add GUID support for group_id

* improve testing feedback on 422 errors

* remove/cleanup files/folders

* initial user export support

* delete unused css

* update backup page UI

* remove depreciated settings

* feat:  export download links

* fix #813

* remove top level statements

* show footer

* add export purger to scheduler

* update purge glob

* fix meal-planner lockout

* feat:  add bulk delete/purge exports

* style(frontend): 💄 update UI for site settings

* feat:  add version checker

* update documentation

Co-authored-by: hay-kot <hay-kot@pm.me>
This commit is contained in:
Hayden 2021-12-04 14:18:46 -09:00 committed by GitHub
parent 2ce195a0d4
commit c32d7d7486
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
84 changed files with 1329 additions and 667 deletions

View file

@ -38,18 +38,6 @@ export default {
value: true,
text: this.$t("general.recipes"),
},
settings: {
value: true,
text: this.$t("general.settings"),
},
pages: {
value: true,
text: this.$t("settings.pages"),
},
themes: {
value: true,
text: this.$t("general.themes"),
},
users: {
value: true,
text: this.$t("user.users"),
@ -58,10 +46,6 @@ export default {
value: true,
text: this.$t("group.groups"),
},
notifications: {
value: true,
text: this.$t("events.notification"),
},
},
forceImport: false,
};
@ -73,12 +57,12 @@ export default {
emitValue() {
this.$emit(UPDATE_EVENT, {
recipes: this.options.recipes.value,
settings: this.options.settings.value,
themes: this.options.themes.value,
pages: this.options.pages.value,
settings: false,
themes: false,
pages: false,
users: this.options.users.value,
groups: this.options.groups.value,
notifications: this.options.notifications.value,
notifications: false,
forceImport: this.forceImport,
});
},

View file

@ -0,0 +1,60 @@
<template>
<v-data-table
item-key="id"
:headers="headers"
:items="exports"
:items-per-page="15"
class="elevation-0"
@click:row="downloadData"
>
<template #item.expires="{ item }">
{{ getTimeToExpire(item.expires) }}
</template>
<template #item.actions="{ item }">
<BaseButton download small :download-url="`/api/recipes/bulk-actions/export/download?path=${item.path}`">
</BaseButton>
</template>
</v-data-table>
</template>
<script lang="ts">
import { defineComponent } from "@nuxtjs/composition-api";
import { parseISO, formatDistanceToNow } from "date-fns";
import { GroupDataExport } from "~/api/class-interfaces/recipe-bulk-actions";
export default defineComponent({
props: {
exports: {
type: Array as () => GroupDataExport[],
required: true,
},
},
setup() {
const headers = [
{ text: "Export", value: "name" },
{ text: "File Name", value: "filename" },
{ text: "Size", value: "size" },
{ text: "Link Expires", value: "expires" },
{ text: "", value: "actions" },
];
function getTimeToExpire(timeString: string) {
const expiresAt = parseISO(timeString);
return formatDistanceToNow(expiresAt, {
addSuffix: false,
});
}
function downloadData(_: any) {
console.log("Downloading data...");
}
return {
downloadData,
headers,
getTimeToExpire,
};
},
});
</script>

View file

@ -7,6 +7,7 @@
:items="recipes"
:items-per-page="15"
class="elevation-0"
:loading="loading"
@input="setValue(selected)"
>
<template #body.preappend>
@ -22,6 +23,9 @@
<template #item.recipeCategory="{ item }">
<RecipeChip small :items="item.recipeCategory" />
</template>
<template #item.tools="{ item }">
<RecipeChip small :items="item.tools" />
</template>
<template #item.userId="{ item }">
<v-list-item class="justify-start">
<v-list-item-avatar>
@ -49,6 +53,7 @@ interface ShowHeaders {
owner: Boolean;
tags: Boolean;
categories: Boolean;
tools: Boolean;
recipeYield: Boolean;
dateAdded: Boolean;
}
@ -61,6 +66,11 @@ export default defineComponent({
required: false,
default: () => [],
},
loading: {
type: Boolean,
required: false,
default: false,
},
recipes: {
type: Array as () => Recipe[],
default: () => [],
@ -103,12 +113,16 @@ export default defineComponent({
if (show.tags) {
hdrs.push({ text: "Tags", value: "tags" });
}
if (show.tools) {
hdrs.push({ text: "Tools", value: "tools" });
}
if (show.recipeYield) {
hdrs.push({ text: "Yield", value: "recipeYield" });
}
if (show.dateAdded) {
hdrs.push({ text: "Date Added", value: "dateAdded" });
}
return hdrs;
});