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 }}
+
+
+
-
+
+
{{ item.icon }}
{{ item.text }}
-
+
+
+
-
-
- {{ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("general.confirm-delete-generic") }}
+
+
+
+
+
+
+
+ {{ $t("general.create") }}
+
+
+
+
+
+
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 @@
- {{ $globals.icons.foods }}
+ {{ $globals.icons.externalLink }}
{{ $t('data-pages.combine') }}
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"
>
-
- {{ $globals.icons.tags }}
- {{ $t("general.create") }}
-
+ {{ $t("general.create") }}
diff --git a/frontend/pages/group/data/tags.vue b/frontend/pages/group/data/tags.vue
new file mode 100644
index 000000000000..b188d2bef314
--- /dev/null
+++ b/frontend/pages/group/data/tags.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("general.confirm-delete-generic") }}
+
+
+
+
+
+
+
+ {{ $t("general.create") }}
+
+
+
+
+
+
diff --git a/frontend/pages/group/data/tools.vue b/frontend/pages/group/data/tools.vue
new file mode 100644
index 000000000000..c8ee33df1319
--- /dev/null
+++ b/frontend/pages/group/data/tools.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("general.confirm-delete-generic") }}
+
+
+
+
+
+
+
+ {{ $t("general.create") }}
+
+
+
+ {{ item.onHand ? $globals.icons.check : $globals.icons.close }}
+
+
+
+
+
+
+
diff --git a/frontend/pages/group/data/units.vue b/frontend/pages/group/data/units.vue
index 6e99d790ab0a..9f3f10cbc56d 100644
--- a/frontend/pages/group/data/units.vue
+++ b/frontend/pages/group/data/units.vue
@@ -183,7 +183,7 @@
- {{ $globals.icons.units }}
+ {{ $globals.icons.externalLink }}
{{ $t('data-pages.combine') }}