mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-07-09 03:04:54 -04:00
feat: cookbook editor on cookbook page (#3378)
* remove unnecessairy string * add edit functionality to cookbook page * restrict to own group
This commit is contained in:
parent
8fb43246b2
commit
6449591143
@ -1,8 +1,33 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<div>
|
||||||
|
<!-- Edit Dialog -->
|
||||||
|
<BaseDialog
|
||||||
|
v-if="editTarget"
|
||||||
|
v-model="dialogStates.edit"
|
||||||
|
:width="650"
|
||||||
|
:icon="$globals.icons.pages"
|
||||||
|
:title="$t('general.edit')"
|
||||||
|
:submit-icon="$globals.icons.save"
|
||||||
|
:submit-text="$tc('general.save')"
|
||||||
|
@submit="editCookbook"
|
||||||
|
>
|
||||||
|
<v-card-text>
|
||||||
|
<CookbookEditor :cookbook="editTarget" :actions="actions" />
|
||||||
|
</v-card-text>
|
||||||
|
</BaseDialog>
|
||||||
|
|
||||||
|
<!-- Page -->
|
||||||
<v-container v-if="book" fluid>
|
<v-container v-if="book" fluid>
|
||||||
<v-app-bar color="transparent" flat class="mt-n1 rounded">
|
<v-app-bar color="transparent" flat class="mt-n1">
|
||||||
<v-icon large left> {{ $globals.icons.pages }} </v-icon>
|
<v-icon large left> {{ $globals.icons.pages }} </v-icon>
|
||||||
<v-toolbar-title class="headline"> {{ book.name }} </v-toolbar-title>
|
<v-toolbar-title class="headline"> {{ book.name }} </v-toolbar-title>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<BaseButton
|
||||||
|
v-if="isOwnGroup"
|
||||||
|
class="mx-1"
|
||||||
|
:edit="true"
|
||||||
|
@click="handleEditCookbook"
|
||||||
|
/>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
<v-card flat>
|
<v-card flat>
|
||||||
<v-card-text class="py-0">
|
<v-card-text class="py-0">
|
||||||
@ -22,17 +47,20 @@
|
|||||||
/>
|
/>
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, useRoute, ref, useContext, useMeta } from "@nuxtjs/composition-api";
|
import { computed, defineComponent, useRoute, ref, useContext, useMeta, reactive, useRouter } from "@nuxtjs/composition-api";
|
||||||
import { useLazyRecipes } from "~/composables/recipes";
|
import { useLazyRecipes } from "~/composables/recipes";
|
||||||
import RecipeCardSection from "@/components/Domain/Recipe/RecipeCardSection.vue";
|
import RecipeCardSection from "@/components/Domain/Recipe/RecipeCardSection.vue";
|
||||||
import { useCookbook } from "~/composables/use-group-cookbooks";
|
import { useCookbook, useCookbooks } from "~/composables/use-group-cookbooks";
|
||||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||||
|
import { RecipeCookBook } from "~/lib/api/types/cookbook";
|
||||||
|
import CookbookEditor from "~/components/Domain/Cookbook/CookbookEditor.vue";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { RecipeCardSection },
|
components: { RecipeCardSection, CookbookEditor },
|
||||||
setup() {
|
setup() {
|
||||||
const { $auth } = useContext();
|
const { $auth } = useContext();
|
||||||
const { isOwnGroup } = useLoggedInState();
|
const { isOwnGroup } = useLoggedInState();
|
||||||
@ -43,10 +71,36 @@
|
|||||||
const { recipes, appendRecipes, assignSorted, removeRecipe, replaceRecipes } = useLazyRecipes(isOwnGroup.value ? null : groupSlug.value);
|
const { recipes, appendRecipes, assignSorted, removeRecipe, replaceRecipes } = useLazyRecipes(isOwnGroup.value ? null : groupSlug.value);
|
||||||
const slug = route.value.params.slug;
|
const slug = route.value.params.slug;
|
||||||
const { getOne } = useCookbook(isOwnGroup.value ? null : groupSlug.value);
|
const { getOne } = useCookbook(isOwnGroup.value ? null : groupSlug.value);
|
||||||
|
const { actions } = useCookbooks();
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
const tab = ref(null);
|
const tab = ref(null);
|
||||||
const book = getOne(slug);
|
const book = getOne(slug);
|
||||||
|
|
||||||
|
const dialogStates = reactive({
|
||||||
|
edit: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const editTarget = ref<RecipeCookBook | null>(null);
|
||||||
|
function handleEditCookbook() {
|
||||||
|
dialogStates.edit = true;
|
||||||
|
editTarget.value = book.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function editCookbook() {
|
||||||
|
if (!editTarget.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const response = await actions.updateOne(editTarget.value);
|
||||||
|
|
||||||
|
// if name changed, redirect to new slug
|
||||||
|
if (response?.slug && book.value?.slug !== response?.slug) {
|
||||||
|
router.push(`/g/${route.value.params.groupSlug}/cookbooks/${response?.slug}`);
|
||||||
|
}
|
||||||
|
dialogStates.edit = false;
|
||||||
|
editTarget.value = null;
|
||||||
|
}
|
||||||
|
|
||||||
useMeta(() => {
|
useMeta(() => {
|
||||||
return {
|
return {
|
||||||
title: book?.value?.name || "Cookbook",
|
title: book?.value?.name || "Cookbook",
|
||||||
@ -62,6 +116,12 @@
|
|||||||
recipes,
|
recipes,
|
||||||
removeRecipe,
|
removeRecipe,
|
||||||
replaceRecipes,
|
replaceRecipes,
|
||||||
|
isOwnGroup,
|
||||||
|
dialogStates,
|
||||||
|
editTarget,
|
||||||
|
handleEditCookbook,
|
||||||
|
editCookbook,
|
||||||
|
actions,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
head: {}, // Must include for useMeta
|
head: {}, // Must include for useMeta
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
$globals.icons.tags"
|
$globals.icons.tags"
|
||||||
return-object
|
return-object
|
||||||
v-bind="inputAttrs"
|
v-bind="inputAttrs"
|
||||||
auto-select-first="true"
|
auto-select-first
|
||||||
:search-input.sync="searchInput"
|
:search-input.sync="searchInput"
|
||||||
@change="resetSearchInput"
|
@change="resetSearchInput"
|
||||||
>
|
>
|
||||||
|
@ -122,6 +122,7 @@ export const useCookbooks = function () {
|
|||||||
this.refreshAll();
|
this.refreshAll();
|
||||||
}
|
}
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
|
return data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async updateOrder() {
|
async updateOrder() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user