import React, { useState, useEffect } from "react"; import { Card, Title, Text, Button as TremorButton, Table, TableHead, TableHeaderCell, TableBody, TableRow, TableCell, } from "@tremor/react"; import { Button, message, Checkbox, Empty } from "antd"; import { ReloadOutlined, SaveOutlined } from "@ant-design/icons"; import { getTeamPermissionsCall, teamPermissionsUpdateCall } from "@/components/networking"; import { getPermissionInfo } from "./permission_definitions"; interface MemberPermissionsProps { teamId: string; accessToken: string | null; canEditTeam: boolean; } const MemberPermissions: React.FC = ({ teamId, accessToken, canEditTeam, }) => { const [permissions, setPermissions] = useState([]); const [selectedPermissions, setSelectedPermissions] = useState([]); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [hasChanges, setHasChanges] = useState(false); const fetchPermissions = async () => { try { setLoading(true); if (!accessToken) return; const response = await getTeamPermissionsCall(accessToken, teamId); const allPermissions = response.all_available_permissions || []; setPermissions(allPermissions); const teamPermissions = response.team_member_permissions || []; setSelectedPermissions(teamPermissions); setHasChanges(false); } catch (error) { message.error("Failed to load permissions"); console.error("Error fetching permissions:", error); } finally { setLoading(false); } }; useEffect(() => { fetchPermissions(); }, [teamId, accessToken]); const handlePermissionChange = (permission: string, checked: boolean) => { const newSelectedPermissions = checked ? [...selectedPermissions, permission] : selectedPermissions.filter((p) => p !== permission); setSelectedPermissions(newSelectedPermissions); setHasChanges(true); }; const handleSave = async () => { try { if (!accessToken) return; setSaving(true); await teamPermissionsUpdateCall(accessToken, teamId, selectedPermissions); message.success("Permissions updated successfully"); setHasChanges(false); } catch (error) { message.error("Failed to update permissions"); console.error("Error updating permissions:", error); } finally { setSaving(false); } }; const handleReset = () => { fetchPermissions(); }; if (loading) { return
Loading permissions...
; } const hasPermissions = permissions.length > 0; return (
Member Permissions {canEditTeam && hasChanges && (
Save Changes
)}
Control what team members can do when they are not team admins. {hasPermissions ? ( Method Endpoint Description Access {permissions.map((permission) => { const permInfo = getPermissionInfo(permission); return ( {permInfo.method} {permInfo.endpoint} {permInfo.description} handlePermissionChange(permission, e.target.checked) } disabled={!canEditTeam} /> ); })}
) : (
)}
); }; export default MemberPermissions;