From bcaa42902e5a0a9341b04363d3d236a31cc39803 Mon Sep 17 00:00:00 2001 From: gakshita Date: Tue, 11 Mar 2025 18:15:36 +0530 Subject: [PATCH 1/3] fix: fav mutation on quick actions --- apiserver/plane/app/views/workspace/favorite.py | 13 +++++++++++++ web/core/store/favorite.store.ts | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apiserver/plane/app/views/workspace/favorite.py b/apiserver/plane/app/views/workspace/favorite.py index 055f4d67879..f0f8d9a1d4f 100644 --- a/apiserver/plane/app/views/workspace/favorite.py +++ b/apiserver/plane/app/views/workspace/favorite.py @@ -34,6 +34,19 @@ def get(self, request, slug): def post(self, request, slug): try: workspace = Workspace.objects.get(slug=slug) + + user_favorites = UserFavorite.objects.filter( + workspace=workspace, + user_id=request.user.id, + entity_type=request.data.get("entity_type"), + entity_identifier=request.data.get("entity_identifier") + ) + # If the favorite exists return + if request.data.get("entity_identifier") and user_favorites.exists(): + user_favorite = user_favorites.first() + serializer = UserFavoriteSerializer(user_favorite) + return Response(serializer.data, status=status.HTTP_200_OK) + serializer = UserFavoriteSerializer(data=request.data) if serializer.is_valid(): serializer.save( diff --git a/web/core/store/favorite.store.ts b/web/core/store/favorite.store.ts index a588f2af3bb..d210b723e7b 100644 --- a/web/core/store/favorite.store.ts +++ b/web/core/store/favorite.store.ts @@ -111,11 +111,12 @@ export class FavoriteStore implements IFavoriteStore { * @returns Promise */ addFavorite = async (workspaceSlug: string, data: Partial) => { - const id = uuidv4(); data = { ...data, parent: null, is_folder: data.entity_type === "folder" }; + if (data.entity_identifier && this.entityMap[data.entity_identifier]) return this.entityMap[data.entity_identifier]; try { // optimistic addition + const id = uuidv4(); runInAction(() => { set(this.favoriteMap, [id], data); data.entity_identifier && set(this.entityMap, [data.entity_identifier], data); @@ -271,6 +272,7 @@ export class FavoriteStore implements IFavoriteStore { * @returns Promise */ deleteFavorite = async (workspaceSlug: string, favoriteId: string) => { + if (!this.favoriteMap[favoriteId]) return; const parent = this.favoriteMap[favoriteId].parent; const children = this.groupedFavorites[favoriteId].children; const entity_identifier = this.favoriteMap[favoriteId].entity_identifier; From e5d28696a3babca53b27ed14d5edcca7eda0c262 Mon Sep 17 00:00:00 2001 From: pablohashescobar Date: Mon, 17 Mar 2025 13:44:12 +0530 Subject: [PATCH 2/3] fix: user favorite fetch --- apiserver/plane/app/views/workspace/favorite.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apiserver/plane/app/views/workspace/favorite.py b/apiserver/plane/app/views/workspace/favorite.py index f0f8d9a1d4f..9e8838ac459 100644 --- a/apiserver/plane/app/views/workspace/favorite.py +++ b/apiserver/plane/app/views/workspace/favorite.py @@ -35,14 +35,14 @@ def post(self, request, slug): try: workspace = Workspace.objects.get(slug=slug) - user_favorites = UserFavorite.objects.filter( - workspace=workspace, - user_id=request.user.id, - entity_type=request.data.get("entity_type"), - entity_identifier=request.data.get("entity_identifier") - ) # If the favorite exists return - if request.data.get("entity_identifier") and user_favorites.exists(): + if request.data.get("entity_identifier"): + user_favorites = UserFavorite.objects.filter( + workspace=workspace, + user_id=request.user.id, + entity_type=request.data.get("entity_type"), + entity_identifier=request.data.get("entity_identifier"), + ).first() user_favorite = user_favorites.first() serializer = UserFavoriteSerializer(user_favorite) return Response(serializer.data, status=status.HTTP_200_OK) From 9eb1a0dba81affaaf14336136658fb0a14971b80 Mon Sep 17 00:00:00 2001 From: pablohashescobar Date: Mon, 17 Mar 2025 13:51:23 +0530 Subject: [PATCH 3/3] fix: exist validation --- apiserver/plane/app/views/workspace/favorite.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apiserver/plane/app/views/workspace/favorite.py b/apiserver/plane/app/views/workspace/favorite.py index 9e8838ac459..ad2f24883e2 100644 --- a/apiserver/plane/app/views/workspace/favorite.py +++ b/apiserver/plane/app/views/workspace/favorite.py @@ -43,10 +43,13 @@ def post(self, request, slug): entity_type=request.data.get("entity_type"), entity_identifier=request.data.get("entity_identifier"), ).first() - user_favorite = user_favorites.first() - serializer = UserFavoriteSerializer(user_favorite) - return Response(serializer.data, status=status.HTTP_200_OK) + # If the favorite exists return + if user_favorites: + serializer = UserFavoriteSerializer(user_favorites) + return Response(serializer.data, status=status.HTTP_200_OK) + + # else create a new favorite serializer = UserFavoriteSerializer(data=request.data) if serializer.is_valid(): serializer.save(