diff --git a/frontend/src/api/category.js b/frontend/src/api/category.js
index 0f8ecd3fd..f60739c8d 100644
--- a/frontend/src/api/category.js
+++ b/frontend/src/api/category.js
@@ -44,6 +44,11 @@ export const tagAPI = {
let response = await apiReq.get(tagURLs.getAll);
return response.data;
},
+ async create(name) {
+ let response = await apiReq.post(tagURLs.getAll, { name: name });
+ store.dispatch("requestTags");
+ return response.data;
+ },
async getRecipesInTag(tag) {
let response = await apiReq.get(tagURLs.getTag(tag));
return response.data;
diff --git a/frontend/src/components/Admin/General/HomePageSettings.vue b/frontend/src/components/Admin/General/HomePageSettings.vue
index b31c6b609..63b13909d 100644
--- a/frontend/src/components/Admin/General/HomePageSettings.vue
+++ b/frontend/src/components/Admin/General/HomePageSettings.vue
@@ -133,7 +133,7 @@
import { api } from "@/api";
import LanguageMenu from "@/components/UI/LanguageMenu";
import draggable from "vuedraggable";
-import NewCategoryDialog from "./NewCategoryDialog.vue";
+import NewCategoryDialog from "@/components/UI/Dialogs/NewCategoryDialog.vue";
export default {
components: {
diff --git a/frontend/src/components/Admin/General/NewCategoryDialog.vue b/frontend/src/components/Admin/General/NewCategoryDialog.vue
deleted file mode 100644
index e9ad28f22..000000000
--- a/frontend/src/components/Admin/General/NewCategoryDialog.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- mdi-plus
-
-
-
-
-
- mdi-tag
-
-
-
- Create a Category
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t("general.cancel") }}
-
-
- {{ $t("general.create") }}
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/FormHelpers/CategoryTagSelector.vue b/frontend/src/components/FormHelpers/CategoryTagSelector.vue
index 39785ec44..3bcdb2944 100644
--- a/frontend/src/components/FormHelpers/CategoryTagSelector.vue
+++ b/frontend/src/components/FormHelpers/CategoryTagSelector.vue
@@ -1,7 +1,8 @@
-
- {{ data.item.name }}
+ {{ data.item.name || data.item }}
-
+
+
+
+
diff --git a/frontend/src/components/Recipe/RecipeEditor/index.vue b/frontend/src/components/Recipe/RecipeEditor/index.vue
index 6917ad2c1..5e6cf46b1 100644
--- a/frontend/src/components/Recipe/RecipeEditor/index.vue
+++ b/frontend/src/components/Recipe/RecipeEditor/index.vue
@@ -114,60 +114,21 @@
{{ $t("recipe.categories") }}
-
-
-
- {{ data.item }}
-
-
-
+ :show-add="true"
+ :show-label="false"
+ />
{{ $t("recipe.tags") }}
-
-
-
- {{ data.item }}
-
-
-
+ :show-add="true"
+ :tag-selector="true"
+ :show-label="false"
+ />
{{ $t("recipe.notes") }}
None:
+ def __init__(self, name, session=None) -> None:
self.name = name.strip()
self.slug = slugify(self.name)
diff --git a/mealie/routes/recipe/tag_routes.py b/mealie/routes/recipe/tag_routes.py
index 11572316f..65dfbdc19 100644
--- a/mealie/routes/recipe/tag_routes.py
+++ b/mealie/routes/recipe/tag_routes.py
@@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
-from mealie.schema.category import RecipeTagResponse
+from mealie.schema.category import RecipeTagResponse, TagIn
from mealie.schema.snackbar import SnackResponse
from sqlalchemy.orm.session import Session
@@ -19,6 +19,14 @@ async def get_all_recipe_tags(session: Session = Depends(generate_session)):
""" Returns a list of available tags in the database """
return db.tags.get_all_limit_columns(session, ["slug", "name"])
+@router.post("")
+async def create_recipe_tag(
+ tag: TagIn, session: Session = Depends(generate_session), current_user=Depends(get_current_user)
+):
+ """ Creates a Tag in the database """
+
+ return db.tags.create(session, tag.dict())
+
@router.get("/{tag}", response_model=RecipeTagResponse)
def get_all_recipes_by_tag(tag: str, session: Session = Depends(generate_session)):
diff --git a/mealie/schema/category.py b/mealie/schema/category.py
index 36c6d7ec1..5e7f1c842 100644
--- a/mealie/schema/category.py
+++ b/mealie/schema/category.py
@@ -23,6 +23,10 @@ class RecipeCategoryResponse(CategoryBase):
schema_extra = {"example": {"id": 1, "name": "dinner", "recipes": [{}]}}
+class TagIn(CategoryIn):
+ pass
+
+
class TagBase(CategoryBase):
pass