import { ViewType } from '@oinone/kunlun-meta';
import { ViewCache } from '@oinone/kunlun-engine';
import { SPI } from '@oinone/kunlun-spi';
import { Widget } from '@oinone/kunlun-vue-widget';
import { Condition } from '@oinone/kunlun-request';
import { FormFieldWidget } from '../../../../basic';
import { DefaultFieldPermissionWidget } from '../permission-field/DefaultFieldPermissionWidget';
import { ResourcePermissionUserModel } from '../../../permission/type';
import { UserTableWidget } from '../../../permission/field/internal-widget/UserTableWidget';
import { createRuntimeContextForWidget } from '../../../../tags';
import Component from './UserPermission.vue';
@SPI.ClassFactory(FormFieldWidget.Token({ widget: 'default-user-permission' }))
export class DefaultUserPermissionWidget extends DefaultFieldPermissionWidget {
public initialize(props: any): this {
super.initialize(props);
this.setComponent(Component);
return this;
}
protected userTable: UserTableWidget | undefined;
@Widget.Reactive()
protected get tableModelXml() {
return `
`;
}
@Widget.Reactive()
protected get tableFieldXml() {
return '';
}
@Widget.Watch('formData.id', { immediate: true, deep: true })
protected fetchNodeByRole(id) {
if (id) {
const id = this.formData.id as string;
this.userTable!.setDefaultCondition(new Condition('roles.id').equal(id));
this.userTable?.tableRefreshProcess();
}
}
protected async createModelTableWidget() {
this.userTable?.dispose();
this.userTable = undefined;
const view = await ViewCache.compile(
ResourcePermissionUserModel.model,
'$$field-permission-user-table-view',
this.tableModelXml
);
if (!view) {
return;
}
const runtimeContext = createRuntimeContextForWidget({
...view,
type: ViewType.Table
});
const runtimeContextHandle = runtimeContext.handle;
this.userTable = this.createWidget(UserTableWidget, 'model', {
metadataHandle: runtimeContextHandle,
rootHandle: runtimeContextHandle,
template: runtimeContext.viewTemplate,
inline: true
}) as any;
}
@Widget.Method()
protected onTableSearch(type: 'model' | 'field', params: Record) {
let condition!: Condition;
Object.entries(params).forEach(([key, val]) => {
if (val) {
const cond = new Condition(key).like(`%${val}%`);
if (!condition) {
condition = cond;
} else {
condition.and(cond);
}
}
});
this.userTable!.tableRefreshProcess(condition);
}
}