From 7a21ee2907ed4bca67bb2e1e305a5ce9096d313e Mon Sep 17 00:00:00 2001 From: Zai Shi Date: Thu, 16 May 2024 23:01:40 +0200 Subject: [PATCH] change emailVerified column to icon --- .../components/data-table/elements/cells.tsx | 9 +++-- .../data-table/elements/data-table.tsx | 4 +- .../data-table/team-member-table.tsx | 9 ++++- .../src/components/data-table/user-table.tsx | 37 ++++++++++++++----- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/packages/stack-server/src/components/data-table/elements/cells.tsx b/packages/stack-server/src/components/data-table/elements/cells.tsx index 49edfdbd6..f594d42ea 100644 --- a/packages/stack-server/src/components/data-table/elements/cells.tsx +++ b/packages/stack-server/src/components/data-table/elements/cells.tsx @@ -15,10 +15,13 @@ import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; -export function TextCell(props: { children: React.ReactNode, size?: number }) { +export function TextCell(props: { children: React.ReactNode, size?: number, icon?: React.ReactNode }) { return ( -
- {props.children} +
+
+ {props.children} +
+ {props.icon &&
{props.icon}
}
); } diff --git a/packages/stack-server/src/components/data-table/elements/data-table.tsx b/packages/stack-server/src/components/data-table/elements/data-table.tsx index 132325b42..cde0c3915 100644 --- a/packages/stack-server/src/components/data-table/elements/data-table.tsx +++ b/packages/stack-server/src/components/data-table/elements/data-table.tsx @@ -33,15 +33,17 @@ interface DataTableProps { columns: ColumnDef[], data: TData[], toolbarRender?: (table: TableType) => React.ReactNode, + defaultVisibility?: VisibilityState, } export function DataTable({ columns, data, toolbarRender, + defaultVisibility, }: DataTableProps) { const [rowSelection, setRowSelection] = React.useState({}); - const [columnVisibility, setColumnVisibility] = React.useState({}); + const [columnVisibility, setColumnVisibility] = React.useState(defaultVisibility || {}); const [columnFilters, setColumnFilters] = React.useState([]); const [sorting, setSorting] = React.useState([]); diff --git a/packages/stack-server/src/components/data-table/team-member-table.tsx b/packages/stack-server/src/components/data-table/team-member-table.tsx index e4cd6caa8..d78654739 100644 --- a/packages/stack-server/src/components/data-table/team-member-table.tsx +++ b/packages/stack-server/src/components/data-table/team-member-table.tsx @@ -34,7 +34,7 @@ function RemoveUserDialog(props: { onOpenChange={props.onOpenChange} okButton={{ label: "Remove user from team", - onClick: async () => await props.team.removeUser(props.user.id) + onClick: async () => { await props.team.removeUser(props.user.id); } }} cancelButton confirmText="I understand this will cause the user to lose access to the team." @@ -99,5 +99,10 @@ export function TeamMemberTable(props: { members: ServerTeamMember[], team: Serv }).catch(console.error); }, [props.members, props.team]); - return ; + return ; } \ No newline at end of file diff --git a/packages/stack-server/src/components/data-table/user-table.tsx b/packages/stack-server/src/components/data-table/user-table.tsx index 228aef611..f47f96605 100644 --- a/packages/stack-server/src/components/data-table/user-table.tsx +++ b/packages/stack-server/src/components/data-table/user-table.tsx @@ -14,6 +14,8 @@ import { DateField, InputField, SwitchField } from "../form-fields"; import { ActionDialog } from "../action-dialog"; import Typography from "../ui/typography"; import { standardFilterFn } from "./elements/utils"; +import { CircleAlert } from "lucide-react"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip"; export type ExtendedServerUser = ServerUser & { authType: string, @@ -85,7 +87,7 @@ function EditUserDialog(props: { )} - onSubmit={async (values) => await props.user.update(values)} + onSubmit={async (values) => { await props.user.update(values); }} cancelButton />; } @@ -153,18 +155,30 @@ export const commonUserColumns: ColumnDef[] = [ { accessorKey: "primaryEmail", header: ({ column }) => , - cell: ({ row }) => {row.original.primaryEmail}, + cell: ({ row }) => + + + + + + Email not verified + + + }> + {row.original.primaryEmail} + , + }, + { + accessorKey: "emailVerified", + header: ({ column }) => , + cell: ({ row }) => {row.original.emailVerified === 'verified' ? '✓' : '✗'}, + filterFn: standardFilterFn }, ]; const columns: ColumnDef[] = [ ...commonUserColumns, - { - accessorKey: "emailVerified", - header: ({ column }) => , - cell: ({ row }) => {row.original.emailVerified === 'verified' ? '✓' : ''}, - filterFn: standardFilterFn - }, { accessorKey: "authType", header: ({ column }) => , @@ -192,5 +206,10 @@ export function extendUsers(users: ServerUser[]): ExtendedServerUser[] { export function UserTable(props: { users: ServerUser[] }) { const extendedUsers: ExtendedServerUser[] = useMemo(() => extendUsers(props.users), [props.users]); - return ; + return ; } \ No newline at end of file