@constructor-io/constructorio-ui-quizzes 1.3.11 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/constructorio-ui-quizzes-bundled.js +20 -20
  2. package/lib/cjs/components/BackButton/BackButton.js +12 -7
  3. package/lib/cjs/components/CTAButton/CTAButton.js +4 -3
  4. package/lib/cjs/components/CioQuiz/actions.js +1 -0
  5. package/lib/cjs/components/CioQuiz/index.js +16 -9
  6. package/lib/cjs/components/CioQuiz/quizApiReducer.js +15 -9
  7. package/lib/cjs/components/CioQuiz/quizLocalReducer.js +36 -8
  8. package/lib/cjs/components/ControlBar/ControlBar.js +6 -4
  9. package/lib/cjs/components/CoverTypeQuestion/CoverTypeQuestion.js +2 -7
  10. package/lib/cjs/components/OpenTextTypeQuestion/OpenTextTypeQuestion.js +4 -32
  11. package/lib/cjs/components/RedoButton/RedoButton.js +11 -4
  12. package/lib/cjs/components/ResultCard/ResultCard.js +3 -18
  13. package/lib/cjs/components/ResultContainer/ResultContainer.js +2 -2
  14. package/lib/cjs/components/ResultCtaButton/ResultCtaButton.js +8 -7
  15. package/lib/cjs/components/ResultHeroCard/ResultHeroCard.js +36 -0
  16. package/lib/cjs/components/SelectTypeQuestion/SelectTypeQuestion.js +6 -56
  17. package/lib/cjs/components/SessionPromptModal/SessionPromptModal.js +18 -6
  18. package/lib/cjs/components/ZeroResults/ZeroResults.js +5 -4
  19. package/lib/cjs/constants.js +40 -5
  20. package/lib/cjs/hooks/useConsoleErrors.js +2 -1
  21. package/lib/cjs/hooks/usePropsGetters/index.js +85 -0
  22. package/lib/cjs/hooks/usePropsGetters/useCoverQuestionProps.js +13 -0
  23. package/lib/cjs/hooks/usePropsGetters/useNextQuestionButtonProps.js +24 -0
  24. package/lib/cjs/hooks/usePropsGetters/useOpenTextInputProps.js +47 -0
  25. package/lib/cjs/hooks/usePropsGetters/usePreviousQuestionButtonProps.js +18 -0
  26. package/lib/cjs/hooks/usePropsGetters/useSelectInputProps.js +84 -0
  27. package/lib/cjs/hooks/useQuiz.js +14 -28
  28. package/lib/cjs/hooks/useQuizEvents/index.js +21 -16
  29. package/lib/cjs/hooks/useQuizEvents/useHydrateQuizLocalState.js +18 -0
  30. package/lib/cjs/hooks/useQuizEvents/useQuizAddToCart.js +2 -2
  31. package/lib/cjs/hooks/useQuizEvents/useQuizAnswerChangeHandler.js +48 -0
  32. package/lib/cjs/hooks/useQuizEvents/useQuizBackClick.js +5 -5
  33. package/lib/cjs/hooks/useQuizEvents/useQuizNextClick.js +13 -39
  34. package/lib/cjs/hooks/useQuizEvents/useQuizResetClick.js +20 -0
  35. package/lib/cjs/hooks/useQuizEvents/useQuizResultClick.js +2 -2
  36. package/lib/cjs/hooks/useQuizState/index.js +21 -0
  37. package/lib/cjs/hooks/{useQuizApiState.js → useQuizState/useQuizApiState.js} +15 -29
  38. package/lib/cjs/hooks/useQuizState/useQuizLocalState.js +30 -0
  39. package/lib/cjs/index.js +25 -0
  40. package/lib/cjs/services/index.js +3 -3
  41. package/lib/cjs/stories/Quiz/tests/mocks.js +69 -14
  42. package/lib/cjs/utils.js +23 -1
  43. package/lib/mjs/components/BackButton/BackButton.js +12 -7
  44. package/lib/mjs/components/CTAButton/CTAButton.js +4 -3
  45. package/lib/mjs/components/CioQuiz/actions.js +1 -0
  46. package/lib/mjs/components/CioQuiz/index.js +16 -9
  47. package/lib/mjs/components/CioQuiz/quizApiReducer.js +19 -7
  48. package/lib/mjs/components/CioQuiz/quizLocalReducer.js +36 -7
  49. package/lib/mjs/components/ControlBar/ControlBar.js +6 -4
  50. package/lib/mjs/components/CoverTypeQuestion/CoverTypeQuestion.js +2 -7
  51. package/lib/mjs/components/OpenTextTypeQuestion/OpenTextTypeQuestion.js +5 -32
  52. package/lib/mjs/components/RedoButton/RedoButton.js +11 -4
  53. package/lib/mjs/components/ResultCard/ResultCard.js +3 -15
  54. package/lib/mjs/components/ResultContainer/ResultContainer.js +2 -2
  55. package/lib/mjs/components/ResultCtaButton/ResultCtaButton.js +8 -7
  56. package/lib/mjs/components/ResultHeroCard/ResultHeroCard.js +31 -0
  57. package/lib/mjs/components/SelectTypeQuestion/SelectTypeQuestion.js +6 -55
  58. package/lib/mjs/components/SessionPromptModal/SessionPromptModal.js +18 -6
  59. package/lib/mjs/components/ZeroResults/ZeroResults.js +5 -4
  60. package/lib/mjs/constants.js +39 -4
  61. package/lib/mjs/hooks/useConsoleErrors.js +2 -1
  62. package/lib/mjs/hooks/usePropsGetters/index.js +72 -0
  63. package/lib/mjs/hooks/usePropsGetters/useCoverQuestionProps.js +10 -0
  64. package/lib/mjs/hooks/usePropsGetters/useNextQuestionButtonProps.js +20 -0
  65. package/lib/mjs/hooks/usePropsGetters/useOpenTextInputProps.js +43 -0
  66. package/lib/mjs/hooks/usePropsGetters/usePreviousQuestionButtonProps.js +14 -0
  67. package/lib/mjs/hooks/usePropsGetters/useSelectInputProps.js +79 -0
  68. package/lib/mjs/hooks/useQuiz.js +13 -21
  69. package/lib/mjs/hooks/useQuizEvents/index.js +21 -16
  70. package/lib/mjs/hooks/useQuizEvents/useHydrateQuizLocalState.js +16 -0
  71. package/lib/mjs/hooks/useQuizEvents/useQuizAddToCart.js +2 -2
  72. package/lib/mjs/hooks/useQuizEvents/useQuizAnswerChangeHandler.js +45 -0
  73. package/lib/mjs/hooks/useQuizEvents/useQuizBackClick.js +5 -5
  74. package/lib/mjs/hooks/useQuizEvents/useQuizNextClick.js +12 -38
  75. package/lib/mjs/hooks/useQuizEvents/useQuizResetClick.js +18 -0
  76. package/lib/mjs/hooks/useQuizEvents/useQuizResultClick.js +2 -2
  77. package/lib/mjs/hooks/useQuizState/index.js +18 -0
  78. package/lib/mjs/hooks/{useQuizApiState.js → useQuizState/useQuizApiState.js} +15 -28
  79. package/lib/mjs/hooks/useQuizState/useQuizLocalState.js +26 -0
  80. package/lib/mjs/index.js +14 -0
  81. package/lib/mjs/services/index.js +1 -1
  82. package/lib/mjs/stories/Quiz/tests/mocks.js +75 -12
  83. package/lib/mjs/utils.js +17 -0
  84. package/lib/styles.css +13 -2
  85. package/lib/types/components/BackButton/BackButton.d.ts +2 -2
  86. package/lib/types/components/CTAButton/CTAButton.d.ts +1 -0
  87. package/lib/types/components/CioQuiz/actions.d.ts +5 -6
  88. package/lib/types/components/CioQuiz/context.d.ts +13 -6
  89. package/lib/types/components/CioQuiz/quizApiReducer.d.ts +2 -2
  90. package/lib/types/components/CioQuiz/quizLocalReducer.d.ts +3 -5
  91. package/lib/types/components/ControlBar/ControlBar.d.ts +0 -4
  92. package/lib/types/components/OpenTextTypeQuestion/OpenTextTypeQuestion.d.ts +2 -6
  93. package/lib/types/components/RedoButton/RedoButton.d.ts +1 -1
  94. package/lib/types/components/ResultCtaButton/ResultCtaButton.d.ts +1 -2
  95. package/lib/types/components/ResultHeroCard/ResultHeroCard.d.ts +7 -0
  96. package/lib/types/components/SelectTypeQuestion/SelectTypeQuestion.d.ts +3 -0
  97. package/lib/types/components/ZeroResults/ZeroResults.d.ts +2 -5
  98. package/lib/types/constants.d.ts +5 -4
  99. package/lib/types/hooks/useConsoleErrors.d.ts +2 -2
  100. package/lib/types/hooks/usePropsGetters/index.d.ts +18 -0
  101. package/lib/types/hooks/usePropsGetters/useCoverQuestionProps.d.ts +2 -0
  102. package/lib/types/hooks/usePropsGetters/useNextQuestionButtonProps.d.ts +4 -0
  103. package/lib/types/hooks/usePropsGetters/useOpenTextInputProps.d.ts +2 -0
  104. package/lib/types/hooks/usePropsGetters/usePreviousQuestionButtonProps.d.ts +3 -0
  105. package/lib/types/hooks/usePropsGetters/useSelectInputProps.d.ts +2 -0
  106. package/lib/types/hooks/useQuizEvents/index.d.ts +4 -16
  107. package/lib/types/hooks/useQuizEvents/useHydrateQuizLocalState.d.ts +4 -0
  108. package/lib/types/hooks/useQuizEvents/useQuizAnswerChangeHandler.d.ts +5 -0
  109. package/lib/types/hooks/useQuizEvents/useQuizBackClick.d.ts +2 -1
  110. package/lib/types/hooks/useQuizEvents/useQuizNextClick.d.ts +2 -1
  111. package/lib/types/hooks/useQuizEvents/useQuizResetClick.d.ts +4 -0
  112. package/lib/types/hooks/useQuizState/index.d.ts +16 -0
  113. package/lib/types/hooks/useQuizState/useQuizApiState.d.ts +12 -0
  114. package/lib/types/hooks/useQuizState/useQuizLocalState.d.ts +8 -0
  115. package/lib/types/index.d.ts +11 -0
  116. package/lib/types/services/index.d.ts +1 -1
  117. package/lib/types/stories/Quiz/tests/mocks.d.ts +5 -2
  118. package/lib/types/types.d.ts +121 -11
  119. package/lib/types/utils.d.ts +4 -0
  120. package/package.json +1 -1
  121. package/lib/cjs/hooks/useQuizLocalState.js +0 -54
  122. package/lib/mjs/hooks/useQuizLocalState.js +0 -48
  123. package/lib/types/hooks/useQuizApiState.d.ts +0 -11
  124. package/lib/types/hooks/useQuizLocalState.d.ts +0 -10
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const react_1 = tslib_1.__importDefault(require("react"));
5
- function BackButton(props) {
6
- // eslint-disable-next-line
7
- const { disabled } = props;
8
- return (react_1.default.createElement("button", Object.assign({ title: 'Quiz Back Button', type: 'button', className: `cio-question-back-button ${disabled ? 'disabled' : ''}` }, props),
9
- react_1.default.createElement("svg", { width: '8', height: '12', viewBox: '0 0 8 12', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' },
10
- react_1.default.createElement("path", { d: 'M6.06313 1.06268L0.964522 5.43176C0.882383 5.50218 0.816449 5.58954 0.771245 5.68785C0.726041 5.78615 0.702637 5.89306 0.702637 6.00126C0.702637 6.10946 0.726041 6.21637 0.771245 6.31467C0.816449 6.41297 0.882383 6.50033 0.964522 6.57076L6.06313 10.9398C6.5498 11.3568 7.30153 11.0111 7.30153 10.3703V1.63093C7.30153 0.990168 6.5498 0.644468 6.06313 1.06268Z', fill: 'currentColor' }))));
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
6
+ function BackButton() {
7
+ const { getPreviousQuestionButtonProps } = (0, react_1.useContext)(context_1.default);
8
+ if (getPreviousQuestionButtonProps) {
9
+ return (getPreviousQuestionButtonProps && (
10
+ // eslint-disable-next-line react/button-has-type
11
+ react_1.default.createElement("button", Object.assign({}, getPreviousQuestionButtonProps()),
12
+ react_1.default.createElement("svg", { width: '8', height: '12', viewBox: '0 0 8 12', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' },
13
+ react_1.default.createElement("path", { d: 'M6.06313 1.06268L0.964522 5.43176C0.882383 5.50218 0.816449 5.58954 0.771245 5.68785C0.726041 5.78615 0.702637 5.89306 0.702637 6.00126C0.702637 6.10946 0.726041 6.21637 0.771245 6.31467C0.816449 6.41297 0.882383 6.50033 0.964522 6.57076L6.06313 10.9398C6.5498 11.3568 7.30153 11.0111 7.30153 10.3703V1.63093C7.30153 0.990168 6.5498 0.644468 6.06313 1.06268Z', fill: 'currentColor' })))));
14
+ }
15
+ return null;
11
16
  }
12
17
  exports.default = BackButton;
@@ -3,8 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
5
  function CTAButton(props) {
6
- const { ctaText = 'Continue', disabled, className = 'cio-button-container' } = props, rest = tslib_1.__rest(props, ["ctaText", "disabled", "className"]);
7
- return (react_1.default.createElement("div", { className: `${className || ''}` },
8
- react_1.default.createElement("button", Object.assign({ type: 'button', className: `${disabled ? 'cio-question-cta-button disabled' : 'cio-question-cta-button'}` }, rest), ctaText || 'Continue')));
6
+ const { propsGetters, ctaText = 'Continue', disabled, className = 'cio-button-container' } = props, rest = tslib_1.__rest(props, ["propsGetters", "ctaText", "disabled", "className"]);
7
+ return (react_1.default.createElement("div", { className: `${className || ''}` }, propsGetters && (
8
+ // eslint-disable-next-line react/button-has-type
9
+ react_1.default.createElement("button", Object.assign({}, rest, propsGetters()), ctaText || 'Continue'))));
9
10
  }
10
11
  exports.default = CTAButton;
@@ -8,6 +8,7 @@ var QuestionTypes;
8
8
  QuestionTypes["Cover"] = "cover";
9
9
  QuestionTypes["SingleSelect"] = "single";
10
10
  QuestionTypes["MultipleSelect"] = "multiple";
11
+ QuestionTypes["Next"] = "next";
11
12
  QuestionTypes["Back"] = "back";
12
13
  QuestionTypes["Reset"] = "reset";
13
14
  QuestionTypes["Hydrate"] = "hydrate";
@@ -11,28 +11,35 @@ const useQuiz_1 = tslib_1.__importDefault(require("../../hooks/useQuiz"));
11
11
  const SessionPromptModal_1 = tslib_1.__importDefault(require("../SessionPromptModal/SessionPromptModal"));
12
12
  const utils_1 = require("../../utils");
13
13
  function CioQuiz(props) {
14
- const { cioClient, state, events: { nextQuestion, previousQuestion, resetQuiz, addToCart, resultClick, hydrateQuiz, hasStoredState, resetStoredState, }, primaryColorStyles, } = (0, useQuiz_1.default)(props);
14
+ const { cioClient, state, events: { hydrateQuiz, hasSessionStorageState, resetSessionStorageState }, getAddToCartButtonProps, getCoverQuestionProps, getHydrateQuizButtonProps, getNextQuestionButtonProps, getOpenTextInputProps, getPreviousQuestionButtonProps, getQuizImageProps, getQuizResultButtonProps, getQuizResultLinkProps, getResetQuizButtonProps, getSelectInputProps, primaryColorStyles, } = (0, useQuiz_1.default)(props);
15
15
  const [showSessionPrompt, setShowSessionPrompt] = (0, react_1.useState)(false);
16
16
  const { resultsPageOptions, sessionStateOptions } = props;
17
17
  (0, react_1.useEffect)(() => {
18
18
  // Respect showSessionModal if defined, else default to true.
19
19
  if ((sessionStateOptions === null || sessionStateOptions === void 0 ? void 0 : sessionStateOptions.showSessionModal) !== undefined) {
20
- setShowSessionPrompt((sessionStateOptions === null || sessionStateOptions === void 0 ? void 0 : sessionStateOptions.showSessionModal) && hasStoredState());
20
+ setShowSessionPrompt((sessionStateOptions === null || sessionStateOptions === void 0 ? void 0 : sessionStateOptions.showSessionModal) && hasSessionStorageState());
21
21
  }
22
22
  else {
23
- setShowSessionPrompt(hasStoredState());
23
+ setShowSessionPrompt(hasSessionStorageState());
24
24
  }
25
25
  // eslint-disable-next-line react-hooks/exhaustive-deps
26
26
  }, []);
27
27
  const contextValue = {
28
28
  cioClient,
29
29
  state,
30
- nextQuestion,
31
- previousQuestion,
32
- resetQuiz,
33
- addToCart,
34
- resultClick,
30
+ getAddToCartButtonProps,
31
+ getCoverQuestionProps,
32
+ getHydrateQuizButtonProps,
33
+ getNextQuestionButtonProps,
34
+ getOpenTextInputProps,
35
+ getPreviousQuestionButtonProps,
36
+ getQuizImageProps,
37
+ getQuizResultButtonProps,
38
+ getQuizResultLinkProps,
39
+ getResetQuizButtonProps,
40
+ getSelectInputProps,
35
41
  customClickItemCallback: !!(resultsPageOptions === null || resultsPageOptions === void 0 ? void 0 : resultsPageOptions.onQuizResultClick),
42
+ primaryColorStyles,
36
43
  };
37
44
  if (state.quiz.requestState === constants_1.RequestStates.Loading) {
38
45
  return (react_1.default.createElement("div", { className: 'cio-quiz' },
@@ -43,7 +50,7 @@ function CioQuiz(props) {
43
50
  react_1.default.createElement("style", null,
44
51
  ".cio-quiz ",
45
52
  (0, utils_1.convertPrimaryColorsToString)(primaryColorStyles)),
46
- react_1.default.createElement(SessionPromptModal_1.default, { resetStoredState: resetStoredState, continueSession: hydrateQuiz, showSessionPrompt: showSessionPrompt, setShowSessionPrompt: setShowSessionPrompt }),
53
+ react_1.default.createElement(SessionPromptModal_1.default, { resetStoredState: resetSessionStorageState, continueSession: hydrateQuiz, showSessionPrompt: showSessionPrompt, setShowSessionPrompt: setShowSessionPrompt }),
47
54
  react_1.default.createElement(context_1.default.Provider, { value: contextValue },
48
55
  state.quiz.results && react_1.default.createElement(ResultContainer_1.default, { options: resultsPageOptions }),
49
56
  state.quiz.currentQuestion && react_1.default.createElement(QuizQuestions_1.default, null))));
@@ -8,20 +8,26 @@ exports.initialState = {
8
8
  quizRequestState: constants_1.RequestStates.Stale,
9
9
  };
10
10
  function apiReducer(state, action) {
11
- var _a, _b, _c, _d, _e, _f;
11
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
12
12
  switch (action.type) {
13
13
  case actions_1.QuizAPIActionTypes.SET_IS_LOADING:
14
- return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Loading });
14
+ return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Loading, quizCurrentQuestion: undefined, quizResults: undefined });
15
15
  case actions_1.QuizAPIActionTypes.SET_IS_ERROR:
16
- return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Error, quizResults: undefined });
17
- case actions_1.QuizAPIActionTypes.SET_CURRENT_QUESTION:
18
- return Object.assign(Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Success, quizCurrentQuestion: (_a = action.payload) === null || _a === void 0 ? void 0 : _a.quizCurrentQuestion, quizResults: undefined }), (!state.quizCurrentQuestion && {
19
- quizFirstQuestion: (_b = action.payload) === null || _b === void 0 ? void 0 : _b.quizCurrentQuestion,
20
- }));
16
+ return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Error, quizCurrentQuestion: undefined, quizResults: undefined });
17
+ case actions_1.QuizAPIActionTypes.SET_CURRENT_QUESTION: {
18
+ const { isOpenQuestion, isCoverQuestion, isSingleQuestion, isMultipleQuestion, isSelectQuestion, } = (0, utils_1.getQuestionTypes)((_c = (_b = (_a = action.payload) === null || _a === void 0 ? void 0 : _a.quizCurrentQuestion) === null || _b === void 0 ? void 0 : _b.next_question) === null || _c === void 0 ? void 0 : _c.type);
19
+ const quizFirstQuestion = state.quizFirstQuestion || ((_d = action.payload) === null || _d === void 0 ? void 0 : _d.quizCurrentQuestion);
20
+ return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Success, quizCurrentQuestion: Object.assign(Object.assign({}, (_e = action.payload) === null || _e === void 0 ? void 0 : _e.quizCurrentQuestion), { isFirstQuestion: (quizFirstQuestion === null || quizFirstQuestion === void 0 ? void 0 : quizFirstQuestion.next_question.id) ===
21
+ ((_h = (_g = (_f = action.payload) === null || _f === void 0 ? void 0 : _f.quizCurrentQuestion) === null || _g === void 0 ? void 0 : _g.next_question) === null || _h === void 0 ? void 0 : _h.id), isOpenQuestion,
22
+ isCoverQuestion,
23
+ isSingleQuestion,
24
+ isMultipleQuestion,
25
+ isSelectQuestion }), quizFirstQuestion, quizResults: undefined });
26
+ }
21
27
  case actions_1.QuizAPIActionTypes.SET_QUIZ_RESULTS: {
22
- const filterExpression = ((_e = (_d = (_c = action.payload) === null || _c === void 0 ? void 0 : _c.quizResults) === null || _d === void 0 ? void 0 : _d.request) === null || _e === void 0 ? void 0 : _e.collection_filter_expression) || null;
28
+ const filterExpression = ((_l = (_k = (_j = action.payload) === null || _j === void 0 ? void 0 : _j.quizResults) === null || _k === void 0 ? void 0 : _k.request) === null || _l === void 0 ? void 0 : _l.collection_filter_expression) || null;
23
29
  const quizResultsFilters = [...new Set((0, utils_1.getFilterValuesFromExpression)(filterExpression))];
24
- return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Success, quizResults: (_f = action.payload) === null || _f === void 0 ? void 0 : _f.quizResults, quizResultsFilters, quizCurrentQuestion: undefined });
30
+ return Object.assign(Object.assign({}, state), { quizRequestState: constants_1.RequestStates.Success, quizResults: (_m = action.payload) === null || _m === void 0 ? void 0 : _m.quizResults, quizResultsFilters, quizCurrentQuestion: undefined });
25
31
  }
