You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.0 KiB
59 lines
2.0 KiB
4 years ago
|
import { inject, InjectionKey, provide, ComputedRef, computed } from 'vue';
|
||
|
import { ColProps } from '../grid';
|
||
|
import { RequiredMark, ValidationRule } from './Form';
|
||
|
import { ValidateStatus, FieldExpose } from './FormItem';
|
||
|
import { FormLabelAlign } from './interface';
|
||
|
|
||
|
export interface FormContextProps {
|
||
|
model?: ComputedRef<any>;
|
||
|
vertical: ComputedRef<boolean>;
|
||
|
name?: ComputedRef<string>;
|
||
|
colon?: ComputedRef<boolean>;
|
||
|
labelAlign?: ComputedRef<FormLabelAlign>;
|
||
|
labelCol?: ComputedRef<ColProps>;
|
||
|
wrapperCol?: ComputedRef<ColProps>;
|
||
|
requiredMark?: ComputedRef<RequiredMark>;
|
||
|
//itemRef: (name: (string | number)[]) => (node: React.ReactElement) => void;
|
||
|
addField: (eventKey: string, field: FieldExpose) => void;
|
||
|
removeField: (eventKey: string) => void;
|
||
|
validateTrigger?: ComputedRef<string | string[]>;
|
||
|
rules?: ComputedRef<{ [k: string]: ValidationRule[] | ValidationRule }>;
|
||
|
}
|
||
|
|
||
|
export const FormContextKey: InjectionKey<FormContextProps> = Symbol('formContextKey');
|
||
|
|
||
|
export const useProvideForm = (state: FormContextProps) => {
|
||
|
provide(FormContextKey, state);
|
||
|
};
|
||
|
|
||
|
export const useInjectForm = () => {
|
||
|
return inject(FormContextKey, {
|
||
|
labelAlign: computed(() => 'right' as FormLabelAlign),
|
||
|
vertical: computed(() => false),
|
||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
|
addField: (_eventKey: string, _field: FieldExpose) => {},
|
||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
|
removeField: (_eventKey: string) => {},
|
||
|
});
|
||
|
};
|
||
|
|
||
|
/** Used for ErrorList only */
|
||
|
export interface FormItemPrefixContextProps {
|
||
|
prefixCls: ComputedRef<string>;
|
||
|
status?: ComputedRef<ValidateStatus>;
|
||
|
}
|
||
|
|
||
|
export const FormItemPrefixContextKey: InjectionKey<FormItemPrefixContextProps> = Symbol(
|
||
|
'formItemPrefixContextKey',
|
||
|
);
|
||
|
|
||
|
export const useProvideFormItemPrefix = (state: FormItemPrefixContextProps) => {
|
||
|
provide(FormItemPrefixContextKey, state);
|
||
|
};
|
||
|
|
||
|
export const useInjectFormItemPrefix = () => {
|
||
|
return inject(FormItemPrefixContextKey, {
|
||
|
prefixCls: computed(() => ''),
|
||
|
});
|
||
|
};
|