import { type ActiveRecord, type RuntimeM2MField, SubmitRelationHandler, SubmitValue } from '@oinone/kunlun-engine'; import { ModelFieldType, ViewType } from '@oinone/kunlun-meta'; import type { ReturnPromise } from '@oinone/kunlun-shared'; import { SPI } from '@oinone/kunlun-spi'; import { FormFieldWidget, FormSubviewListFieldWidget, RelationQueryHelper } from '../../../../basic'; import { TABLE_WIDGET } from '../../../../typing'; @SPI.ClassFactory( FormFieldWidget.Token({ viewType: ViewType.Form, ttype: ModelFieldType.ManyToMany, // fixme @zbh 20250814 6.3.0版本使用多别称 // widget: ['table', TABLE_WIDGET] widget: TABLE_WIDGET }) ) export class FormM2MTableFieldWidget extends FormSubviewListFieldWidget { protected async refreshValueProcess() { if (this.isDataSourceProvider) { await super.refreshValueProcess(); this.submitCache?.reload(); this.subviewSubmitCache?.reload(); } } protected initSubviewData(): ReturnPromise { const view = this.runtimeSubviewContext.view; if (!view) { super.initSubviewData(); return; } const { formData, model, field, viewMode, submitType, relationUpdateType } = this; let queryData: ActiveRecord | undefined; if (RelationQueryHelper.isNeedQuery(field, viewMode, submitType, relationUpdateType)) { queryData = RelationQueryHelper.generatorM2MQueryData(model, field, formData); if (!queryData) { this.isDataSourceProvider = false; this.reloadDataSource([]); return; } } else { super.initSubviewData(); return; } if (!this.isDataSourceProvider) { this.reloadDataSource(undefined); } view.initialValue = [queryData]; this.isDataSourceProvider = false; } public async submit(submitValue: SubmitValue) { const { field, itemName, value, viewMode, submitCache, subviewSubmitCache, submitType, relationUpdateType } = this; return SubmitRelationHandler.M2M( field, itemName, submitValue, value, viewMode, subviewSubmitCache || submitCache, submitType, relationUpdateType ); } }