26
32
  case actions_1.QuizAPIActionTypes.RESET_QUIZ:
27
33
  return exports.initialState;
@@ -8,21 +8,49 @@ exports.initialState = {
8
8
  isLastAnswer: false,
9
9
  };
10
10
  function answerInputReducer(state, action) {
11
- return Object.assign(Object.assign({}, state), { [String(action.payload.questionId)]: action.payload.input });
11
+ return Object.assign(Object.assign({}, state), { [String(action.payload.questionId)]: {
12
+ type: action.type,
13
+ value: action.payload.input,
14
+ } });
12
15
  }
13
16
  function quizLocalReducer(state, action) {
14
- var _a, _b, _c, _d, _e, _f;
17
+ var _a, _b, _c, _d, _e;
15
18
  switch (action.type) {
16
19
  case actions_1.QuestionTypes.OpenText:
17
- return Object.assign(Object.assign({}, state), { answers: [...state.answers, ['true']], answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_a = action.payload) === null || _a === void 0 ? void 0 : _a.isLastQuestion) });
20
+ return Object.assign(Object.assign({}, state), { answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_a = action.payload) === null || _a === void 0 ? void 0 : _a.isLastQuestion) });
18
21
  case actions_1.QuestionTypes.Cover:
19
- return Object.assign(Object.assign({}, state), { answers: [...state.answers, ['seen']], isLastAnswer: !!((_b = action.payload) === null || _b === void 0 ? void 0 : _b.isLastQuestion) });
22
+ return Object.assign(Object.assign({}, state), { answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_b = action.payload) === null || _b === void 0 ? void 0 : _b.isLastQuestion) });
20
23
  case actions_1.QuestionTypes.SingleSelect:
