@constructor-io/constructorio-ui-quizzes 1.17.19 → 1.17.20

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.
@@ -78,7 +78,7 @@ function CioQuiz(props) {
78
78
  ".cio-quiz ",
79
79
  (0, utils_1.convertPrimaryColorsToString)(primaryColorStyles)),
80
80
  react_1.default.createElement(SessionPromptModal_1.default, { resetStoredState: resetSessionStorageState, continueSession: hydrateQuiz, showSessionPrompt: showSessionPrompt, setShowSessionPrompt: setShowSessionPrompt }),
81
- state.quiz && showShareModal && (react_1.default.createElement(ShareResultsModal_1.default, { onClose: onModalClose, quizState: state.quiz, onEmailResults: callbacks === null || callbacks === void 0 ? void 0 : callbacks.onEmailResults })),
81
+ state.quiz && showShareModal && (react_1.default.createElement(ShareResultsModal_1.default, { onClose: onModalClose, quizState: state.quiz, onEmailResults: callbacks === null || callbacks === void 0 ? void 0 : callbacks.onEmailResults, answers: state.answers.payload })),
82
82
  react_1.default.createElement(context_1.default.Provider, { value: contextValue }, state.quiz.results || skipToResults ? (react_1.default.createElement(ResultContainer_1.default, { resultCardOptions: resultCardOptions, onShare: onModalOpen, resultsPageOptions: resultsPageOptions })) : (state.quiz.currentQuestion && (react_1.default.createElement(react_1.default.Fragment, null,
83
83
  react_1.default.createElement(ProgressBar_1.default, null),
84
84
  react_1.default.createElement(QuizQuestions_1.default, null),
@@ -6,9 +6,9 @@ const CloseSVG_1 = tslib_1.__importDefault(require("./CloseSVG"));
6
6
  const LinkField_1 = tslib_1.__importDefault(require("./LinkField"));
7
7
  const EmailField_1 = tslib_1.__importDefault(require("./EmailField"));
8
8
  const useShareResultsLink_1 = tslib_1.__importDefault(require("../../hooks/useShareResultsLink"));
9
- function ShareResultsModal({ onClose, quizState, onEmailResults, }) {
9
+ function ShareResultsModal({ onClose, quizState, answers, onEmailResults, }) {
10
10
  var _a, _b;
11
- const url = (0, useShareResultsLink_1.default)(quizState);
11
+ const url = (0, useShareResultsLink_1.default)(quizState, answers);
12
12
  const results = (_b = (_a = quizState === null || quizState === void 0 ? void 0 : quizState.results) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.results;
13
13
  return (react_1.default.createElement("div", { className: 'cio-share-results-modal', role: 'presentation', onClick: onClose },
14
14
  react_1.default.createElement("div", { className: 'cio-share-results-container' },
@@ -13,6 +13,13 @@ const useQueryParams = () => {
13
13
  };
14
14
  const queryItems = getParsedQueryParam('items');
15
15
  const queryAttributes = getParsedQueryParam('attributes');
16
+ const answers = (() => {
17
+ const ans = getParsedQueryParam('a');
18
+ if (!ans.length)
19
+ return [];
20
+ return ans.map((a) => a.split('-'));
21
+ })();
22
+ const quizVersionId = getParsedQueryParam('quiz_version_id')[0];
16
23
  const isSharedResultsQuery = !!queryItems.length && !!queryAttributes.length;
17
24
  const removeSharedResultsQueryParams = (0, react_1.useCallback)(() => {
18
25
  if (typeof window === 'undefined')
@@ -20,12 +27,16 @@ const useQueryParams = () => {
20
27
  const updatedUrl = new URL(window.location.href);
21
28
  updatedUrl.searchParams.delete('items');
22
29
  updatedUrl.searchParams.delete('attributes');
30
+ updatedUrl.searchParams.delete('quiz_version_id');
31
+ updatedUrl.searchParams.delete('a');
23
32
  if (!updatedUrl.searchParams.toString().length) {
24
33
  updatedUrl.search = '';
25
34
  }
26
35
  window.history.replaceState({}, '', updatedUrl.toString());
27
36
  }, []);
28
37
  return {
38
+ answers,
39
+ quizVersionId,
29
40
  queryItems,
30
41
  queryAttributes,
31
42
  isSharedResultsQuery,
@@ -25,6 +25,7 @@ const useQuiz = (quizOptions) => {
25
25
  return Object.assign(Object.assign({ cioClient, state: {
26
26
  answers: {
27
27
  inputs: quizLocalState.answerInputs,
28
+ payload: quizLocalState.answers,
28
29
  },
29
30
  quiz: {
30
31
  requestState: quizApiState.quizRequestState,
@@ -19,7 +19,7 @@ const useHydrateQuizLocalState = (quizId, quizSessionStorageState, dispatchLocal
19
19
  if (skipToResults)
20
20
  hydrateQuizLocalStateHandler();
21
21
  // eslint-disable-next-line react-hooks/exhaustive-deps
22
- }, []);
22
+ }, [quizId]);
23
23
  return hydrateQuizLocalStateHandler;
24
24
  };
25
25
  exports.default = useHydrateQuizLocalState;
@@ -11,7 +11,7 @@ const useQuizApiState = (quizOptions, cioClient, quizLocalState, skipToResults,
11
11
  ) => {
12
12
  const [quizApiState, dispatchApiState] = (0, react_1.useReducer)(quizApiReducer_1.default, quizApiReducer_1.initialState);
13
13
  const { quizId, quizVersionId: quizVersionIdProp, resultsPageOptions } = quizOptions;
14
- const { queryItems, queryAttributes, isSharedResultsQuery } = (0, useQueryParams_1.default)();
14
+ const { queryItems, queryAttributes, isSharedResultsQuery, answers, quizVersionId: quizVersionIdFromParam, } = (0, useQueryParams_1.default)();
15
15
  const dispatchQuizResults = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
16
16
  try {
17
17
  const quizResults = yield (0, services_1.getQuizResults)(cioClient, quizId, Object.assign({ answers: quizLocalState.answers, resultsPerPage: resultsPageOptions === null || resultsPageOptions === void 0 ? void 0 : resultsPageOptions.numResultsToDisplay, quizVersionId: quizLocalState.quizVersionId, quizSessionId: quizLocalState.quizSessionId }, resultsPageOptions === null || resultsPageOptions === void 0 ? void 0 : resultsPageOptions.requestConfigs));
@@ -52,7 +52,18 @@ const useQuizApiState = (quizOptions, cioClient, quizLocalState, skipToResults,
52
52
  });
53
53
  const dispatchSharedQuizResults = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
54
54
  try {
55
- const quizResults = yield (0, services_1.getBrowseResultsForItemIds)(cioClient, queryItems);
55
+ let quizResults;
56
+ if (quizVersionIdFromParam && answers && answers.length) {
57
+ try {
58
+ quizResults = yield (0, services_1.getQuizResults)(cioClient, quizId, Object.assign({ answers, resultsPerPage: resultsPageOptions === null || resultsPageOptions === void 0 ? void 0 : resultsPageOptions.numResultsToDisplay, quizVersionId: quizVersionIdFromParam }, resultsPageOptions === null || resultsPageOptions === void 0 ? void 0 : resultsPageOptions.requestConfigs));
59
+ }
60
+ catch (error) {
61
+ quizResults = yield (0, services_1.getBrowseResultsForItemIds)(cioClient, queryItems);
62
+ }
63
+ }
64
+ else {
65
+ quizResults = yield (0, services_1.getBrowseResultsForItemIds)(cioClient, queryItems);
66
+ }
56
67
  dispatchApiState({
57
68
  type: actions_1.QuizAPIActionTypes.SET_QUIZ_SHARED_RESULTS,
58
69
  payload: { quizResults: Object.assign(Object.assign({}, quizResults), { attributes: queryAttributes }) },
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- function useShareResultsLink(quizState) {
3
+ function useShareResultsLink(quizState, answers) {
4
4
  var _a, _b, _c;
5
5
  if (typeof window === 'undefined') {
6
6
  return '';
@@ -15,6 +15,12 @@ function useShareResultsLink(quizState) {
15
15
  .map((item) => item.data.id)
16
16
  .join(',') || '');
17
17
  existingParams.set('attributes', ((_c = quizState.selectedOptionsWithAttributes) === null || _c === void 0 ? void 0 : _c.map((option) => option).join(',')) || '');
18
+ if (quizState.versionId) {
19
+ existingParams.set('quiz_version_id', quizState.versionId);
20
+ }
21
+ if (answers && answers.length) {
22
+ existingParams.set('a', answers.map((ans) => ans.join('-')).join(',') || '');
23
+ }
18
24
  const value = urlObj.toString();
19
25
  return value;
20
26
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = '1.17.19';
3
+ exports.default = '1.17.20';
@@ -74,7 +74,7 @@ export default function CioQuiz(props) {
74
74
  ".cio-quiz ",
75
75
  convertPrimaryColorsToString(primaryColorStyles)),
76
76
  React.createElement(SessionPromptModal, { resetStoredState: resetSessionStorageState, continueSession: hydrateQuiz, showSessionPrompt: showSessionPrompt, setShowSessionPrompt: setShowSessionPrompt }),
77
- state.quiz && showShareModal && (React.createElement(ShareResultsModal, { onClose: onModalClose, quizState: state.quiz, onEmailResults: callbacks?.onEmailResults })),
77
+ state.quiz && showShareModal && (React.createElement(ShareResultsModal, { onClose: onModalClose, quizState: state.quiz, onEmailResults: callbacks?.onEmailResults, answers: state.answers.payload })),
78
78
  React.createElement(QuizContext.Provider, { value: contextValue }, state.quiz.results || skipToResults ? (React.createElement(ResultContainer, { resultCardOptions: resultCardOptions, onShare: onModalOpen, resultsPageOptions: resultsPageOptions })) : (state.quiz.currentQuestion && (React.createElement(React.Fragment, null,
79
79
  React.createElement(ProgressBar, null),
80
80
  React.createElement(QuizQuestions, null),
@@ -3,8 +3,8 @@ import CloseSVG from './CloseSVG';
3
3
  import LinkField from './LinkField';
4
4
  import EmailField from './EmailField';
5
5
  import useShareResultsLink from '../../hooks/useShareResultsLink';
6
- export default function ShareResultsModal({ onClose, quizState, onEmailResults, }) {
7
- const url = useShareResultsLink(quizState);
6
+ export default function ShareResultsModal({ onClose, quizState, answers, onEmailResults, }) {
7
+ const url = useShareResultsLink(quizState, answers);
8
8
  const results = quizState?.results?.response?.results;
9
9
  return (React.createElement("div", { className: 'cio-share-results-modal', role: 'presentation', onClick: onClose },
10
10
  React.createElement("div", { className: 'cio-share-results-container' },
@@ -11,6 +11,13 @@ const useQueryParams = () => {
11
11
  };
12
12
  const queryItems = getParsedQueryParam('items');
13
13
  const queryAttributes = getParsedQueryParam('attributes');
14
+ const answers = (() => {
15
+ const ans = getParsedQueryParam('a');
16
+ if (!ans.length)
17
+ return [];
18
+ return ans.map((a) => a.split('-'));
19
+ })();
20
+ const quizVersionId = getParsedQueryParam('quiz_version_id')[0];
14
21
  const isSharedResultsQuery = !!queryItems.length && !!queryAttributes.length;
15
22
  const removeSharedResultsQueryParams = useCallback(() => {
16
23
  if (typeof window === 'undefined')
@@ -18,12 +25,16 @@ const useQueryParams = () => {
18
25
  const updatedUrl = new URL(window.location.href);
19
26
  updatedUrl.searchParams.delete('items');
20
27
  updatedUrl.searchParams.delete('attributes');
28
+ updatedUrl.searchParams.delete('quiz_version_id');
29
+ updatedUrl.searchParams.delete('a');
21
30
  if (!updatedUrl.searchParams.toString().length) {
22
31
  updatedUrl.search = '';
23
32
  }
24
33
  window.history.replaceState({}, '', updatedUrl.toString());
25
34
  }, []);
26
35
  return {
36
+ answers,
37
+ quizVersionId,
27
38
  queryItems,
28
39
  queryAttributes,
29
40
  isSharedResultsQuery,
@@ -23,6 +23,7 @@ const useQuiz = (quizOptions) => {
23
23
  state: {
24
24
  answers: {
25
25
  inputs: quizLocalState.answerInputs,
26
+ payload: quizLocalState.answers,
26
27
  },
27
28
  quiz: {
28
29
  requestState: quizApiState.quizRequestState,
@@ -17,7 +17,7 @@ const useHydrateQuizLocalState = (quizId, quizSessionStorageState, dispatchLocal
17
17
  if (skipToResults)
18
18
  hydrateQuizLocalStateHandler();
19
19
  // eslint-disable-next-line react-hooks/exhaustive-deps
20
- }, []);
20
+ }, [quizId]);
21
21
  return hydrateQuizLocalStateHandler;
22
22
  };
23
23
  export default useHydrateQuizLocalState;
@@ -8,7 +8,7 @@ const useQuizApiState = (quizOptions, cioClient, quizLocalState, skipToResults,
8
8
  ) => {
9
9
  const [quizApiState, dispatchApiState] = useReducer(apiReducer, initialState);
10
10
  const { quizId, quizVersionId: quizVersionIdProp, resultsPageOptions } = quizOptions;
11
- const { queryItems, queryAttributes, isSharedResultsQuery } = useQueryParams();
11
+ const { queryItems, queryAttributes, isSharedResultsQuery, answers, quizVersionId: quizVersionIdFromParam, } = useQueryParams();
12
12
  const dispatchQuizResults = async () => {
13
13
  try {
14
14
  const quizResults = await getQuizResults(cioClient, quizId, {
@@ -55,7 +55,23 @@ const useQuizApiState = (quizOptions, cioClient, quizLocalState, skipToResults,
55
55
  };
56
56
  const dispatchSharedQuizResults = async () => {
57
57
  try {
58
- const quizResults = await getBrowseResultsForItemIds(cioClient, queryItems);
58
+ let quizResults;
59
+ if (quizVersionIdFromParam && answers && answers.length) {
60
+ try {
61
+ quizResults = await getQuizResults(cioClient, quizId, {
62
+ answers,
63
+ resultsPerPage: resultsPageOptions?.numResultsToDisplay,
64
+ quizVersionId: quizVersionIdFromParam,
65
+ ...resultsPageOptions?.requestConfigs,
66
+ });
67
+ }
68
+ catch (error) {
69
+ quizResults = await getBrowseResultsForItemIds(cioClient, queryItems);
70
+ }
71
+ }
72
+ else {
73
+ quizResults = await getBrowseResultsForItemIds(cioClient, queryItems);
74
+ }
59
75
  dispatchApiState({
60
76
  type: QuizAPIActionTypes.SET_QUIZ_SHARED_RESULTS,
61
77
  payload: { quizResults: { ...quizResults, attributes: queryAttributes } },
@@ -1,4 +1,4 @@
1
- export default function useShareResultsLink(quizState) {
1
+ export default function useShareResultsLink(quizState, answers) {
2
2
  if (typeof window === 'undefined') {
3
3
  return '';
4
4
  }
@@ -12,6 +12,12 @@ export default function useShareResultsLink(quizState) {
12
12
  .map((item) => item.data.id)
13
13
  .join(',') || '');
14
14
  existingParams.set('attributes', quizState.selectedOptionsWithAttributes?.map((option) => option).join(',') || '');
15
+ if (quizState.versionId) {
16
+ existingParams.set('quiz_version_id', quizState.versionId);
17
+ }
18
+ if (answers && answers.length) {
19
+ existingParams.set('a', answers.map((ans) => ans.join('-')).join(',') || '');
20
+ }
15
21
  const value = urlObj.toString();
16
22
  return value;
17
23
  }
@@ -1 +1 @@
1
- export default '1.17.19';
1
+ export default '1.17.20';
@@ -4,6 +4,7 @@ interface ShareResultsModalProps {
4
4
  onClose: () => void;
5
5
  quizState: QuizReturnState['quiz'];
6
6
  onEmailResults?: QuizResultsEventsProps.OnEmailResults;
7
+ answers: string[][];
7
8
  }
8
- export default function ShareResultsModal({ onClose, quizState, onEmailResults, }: ShareResultsModalProps): JSX.Element;
9
+ export default function ShareResultsModal({ onClose, quizState, answers, onEmailResults, }: ShareResultsModalProps): JSX.Element;
9
10
  export {};
@@ -1,4 +1,6 @@
1
1
  declare const useQueryParams: () => {
2
+ answers: string[][];
3
+ quizVersionId: string;
2
4
  queryItems: string[];
3
5
  queryAttributes: string[];
4
6
  isSharedResultsQuery: boolean;
@@ -1,2 +1,2 @@
1
1
  import { QuizReturnState } from '../types';
2
- export default function useShareResultsLink(quizState: QuizReturnState['quiz']): string;
2
+ export default function useShareResultsLink(quizState: QuizReturnState['quiz'], answers: string[][]): string;
@@ -19,7 +19,7 @@ export interface ResultCardOptions {
19
19
  renderResultCard?: (result: QuizResultDataPartial, getters: {
20
20
  getAddToCartButtonProps?: GetAddToCartButtonProps;
21
21
  getAddToFavoritesButtonProps?: GetAddToFavoritesButtonProps;
22
- getResultLinkProps?: GetQuizResultLinkProps;
22
+ getQuizResultLinkProps?: GetQuizResultLinkProps;
23
23
  }, index: number) => JSX.Element;
24
24
  }
25
25
  export declare namespace QuizResultsEventsProps {
@@ -78,6 +78,7 @@ export interface IQuizProps {
78
78
  export interface QuizReturnState {
79
79
  answers: {
80
80
  inputs: AnswerInputState;
81
+ payload: string[][];
81
82
  };
82
83
  quiz: {
83
84
  requestState: RequestStates;
@@ -1,2 +1,2 @@
1
- declare const _default: "1.17.19";
1
+ declare const _default: "1.17.20";
2
2
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructor-io/constructorio-ui-quizzes",
3
- "version": "1.17.19",
3
+ "version": "1.17.20",
4
4
  "description": "Constructor.io Quizzes UI library for web applications",
5
5
  "author": "Constructor.io Corporation",
6
6
  "license": "MIT",