diff --git a/frontend/components/Domain/Recipe/RecipeOrganizerDialog.vue b/frontend/components/Domain/Recipe/RecipeOrganizerDialog.vue index e4c90090b31a..378cda2b061b 100644 --- a/frontend/components/Domain/Recipe/RecipeOrganizerDialog.vue +++ b/frontend/components/Domain/Recipe/RecipeOrganizerDialog.vue @@ -131,8 +131,8 @@ export default defineComponent({ async function select() { if (store) { - // @ts-ignore - only property really required is the name - await store.actions.createOne({ name: state.name }); + // @ts-expect-error the same state is used for different organizer types, which have different requirements + await store.actions.createOne({ ...state }); } const newItem = store.items.value.find((item) => item.name === state.name); diff --git a/frontend/components/Domain/Recipe/RecipeOrganizerPage.vue b/frontend/components/Domain/Recipe/RecipeOrganizerPage.vue index 2f832470b312..9d8c035fd9d9 100644 --- a/frontend/components/Domain/Recipe/RecipeOrganizerPage.vue +++ b/frontend/components/Domain/Recipe/RecipeOrganizerPage.vue @@ -16,6 +16,7 @@ + @@ -75,7 +76,7 @@ import Fuse from "fuse.js"; import { defineComponent, computed, ref, reactive, useContext, useRoute } from "@nuxtjs/composition-api"; import { useContextPresets } from "~/composables/use-context-presents"; import RecipeOrganizerDialog from "~/components/Domain/Recipe/RecipeOrganizerDialog.vue"; -import { RecipeOrganizer } from "~/lib/api/types/non-generated"; +import { Organizer, RecipeOrganizer } from "~/lib/api/types/non-generated"; import { useRouteQuery } from "~/composables/use-router"; import { deepCopy } from "~/composables/use-utils"; @@ -83,6 +84,7 @@ interface GenericItem { id: string; name: string; slug: string; + onHand: boolean; } export default defineComponent({ @@ -217,6 +219,7 @@ export default defineComponent({ updateTarget, deleteOne, deleteTarget, + Organizer, presets, itemsSorted, searchString, diff --git a/frontend/components/global/BaseOverflowButton.vue b/frontend/components/global/BaseOverflowButton.vue index d8f1820ba024..6c9aef686a02 100644 --- a/frontend/components/global/BaseOverflowButton.vue +++ b/frontend/components/global/BaseOverflowButton.vue @@ -14,33 +14,42 @@ - - - {{ item.icon }} - - {{ item.text }} - + - + - - - {{ item.icon }} - - {{ item.text }} - + @@ -64,6 +73,7 @@ export interface MenuItem { to?: string; value?: string; event?: string; + divider?: boolean; } export default defineComponent({ diff --git a/frontend/lang/messages/en-US.json b/frontend/lang/messages/en-US.json index e53f977c35a8..c42c09c00cf9 100644 --- a/frontend/lang/messages/en-US.json +++ b/frontend/lang/messages/en-US.json @@ -953,7 +953,22 @@ "select-data": "Select Data", "select-language": "Select Language", "columns": "Columns", - "combine": "Combine" + "combine": "Combine", + "categories": { + "edit-category": "Edit Category", + "new-category": "New Category", + "category-data": "Category Data" + }, + "tags": { + "new-tag": "New Tag", + "edit-tag": "Edit Tag", + "tag-data": "Tag Data" + }, + "tools": { + "new-tool": "New Tool", + "edit-tool": "Edit Tool", + "tool-data": "Tool Data" + } }, "user-registration": { "user-registration": "User Registration", diff --git a/frontend/pages/group/data.vue b/frontend/pages/group/data.vue index 70349df329ef..1e40c55a7dc4 100644 --- a/frontend/pages/group/data.vue +++ b/frontend/pages/group/data.vue @@ -44,6 +44,9 @@ export default defineComponent({ foods: i18n.tc("general.foods"), units: i18n.tc("general.units"), labels: i18n.tc("data-pages.labels.labels"), + categories: i18n.tc("category.categories"), + tags: i18n.tc("tag.tags"), + tools: i18n.tc("tool.tools"), }; const route = useRoute(); @@ -53,6 +56,7 @@ export default defineComponent({ text: i18n.t("general.recipes"), value: "new", to: "/group/data/recipes", + divider: true, }, { text: i18n.t("general.foods"), @@ -68,7 +72,23 @@ export default defineComponent({ text: i18n.t("data-pages.labels.labels"), value: "new", to: "/group/data/labels", + divider: true, }, + { + text: i18n.t("category.categories"), + value: "new", + to: "/group/data/categories", + }, + { + text: i18n.t("tag.tags"), + value: "new", + to: "/group/data/tags", + }, + { + text: i18n.t("tool.tools"), + value: "new", + to: "/group/data/tools", + } ]); const buttonText = computed(() => { diff --git a/frontend/pages/group/data/categories.vue b/frontend/pages/group/data/categories.vue new file mode 100644 index 000000000000..856178ba8ed3 --- /dev/null +++ b/frontend/pages/group/data/categories.vue @@ -0,0 +1,174 @@ + + + diff --git a/frontend/pages/group/data/foods.vue b/frontend/pages/group/data/foods.vue index be592f870f7f..ebdf313b9365 100644 --- a/frontend/pages/group/data/foods.vue +++ b/frontend/pages/group/data/foods.vue @@ -171,7 +171,7 @@ diff --git a/frontend/pages/group/data/labels.vue b/frontend/pages/group/data/labels.vue index bbf65db00784..cca9ea98c08d 100644 --- a/frontend/pages/group/data/labels.vue +++ b/frontend/pages/group/data/labels.vue @@ -93,10 +93,7 @@ @edit-one="editEventHandler" >