{"version":3,"file":"js/rad-quiz-poll.c038ba90.js","mappings":"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","sources":["webpack://beliefnet-frontend/./src/services/poll.service.ts","webpack://beliefnet-frontend/./src/components/quiz/Poll.vue?7b65","webpack://beliefnet-frontend/./src/components/quiz/Poll.vue"],"sourcesContent":["import { VueLogger } from 'vue-logger-plugin/dist/types/logger';\nimport { FetchService } from './fetch.service';\nimport { Question } from '../common/models/pathfinder/question.model';\nimport { QuestionOptionCount } from '@/common/models/pathfinder/questionoptioncount.model';\n\n// get domain\nlet domain = window.location.hostname.split('.').slice(window.location.hostname.endsWith('.com.br') ? -3 : -2).join('.');\n\n// Special Case Overrides\nif (domain == 'familia.com.br') {\n    // Portugese Family site will use Spanish Family domain\n    domain = 'familias.com';\n} else if (domain == 'notion-staging.com' || domain == 'bibleminute.co') {\n    // BibleMinute will just use Beliefnet domain\n    domain = 'beliefnet.com';\n}\n\n// get endpoint url base (familia.com.br needs to pull from familias.com)\nconst endpointBase = `https://cr.${domain}/public/api/v2.0`;\n\n// handle dev environment\n// if (process.env.NODE_ENV == 'development') {\n//     endpointBase = 'http://localhost:5000/public/api';\n// }\n\n\nexport class PollService {\n    private logger: VueLogger;\n    private fetchService: FetchService;\n\n    constructor(logger: VueLogger, fetchService: FetchService) {\n        this.logger = logger;\n        this.fetchService = fetchService\n    }\n\n    async getQuizOptionCount(\n        quizId: string | undefined\n    ): Promise<QuestionOptionCount[] | null> {\n        try {\n            if (!quizId) {\n                return null;\n            }\n\n            const result = await this.fetchService.get<QuestionOptionCount[]>(`${endpointBase}/questions/options/${quizId}`);\n            return result.data;\n        } catch(error) {\n            this.logger.error('failed to get quiz: ', error);\n        }\n\n        return null;\n    }\n\n    /**\n     * gets back quiz and answer\n     */\n    async getQuizOptions(\n        quizId: string | undefined\n    ): Promise<Question | null> {\n        try {\n            if (!quizId) {\n                return null;\n            }\n\n            const result = await this.fetchService.get<Question>(`${endpointBase}/questions/${quizId}`);\n            return result.data;\n        } catch(error) {\n            this.logger.error('failed to get quiz: ', error);\n        }\n\n        return null;\n    }\n\n    async submitQuizChoice(\n        quizId: string | undefined,\n        optionId: string | undefined\n    ): Promise<boolean | null> {\n        try {\n            if (!quizId || !optionId) {\n                return false;\n            }\n\n            await this.fetchService.post(`${endpointBase}/questions/${quizId}/${optionId}`, null);\n\n            return true;\n        } catch (error) {\n            this.logger.error('failed to submit quiz: ', error);\n        }\n\n        return false;\n    }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, isRef as _isRef, vModelRadio as _vModelRadio, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"wide-layout-column\" }\nconst _hoisted_2 = { class: \"related-content-column\" }\nconst _hoisted_3 = { class: \"content-container\" }\nconst _hoisted_4 = { class: \"image-container four-three\" }\nconst _hoisted_5 = [\"src\"]\nconst _hoisted_6 = { class: \"poll-block\" }\nconst _hoisted_7 = [\"textContent\"]\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = [\"textContent\"]\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"poll-submit\" }, [\n  /*#__PURE__*/_createElementVNode(\"input\", {\n    type: \"submit\",\n    id: \"\",\n    class: \"poll-submit-btn\",\n    value: \"Submit\"\n  })\n], -1)\nconst _hoisted_11 = {\n  key: 1,\n  class: \"poll-results-wrapper\"\n}\nconst _hoisted_12 = [\"textContent\"]\nconst _hoisted_13 = {\n  key: 1,\n  class: \"poll-results-bar\"\n}\nconst _hoisted_14 = [\"textContent\"]\nconst _hoisted_15 = { class: \"poll-results-bar-inner\" }\n\nimport { FetchService } from '@/services/fetch.service';\nimport { ref, watch, inject } from 'vue';\nimport { useLogger } from 'vue-logger-plugin';\nimport { useField, useForm } from 'vee-validate';\nimport { PollService } from '@/services/poll.service';\nimport { Question } from '@/common/models/pathfinder/question.model';\nimport useValidators from '../../composables/validators.composable';\n\n\n// Incoming props\n\nexport default /*#__PURE__*/_defineComponent({\n  __name: 'Poll',\n  props: { \n    quizId: { type: String },\n    thumbnail: { type: String }\n},\n  setup(__props) {\n\nconst props = __props;\n\n\n\nconst logger = useLogger();\n// inject our locationservice\nconst fetchService: FetchService | undefined = inject('FetchService');\n// get the quiz service that we need to submit results\nconst pollService = new PollService(logger, fetchService);\n\nconst quizPoll = ref<Question | undefined | null>();\npollService.getQuizOptions(props?.quizId)?.then((res) => {\n    quizPoll.value = res;\n});\n\n// get validators\nconst { isRequired } = useValidators();\n// generate validation schema\nconst validationSchema = {\n    optionId: (value: string) => isRequired(value, 'Please make your choice!')\n};\n\nconst { handleSubmit, errors } = useForm({ validationSchema });\n\n// Field Configurations\nconst { value: optionId } = useField('optionId');\n\nconst submitted = ref(false);\nconst onSubmit = handleSubmit(async (values) => {\n    if (props?.quizId && values.optionId) {\n        pollService.submitQuizChoice(props?.quizId, values.optionId).then(() => {\n            submitted.value = true;\n        });\n    }\n});\n\n// watch the quiz if we submitted then fetch the stats so we can show them to the user\nwatch(submitted, (newSubmitted, oldSubmitted) => {\n    if (oldSubmitted == false && newSubmitted == true) {\n        pollService.getQuizOptionCount(props?.quizId).then((res) => {\n            quizPoll.value?.options.forEach(o => {\n                res?.forEach(oc => {\n                    if (oc.optionId == o.id) {\n                        o.count = oc.count;\n                    }\n               });\n            });\n\n            let totalAnswers = 0;\n            quizPoll.value?.options.forEach(o => {\n                if (!isNaN(o.count)) {\n                    totalAnswers += o.count;\n                }\n            });\n\n            quizPoll.value?.options.forEach(o => {\n                if (!isNaN(o.count) && !isNaN(totalAnswers)) {\n                    o.percent = Math.max(0, Math.min(100, Math.floor((o.count / totalAnswers) * 100)));\n                }\n            });\n        });\n    }\n});\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"aside\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createElementVNode(\"div\", _hoisted_4, [\n          _createElementVNode(\"img\", {\n            src: __props.thumbnail,\n            alt: \"\",\n            class: \"img-responsive fc-preview-contextmenu\"\n          }, null, 8, _hoisted_5)\n        ]),\n        _createElementVNode(\"div\", _hoisted_6, [\n          _createElementVNode(\"h4\", {\n            textContent: _toDisplayString(quizPoll.value?.text)\n          }, null, 8, _hoisted_7),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(errors), (error) => {\n            return (_openBlock(), _createElementBlock(\"div\", {\n              class: \"alert alert-warning\",\n              role: \"alert\",\n              key: error\n            }, _toDisplayString(error), 1))\n          }), 128)),\n          (submitted.value === false)\n            ? (_openBlock(), _createElementBlock(\"form\", {\n                key: 0,\n                onSubmit: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_unref(onSubmit) && _unref(onSubmit)(...args))),\n                class: \"poll-option-wrapper\",\n                id: \"input_1\"\n              }, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(quizPoll.value?.options, (option) => {\n                  return (_openBlock(), _createElementBlock(\"div\", {\n                    class: \"poll-option\",\n                    key: option\n                  }, [\n                    _withDirectives(_createElementVNode(\"input\", {\n                      name: \"optionId\",\n                      type: \"radio\",\n                      value: `${option.id}`,\n                      class: \"poll-input\",\n                      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_isRef(optionId) ? (optionId).value = $event : null))\n                    }, null, 8, _hoisted_8), [\n                      [_vModelRadio, _unref(optionId)]\n                    ]),\n                    _createElementVNode(\"label\", {\n                      for: \"input_question\",\n                      textContent: _toDisplayString(option.text)\n                    }, null, 8, _hoisted_9)\n                  ]))\n                }), 128)),\n                _hoisted_10\n              ], 32))\n            : _createCommentVNode(\"\", true),\n          (submitted.value === true)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(quizPoll.value?.options, (option) => {\n                  return (_openBlock(), _createElementBlock(\"div\", {\n                    class: \"poll-results-item\",\n                    key: option\n                  }, [\n                    (!isNaN(option.percent))\n                      ? (_openBlock(), _createElementBlock(\"div\", {\n                          key: 0,\n                          class: \"poll-results-label\",\n                          textContent: _toDisplayString(option.text)\n                        }, null, 8, _hoisted_12))\n                      : _createCommentVNode(\"\", true),\n                    (!isNaN(option.percent))\n                      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n                          _createElementVNode(\"div\", {\n                            class: \"poll-percentage\",\n                            textContent: _toDisplayString(option.percent + '%')\n                          }, null, 8, _hoisted_14),\n                          _createElementVNode(\"div\", _hoisted_15, [\n                            _createElementVNode(\"div\", {\n                              class: \"grad-bar-percentage\",\n                              style: _normalizeStyle({ width: `${option.percent}%` })\n                            }, null, 4)\n                          ])\n                        ]))\n                      : _createCommentVNode(\"\", true)\n                  ]))\n                }), 128))\n              ]))\n            : _createCommentVNode(\"\", true)\n        ])\n      ])\n    ])\n  ]))\n}\n}\n\n})","import script from \"./Poll.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Poll.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["domain","window","location","hostname","split","slice","endsWith","join","endpointBase","PollService","constructor","logger","fetchService","this","getQuizOptionCount","quizId","result","get","data","error","getQuizOptions","submitQuizChoice","optionId","post","_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_createElementVNode","type","id","value","_hoisted_11","key","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_defineComponent","__name","props","String","thumbnail","setup","__props","useLogger","inject","pollService","quizPoll","ref","_a","then","res","isRequired","useValidators","validationSchema","handleSubmit","errors","useForm","useField","submitted","onSubmit","values","__awaiter","watch","newSubmitted","oldSubmitted","options","forEach","o","oc","count","totalAnswers","_b","isNaN","_c","percent","Math","max","min","floor","_ctx","_cache","_openBlock","_createElementBlock","src","alt","textContent","_toDisplayString","text","_Fragment","_renderList","_unref","role","args","option","_withDirectives","name","$event","_isRef","_vModelRadio","for","_createCommentVNode","style","_normalizeStyle","width","__exports__"],"sourceRoot":""}