21
- return Object.assign(Object.assign({}, state), { answers: [...state.answers, (_c = action.payload) === null || _c === void 0 ? void 0 : _c.input], answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_d = action.payload) === null || _d === void 0 ? void 0 : _d.isLastQuestion) });
24
+ return Object.assign(Object.assign({}, state), { answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_c = action.payload) === null || _c === void 0 ? void 0 : _c.isLastQuestion) });
22
25
  case actions_1.QuestionTypes.MultipleSelect:
23
- return Object.assign(Object.assign({}, state), { answers: [...state.answers, (_e = action.payload) === null || _e === void 0 ? void 0 : _e.input], answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_f = action.payload) === null || _f === void 0 ? void 0 : _f.isLastQuestion) });
24
- case actions_1.QuestionTypes.Back:
25
- return Object.assign(Object.assign({}, state), { answers: [...state.answers.slice(0, -1)], isLastAnswer: false });
26
+ return Object.assign(Object.assign({}, state), { answerInputs: answerInputReducer(state.answerInputs, action), isLastAnswer: !!((_d = action.payload) === null || _d === void 0 ? void 0 : _d.isLastQuestion) });
27
+ case actions_1.QuestionTypes.Next: {
28
+ const { answers } = state;
29
+ const newAnswers = [...answers];
30
+ const lastAnswerInputIndex = answers.length;
31
+ const currentAnswerInput = (_e = Object.values(state.answerInputs)) === null || _e === void 0 ? void 0 : _e[lastAnswerInputIndex];
32
+ switch (currentAnswerInput.type) {
33
+ case actions_1.QuestionTypes.OpenText:
34
+ newAnswers.push(['true']);
35
+ break;
36
+ case actions_1.QuestionTypes.Cover:
37
+ newAnswers.push(['seen']);
38
+ break;
39
+ case actions_1.QuestionTypes.SingleSelect:
40
+ newAnswers.push(currentAnswerInput.value);
41
+ break;
42
+ case actions_1.QuestionTypes.MultipleSelect:
43
+ newAnswers.push(currentAnswerInput.value);
44
+ break;
45
+ default:
46
+ newAnswers.push([]);
47
+ }
48
+ return Object.assign(Object.assign({}, state), { answers: newAnswers });
49
+ }
50
+ case actions_1.QuestionTypes.Back: {
51
+ const newAnswerInputs = Object.assign({}, state.answerInputs);
52
+ return Object.assign(Object.assign({}, state), { answerInputs: newAnswerInputs, answers: [...state.answers.slice(0, -1)], isLastAnswer: false });
53
+ }
26
54
  case actions_1.QuestionTypes.Reset:
