@sishuguojixuefu/react-native-form
Version:
71 lines • 2.75 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const react_native_1 = require("react-native");
const mathjs_1 = __importDefault(require("mathjs"));
const kind_of_1 = __importDefault(require("kind-of"));
class SsCalculateView extends react_1.Component {
render() {
const { title, computedValue } = this.props;
return (react_1.default.createElement(react_native_1.View, { style: { paddingHorizontal: 20, paddingVertical: 8, justifyContent: 'space-between', flexDirection: 'row' } },
react_1.default.createElement(react_native_1.Text, null, title),
react_1.default.createElement(react_native_1.Text, null, computedValue)));
}
}
class SsCalculate extends react_1.Component {
constructor(props) {
super(props);
this.refresh = (values) => {
try {
const { formula } = this.props;
let expression = '';
const calElements = formula.map(item => {
return kind_of_1.default(item) === 'object' ? values[item.id] || '0' : item;
});
calElements.forEach(item => {
expression += item.toString();
});
const value = mathjs_1.default.eval(expression).toFixed(2, 10);
this.setState({
value: value === 'Infinity' || isNaN(value) ? '' : value,
});
}
catch (error) {
console.log(error);
}
};
this.state = {
value: 0,
};
}
componentDidMount() {
this.subscription = react_native_1.DeviceEventEmitter.addListener('SsDynamicFormValueChanged', ({ values }) => {
this.refresh(values);
});
}
componentWillUnmount() {
this.subscription.remove();
}
render() {
const { label, placeholder } = this.props;
const { value } = this.state;
return react_1.default.createElement(SsCalculateView, { title: label, placeholder: placeholder, computedValue: value });
}
}
exports.default = SsCalculate;
SsCalculate.defaultProps = {
required: false,
textAlign: 'right',
upper: true,
};
//# sourceMappingURL=SsCalculate.js.map