From 16d63abcdc81676f4a49dacb232094e5646e1ee8 Mon Sep 17 00:00:00 2001 From: Akshita Goyal <36129505+gakshita@users.noreply.github.com> Date: Mon, 2 Jun 2025 15:50:57 +0530 Subject: [PATCH] [WEB-3998] fix: minor empty states changes + refactoring (#7151) --- web/app/(all)/[workspaceSlug]/(settings)/layout.tsx | 2 +- .../(settings)/settings/(workspace)/layout.tsx | 5 +++-- .../(settings)/settings/(workspace)/webhooks/page.tsx | 6 +++--- .../(settings)/settings/account/activity/page.tsx | 6 +++--- .../(settings)/settings/account/api-tokens/page.tsx | 6 +++--- .../common/subscription/subscription-pill.tsx | 2 +- web/core/components/estimates/empty-screen.tsx | 6 +++--- .../components/labels/project-setting-label-list.tsx | 11 ++++++++--- web/core/components/settings/header.tsx | 2 +- web/core/components/settings/heading.tsx | 11 ++++++++++- web/core/components/settings/sidebar/header.tsx | 7 ++++--- web/core/components/settings/sidebar/nav-item.tsx | 5 +++-- .../workspace/settings/members-list-item.tsx | 2 +- .../components/workspace/settings/members-list.tsx | 2 +- .../workspace/sidebar/projects-list-item.tsx | 2 +- 15 files changed, 46 insertions(+), 29 deletions(-) diff --git a/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx b/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx index d05da40583..c081681b6a 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx @@ -15,7 +15,7 @@ export default function SettingsLayout({ children }: { children: React.ReactNode {/* Header */} {/* Content */} - + {children} diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx index 5b2af44b75..2eab9ed467 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx @@ -2,14 +2,15 @@ import { FC, ReactNode } from "react"; import { observer } from "mobx-react"; -// components import { usePathname } from "next/navigation"; +// constants import { EUserWorkspaceRoles, WORKSPACE_SETTINGS_ACCESS } from "@plane/constants"; -// hooks +// components import { NotAuthorizedView } from "@/components/auth-screens"; import { CommandPalette } from "@/components/command-palette"; import { SettingsMobileNav } from "@/components/settings"; import { getWorkspaceActivePath, pathnameToAccessKey } from "@/components/settings/helper"; +// hooks import { useUserPermissions } from "@/hooks/store"; // local components import { WorkspaceSettingsSidebar } from "./sidebar"; diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx index d1692168ed..19f18717e7 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx @@ -82,9 +82,9 @@ const WebhooksListPage = observer(() => {
{ description={t("account_settings.activity.description")} />
diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx index 10461db071..cbbdb3a553 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx @@ -88,10 +88,10 @@ const ApiTokensPage = observer(() => { />
<>; diff --git a/web/core/components/estimates/empty-screen.tsx b/web/core/components/estimates/empty-screen.tsx index 73acce27f8..83bc30a0bf 100644 --- a/web/core/components/estimates/empty-screen.tsx +++ b/web/core/components/estimates/empty-screen.tsx @@ -20,10 +20,10 @@ export const EstimateEmptyScreen: FC = (props) => { const resolvedPath = `/empty-state/project-settings/estimates-${resolvedTheme === "light" ? "light" : "dark"}.png`; return ( { projectLabels.length === 0 && !showLabelForm ? (
) : ( diff --git a/web/core/components/settings/header.tsx b/web/core/components/settings/header.tsx index 586fa9181f..0dbee0995b 100644 --- a/web/core/components/settings/header.tsx +++ b/web/core/components/settings/header.tsx @@ -32,7 +32,7 @@ export const SettingsHeader = observer(() => { getButtonStyling("neutral-primary", "sm"), "md:absolute left-2 top-9 group flex gap-2 text-custom-text-300 mb-4 border border-transparent w-fit rounded-lg ", "h-6 w-6 rounded-lg p-1 bg-custom-background-100 border-custom-border-200 ", - isScrolled ? "-mt-1 " : "hidden p-0 overflow-hidden items-center pr-2 border-none" + isScrolled ? "-mt-2 " : "hidden p-0 overflow-hidden items-center pr-2 border-none" )} > diff --git a/web/core/components/settings/heading.tsx b/web/core/components/settings/heading.tsx index 7d6655de37..40405a1ec7 100644 --- a/web/core/components/settings/heading.tsx +++ b/web/core/components/settings/heading.tsx @@ -5,18 +5,27 @@ type Props = { description?: string; appendToRight?: React.ReactNode; showButton?: boolean; + customButton?: React.ReactNode; button?: { label: string; onClick: () => void; }; }; -export const SettingsHeading = ({ title, description, button, appendToRight, showButton = true }: Props) => ( +export const SettingsHeading = ({ + title, + description, + button, + appendToRight, + customButton, + showButton = true, +}: Props) => (
{typeof title === "string" ?

{title}

: title} {description &&
{description}
}
+ {showButton && customButton} {button && showButton && (
- +
); -}; +}); diff --git a/web/core/components/settings/sidebar/nav-item.tsx b/web/core/components/settings/sidebar/nav-item.tsx index a28a8904c8..d06930ef57 100644 --- a/web/core/components/settings/sidebar/nav-item.tsx +++ b/web/core/components/settings/sidebar/nav-item.tsx @@ -1,4 +1,5 @@ import React, { useState } from "react"; +import { observer } from "mobx-react"; import Link from "next/link"; import { useParams } from "next/navigation"; import { Disclosure } from "@headlessui/react"; @@ -23,7 +24,7 @@ export type TSettingsSidebarNavItemProps = { renderChildren?: (key: string) => React.ReactNode; }; -const SettingsSidebarNavItem = (props: TSettingsSidebarNavItemProps) => { +const SettingsSidebarNavItem = observer((props: TSettingsSidebarNavItemProps) => { const { workspaceSlug, setting, isActive, actionIcons, appendItemsToTitle, renderChildren } = props; // router const { projectId } = useParams(); @@ -88,6 +89,6 @@ const SettingsSidebarNavItem = (props: TSettingsSidebarNavItemProps) => { )} ); -}; +}); export default SettingsSidebarNavItem; diff --git a/web/core/components/workspace/settings/members-list-item.tsx b/web/core/components/workspace/settings/members-list-item.tsx index 28b742f086..31a462c753 100644 --- a/web/core/components/workspace/settings/members-list-item.tsx +++ b/web/core/components/workspace/settings/members-list-item.tsx @@ -87,7 +87,7 @@ export const WorkspaceMembersListItem: FC = observer((props) => { if (isEmpty(columns)) return ; return ( -
+
{removeMemberModal && ( 0} diff --git a/web/core/components/workspace/settings/members-list.tsx b/web/core/components/workspace/settings/members-list.tsx index 93c2786c16..9bce5ea0f1 100644 --- a/web/core/components/workspace/settings/members-list.tsx +++ b/web/core/components/workspace/settings/members-list.tsx @@ -62,7 +62,7 @@ export const WorkspaceMembersList: FC<{ searchQuery: string; isAdmin: boolean }> isOpen={showPendingInvites} onToggle={() => setShowPendingInvites((prev) => !prev)} buttonClassName="w-full" - className="h-full" + className="" title={
diff --git a/web/core/components/workspace/sidebar/projects-list-item.tsx b/web/core/components/workspace/sidebar/projects-list-item.tsx index a35ca8f5d6..097b3da54e 100644 --- a/web/core/components/workspace/sidebar/projects-list-item.tsx +++ b/web/core/components/workspace/sidebar/projects-list-item.tsx @@ -367,7 +367,7 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { setIsMenuActive(false); }} > - +
{t("settings")}