UNPKG

@mopinion/survey

Version:

Collect customer feedback with the Mopinion survey library

177 lines (176 loc) 8.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = SelectList; var _preact = require("preact"); var _hooks = require("preact/hooks"); var _utils = require("../../../utils"); var _conversational = require("../../conversational"); var _form = require("../../form"); var _Selectable = _interopRequireDefault(require("./Selectable")); var _utils2 = require("../utils"); var _excluded = ["block", "state", "setValue", "setNestedValue", "text", "elementIndex"]; function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function SelectList(_ref, ref) { var _currentPageBreak$blo; var block = _ref.block, state = _ref.state, setValue = _ref.setValue, setNestedValue = _ref.setNestedValue, text = _ref.text, elementIndex = _ref.elementIndex, props = _objectWithoutProperties(_ref, _excluded); var _useFormStore = (0, _form.useFormStore)(), currentConversationalFocusRef = _useFormStore.currentConversationalFocusRef, actions = _useFormStore.actions, formType = _useFormStore.formType, lastKeyPressed = _useFormStore.lastKeyPressed, activePage = _useFormStore.activePage; var _useProperties = (0, _form.useProperties)(), conversational = _useProperties.conversational; var _useAdvanced = (0, _form.useAdvanced)(), lastPageAutoPost = _useAdvanced.lastPageAutoPost; var properties = block.properties; var wrapperClass = ['gcr', 'thumbs', 'category'].indexOf(block.typeName) > -1 || properties.show_as_buttons ? "button-container ".concat(block.typeName, "-container") : ''; var currentPageBreak = (0, _form.useBlock)({ typeName: 'page_break', typeOf: activePage - 1 }); var withWcagKeyboardEvents = conversational || lastPageAutoPost && formType === 'embed' || (currentPageBreak === null || currentPageBreak === void 0 || (_currentPageBreak$blo = currentPageBreak.block) === null || _currentPageBreak$blo === void 0 || (_currentPageBreak$blo = _currentPageBreak$blo.properties) === null || _currentPageBreak$blo === void 0 ? void 0 : _currentPageBreak$blo.autopost) && formType === 'embed'; var _useWcagKeyboardEvent = (0, _conversational.useWcagKeyboardEvents)({ onArrowKeyPressed: function onArrowKeyPressed(e) { var updateHelperText = (0, _utils.debounce)(function () { var _text$wcag$ratingHelp, _text$wcag; return actions.updateScreenReaderHelper((_text$wcag$ratingHelp = text === null || text === void 0 || (_text$wcag = text.wcag) === null || _text$wcag === void 0 ? void 0 : _text$wcag.ratingHelperText) !== null && _text$wcag$ratingHelp !== void 0 ? _text$wcag$ratingHelp : ''); }, 1000); updateHelperText(); actions.updateLastKeyPressed(e.key); }, onTabSpaceEnter: function onTabSpaceEnter() { if (pendingScore) { setValue(pendingScore); updatePendingScore(null); setTimeout(function () { actions.updateScreenReaderHelper(''); }, 100); } }, onChangedValue: function onChangedValue(e) { updatePendingScore(e.target.value); actions.updateLastKeyPressed(null); }, onChangedValueConfirm: function onChangedValueConfirm(e) { actions.handleConversationalFocus(true); setValue(pendingScore); updatePendingScore(null); }, onClickValue: function onClickValue(e, isMouseClick) { updatePendingScore(!isMouseClick && block.typeName !== 'checkbox' ? e.target.value : null); setTimeout(function () { actions.updateScreenReaderHelper(''); }, 100); } }), _onKeyDown = _useWcagKeyboardEvent.onKeyDown, _onChange = _useWcagKeyboardEvent.onChange, _onClick = _useWcagKeyboardEvent.onClick, pendingScore = _useWcagKeyboardEvent.pendingScore, updatePendingScore = _useWcagKeyboardEvent.updatePendingScore; var _useMemo = (0, _hooks.useMemo)(function () { var elements = (0, _utils2.getElementsHandleExtra)({ elements: properties.elements, elements_extra: properties.elements_extra }); if (properties.reverseScore) { return { elements: elements, elementList: Object.keys(elements).reverse() }; } if (properties.randomize) { var _properties$elements_; return { elements: elements, elementList: (0, _utils.shuffleArray)(Object.keys(elements), Object.keys((_properties$elements_ = properties.elements_extra) !== null && _properties$elements_ !== void 0 ? _properties$elements_ : {}).length > 0) }; } return { elements: elements, elementList: Object.keys(elements) }; }, [properties]), elements = _useMemo.elements, elementList = _useMemo.elementList; (0, _hooks.useEffect)(function () { if (conversational && elementIndex !== 0) { actions.handleConversationalFocus(); actions.updateLastKeyPressed(null); } }, []); return (0, _preact.h)("div", _extends({ "class": wrapperClass }, conversational && { 'aria-labelledby': "block-title-".concat(block.typeName, "-").concat(block.id) }, { role: "radiogroup", ref: currentConversationalFocusRef }, properties.required && { 'aria-required': true }, conversational && { 'aria-labelledby': "block-title-".concat(block.typeName, "-").concat(block.id) }), elementList.map(function (k, i) { var _state$el$data_field, _state$el$data_field2; var el = elements[k]; var value = el.hasOwnProperty('value') ? el.value : el.label; var attr = { block: block, value: value, key: i, selectableIndex: i, onChange: function onChange(e) { if (withWcagKeyboardEvents && pendingScore) { _onChange(e, { key: lastKeyPressed }); } else { if (block.typeName === 'checkbox') { setNestedValue(el.data_field, e.target.checked); } else { setValue(e.target.value); } } }, checked: block.typeName !== 'checkbox' ? state.value === value || pendingScore === value : ((_state$el$data_field = state[el.data_field]) === null || _state$el$data_field === void 0 ? void 0 : _state$el$data_field.value) && ((_state$el$data_field2 = state[el.data_field]) === null || _state$el$data_field2 === void 0 ? void 0 : _state$el$data_field2.value) !== 'false', onKeyDown: function onKeyDown(e) { if (withWcagKeyboardEvents) { _onKeyDown(e); } }, onClick: function onClick(e) { if (withWcagKeyboardEvents) { _onClick(e); } } }; if (block.typeName === 'thumbs') { attr.labelAtts = { "class": "label_thumbs_".concat(i == 0 ? 'positive' : 'negative'), ariaLabel: "".concat(el.label ? el.label : i === 0 ? 'positive' : 'negative') }; } var thumbsProps = block.typeName === 'thumbs' ? { style: { verticalAlign: 'middle' }, alt: el.label } : {}; return (0, _preact.h)(_Selectable["default"], attr, el.icon ? (0, _preact.h)(_form.SvgIcon, _extends({ icon: el.icon }, thumbsProps)) : null, block.typeName !== 'thumbs' ? ' ' + el.label : null, block.properties.showCaptions && Object.keys(thumbsProps).length ? (0, _preact.h)("span", thumbsProps, ' ' + el.label) : null); })); } //# sourceMappingURL=SelectList.js.map