@vs-form/vs-text-mask
Version:
TextMask Component for vs-form
48 lines (44 loc) • 1.62 kB
JavaScript
import { Component, createElement } from 'react';
import { set, BaseInput, common, registerComponent, enums } from '@vs-form/vs-form';
import MaskedInput from 'react-text-mask';
class VsMaskInput extends Component {
constructor(props) {
super(props);
this.changeValue = (dataProps) => (evt) => {
const value = evt.target.value;
dataProps.updateValue(value);
};
this.initProps = () => {
const maskProps = this.comp.maskProps;
if (maskProps) {
set(this.comp.props, 'InputProps.inputComponent', this.TextMaskCustom);
}
};
this.TextMaskCustom = (p) => {
const { inputRef, ...other } = p;
if (this.comp.maskProps) {
return (createElement(MaskedInput, Object.assign({}, other, { ref: p.inputRef }, this.comp.maskProps)));
}
else {
return null;
}
};
this.initProps();
}
get comp() { return this.props.comp; }
render() {
return createElement(BaseInput, Object.assign({ value: this.getValue, onChange: this.changeValue }, this.props));
}
getValue(dataProps) {
let defaultValue;
if (common.dataTypeIsArray(this.comp.data.dataType)) {
defaultValue = [];
}
else {
defaultValue = '';
}
return dataProps.state.value || defaultValue;
}
}
const register = () => registerComponent(enums.Component.maskinput, VsMaskInput);
export { VsMaskInput, register };