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()) {