fix: 在Transducer中添加对MixedSetter的支持

This commit is contained in:
xiaoxian.xlf 2020-05-04 17:29:45 +08:00
parent 6c6df45677
commit 7317f2fab2
2 changed files with 24 additions and 5 deletions

View File

@ -1,12 +1,16 @@
// all this file for polyfill vision logic
import { isValidElement } from 'react';
function getHotterFromSetter(setter) { function getHotterFromSetter(setter) {
return setter && (setter.Hotter || (setter.type && setter.type.Hotter)) || []; // eslint-disable-line return setter && (setter.Hotter || (setter.type && setter.type.Hotter)) || []; // eslint-disable-line
} }
function getTransducerFromSetter(setter) { function getTransducerFromSetter(setter) {
return setter && ( return setter && (
setter.transducer || setter.Transducer setter.transducer || setter.Transducer
|| (setter.type && (setter.type.transducer || setter.type.Transducer)) || (setter.type && (setter.type.transducer || setter.type.Transducer))
) || null; // eslint-disable-line ) || null; // eslint-disable-line
} }
function combineTransducer(transducer, arr, context) { function combineTransducer(transducer, arr, context) {
@ -23,9 +27,22 @@ function combineTransducer(transducer, arr, context) {
export class Transducer { export class Transducer {
constructor(context, config) { constructor(context, config) {
let { setter } = config;
// 1. validElement
// 2. SetterConfig
// 3. SetterConfig[]
if (Array.isArray(setter)) {
setter = setter[0];
} else if (isValidElement(setter) && setter.type.displayName === 'MixedSetter') {
setter = setter.props.setters[0];
} else if (typeof setter === 'object' && setter.componentName === 'MixedSetter') {
setter = setter.props.setters[0];
}
this.setterTransducer = combineTransducer( this.setterTransducer = combineTransducer(
getTransducerFromSetter(config.setter), getTransducerFromSetter(setter),
getHotterFromSetter(config.setter), getHotterFromSetter(setter),
context, context,
); );
this.context = context; this.context = context;

View File

@ -115,6 +115,8 @@ export default class MixedSetter extends Component<{
className?: string; className?: string;
}> { }> {
private setters = nomalizeSetters(this.props.setters); private setters = nomalizeSetters(this.props.setters);
// set name ,used in setting Transducer
static displayName = 'MixedSetter';
@obx.ref private used?: string; @obx.ref private used?: string;
@computed private getCurrentSetter() { @computed private getCurrentSetter() {
const { field } = this.props; const { field } = this.props;