diff --git a/frontend/components/Domain/Recipe/RecipeOrganizerDialog.vue b/frontend/components/Domain/Recipe/RecipeOrganizerDialog.vue index e4c90090b..378cda2b0 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 2f832470b..9d8c035fd 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 d8f1820ba..6c9aef686 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 e53f977c3..c42c09c00 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 70349df32..1e40c55a7 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 000000000..856178ba8 --- /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 be592f870..ebdf313b9 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 bbf65db00..cca9ea98c 100644 --- a/frontend/pages/group/data/labels.vue +++ b/frontend/pages/group/data/labels.vue @@ -93,10 +93,7 @@ @edit-one="editEventHandler" >