UNPKG

@sishuguojixuefu/react-native-form

Version:
71 lines 2.75 kB
"use strict"; 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