import { BasicProps, ContainerSetDataOption, FormItemState, runTimeType } from '../../types'; import { TriggerEventItem } from '../Trigger/Trigger'; import React from 'react'; export declare type WrapperComponentType = React.ComponentClass | React.StatelessComponent | React.ClassicComponentClass; export interface ConnectTools extends BasicProps { /** * RCRE引擎执行当前组件的上下文 */ env: Props; /** * ExpressionString执行环境 */ runTime: runTimeType; /** * 注册事件 * @param {string} event * @param args */ registerEvent: (event: string, args: Object) => void; /** * 当有name属性时,使用这个函数来更新name所对应的值 * @param value */ updateNameValue: (value: any, options?: ContainerSetDataOption) => void; /** * 当有name属性时,使用这个函数来清空name所对应的值 */ clearNameValue: () => void; /** * 从name中获取数据 */ getNameValue: (name: string) => any; /** * 是否绑定了某个事件 * @param {string} event * @return {boolean} */ hasTriggerEvent: (event: string) => boolean; /** * 开启debounce模式,connect组件缓存的cache */ debounceCache: { [key: string]: any; }; /** * 是否正处于debounce状态 */ isDebouncing: boolean; form: { /** * 更新FormItem的状态 */ $setFormItem: (payload: Partial) => void; /** * 清空FormItem的状态 */ $deleteFormItem: (formItemName: string) => void; /** * 获取FormItem的信息 * @param {string} name * @returns {SET_FORM_ITEM_PAYLOAD} */ $getFormItem: (name: string) => FormItemState; /** * 是否处于Form组件下 */ isUnderForm?: boolean; }; /** * 动态生成React组件 * @param {object} config * @param {object} props * @returns {React.ReactNode} */ createReactNode: (config: any, props: object) => React.ReactNode; } export interface CommonOptions { propsMapping?: object; /** * 解析传入配置的方式 */ parseOptions?: { blackList?: string[]; isDeep?: boolean; whiteList?: string[]; }; /** * 手动设置数,默认为value */ nameKey?: string; /** * 收集name时跳过的属性 */ collectNameBlackList?: string[]; /** * 只要container组件更新,该组件一定会更新 */ forceUpdate?: boolean; /** * 满足一定条件就清空组件的值 */ autoClearCondition?: (value: any, props: any) => boolean; /** * 如果一个组件持有多个name,则需要实现这个函数来给Connect组件提供所有可能出现的name值 * @param props */ getAllNameKeys?: (props: any) => string[]; /** * 设置自动数据更新使用的回调函数,默认为onChange */ defaultNameCallBack?: string; /** * 在Container读取组件的值,并赋值到value属性之前进行一些数据处理 * @param value * @returns {any} */ beforeGetData?: (value: any, props: any) => any; /** * 在Container获取到组件通过updateNameValue函数写入的值之前进行一些数据处理 * @param value * @returns {any} */ beforeSetData?: (value: any, props: any) => any; /** * 获取默认值 * @param value * @returns {any} */ getDefaultValue?: (value: any, props: any) => any; /** * 告诉框架当前name属性绑定的值是否合法 * @param value * @param props */ isNameValid?: (value: any, props: any) => boolean; } export interface BasicConnectProps { clearFormStatusOnlyWhenDestroy?: boolean; disableClearWhenDestroy?: boolean; clearWhenDestory?: boolean; clearWhenDestroy?: boolean; tools: ConnectTools; type: any; /** * name属性绑定的值 */ name?: string; /** * 组件的值 */ value?: any; /** * 组件默认值 */ defaultValue?: any; /** * 延迟一定时间同步数据 */ debounce?: number; /** * 组件禁用, 组件的验证规则也会自动跳过 */ disabled?: boolean; /** * 如果组件配置了autoClearCondition, 可以使用这个属性来关闭它 */ disabledAutoClear?: boolean; trigger?: TriggerEventItem[]; } declare class BasicConnect extends React.Component { options: CommonOptions; debounceCache: { [key: string]: any; }; debounceTimer: any; isDebouncing: boolean; constructor(props: BasicConnectProps & BasicProps, options: CommonOptions); componentWillUnmount(): void; /** * 执行一些属性的转换 */ applyPropsMapping(info: infoType, mapping: object): void; updateNameValue: (value: any, options?: ContainerSetDataOption) => void; clearNameValue: (name?: string | undefined) => void; getFormItemControl: (name: string) => FormItemState | null; /** * 组件name的变更是否会触发FormItem验证 * +----------------+-----------------+-----------------+ * | prev | next | action | * +----------------------------------------------------+ * | name exist | name not exist | delete form | * +----------------------------------------------------+ * | name not exist | name exist | validate form | * +----------------------------------------------------+ * | name not exist | name not exist | skip | * +----------------------------------------------------+ * | name exist | name exist | validate form | * +----------------+-----------------+-----------------+ * @param nextProps */ private shouldNameTriggerValidate; private shouldDisabledTriggerValidate; private shouldValueTriggerValidate; /** * 处理值变更,name变更,以及disabled变更这三种情况所触发的表单验证 * @param nextProps */ private shouldValidateFormItem; componentWillUpdate(nextProps: BasicConnectProps & BasicProps): void; hasTriggerEvent(event: string): boolean; /** * 在Connect组件上清除不需要传递到RCRE之外的属性 */ muteParentInfo(mute: any): any; /** * 转换带有~的内部属性 * @param {Q} config * @returns {Q} */ transformInnerProperty(config: any): any; prepareRender(options: CommonOptions, props?: BasicConnectProps & BasicProps): { props: any; runTime: import("../../types").RunTimeType; env: BasicConnectProps & BasicProps; debounceCache: { [key: string]: any; }; updateNameValue: (value: any, options?: ContainerSetDataOption) => void; registerEvent: ((eventName: string, args: Object, options?: { index?: number | undefined; preventSubmit?: boolean | undefined; } | undefined) => Promise) | (() => void); clearNameValue: (name?: string | undefined) => void; getNameValue: (name: string) => any; }; TEST_simulateEvent(event: string, args?: Object): Promise; TEST_simulateEventOnce(event: string, args: Object | undefined, index: number): Promise; TEST_setData(value: any): void; TEST_getData(): Readonly & Readonly<{ children?: React.ReactNode; }>; TEST_getNameValue(name: string): any; TEST_isNameValid(): boolean; } export { BasicConnect };