fix: form support `disabledOnInputListener` (#5127)

* fix: form support `disabledOnInputListener`

* chore: docs update
dev-v5
Netfan 2024-12-13 11:18:45 +08:00 committed by GitHub
parent 1d3729aa24
commit be208fe915
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 24 additions and 4 deletions

View File

@ -14,6 +14,8 @@ setupVbenForm<ComponentType>({
Upload: 'fileList',
CheckboxGroup: 'model-value',
},
// select等组件的筛选功能会抛出input事件需要禁用表单的input事件监听以免错误地更新了组件值
disabledOnInputListener: true,
},
defineRules: {
required: (value, _params, ctx) => {

View File

@ -139,6 +139,7 @@ const [Form, formApi] = useVbenForm({
fieldName: 'select',
label: 'Select',
componentProps: {
filterable: true,
options: [
{ value: 'A', label: '选项A' },
{ value: 'B', label: '选项B' },

View File

@ -44,11 +44,15 @@ export function setupVbenForm<
>(options: VbenFormAdapterOptions<T>) {
const { config, defineRules } = options;
const { disabledOnChangeListener = false, emptyStateValue = undefined } =
(config || {}) as FormCommonConfig;
const {
disabledOnChangeListener = false,
disabledOnInputListener = false,
emptyStateValue = undefined,
} = (config || {}) as FormCommonConfig;
Object.assign(DEFAULT_FORM_COMMON_CONFIG, {
disabledOnChangeListener,
disabledOnInputListener,
emptyStateValue,
});

View File

@ -33,6 +33,7 @@ const {
description,
disabled,
disabledOnChangeListener,
disabledOnInputListener,
emptyStateValue,
fieldName,
formFieldProps,
@ -227,10 +228,14 @@ function fieldBindEvent(slotProps: Record<string, any>) {
return onChange?.(e?.target?.[bindEventField] ?? e);
},
onInput: () => {},
...(disabledOnInputListener ? { onInput: undefined } : {}),
};
}
return {};
return disabledOnInputListener
? {
onInput: undefined,
}
: {};
}
function createComponentProps(slotProps: Record<string, any>) {

View File

@ -90,6 +90,7 @@ const computedSchema = computed(
controlClass = '',
disabled,
disabledOnChangeListener = false,
disabledOnInputListener = false,
emptyStateValue = undefined,
formFieldProps = {},
formItemClass = '',
@ -111,6 +112,7 @@ const computedSchema = computed(
return {
disabled,
disabledOnChangeListener,
disabledOnInputListener,
emptyStateValue,
hideLabel,
hideRequiredMark,

View File

@ -154,6 +154,11 @@ export interface FormCommonConfig {
* @default false
*/
disabledOnChangeListener?: boolean;
/**
* input
* @default false
*/
disabledOnInputListener?: boolean;
/**
* ,undefinednaive-uinull
*/
@ -371,6 +376,7 @@ export interface VbenFormAdapterOptions<
config?: {
baseModelPropName?: string;
disabledOnChangeListener?: boolean;
disabledOnInputListener?: boolean;
emptyStateValue?: null | undefined;
modelPropNameMap?: Partial<Record<T, string>>;
};