@mopinion/survey
Version:
Collect customer feedback with the Mopinion survey library
137 lines (136 loc) • 6.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = BlockInput;
var _preact = require("preact");
var _hooks = require("preact/hooks");
var _constants = require("../../../constants");
var _utils = require("../../../utils");
var _SelectList = _interopRequireDefault(require("../../elements/components/SelectList"));
var _Rating = _interopRequireDefault(require("../../elements/components/Rating"));
var _Contact = _interopRequireDefault(require("../../elements/components/Contact"));
var _ExternalData = _interopRequireDefault(require("../../elements/components/ExternalData"));
var _Multimedia = _interopRequireDefault(require("../../elements/components/Multimedia"));
var _Screenshot = _interopRequireDefault(require("../../elements/components/Screenshot"));
var _ErrorMessage = _interopRequireDefault(require("../../elements/components/ErrorMessage"));
var _HoneyBot = _interopRequireDefault(require("../../elements/components/HoneyBot"));
var _CommentBar = _interopRequireDefault(require("./CommentBar"));
var _useWcagKeyboardEvents = _interopRequireDefault(require("../hooks/useWcagKeyboardEvents"));
var _utils2 = require("../utils");
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); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function findFirstFocusableElement(el) {
return (0, _utils.nodeListToArray)(el.querySelectorAll('*')).filter(isFocusable)[0];
}
function isFocusable(element) {
if (element.tabIndex < 0 || element.offsetParent === null) {
return false;
}
switch (element.tagName) {
case 'A':
return !!element.href;
case 'INPUT':
return element.type !== 'hidden' && !element.disabled;
case 'SELECT':
case 'TEXTAREA':
case 'BUTTON':
return !element.disabled;
default:
return false;
}
}
var blockMap = _defineProperty({
textarea: _CommentBar["default"],
input: _CommentBar["default"],
name: _CommentBar["default"],
email: _CommentBar["default"],
phone: _CommentBar["default"],
radio: _SelectList["default"],
category: _SelectList["default"],
checkbox: _SelectList["default"],
rating: _Rating["default"],
nps: _Rating["default"],
ces: _Rating["default"],
gcr: _SelectList["default"],
thumbs: _SelectList["default"],
contact: _Contact["default"],
website_data: _ExternalData["default"],
multimedia: _Multimedia["default"],
screenshot: _Screenshot["default"]
}, _constants.honeyBotTypeName, _HoneyBot["default"]);
function showErrorComponent() {
var _block$properties, _block$properties2;
var block = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (['email', 'phone'].indexOf(block.typeName) > -1) {
return true;
}
return _constants.textInputBlocks.indexOf(block.typeName) > -1 && (((_block$properties = block.properties) === null || _block$properties === void 0 ? void 0 : _block$properties.required) || ['email', 'phone'].indexOf((_block$properties2 = block.properties) === null || _block$properties2 === void 0 ? void 0 : _block$properties2.format) > -1);
}
function BlockInput(_ref) {
var _block$properties3, _text$skipText, _text$skipText2;
var _ref$state = _ref.state,
state = _ref$state === void 0 ? {} : _ref$state,
_ref$block = _ref.block,
block = _ref$block === void 0 ? {} : _ref$block,
errorMessage = _ref.errorMessage,
setValue = _ref.setValue,
setNestedValue = _ref.setNestedValue,
setHoneyBotValue = _ref.setHoneyBotValue,
skipQuestion = _ref.skipQuestion,
text = _ref.text,
elementIndex = _ref.elementIndex,
_id = _ref._id;
var BlockComponent = blockMap[block.typeName];
var skipRef = (0, _hooks.useRef)(null);
var _useWcagKeyboardEvent = (0, _useWcagKeyboardEvents["default"])({
onArrowKeyRight: function onArrowKeyRight(e, target) {
var el = findFirstFocusableElement(target);
(0, _utils.tryFocus)(el);
}
}),
_onKeyDown = _useWcagKeyboardEvent.onKeyDown;
if (!BlockComponent) return null;
var showSkip = !((_block$properties3 = block.properties) !== null && _block$properties3 !== void 0 && _block$properties3.required) && block.typeName !== _constants.honeyBotTypeName;
return (0, _preact.h)("div", {
className: (0, _utils.makeClassName)('block-wrap', showSkip && 'show-skip')
}, showSkip && (0, _preact.h)("button", {
ref: skipRef,
className: (0, _utils.makeClassName)({
prefix: false,
className: 'btn'
}, 'skip', {
prefix: false,
className: 'wcag'
}),
onClick: skipQuestion,
id: "skip-".concat(block.id),
"aria-label": "".concat(block.title, ", ").concat((_text$skipText = text === null || text === void 0 ? void 0 : text.skipText) !== null && _text$skipText !== void 0 ? _text$skipText : 'Skip'),
onKeyDown: function onKeyDown(e) {
var _skipRef$current;
_onKeyDown(e, skipRef === null || skipRef === void 0 || (_skipRef$current = skipRef.current) === null || _skipRef$current === void 0 ? void 0 : _skipRef$current.nextElementSibling);
}
}, (_text$skipText2 = text === null || text === void 0 ? void 0 : text.skipText) !== null && _text$skipText2 !== void 0 ? _text$skipText2 : 'Skip'), (0, _preact.h)("div", {
className: (0, _utils.makeClassName)('block-inner')
}, (0, _preact.h)(BlockComponent, {
block: block,
state: state,
setValue: setValue,
setNestedValue: setNestedValue,
setHoneyBotValue: setHoneyBotValue,
skipQuestion: skipQuestion,
text: text,
elementIndex: elementIndex,
_id: _id
}), showErrorComponent(block) && (0, _preact.h)(_ErrorMessage["default"], {
id: "error-message-".concat(block.id),
showErrors: (0, _utils2.showConversationalError)({
block: block,
state: state
})
}, errorMessage)));
}
//# sourceMappingURL=BlockInput.js.map