From a78116a91d1ad52237204b69c4ba40bfa0381460 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Tue, 12 Sep 2023 12:39:37 +0530 Subject: [PATCH 01/21] style: project settings navigation sidebar added --- .hintrc | 16 + web/components/project/index.ts | 2 +- web/components/project/settings-header.tsx | 13 - web/components/project/settings-sidebar.tsx | 76 ++++ .../[projectId]/settings/automations.tsx | 10 +- .../projects/[projectId]/settings/control.tsx | 238 +++++----- .../[projectId]/settings/estimates.tsx | 118 ++--- .../[projectId]/settings/features.tsx | 10 +- .../projects/[projectId]/settings/index.tsx | 415 +++++++++--------- .../[projectId]/settings/integrations.tsx | 10 +- .../projects/[projectId]/settings/labels.tsx | 10 +- .../projects/[projectId]/settings/members.tsx | 10 +- .../projects/[projectId]/settings/states.tsx | 16 +- 13 files changed, 523 insertions(+), 421 deletions(-) create mode 100644 .hintrc delete mode 100644 web/components/project/settings-header.tsx create mode 100644 web/components/project/settings-sidebar.tsx diff --git a/.hintrc b/.hintrc new file mode 100644 index 00000000000..5899c4a9365 --- /dev/null +++ b/.hintrc @@ -0,0 +1,16 @@ +{ + "extends": [ + "development" + ], + "hints": { + "no-inline-styles": "off", + "button-type": "off", + "axe/name-role-value": [ + "default", + { + "button-name": "off" + } + ], + "disown-opener": "off" + } +} \ No newline at end of file diff --git a/web/components/project/index.ts b/web/components/project/index.ts index 494a0429426..8e3e5543ee0 100644 --- a/web/components/project/index.ts +++ b/web/components/project/index.ts @@ -1,7 +1,7 @@ export * from "./create-project-modal"; export * from "./delete-project-modal"; export * from "./sidebar-list"; -export * from "./settings-header"; +export * from "./settings-sidebar"; export * from "./single-integration-card"; export * from "./single-project-card"; export * from "./single-sidebar-project"; diff --git a/web/components/project/settings-header.tsx b/web/components/project/settings-header.tsx deleted file mode 100644 index 8dcff51387c..00000000000 --- a/web/components/project/settings-header.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import SettingsNavbar from "layouts/settings-navbar"; - -export const SettingsHeader = () => ( -
-
-

Project Settings

-

- This information will be displayed to every member of the project. -

-
- -
-); diff --git a/web/components/project/settings-sidebar.tsx b/web/components/project/settings-sidebar.tsx new file mode 100644 index 00000000000..7c5ca4298ac --- /dev/null +++ b/web/components/project/settings-sidebar.tsx @@ -0,0 +1,76 @@ +import React from "react"; +import { useRouter } from "next/router"; +import Link from "next/link"; + +export const SettingsSidebar = () => { + const router = useRouter(); + const { workspaceSlug, projectId } = router.query; + + const projectLinks: Array<{ + label: string; + href: string; + }> = [ + { + label: "General", + href: `/${workspaceSlug}/projects/${projectId}/settings`, + }, + { + label: "Control", + href: `/${workspaceSlug}/projects/${projectId}/settings/control`, + }, + { + label: "Members", + href: `/${workspaceSlug}/projects/${projectId}/settings/members`, + }, + { + label: "Features", + href: `/${workspaceSlug}/projects/${projectId}/settings/features`, + }, + { + label: "States", + href: `/${workspaceSlug}/projects/${projectId}/settings/states`, + }, + { + label: "Labels", + href: `/${workspaceSlug}/projects/${projectId}/settings/labels`, + }, + { + label: "Integrations", + href: `/${workspaceSlug}/projects/${projectId}/settings/integrations`, + }, + { + label: "Estimates", + href: `/${workspaceSlug}/projects/${projectId}/settings/estimates`, + }, + { + label: "Automations", + href: `/${workspaceSlug}/projects/${projectId}/settings/automations`, + }, + ]; + return ( +
+ SETTINGS +
+ {projectLinks.map((link) => ( + + +
+ {link.label} +
+
+ + ))} +
+
+ ); +}; diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx index a65222af5a7..0dc80e1f4ff 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx @@ -13,8 +13,8 @@ import useUserAuth from "hooks/use-user-auth"; import useProjectDetails from "hooks/use-project-details"; import useToast from "hooks/use-toast"; // components -import { SettingsHeader } from "components/project"; import { AutoArchiveAutomation, AutoCloseAutomation } from "components/automation"; +import { SettingsSidebar } from "components/project"; // ui import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs"; // types @@ -75,9 +75,11 @@ const AutomationsSettings: NextPage = () => { } > -
- -
+
+
+ +
+
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/control.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/control.tsx index 12ef350aade..248488e7a3e 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/control.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/control.tsx @@ -14,7 +14,7 @@ import projectService from "services/project.service"; import useToast from "hooks/use-toast"; import useUserAuth from "hooks/use-user-auth"; // components -import { SettingsHeader } from "components/project"; +import { SettingsSidebar } from "components/project"; // ui import { CustomSelect, Loader, SecondaryButton } from "components/ui"; import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs"; @@ -113,124 +113,130 @@ const ControlSettings: NextPage = () => { } > -
- -
-
-
-

Project Lead

-

Select the project leader.

-
-
- {projectDetails ? ( - ( - person.member.id === field.value)?.member - .display_name ?? Select lead - } - width="w-full" - input - > - {people?.map((person) => ( - -
- {person.member.avatar && person.member.avatar !== "" ? ( -
- User Avatar -
- ) : ( -
- {person.member.display_name?.charAt(0)} -
- )} - {person.member.display_name} -
-
- ))} -
- )} - /> - ) : ( - - - - )} -
+ +
+
+
-
-
-

