import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { X, ChevronDown, ChevronUp } from 'lucide-react'; import { updateAsset } from '../../../services/assets-api'; import type { Asset, Organization, ShareItem } from '../../../types/assets'; interface ShareAssetModalProps { isOpen: boolean; onClose: () => void; asset: Asset | null; organizations: Organization[]; onSuccess: () => void; } export const ShareAssetModal: React.FC = ({ isOpen, onClose, asset, organizations, onSuccess }) => { const [sharesList, setSharesList] = useState([]); const [isSavingShare, setIsSavingShare] = useState(false); const [expandedOrgId, setExpandedOrgId] = useState(null); useEffect(() => { if (asset) { setSharesList( asset.sharedWith?.map(s => ({ organizationId: s.organizationId, userId: s.userId })) || [] ); } }, [asset]); const isOrgSharedEntirely = (orgId: string) => { return sharesList.some(s => s.organizationId === orgId && s.userId === null); }; const isUserSharedSpecifically = (orgId: string, userId: string) => { return sharesList.some(s => s.organizationId === orgId && s.userId === userId); }; const handleToggleOrg = (orgId: string) => { const isShared = isOrgSharedEntirely(orgId); if (isShared) { setSharesList(prev => prev.filter(s => s.organizationId !== orgId)); } else { setSharesList(prev => [ ...prev.filter(s => s.organizationId !== orgId), { organizationId: orgId, userId: null } ]); } }; const handleToggleUser = (orgId: string, userId: string) => { const isShared = isUserSharedSpecifically(orgId, userId); if (isShared) { setSharesList(prev => prev.filter(s => !(s.organizationId === orgId && s.userId === userId))); } else { setSharesList(prev => [ ...prev.filter(s => !(s.organizationId === orgId && s.userId === null)), { organizationId: orgId, userId } ]); } }; const handleShareSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!asset) return; setIsSavingShare(true); try { await updateAsset(asset.id, { shares: sharesList }); onSuccess(); onClose(); } catch (err) { console.error('Failed to update share permissions', err); } finally { setIsSavingShare(false); } }; return ( {isOpen && asset && (

Share Settings

{asset.title}

Select organizations or expand to specify exact users that can access this asset:

{organizations.length === 0 ? (

No partner organizations registered yet.

) : ( organizations.map(org => { const isEntireShared = isOrgSharedEntirely(org.id); const isExpanded = expandedOrgId === org.id; const activeUsers = org.users || []; const specificSharedCount = sharesList.filter(s => s.organizationId === org.id && s.userId !== null).length; return (
{isExpanded && ( {activeUsers.length === 0 ? (

No users found in this organization.

) : ( activeUsers.map(userItem => { const isUserShared = isUserSharedSpecifically(org.id, userItem.id); return ( ); }) )}
)}
); }) )}
)}
); };