59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
import { useState, useCallback } from 'react';
|
|
import { supabaseService } from '@/hooks/supabaseService';
|
|
|
|
export const useTeamMembership = (teamId) => {
|
|
const [loading, setLoading] = useState(false);
|
|
const [memberships, setMemberships] = useState([]);
|
|
|
|
const loadMemberships = useCallback(async () => {
|
|
if (!teamId) return;
|
|
|
|
setLoading(true);
|
|
try {
|
|
const result = await SupabaseService.select('team_memberships', {
|
|
select: '*',
|
|
relations: {
|
|
user: 'id, email, name'
|
|
},
|
|
match: { teamId }
|
|
});
|
|
setMemberships(result.data || []);
|
|
} catch (error) {
|
|
console.error('获取成员列表失败:', error);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}, [teamId]);
|
|
|
|
const addMembership = async (values) => {
|
|
const result = await supabaseService.insert('team_memberships', {
|
|
...values,
|
|
teamId
|
|
});
|
|
await loadMemberships();
|
|
return result[0];
|
|
};
|
|
|
|
const updateMembership = async (id, values) => {
|
|
const result = await supabaseService.update('team_memberships',
|
|
{ id },
|
|
values
|
|
);
|
|
await loadMemberships();
|
|
return result[0];
|
|
};
|
|
|
|
const deleteMembership = async (id) => {
|
|
await supabaseService.delete('team_memberships', { id });
|
|
await loadMemberships();
|
|
};
|
|
|
|
return {
|
|
loading,
|
|
memberships,
|
|
loadMemberships,
|
|
addMembership,
|
|
updateMembership,
|
|
deleteMembership,
|
|
};
|
|
}; |