Default Assignee

-

- Select the default assignee for the project. -

+
+
+
+

Project Lead

+

Select the project leader.

+
+
+ {projectDetails ? ( + ( + person.member.id === field.value)?.member + .display_name ?? ( + Select lead + ) + } + width="w-full" + input + > + {people?.map((person) => ( + +
+ {person.member.avatar && person.member.avatar !== "" ? ( +
+ User Avatar +
+ ) : ( +
+ {person.member.display_name?.charAt(0)} +
+ )} + {person.member.display_name} +
+
+ ))} +
+ )} + /> + ) : ( + + + + )} +
-
- {projectDetails ? ( - ( - p.member.id === field.value)?.member.display_name ?? ( - Select default assignee - ) - } - width="w-full" - input - > - {people?.map((person) => ( - -
- {person.member.avatar && person.member.avatar !== "" ? ( -
- User Avatar -
- ) : ( -
- {person.member.display_name?.charAt(0)} -
- )} - {person.member.display_name} -
-
- ))} -
- )} - /> - ) : ( - - - - )} +
+
+

Default Assignee

+

+ Select the default assignee for the project. +

+
+
+ {projectDetails ? ( + ( + p.member.id === field.value)?.member.display_name ?? ( + Select default assignee + ) + } + width="w-full" + input + > + {people?.map((person) => ( + +
+ {person.member.avatar && person.member.avatar !== "" ? ( +
+ User Avatar +
+ ) : ( +
+ {person.member.display_name?.charAt(0)} +
+ )} + {person.member.display_name} +
+
+ ))} +
+ )} + /> + ) : ( + + + + )} +
+
+
+ + {isSubmitting ? "Updating Project..." : "Update Project"} +
-
-
- - {isSubmitting ? "Updating Project..." : "Update Project"} -
diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx index f61bd24d82e..61ede9ca4af 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx @@ -13,7 +13,7 @@ import useProjectDetails from "hooks/use-project-details"; import { ProjectAuthorizationWrapper } from "layouts/auth-layout"; // components import { CreateUpdateEstimateModal, SingleEstimate } from "components/estimates"; -import { SettingsHeader } from "components/project"; +import { SettingsSidebar } from "components/project"; //hooks import useToast from "hooks/use-toast"; import useUserAuth from "hooks/use-user-auth"; @@ -125,66 +125,70 @@ const EstimatesSettings: NextPage = () => { } > -
- -
-

Estimates

-
-
-
{ - setEstimateToUpdate(undefined); - setEstimateFormOpen(true); - }} - > - - Create New Estimate +
+
+ +
+
+
+

Estimates

+
+
+
{ + setEstimateToUpdate(undefined); + setEstimateFormOpen(true); + }} + > + + Create New Estimate +
+ {projectDetails?.estimate && ( + Disable Estimates + )}
- {projectDetails?.estimate && ( - Disable Estimates - )}
-
-
- {estimatesList ? ( - estimatesList.length > 0 ? ( -
- {estimatesList.map((estimate) => ( - editEstimate(estimate)} - handleEstimateDelete={(estimateId) => removeEstimate(estimateId)} - user={user} +
+ {estimatesList ? ( + estimatesList.length > 0 ? ( +
+ {estimatesList.map((estimate) => ( + editEstimate(estimate)} + handleEstimateDelete={(estimateId) => removeEstimate(estimateId)} + user={user} + /> + ))} +
+ ) : ( +
+ , + text: "Add Estimate", + onClick: () => { + setEstimateToUpdate(undefined); + setEstimateFormOpen(true); + }, + }} /> - ))} -
+
+ ) ) : ( -
- , - text: "Add Estimate", - onClick: () => { - setEstimateToUpdate(undefined); - setEstimateFormOpen(true); - }, - }} - /> -
- ) - ) : ( - - - - - - - )} + + + + + + + )} + diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx index be0c2198a17..9e39801c0e8 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx @@ -13,7 +13,7 @@ import { ProjectAuthorizationWrapper } from "layouts/auth-layout"; import useToast from "hooks/use-toast"; import useUserAuth from "hooks/use-user-auth"; // components -import { SettingsHeader } from "components/project"; +import { SettingsSidebar } from "components/project"; // ui import { SecondaryButton, ToggleSwitch } from "components/ui"; import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs"; @@ -149,9 +149,11 @@ const FeaturesSettings: NextPage = () => { } > -
- -
+
+
+ +
+

Features

{featuresList.map((feature) => ( diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx index a178e28fa18..a60f8081f40 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx @@ -11,7 +11,7 @@ import { ProjectAuthorizationWrapper } from "layouts/auth-layout"; // services import projectService from "services/project.service"; // components -import { DeleteProjectModal, SettingsHeader } from "components/project"; +import { DeleteProjectModal, SettingsSidebar } from "components/project"; import { ImagePickerPopover } from "components/core"; import EmojiIconPicker from "components/emoji-icon-picker"; // hooks @@ -185,229 +185,234 @@ const GeneralSettings: NextPage = () => { onClose={() => setSelectedProject(null)} user={user} /> -
- -
-
-
-

Icon & Name

-

- Select an icon and a name for your project. -

-
-
- {projectDetails ? ( -
- ( - - )} - /> -
- ) : ( - - - - )} - {projectDetails ? ( - - ) : ( - - - - )} -
+ +
+
+
-
-
-

Description

-

Give a description to your project.

-
-
- {projectDetails ? ( -