useMemberManagement.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { useState, useCallback, useEffect } from 'react';
  2. import { Member } from '../types/member';
  3. import { fetchMembers as fetchMembersApi, addMember as addMemberApi, updateMember as updateMemberApi, deleteMember as deleteMemberApi } from '../services/memberService';
  4. export const useMemberManagement = () => {
  5. const [members, setMembers] = useState<Member[]>([]);
  6. const [loading, setLoading] = useState(false);
  7. const fetchMembers = useCallback(async () => {
  8. setLoading(true);
  9. try {
  10. const fetchedMembers = await fetchMembersApi();
  11. setMembers(fetchedMembers);
  12. console.log('Fetched members:', fetchedMembers);
  13. } catch (error) {
  14. console.error('Failed to load members:', error);
  15. } finally {
  16. setLoading(false);
  17. }
  18. }, []);
  19. useEffect(() => {
  20. fetchMembers();
  21. }, [fetchMembers]);
  22. const addMember = async (member: Omit<Member, 'id'>) => {
  23. try {
  24. await addMemberApi(member);
  25. await fetchMembers();
  26. } catch (error) {
  27. console.error('Failed to add member:', error);
  28. throw error;
  29. }
  30. };
  31. const editMember = async (updatedMember: Member) => {
  32. try {
  33. await updateMemberApi(updatedMember);
  34. await fetchMembers();
  35. } catch (error) {
  36. console.error('Failed to update member:', error);
  37. throw error;
  38. }
  39. };
  40. const deleteMember = async (memberId: string) => {
  41. try {
  42. await deleteMemberApi(memberId);
  43. await fetchMembers();
  44. } catch (error) {
  45. console.error('Failed to delete member:', error);
  46. throw error;
  47. }
  48. };
  49. return {
  50. members,
  51. loading,
  52. fetchMembers,
  53. addMember,
  54. editMember,
  55. deleteMember,
  56. };
  57. };