@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.
- package/dist/constructorio-ui-quizzes-bundled.js +20 -20
- package/lib/cjs/components/BackButton/BackButton.js +12 -7
- package/lib/cjs/components/CTAButton/CTAButton.js +4 -3
- package/lib/cjs/components/CioQuiz/actions.js +1 -0
- package/lib/cjs/components/CioQuiz/index.js +16 -9
- package/lib/cjs/components/CioQuiz/quizApiReducer.js +15 -9
- package/lib/cjs/components/CioQuiz/quizLocalReducer.js +36 -8
- package/lib/cjs/components/ControlBar/ControlBar.js +6 -4
- package/lib/cjs/components/CoverTypeQuestion/CoverTypeQuestion.js +2 -7
- package/lib/cjs/components/OpenTextTypeQuestion/OpenTextTypeQuestion.js +4 -32
- package/lib/cjs/components/RedoButton/RedoButton.js +11 -4
- package/lib/cjs/components/ResultCard/ResultCard.js +3 -18
- package/lib/cjs/components/ResultContainer/ResultContainer.js +2 -2
- package/lib/cjs/components/ResultCtaButton/ResultCtaButton.js +8 -7
- package/lib/cjs/components/ResultHeroCard/ResultHeroCard.js +36 -0
- package/lib/cjs/components/SelectTypeQuestion/SelectTypeQuestion.js +6 -56
- package/lib/cjs/components/SessionPromptModal/SessionPromptModal.js +18 -6
- package/lib/cjs/components/ZeroResults/ZeroResults.js +5 -4
- package/lib/cjs/constants.js +40 -5
- package/lib/cjs/hooks/useConsoleErrors.js +2 -1
- package/lib/cjs/hooks/usePropsGetters/index.js +85 -0
- package/lib/cjs/hooks/usePropsGetters/useCoverQuestionProps.js +13 -0
- package/lib/cjs/hooks/usePropsGetters/useNextQuestionButtonProps.js +24 -0
- package/lib/cjs/hooks/usePropsGetters/useOpenTextInputProps.js +47 -0
- package/lib/cjs/hooks/usePropsGetters/usePreviousQuestionButtonProps.js +18 -0
- package/lib/cjs/hooks/usePropsGetters/useSelectInputProps.js +84 -0
- package/lib/cjs/hooks/useQuiz.js +14 -28
- package/lib/cjs/hooks/useQuizEvents/index.js +21 -16
- package/lib/cjs/hooks/useQuizEvents/useHydrateQuizLocalState.js +18 -0
- package/lib/cjs/hooks/useQuizEvents/useQuizAddToCart.js +2 -2
- package/lib/cjs/hooks/useQuizEvents/useQuizAnswerChangeHandler.js +48 -0
- package/lib/cjs/hooks/useQuizEvents/useQuizBackClick.js +5 -5
- package/lib/cjs/hooks/useQuizEvents/useQuizNextClick.js +13 -39
- package/lib/cjs/hooks/useQuizEvents/useQuizResetClick.js +20 -0
- package/lib/cjs/hooks/useQuizEvents/useQuizResultClick.js +2 -2
- package/lib/cjs/hooks/useQuizState/index.js +21 -0
- package/lib/cjs/hooks/{useQuizApiState.js → useQuizState/useQuizApiState.js} +15 -29
- package/lib/cjs/hooks/useQuizState/useQuizLocalState.js +30 -0
- package/lib/cjs/index.js +25 -0
- package/lib/cjs/services/index.js +3 -3
- package/lib/cjs/stories/Quiz/tests/mocks.js +69 -14
- package/lib/cjs/utils.js +23 -1
- package/lib/mjs/components/BackButton/BackButton.js +12 -7
- package/lib/mjs/components/CTAButton/CTAButton.js +4 -3
- package/lib/mjs/components/CioQuiz/actions.js +1 -0
- package/lib/mjs/components/CioQuiz/index.js +16 -9
- package/lib/mjs/components/CioQuiz/quizApiReducer.js +19 -7
- package/lib/mjs/components/CioQuiz/quizLocalReducer.js +36 -7
- package/lib/mjs/components/ControlBar/ControlBar.js +6 -4
- package/lib/mjs/components/CoverTypeQuestion/CoverTypeQuestion.js +2 -7
- package/lib/mjs/components/OpenTextTypeQuestion/OpenTextTypeQuestion.js +5 -32
- package/lib/mjs/components/RedoButton/RedoButton.js +11 -4
- package/lib/mjs/components/ResultCard/ResultCard.js +3 -15
- package/lib/mjs/components/ResultContainer/ResultContainer.js +2 -2
- package/lib/mjs/components/ResultCtaButton/ResultCtaButton.js +8 -7
- package/lib/mjs/components/ResultHeroCard/ResultHeroCard.js +31 -0
- package/lib/mjs/components/SelectTypeQuestion/SelectTypeQuestion.js +6 -55
- package/lib/mjs/components/SessionPromptModal/SessionPromptModal.js +18 -6
- package/lib/mjs/components/ZeroResults/ZeroResults.js +5 -4
- package/lib/mjs/constants.js +39 -4
- package/lib/mjs/hooks/useConsoleErrors.js +2 -1
- package/lib/mjs/hooks/usePropsGetters/index.js +72 -0
- package/lib/mjs/hooks/usePropsGetters/useCoverQuestionProps.js +10 -0
- package/lib/mjs/hooks/usePropsGetters/useNextQuestionButtonProps.js +20 -0
- package/lib/mjs/hooks/usePropsGetters/useOpenTextInputProps.js +43 -0
- package/lib/mjs/hooks/usePropsGetters/usePreviousQuestionButtonProps.js +14 -0
- package/lib/mjs/hooks/usePropsGetters/useSelectInputProps.js +79 -0
- package/lib/mjs/hooks/useQuiz.js +13 -21
- package/lib/mjs/hooks/useQuizEvents/index.js +21 -16
- package/lib/mjs/hooks/useQuizEvents/useHydrateQuizLocalState.js +16 -0
- package/lib/mjs/hooks/useQuizEvents/useQuizAddToCart.js +2 -2
- package/lib/mjs/hooks/useQuizEvents/useQuizAnswerChangeHandler.js +45 -0
- package/lib/mjs/hooks/useQuizEvents/useQuizBackClick.js +5 -5
- package/lib/mjs/hooks/useQuizEvents/useQuizNextClick.js +12 -38
- package/lib/mjs/hooks/useQuizEvents/useQuizResetClick.js +18 -0
- package/lib/mjs/hooks/useQuizEvents/useQuizResultClick.js +2 -2
- package/lib/mjs/hooks/useQuizState/index.js +18 -0
- package/lib/mjs/hooks/{useQuizApiState.js → useQuizState/useQuizApiState.js} +15 -28
- package/lib/mjs/hooks/useQuizState/useQuizLocalState.js +26 -0
- package/lib/mjs/index.js +14 -0
- package/lib/mjs/services/index.js +1 -1
- package/lib/mjs/stories/Quiz/tests/mocks.js +75 -12
- package/lib/mjs/utils.js +17 -0
- package/lib/styles.css +13 -2
- package/lib/types/components/BackButton/BackButton.d.ts +2 -2
- package/lib/types/components/CTAButton/CTAButton.d.ts +1 -0
- package/lib/types/components/CioQuiz/actions.d.ts +5 -6
- package/lib/types/components/CioQuiz/context.d.ts +13 -6
- package/lib/types/components/CioQuiz/quizApiReducer.d.ts +2 -2
- package/lib/types/components/CioQuiz/quizLocalReducer.d.ts +3 -5
- package/lib/types/components/ControlBar/ControlBar.d.ts +0 -4
- package/lib/types/components/OpenTextTypeQuestion/OpenTextTypeQuestion.d.ts +2 -6
- package/lib/types/components/RedoButton/RedoButton.d.ts +1 -1
- package/lib/types/components/ResultCtaButton/ResultCtaButton.d.ts +1 -2
- package/lib/types/components/ResultHeroCard/ResultHeroCard.d.ts +7 -0
- package/lib/types/components/SelectTypeQuestion/SelectTypeQuestion.d.ts +3 -0
- package/lib/types/components/ZeroResults/ZeroResults.d.ts +2 -5
- package/lib/types/constants.d.ts +5 -4
- package/lib/types/hooks/useConsoleErrors.d.ts +2 -2
- package/lib/types/hooks/usePropsGetters/index.d.ts +18 -0
- package/lib/types/hooks/usePropsGetters/useCoverQuestionProps.d.ts +2 -0
- package/lib/types/hooks/usePropsGetters/useNextQuestionButtonProps.d.ts +4 -0
- package/lib/types/hooks/usePropsGetters/useOpenTextInputProps.d.ts +2 -0
- package/lib/types/hooks/usePropsGetters/usePreviousQuestionButtonProps.d.ts +3 -0
- package/lib/types/hooks/usePropsGetters/useSelectInputProps.d.ts +2 -0
- package/lib/types/hooks/useQuizEvents/index.d.ts +4 -16
- package/lib/types/hooks/useQuizEvents/useHydrateQuizLocalState.d.ts +4 -0
- package/lib/types/hooks/useQuizEvents/useQuizAnswerChangeHandler.d.ts +5 -0
- package/lib/types/hooks/useQuizEvents/useQuizBackClick.d.ts +2 -1
- package/lib/types/hooks/useQuizEvents/useQuizNextClick.d.ts +2 -1
- package/lib/types/hooks/useQuizEvents/useQuizResetClick.d.ts +4 -0
- package/lib/types/hooks/useQuizState/index.d.ts +16 -0
- package/lib/types/hooks/useQuizState/useQuizApiState.d.ts +12 -0
- package/lib/types/hooks/useQuizState/useQuizLocalState.d.ts +8 -0
- package/lib/types/index.d.ts +11 -0
- package/lib/types/services/index.d.ts +1 -1
- package/lib/types/stories/Quiz/tests/mocks.d.ts +5 -2
- package/lib/types/types.d.ts +121 -11
- package/lib/types/utils.d.ts +4 -0
- package/package.json +1 -1
- package/lib/cjs/hooks/useQuizLocalState.js +0 -54
- package/lib/mjs/hooks/useQuizLocalState.js +0 -48
- package/lib/types/hooks/useQuizApiState.d.ts +0 -11
- 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.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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: {
|
|
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) &&
|
|
20
|
+
setShowSessionPrompt((sessionStateOptions === null || sessionStateOptions === void 0 ? void 0 : sessionStateOptions.showSessionModal) && hasSessionStorageState());
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
|
-
setShowSessionPrompt(
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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:
|
|
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
|
-
|
|
19
|
-
|
|
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 = ((
|
|
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: (
|
|
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)]:
|
|
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
|
|
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), {
|
|
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), {
|
|
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), {
|
|
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), {
|
|
24
|
-
case actions_1.QuestionTypes.
|
|
25
|
-
|
|
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.
|
|
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 {
|
|
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
|
-
|
|
11
|
-
react_1.default.createElement(CTAButton_1.default, {
|
|
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
|
|
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, {
|
|
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(
|
|
10
|
+
function OpenTextQuestion() {
|
|
11
11
|
var _a;
|
|
12
|
-
const {
|
|
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", {
|
|
56
|
-
react_1.default.createElement(ControlBar_1.default, {
|
|
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.
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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 {
|
|
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", {
|
|
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
|
|
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,
|
|
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,
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
13
|
-
const { state,
|
|
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'}` }, (
|
|
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, {
|
|
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',
|
|
18
|
-
react_1.default.createElement(CTAButton_1.default, { type: 'button', ctaText: 'Yes',
|
|
19
|
-
|
|
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.
|
|
4
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
5
|
const CTAButton_1 = tslib_1.__importDefault(require("../CTAButton/CTAButton"));
|
|
6
|
-
|
|
7
|
-
|
|
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',
|
|
12
|
+
react_1.default.createElement(CTAButton_1.default, { ctaText: 'Try Again', propsGetters: getResetQuizButtonProps })));
|
|
12
13
|
}
|
|
13
14
|
exports.default = ZeroResults;
|