diff --git a/apps/control/src/app/control-state.service.ts b/apps/control/src/app/control-state.service.ts
index e50eae85e53..3e295a471bc 100644
--- a/apps/control/src/app/control-state.service.ts
+++ b/apps/control/src/app/control-state.service.ts
@@ -541,11 +541,14 @@ export class ControlStateService extends AsyncHandler {
/** Open select meeting modal */
public async selectMeeting(input?: string) {
- const cals = this.calendars();
- if (cals?.length) this.setCalendar(cals[0]);
this._dialog.open(SelectMeetingModalComponent, {
data: { input },
});
+ // Untracked so an effect that calls this does not re-run when the
+ // calendars load, which would open the list again
+ await untracked(() => this._cal.loadCalendars());
+ const first = untracked(this.calendars)[0];
+ if (!untracked(this._calendar) && first) this.setCalendar(first);
}
/** Open view help modal */
diff --git a/apps/control/src/app/error-text.ts b/apps/control/src/app/error-text.ts
new file mode 100644
index 00000000000..f052e272849
--- /dev/null
+++ b/apps/control/src/app/error-text.ts
@@ -0,0 +1,18 @@
+import { errorMessage } from '@placeos/common';
+
+/**
+ * Readable text for a failed request, for error notifications.
+ * Driver and API errors are plain objects (realtime errors carry `msg`),
+ * so they print as `[object Object]` when passed to a message directly.
+ */
+export function errorText(error: unknown): string {
+ const message = errorMessage(error);
+ if (message) return message;
+ const { msg, code, status } = (error ?? {}) as {
+ msg?: unknown;
+ code?: number;
+ status?: number;
+ };
+ if (typeof msg === 'string' && msg) return msg;
+ return `${code ?? status ?? 'unknown'}`;
+}
diff --git a/apps/control/src/app/tabbed-view/tab-outlet.component.ts b/apps/control/src/app/tabbed-view/tab-outlet.component.ts
index 7e181b81277..19481831426 100644
--- a/apps/control/src/app/tabbed-view/tab-outlet.component.ts
+++ b/apps/control/src/app/tabbed-view/tab-outlet.component.ts
@@ -131,6 +131,7 @@ import { TVControlsComponent } from './tv-controls.component';
@if (call()) {