From 9b4aebc385f1020dfc10f4e2250cf8b3eff0c07c Mon Sep 17 00:00:00 2001 From: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Date: Thu, 3 Aug 2023 15:28:22 +0530 Subject: [PATCH] promote: develop to stage-release v0.10-patch (#1783) * chore: show message if dragging unjoined project (#1763) * fix: invalid project selection in create issue modal (#1766) * style: sidebar project list improvement (#1767) * fix: comment reaction mutation (#1768) * fix: user profiles n plus 1 (#1765) * fix: bulk issue import (#1773) * style: profile activity (#1771) * style: profile activity comment log styling * chore: profile feed activity refactor * style: sidebar project list * chore: add non existing states for project entities (#1770) * fix: notification read status being toggled when click on link (#1769) * fix: custom theme persisting after signing out (#1780) * fix: custom theme persistence * chore: remove console logs * fix: build error * fix: change theme from command k --------- Co-authored-by: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com> Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> --- apiserver/plane/api/views/importer.py | 2 +- apiserver/plane/api/views/workspace.py | 7 + .../change-interface-theme.tsx | 38 +- apps/app/components/core/feeds.tsx | 342 ------------------ apps/app/components/core/index.ts | 1 - .../core/theme/custom-theme-selector.tsx | 2 + .../components/core/theme/theme-switch.tsx | 221 +++++------ apps/app/components/issues/modal.tsx | 32 +- .../notifications/notification-card.tsx | 4 +- .../notifications/notification-popover.tsx | 4 +- apps/app/components/project/sidebar-list.tsx | 2 +- .../project/single-sidebar-project.tsx | 53 +-- apps/app/components/ui/empty-state.tsx | 4 +- .../components/workspace/sidebar-dropdown.tsx | 6 +- apps/app/constants/themes.ts | 10 + apps/app/contexts/theme.context.tsx | 23 +- apps/app/helpers/theme.helper.ts | 60 +-- apps/app/hooks/use-comment-reaction.tsx | 3 +- apps/app/hooks/use-user-notifications.tsx | 21 ++ .../[workspaceSlug]/me/profile/activity.tsx | 207 ++++++++++- .../me/profile/preferences.tsx | 11 +- .../projects/[projectId]/cycles/[cycleId].tsx | 79 ++-- .../projects/[projectId]/issues/[issueId].tsx | 22 +- .../[projectId]/modules/[moduleId].tsx | 53 ++- .../projects/[projectId]/pages/[pageId].tsx | 69 ++-- .../projects/[projectId]/views/[viewId].tsx | 24 +- apps/app/pages/_app.tsx | 2 +- apps/app/pages/colors.tsx | 143 -------- apps/app/pages/index.tsx | 34 +- apps/app/pages/magic-sign-in.tsx | 13 +- apps/app/pages/onboarding.tsx | 7 +- apps/app/pages/reset-password.tsx | 8 + apps/app/pages/sign-up.tsx | 8 + apps/app/services/authentication.service.ts | 7 +- apps/app/types/users.d.ts | 1 + 35 files changed, 738 insertions(+), 785 deletions(-) delete mode 100644 apps/app/components/core/feeds.tsx delete mode 100644 apps/app/pages/colors.tsx diff --git a/apiserver/plane/api/views/importer.py b/apiserver/plane/api/views/importer.py index 63e2d38a13e..4fc7ad48357 100644 --- a/apiserver/plane/api/views/importer.py +++ b/apiserver/plane/api/views/importer.py @@ -332,7 +332,7 @@ def post(self, request, slug, project_id, service): # if there is no default state assign any random state if default_state is None: default_state = State.objects.filter( - ~Q(name="Triage"), sproject_id=project_id + ~Q(name="Triage"), project_id=project_id ).first() # Get the maximum sequence_id diff --git a/apiserver/plane/api/views/workspace.py b/apiserver/plane/api/views/workspace.py index b195cedb1ef..a862c0b4c3f 100644 --- a/apiserver/plane/api/views/workspace.py +++ b/apiserver/plane/api/views/workspace.py @@ -75,6 +75,7 @@ Label, WorkspaceMember, CycleIssue, + IssueReaction, ) from plane.api.permissions import ( WorkSpaceBasePermission, @@ -1321,6 +1322,12 @@ def get(self, request, slug, user_id): ) .select_related("project", "workspace", "state", "parent") .prefetch_related("assignees", "labels") + .prefetch_related( + Prefetch( + "issue_reactions", + queryset=IssueReaction.objects.select_related("actor"), + ) + ) .order_by("-created_at") .annotate( link_count=IssueLink.objects.filter(issue=OuterRef("id")) diff --git a/apps/app/components/command-palette/change-interface-theme.tsx b/apps/app/components/command-palette/change-interface-theme.tsx index b2b43c6704d..b34212b7f91 100644 --- a/apps/app/components/command-palette/change-interface-theme.tsx +++ b/apps/app/components/command-palette/change-interface-theme.tsx @@ -5,6 +5,8 @@ import { Command } from "cmdk"; import { THEMES_OBJ } from "constants/themes"; import { useTheme } from "next-themes"; import { SettingIcon } from "components/icons"; +import userService from "services/user.service"; +import useUser from "hooks/use-user"; type Props = { setIsPaletteOpen: Dispatch>; @@ -12,24 +14,50 @@ type Props = { export const ChangeInterfaceTheme: React.FC = ({ setIsPaletteOpen }) => { const [mounted, setMounted] = useState(false); + const { setTheme } = useTheme(); + const { user, mutateUser } = useUser(); + + const updateUserTheme = (newTheme: string) => { + if (!user) return; + + setTheme(newTheme); + + mutateUser((prevData) => { + if (!prevData) return prevData; + + return { + ...prevData, + theme: { + ...prevData.theme, + theme: newTheme, + }, + }; + }, false); + + userService.updateUser({ + theme: { + ...user.theme, + theme: newTheme, + }, + }); + }; + // useEffect only runs on the client, so now we can safely show the UI useEffect(() => { setMounted(true); }, []); - if (!mounted) { - return null; - } + if (!mounted) return null; return ( <> - {THEMES_OBJ.map((theme) => ( + {THEMES_OBJ.filter((t) => t.value !== "custom").map((theme) => ( { - setTheme(theme.value); + updateUserTheme(theme.value); setIsPaletteOpen(false); }} className="focus:outline-none" diff --git a/apps/app/components/core/feeds.tsx b/apps/app/components/core/feeds.tsx deleted file mode 100644 index 2924ec45685..00000000000 --- a/apps/app/components/core/feeds.tsx +++ /dev/null @@ -1,342 +0,0 @@ -import React from "react"; - -import { useRouter } from "next/router"; - -import Link from "next/link"; - -// icons -import { - ArrowTopRightOnSquareIcon, - ChatBubbleLeftEllipsisIcon, - Squares2X2Icon, -} from "@heroicons/react/24/outline"; -import { BlockedIcon, BlockerIcon } from "components/icons"; -import { Icon } from "components/ui"; -// helpers -import { renderShortDateWithYearFormat, timeAgo } from "helpers/date-time.helper"; -import { addSpaceIfCamelCase } from "helpers/string.helper"; -// types -import RemirrorRichTextEditor from "components/rich-text-editor"; - -const activityDetails: { - [key: string]: { - message?: string; - icon: JSX.Element; - }; -} = { - assignee: { - message: "removed the assignee", - icon: