mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-07-24 15:49:42 +02:00
Feature/import keywords as tags (#1170)
* feat: import original keywords as tags * remove cached env * Update frontend api types * fix: Issues with previous tag scraping implementation * Update category handling in backend * Update backend tests to include group_id * Correct type check * Update create-url interface * Improve tag cleaner list support * remove builtin name shadowing * update type annotations * test include tags scraper * implement scaper context for optional data * readd cache venv * use continue instead of break * remove test callback Co-authored-by: Miroito <alban.vachette@gmail.com>
This commit is contained in:
parent
75c535fb2e
commit
c696dee320
27 changed files with 281 additions and 61 deletions
|
@ -18,7 +18,7 @@
|
|||
<v-tabs-items v-model="tab" class="mt-2">
|
||||
<!-- Create From URL -->
|
||||
<v-tab-item value="url" eager>
|
||||
<v-form ref="domUrlForm" @submit.prevent="createByUrl(recipeUrl)">
|
||||
<v-form ref="domUrlForm" @submit.prevent="createByUrl(recipeUrl, importKeywordsAsTags)">
|
||||
<v-card flat>
|
||||
<v-card-title class="headline"> Scrape Recipe </v-card-title>
|
||||
<v-card-text>
|
||||
|
@ -38,6 +38,8 @@
|
|||
:hint="$t('new-recipe.url-form-hint')"
|
||||
persistent-hint
|
||||
></v-text-field>
|
||||
<v-checkbox v-model="importKeywordsAsTags" label="Import original keywords as tags">
|
||||
</v-checkbox>
|
||||
</v-card-text>
|
||||
<v-card-actions class="justify-center">
|
||||
<div style="width: 250px">
|
||||
|
@ -409,20 +411,36 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
get() {
|
||||
return route.value.query.recipe_import_url as string;
|
||||
return route.value.query.recipe_import_url as string | null;
|
||||
},
|
||||
});
|
||||
|
||||
const importKeywordsAsTags = computed({
|
||||
get() {
|
||||
return route.value.query.import_keywords_as_tags === "1";
|
||||
},
|
||||
set(keywordsAsTags: boolean) {
|
||||
let import_keywords_as_tags = "0"
|
||||
if (keywordsAsTags) {
|
||||
import_keywords_as_tags = "1"
|
||||
}
|
||||
router.replace({query: {...route.value.query, import_keywords_as_tags}})
|
||||
}
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
if (!recipeUrl.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (recipeUrl.value.includes("https")) {
|
||||
createByUrl(recipeUrl.value);
|
||||
createByUrl(recipeUrl.value, importKeywordsAsTags.value);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// ===================================================
|
||||
// Recipe Debug URL Scraper
|
||||
|
||||
|
@ -447,16 +465,18 @@ export default defineComponent({
|
|||
// Recipe URL Import
|
||||
const domUrlForm = ref<VForm | null>(null);
|
||||
|
||||
async function createByUrl(url: string | null) {
|
||||
async function createByUrl(url: string, importKeywordsAsTags: boolean) {
|
||||
|
||||
if (url === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!domUrlForm.value?.validate() || url === "") {
|
||||
console.log("Invalid URL", url);
|
||||
return;
|
||||
}
|
||||
state.loading = true;
|
||||
const { response } = await api.recipes.createOneByUrl(url);
|
||||
const { response } = await api.recipes.createOneByUrl(url, importKeywordsAsTags);
|
||||
handleResponse(response);
|
||||
}
|
||||
|
||||
|
@ -523,6 +543,7 @@ export default defineComponent({
|
|||
allCategories,
|
||||
tab,
|
||||
recipeUrl,
|
||||
importKeywordsAsTags,
|
||||
bulkCreate,
|
||||
bulkUrls,
|
||||
lockBulkImport,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue