forked from github/plane
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:
parent
d43db7fc88
commit
734f27122b
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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">
|
||||||
|
@ -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}
|
||||||
|
@ -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"],
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user