27
55
  return Object.assign({}, exports.initialState);
28
56
  case actions_1.QuestionTypes.Hydrate:
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const react_1 = tslib_1.__importDefault(require("react"));
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
5
  const BackButton_1 = tslib_1.__importDefault(require("../BackButton/BackButton"));
6
6
  const CTAButton_1 = tslib_1.__importDefault(require("../CTAButton/CTAButton"));
7
+ const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
7
8
  function ControlBar(props) {
8
- const { showBackButton, backButtonHandler, ctaButtonText, nextButtonHandler, isNextButtonDisabled, } = props;
9
+ const { ctaButtonText } = props;
10
+ const { getNextQuestionButtonProps } = (0, react_1.useContext)(context_1.default);
9
11
  return (react_1.default.createElement("div", { className: 'cio-question-buttons-container' },
10
- showBackButton && react_1.default.createElement(BackButton_1.default, { onClick: backButtonHandler }),
11
- react_1.default.createElement(CTAButton_1.default, { disabled: isNextButtonDisabled, ctaText: ctaButtonText, onClick: nextButtonHandler })));
12
+ react_1.default.createElement(BackButton_1.default, null),
13
+ react_1.default.createElement(CTAButton_1.default, { ctaText: ctaButtonText, propsGetters: getNextQuestionButtonProps })));
12
14
  }
