UNPKG

auth0-lock

Version:
225 lines (207 loc) 8.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.clearFields = clearFields; exports.email = email; exports.getField = getField; exports.getFieldInvalidHint = getFieldInvalidHint; exports.getFieldLabel = getFieldLabel; exports.getFieldValue = getFieldValue; exports.hideInvalidFields = hideInvalidFields; exports.isFieldValid = isFieldValid; exports.isFieldVisiblyInvalid = isFieldVisiblyInvalid; exports.isSelecting = isSelecting; exports.mfaCode = mfaCode; exports.password = password; exports.phoneNumber = phoneNumber; exports.registerOptionField = registerOptionField; exports.renderOptionSelection = renderOptionSelection; exports.setField = setField; exports.setFieldShowInvalid = setFieldShowInvalid; exports.setOptionField = setOptionField; exports.showInvalidField = showInvalidField; exports.username = username; exports.vcode = vcode; var _react = _interopRequireDefault(require("react")); var _immutable = require("immutable"); var _trim = _interopRequireDefault(require("trim")); var _option_selection_pane = _interopRequireDefault(require("./option_selection_pane")); var l = _interopRequireWildcard(require("../core/index")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var minMax = function minMax(value, min, max) { return value.length >= min && value.length <= max; }; var getDefaultValidator = function getDefaultValidator(field) { switch (field) { case 'family_name': case 'given_name': return function (str) { return minMax((0, _trim.default)(str), 1, 150); }; case 'name': return function (str) { return minMax((0, _trim.default)(str), 1, 300); }; case 'nickname': return function (str) { return minMax((0, _trim.default)(str), 1, 300); }; default: return function (str) { return (0, _trim.default)(str).length > 0; }; } }; function setField(m, field, value) { var validator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : getDefaultValidator(field); var prevValue = m.getIn(['field', field, 'value']); var prevShowInvalid = m.getIn(['field', field, 'showInvalid'], false); for (var _len = arguments.length, args = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++) { args[_key - 4] = arguments[_key]; } var validation = validate.apply(void 0, [validator, value].concat(args)); return m.mergeIn(['field', field], validation.merge({ value: value, showInvalid: prevShowInvalid && prevValue === value })); } function validate(validator, value) { if (typeof validator != 'function') return (0, _immutable.Map)({ valid: true }); for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { args[_key2 - 2] = arguments[_key2]; } var validation = validator.apply(void 0, [value].concat(args)); return validation && _typeof(validation) === 'object' ? (0, _immutable.Map)({ valid: validation.valid, invalidHint: validation.hint }) : (0, _immutable.Map)({ valid: !!validation }); } // TODO: this should handle icons, and everything. // TODO: also there should be a similar fn for regular fields. function registerOptionField(m, field, options, initialValue) { var valid = true, hasInitial = !initialValue, initialOption; options.forEach(function (x) { valid = valid && x.get('label') && typeof x.get('label') === 'string' && x.get('value') && typeof x.get('value') === 'string'; if (!hasInitial && x.get('value') === initialValue) { initialOption = x; hasInitial = true; } }); if (!valid || !options.size) { var stopError = new Error("The options provided for the \"".concat(field, "\" field are invalid, they must have the following format: {label: \"non-empty string\", value: \"non-empty string\"} and there has to be at least one option.")); stopError.code = 'invalid_select_field'; // TODO: in the future we might want to return the result of the // operation along with the model instead of stopping the // rendering, like [false, m] in the case of failure and [true, m] // in the case of success. return l.stop(m, stopError); } if (!initialOption) initialOption = (0, _immutable.Map)({}); return m.mergeIn(['field', field], initialOption, (0, _immutable.Map)({ options: options, showInvalid: false, valid: !initialOption.isEmpty() })); } function setOptionField(m, field, option) { return m.mergeIn(['field', field], option.merge((0, _immutable.Map)({ valid: true, showInvalid: false }))); } function isFieldValid(m, field) { return m.getIn(['field', field, 'valid']); } function getFieldInvalidHint(m, field) { return m.getIn(['field', field, 'invalidHint'], ''); } function isFieldVisiblyInvalid(m, field) { return m.getIn(['field', field, 'showInvalid'], false) && !m.getIn(['field', field, 'valid']); } function showInvalidField(m, field) { return m.setIn(['field', field, 'showInvalid'], !isFieldValid(m, field)); } function hideInvalidFields(m) { return m.update('field', function (fields) { return fields && fields.map(function (field) { return field.set('showInvalid', false); }); }); } // TODO: only used in passwordless, when we update it to use // validateAndSubmit this won't be needed anymore. function setFieldShowInvalid(m, field, value) { return m.setIn(['field', field, 'showInvalid'], value); } function clearFields(m, fields) { var keyPaths; if (!fields || fields.length === 0) { keyPaths = [['field']]; } else { keyPaths = fields.map(function (x) { return ['field', x]; }); } return keyPaths.reduce(function (r, v) { return r.removeIn(v); }, m); } function getField(m, field) { var notFound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new _immutable.Map({}); return m.getIn(['field', field], notFound); } function getFieldValue(m, field) { var notFound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; return getField(m, field).get('value', notFound); } function getFieldLabel(m, field) { var notFound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; return getField(m, field).get('label', notFound); } // phone number function phoneNumber(lock) { return lock.getIn(['field', 'phoneNumber', 'value'], ''); } // email function email(m) { return getFieldValue(m, 'email'); } // vcode function vcode(m) { return getFieldValue(m, 'vcode'); } // password function password(m) { return getFieldValue(m, 'password'); } // username function username(m) { return getFieldValue(m, 'username'); } // mfa_code function mfaCode(m) { return getFieldValue(m, 'mfa_code'); } // select field options function isSelecting(m) { return !!m.getIn(['field', 'selecting']); } function renderOptionSelection(m) { var name = m.getIn(['field', 'selecting', 'name']); return isSelecting(m) ? /*#__PURE__*/_react.default.createElement(_option_selection_pane.default, { model: m, name: name, icon: m.getIn(['field', 'selecting', 'icon']), iconUrl: m.getIn(['field', 'selecting', 'iconUrl']), items: m.getIn(['field', name, 'options']) }) : null; }