@mopinion/survey
Version:
Collect customer feedback with the Mopinion survey library
707 lines (706 loc) • 34.9 kB
JavaScript
"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 _useFormProps = (0, _ConfigStore.useFormProps)(),
isCompleted = _useFormProps.isCompleted,
webView = _useFormProps.webView;
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: 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 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,
contentDivRef: contentDivRef,
webView: webView
}),
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,
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 _useFormProps2 = (0, _ConfigStore.useFormProps)(),
openAction = _useFormProps2.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 _useFormProps3 = (0, _ConfigStore.useFormProps)(),
formOpen = _useFormProps3.formOpen,
cookieTime = _useFormProps3.cookieTime,
formKey = _useFormProps3.formKey,
webView = _useFormProps3.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 interactionDetected = (0, _hooks2.useDetectInteraction)();
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 && interactionDetected) {
request();
}
}, [state.initialVisiblePage, interactionDetected]);
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, _lastUpdated$block2;
if (properties.conversational && (_lastUpdated$block = lastUpdated.block) !== null && _lastUpdated$block !== void 0 && _lastUpdated$block.id && ((_lastUpdated$block2 = lastUpdated.block) === null || _lastUpdated$block2 === void 0 ? void 0 : _lastUpdated$block2.typeName) !== 'website_data') {
request();
handleShowNextConvo();
triggerEvent('question_answered');
integrations.sendEvent('Question answered');
}
});
(0, _hooks.useEffect)(function () {
if (blockStore.initialPost && interactionDetected) {
request();
if (pageValid && (doAutopost || blockStore.submitFromLogic)) {
dispatch({
type: 'handle_autoskip',
payload: {
isLastPage: isLastPage,
pageValid: pageValid,
extraInputElementIsVisible: extraInputElementIsVisible,
lastVisibleElementIsShowButtonType: lastVisibleElementIsShowButtonType,
nextPageWithVisibleBlocks: nextPageWithVisibleBlocks
}
});
}
}
}, [interactionDetected]);
(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