import { defineComponent, type ComponentDefinition } from './component'; import { fieldReferences, manifestObject, manifestField, type ObjectReference, type DefinitionFieldReference, } from './custom-object'; export interface DefinedObjectSearchConfig { toDict(): { type: 'CUSTOM_OBJECT_SEARCH_CONFIG'; model_rql_name: string; search_response_fields: string[] }; } export type DefineObjectSearchConfigProps = { fields: readonly NoInfer>[]; }; export function defineObjectSearchConfig( reference: TObject, props: DefineObjectSearchConfigProps, ): DefinedObjectSearchConfig { const object = manifestObject(reference); const fields = props.fields.map((field) => manifestField(reference, field)); return objectSearchConfigComponent.register( { toDict: () => ({ type: 'CUSTOM_OBJECT_SEARCH_CONFIG' as const, model_rql_name: object.getApiName(), search_response_fields: fields.map((field) => field.getApiName()), }), }, reference, props, ); } const objectSearchConfigComponent: ComponentDefinition = defineComponent({ type: 'CUSTOM_OBJECT_SEARCH_CONFIG', define: defineObjectSearchConfig, references: (_definition, object, props) => [ object, ...props.fields.flatMap((field) => fieldReferences(object, field)), ], });