diff --git a/.changeset/shy-kings-crash.md b/.changeset/shy-kings-crash.md
new file mode 100644
index 0000000000..d21d7fc8c3
--- /dev/null
+++ b/.changeset/shy-kings-crash.md
@@ -0,0 +1,4 @@
+---
+---
+
+Add Schedule button to admin working groups page
diff --git a/.changeset/silly-paws-lick.md b/.changeset/silly-paws-lick.md
new file mode 100644
index 0000000000..7572fa4a1a
--- /dev/null
+++ b/.changeset/silly-paws-lick.md
@@ -0,0 +1,4 @@
+---
+---
+
+Fix admin meetings page crash when loading meetings and series
diff --git a/server/public/admin-meetings.html b/server/public/admin-meetings.html
index 88c10ad2f3..3460bbd0f7 100644
--- a/server/public/admin-meetings.html
+++ b/server/public/admin-meetings.html
@@ -463,7 +463,8 @@
Meeting Details
const response = await fetch(url);
if (!response.ok) throw new Error('Failed to load meetings');
- meetings = await response.json();
+ const data = await response.json();
+ meetings = data.meetings || [];
renderMeetings();
document.getElementById('loading').style.display = 'none';
@@ -479,15 +480,20 @@ Meeting Details
async function loadSeries() {
try {
const groupId = document.getElementById('groupFilter').value;
- let url = '/api/admin/meetings/series';
- if (groupId) {
- url += `?working_group_id=${groupId}`;
+
+ // Series endpoint requires a working group filter
+ if (!groupId) {
+ series = [];
+ renderSeries();
+ return;
}
+ const url = `/api/admin/meetings/series?working_group_id=${groupId}`;
const response = await fetch(url);
if (!response.ok) throw new Error('Failed to load series');
- series = await response.json();
+ const data = await response.json();
+ series = data.series || [];
renderSeries();
} catch (error) {
console.error('Error loading series:', error);
@@ -748,7 +754,8 @@ ${escapeHtml(s.title)}
const response = await fetch(`/api/admin/meetings/${id}`);
if (!response.ok) throw new Error('Failed to load meeting');
- viewingMeeting = await response.json();
+ const data = await response.json();
+ viewingMeeting = { ...data.meeting, attendees: data.attendees };
const m = viewingMeeting;
const group = workingGroups.find(g => g.id === m.working_group_id);
const date = new Date(m.start_time);
@@ -845,6 +852,18 @@ ${escapeHtml(s.title)}
async function init() {
await loadWorkingGroups();
await loadMeetings();
+
+ // Auto-open schedule modal if requested via URL
+ const params = new URLSearchParams(window.location.search);
+ if (params.get('action') === 'schedule') {
+ showCreateModal();
+ // Clear the action param to prevent re-triggering on refresh
+ params.delete('action');
+ const newUrl = params.toString()
+ ? `${window.location.pathname}?${params.toString()}`
+ : window.location.pathname;
+ window.history.replaceState({}, '', newUrl);
+ }
}
init();
diff --git a/server/public/admin-working-groups.html b/server/public/admin-working-groups.html
index 31e81ad277..cbc53404da 100644
--- a/server/public/admin-working-groups.html
+++ b/server/public/admin-working-groups.html
@@ -788,6 +788,7 @@ ${escapeHtml(group.name)}
+