diff --git a/.changeset/activity-user-names.md b/.changeset/activity-user-names.md
new file mode 100644
index 000000000..3b1026e46
--- /dev/null
+++ b/.changeset/activity-user-names.md
@@ -0,0 +1,4 @@
+---
+---
+
+Display user names instead of Slack IDs in proactive outreach history
diff --git a/server/public/admin-outreach.html b/server/public/admin-outreach.html
index b0ee31d8b..ffe78b0f0 100644
--- a/server/public/admin-outreach.html
+++ b/server/public/admin-outreach.html
@@ -663,10 +663,12 @@
New Variant
function renderHistory() {
const tbody = document.getElementById('history-body');
- tbody.innerHTML = history.map(item => `
+ tbody.innerHTML = history.map(item => {
+ const userName = item.slack_display_name || item.slack_real_name || item.slack_user_id;
+ return `
| ${formatDate(item.sent_at)} |
- ${escapeHtml(item.slack_user_id)} |
+ ${escapeHtml(userName)} |
${item.outreach_type} |
${item.tone ? `${item.tone} / ${item.approach}` : '—'} |
@@ -680,7 +682,7 @@ New Variant
|
- `).join('');
+ `}).join('');
}
async function loadVariants() {
diff --git a/server/src/db/insights-db.ts b/server/src/db/insights-db.ts
index 91d75f395..6762f52cb 100644
--- a/server/src/db/insights-db.ts
+++ b/server/src/db/insights-db.ts
@@ -117,6 +117,11 @@ export interface ResponseAnalysis {
analysisNote: string;
}
+export interface MemberOutreachWithUser extends MemberOutreach {
+ slack_display_name: string | null;
+ slack_real_name: string | null;
+}
+
// Input types
export interface CreateInsightTypeInput {
name: string;
@@ -1295,9 +1300,13 @@ export class InsightsDatabase {
/**
* Get recent outreach history for admin dashboard
*/
- async getRecentOutreach(limit = 50): Promise {
- const result = await query(
- 'SELECT * FROM member_outreach ORDER BY sent_at DESC LIMIT $1',
+ async getRecentOutreach(limit = 50): Promise {
+ const result = await query(
+ `SELECT mo.*, sm.slack_display_name, sm.slack_real_name
+ FROM member_outreach mo
+ LEFT JOIN slack_user_mappings sm ON sm.slack_user_id = mo.slack_user_id
+ ORDER BY mo.sent_at DESC
+ LIMIT $1`,
[limit]
);
return result.rows;