From 1fefd406232720a28a0679a7b624649d06ddeaa2 Mon Sep 17 00:00:00 2001
From: Hayden <64056131+hay-kot@users.noreply.github.com>
Date: Sun, 8 May 2022 17:43:03 -0800
Subject: [PATCH] feat: show-recipe-scraper-version (#1210)
* add recipe scraper version
* add scraper version and details copy dialog
* implement axios downloader - fix #1171
---
.../Domain/Recipe/RecipeContextMenu.vue | 5 +-
.../composables/api/use-axios-download.ts | 22 ++++
frontend/pages/admin/site-settings.vue | 117 ++++++++++++++++--
frontend/types/api-types/admin.ts | 1 +
mealie/routes/admin/admin_about.py | 2 +
mealie/schema/admin/about.py | 1 +
6 files changed, 134 insertions(+), 14 deletions(-)
create mode 100644 frontend/composables/api/use-axios-download.ts
diff --git a/frontend/components/Domain/Recipe/RecipeContextMenu.vue b/frontend/components/Domain/Recipe/RecipeContextMenu.vue
index 4509479aa719..21df0ea245f7 100644
--- a/frontend/components/Domain/Recipe/RecipeContextMenu.vue
+++ b/frontend/components/Domain/Recipe/RecipeContextMenu.vue
@@ -97,6 +97,7 @@ import { useUserApi } from "~/composables/api";
import { alert } from "~/composables/use-toast";
import { MealType, planTypeOptions } from "~/composables/use-group-mealplan";
import { ShoppingListSummary } from "~/types/api-types/group";
+import { useAxiosDownloader } from "~/composables/api/use-axios-download";
export interface ContextMenuIncludes {
delete: boolean;
@@ -278,11 +279,13 @@ export default defineComponent({
context.emit("delete", props.slug);
}
+ const download = useAxiosDownloader();
+
async function handleDownloadEvent() {
const { data } = await api.recipes.getZipToken(props.slug);
if (data) {
- window.open(api.recipes.getZipRedirectUrl(props.slug, data.token));
+ download(api.recipes.getZipRedirectUrl(props.slug, data.token), `${props.slug}.zip`);
}
}
diff --git a/frontend/composables/api/use-axios-download.ts b/frontend/composables/api/use-axios-download.ts
new file mode 100644
index 000000000000..1dcb0ae01478
--- /dev/null
+++ b/frontend/composables/api/use-axios-download.ts
@@ -0,0 +1,22 @@
+import { useContext } from "@nuxtjs/composition-api";
+
+export function useAxiosDownloader() {
+ const { $axios } = useContext();
+
+ function download(url: string, filename: string) {
+ $axios({
+ url,
+ method: "GET",
+ responseType: "blob",
+ }).then((response) => {
+ const url = window.URL.createObjectURL(new Blob([response.data]));
+ const link = document.createElement("a");
+ link.href = url;
+ link.setAttribute("download", filename);
+ document.body.appendChild(link);
+ link.click();
+ });
+ }
+
+ return download;
+}
diff --git a/frontend/pages/admin/site-settings.vue b/frontend/pages/admin/site-settings.vue
index 09be1651a875..0b369200f160 100644
--- a/frontend/pages/admin/site-settings.vue
+++ b/frontend/pages/admin/site-settings.vue
@@ -7,6 +7,36 @@
{{ $t("settings.site-settings") }}
+