| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /** @module survey/survey */
- import { _baseRecord } from '../index.js'
- import { surveySchema } from './survey.schema.js'
- import { answerValidator } from './survey.answer.validator.js'
- import { aspectsArr } from '../../utils/lang.js'
-
- const SCORED = aspectsArr
- const _isScored = id => SCORED.includes(id)
- const _makeCategoryFriendly = responseCategory => {
- const labels = responseCategory.split('_vs_')
- labels.forEach((a, i) => {
- if (a.indexOf('_') == -1) return
- labels[i] = a.split('_').join(' ')
- })
- return labels
- }
- const _formatAspectQuestions = steps => {
- return steps
- .map(q => {
- if (!_isScored(q.response_key_id)) return null
- return {
- id: q.response_key_id,
- question: q.response_key_prompt,
- labels: _makeCategoryFriendly(q.response_key_category),
- answer: null,
- }
- })
- .filter(step => step != null)
- }
-
- class Survey extends _baseRecord {
- constructor(questionSteps) {
- super()
-
- this.type = this.constructor.name.toLowerCase()
-
- /** Fields */
- this.steps = [...questionSteps] // ! required
- this.aspectQuestions = _formatAspectQuestions(this.steps)
- }
-
- hasMinResponsesToCreateProfile(responses) {
- const neededResponseKeys = [8, 7, 10, 11, 15, 19, 9]
- const hasMinResponses = () =>
- responses.every(response => {
- return neededResponseKeys.includes(response.response_key_id)
- })
- return hasMinResponses()
- }
- validateAnswer(payload) {
- const { question, input } = payload
-
- // Continue our ugly hacks
- const validationType =
- question.category == 'aspect'
- ? question.category
- : question.survey_stage
- const validate = answerValidator[validationType].validate(input)
- if (validate.error) {
- console.error(`error: ${validate.error}`)
- }
- return !validate.error ? true : false
- }
-
- isValid() {
- const validate = surveySchema.validate(this)
-
- /**
- * Log out some useful error messages
- */
- if (validate.error) {
- console.error(`error: ${validate.error} - ${this.type} validation`)
- }
-
- /** validate(this) always returns something so force it to a bool */
- return !validate.error ? true : false
- }
- }
-
- export { Survey }
|