import { Badge } from "@workspace/ui/components/badge"; import { Button } from "@workspace/ui/components/button"; import { ProTable, type ProTableActions, } from "@workspace/ui/composed/pro-table/pro-table"; import { getFamilyList } from "@workspace/ui/services/admin/user"; import { useRef } from "react"; import { useTranslation } from "react-i18next"; import { formatDate } from "@/utils/common"; import { getFamilyStatusLabel, isFamilyStatusActive } from "./enums"; import { FamilyDetailSheet } from "./family-detail-sheet"; interface FamilyManagementProps { initialFamilyId?: number; initialUserId?: number; onChanged?: () => void; } export default function FamilyManagement({ initialFamilyId, initialUserId, onChanged, }: Readonly) { const { t } = useTranslation("user"); const ref = useRef(null); const initialFilters = { family_id: initialFamilyId || undefined, user_id: initialUserId || undefined, }; return ( action={ref} actions={{ render: (row) => [ { ref.current?.refresh(); onChanged?.(); }} trigger={} />, ], }} columns={[ { accessorKey: "family_id", header: t("familyId", "Family ID"), }, { accessorKey: "owner_identifier", header: t("owner", "Owner"), cell: ({ row }) => `${row.original.owner_identifier} (ID: ${row.original.owner_user_id})`, }, { accessorKey: "status", header: t("status", "Status"), cell: ({ row }) => { const status = row.getValue("status") as string; return isFamilyStatusActive(status) ? ( {t("statusActive", "Active")} ) : ( {getFamilyStatusLabel(t, status)} ); }, }, { accessorKey: "active_member_count", header: t("memberCount", "Member Count"), cell: ({ row }) => `${row.original.active_member_count}/${row.original.max_members}`, }, { accessorKey: "max_members", header: t("familyMaxMembers", "Max Members"), }, { accessorKey: "created_at", header: t("createdAt", "Created At"), cell: ({ row }) => formatDate(row.getValue("created_at")), }, { accessorKey: "updated_at", header: t("updatedAt", "Updated At"), cell: ({ row }) => formatDate(row.getValue("updated_at")), }, ]} header={{ title: t("familyManagement", "Family Group Management"), }} initialFilters={initialFilters} key={String(initialFamilyId || initialUserId || "all")} params={[ { key: "keyword", placeholder: t("search", "Search"), }, { key: "status", placeholder: t("status", "Status"), options: [ { label: getFamilyStatusLabel(t, "active"), value: "active" }, { label: getFamilyStatusLabel(t, "disabled"), value: "disabled" }, ], }, { key: "owner_user_id", placeholder: t("familyOwnerUserId", "Owner User ID"), }, { key: "family_id", placeholder: t("familyId", "Family ID"), }, { key: "user_id", placeholder: t("userId", "User ID"), }, ]} request={async (pagination, filter) => { const { data } = await getFamilyList({ ...pagination, ...filter, }); return { list: data.data?.list || [], total: data.data?.total || 0, }; }} /> ); }