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

View File

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

View File

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

View File

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

View File

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

View File

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