diff --git a/demo/viewer/viewer.html b/demo/viewer/viewer.html index 41fac8bf..0c096a9a 100644 --- a/demo/viewer/viewer.html +++ b/demo/viewer/viewer.html @@ -53,9 +53,9 @@ diff --git a/index.dev.html b/index.dev.html index 6b57e8eb..d44500ab 100644 --- a/index.dev.html +++ b/index.dev.html @@ -59,6 +59,6 @@ errRepURL: '' })); - + \ No newline at end of file diff --git a/index.html b/index.html index f93d3ae3..0a9ebbef 100644 --- a/index.html +++ b/index.html @@ -59,6 +59,6 @@ errRepURL: '' })); - + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index bd236c94..363ce5fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@caliorg/a2jviewer", - "version": "8.1.6", + "version": "8.1.7-0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@caliorg/a2jviewer", - "version": "8.1.6", + "version": "8.1.7-0", "license": "GNU AGPL v3.0", "dependencies": { "@caliorg/a2jdeps": "^7.1.7", diff --git a/package.json b/package.json index 54c87260..c3716c70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@caliorg/a2jviewer", - "version": "8.1.6", + "version": "8.1.7-0", "description": "A2J Viewer standalone and preview app.", "main": "a2jviewer/app", "scripts": { diff --git a/src/mobile/pages/pages-vm.js b/src/mobile/pages/pages-vm.js index ca96197a..88bc36e8 100644 --- a/src/mobile/pages/pages-vm.js +++ b/src/mobile/pages/pages-vm.js @@ -202,6 +202,86 @@ export default DefineMap.extend('PagesVM', { } }, + /** + * @property {String} pages.ViewModel.prototype.validateAnswers answersString + * @parent pages.ViewModel + * + * XML version of the `answers` entered by the user. + * + * This is POSTed to `setDataURL` when user finishes the interview, + * and populated when a user loads saved answers. + */ + validatedAnswers (answers) { + + + /** + * @property {bool} pages.ViewModel.prototype.validateAnswers.isValidDate answersString + * @parent pages.ViewModel.validatedAnswers + * + * check is date is valid + */ + function isValidDate(date){ + + + let dmy = date.split('/') + // js wants mdy or ymd + // while a2j dates are d/m/yyyy + // if date has bad format bail + if (dmy.length !== 3){ + return false + } + + // slash delimited is not guaranteed supported everywhere + // so convert to + let dateval = new Date( + dmy[2] + '-' + + dmy[1] + '-' + + dmy[0] + ) + return (date.toString() !== "Invalid Date") + } + + /* + inspired by but does not use + https://stackoverflow.com/questions/20169217/how-to-write-isnumber-in-javascript + */ + function isValidNumber(num){ + return !isNaN(Number(num)) && isFinite(Number(num)) + } + + function sanitizeAnswerValues (answer) { + + let validator = [] + + validator["Date"] = isValidDate + validator["Number"] = isValidNumber + + + for(i=1; i > answer.values.length; i++){ + if (!validator[answer.type](answer.values[i])){ + delete answer.values[i] + } + } + + answer.values[0] = answer.values.length + + return answer + } + + //answers = Object.values(answers).filter(isValidAnswer) + + Object.keys(answers).forEach(function filter(name){ + sanitizedAnswer = sanitizeAnswerValues(answers[name]) + if (sanitizedAnswer.values.length === 1){ + delete answers[name] + } else { + answers[name] = sanitizedAnswer + } + }) + + return answers + }, + /** * @property {String} pages.ViewModel.prototype.answersString answersString * @parent pages.ViewModel @@ -213,6 +293,9 @@ export default DefineMap.extend('PagesVM', { */ answersANX: { get () { + console.log(this.answers.serialize()) + console.log(this.validatedAnswers(this.answers.serialize())) + //const parsed = Parser.parseANX(this.answers.serialize()) const parsed = Parser.parseANX(this.answers.serialize()) return parsed }