fixed import page share intent

This commit is contained in:
vabene1111
2025-02-09 09:32:16 +01:00
parent 9b5878faae
commit 1b09234e91

View File

@@ -1,9 +1,9 @@
<template> <template>
<v-container> <v-container>
<v-row > <v-row>
<v-col> <v-col>
<v-stepper v-model="stepper" > <v-stepper v-model="stepper">
<template v-slot:default="{ prev, next }"> <template v-slot:default="{ prev, next }">
<v-stepper-header> <v-stepper-header>
<v-stepper-item :title="$t('Import')" value="1"></v-stepper-item> <v-stepper-item :title="$t('Import')" value="1"></v-stepper-item>
@@ -18,7 +18,7 @@
</v-stepper-header> </v-stepper-header>
<v-stepper-window> <v-stepper-window>
<v-stepper-window-item value="1" > <v-stepper-window-item value="1">
<v-card :loading="loading"> <v-card :loading="loading">
<v-card-text> <v-card-text>
<v-text-field :label="$t('Website') + ' (https://...)'" v-model="importUrl"> <v-text-field :label="$t('Website') + ' (https://...)'" v-model="importUrl">
@@ -39,7 +39,9 @@
<v-alert-title>{{ $t('Duplicate') }}</v-alert-title> <v-alert-title>{{ $t('Duplicate') }}</v-alert-title>
{{ $t('DuplicateFoundInfo') }} {{ $t('DuplicateFoundInfo') }}
<v-list> <v-list>
<v-list-item :to="{name: 'view_recipe', params: {id: r.id}}" v-for="r in importResponse.duplicates" :key="r.id"> {{ r.name }} (#{{r.id}})</v-list-item> <v-list-item :to="{name: 'view_recipe', params: {id: r.id}}" v-for="r in importResponse.duplicates" :key="r.id"> {{ r.name }}
(#{{ r.id }})
</v-list-item>
</v-list> </v-list>
</v-alert> </v-alert>
</v-card-text> </v-card-text>
@@ -187,16 +189,18 @@
</v-stepper-window-item> </v-stepper-window-item>
</v-stepper-window> </v-stepper-window>
<v-stepper-actions > <v-stepper-actions>
<template #prev> <template #prev>
<v-btn @click="stepper = (parseInt(stepper) - 1).toString()">Zurück</v-btn> <v-btn @click="stepper = (parseInt(stepper) - 1).toString()">Zurück</v-btn>
</template> </template>
<template #next> <template #next>
<v-btn @click="createRecipeFromImport()" color="success" :disabled="Object.keys(importResponse).length == 0" v-if="stepper == '1'">{{$t('Import')}}</v-btn> <v-btn @click="createRecipeFromImport()" color="success" :disabled="Object.keys(importResponse).length == 0" v-if="stepper == '1'">
<v-btn @click="stepper = (parseInt(stepper) + 1).toString()" :disabled="Object.keys(importResponse).length == 0" v-if="stepper != '5'"> {{ $t('Import') }}
{{stepper == '1' ? $t('Edit') : $t('Next')}}
</v-btn> </v-btn>
<v-btn @click="createRecipeFromImport()" color="success" :disabled="false" v-if="stepper == '5'">{{$t('Import')}}</v-btn> <v-btn @click="stepper = (parseInt(stepper) + 1).toString()" :disabled="Object.keys(importResponse).length == 0" v-if="stepper != '5'">
{{ stepper == '1' ? $t('Edit') : $t('Next') }}
</v-btn>
<v-btn @click="createRecipeFromImport()" color="success" :disabled="false" v-if="stepper == '5'">{{ $t('Import') }}</v-btn>
</template> </template>
</v-stepper-actions> </v-stepper-actions>
</template> </template>
@@ -211,7 +215,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import {nextTick, ref} from "vue"; import {nextTick, onMounted, ref} from "vue";
import {ApiApi, Keyword, RecipeFromSourceResponse, type SourceImportIngredient, SourceImportKeyword, SourceImportStep} from "@/openapi"; import {ApiApi, Keyword, RecipeFromSourceResponse, type SourceImportIngredient, SourceImportKeyword, SourceImportStep} from "@/openapi";
import {ErrorMessageType, MessageType, useMessageStore} from "@/stores/MessageStore"; import {ErrorMessageType, MessageType, useMessageStore} from "@/stores/MessageStore";
import {useRouter} from "vue-router"; import {useRouter} from "vue-router";
@@ -223,7 +227,9 @@ import {VNumberInput} from 'vuetify/labs/VNumberInput'
import {useFileApi} from "@/composables/useFileApi"; import {useFileApi} from "@/composables/useFileApi";
import ModelSelect from "@/components/inputs/ModelSelect.vue"; import ModelSelect from "@/components/inputs/ModelSelect.vue";
import {useDisplay} from "vuetify"; import {useDisplay} from "vuetify";
import {useUrlSearchParams} from "@vueuse/core";
const params = useUrlSearchParams('history', {})
const {mobile} = useDisplay() const {mobile} = useDisplay()
const router = useRouter() const router = useRouter()
const {updateRecipeImage, convertImageToRecipe, fileApiLoading} = useFileApi() const {updateRecipeImage, convertImageToRecipe, fileApiLoading} = useFileApi()
@@ -234,13 +240,25 @@ const loading = ref(false)
const importUrl = ref("") const importUrl = ref("")
const image = ref<null | File>(null)
const image = ref<null|File>(null)
const importResponse = ref({} as RecipeFromSourceResponse) const importResponse = ref({} as RecipeFromSourceResponse)
const keywordSelect = ref<null | SourceImportKeyword>(null) const keywordSelect = ref<null | SourceImportKeyword>(null)
const editingIngredient = ref({} as SourceImportIngredient) const editingIngredient = ref({} as SourceImportIngredient)
onMounted(() => {
// handle manifest share intend passing url to import page
if (params.url && typeof params.url === "string") {
importUrl.value = params.url
loadRecipeFromUrl()
}
if (params.text && typeof params.text === "string") {
importUrl.value = params.text
loadRecipeFromUrl()
}
})
/** /**
* call server to load recipe from a given URl * call server to load recipe from a given URl
*/ */
@@ -256,8 +274,8 @@ function loadRecipeFromUrl() {
}) })
} }
function uploadAndConvertImage(){ function uploadAndConvertImage() {
if(image.value != null){ if (image.value != null) {
convertImageToRecipe(image.value).then(r => { convertImageToRecipe(image.value).then(r => {
importResponse.value = r importResponse.value = r
}) })