diff --git a/vue/src/locales/en.json b/vue/src/locales/en.json
index f2e9252d9..64b6a0262 100644
--- a/vue/src/locales/en.json
+++ b/vue/src/locales/en.json
@@ -480,6 +480,7 @@
"Imported": "Imported",
"Quick actions": "Quick actions",
"Ratings": "Ratings",
+ "Actions": "Actions",
"Internal": "Internal",
"Units": "Units",
"Manage_Emails": "Manage Emails",
diff --git a/vue3/src/apps/tandoor/Tandoor.vue b/vue3/src/apps/tandoor/Tandoor.vue
index 5a99c57b4..0a6fd757f 100644
--- a/vue3/src/apps/tandoor/Tandoor.vue
+++ b/vue3/src/apps/tandoor/Tandoor.vue
@@ -176,13 +176,10 @@ import {useDisplay} from "vuetify"
import VSnackbarQueued from "@/components/display/VSnackbarQueued.vue";
import MessageListDialog from "@/components/dialogs/MessageListDialog.vue";
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
-import {TAutomation, TCookLog, TFood, TKeyword, TPropertyType, TSupermarket, TSupermarketCategory, TUnit, TUnitConversion, TUserFile, TViewLog} from "@/types/Models";
import NavigationDrawerContextMenu from "@/components/display/NavigationDrawerContextMenu.vue";
import {useDjangoUrls} from "@/composables/useDjangoUrls";
import {onMounted, ref} from "vue";
-import {ErrorMessageType, useMessageStore} from "@/stores/MessageStore";
-import {ApiApi, Space} from "@/openapi";
-import {isSpaceAboveLimit, isSpaceAtLimit} from "@/utils/logic_utils";
+import {isSpaceAboveLimit} from "@/utils/logic_utils";
const {lgAndUp} = useDisplay()
const {getDjangoUrl} = useDjangoUrls()
diff --git a/vue3/src/apps/tandoor/main.ts b/vue3/src/apps/tandoor/main.ts
index dd57d2aeb..07c2780c0 100644
--- a/vue3/src/apps/tandoor/main.ts
+++ b/vue3/src/apps/tandoor/main.ts
@@ -29,6 +29,7 @@ import ModelEditPage from "@/pages/ModelEditPage.vue";
import RecipeImportPage from "@/pages/RecipeImportPage.vue";
import IngredientEditorPage from "@/pages/IngredientEditorPage.vue";
import BooksPage from "@/pages/BooksPage.vue";
+import BookViewPage from "@/pages/BookViewPage.vue";
const routes = [
{path: '/', component: StartPage, name: 'view_home'},
@@ -51,6 +52,7 @@ const routes = [
{path: '/shopping', component: ShoppingListPage, name: 'view_shopping'},
{path: '/mealplan', component: MealPlanPage, name: 'view_mealplan'},
{path: '/books', component: BooksPage, name: 'BooksPage'},
+ {path: '/book/:bookId', component: BookViewPage, name: 'BookViewPage', props: true},
{path: '/recipe/import', component: RecipeImportPage, name: 'RecipeImportPage'},
{path: '/recipe/:id', component: RecipeViewPage, name: 'view_recipe', props: true},
diff --git a/vue3/src/locales/de.json b/vue3/src/locales/de.json
index 518e027fc..354666c32 100644
--- a/vue3/src/locales/de.json
+++ b/vue3/src/locales/de.json
@@ -20,6 +20,7 @@
"Added_on": "Hinzugefügt am",
"Admin": "Admin",
"Advanced": "Erweitert",
+ "Advanced Search Settings": "Erweiterte Sucheinstellungen",
"Alignment": "Ausrichtung",
"Amount": "Menge",
"App": "App",
diff --git a/vue3/src/pages/BookViewPage.vue b/vue3/src/pages/BookViewPage.vue
new file mode 100644
index 000000000..8fc76ec51
--- /dev/null
+++ b/vue3/src/pages/BookViewPage.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+ {{ $t('Back') }}
+
+
+
+
+
+
+
+ {{ book.name }}
+ {{ book.description }}
+
+
+
+
+
+
+
+ {{i.raw.recipeContent.name}}
+ {{i.raw.recipeContent.desciption}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vue3/src/pages/BooksPage.vue b/vue3/src/pages/BooksPage.vue
index 1d5a0d044..58d447cde 100644
--- a/vue3/src/pages/BooksPage.vue
+++ b/vue3/src/pages/BooksPage.vue
@@ -1,5 +1,5 @@
-
+
@@ -29,7 +29,7 @@
{ books.splice(books.findIndex((value: RecipeBook) => value.id == arg.id!),1)}">
-
+
{{ $t('View') }}
@@ -43,21 +43,39 @@
import {onMounted, ref} from "vue";
-import {ApiApi, RecipeBook} from "@/openapi";
+import {ApiApi, RecipeBook, RecipeBookEntry} from "@/openapi";
import {ErrorMessageType, useMessageStore} from "@/stores/MessageStore";
import ModelEditDialog from "@/components/dialogs/ModelEditDialog.vue";
+const loading = ref(false)
+
+const viewingBook = ref(null)
+const viewingBookEntries = ref([] as RecipeBookEntry[])
+
const books = ref([] as RecipeBook[])
onMounted(() => {
- const api = new ApiApi()
+ loadBooks()
+})
+function loadBooks() {
+ const api = new ApiApi()
+ loading.value = true
api.apiRecipeBookList().then(r => {
books.value = r.results
}).catch(err => {
useMessageStore().addError(ErrorMessageType.FETCH_ERROR)
+ }).finally(() => {
+ loading.value = false
})
-})
+}
+
+function loadBookEntries(recipeBook : RecipeBook){
+ const api = new ApiApi()
+ loading.value = true
+ api.apiRecipeBookEntryList({})
+}
+