fix: filter join requests to only show pending status
- Add .eq('status', 'pending') filter to useTeamJoinRequests hook
- Add toast notifications for approve/reject actions on members page
- Parse Supabase error messages to show user-friendly error text
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude
parent
cbb880a053
commit
eb0628ac3e
@@ -15,6 +15,7 @@ import {
|
|||||||
} from '@imphnen-frontend-service/service';
|
} from '@imphnen-frontend-service/service';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { zodResolver } from '@hookform/resolvers/zod';
|
import { zodResolver } from '@hookform/resolvers/zod';
|
||||||
|
import { toast } from 'sonner';
|
||||||
|
|
||||||
const ManageMembersPage: FC = (): ReactElement => {
|
const ManageMembersPage: FC = (): ReactElement => {
|
||||||
const { teamId } = useParams<{ teamId: string }>();
|
const { teamId } = useParams<{ teamId: string }>();
|
||||||
@@ -75,16 +76,20 @@ const ManageMembersPage: FC = (): ReactElement => {
|
|||||||
const handleApproveRequest = async (requestId: string) => {
|
const handleApproveRequest = async (requestId: string) => {
|
||||||
try {
|
try {
|
||||||
await respondToRequest({ requestId, action: 'approve' });
|
await respondToRequest({ requestId, action: 'approve' });
|
||||||
|
toast.success('Member added successfully!');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to approve request:', error);
|
console.error('Failed to approve request:', error);
|
||||||
|
toast.error((error as Error).message || 'Failed to approve request');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleRejectRequest = async (requestId: string) => {
|
const handleRejectRequest = async (requestId: string) => {
|
||||||
try {
|
try {
|
||||||
await respondToRequest({ requestId, action: 'reject' });
|
await respondToRequest({ requestId, action: 'reject' });
|
||||||
|
toast.success('Request rejected');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to reject request:', error);
|
console.error('Failed to reject request:', error);
|
||||||
|
toast.error((error as Error).message || 'Failed to reject request');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -442,7 +442,17 @@ export const useRespondToJoinRequest = (teamId: string) => {
|
|||||||
.update({ status: 'pending' })
|
.update({ status: 'pending' })
|
||||||
.eq('id', requestId);
|
.eq('id', requestId);
|
||||||
|
|
||||||
throw new Error('Failed to add member to team: ' + memberError.message);
|
// Parse Supabase error for user-friendly message
|
||||||
|
let errorMsg = memberError.message;
|
||||||
|
if (errorMsg.includes('Team already has 5 members') || errorMsg.includes('Team cannot have more than 5 members')) {
|
||||||
|
errorMsg = 'Team is full! Maximum 5 members allowed.';
|
||||||
|
} else if (errorMsg.includes('already in a team') || errorMsg.includes('User is already in a team')) {
|
||||||
|
errorMsg = 'This user is already in another team.';
|
||||||
|
} else if (errorMsg.includes('Bulk insert')) {
|
||||||
|
errorMsg = 'Invalid operation detected.';
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(errorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { success: true, action: 'accepted' };
|
return { success: true, action: 'accepted' };
|
||||||
|
|||||||
Reference in New Issue
Block a user