@react-form-fields/native-base
Version:
Native Base Form Fields
46 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var ValidationContext_1 = require("@react-form-fields/core/ValidationContext");
var React = require("react");
var react_native_1 = require("react-native");
var uuidV4 = require("uuid/v4");
var context_1 = require("./hooks/useFieldFlow/context");
var fieldsMap = {};
var ValidationContext = React.memo(React.forwardRef(function (_a, ref) {
var children = _a.children, props = tslib_1.__rest(_a, ["children"]);
var _b = React.useState(null), fieldId = _b[0], setFieldId = _b[1];
React.useEffect(function () {
var fieldId = uuidV4();
setFieldId(fieldId);
var fields = [];
fieldsMap[fieldId] = {
registerPosition: function (position, onFocusHandler) {
fields.push({ position: position, onFocusHandler: onFocusHandler });
},
unregisterPosition: function (position) {
var index = fields.findIndex(function (f) { return f.position === position; });
if (index < 0)
return;
fields.splice(index, 1);
},
goNext: function (currenPosition) {
var nextField = fields
.sort(function (a, b) { return (a.position > b.position ? 1 : a.position === b.position ? 0 : -1); })
.find(function (f) { return f.position > currenPosition; });
if (!nextField)
return false;
react_native_1.InteractionManager.runAfterInteractions().then(function () { return nextField.onFocusHandler(); });
return true;
}
};
return function () { return delete fieldsMap[fieldId]; };
}, []);
if (!fieldsMap[fieldId])
return null;
return (React.createElement(context_1.default.Provider, { value: fieldsMap[fieldId] },
React.createElement(ValidationContext_1.default, tslib_1.__assign({}, props, { ref: ref }), children)));
}));
ValidationContext.displayName = 'ValidationContext';
exports.default = ValidationContext;
//# sourceMappingURL=ValidationContext.js.map