UNPKG

@mopinion/survey

Version:

Collect customer feedback with the Mopinion survey library

705 lines (704 loc) 34.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FormStoreProvider = FormStoreProvider; exports.useFormStore = useFormStore; var _preact = require("preact"); var _hooks = require("preact/hooks"); var _utils = require("../../../utils"); var _hooks2 = require("../../../hooks"); var _constants = require("../../../constants"); var _utils2 = require("../utils"); var _useFeedbackId = _interopRequireDefault(require("../hooks/useFeedbackId")); var _useCustomerId = _interopRequireDefault(require("../hooks/useCustomerId")); var _useBlock = _interopRequireDefault(require("../hooks/useBlock")); var _useFormTypePositionButton = _interopRequireDefault(require("../hooks/useFormTypePositionButton")); var _useFormWidth2 = _interopRequireDefault(require("../hooks/useFormWidth")); var _useWrapStyle2 = _interopRequireDefault(require("../hooks/useWrapStyle")); var _usePages = _interopRequireDefault(require("../hooks/usePages")); var _useLastVisibleQuestionBlock = _interopRequireDefault(require("../hooks/useLastVisibleQuestionBlock")); var _useValidatedBlocks2 = _interopRequireDefault(require("../hooks/useValidatedBlocks")); var _useSyncExternal = _interopRequireDefault(require("../hooks/useSyncExternal")); var _useHandleExtraProps = _interopRequireDefault(require("../hooks/useHandleExtraProps")); var _useIntegrations = _interopRequireDefault(require("../hooks/useIntegrations")); var _useJsEvents = _interopRequireDefault(require("../hooks/useJsEvents")); var _useResetForm = _interopRequireDefault(require("../hooks/useResetForm")); var _useLastConversationalBlockIsVisible = _interopRequireDefault(require("../hooks/useLastConversationalBlockIsVisible")); var _usePostFeedback2 = _interopRequireDefault(require("../api/usePostFeedback")); var _usePostNotifyUser = _interopRequireDefault(require("../api/usePostNotifyUser")); var _ConfigStore = require("./ConfigStore"); var _BlockStore = require("./BlockStore"); var _useNextVisiblePageNumber = _interopRequireDefault(require("../hooks/useNextVisiblePageNumber")); var _usePrevVisiblePageNumber = _interopRequireDefault(require("../hooks/usePrevVisiblePageNumber")); var _excluded = ["actions"]; 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 _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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } 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); } var FormStoreContext = (0, _preact.createContext)({}); function reducer(state, action) { var _state$payload, _action$payload, _action$payload2, _action$payload3, _action$payload$to, _action$payload4, _action$payload$to2, _action$payload5; switch (action.type) { case 'toggle_open': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), formOpen: typeof action.payload !== 'undefined' ? action.payload : !state.formOpen }); case 'start_form': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), formIsOnOpenerPage: false }); case 'set_completed': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), formIsCompleted: true, loading: true }); case 'set_loading_done': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), loading: false }); case 'reset': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()) }, action.payload); case 'toggle_screenshot': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), screenshotActive: (_state$payload = state.payload) !== null && _state$payload !== void 0 ? _state$payload : !state.screenshotActive }); case 'update_screenreader_helper': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), screenReaderHelperText: (_action$payload = action.payload) !== null && _action$payload !== void 0 ? _action$payload : '' }); case 'update_conversational_focus_state_helper': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), conversationalFocusStateValue: (_action$payload2 = action.payload) !== null && _action$payload2 !== void 0 ? _action$payload2 : '' }); case 'update_last_key_pressed': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), lastKeyPressed: (_action$payload3 = action.payload) !== null && _action$payload3 !== void 0 ? _action$payload3 : null }); case 'set_show_errors': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), showErrors: true }); case 'increment_page': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), showErrors: false, activePage: (_action$payload$to = (_action$payload4 = action.payload) === null || _action$payload4 === void 0 ? void 0 : _action$payload4.to) !== null && _action$payload$to !== void 0 ? _action$payload$to : state.activePage + 1, direction: 'next' }); case 'decrement_page': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), showErrors: false, activePage: (_action$payload$to2 = (_action$payload5 = action.payload) === null || _action$payload5 === void 0 ? void 0 : _action$payload5.to) !== null && _action$payload$to2 !== void 0 ? _action$payload$to2 : state.activePage - 1, direction: 'prev' }); case 'to_page': return _objectSpread(_objectSpread({}, state), {}, { showErrors: false, activePage: Number(action.payload), direction: 'next' }); case 'handle_show_nav': return _objectSpread(_objectSpread({}, state), {}, { showNavAutopostPages: state.showNavAutopostPages.indexOf(state.activePage) === -1 ? [].concat(_toConsumableArray(state.showNavAutopostPages), [state.activePage]) : state.showNavAutopostPages }); case 'handle_autoskip': return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()) }, action.payload.pageValid && !action.payload.isLastPage && !action.payload.extraInputElementIsVisible && !action.payload.lastVisibleElementIsShowButtonType && { activePage: action.payload.nextPageWithVisibleBlocks }), !action.payload.pageValid && { showErrors: true }), action.payload.pageValid && action.payload.isLastPage && !action.payload.extraInputElementIsVisible && !action.payload.lastVisibleElementIsShowButtonType && { formIsCompleted: true, loading: true }); case 'set_hide_landingspage_form': return _objectSpread(_objectSpread({}, state), {}, { action: "".concat(action.type, "-").concat((0, _utils.rnd)()), hideLandingPageForm: true }); default: return state; } } function useCreateFormStore() { var formProps = (0, _ConfigStore.useFormProps)(); var _useConfigStore = (0, _ConfigStore.useConfigStore)(), properties = _useConfigStore.properties, pageMap = _useConfigStore.pageMap, text = _useConfigStore.text; var _useFormTypePositionB = (0, _useFormTypePositionButton["default"])(), formType = _useFormTypePositionB.formType, breakpoint = _useFormTypePositionB.breakpoint, position = _useFormTypePositionB.position, isPastBreakpoint = _useFormTypePositionB.isPastBreakpoint, buttonType = _useFormTypePositionB.buttonType; var initialVisiblePage = (0, _useNextVisiblePageNumber["default"])(0); var _useReducer = (0, _hooks.useReducer)(reducer, { action: '', activePage: initialVisiblePage, formIsOnOpenerPage: Boolean(properties === null || properties === void 0 ? void 0 : properties.introPage), formIsCompleted: formProps.isCompleted, formOpen: formType === 'embed', screenshotActive: false, hideLandingPageForm: false, direction: 'next', showNavAutopostPages: [], screenReaderHelperText: null, conversationalFocusStateValue: '', lastKeyPressed: null }), _useReducer2 = _slicedToArray(_useReducer, 2), state = _useReducer2[0], dispatch = _useReducer2[1]; var feedbackId = (0, _useFeedbackId["default"])(state.formIsCompleted); var customerId = (0, _useCustomerId["default"])(state.formIsCompleted); (0, _useHandleExtraProps["default"])(dispatch); var contentDivRef = (0, _hooks.useRef)(null); var feedbackButtonRef = (0, _hooks.useRef)(null); var frameRef = (0, _hooks.useRef)(null); var formBodyRef = (0, _hooks.useRef)(null); var closeButtonRef = (0, _hooks.useRef)(null); var brandingRef = (0, _hooks.useRef)(null); var actionButtonRef = (0, _hooks.useRef)(null); var shiftFocusToTopRef = (0, _hooks.useRef)(null); var screenshotButtonRef = (0, _hooks.useRef)(null); var firstFocusableBlockRef = (0, _hooks.useRef)(null); var conversationalDummyFocusBlockRef = (0, _hooks.useRef)(null); var currentConversationalFocusRef = (0, _hooks.useRef)(null); var _useFormWidth = (0, _useFormWidth2["default"])({ formType: formType, frameRef: frameRef }), formWidth = _useFormWidth.formWidth, widthClass = _useFormWidth.widthClass, clientWidth = _useFormWidth.clientWidth; var _useWrapStyle = (0, _useWrapStyle2["default"])({ feedbackButtonRef: feedbackButtonRef, formWidth: clientWidth, formOpen: state.formOpen }), wrapStyle = _useWrapStyle.wrapStyle, formOffset = _useWrapStyle.formOffset; (0, _useSyncExternal["default"])(_objectSpread(_objectSpread({}, state), {}, { formType: formType })); var nextVisiblePage = (0, _useNextVisiblePageNumber["default"])(state.activePage); var prevVisiblePage = (0, _usePrevVisiblePageNumber["default"])(state.activePage); return _objectSpread(_objectSpread({}, state), {}, { feedbackId: feedbackId, customerId: customerId, formType: formType, breakpoint: breakpoint, position: position, isPastBreakpoint: isPastBreakpoint, buttonType: buttonType, formWidth: formWidth, widthClass: widthClass, wrapStyle: wrapStyle, formOffset: formOffset, contentDivRef: contentDivRef, feedbackButtonRef: feedbackButtonRef, frameRef: frameRef, formBodyRef: formBodyRef, closeButtonRef: closeButtonRef, shiftFocusToTopRef: shiftFocusToTopRef, firstFocusableBlockRef: firstFocusableBlockRef, brandingRef: brandingRef, actionButtonRef: actionButtonRef, screenshotButtonRef: screenshotButtonRef, initialVisiblePage: initialVisiblePage, conversationalDummyFocusBlockRef: conversationalDummyFocusBlockRef, currentConversationalFocusRef: currentConversationalFocusRef, actions: { dispatch: dispatch, toggleForm: function toggleForm() { dispatch({ type: 'toggle_open' }); }, toggleScreenshot: function toggleScreenshot(payload) { dispatch({ type: 'toggle_screenshot', payload: payload }); }, updateScreenReaderHelper: function updateScreenReaderHelper(payload) { dispatch({ type: 'update_screenreader_helper', payload: payload }); }, updateLastKeyPressed: function updateLastKeyPressed(payload) { dispatch({ type: 'update_last_key_pressed', payload: payload }); }, startForm: function startForm() { dispatch({ type: 'start_form' }); }, nextPage: function nextPage() { var lastPage = Number(Object.keys(pageMap).pop()); if (state.activePage !== lastPage && nextVisiblePage) { dispatch({ type: 'increment_page', payload: { to: nextVisiblePage } }); } if (!nextVisiblePage) { dispatch({ type: 'set_completed' }); } if (nextVisiblePage) { setTimeout(function () { var _firstFocusableBlockR; (0, _utils.tryFocus)(firstFocusableBlockRef === null || firstFocusableBlockRef === void 0 || (_firstFocusableBlockR = firstFocusableBlockRef.current) === null || _firstFocusableBlockR === void 0 ? void 0 : _firstFocusableBlockR.querySelector('input, textarea, .ui-stars-star, .nice-select, a, .section-screenshot, .btn.btn-next, .btn.btn-submit')); }, 100); } }, prevPage: function prevPage() { if (prevVisiblePage) { var _firstFocusableBlockR2; dispatch({ type: 'decrement_page', payload: { to: prevVisiblePage } }); (0, _utils.tryFocus)(firstFocusableBlockRef === null || firstFocusableBlockRef === void 0 || (_firstFocusableBlockR2 = firstFocusableBlockRef.current) === null || _firstFocusableBlockR2 === void 0 ? void 0 : _firstFocusableBlockR2.querySelector('input, textarea, .ui-stars-star, .nice-select, a, .section-screenshot, .btn.btn-next, .btn.btn-submit'), 100); } }, reset: function reset() { dispatch({ type: 'reset', payload: { activePage: 1, formIsOnOpenerPage: Boolean(properties === null || properties === void 0 ? void 0 : properties.introPage), formIsCompleted: false, showErrors: false, direction: 'next', showNavAutopostPages: [] } }); }, postFeedback: function postFeedback() { dispatch({ type: 'set_completed' }); }, handleWCAGkeyEvents: function handleWCAGkeyEvents(e) { if (e.key === 'Escape') { dispatch({ type: 'toggle_open' }); } if (e.shiftKey && ['Enter', 'Space'].indexOf(e.code) > -1) { e.stopPropagation(); } }, handleConversationalFocus: function handleConversationalFocus(setFocusToDummyElement) { var _text$wcag$chatbotTyp, _text$wcag; dispatch({ type: 'update_conversational_focus_state_helper', payload: setFocusToDummyElement ? (_text$wcag$chatbotTyp = text === null || text === void 0 || (_text$wcag = text.wcag) === null || _text$wcag === void 0 ? void 0 : _text$wcag.chatbotTypingHelperText) !== null && _text$wcag$chatbotTyp !== void 0 ? _text$wcag$chatbotTyp : 'The chatbot is typing' : '' }); setTimeout(function () { dispatch({ type: 'update_last_key_pressed', payload: null }); }, setFocusToDummyElement ? 500 : 0); if (setFocusToDummyElement) { (0, _utils.tryFocus)(conversationalDummyFocusBlockRef.current); } else { var _currentConversationa; (0, _utils.tryFocus)(currentConversationalFocusRef === null || currentConversationalFocusRef === void 0 || (_currentConversationa = currentConversationalFocusRef.current) === null || _currentConversationa === void 0 ? void 0 : _currentConversationa.querySelector('button, a, input, textarea'), 100); } } } }); } function useRespondToFormStoreAction(actionType, fn) { var _useFormStore = useFormStore(), action = _useFormStore.action; useRespondToAction(action, actionType, fn); } function useRespondToBlockStoreAction(actionType, fn) { var _useBlockStore = (0, _BlockStore.useBlockStore)(), action = _useBlockStore.action; useRespondToAction(action, actionType, fn); } function useRespondToFormPropsAction(actionType, fn) { var _useFormProps = (0, _ConfigStore.useFormProps)(), openAction = _useFormProps.openAction; useRespondToAction(openAction, actionType, fn); } function useRespondToAction(action, actionType, fn) { var _action$split, _prevAction$split; var prevAction = (0, _hooks2.usePrevious)(action); var _ref = (_action$split = action === null || action === void 0 ? void 0 : action.split('-')) !== null && _action$split !== void 0 ? _action$split : '', _ref2 = _slicedToArray(_ref, 2), type = _ref2[0], instance = _ref2[1]; var _ref3 = (_prevAction$split = prevAction === null || prevAction === void 0 ? void 0 : prevAction.split('-')) !== null && _prevAction$split !== void 0 ? _prevAction$split : '', _ref4 = _slicedToArray(_ref3, 2), prevType = _ref4[0], prevInstance = _ref4[1]; (0, _hooks.useEffect)(function () { if (!type || type !== actionType) { return; } if (instance !== prevInstance) { fn(); } }, [type, instance, prevType, prevInstance, actionType, fn]); } function FormActionResponder() { var _lastVisibleBlock$pro, _lastVisibleBlock$pro2, _lastVisibleBlock$pro3, _lastVisibleState$ext, _currentPageBreak$blo; var _useFormProps2 = (0, _ConfigStore.useFormProps)(), formOpen = _useFormProps2.formOpen, cookieTime = _useFormProps2.cookieTime, formKey = _useFormProps2.formKey, webView = _useFormProps2.webView; var resetForm = (0, _useResetForm["default"])(); var lastConversationalBlockVisible = (0, _useLastConversationalBlockIsVisible["default"])(); useRespondToFormPropsAction('form_open', function () { if (formOpen !== null) { setTimeout(function () { dispatch({ type: 'toggle_open', payload: formOpen }); }); } }); var _useConfigStore2 = (0, _ConfigStore.useConfigStore)(), properties = _useConfigStore2.properties, pageMap = _useConfigStore2.pageMap, blocks = _useConfigStore2.blocks, layout = _useConfigStore2.layout, blockRules = _useConfigStore2.blockRules; var blockStore = (0, _BlockStore.useBlockStore)(); var _usePostFeedback = (0, _usePostFeedback2["default"])(), request = _usePostFeedback.request; var notifyUser = (0, _usePostNotifyUser["default"])(); var integrations = (0, _useIntegrations["default"])(); var triggerEvent = (0, _useJsEvents["default"])(); var _useFormStore2 = useFormStore(), dispatch = _useFormStore2.actions.dispatch, state = _objectWithoutProperties(_useFormStore2, _excluded); var pageLayout = (0, _usePages["default"])(state.activePage); var nextPageWithVisibleBlocks = (0, _useNextVisiblePageNumber["default"])(state.activePage); var _useValidatedBlocks = (0, _useValidatedBlocks2["default"])(pageLayout), pageValid = _useValidatedBlocks.pageValid; var _useLastVisibleQuesti = (0, _useLastVisibleQuestionBlock["default"])(pageLayout), lastVisibleBlock = _useLastVisibleQuesti.block, lastVisibleState = _useLastVisibleQuesti.state; var currentPageBreak = (0, _useBlock["default"])({ typeName: 'page_break', typeOf: state.activePage - 1 }); var lastUpdated = (0, _useBlock["default"])({ id: blockStore.lastUpdatedBlock }); var isLastPage = Number(Object.keys(pageMap).pop()) === state.activePage || nextPageWithVisibleBlocks === null; var extraInputElement = lastVisibleBlock === null || lastVisibleBlock === void 0 || (_lastVisibleBlock$pro = lastVisibleBlock.properties) === null || _lastVisibleBlock$pro === void 0 || (_lastVisibleBlock$pro = _lastVisibleBlock$pro.elements_extra) === null || _lastVisibleBlock$pro === void 0 ? void 0 : _lastVisibleBlock$pro[Object.keys((_lastVisibleBlock$pro2 = lastVisibleBlock === null || lastVisibleBlock === void 0 || (_lastVisibleBlock$pro3 = lastVisibleBlock.properties) === null || _lastVisibleBlock$pro3 === void 0 ? void 0 : _lastVisibleBlock$pro3.elements_extra) !== null && _lastVisibleBlock$pro2 !== void 0 ? _lastVisibleBlock$pro2 : {}).pop()]; var extraInputElementIsVisible = lastVisibleState === null || lastVisibleState === void 0 || (_lastVisibleState$ext = lastVisibleState[extraInputElement === null || extraInputElement === void 0 ? void 0 : extraInputElement.data_field]) === null || _lastVisibleState$ext === void 0 ? void 0 : _lastVisibleState$ext.isVisible; var lastVisibleElementIsShowButtonType = _constants.showNextButtonWhenAutoPost.indexOf(lastVisibleBlock === null || lastVisibleBlock === void 0 ? void 0 : lastVisibleBlock.typeName) > -1; var doAutopost = ['textarea', 'input', 'contact', 'checkbox'].indexOf(lastVisibleBlock === null || lastVisibleBlock === void 0 ? void 0 : lastVisibleBlock.typeName) === -1 && state.showNavAutopostPages.indexOf(state.activePage) === -1 && blockStore.lastUpdatedBlock && blockStore.lastUpdatedBlock === (lastVisibleBlock === null || lastVisibleBlock === void 0 ? void 0 : lastVisibleBlock.id) && !blockStore.submitFromLogic && (isLastPage && properties.advanced.lastPageAutoPost || (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)); var htmlBodyClass = state.formType === 'slide' ? 'mopinion-slider-active' : 'mopinion-modal-active'; var html = document.querySelector('html'); var body = document.body; (0, _hooks.useEffect)(function () { triggerEvent('loaded'); }, []); (0, _hooks.useEffect)(function () { if (state.formType === 'embed') { triggerEvent('shown'); integrations.sendEvent("Form shown"); } }, []); (0, _hooks.useEffect)(function () { if (state.initialVisiblePage !== 1) { request(); } }, [state.initialVisiblePage]); useRespondToFormStoreAction('toggle_open', function () { integrations.sendEvent("Form ".concat(state.formOpen ? 'shown' : 'hidden')); triggerEvent(state.formOpen ? 'shown' : 'hidden'); if (state.formOpen && state.formType !== 'embed') { (0, _utils.tryFocus)(state.contentDivRef.current, 500); (0, _utils.addClass)([html, body], htmlBodyClass); } else { (0, _utils.removeClass)([html, body], htmlBodyClass); } if (state.formOpen) { (0, _utils.setCookie)('MSopened', formKey, cookieTime); (0, _utils.setCookie)("MSopened.".concat(formKey), true, cookieTime); } if (!state.formOpen && !properties.conversational && state.formIsCompleted) { setTimeout(function () { return resetForm(); }, 200); } }); useRespondToFormStoreAction('toggle_screenshot', function () { if (state.formType === 'embed') { return; } if (state.screenshotActive) { (0, _utils.removeClass)([html, body], htmlBodyClass); } else { (0, _utils.addClass)([html, body], htmlBodyClass); (0, _utils.tryFocus)(state.screenshotButtonRef.current); } }); var scrollIntoView = function scrollIntoView() { try { var _state$contentDivRef$; if (state.formType === 'embed' && !(0, _utils.isLandingPage)()) { return; } (_state$contentDivRef$ = state.contentDivRef.current) === null || _state$contentDivRef$ === void 0 || _state$contentDivRef$.scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch (e) {} }; useRespondToFormStoreAction('increment_page', function () { request(); triggerEvent('next'); integrations.sendEvent('Next page'); scrollIntoView(); }); useRespondToFormStoreAction('decrement_page', function () { request(); triggerEvent('previous'); integrations.sendEvent('Previous page'); }); var handleSetCompleted = function handleSetCompleted() { var _properties$notify; triggerEvent('feedback_sent'); integrations.sendEvent('Feedback sent'); integrations.sendFeedback(); (0, _utils.setCookie)('MSFeedbackSent', formKey, cookieTime); (0, _utils.setCookie)("MSFeedbackSent.".concat(formKey), true, cookieTime); if ((_properties$notify = properties.notify) !== null && _properties$notify !== void 0 && _properties$notify.send) { notifyUser.request(); } if (properties.timeout) { setTimeout(function () { dispatch({ type: 'toggle_open', payload: false }); }, [Number(properties.timeout)]); } }; useRespondToFormStoreAction('handle_autoskip', function () { if (pageValid) { request(_objectSpread({}, isLastPage && { callback: function callback() { dispatch({ type: 'set_loading_done' }); if (state.formIsCompleted) { handleSetCompleted(); } } })); } }); useRespondToFormStoreAction('set_completed', function () { request({ callback: function callback() { dispatch({ type: 'set_loading_done' }); handleSetCompleted(); } }); }); useRespondToFormStoreAction('set_loading_done', function () { scrollIntoView(); }); var handleShowNextConvo = function handleShowNextConvo() { setTimeout(function () { var _blocks$currentId, _blockStore$currentId; if (lastConversationalBlockVisible) { dispatch({ type: 'set_completed' }); return; } var currentId = (0, _utils2.getCurrentVisibleId)({ layout: layout, blockState: blockStore, blocks: blocks }); var currentBlock = (_blocks$currentId = blocks[currentId]) !== null && _blocks$currentId !== void 0 ? _blocks$currentId : {}; var currentState = (_blockStore$currentId = blockStore[currentId]) !== null && _blockStore$currentId !== void 0 ? _blockStore$currentId : {}; if (!(currentBlock !== null && currentBlock !== void 0 && currentBlock.typeName) || _constants.noInputBlocks.indexOf(currentBlock.typeName) > -1 && _constants.noTriggerNextBlocks.indexOf(currentBlock.typeName) === -1 || !currentState.showError && currentState.value && !currentState.wasPrefilled || currentState.isSkipped) { blockStore.actions.dispatch({ type: 'set_show_next_convo', payload: { blocks: blocks, layout: layout, blockRules: blockRules } }); } }); }; (0, _hooks.useEffect)(function () { if (properties.conversational) { handleShowNextConvo(); } }, [properties.conversational]); useRespondToBlockStoreAction('reset_form', function () { if (properties.conversational) { handleShowNextConvo(); } }); useRespondToBlockStoreAction('set_show_next_convo', function () { handleShowNextConvo(); }); useRespondToBlockStoreAction('set_skip', function () { handleShowNextConvo(); }); useRespondToBlockStoreAction('set_value', function () { if (properties.conversational) { request(); handleShowNextConvo(); triggerEvent('question_answered'); integrations.sendEvent('Question answered'); } }); useRespondToBlockStoreAction('set_nested_value', function () { var _lastUpdated$block; if (properties.conversational && ((_lastUpdated$block = lastUpdated.block) === null || _lastUpdated$block === void 0 ? void 0 : _lastUpdated$block.typeName) !== 'website_data') { request(); handleShowNextConvo(); triggerEvent('question_answered'); integrations.sendEvent('Question answered'); } }); (0, _hooks.useEffect)(function () { if (blockStore.initialPost) { request(); if (pageValid && (doAutopost || blockStore.submitFromLogic)) { dispatch({ type: 'handle_autoskip', payload: { isLastPage: isLastPage, pageValid: pageValid, extraInputElementIsVisible: extraInputElementIsVisible, lastVisibleElementIsShowButtonType: lastVisibleElementIsShowButtonType, nextPageWithVisibleBlocks: nextPageWithVisibleBlocks } }); } } }, []); (0, _hooks.useEffect)(function () { if (blockStore.submitFromLogic) { dispatch({ type: 'set_completed' }); } }, [blockStore.submitFromLogic]); useRespondToBlockStoreAction('set_value', function () { if (blockStore.lastUpdatedBlock === (lastVisibleBlock === null || lastVisibleBlock === void 0 ? void 0 : lastVisibleBlock.id) || lastVisibleElementIsShowButtonType) { dispatch({ type: 'handle_show_nav' }); } }); useRespondToBlockStoreAction('set_nested_value', function () { if (blockStore.lastUpdatedBlock === (lastVisibleBlock === null || lastVisibleBlock === void 0 ? void 0 : lastVisibleBlock.id) || lastVisibleElementIsShowButtonType) { dispatch({ type: 'handle_show_nav' }); } }); useRespondToBlockStoreAction('set_value', function () { if (doAutopost) { request(); if (pageValid) { dispatch({ type: 'handle_autoskip', payload: { isLastPage: isLastPage, pageValid: pageValid, extraInputElementIsVisible: extraInputElementIsVisible, lastVisibleElementIsShowButtonType: lastVisibleElementIsShowButtonType, nextPageWithVisibleBlocks: nextPageWithVisibleBlocks } }); } } }); useRespondToBlockStoreAction('set_nested_value', function () { if (doAutopost) { request(); if (pageValid) { dispatch({ type: 'handle_autoskip', payload: { isLastPage: isLastPage, pageValid: pageValid, extraInputElementIsVisible: extraInputElementIsVisible, lastVisibleElementIsShowButtonType: lastVisibleElementIsShowButtonType, nextPageWithVisibleBlocks: nextPageWithVisibleBlocks } }); } } }); return null; } function useFormStore() { return (0, _hooks.useContext)(FormStoreContext); } function FormStoreProvider(_ref5) { var children = _ref5.children; var store = useCreateFormStore(); return (0, _preact.h)(FormStoreContext.Provider, { value: store }, (0, _preact.h)(FormActionResponder, null), children); } //# sourceMappingURL=FormStore.js.map