Integrated new member state into manage members page
Implemented suspend/unsuspend
This commit is contained in:
@@ -135,4 +135,26 @@ export async function dischargeMember(data: Discharge): Promise<boolean> {
|
||||
throw new Error("Failed to discharge member");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function suspendMember(memberID: number): Promise<boolean> {
|
||||
const response = await fetch(`${addr}/members/suspend?target=${memberID}`, {
|
||||
credentials: 'include',
|
||||
method: 'POST',
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error("Failed to discharge member");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function unsuspendMember(memberID: number): Promise<boolean> {
|
||||
const response = await fetch(`${addr}/members/unsuspend?target=${memberID}`, {
|
||||
credentials: 'include',
|
||||
method: 'POST',
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error("Failed to discharge member");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
} from '@/components/ui/pagination'
|
||||
|
||||
// API & Types
|
||||
import { getMembersFiltered } from "@/api/member";
|
||||
import { getMembersFiltered, suspendMember, unsuspendMember } from "@/api/member";
|
||||
import { getUnits } from "@/api/units";
|
||||
import type { Member } from "@shared/types/member";
|
||||
import { MemberState } from "@shared/types/member";
|
||||
@@ -145,8 +145,12 @@
|
||||
isDischargeOpen.value = true
|
||||
}
|
||||
|
||||
function suspendMember(member: Member) {
|
||||
async function onSuspend(member: Member) {
|
||||
await suspendMember(member.member_id);
|
||||
}
|
||||
|
||||
async function onUnsuspend(member: Member) {
|
||||
await unsuspendMember(member.member_id);
|
||||
}
|
||||
|
||||
function handleDischargeSuccess(data) {
|
||||
@@ -222,7 +226,7 @@
|
||||
<TableHead class="w-[200px]">Member</TableHead>
|
||||
<TableHead>Rank</TableHead>
|
||||
<TableHead>Unit</TableHead>
|
||||
<TableHead>Status</TableHead>
|
||||
<TableHead>State</TableHead>
|
||||
<TableHead></TableHead>
|
||||
<TableHead class="text-right">Actions</TableHead>
|
||||
</TableRow>
|
||||
@@ -238,7 +242,7 @@
|
||||
<TableCell>{{ member.rank }}</TableCell>
|
||||
<TableCell>{{ member.unit }}</TableCell>
|
||||
<TableCell>
|
||||
<Badge variant="outline" class="capitalize font-normal">{{ member.status }}</Badge>
|
||||
<Badge variant="outline" class="capitalize font-normal">{{ MemberState[member.member_state] }}</Badge>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<Badge v-if="member.loa_until" variant="secondary"
|
||||
@@ -259,10 +263,14 @@
|
||||
class="text-destructive focus:bg-destructive focus:text-destructive-foreground font-medium">
|
||||
Discharge Member
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem @click="suspendMember(member)"
|
||||
<DropdownMenuItem v-if="member.member_state !== MemberState.Suspended" @click="onSuspend(member)"
|
||||
class="text-destructive focus:bg-destructive focus:text-destructive-foreground font-medium">
|
||||
Suspend Member
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem v-else @click="onUnsuspend(member)"
|
||||
class="text-destructive focus:bg-destructive focus:text-destructive-foreground font-medium">
|
||||
Remove Suspension
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</TableCell>
|
||||
|
||||
Reference in New Issue
Block a user