13
15
  exports.default = ControlBar;
@@ -9,17 +9,12 @@ const utils_1 = require("../../utils");
9
9
  const ControlBar_1 = tslib_1.__importDefault(require("../ControlBar/ControlBar"));
10
10
  function CoverTypeQuestion() {
11
11
  var _a;
12
- const { state, previousQuestion, nextQuestion } = (0, react_1.useContext)(context_1.default);
12
+ const { state } = (0, react_1.useContext)(context_1.default);
13
13
  let question;
14
14
  if (state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) {
15
15
  question = state === null || state === void 0 ? void 0 : state.quiz.currentQuestion.next_question;
16
16
  }
17
17
  const hasImage = (_a = question === null || question === void 0 ? void 0 : question.images) === null || _a === void 0 ? void 0 : _a.primary_url;
18
- const onNextClick = () => {
19
- if (nextQuestion) {
20
- nextQuestion();
21
- }
22
- };
23
18
  if (question) {
24
19
  return (react_1.default.createElement("div", { className: `
25
20
  cio-container${hasImage ? '--with-image' : ''}
@@ -29,7 +24,7 @@ function CoverTypeQuestion() {
29
24
  react_1.default.createElement("div", { className: 'cio-question-content' },
30
25
  react_1.default.createElement(QuestionTitle_1.default, { title: question === null || question === void 0 ? void 0 : question.title }),
31
26
  react_1.default.createElement(QuestionDescription_1.default, { description: question.description }),
32
- react_1.default.createElement(ControlBar_1.default, { nextButtonHandler: onNextClick, backButtonHandler: previousQuestion, showBackButton: !(state === null || state === void 0 ? void 0 : state.quiz.isFirstQuestion), ctaButtonText: question === null || question === void 0 ? void 0 : question.cta_text }))));
27
+ react_1.default.createElement(ControlBar_1.default, { ctaButtonText: question === null || question === void 0 ? void 0 : question.cta_text }))));
33
28
  }
34
29
  return null;
35
30
  }
@@ -7,41 +7,13 @@ const QuestionDescription_1 = tslib_1.__importDefault(require("../QuestionDescri
7
7
  const utils_1 = require("../../utils");
8
8
  const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
9
9
  const ControlBar_1 = tslib_1.__importDefault(require("../ControlBar/ControlBar"));
10
- function OpenTextQuestion(props) {
10
+ function OpenTextQuestion() {
11
11
  var _a;
12
- const { initialValue = '', onChangeHandler: userDefinedHandler = null } = props;
13
- const { state, previousQuestion, nextQuestion } = (0, react_1.useContext)(context_1.default);
14
- const [openTextInput, setOpenTextInput] = (0, react_1.useState)(initialValue);
12
+ const { state, getOpenTextInputProps } = (0, react_1.useContext)(context_1.default);
15
13
  let question;
16
14
  if (state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) {
17
15
  question = state === null || state === void 0 ? void 0 : state.quiz.currentQuestion.next_question;
18
16
  }
19
- const onChangeHandler = (e) => {
20
- setOpenTextInput(e.target.value);
21
- if (userDefinedHandler) {
22
- userDefinedHandler(e);
23
- }
24
- };
25
- const onNextClick = () => {
26
- if (nextQuestion && openTextInput) {
27
- nextQuestion(openTextInput);
28
- }
29
- };
30
- const onKeyDownHandler = (e) => {
31
- const { key } = e;
32
- if (key === 'Enter') {
33
- onNextClick();
34
- }
35
- };
36
- (0, react_1.useEffect)(() => {
37
- var _a, _b;
38
- if (state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) {
39
- const questionId = (_a = state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) === null || _a === void 0 ? void 0 : _a.next_question.id;
40
- const currentAnswer = (_b = state.answers.inputs) === null || _b === void 0 ? void 0 : _b[questionId];
41
- const openTextAnswer = currentAnswer || initialValue;
42
- setOpenTextInput(openTextAnswer);
43
- }
44
- }, [state, initialValue]);
45
17
  if (question) {
46
18
  const hasImage = (_a = question === null || question === void 0 ? void 0 : question.images) === null || _a === void 0 ? void 0 : _a.primary_url;
47
19
  return (react_1.default.createElement("div", { className: `
@@ -52,8 +24,8 @@ function OpenTextQuestion(props) {
52
24
  react_1.default.createElement("div", { className: 'cio-question-content' },
53
25
  react_1.default.createElement(QuestionTitle_1.default, { title: question.title }),
54
26
  react_1.default.createElement(QuestionDescription_1.default, { description: question.description }),
55
- react_1.default.createElement("input", { className: 'cio-question-input-text', placeholder: question.input_placeholder || 'Answer here...', value: openTextInput, onChange: onChangeHandler, onKeyDown: onKeyDownHandler }),
56
- react_1.default.createElement(ControlBar_1.default, { nextButtonHandler: onNextClick, isNextButtonDisabled: !openTextInput, backButtonHandler: previousQuestion, showBackButton: !(state === null || state === void 0 ? void 0 : state.quiz.isFirstQuestion), ctaButtonText: question === null || question === void 0 ? void 0 : question.cta_text }))));
27
+ getOpenTextInputProps && react_1.default.createElement("input", Object.assign({}, getOpenTextInputProps())),
28
+ react_1.default.createElement(ControlBar_1.default, { ctaButtonText: question === null || question === void 0 ? void 0 : question.cta_text }))));
57
29
  }
