From 63ac21bce27f8169dc7158861f898b587cd4251b Mon Sep 17 00:00:00 2001 From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:31:05 +0100 Subject: [PATCH] feat: Add Categories, Tags and Tools to Manage Data Page (#2737) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add categories * add tags * 🧹 * 🧹 l18n * add tools * remove broken on Hand for tools * fix for tools onHand not updating from frontend * tools: re-add "on Hand" * remove itemized icon from create button * change combine icon * add divider to BaseOverflowButton * divide and conquer --------- Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com> --- .../Domain/Recipe/RecipeOrganizerDialog.vue | 4 +- .../Domain/Recipe/RecipeOrganizerPage.vue | 5 +- .../components/global/BaseOverflowButton.vue | 38 ++-- frontend/lang/messages/en-US.json | 17 +- frontend/pages/group/data.vue | 20 ++ frontend/pages/group/data/categories.vue | 174 ++++++++++++++++ frontend/pages/group/data/foods.vue | 2 +- frontend/pages/group/data/labels.vue | 5 +- frontend/pages/group/data/tags.vue | 175 ++++++++++++++++ frontend/pages/group/data/tools.vue | 187 ++++++++++++++++++ frontend/pages/group/data/units.vue | 2 +- 11 files changed, 605 insertions(+), 24 deletions(-) create mode 100644 frontend/pages/group/data/categories.vue create mode 100644 frontend/pages/group/data/tags.vue create mode 100644 frontend/pages/group/data/tools.vue 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 d722f77e203c..642f5e48248c 100644 --- a/frontend/pages/group/data/foods.vue +++ b/frontend/pages/group/data/foods.vue @@ -168,7 +168,7 @@ diff --git a/frontend/pages/group/data/labels.vue b/frontend/pages/group/data/labels.vue index c748d448be09..cc10fb1f6fe1 100644 --- a/frontend/pages/group/data/labels.vue +++ b/frontend/pages/group/data/labels.vue @@ -90,10 +90,7 @@ @edit-one="editEventHandler" >