'use client'; import { useState } from 'react'; import Link from 'next/link'; import { usePathname, useRouter } from 'next/navigation'; import { zodResolver } from '@hookform/resolvers/zod'; import { ColumnDef } from '@tanstack/react-table'; import { EllipsisVertical } from 'lucide-react'; import { useForm, useWatch } from 'react-hook-form'; import * as z from 'zod'; import { formatDateTime } from '@kit/shared/dates'; import { Tables } from '@kit/supabase/database'; import { Button } from '@kit/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@kit/ui/dropdown-menu'; import { DataTable } from '@kit/ui/enhanced-data-table'; import { Form, FormControl, FormField, FormItem } from '@kit/ui/form'; import { Input } from '@kit/ui/input'; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from '@kit/ui/select'; import { AdminDeleteAccountDialog } from './admin-delete-account-dialog'; import { AdminDeleteUserDialog } from './admin-delete-user-dialog'; import { AdminImpersonateUserDialog } from './admin-impersonate-user-dialog'; import { AdminResetPasswordDialog } from './admin-reset-password-dialog'; type Account = Tables<'accounts'>; const FiltersSchema = z.object({ type: z.enum(['all', 'team', 'personal']), query: z.string().optional(), }); export function AdminAccountsTable( props: React.PropsWithChildren<{ data: Account[]; pageCount: number; pageSize: number; page: number; filters: { type: 'all' | 'team' | 'personal'; query: string; }; }>, ) { return (
); } function AccountsTableFilters(props: { filters: z.output; }) { const form = useForm({ resolver: zodResolver(FiltersSchema), defaultValues: { type: props.filters?.type ?? 'all', query: props.filters?.query ?? '', }, mode: 'onChange', reValidateMode: 'onChange', }); const router = useRouter(); const pathName = usePathname(); const onSubmit = ({ type, query }: z.output) => { const params = new URLSearchParams({ account_type: type, query: query ?? '', }); const url = `${pathName}?${params.toString()}`; router.push(url); }; const type = useWatch({ control: form.control, name: 'type' }); const options = { all: 'All Accounts', team: 'Team', personal: 'Personal', }; return (
onSubmit(data))} > ( )} /> } /> Actions View } /> {isPersonalAccount && ( <> setActiveDialog('reset-password')} > Send Reset Password link setActiveDialog('impersonate')} > Impersonate User setActiveDialog('delete-user')} > Delete Personal Account )} {!isPersonalAccount && ( setActiveDialog('delete-account')} > Delete Team Account )} {isPersonalAccount && ( <> !open && setActiveDialog(null)} /> !open && setActiveDialog(null)} /> !open && setActiveDialog(null)} /> )} {!isPersonalAccount && ( !open && setActiveDialog(null)} /> )} ); }