feat(admin/members): mark-as-Slack-invited button + date display

Replaces the placeholder Slack-invite handler with a call to the new
PATCH /api/admin/members/:id/slack-status endpoint. Status labels are
reworded to match reality (no Slack API call from this app):

- Pending → Not yet invited
- Invited → Invited <slackInvitedAt>
- Action button copy → 'Mark as Slack invited'
- Removes slackInviteStatus reads from the member detail page (the
  remaining repo-wide sweep lands in the cleanup task).
This commit is contained in:
Jennie Robinson Faber 2026-04-29 12:25:18 +01:00
parent 0981596ea2
commit c2999810c6
2 changed files with 95 additions and 22 deletions

View file

@ -124,8 +124,11 @@
</span>
</td>
<td>
<span :class="member.slackInvited ? 'status-ok' : 'status-dim'">
{{ member.slackInvited ? "Invited" : "Pending" }}
<span v-if="member.slackInvited" class="status-ok">
Invited {{ formatDate(member.slackInvitedAt) }}
</span>
<span v-else class="status-dim">
Not yet invited
</span>
</td>
<td class="col-mono col-date">
@ -135,8 +138,12 @@
<NuxtLink :to="`/admin/members/${member._id}`" class="link-btn" @click.stop
>View</NuxtLink
>
<button class="link-btn" @click.stop="sendSlackInvite(member)">
Slack
<button
v-if="!member.slackInvited"
class="link-btn"
@click.stop="markSlackInvited(member)"
>
Mark as Slack invited
</button>
<button class="link-btn" @click.stop="editMember(member)">Edit</button>
</td>
@ -829,8 +836,24 @@ const submitInvites = async () => {
};
// --- Existing actions ---
const sendSlackInvite = (member) => {
console.log("Send Slack invite to:", member.email);
const markSlackInvited = async (member) => {
try {
const res = await $fetch(
`/api/admin/members/${member._id}/slack-status`,
{
method: "PATCH",
body: { slackInvited: true },
},
);
Object.assign(member, res.member);
toast.add({ title: "Marked as Slack invited", color: "success" });
} catch (err) {
toast.add({
title: "Failed to mark Slack invited",
description: err.data?.statusMessage || err.message,
color: "error",
});
}
};
// --- Edit Member ---