diff --git a/packages/base/default-templates/field-edit.gts b/packages/base/default-templates/field-edit.gts index 0bdbaec7ce8..92b4427a6ad 100644 --- a/packages/base/default-templates/field-edit.gts +++ b/packages/base/default-templates/field-edit.gts @@ -1,5 +1,5 @@ import GlimmerComponent from '@glimmer/component'; -import type { FieldDef } from '../card-api'; +import type { BaseDef, FieldDef } from '../card-api'; import { FieldContainer } from '@cardstack/boxel-ui/components'; import { eq } from '@cardstack/boxel-ui/helpers'; import { startCase } from 'lodash-es'; @@ -7,12 +7,17 @@ import { getField } from '@cardstack/runtime-common'; export default class FieldDefEditTemplate extends GlimmerComponent<{ Args: { + cardOrField: typeof BaseDef; model: FieldDef; fields: Record GlimmerComponent>; }; }> { getFieldIcon = (key: string) => { - return getField(this.args.model.constructor, key)?.card?.icon; + // Read the field off the field class (@cardOrField), not + // @model.constructor: the host can invoke this template for a tick while + // the model instance is still resolving, and dereferencing the undefined + // model there crashes the render. + return getField(this.args.cardOrField, key)?.card?.icon; };