import { useState, useEffect, useCallback } from 'react'; import { inviteService } from '../services'; import type { InviteLinkResponse, CreateInviteLinkRequest } from '../types'; import { showToast } from '../utils/toast'; import { showErrorToast } from '../utils/errorHandler'; export function useInviteLink() { const [links, setLinks] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const loadLinks = useCallback(async () => { try { setLoading(true); setError(null); const data = await inviteService.getMyLinks(); setLinks(data); } catch (err) { setError(err as Error); showErrorToast(err); } finally { setLoading(false); } }, []); useEffect(() => { loadLinks(); }, [loadLinks]); const createLink = useCallback(async (data: CreateInviteLinkRequest) => { try { const link = await inviteService.create(data); showToast.success('Invite link created successfully'); await loadLinks(); return link; } catch (err) { showErrorToast(err); throw err; } }, [loadLinks]); const deleteLink = useCallback(async (token: string) => { try { await inviteService.delete(token); showToast.success('Invite link deleted successfully'); await loadLinks(); } catch (err) { showErrorToast(err); throw err; } }, [loadLinks]); const validateLink = useCallback(async (token: string) => { try { return await inviteService.validate(token); } catch (err) { showErrorToast(err); throw err; } }, []); const joinFamily = useCallback(async (token: string) => { try { const result = await inviteService.join(token); showToast.success(result.message); return result; } catch (err) { showErrorToast(err); throw err; } }, []); return { links, loading, error, loadLinks, createLink, deleteLink, validateLink, joinFamily, }; }