/** * The platform's DEFAULT entity form — pure derivations. * * Two surfaces build the SAME `CrudForm` from the same two server reads: the * Maintenance Engine page (its create/edit side sheet) and the inquiry v2 * action sheet (an Update/Create action with no page configured). The ordering * rule that turns catalog attributes + UdpObjectFieldInfo rows into form fields * lives here so both read it from one place — and so it is testable without a * catalog behind it. */ /** One catalog attribute (`catalogObject.properties[]`) — config-shaped. */ export interface EntityAttribute { name: string; friendlyName?: string; /** The referenced entity name, for a child-entity (foreign key) attribute. */ reference?: string; extendedProperties?: Record; [key: string]: unknown; } /** One UdpObjectFieldInfo row — the tenant's per-field maintenance config. */ export interface UdpFieldInfo { name: string; isPrimaryKey?: boolean; isIdentity?: boolean; dataType?: string; properties?: Record; [key: string]: unknown; } /** * Catalog attributes ordered and enriched by the entity's UdpObjectFieldInfo * rows: the field-info order IS the configured form order, and each matched * attribute carries its row's `properties` as `udpFieldProperties` (what * `useCrudActions` reads to pick an input). Attributes with no field-info row * keep their catalog order behind the configured ones. * * `undefined` when the entity has no field-info rows — there is no configured * form for it, which is the caller's cue to say so rather than render a * half-guessed one. */ export declare const mergeEntityAttributes: (catalogProperties: EntityAttribute[], udpFieldInfos: UdpFieldInfo[]) => EntityAttribute[]; //# sourceMappingURL=entityFormModel.d.ts.map