feat: hackathon
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import { useTeamById, useTeamMembers, useUserMe, useTeamSubmission } from '@imphnen-frontend-service/service';
|
||||
|
||||
/**
|
||||
* Hook to check if current user is a member of the team
|
||||
*/
|
||||
export const useTeamMembership = (teamId: string) => {
|
||||
const { data: userData } = useUserMe();
|
||||
const { data: membersData } = useTeamMembers(teamId);
|
||||
|
||||
const currentUser = userData?.data;
|
||||
const members = membersData?.data || [];
|
||||
|
||||
const isMember = members.some(m => m.user_id === currentUser?.id);
|
||||
const currentMember = members.find(m => m.user_id === currentUser?.id);
|
||||
|
||||
return {
|
||||
isMember,
|
||||
currentMember,
|
||||
memberRole: currentMember?.role,
|
||||
memberStatus: currentMember?.status,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Hook to check if current user is the team leader
|
||||
*/
|
||||
export const useIsTeamLeader = (teamId: string) => {
|
||||
const { data: teamData } = useTeamById(teamId);
|
||||
const { data: userData } = useUserMe();
|
||||
|
||||
const team = teamData?.data;
|
||||
const currentUser = userData?.data;
|
||||
|
||||
const isLeader = currentUser?.id === team?.leader_id;
|
||||
|
||||
return {
|
||||
isLeader,
|
||||
leaderId: team?.leader_id,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Hook to get team submission status
|
||||
*/
|
||||
export const useTeamSubmissionStatus = (teamId: string) => {
|
||||
const { data: submissionData, isLoading } = useTeamSubmission(teamId, !!teamId);
|
||||
|
||||
const hasSubmission = !!submissionData?.data;
|
||||
const submission = submissionData?.data;
|
||||
const isSubmitted = submission?.status === 'submitted';
|
||||
|
||||
return {
|
||||
hasSubmission,
|
||||
isSubmitted,
|
||||
submission,
|
||||
isLoading,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Hook to check if current user can perform team actions
|
||||
*/
|
||||
export const useTeamPermissions = (teamId: string) => {
|
||||
const { isLeader } = useIsTeamLeader(teamId);
|
||||
const { isMember } = useTeamMembership(teamId);
|
||||
const { hasSubmission } = useTeamSubmissionStatus(teamId);
|
||||
|
||||
return {
|
||||
canEditTeam: isLeader,
|
||||
canManageMembers: isLeader,
|
||||
canSubmitProject: isLeader && !hasSubmission,
|
||||
canViewTeam: isMember,
|
||||
canViewSubmission: isMember,
|
||||
canAccessChat: isMember,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user