From 88c6a448aa440492bd5f53db81fba0b8fd22bbb8 Mon Sep 17 00:00:00 2001 From: BrickheadJohnny Date: Wed, 2 Oct 2024 14:15:26 +0200 Subject: [PATCH] chore: migrate the `MemberCount` component to Tailwind CSS & Radix UI --- .../components/DraggableRoleCard.tsx | 7 +- .../[guild]/GuildPageImageAndName.tsx | 12 +- .../[guild]/RecheckAccessesAndLeaveButton.tsx | 5 +- .../RoleCard/components/MemberCount.tsx | 144 ++++++++---------- .../components/MemberCountLastSyncTooltip.tsx | 74 ++++----- src/components/[guild]/RoleOptionCard.tsx | 7 +- .../ExportMembers/ExportCard/ExportCard.tsx | 7 +- .../crm/FilterByRoles/FilterByRoles.tsx | 1 + src/hooks/useActiveStatusUpdates.ts | 4 +- 9 files changed, 121 insertions(+), 140 deletions(-) diff --git a/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx b/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx index be3f289f8b..42488eddfb 100644 --- a/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx +++ b/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx @@ -1,6 +1,6 @@ import { HStack, Heading, Icon, Spacer } from "@chakra-ui/react" import { DotsSixVertical } from "@phosphor-icons/react" -import MemberCount from "components/[guild]/RoleCard/components/MemberCount" +import { MemberCount } from "components/[guild]/RoleCard/components/MemberCount" import Visibility from "components/[guild]/Visibility" import Card from "components/common/Card" import GuildLogo from "components/common/GuildLogo" @@ -29,7 +29,10 @@ const DraggableRoleCard = ({ role }: Props) => { {role.name} - + { const { imageUrl, name, tags, memberCount } = useGuild() - const { avatarBg, textColor, buttonColorScheme } = useThemeContext() + const { avatarBg, buttonColorSchemeClassName } = useThemeContext() return ( <> @@ -33,9 +33,11 @@ const GuildPageImageAndName = () => { diff --git a/src/components/[guild]/RecheckAccessesAndLeaveButton.tsx b/src/components/[guild]/RecheckAccessesAndLeaveButton.tsx index 0e71de2ca4..3baac73ef4 100644 --- a/src/components/[guild]/RecheckAccessesAndLeaveButton.tsx +++ b/src/components/[guild]/RecheckAccessesAndLeaveButton.tsx @@ -17,7 +17,10 @@ const RecheckAccessesAndLeaveButton = () => { diff --git a/src/components/[guild]/RoleCard/components/MemberCount.tsx b/src/components/[guild]/RoleCard/components/MemberCount.tsx index a614109834..b6a9e31b3b 100644 --- a/src/components/[guild]/RoleCard/components/MemberCount.tsx +++ b/src/components/[guild]/RoleCard/components/MemberCount.tsx @@ -1,62 +1,45 @@ +import { Badge, BadgeProps } from "@/components/ui/Badge" +import { ProgressIndicator, ProgressRoot } from "@/components/ui/Progress" import { - HStack, - Popover, - PopoverArrow, - PopoverBody, - PopoverContent, - PopoverFooter, - PopoverHeader, - PopoverTrigger, - Portal, - Progress, - Spinner, - Tag, - TagLabel, - TagLeftIcon, - TagProps, - TagRightIcon, - Text, -} from "@chakra-ui/react" -import { Users } from "@phosphor-icons/react" + Tooltip, + TooltipContent, + TooltipPortal, + TooltipTrigger, +} from "@/components/ui/Tooltip" +import { cn } from "@/lib/utils" +import { CircleNotch, Users } from "@phosphor-icons/react/dist/ssr" import useGuild from "components/[guild]/hooks/useGuild" import useGuildPermission from "components/[guild]/hooks/useGuildPermission" import useUser from "components/[guild]/hooks/useUser" import useActiveStatusUpdates from "hooks/useActiveStatusUpdates" import { PropsWithChildren } from "react" -import MemberCountLastSyncTooltip, { +import { + MemberCountLastSyncTooltip, SyncRoleButton, } from "./MemberCountLastSyncTooltip" type Props = { memberCount: number size?: "sm" | "md" -} & TagProps +} & BadgeProps const MemberCount = ({ memberCount, size = "md", children, - ...rest + className, + ...badgeProps }: PropsWithChildren) => { - const iconSize = size === "sm" ? "14px" : "16px" - return ( - - - + + + {new Intl.NumberFormat("en", { notation: "compact" }).format( memberCount ?? 0 )} - + {children} - + ) } @@ -64,7 +47,7 @@ type WithSyncProps = Props & { roleId?: number } -export const MemberCountWithSyncIndicator = ({ +const MemberCountWithSyncIndicator = ({ roleId, ...rest }: PropsWithChildren) => { @@ -72,52 +55,49 @@ export const MemberCountWithSyncIndicator = ({ if (status === "STARTED") return ( - - - - + + + + - - - - - - Syncing members - - - Updating all member accesses. This can take a few hours, feel free to - come back later! - - - - - + + + +
Syncing members
+
+

+ Updating all member accesses. This can take a few hours, feel free to + come back later! +

+ +
+
+
+ ) - return + return } -const StatusProgress = ({ data, status }) => { - const percentage = (data.doneChunks / data.totalChunks) * 100 +const StatusProgress = ({ + data, + status, +}: Pick, "data" | "status">) => { + const percentage = !!data ? data.doneChunks / data.totalChunks : 0 return ( - - - +
+ + + + {percentage.toFixed(0)}% - - + +
) } -export const RoleCardMemberCount = ({ +const RoleCardMemberCount = ({ memberCount, roleId, lastSyncedAt, @@ -127,21 +107,19 @@ export const RoleCardMemberCount = ({ const { isSuperAdmin } = useUser() return ( - + {isSuperAdmin ? ( - +
- +
) : isAdmin && - featureFlags.includes("PERIODIC_SYNC") && + featureFlags?.includes("PERIODIC_SYNC") && /* temporarily only showing for superAdmins when lastSyncedAt is null, until we know what to communicate to admins in this case */ lastSyncedAt ? ( @@ -150,4 +128,4 @@ export const RoleCardMemberCount = ({ ) } -export default MemberCount +export { MemberCount, MemberCountWithSyncIndicator, RoleCardMemberCount } diff --git a/src/components/[guild]/RoleCard/components/MemberCountLastSyncTooltip.tsx b/src/components/[guild]/RoleCard/components/MemberCountLastSyncTooltip.tsx index 008049c3f7..0f31a4ecb9 100644 --- a/src/components/[guild]/RoleCard/components/MemberCountLastSyncTooltip.tsx +++ b/src/components/[guild]/RoleCard/components/MemberCountLastSyncTooltip.tsx @@ -1,17 +1,14 @@ +import { Button } from "@/components/ui/Button" import { - Popover, - PopoverArrow, - PopoverContent, - PopoverHeader, - PopoverTrigger, - Portal, - TagRightIcon, -} from "@chakra-ui/react" -import { Info, UserSwitch } from "@phosphor-icons/react" -import Button from "components/common/Button" -import useShowErrorToast from "hooks/useShowErrorToast" + Tooltip, + TooltipContent, + TooltipPortal, + TooltipTrigger, +} from "@/components/ui/Tooltip" +import { useErrorToast } from "@/components/ui/hooks/useErrorToast" +import { useToast } from "@/components/ui/hooks/useToast" +import { Info, UserSwitch } from "@phosphor-icons/react/dist/ssr" import useSubmit from "hooks/useSubmit" -import useToast from "hooks/useToast" import { PropsWithChildren, useMemo } from "react" import fetcher from "utils/fetcher" import formatRelativeTimeFromNow, { @@ -44,35 +41,30 @@ const MemberCountLastSyncTooltip = ({ }, [lastSyncedAt]) return ( - - - + + - - - - - {`Last updated all member accesses ${readableDate} ago`} + + + +

{`Last updated all member accesses ${readableDate} ago`}

{children} -
-
-
+ + + ) } export const SyncRoleButton = ({ roleId }) => { - const toast = useToast() - const showErrorToast = useShowErrorToast() + const { toast } = useToast() + const errorToast = useErrorToast() const submit = () => // TODO: use fetcherWithSign (with params in array) when the BE will add auth back @@ -81,22 +73,18 @@ export const SyncRoleButton = ({ roleId }) => { const { onSubmit, isLoading } = useSubmit(submit, { onSuccess: () => { toast({ - status: "success", + variant: "success", title: "Successfully moved job to the start of the queue", }) }, - onError: (err) => { - showErrorToast(err) - }, + onError: (err) => errorToast(err), }) return (