"use client"; import React, { useState } from 'react'; import { Checkbox } from '@/components/ui/checkbox'; import { Label } from '@/components/ui/label'; import { Badge } from '@/components/ui/badge'; import { Users, Info } from 'lucide-react'; import Link from 'next/link'; export interface TeamShare { team_id: string; user_permissions: Record; } interface TeamShareConfigurationProps { userTeams: Array<{ id: string; name: string; description?: string; user_permission?: string; is_owner?: boolean; can_manage?: boolean; }>; value: TeamShare[]; onChange: (shares: TeamShare[]) => void; disabled?: boolean; } export function TeamShareConfiguration({ userTeams, value = [], onChange, disabled = false, }: TeamShareConfigurationProps) { const [selectedTeamIds, setSelectedTeamIds] = useState>( new Set(value.map((s) => s.team_id)) ); // Filter teams where user has 'share' permission, is owner, or can manage const shareableTeams = userTeams?.filter( (t) => t.user_permission === 'share' || t.user_permission === 'manager' || t.is_owner || t.can_manage ) || []; // Handle team selection const handleTeamToggle = (teamId: string, checked: boolean) => { const newSelected = new Set(selectedTeamIds); if (checked) { newSelected.add(teamId); // Add team with empty permissions (backend will auto-populate with 'read' for all members) const existingShare = value.find((s) => s.team_id === teamId); if (!existingShare) { onChange([...value, { team_id: teamId, user_permissions: {} }]); } } else { newSelected.delete(teamId); // Remove team from shares onChange(value.filter((s) => s.team_id !== teamId)); } setSelectedTeamIds(newSelected); }; if (shareableTeams.length === 0) { return (

You don't have permission to share to any teams yet.

Contact a team owner to get sharing permissions.

); } return (
{/* Info Message */}

Team members will have read access by default when you share to a team.

For fine-grained permission control (edit access, custom permissions), manage them in{' '} Team Management .

{/* Team Selection */}
{shareableTeams.map((team) => (
handleTeamToggle(team.id, checked as boolean) } disabled={disabled} />
))}
); }