58
30
  return null;
59
31
  }
@@ -1,12 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const react_1 = tslib_1.__importDefault(require("react"));
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
5
  const RedoSVG_1 = tslib_1.__importDefault(require("./RedoSVG"));
6
+ const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
6
7
  function RedoButton(props) {
7
8
  const { redoText = 'Redo Quiz', disabled } = props, rest = tslib_1.__rest(props, ["redoText", "disabled"]);
8
- return (react_1.default.createElement("button", Object.assign({ type: 'button', className: `${disabled ? 'cio-question-redo-button disabled' : 'cio-question-redo-button'}` }, rest),
9
- react_1.default.createElement(RedoSVG_1.default, null),
10
- react_1.default.createElement("span", null, redoText)));
9
+ const { getResetQuizButtonProps } = (0, react_1.useContext)(context_1.default);
10
+ if (getResetQuizButtonProps) {
11
+ return (
12
+ // eslint-disable-next-line react/button-has-type
13
+ react_1.default.createElement("button", Object.assign({}, rest, getResetQuizButtonProps()),
14
+ react_1.default.createElement(RedoSVG_1.default, null),
15
+ react_1.default.createElement("span", null, redoText)));
16
+ }
17
+ return null;
11
18
  }
12
19
  exports.default = RedoButton;
@@ -7,21 +7,9 @@ const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
7
7
  function ResultCard(props) {
8
8
  var _a, _b;
9
9
  const { result, salePriceKey, regularPriceKey, resultPosition } = props;
10
- const { resultClick, customClickItemCallback } = (0, react_1.useContext)(context_1.default);
10
+ const { customClickItemCallback, getQuizResultButtonProps, getQuizResultLinkProps } = (0, react_1.useContext)(context_1.default);
11
11
  const salePrice = salePriceKey && ((_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a[salePriceKey]);
12
12
  const regularPrice = regularPriceKey && ((_b = result === null || result === void 0 ? void 0 : result.data) === null || _b === void 0 ? void 0 : _b[regularPriceKey]);
13
- const clickHandler = () => {
14
- if (resultClick) {
15
- resultClick(result, resultPosition);
16
- }
17
- };
18
- const keyDownHandler = (event) => {
19
- if ((event === null || event === void 0 ? void 0 : event.key) === ' ' || (event === null || event === void 0 ? void 0 : event.key) === 'Enter') {
20
- if (resultClick) {
21
- resultClick(result, resultPosition);
22
- }
23
- }
24
- };
25
13
  const resultCardContent = () => {
26
14
  var _a;
27
15
  return (react_1.default.createElement(react_1.default.Fragment, null,
@@ -37,11 +25,8 @@ function ResultCard(props) {
37
25
  "$",
38
26
  regularPrice))))));
39
27
  };
40
- const resultCardContentWithoutLink = () => (react_1.default.createElement("div", { className: 'cio-result-card-container', onClick: () => clickHandler(), onKeyDown: (e) => keyDownHandler(e), role: 'button', tabIndex: 0 }, resultCardContent()));
41
- const resultCardContentWithLink = () => {
42
- var _a;
43
- return (react_1.default.createElement("a", { className: 'cio-result-card-anchor', href: (_a = result.data) === null || _a === void 0 ? void 0 : _a.url, onClick: () => clickHandler(), onKeyDown: (e) => keyDownHandler(e) }, resultCardContent()));
44
- };
28
+ const resultCardContentWithoutLink = () => getQuizResultButtonProps && (react_1.default.createElement("div", Object.assign({}, getQuizResultButtonProps({ result, position: resultPosition, type: 'button' })), resultCardContent()));
29
+ const resultCardContentWithLink = () => getQuizResultLinkProps && (react_1.default.createElement("a", Object.assign({ className: 'cio-result-card-anchor' }, getQuizResultLinkProps({ result, position: resultPosition, type: 'link' })), resultCardContent()));
45
30
  return (react_1.default.createElement("div", { className: 'cio-result-card' },
46
31
  !customClickItemCallback ? resultCardContentWithLink() : resultCardContentWithoutLink(),
47
32
  react_1.default.createElement(ResultCtaButton_1.default, { item: result, price: salePrice || regularPrice })));
@@ -11,7 +11,7 @@ function ResultContainer(props) {
11
11
  var _a, _b, _c;
12
12
  const { options } = props;
13
13
  const { resultCardSalePriceKey, resultCardRegularPriceKey } = options;
14
- const { state, resetQuiz } = (0, react_1.useContext)(context_1.default);
14
+ const { state } = (0, react_1.useContext)(context_1.default);
15
15
  const zeroResults = !((_c = (_b = (_a = state === null || state === void 0 ? void 0 : state.quiz.results) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.results) === null || _c === void 0 ? void 0 : _c.length);
16
16
  const resultsTitle = zeroResults ? 'Oops, there are no results' : 'Here are your results';
17
17
  if (state === null || state === void 0 ? void 0 : state.quiz.results) {
@@ -19,7 +19,7 @@ function ResultContainer(props) {
19
19
  react_1.default.createElement("h1", { className: 'cio-results-title' }, resultsTitle),
20
20
  react_1.default.createElement("div", { className: 'cio-results-filter-and-redo-container' },
21
21
  react_1.default.createElement(ResultFilters_1.default, null),
22
- react_1.default.createElement(RedoButton_1.default, { onClick: resetQuiz })),
22
+ react_1.default.createElement(RedoButton_1.default, null)),
23
23
  !zeroResults && (react_1.default.createElement(Results_1.default, { resultCardSalePriceKey: resultCardSalePriceKey, resultCardRegularPriceKey: resultCardRegularPriceKey })),
24
24
  zeroResults && react_1.default.createElement(ZeroResults_1.default, null)));
25
25
  }
