From b172b1e7e6195b5067f0c80f31ce345530151371 Mon Sep 17 00:00:00 2001 From: Burcu Noyan Date: Wed, 15 Apr 2026 18:04:30 -0400 Subject: [PATCH 1/3] add ability to toggle base template from isolated and edit --- packages/base/card-api.gts | 19 +- .../default-templates/isolated-and-edit.gts | 5 +- packages/base/menu-items.ts | 53 +++++ .../operator-mode/interact-submode.gts | 30 ++- .../components/operator-mode/stack-item.gts | 8 + packages/host/app/lib/stack-item.ts | 6 + .../services/operator-mode-state-service.ts | 26 ++- .../components/operator-mode-test.gts | 60 ++++++ .../components/operator-mode/setup.gts | 30 +++ .../tests/integration/realm-indexing-test.gts | 2 + .../tests/unit/card-def-menu-items-test.ts | 190 ++++++++++++++++++ 11 files changed, 423 insertions(+), 6 deletions(-) diff --git a/packages/base/card-api.gts b/packages/base/card-api.gts index 3d7dea9f99f..71098db1d41 100644 --- a/packages/base/card-api.gts +++ b/packages/base/card-api.gts @@ -2306,10 +2306,14 @@ export type ViewCardFn = ( stackIndex?: number; fieldType?: 'linksTo' | 'contains' | 'containsMany' | 'linksToMany'; fieldName?: string; + useBaseTemplate?: boolean; }, ) => void; -export type EditCardFn = (card: CardDef) => void; +export type EditCardFn = ( + card: CardDef, + opts?: { useBaseTemplate?: boolean }, +) => void; export type SaveCardFn = (id: string) => void; @@ -2794,6 +2798,14 @@ export class CardDef extends BaseDef { static atom: BaseDefComponent = DefaultAtomViewTemplate; static head: BaseDefComponent = DefaultHeadTemplate; + static get hasCustomEditTemplate(): boolean { + return this.edit !== CardDef.edit; + } + + static get hasCustomIsolatedTemplate(): boolean { + return this.isolated !== CardDef.isolated; + } + static prefersWideFormat = false; // whether the card is full-width in the stack static headerColor: string | null = null; // set string color value if the stack-item header has a background color @@ -3053,7 +3065,10 @@ function lazilyLoadLink( inflightLoads = new Map(); inflightLinkLoads.set(instance, inflightLoads); } - let reference = resolveCardReference(link, instance.id ?? instance[relativeTo]); + let reference = resolveCardReference( + link, + instance.id ?? instance[relativeTo], + ); let key = `${field.name}/${reference}`; let promise = inflightLoads.get(key); let store = getStore(instance); diff --git a/packages/base/default-templates/isolated-and-edit.gts b/packages/base/default-templates/isolated-and-edit.gts index 2958e7dec34..0c80e73bdaf 100644 --- a/packages/base/default-templates/isolated-and-edit.gts +++ b/packages/base/default-templates/isolated-and-edit.gts @@ -57,7 +57,10 @@ export default class DefaultCardDefTemplate extends GlimmerComponent<{ }