Style: UI improvements (#2824)

* style: update notification Read status toast alert description.

* style: update issue subscribe button design.

* fix: remove group_by `none` display filter from the kanban view in profile and draft issues.

* style: design improvement in members settings.
* style: add display name for all user role.
* style: remove email for user roles other than admin.
* style: fix border color as per designs.
This commit is contained in:
Prateek Shourya 2023-11-22 12:58:55 +05:30 committed by GitHub
parent c8c89007c0
commit 42ccd1de58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 14 deletions

View File

@ -225,6 +225,7 @@ export const IssueView: FC<IIssueView> = observer((props) => {
size="sm" size="sm"
prependIcon={<Bell className="h-3 w-3" />} prependIcon={<Bell className="h-3 w-3" />}
variant="outline-primary" variant="outline-primary"
className="hover:!bg-custom-primary-100/20"
onClick={() => onClick={() =>
issueSubscription && issueSubscription.subscribed issueSubscription && issueSubscription.subscribed
? issueSubscriptionRemove() ? issueSubscriptionRemove()

View File

@ -33,7 +33,7 @@ import {
import { CustomDatePicker } from "components/ui"; import { CustomDatePicker } from "components/ui";
// icons // icons
import { Bell, CalendarDays, LinkIcon, Plus, Signal, Tag, Trash2, Triangle, User2 } from "lucide-react"; import { Bell, CalendarDays, LinkIcon, Plus, Signal, Tag, Trash2, Triangle, User2 } from "lucide-react";
import { ContrastIcon, DiceIcon, DoubleCircleIcon, UserGroupIcon } from "@plane/ui"; import { Button, ContrastIcon, DiceIcon, DoubleCircleIcon, UserGroupIcon } from "@plane/ui";
// helpers // helpers
import { copyTextToClipboard } from "helpers/string.helper"; import { copyTextToClipboard } from "helpers/string.helper";
// types // types
@ -273,17 +273,18 @@ export const IssueDetailsSidebar: React.FC<Props> = observer((props) => {
!issueDetail?.assignees.includes(user?.id ?? "") && !issueDetail?.assignees.includes(user?.id ?? "") &&
!router.pathname.includes("[archivedIssueId]") && !router.pathname.includes("[archivedIssueId]") &&
(fieldsToShow.includes("all") || fieldsToShow.includes("subscribe")) && ( (fieldsToShow.includes("all") || fieldsToShow.includes("subscribe")) && (
<button <Button
type="button" size="sm"
className="rounded-md flex items-center gap-2 border border-custom-primary-100 px-2 py-1 text-xs text-custom-primary-100 shadow-sm duration-300 focus:outline-none" prependIcon={<Bell className="h-3 w-3" />}
variant="outline-primary"
className="hover:!bg-custom-primary-100/20"
onClick={() => { onClick={() => {
if (subscribed) handleUnsubscribe(); if (subscribed) handleUnsubscribe();
else handleSubscribe(); else handleSubscribe();
}} }}
> >
<Bell className="h-3.5 w-3.5" />
{loading ? "Loading..." : subscribed ? "Unsubscribe" : "Subscribe"} {loading ? "Loading..." : subscribed ? "Unsubscribe" : "Subscribe"}
</button> </Button>
)} )}
{(fieldsToShow.includes("all") || fieldsToShow.includes("link")) && ( {(fieldsToShow.includes("all") || fieldsToShow.includes("link")) && (
<button <button

View File

@ -168,7 +168,7 @@ export const NotificationCard: React.FC<NotificationCardProps> = (props) => {
onClick: () => { onClick: () => {
markNotificationReadStatusToggle(notification.id).then(() => { markNotificationReadStatusToggle(notification.id).then(() => {
setToastAlert({ setToastAlert({
title: notification.read_at ? "Notification marked as unread" : "Notification marked as read", title: notification.read_at ? "Notification marked as read" : "Notification marked as unread",
type: "success", type: "success",
}); });
}); });

View File

@ -11,7 +11,7 @@ import { ConfirmProjectMemberRemove } from "components/project";
// ui // ui
import { CustomSelect, Tooltip } from "@plane/ui"; import { CustomSelect, Tooltip } from "@plane/ui";
// icons // icons
import { ChevronDown, XCircle } from "lucide-react"; import { ChevronDown, Dot, XCircle } from "lucide-react";
// constants // constants
import { ROLE } from "constants/workspace"; import { ROLE } from "constants/workspace";
// types // types
@ -116,7 +116,15 @@ export const ProjectMemberListItem: React.FC<Props> = observer((props) => {
) : ( ) : (
<h4 className="text-sm cursor-default">{member.display_name || member.email}</h4> <h4 className="text-sm cursor-default">{member.display_name || member.email}</h4>
)} )}
<p className="mt-0.5 text-xs text-custom-sidebar-text-300">{member.email ?? member.display_name}</p> <div className="flex items-center">
<p className="text-xs text-custom-text-300">{member.display_name}</p>
{isAdmin && (
<>
<Dot height={16} width={16} className="text-custom-text-300" />
<p className="text-xs text-custom-text-300">{member.email}</p>
</>
)}
</div>
</div> </div>
</div> </div>

View File

@ -11,7 +11,7 @@ import { ConfirmWorkspaceMemberRemove } from "components/workspace";
// ui // ui
import { CustomSelect, Tooltip } from "@plane/ui"; import { CustomSelect, Tooltip } from "@plane/ui";
// icons // icons
import { ChevronDown, XCircle } from "lucide-react"; import { ChevronDown, Dot, XCircle } from "lucide-react";
// constants // constants
import { ROLE } from "constants/workspace"; import { ROLE } from "constants/workspace";
import { TUserWorkspaceRole } from "types"; import { TUserWorkspaceRole } from "types";
@ -132,7 +132,15 @@ export const WorkspaceMembersListItem: FC<Props> = (props) => {
) : ( ) : (
<h4 className="text-sm cursor-default">{member.display_name || member.email}</h4> <h4 className="text-sm cursor-default">{member.display_name || member.email}</h4>
)} )}
<p className="mt-0.5 text-xs text-custom-sidebar-text-300">{member.email ?? member.display_name}</p> <div className="flex items-center">
<p className="text-xs text-custom-text-300">{member.display_name}</p>
{isAdmin && (
<>
<Dot height={16} width={16} className="text-custom-text-300" />
<p className="text-xs text-custom-text-300">{member.email}</p>
</>
)}
</div>
</div> </div>
</div> </div>
<div className="flex items-center gap-2 text-xs"> <div className="flex items-center gap-2 text-xs">

View File

@ -56,7 +56,7 @@ export const WorkspaceMembersList: FC<{ searchQuery: string }> = observer(({ sea
); );
return ( return (
<div className="divide-y-[0.5px] divide-custom-border-200"> <div className="divide-y-[0.5px] divide-custom-border-100">
{workspaceMembersWithInvitations.length > 0 {workspaceMembersWithInvitations.length > 0
? searchedMembers?.map((member) => <WorkspaceMembersListItem key={member.id} member={member} />) ? searchedMembers?.map((member) => <WorkspaceMembersListItem key={member.id} member={member} />)
: null} : null}

View File

@ -239,7 +239,7 @@ export const ISSUE_DISPLAY_FILTERS_BY_LAYOUT: {
filters: ["priority", "state_group", "labels", "start_date", "target_date"], filters: ["priority", "state_group", "labels", "start_date", "target_date"],
display_properties: true, display_properties: true,
display_filters: { display_filters: {
group_by: ["state_detail.group", "priority", "project", "labels", null], group_by: ["state_detail.group", "priority", "project", "labels"],
order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"], order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"],
type: [null, "active", "backlog"], type: [null, "active", "backlog"],
}, },
@ -282,7 +282,7 @@ export const ISSUE_DISPLAY_FILTERS_BY_LAYOUT: {
filters: ["priority", "state_group", "labels", "start_date", "target_date"], filters: ["priority", "state_group", "labels", "start_date", "target_date"],
display_properties: true, display_properties: true,
display_filters: { display_filters: {
group_by: ["state_detail.group", "priority", "project", "labels", null], group_by: ["state_detail.group", "priority", "project", "labels"],
order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"], order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"],
type: [null, "active", "backlog"], type: [null, "active", "backlog"],
}, },