@@ -4,12 +4,13 @@ const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importStar(require("react"));
5
5
  const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
6
6
  function ResultCtaButton(props) {
7
- const { item, className, price } = props;
8
- const { addToCart } = (0, react_1.useContext)(context_1.default);
9
- return (react_1.default.createElement("button", { type: 'button', className: `cio-result-card-cta-button ${className || ''}`, onClick: (e) => {
10
- if (addToCart) {
11
- addToCart(e, item, price);
12
- }
13
- } }, "Add to Cart"));
7
+ const { item, price } = props;
8
+ const { getAddToCartButtonProps } = (0, react_1.useContext)(context_1.default);
9
+ if (getAddToCartButtonProps) {
10
+ return (
11
+ // eslint-disable-next-line react/button-has-type
12
+ react_1.default.createElement("button", Object.assign({}, getAddToCartButtonProps(item, price)), "Add to Cart"));
13
+ }
14
+ return null;
14
15
  }
15
16
  exports.default = ResultCtaButton;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const ResultCtaButton_1 = tslib_1.__importDefault(require("../ResultCtaButton/ResultCtaButton"));
6
+ // const flattenRequestFilters: any = (result: any, key: any) => {
7
+ // return Object.keys(result).reduce((res: any, el: any) => {
8
+ // if (el === key) {
9
+ // if (typeof result[el] === 'string') {
10
+ // return [...res, result[el]];
11
+ // } else if (Array.isArray(result[el])) {
12
+ // return [...res, ...result[el]];
13
+ // }
14
+ // }
15
+ // if (typeof result[el] === 'object' && result[el] !== null) {
16
+ // return [...res, ...flattenRequestFilters(result[el], key)]
17
+ // }
18
+ // return res;
19
+ // }, [])
20
+ // }
21
+ // Code used to flatten facets and extract the key. TBD if we are using it for facet pills
22
+ function ResultHeroCard(props) {
23
+ var _a, _b;
24
+ const { heroItem } = props;
25
+ return (react_1.default.createElement("div", { className: 'cio-hero-card' },
26
+ react_1.default.createElement("img", { className: 'cio-hero-card-image', src: (_a = heroItem === null || heroItem === void 0 ? void 0 : heroItem.data) === null || _a === void 0 ? void 0 : _a.image_url, alt: 'product' }),
27
+ react_1.default.createElement("div", { className: 'cio-hero-card-contents' },
28
+ react_1.default.createElement("div", { className: 'cio-hero-card-title' }, "Especially Curated For You!"),
29
+ react_1.default.createElement("h2", { className: 'cio-hero-card-item-name' }, heroItem === null || heroItem === void 0 ? void 0 : heroItem.value),
30
+ react_1.default.createElement("div", { className: 'cio-hero-card-item-price' },
31
+ "$", (_b = heroItem === null || heroItem === void 0 ? void 0 : heroItem.data) === null || _b === void 0 ? void 0 :
32
+ _b.price),
33
+ react_1.default.createElement("p", { className: 'cio-hero-card-item-description' }),
34
+ react_1.default.createElement(ResultCtaButton_1.default, { item: [heroItem] }))));
35
+ }
36
+ exports.default = ResultHeroCard;
@@ -6,63 +6,19 @@ const QuestionTitle_1 = tslib_1.__importDefault(require("../QuestionTitle/Questi
6
6
  const QuestionDescription_1 = tslib_1.__importDefault(require("../QuestionDescription/QuestionDescription"));
7
7
  const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
8
8
  const utils_1 = require("../../utils");
9
- const actions_1 = require("../CioQuiz/actions");
10
9
  const ControlBar_1 = tslib_1.__importDefault(require("../ControlBar/ControlBar"));
10
+ const actions_1 = require("../CioQuiz/actions");
11
11
  function SelectTypeQuestion() {
12
- var _a, _b;
13
- const { state, nextQuestion, previousQuestion } = (0, react_1.useContext)(context_1.default);
12
+ var _a;
13
+ const { state, getSelectInputProps } = (0, react_1.useContext)(context_1.default);
14
14
  let question;
15
- let type;
16
15
  let hasImages = false;
17
16
  let instructions;
18
17
  if (state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) {
19
18
  question = state.quiz.currentQuestion.next_question;
20
- type = question.type;
21
19
  hasImages = question.options.some((option) => option.images);
22
- instructions = type === actions_1.QuestionTypes.MultipleSelect && 'Select one or more options';
20
+ instructions = question.type === actions_1.QuestionTypes.MultipleSelect && 'Select one or more options';
23
21
  }
24
- const [selected, setSelected] = (0, react_1.useState)({});
25
- const isDisabled = Object.keys(selected).length === 0;
26
- (0, react_1.useEffect)(() => {
27
- var _a, _b, _c, _d;
28
- if ((_b = (_a = state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) === null || _a === void 0 ? void 0 : _a.next_question) === null || _b === void 0 ? void 0 : _b.type) {
29
- const nextQuestionId = state.quiz.currentQuestion.next_question.id;
30
- const answers = ((_d = (_c = state.answers) === null || _c === void 0 ? void 0 : _c.inputs) === null || _d === void 0 ? void 0 : _d[nextQuestionId]) || [];
31
- const prevSelected = {};
32
- answers === null || answers === void 0 ? void 0 : answers.forEach((answer) => {
33
- prevSelected[Number(answer)] = true;
34
- });
35
- setSelected(prevSelected);
36
- }
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
- }, [(_a = state === null || state === void 0 ? void 0 : state.quiz.currentQuestion) === null || _a === void 0 ? void 0 : _a.next_question.id]);
39
- const toggleIdSelected = (id) => {
40
- if (type === actions_1.QuestionTypes.SingleSelect && nextQuestion) {
41
- setSelected({ [id]: true });
42
- nextQuestion([id.toString()]);
43
- }
44
- else if (type === actions_1.QuestionTypes.MultipleSelect) {
45
- if (selected[id]) {
46
- const newState = Object.assign({}, selected);
47
- delete newState[id];
48
- setSelected(newState);
49
- }
50
- else {
51
- setSelected(Object.assign(Object.assign({}, selected), { [id]: true }));
52
- }
53
- }
54
- };
55
- const onOptionKeyDown = (event, id) => {
56
- if ((event === null || event === void 0 ? void 0 : event.key) === ' ' || (event === null || event === void 0 ? void 0 : event.key) === 'Enter') {
57
- toggleIdSelected(id);
58
- }
59
- };
60
- const onNextClick = () => {
61
- if (nextQuestion && !isDisabled && (state === null || state === void 0 ? void 0 : state.quiz.currentQuestion)) {
62
- const selectedAnswers = Object.keys(selected).filter((key) => selected[Number(key)]);
63
- nextQuestion(selectedAnswers);
64
- }
65
- };
66
22
  if (question) {
67
23
  return (react_1.default.createElement("div", { className: 'cio-select-question-container', "data-question-key": question.key },
68
24
  react_1.default.createElement("div", { className: 'cio-select-question-text' },
@@ -71,16 +27,10 @@ function SelectTypeQuestion() {
71
27
  instructions && react_1.default.createElement("div", { className: 'cio-select-question-instructions' }, instructions),
72
28
  react_1.default.createElement("div", { className: `${!hasImages
73
29
  ? 'cio-question-options-container-text-only'
74
- : 'cio-question-options-container'}` }, (_b = question === null || question === void 0 ? void 0 : question.options) === null || _b === void 0 ? void 0 : _b.map((option) => (react_1.default.createElement("div", { className: `${!hasImages
75
- ? 'cio-question-option-container-text-only'
76
- : 'cio-question-option-container'} ${selected[option.id] ? 'selected' : ''}`, "data-question-option-key": option.key, onClick: () => {
77
- toggleIdSelected(option.id);
78
- }, onKeyDown: (event) => {
79
- onOptionKeyDown(event, option.id);
80
- }, role: 'button', tabIndex: 0, key: option.id },
30
+ : 'cio-question-options-container'}` }, (_a = question === null || question === void 0 ? void 0 : question.options) === null || _a === void 0 ? void 0 : _a.map((option) => getSelectInputProps && (react_1.default.createElement("div", Object.assign({}, getSelectInputProps(option)),
81
31
  option.images ? (0, utils_1.renderImages)(option.images, 'cio-question-option-image') : '',
82
32
  react_1.default.createElement("div", { className: 'cio-question-option-value' }, option === null || option === void 0 ? void 0 : option.value))))),
83
- react_1.default.createElement(ControlBar_1.default, { nextButtonHandler: onNextClick, isNextButtonDisabled: isDisabled, backButtonHandler: previousQuestion, showBackButton: !(state === null || state === void 0 ? void 0 : state.quiz.isFirstQuestion), ctaButtonText: question === null || question === void 0 ? void 0 : question.cta_text })));
33
+ react_1.default.createElement(ControlBar_1.default, { ctaButtonText: (question === null || question === void 0 ? void 0 : question.cta_text) || 'Continue' })));
84
34
  }
85
35
  return null;
86
36
  }
@@ -8,17 +8,29 @@ function SessionPromptModal({ continueSession, resetStoredState, setShowSessionP
8
8
  resetStoredState();
9
9
  setShowSessionPrompt(false);
10
10
  };
11
- if (showSessionPrompt)
11
+ if (showSessionPrompt) {
12
+ const getContinueSessionButtonProps = () => ({
13
+ className: 'cio-question-cta-button',
14
+ onClick: () => {
15
+ continueSession();
16
+ setShowSessionPrompt(false);
17
+ },
18
+ });
19
+ const getResetSession = () => ({
20
+ className: 'cio-question-cta-button',
21
+ onClick: () => {
22
+ resetStoredState();
23
+ setShowSessionPrompt(false);
24
+ },
25
+ });
12
26
  return (react_1.default.createElement("div", { className: 'cio-session-prompt-modal', role: 'presentation', onClick: onNoClickHandler },
13
27
  react_1.default.createElement("div", { className: 'cio-session-prompt-container' },
14
28
  react_1.default.createElement("div", { className: 'cio-session-prompt-content', role: 'presentation', onClick: (e) => e.stopPropagation() },
15
29
  react_1.default.createElement("div", null, "Do you want to continue where you left off?"),
16
30
  react_1.default.createElement("div", { className: 'cio-session-prompt-controls-container' },
17
- react_1.default.createElement(CTAButton_1.default, { ctaText: 'No', type: 'button', onClick: onNoClickHandler }),
18
- react_1.default.createElement(CTAButton_1.default, { type: 'button', ctaText: 'Yes', onClick: () => {
19
- continueSession();
20
- setShowSessionPrompt(false);
21
- } }))))));
31
+ react_1.default.createElement(CTAButton_1.default, { ctaText: 'No', type: 'button', propsGetters: getResetSession }),
32
+ react_1.default.createElement(CTAButton_1.default, { type: 'button', ctaText: 'Yes', propsGetters: getContinueSessionButtonProps }))))));
33
+ }
22
34
  return null;
23
35
  }
24
36
  exports.default = SessionPromptModal;
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const react_1 = tslib_1.__importDefault(require("react"));
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
5
  const CTAButton_1 = tslib_1.__importDefault(require("../CTAButton/CTAButton"));
6
- function ZeroResults(props) {
7
- const { resetQuizClickHandler } = props;
6
+ const context_1 = tslib_1.__importDefault(require("../CioQuiz/context"));
7
+ function ZeroResults() {
8
+ const { getResetQuizButtonProps } = (0, react_1.useContext)(context_1.default);
8
9
  return (react_1.default.createElement("div", { className: 'cio-zero-results' },
9
10
  react_1.default.createElement("h3", { className: 'cio-zero-results-subtitle' }, "Sorry, it seems like we couldn\u2019t find results based on your answers."),
10
11
  react_1.default.createElement("p", { className: 'cio-zero-results-description' }, "This is embarrassing \uD83D\uDE22. It might be that some of the questions are not properly set up from our end. Would you give us another try?"),
11
- react_1.default.createElement(CTAButton_1.default, { ctaText: 'Try Again', onClick: resetQuizClickHandler })));
12
+ react_1.default.createElement(CTAButton_1.default, { ctaText: 'Try Again', propsGetters: getResetQuizButtonProps })));
12
13
  }
13
14
  exports.default = ZeroResults;