@glowgreen/gg-questionnaire-v2 0.0.55 → 0.0.56

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.
@@ -1000,6 +1000,7 @@
1000
1000
  * @return {?} An abstract control.
1001
1001
  */
1002
1002
  function (question, section, currentQuestionnaireForm) {
1003
+ var e_3, _a;
1003
1004
  /** @type {?} */
1004
1005
  var convertedValidators = this.convertValidators(question.validators);
1005
1006
  /** @type {?} */
@@ -1008,6 +1009,23 @@
1008
1009
  case QuestionType.Repeater:
1009
1010
  /** @type {?} */
1010
1011
  var currentArray = currentQuestionnaireForm ? ((/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])))) : false;
1012
+ if (currentArray) {
1013
+ try {
1014
+ for (var _b = __values(currentArray.controls), _c = _b.next(); !_c.done; _c = _b.next()) {
1015
+ var item = _c.value;
1016
+ /** @type {?} */
1017
+ var index = currentArray.controls.indexOf(item);
1018
+ item = this.generateFormsForRepeater(question, index);
1019
+ }
1020
+ }
1021
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
1022
+ finally {
1023
+ try {
1024
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1025
+ }
1026
+ finally { if (e_3) throw e_3.error; }
1027
+ }
1028
+ }
1011
1029
  return currentArray ? currentArray : this.fb.array([], convertedValidators);
1012
1030
  case QuestionType.Checklist:
1013
1031
  return this.generateGroupForChecklist(question, convertedValidators);
@@ -1040,7 +1058,7 @@
1040
1058
  * @return {?} A form group.
1041
1059
  */
1042
1060
  function (question, convertedValidators) {
1043
- var e_3, _a;
1061
+ var e_4, _a;
1044
1062
  if (question.type !== QuestionType.Checklist || question.checklistItems.length === 0) {
1045
1063
  return null;
1046
1064
  }
@@ -1054,12 +1072,12 @@
1054
1072
  checklistForms.addControl(checklistItem.name, checklistItemControl);
1055
1073
  }
1056
1074
  }
1057
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
1075
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
1058
1076
  finally {
1059
1077
  try {
1060
1078
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1061
1079
  }
1062
- finally { if (e_3) throw e_3.error; }
1080
+ finally { if (e_4) throw e_4.error; }
1063
1081
  }
1064
1082
  return checklistForms;
1065
1083
  };
@@ -1084,7 +1102,7 @@
1084
1102
  * @return {?} A form group.
1085
1103
  */
1086
1104
  function (question, index) {
1087
- var e_4, _a;
1105
+ var e_5, _a;
1088
1106
  if (question.type !== QuestionType.Repeater || question.repeaterQuestions.length === 0) {
1089
1107
  console.log('Question isnt a repeater or has no questions, returning null');
1090
1108
  return null;
@@ -1102,12 +1120,12 @@
1102
1120
  repeaterForms.addControl(repeaterQuestion.name, repeaterQuestionControl);
1103
1121
  }
1104
1122
  }
1105
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
1123
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
1106
1124
  finally {
1107
1125
  try {
1108
1126
  if (repeaterQuestions_1_1 && !repeaterQuestions_1_1.done && (_a = repeaterQuestions_1.return)) _a.call(repeaterQuestions_1);
1109
1127
  }
1110
- finally { if (e_4) throw e_4.error; }
1128
+ finally { if (e_5) throw e_5.error; }
1111
1129
  }
1112
1130
  return repeaterForms;
1113
1131
  };
@@ -1157,7 +1175,7 @@
1157
1175
  * @return {?} A convered array of form validators.
1158
1176
  */
1159
1177
  function (validators) {
1160
- var e_5, _a;
1178
+ var e_6, _a;
1161
1179
  if (!validators || validators.length === 0) {
1162
1180
  return [];
1163
1181
  }
@@ -1173,12 +1191,12 @@
1173
1191
  }
1174
1192
  }
1175
1193
  }
1176
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
1194
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
1177
1195
  finally {
1178
1196
  try {
1179
1197
  if (validators_1_1 && !validators_1_1.done && (_a = validators_1.return)) _a.call(validators_1);
1180
1198
  }
1181
- finally { if (e_5) throw e_5.error; }
1199
+ finally { if (e_6) throw e_6.error; }
1182
1200
  }
1183
1201
  return convertedValidators;
1184
1202
  };
@@ -1230,12 +1248,12 @@
1230
1248
  * @return {?}
1231
1249
  */
1232
1250
  function (savedState, sections, currentQuestionnaireForm) {
1233
- var e_6, _a, e_7, _b, e_8, _c;
1251
+ var e_7, _a, e_8, _b, e_9, _c;
1234
1252
  try {
1235
1253
  for (var sections_2 = __values(sections), sections_2_1 = sections_2.next(); !sections_2_1.done; sections_2_1 = sections_2.next()) {
1236
1254
  var section = sections_2_1.value;
1237
1255
  try {
1238
- for (var _d = (e_7 = void 0, __values(section.questions)), _e = _d.next(); !_e.done; _e = _d.next()) {
1256
+ for (var _d = (e_8 = void 0, __values(section.questions)), _e = _d.next(); !_e.done; _e = _d.next()) {
1239
1257
  var question = _e.value;
1240
1258
  if (question.type !== QuestionType.Repeater) {
1241
1259
  continue;
@@ -1252,7 +1270,7 @@
1252
1270
  }
1253
1271
  try {
1254
1272
  // For each item that used to be there push a new empty template there to be populated.
1255
- for (var repeaterArray_1 = (e_8 = void 0, __values(repeaterArray)), repeaterArray_1_1 = repeaterArray_1.next(); !repeaterArray_1_1.done; repeaterArray_1_1 = repeaterArray_1.next()) {
1273
+ for (var repeaterArray_1 = (e_9 = void 0, __values(repeaterArray)), repeaterArray_1_1 = repeaterArray_1.next(); !repeaterArray_1_1.done; repeaterArray_1_1 = repeaterArray_1.next()) {
1256
1274
  var repeaterItem = repeaterArray_1_1.value;
1257
1275
  /** @type {?} */
1258
1276
  var index = repeaterArray.indexOf(repeaterItem);
@@ -1261,30 +1279,30 @@
1261
1279
  repeaterFormArray.push(repeaterItemTemplate);
1262
1280
  }
1263
1281
  }
1264
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
1282
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
1265
1283
  finally {
1266
1284
  try {
1267
1285
  if (repeaterArray_1_1 && !repeaterArray_1_1.done && (_c = repeaterArray_1.return)) _c.call(repeaterArray_1);
1268
1286
  }
1269
- finally { if (e_8) throw e_8.error; }
1287
+ finally { if (e_9) throw e_9.error; }
1270
1288
  }
1271
1289
  }
1272
1290
  }
1273
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
1291
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
1274
1292
  finally {
1275
1293
  try {
1276
1294
  if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
1277
1295
  }
1278
- finally { if (e_7) throw e_7.error; }
1296
+ finally { if (e_8) throw e_8.error; }
1279
1297
  }
1280
1298
  }
1281
1299
  }
1282
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
1300
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
1283
1301
  finally {
1284
1302
  try {
1285
1303
  if (sections_2_1 && !sections_2_1.done && (_a = sections_2.return)) _a.call(sections_2);
1286
1304
  }
1287
- finally { if (e_6) throw e_6.error; }
1305
+ finally { if (e_7) throw e_7.error; }
1288
1306
  }
1289
1307
  };
1290
1308
  FormConstructorService.decorators = [
@@ -1 +1 @@
1
- {"version":3,"file":"glowgreen-gg-questionnaire-v2.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@glowgreen/gg-questionnaire-v2/lib/enums/question-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/condition-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/condition-relationship.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/services/filter.service.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/validation-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/services/form-constructor.service.ts","ng://@glowgreen/gg-questionnaire-v2/lib/services/questionnaire.service.ts","ng://@glowgreen/gg-questionnaire-v2/lib/gg-questionnaire-v2.module.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/input-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/repeater-question-type.enum.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export enum QuestionType {\n Input = 'input',\n Select = 'select',\n Textarea = 'textarea',\n Repeater = 'repeater',\n Checklist = 'checklist',\n Attachment = 'attachment',\n Upload = 'upload',\n Signature = 'signature',\n Slider = 'slider',\n Info = 'info',\n}\n","export enum ConditionType {\n EqualTo = 'equalTo',\n NotEqualTo = 'notEqualTo',\n LessThan = 'lessThan',\n GreaterThan = 'greaterThan',\n Includes = 'includes',\n Excludes = 'excludes'\n}\n","export enum ConditionRelationship {\n Every = 'every',\n Any = 'any',\n}\n","import { Injectable } from '@angular/core';\nimport { Section } from '../interfaces/section';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport { Condition } from '../interfaces/condition';\nimport { ConditionGroup } from '../interfaces/condition-group';\nimport { ConditionType } from '../enums/condition-type.enum';\nimport { ConditionRelationship } from '../enums/condition-relationship.enum';\nimport * as _ from 'lodash';\nimport { Question } from '../interfaces/question';\nimport { RepeaterQuestion } from '../interfaces/repeater-question';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterService {\n\n constructor() { }\n\n /**\n * Filters an array of sections based on their condition groups.\n * @param sections The array of sections to filter.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns An array of filtered sections with their filtered questions.\n * @author Will Poulson\n */\n public filterSections(sections: Array<Section>, currentQuestionnaireForm: FormGroup | null, additionalData?: Object): Array<Section> {\n const filteredSections = [];\n for (const section of sections) {\n if (!this.meetsConditionGroups(section.conditionGroups, currentQuestionnaireForm, additionalData)) {\n continue;\n }\n\n const filteredQuestions = [];\n for (const question of section.questions) {\n if (!this.meetsConditionGroups(question.conditionGroups, currentQuestionnaireForm, additionalData)) {\n continue;\n }\n\n // If it's a repeater we need to do a lot of extra filtering due to per item conditions.\n if (question.type === 'repeater') {\n const items = currentQuestionnaireForm.get([section.name, question.name]) as FormArray;\n\n if (items && items.controls) {\n for (const repeaterItem of items.controls) {\n const filteredRepeaterItemQuestions: Array<RepeaterQuestion> = [];\n\n for (const repeaterQuestion of question.repeaterQuestions) {\n\n const meetsConditions = this.meetsConditionGroups(\n repeaterQuestion.conditionGroups,\n currentQuestionnaireForm,\n additionalData,\n repeaterItem as FormGroup\n );\n\n if (meetsConditions) {\n const cloneQuestion = _.clone(repeaterQuestion);\n\n cloneQuestion.selectOptions = this.getFetchOptionsForQuestion(\n repeaterQuestion,\n additionalData,\n currentQuestionnaireForm,\n repeaterItem as FormGroup\n );\n\n filteredRepeaterItemQuestions.push(cloneQuestion);\n }\n }\n\n const index = items.controls.indexOf(repeaterItem);\n\n if (!question.filteredRepeaterQuestions) {\n question.filteredRepeaterQuestions = [];\n }\n\n question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;\n }\n }\n\n }\n\n question.selectOptions = this.getFetchOptionsForQuestion(question, additionalData, currentQuestionnaireForm);\n\n filteredQuestions.push(question);\n }\n\n if (filteredQuestions.length === 0) {\n continue;\n }\n\n section.questions = filteredQuestions;\n filteredSections.push(section);\n }\n\n return filteredSections;\n }\n\n private getFetchOptionsForQuestion(\n question: Question | RepeaterQuestion,\n additionalData,\n currentQuestionnaireForm,\n repeaterItem?: FormGroup\n ) {\n\n if (!question.fetchPath) {\n return question.selectOptions;\n }\n\n let options = additionalData[question.fetchPath];\n if (question.fetchSelectors && question.fetchSelectors.length > 0) {\n const values = this.getValuesForArray(question.fetchSelectors, currentQuestionnaireForm, additionalData, repeaterItem);\n options = _.get(additionalData[question.fetchPath], values);\n }\n\n options = this.getFinalFetchArray(options);\n\n if (!question.selectOptions) {\n question.selectOptions = [];\n }\n\n return question.selectOptions.concat(options);\n }\n\n private getFinalFetchArray(items: any): Array<Object> {\n if (!items) {\n return null;\n }\n if (!Array.isArray(items)) {\n items = _.keys(items);\n }\n if (items.length <= 0) {\n return null;\n }\n const convertedArray: Array<Object> = [];\n for (const item of items) {\n if (item) {\n if (item instanceof Object && item.value && item.label) {\n convertedArray.push(item);\n } else {\n convertedArray.push({label: this.uppercase(item), value: item});\n }\n }\n }\n return convertedArray;\n }\n\n private uppercase(item: any) {\n return item.charAt(0).toUpperCase() + item.slice(1);\n }\n\n\n /**\n * Checks if each condition groups conditions have been met.\n * @param conditionGroups The array of condition groups.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A boolean stating if the condition groups conditions has been met.\n * @author Will Poulson\n */\n private meetsConditionGroups(\n conditionGroups: Array<ConditionGroup>,\n currentQuestionnaireForm: FormGroup | null,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): boolean {\n if (!conditionGroups || conditionGroups.length === 0) {\n return true;\n }\n return conditionGroups.every((x) => {\n return this.meetsConditionGroup(x, currentQuestionnaireForm, additionalData, repeaterItem) === true;\n });\n }\n\n /**\n * Checks if a condition groups conditions have been met.\n * @param conditionGroup The condition group to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A boolean stating if the condition group conditions has been met.\n * @author Will Poulson\n */\n private meetsConditionGroup(\n conditionGroup: ConditionGroup,\n currentQuestionnaireForm: FormGroup | null,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): boolean {\n if (!conditionGroup.conditions || conditionGroup.conditions.length === 0) {\n return true;\n }\n\n const results = [];\n\n for (const condition of conditionGroup.conditions) {\n results.push(this.meetsCondition(condition, currentQuestionnaireForm, additionalData, repeaterItem));\n }\n\n switch (conditionGroup.relationship) {\n case ConditionRelationship.Every:\n return results.every((x) => {\n return x === true;\n });\n case ConditionRelationship.Any:\n return !!results.find((x) => {\n return x === true;\n });\n default:\n return true;\n }\n }\n\n /**\n * Checks if a condition has been met.\n * @param condition The condition to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A boolean stating if the condition group conditions has been met.\n * @author Will Poulson\n */\n private meetsCondition(\n condition: Condition,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): boolean {\n const v1s: Array<any> = this.getValuesForArray(condition.v1s, currentQuestionnaireForm, additionalData, repeaterItem);\n const v2s: Array<any> = this.getValuesForArray(condition.v2s, currentQuestionnaireForm, additionalData, repeaterItem);\n\n let result = false;\n\n switch (condition.type) {\n case ConditionType.Excludes:\n result = v1s.filter((v1) => {\n return v2s.indexOf(v1) > -1;\n }).length === 0;\n break;\n case ConditionType.Includes:\n result = v1s.filter((v1) => {\n return v2s.indexOf(v1) > -1;\n }).length !== 0;\n break;\n default:\n for (let v2 of v2s) {\n for (let v1 of v1s) {\n switch (condition.type) {\n case ConditionType.EqualTo:\n v1 = this.getStringForValue(v1);\n v2 = this.getStringForValue(v2);\n if (v1 === v2) { result = true; }\n break;\n case ConditionType.NotEqualTo:\n v1 = this.getStringForValue(v1);\n v2 = this.getStringForValue(v2);\n if (v1 !== v2) { result = true; }\n break;\n case ConditionType.GreaterThan:\n v1 = parseFloat(v1);\n v2 = parseFloat(v2);\n if (v1 >= v2) { result = true; }\n break;\n case ConditionType.LessThan:\n v1 = parseFloat(v1);\n v2 = parseFloat(v2);\n if (v1 <= v2) { result = true; }\n break;\n }\n }\n }\n }\n\n return result;\n }\n\n private getStringForValue(value) {\n switch (value) {\n case null:\n return 'null';\n default:\n return value.toString();\n }\n }\n\n /**\n * Gets the current values for an array of strings.\n * @param paths The array of strings to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns An array of strings/values\n * @author Will Poulson\n */\n private getValuesForArray(\n paths: Array<string>,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): Array<any> {\n if (currentQuestionnaireForm) {\n const values = [];\n for (const path of paths) {\n const value = this.getValueForString(path, currentQuestionnaireForm, additionalData, repeaterItem);\n values.push(value);\n }\n return values;\n } else {\n return paths;\n }\n }\n\n /**\n * Gets a current value for a string.\n * @param path The string value to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A string/value.\n * @author Will Poulson\n */\n private getValueForString(\n path: string,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ) {\n if (currentQuestionnaireForm) {\n if (!additionalData) {\n additionalData = {};\n }\n\n let control = currentQuestionnaireForm.get(path.toString());\n\n if (!control && repeaterItem) {\n control = repeaterItem.get(path);\n }\n\n const value = control ? control.value : this.convertStringToValue(path);\n return _.get(additionalData, path, value);\n } else {\n return this.convertStringToValue(path);\n }\n }\n\n /**\n * Converts a string to a value.\n * Eg. true/false.\n * @param path The string value to check for conversion;\n * @returns Either a string or the converted value.\n * @author Will Poulson\n */\n private convertStringToValue(path: string) {\n switch (path) {\n case 'true':\n return true;\n case 'false':\n return false;\n case 'null':\n return null;\n default:\n return path;\n }\n }\n}\n","export enum ValidationType {\n Required = 'required',\n Boolean = 'boolean',\n Number = 'number',\n String = 'string',\n Email = 'email',\n Telephone = 'telephone',\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, AbstractControl, ValidatorFn, Validators, FormArray } from '@angular/forms';\nimport { Section } from '../interfaces/section';\nimport { Question } from '../interfaces/question';\nimport { Questionnaire } from '../interfaces/questionnaire';\nimport { QuestionType } from '../enums/question-type.enum';\nimport { FilterService } from './filter.service';\nimport { Validator } from '../interfaces/validator';\nimport { ValidationType } from '../enums/validation-type.enum';\nimport * as _ from 'lodash';\nimport { RepeaterQuestion } from '../interfaces/repeater-question';\nimport { ChecklistItem } from '../interfaces/checklist-item';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormConstructorService {\n\n constructor(\n private fb: FormBuilder,\n private filterService: FilterService\n ) { }\n\n /**\n * Constructs a form group based on the questionnaire data.\n * This form group has been filtered down based on the conditions of the sections and questions.\n * @param questionnaire The questionnaire data to build the form group on.\n * @returns A filted form group.\n * @author Will Poulson\n */\n public generateFormsForQuestionnaire(\n questionnaire: Questionnaire,\n currentQuestionnaire: Questionnaire,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n skipFilter?: boolean\n ): {sections: Array<Section>; forms: FormGroup} {\n const sections = skipFilter ?\n questionnaire.sections :\n this.filterService.filterSections(questionnaire.sections, currentQuestionnaireForm, additionalData);\n\n const noChange = currentQuestionnaireForm && (sections === currentQuestionnaire.sections);\n\n if (noChange && !skipFilter) {\n return null;\n }\n\n const questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm);\n return {sections: sections, forms: questionnaireForms};\n }\n\n private generateFormsForSections(sections: Array<Section>, currentQuestionnaireForm: FormGroup) {\n const questionnaireForms: FormGroup = this.fb.group({});\n for (const section of sections) {\n const sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm);\n questionnaireForms.addControl(section.name, sectionForms);\n }\n return questionnaireForms;\n }\n\n /**\n * Constructs a form group based on the section data.\n * This form group has been filtered down based on the conditions of the questions.\n * @param section The section data to build the form group on.\n * @returns A filtered form group.\n * @author Will Poulson\n */\n private generateFormsForSection(section: Section, currentQuestionnaireForm: FormGroup): FormGroup {\n const sectionForms: FormGroup = this.fb.group({});\n for (const question of section.questions) {\n if (question.type === QuestionType.Info) {\n continue;\n }\n\n const questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm);\n sectionForms.addControl(question.name, questionControl);\n }\n return sectionForms;\n }\n\n /**\n * Constructs an astract form control based on the question data.\n * @param question The question data to build the abstract control on.\n * @returns An abstract control.\n * @author Will Poulson\n */\n private generateControlForQuestion(question: Question, section: Section, currentQuestionnaireForm: FormGroup): AbstractControl {\n const convertedValidators = this.convertValidators(question.validators);\n const defaultValue = question.defaultValue ? question.defaultValue : null;\n switch (question.type) {\n case QuestionType.Repeater:\n const currentArray = currentQuestionnaireForm ? (currentQuestionnaireForm.get([section.name, question.name]) as FormArray) : false;\n return currentArray ? currentArray : this.fb.array([], convertedValidators);\n case QuestionType.Checklist:\n return this.generateGroupForChecklist(question, convertedValidators);\n case QuestionType.Slider:\n return this.fb.control(defaultValue, { validators: convertedValidators }); // Remove update on blur for sliders.\n default:\n return this.fb.control(defaultValue, { validators: convertedValidators, updateOn: 'blur' });\n }\n }\n\n /**\n * Generates the form group for a checklist question.\n * @param question The question. Must be of type checklist or else null is returned.\n * @returns A form group.\n * @author Will Poulson\n */\n private generateGroupForChecklist(question: Question, convertedValidators) {\n if (question.type !== QuestionType.Checklist || question.checklistItems.length === 0) {\n return null;\n }\n\n const checklistForms: FormGroup = this.fb.group({});\n for (const checklistItem of question.checklistItems) {\n const checklistItemControl = this.fb.control(null, convertedValidators);\n checklistForms.addControl(checklistItem.name, checklistItemControl);\n }\n return checklistForms;\n }\n\n\n /**\n * Generates the form template for a repeater question.\n * @param question The question. Must be of type repeater or else null is returned.\n * @returns A form group.\n * @author Will Poulson\n */\n public generateFormsForRepeater(question: Question, index?: any): FormGroup {\n if (question.type !== QuestionType.Repeater || question.repeaterQuestions.length === 0) {\n console.log('Question isnt a repeater or has no questions, returning null');\n return null;\n }\n\n const repeaterQuestions = index ? question.filteredRepeaterQuestions[index] : question.repeaterQuestions;\n\n console.log('Got the following repeater questions', repeaterQuestions);\n\n const repeaterForms: FormGroup = this.fb.group({});\n for (const repeaterQuestion of repeaterQuestions) {\n const repeaterQuestionControl = this.generateControlForRepeaterQuestion(repeaterQuestion);\n repeaterForms.addControl(repeaterQuestion.name, repeaterQuestionControl);\n }\n return repeaterForms;\n }\n\n /**\n * Generates a control for a repeaters question.\n * @param repeaterQuestion A repeater question.\n * @returns An abstract control.\n * @author Will Poulson\n */\n private generateControlForRepeaterQuestion(repeaterQuestion: RepeaterQuestion): AbstractControl {\n const convertedValidators = this.convertValidators(repeaterQuestion.validators);\n return this.fb.control(null, { validators: convertedValidators, updateOn: 'blur' });\n }\n\n /**\n * Converts an array of validators into form validators.\n * @param validators The uncoverted array of validators.\n * @returns A convered array of form validators.\n * @author Will Poulson\n */\n private convertValidators(validators: Array<Validator>): Array<ValidatorFn> {\n if (!validators || validators.length === 0) {\n return [];\n }\n const convertedValidators: Array<ValidatorFn> = [];\n for (const validator of validators) {\n const convertedValidator = this.convertValidator(validator);\n if (convertedValidator) {\n convertedValidators.push(convertedValidator);\n }\n }\n return convertedValidators;\n }\n\n /**\n * Converts a single validator into a form validator.\n * @param validator The unconverted validator.\n * @returns A converted form validator.\n * @author Will Poulson\n */\n private convertValidator(validator: Validator): ValidatorFn | null {\n switch (validator.type) {\n case ValidationType.Required:\n return Validators.required;\n default:\n return null;\n }\n }\n\n /**\n * Constructs the forms for repeaters from saved state.\n * @param savedState The saved state to load.\n * @param sections The sections already generated by the form constructor.\n */\n public constructRepeaterFromsFromState(savedState: any, sections: Array<Section>, currentQuestionnaireForm: FormGroup) {\n for (const section of sections) {\n for (const question of section.questions) {\n if (question.type !== QuestionType.Repeater) {\n continue;\n }\n\n const repeaterArray = savedState[section.name][question.name];\n if (!repeaterArray || repeaterArray.length === 0) {\n continue;\n }\n\n const repeaterFormArray = currentQuestionnaireForm.get([section.name, question.name]) as FormArray;\n\n if (repeaterFormArray.controls.length === repeaterArray.length) {\n continue;\n }\n\n // For each item that used to be there push a new empty template there to be populated.\n for (const repeaterItem of repeaterArray) {\n const index = repeaterArray.indexOf(repeaterItem);\n const repeaterItemTemplate = this.generateFormsForRepeater(question, index);\n repeaterFormArray.push(repeaterItemTemplate);\n }\n }\n }\n }\n}\n","import { Injectable, Inject, EventEmitter } from '@angular/core';\nimport { FormConstructorService } from './form-constructor.service';\nimport { Questionnaire } from '../interfaces/questionnaire';\nimport { FormGroup, AbstractControl, FormArray, FormBuilder } from '@angular/forms';\nimport { Section } from '../interfaces/section';\nimport { Question } from '../interfaces/question';\nimport { Subscription } from 'rxjs';\nimport * as _ from 'lodash';\nimport { QuestionnaireOptions } from '../interfaces/questionnaire-options';\nimport { QuestionType } from '../enums/question-type.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QuestionnaireService {\n public dataChangedEvent: EventEmitter<any> = new EventEmitter<any>();\n public sectionFinishedEvent: EventEmitter<any> = new EventEmitter<any>();\n\n private originalQuestionnaire: Questionnaire;\n\n private currentQuestionnaire: Questionnaire;\n private currentQuestionnaireForm: FormGroup;\n\n private currentSectionName: string;\n private currentQuestionName: string;\n\n private questionnaireValueChangeSubscription: Subscription;\n private questionValueChangeSubscription: Subscription;\n\n public additionalData: Object;\n\n private skippable = true;\n\n constructor(\n private formConstuctor: FormConstructorService,\n @Inject('options') private options: QuestionnaireOptions\n ) { }\n\n /**\n * Loads a questionnaire from data.\n * @param questionnaire The questionnaire data to load, often parsed JSON from the editor.\n * @param savedState The saved state of the questionnaire, often from localstorage.\n * @returns null\n * @author Will Poulson\n */\n public loadQuestionnaire(questionnaire: Questionnaire, savedState?: Object, additionalData?: Object) {\n this.originalQuestionnaire = _.cloneDeep(questionnaire);\n this.currentQuestionnaire = _.cloneDeep(questionnaire);\n\n this.additionalData = additionalData;\n\n if (savedState && Object.keys(savedState).length > 0) {\n const newData = this.formConstuctor.generateFormsForQuestionnaire(\n _.cloneDeep(this.originalQuestionnaire),\n _.cloneDeep(this.currentQuestionnaire),\n this.currentQuestionnaireForm,\n this.additionalData,\n true\n );\n\n if (newData) {\n this.formConstuctor.constructRepeaterFromsFromState(savedState, newData.sections, newData.forms);\n this.currentQuestionnaireForm = newData.forms;\n this.currentQuestionnaireForm.patchValue(savedState);\n }\n\n }\n\n this.updateQuestionnaire(savedState);\n\n\n\n if (this.options.skipToFirstSection) {\n this.currentSectionName = Object.keys(this.currentQuestionnaireForm.controls)[0];\n }\n\n if (this.options.skipToFirstQuestion) {\n this.currentQuestionName = Object.keys(this.currentSection.formGroup.controls)[0];\n }\n\n }\n\n /**\n * Updates the current questionnaire, used when a value is updated to check conditions.\n * @param savedState The saved state of the questionnaire, often from localstorage.\n * @returns null\n * @author Will Poulson\n */\n public updateQuestionnaire(savedState?: Object) {\n const oldLength = this.currentQuestionnaire.sections.map(x => x.questions.length).reduce((a, b) => a + b, 0);\n\n const newData = this.formConstuctor.generateFormsForQuestionnaire(\n _.cloneDeep(this.originalQuestionnaire),\n _.cloneDeep(this.currentQuestionnaire),\n this.currentQuestionnaireForm,\n this.additionalData\n );\n\n if (newData) {\n this.currentQuestionnaireForm = newData.forms;\n this.currentQuestionnaire.sections = newData.sections;\n }\n\n if (savedState && Object.keys(savedState).length > 0) {\n this.currentQuestionnaireForm.patchValue(savedState);\n }\n\n if (this.questionnaireValueChangeSubscription) {\n this.questionnaireValueChangeSubscription.unsubscribe();\n }\n\n if (this.questionValueChangeSubscription) {\n this.questionValueChangeSubscription.unsubscribe();\n }\n\n this.questionnaireValueChangeSubscription = this.currentQuestionnaireForm.valueChanges.subscribe(() => {\n this.dataChangedEvent.emit();\n this.updateQuestionnaire(this.currentQuestionnaireForm.getRawValue());\n });\n\n if (this.currentQuestion && this.currentQuestion.formControl) {\n this.questionValueChangeSubscription = this.currentQuestion.formControl.valueChanges.subscribe(() => {\n this.clearFields(this.currentQuestion.data.clearfields);\n });\n }\n\n const newLength = this.currentQuestionnaire.sections.map(x => x.questions.length).reduce((a, b) => a + b, 0);\n\n if (oldLength !== newLength) {\n for (const section of this.currentQuestionnaire.sections) {\n for (const question of section.questions) {\n const control = this.currentQuestionnaireForm.get([section.name, question.name]);\n if (control && control.value === null && question.defaultValue) {\n control.setValue(question.defaultValue);\n }\n }\n }\n }\n }\n\n public updateAdditionalData(payload: any) {\n this.additionalData = Object.assign(this.additionalData, payload);\n this.updateQuestionnaire(this.currentQuestionnaireForm.getRawValue());\n }\n\n public clearAdditionalData() {\n this.additionalData = {};\n this.updateQuestionnaire(this.currentQuestionnaireForm.getRawValue());\n }\n\n public get isValid() {\n return this.currentQuestionnaireForm.valid;\n }\n\n public get isFirstQuestion(): boolean {\n if (!this.currentSection || !this.currentQuestion) {\n return false;\n }\n const currentIndex = this.currentSection.data.questions.indexOf(this.currentQuestion.data);\n return currentIndex === 0;\n }\n\n public get isLastQuestion(): boolean {\n if (!this.currentSection || !this.currentQuestion) {\n return false;\n }\n const currentIndex = this.currentSection.data.questions.indexOf(this.currentQuestion.data);\n const maxIndex = this.currentSection.data.questions.length - 1;\n return currentIndex === maxIndex;\n }\n\n public get isFirstSection(): boolean {\n if (!this.currentSection) {\n return false;\n }\n\n const currentIndex = this.currentQuestionnaire.sections.indexOf(this.currentSection.data);\n return currentIndex === 0;\n }\n\n public get isLastSection(): boolean {\n if (!this.currentSection) {\n return false;\n }\n\n const currentIndex = this.currentQuestionnaire.sections.indexOf(this.currentSection.data);\n const maxIndex = this.currentQuestionnaire.sections.length - 1;\n return currentIndex === maxIndex;\n }\n\n public sectionValid(name: string) {\n return this.currentQuestionnaireForm.get(name).valid;\n }\n\n /**\n * Clears all the fields parsed\n * @param clearfields An array of strings, paths to clear.\n * @author Will Poulson\n */\n private clearFields(clearfields: Array<string>) {\n if (!clearfields || clearfields.length === 0) {\n return;\n }\n\n for (const clearfield of clearfields) {\n const control = this.currentQuestionnaireForm.get(clearfield);\n\n if (control) {\n control.reset(undefined);\n }\n }\n }\n\n /**\n * Unloads the current questionnaire.\n * Useful when exiting a questionnaire page or completing a questionnaire.\n * @author Will Poulson\n */\n public unloadQuestionnaire() {\n this.originalQuestionnaire = undefined;\n this.currentQuestionnaireForm = undefined;\n this.currentQuestionnaire = undefined;\n this.currentSectionName = undefined;\n this.currentQuestionName = undefined;\n this.additionalData = undefined;\n }\n\n /**\n * Gets the current selected section.\n * @returns An object containing the section data and the related form group.\n * @author Will Poulson\n */\n public get currentSection(): { data: Section; formGroup: FormGroup; } | null {\n if (!this.currentSectionName) {\n return null;\n }\n\n const data = this.currentQuestionnaire.sections.find((x) => {\n return x.name === this.currentSectionName;\n });\n\n if (!data) {\n return null;\n }\n\n return {\n data: data,\n formGroup: this.currentQuestionnaireForm.get(data.name) as FormGroup\n };\n }\n\n /**\n * Gets all the avaialble sections.\n * @returns An array of all avaialble sections.\n * @author Will Poulson\n */\n public get availableSections(): Array<Section> {\n if (!this.currentQuestionnaire || !this.currentQuestionnaire.sections) {\n return [];\n }\n return this.currentQuestionnaire.sections;\n }\n\n /**\n * Gets the current data for the entire questionnaire.\n * @returns An object of data.\n * @author Will Poulson\n */\n public get currentData() {\n return this.currentQuestionnaireForm ? this.currentQuestionnaireForm.getRawValue() : {};\n }\n\n\n /**\n * Gets the current selected question.\n * @returns An object containing the question data and the related form control.\n * @author Will Poulson\n */\n public get currentQuestion(): { data: Question; formControl: AbstractControl | null; } | null {\n if (!this.currentQuestionName) {\n return null;\n }\n\n const data = this.currentSection.data.questions.find((x) => {\n return x.name === this.currentQuestionName;\n });\n\n if (!data) {\n return null;\n }\n\n const formControl = this.currentSection.formGroup.get(data.name) as AbstractControl;\n\n return {\n data: data,\n formControl: formControl\n };\n }\n\n /**\n * Navigates to the next question.\n * If there is no question to navigate to it will reject with a out of bounds exception.\n * If allowSkipRequiredField is false then it will reject if the current question is invalid.\n * If emitSectionFinishEvent is true then it will emit an event if it's navigating past the length of questions.\n * @returns A promise which will resolve when the question has been navigated to.\n * @author Will Poulson\n */\n public nextQuestion() {\n return new Promise((resolve, reject) => {\n if (!this.options.allowSkipRequiredField) {\n if (this.currentQuestion.formControl && !this.currentQuestion.formControl.valid) {\n return reject('Current question is invalid');\n }\n }\n\n this.getCurrentQuestionIndex().then((currentIndex) => {\n const lastQuestionIndex = this.currentSection.data.questions.length - 1;\n const isLastQuestion = lastQuestionIndex === currentIndex;\n\n if (isLastQuestion) {\n this.sectionFinishedEvent.emit();\n return resolve();\n }\n\n const newIndex = currentIndex + 1;\n\n this.navigateToQuestion(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Navigates to the previous question.\n * If there is no question to navigate to it will reject with a out of bounds exception.\n * If allowNavigateBackwards is false then it will reject.\n * @returns A promise which will resolve when the question has been navigated to.\n * @author Will Poulson\n */\n public prevQuestion() {\n return new Promise((resolve, reject) => {\n if (!this.options.allowNavigateBackwards) {\n return reject('This questionnaire does not allow for backwards navigation');\n }\n\n this.getCurrentQuestionIndex().then((currentIndex) => {\n const newIndex = currentIndex - 1;\n\n this.navigateToQuestion(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Gets the current questions index.\n * @returns A promise which resolves a number.\n * @author Will Poulson\n */\n private getCurrentQuestionIndex(): Promise<number> {\n return new Promise((resolve, reject) => {\n const currentIndex = this.currentSection.data.questions.indexOf(this.currentQuestion.data);\n\n if (currentIndex === -1) {\n return reject('Could not find current question');\n }\n\n return resolve(currentIndex);\n });\n }\n\n /**\n * Checks a question is in bounds then navigates to it.\n * @param index The index to navigate to.\n * @returns A promise which will resolve when the question has been navigated to.\n * @author Will Poulson\n */\n public navigateToQuestion(index: number) {\n return new Promise((resolve, reject) => {\n if (this.currentSection.data.questions.length - 1 < index || index < 0) {\n return reject('Out of bounds exception');\n }\n\n this.currentQuestionName = this.currentSection.data.questions[index].name;\n return resolve();\n });\n }\n\n /**\n * Navigates to the next section.\n * @returns A promise which will resolve when the section has been navigated to.\n * @author Will Poulson\n */\n public nextSection() {\n return new Promise((resolve, reject) => {\n this.getCurrentSectionIndex().then((currentIndex) => {\n const newIndex = currentIndex + 1;\n this.navigateToSection(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Navigates to the previous section.\n * @returns A promise which will resolve when the section has been navigated to.\n * @author Will Poulson\n */\n public prevSection() {\n return new Promise((resolve, reject) => {\n this.getCurrentSectionIndex().then((currentIndex) => {\n const newIndex = currentIndex - 1;\n this.navigateToSection(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Gets the current section index.\n * @returns A promise which resolves a number.\n * @author Will Poulson\n */\n private getCurrentSectionIndex(): Promise<number> {\n return new Promise((resolve, reject) => {\n const currentIndex = this.currentQuestionnaire.sections.indexOf(this.currentSection.data);\n\n if (currentIndex === -1) {\n return reject('Could not find current section');\n }\n\n return resolve(currentIndex);\n });\n }\n\n /**\n * Checks a section is in bounds then navigates to it.\n * @param index The index to navigate to.\n * @returns A promise which will resolve when the section has been navigated to.\n * @author Will Poulson\n */\n public navigateToSection(index: number) {\n return new Promise((resolve, reject) => {\n if (this.currentQuestionnaire.sections.length - 1 < index || index < 0) {\n return reject('Out of bounds exception');\n }\n\n this.currentSectionName = this.currentQuestionnaire.sections[index].name;\n return resolve();\n });\n }\n\n /**\n * Answers the current question with the parsed value.\n * @param answer The value to answer the question with.\n * @author Will Poulson\n */\n public answerCurrentQuestion(answer: any, sendToNextQuestion?: boolean) {\n if (!sendToNextQuestion) {\n this.currentQuestion.formControl.setValue(answer);\n return;\n }\n\n if (this.skippable) { // Timeout to prevent skipping glitch.\n this.skippable = false;\n setTimeout(() => {\n this.currentQuestion.formControl.setValue(answer);\n this.nextQuestion().then(() => {\n this.skippable = true;\n });\n }, 150);\n }\n }\n\n /**\n * Adds a repeater item to the current question.\n * Current question must be of type Repeater.\n * @returns A promise which resolves when the repeater item has been added.\n * @author Will Poulson\n */\n public addRepeaterItem() {\n return new Promise((resolve, reject) => {\n if (this.currentQuestion.data.type !== QuestionType.Repeater) {\n return reject(`Current question isn't a repeater`);\n }\n const repeaterForm = this.formConstuctor.generateFormsForRepeater(this.currentQuestion.data);\n\n if (!repeaterForm) {\n return reject(`Repeater template failed to generate. May be due to the repeater having no items in the editor.`);\n }\n\n\n if (!(this.currentQuestion.formControl instanceof FormArray)) {\n return reject(`The current questions control isn't of type FormArray`);\n }\n\n this.currentQuestion.formControl.push(repeaterForm);\n return resolve();\n });\n }\n\n /**\n * Removes a repeater item on the current question.\n * Current question must be of type Repeater.\n * @param index The index at which to remove.\n * @returns A promise which resolves when the repeater item has been removed.\n * @author Will Poulson\n */\n public removeRepeaterItem(index: number) {\n return new Promise((resolve, reject) => {\n if (this.currentQuestion.data.type !== QuestionType.Repeater) {\n return reject(`Current question isn't a repeater`);\n }\n\n if (!(this.currentQuestion.formControl instanceof FormArray)) {\n return reject(`The current questions control isn't of type FormArray`);\n }\n\n this.currentQuestion.formControl.removeAt(index);\n return resolve();\n });\n }\n\n /**\n * Returns the display text for a given repeater item\n * @param index The index at which to get the label for.\n * @returns A string which is the display text.\n * @author Will Poulson\n */\n public getRepeaterItemLabel(index: number): string {\n if (!this.currentQuestion.formControl || !(this.currentQuestion.formControl instanceof FormArray)) {\n return '';\n }\n\n const repeaterItem = this.currentQuestion.formControl.controls[index];\n\n if (!repeaterItem) {\n return '';\n }\n\n const template = this.currentQuestion.data.repeaterDisplayName;\n const splitTemplate = template.split(' ');\n\n const displayArray = [];\n for (const templateItem of splitTemplate) {\n if (templateItem.match(/\\[.*?\\]/)) {\n const path = templateItem.replace(/[\\[\\]']+/g, '');\n const item = repeaterItem.get(path);\n const value = (item && item.value ? item.value : '?');\n displayArray.push(value);\n } else {\n displayArray.push(templateItem);\n }\n }\n\n const display = displayArray.join(' ');\n return display;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormConstructorService } from './services/form-constructor.service';\nimport { QuestionnaireService } from './services/questionnaire.service';\nimport { FilterService } from './services/filter.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionnaireOptions } from './interfaces/questionnaire-options';\nimport { ModuleWithProviders } from '@angular/compiler/src/core';\n\n@NgModule({\n declarations: [],\n providers: [\n FormConstructorService,\n FilterService\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule\n ],\n})\nexport class GgQuestionnaireV2Module {\n public static forRoot(options: QuestionnaireOptions): ModuleWithProviders {\n return {\n ngModule: GgQuestionnaireV2Module,\n providers: [\n QuestionnaireService,\n {\n provide: 'options',\n useValue: options\n }\n ]\n };\n }\n}\n","export enum InputType {\n Text = 'text',\n Number = 'number',\n Email = 'email',\n Telephone = 'tel',\n Password = 'password',\n Color = 'color',\n Date = 'date',\n DateTimeLocal = 'datetime-local',\n Time = 'time',\n Month = 'month',\n Week = 'week',\n}\n","export enum RepeaterQuestionType {\n Input = 'input',\n Select = 'select',\n Upload = 'upload',\n}\n"],"names":["tslib_1.__values","_.clone","_.get","_.keys","Injectable","Validators","FormBuilder","EventEmitter","_.cloneDeep","FormArray","Inject","NgModule","FormsModule","ReactiveFormsModule"],"mappings":"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"}
1
+ {"version":3,"file":"glowgreen-gg-questionnaire-v2.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@glowgreen/gg-questionnaire-v2/lib/enums/question-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/condition-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/condition-relationship.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/services/filter.service.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/validation-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/services/form-constructor.service.ts","ng://@glowgreen/gg-questionnaire-v2/lib/services/questionnaire.service.ts","ng://@glowgreen/gg-questionnaire-v2/lib/gg-questionnaire-v2.module.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/input-type.enum.ts","ng://@glowgreen/gg-questionnaire-v2/lib/enums/repeater-question-type.enum.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export enum QuestionType {\n Input = 'input',\n Select = 'select',\n Textarea = 'textarea',\n Repeater = 'repeater',\n Checklist = 'checklist',\n Attachment = 'attachment',\n Upload = 'upload',\n Signature = 'signature',\n Slider = 'slider',\n Info = 'info',\n}\n","export enum ConditionType {\n EqualTo = 'equalTo',\n NotEqualTo = 'notEqualTo',\n LessThan = 'lessThan',\n GreaterThan = 'greaterThan',\n Includes = 'includes',\n Excludes = 'excludes'\n}\n","export enum ConditionRelationship {\n Every = 'every',\n Any = 'any',\n}\n","import { Injectable } from '@angular/core';\nimport { Section } from '../interfaces/section';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport { Condition } from '../interfaces/condition';\nimport { ConditionGroup } from '../interfaces/condition-group';\nimport { ConditionType } from '../enums/condition-type.enum';\nimport { ConditionRelationship } from '../enums/condition-relationship.enum';\nimport * as _ from 'lodash';\nimport { Question } from '../interfaces/question';\nimport { RepeaterQuestion } from '../interfaces/repeater-question';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterService {\n\n constructor() { }\n\n /**\n * Filters an array of sections based on their condition groups.\n * @param sections The array of sections to filter.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns An array of filtered sections with their filtered questions.\n * @author Will Poulson\n */\n public filterSections(sections: Array<Section>, currentQuestionnaireForm: FormGroup | null, additionalData?: Object): Array<Section> {\n const filteredSections = [];\n for (const section of sections) {\n if (!this.meetsConditionGroups(section.conditionGroups, currentQuestionnaireForm, additionalData)) {\n continue;\n }\n\n const filteredQuestions = [];\n for (const question of section.questions) {\n if (!this.meetsConditionGroups(question.conditionGroups, currentQuestionnaireForm, additionalData)) {\n continue;\n }\n\n // If it's a repeater we need to do a lot of extra filtering due to per item conditions.\n if (question.type === 'repeater') {\n const items = currentQuestionnaireForm.get([section.name, question.name]) as FormArray;\n\n if (items && items.controls) {\n for (const repeaterItem of items.controls) {\n const filteredRepeaterItemQuestions: Array<RepeaterQuestion> = [];\n\n for (const repeaterQuestion of question.repeaterQuestions) {\n\n const meetsConditions = this.meetsConditionGroups(\n repeaterQuestion.conditionGroups,\n currentQuestionnaireForm,\n additionalData,\n repeaterItem as FormGroup\n );\n\n if (meetsConditions) {\n const cloneQuestion = _.clone(repeaterQuestion);\n\n cloneQuestion.selectOptions = this.getFetchOptionsForQuestion(\n repeaterQuestion,\n additionalData,\n currentQuestionnaireForm,\n repeaterItem as FormGroup\n );\n\n filteredRepeaterItemQuestions.push(cloneQuestion);\n }\n }\n\n const index = items.controls.indexOf(repeaterItem);\n\n if (!question.filteredRepeaterQuestions) {\n question.filteredRepeaterQuestions = [];\n }\n\n question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;\n }\n }\n\n }\n\n question.selectOptions = this.getFetchOptionsForQuestion(question, additionalData, currentQuestionnaireForm);\n\n filteredQuestions.push(question);\n }\n\n if (filteredQuestions.length === 0) {\n continue;\n }\n\n section.questions = filteredQuestions;\n filteredSections.push(section);\n }\n\n return filteredSections;\n }\n\n private getFetchOptionsForQuestion(\n question: Question | RepeaterQuestion,\n additionalData,\n currentQuestionnaireForm,\n repeaterItem?: FormGroup\n ) {\n\n if (!question.fetchPath) {\n return question.selectOptions;\n }\n\n let options = additionalData[question.fetchPath];\n if (question.fetchSelectors && question.fetchSelectors.length > 0) {\n const values = this.getValuesForArray(question.fetchSelectors, currentQuestionnaireForm, additionalData, repeaterItem);\n options = _.get(additionalData[question.fetchPath], values);\n }\n\n options = this.getFinalFetchArray(options);\n\n if (!question.selectOptions) {\n question.selectOptions = [];\n }\n\n return question.selectOptions.concat(options);\n }\n\n private getFinalFetchArray(items: any): Array<Object> {\n if (!items) {\n return null;\n }\n if (!Array.isArray(items)) {\n items = _.keys(items);\n }\n if (items.length <= 0) {\n return null;\n }\n const convertedArray: Array<Object> = [];\n for (const item of items) {\n if (item) {\n if (item instanceof Object && item.value && item.label) {\n convertedArray.push(item);\n } else {\n convertedArray.push({label: this.uppercase(item), value: item});\n }\n }\n }\n return convertedArray;\n }\n\n private uppercase(item: any) {\n return item.charAt(0).toUpperCase() + item.slice(1);\n }\n\n\n /**\n * Checks if each condition groups conditions have been met.\n * @param conditionGroups The array of condition groups.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A boolean stating if the condition groups conditions has been met.\n * @author Will Poulson\n */\n private meetsConditionGroups(\n conditionGroups: Array<ConditionGroup>,\n currentQuestionnaireForm: FormGroup | null,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): boolean {\n if (!conditionGroups || conditionGroups.length === 0) {\n return true;\n }\n return conditionGroups.every((x) => {\n return this.meetsConditionGroup(x, currentQuestionnaireForm, additionalData, repeaterItem) === true;\n });\n }\n\n /**\n * Checks if a condition groups conditions have been met.\n * @param conditionGroup The condition group to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A boolean stating if the condition group conditions has been met.\n * @author Will Poulson\n */\n private meetsConditionGroup(\n conditionGroup: ConditionGroup,\n currentQuestionnaireForm: FormGroup | null,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): boolean {\n if (!conditionGroup.conditions || conditionGroup.conditions.length === 0) {\n return true;\n }\n\n const results = [];\n\n for (const condition of conditionGroup.conditions) {\n results.push(this.meetsCondition(condition, currentQuestionnaireForm, additionalData, repeaterItem));\n }\n\n switch (conditionGroup.relationship) {\n case ConditionRelationship.Every:\n return results.every((x) => {\n return x === true;\n });\n case ConditionRelationship.Any:\n return !!results.find((x) => {\n return x === true;\n });\n default:\n return true;\n }\n }\n\n /**\n * Checks if a condition has been met.\n * @param condition The condition to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A boolean stating if the condition group conditions has been met.\n * @author Will Poulson\n */\n private meetsCondition(\n condition: Condition,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): boolean {\n const v1s: Array<any> = this.getValuesForArray(condition.v1s, currentQuestionnaireForm, additionalData, repeaterItem);\n const v2s: Array<any> = this.getValuesForArray(condition.v2s, currentQuestionnaireForm, additionalData, repeaterItem);\n\n let result = false;\n\n switch (condition.type) {\n case ConditionType.Excludes:\n result = v1s.filter((v1) => {\n return v2s.indexOf(v1) > -1;\n }).length === 0;\n break;\n case ConditionType.Includes:\n result = v1s.filter((v1) => {\n return v2s.indexOf(v1) > -1;\n }).length !== 0;\n break;\n default:\n for (let v2 of v2s) {\n for (let v1 of v1s) {\n switch (condition.type) {\n case ConditionType.EqualTo:\n v1 = this.getStringForValue(v1);\n v2 = this.getStringForValue(v2);\n if (v1 === v2) { result = true; }\n break;\n case ConditionType.NotEqualTo:\n v1 = this.getStringForValue(v1);\n v2 = this.getStringForValue(v2);\n if (v1 !== v2) { result = true; }\n break;\n case ConditionType.GreaterThan:\n v1 = parseFloat(v1);\n v2 = parseFloat(v2);\n if (v1 >= v2) { result = true; }\n break;\n case ConditionType.LessThan:\n v1 = parseFloat(v1);\n v2 = parseFloat(v2);\n if (v1 <= v2) { result = true; }\n break;\n }\n }\n }\n }\n\n return result;\n }\n\n private getStringForValue(value) {\n switch (value) {\n case null:\n return 'null';\n default:\n return value.toString();\n }\n }\n\n /**\n * Gets the current values for an array of strings.\n * @param paths The array of strings to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns An array of strings/values\n * @author Will Poulson\n */\n private getValuesForArray(\n paths: Array<string>,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ): Array<any> {\n if (currentQuestionnaireForm) {\n const values = [];\n for (const path of paths) {\n const value = this.getValueForString(path, currentQuestionnaireForm, additionalData, repeaterItem);\n values.push(value);\n }\n return values;\n } else {\n return paths;\n }\n }\n\n /**\n * Gets a current value for a string.\n * @param path The string value to check.\n * @param currentQuestionnaireForm The current form data, can be null/undefined.\n * @returns A string/value.\n * @author Will Poulson\n */\n private getValueForString(\n path: string,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n repeaterItem?: FormGroup\n ) {\n if (currentQuestionnaireForm) {\n if (!additionalData) {\n additionalData = {};\n }\n\n let control = currentQuestionnaireForm.get(path.toString());\n\n if (!control && repeaterItem) {\n control = repeaterItem.get(path);\n }\n\n const value = control ? control.value : this.convertStringToValue(path);\n return _.get(additionalData, path, value);\n } else {\n return this.convertStringToValue(path);\n }\n }\n\n /**\n * Converts a string to a value.\n * Eg. true/false.\n * @param path The string value to check for conversion;\n * @returns Either a string or the converted value.\n * @author Will Poulson\n */\n private convertStringToValue(path: string) {\n switch (path) {\n case 'true':\n return true;\n case 'false':\n return false;\n case 'null':\n return null;\n default:\n return path;\n }\n }\n}\n","export enum ValidationType {\n Required = 'required',\n Boolean = 'boolean',\n Number = 'number',\n String = 'string',\n Email = 'email',\n Telephone = 'telephone',\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, AbstractControl, ValidatorFn, Validators, FormArray } from '@angular/forms';\nimport { Section } from '../interfaces/section';\nimport { Question } from '../interfaces/question';\nimport { Questionnaire } from '../interfaces/questionnaire';\nimport { QuestionType } from '../enums/question-type.enum';\nimport { FilterService } from './filter.service';\nimport { Validator } from '../interfaces/validator';\nimport { ValidationType } from '../enums/validation-type.enum';\nimport * as _ from 'lodash';\nimport { RepeaterQuestion } from '../interfaces/repeater-question';\nimport { ChecklistItem } from '../interfaces/checklist-item';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormConstructorService {\n\n constructor(\n private fb: FormBuilder,\n private filterService: FilterService\n ) { }\n\n /**\n * Constructs a form group based on the questionnaire data.\n * This form group has been filtered down based on the conditions of the sections and questions.\n * @param questionnaire The questionnaire data to build the form group on.\n * @returns A filted form group.\n * @author Will Poulson\n */\n public generateFormsForQuestionnaire(\n questionnaire: Questionnaire,\n currentQuestionnaire: Questionnaire,\n currentQuestionnaireForm: FormGroup,\n additionalData?: Object,\n skipFilter?: boolean\n ): {sections: Array<Section>; forms: FormGroup} {\n const sections = skipFilter ?\n questionnaire.sections :\n this.filterService.filterSections(questionnaire.sections, currentQuestionnaireForm, additionalData);\n\n const noChange = currentQuestionnaireForm && (sections === currentQuestionnaire.sections);\n\n if (noChange && !skipFilter) {\n return null;\n }\n\n const questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm);\n return {sections: sections, forms: questionnaireForms};\n }\n\n private generateFormsForSections(sections: Array<Section>, currentQuestionnaireForm: FormGroup) {\n const questionnaireForms: FormGroup = this.fb.group({});\n for (const section of sections) {\n const sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm);\n questionnaireForms.addControl(section.name, sectionForms);\n }\n return questionnaireForms;\n }\n\n /**\n * Constructs a form group based on the section data.\n * This form group has been filtered down based on the conditions of the questions.\n * @param section The section data to build the form group on.\n * @returns A filtered form group.\n * @author Will Poulson\n */\n private generateFormsForSection(section: Section, currentQuestionnaireForm: FormGroup): FormGroup {\n const sectionForms: FormGroup = this.fb.group({});\n for (const question of section.questions) {\n if (question.type === QuestionType.Info) {\n continue;\n }\n\n const questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm);\n sectionForms.addControl(question.name, questionControl);\n }\n return sectionForms;\n }\n\n /**\n * Constructs an astract form control based on the question data.\n * @param question The question data to build the abstract control on.\n * @returns An abstract control.\n * @author Will Poulson\n */\n private generateControlForQuestion(question: Question, section: Section, currentQuestionnaireForm: FormGroup): AbstractControl {\n const convertedValidators = this.convertValidators(question.validators);\n const defaultValue = question.defaultValue ? question.defaultValue : null;\n switch (question.type) {\n case QuestionType.Repeater:\n const currentArray = currentQuestionnaireForm ? (currentQuestionnaireForm.get([section.name, question.name]) as FormArray) : false;\n\n if (currentArray) {\n for (let item of currentArray.controls) {\n const index = currentArray.controls.indexOf(item);\n item = this.generateFormsForRepeater(question, index);\n }\n }\n\n return currentArray ? currentArray : this.fb.array([], convertedValidators);\n case QuestionType.Checklist:\n return this.generateGroupForChecklist(question, convertedValidators);\n case QuestionType.Slider:\n return this.fb.control(defaultValue, { validators: convertedValidators }); // Remove update on blur for sliders.\n default:\n return this.fb.control(defaultValue, { validators: convertedValidators, updateOn: 'blur' });\n }\n }\n\n /**\n * Generates the form group for a checklist question.\n * @param question The question. Must be of type checklist or else null is returned.\n * @returns A form group.\n * @author Will Poulson\n */\n private generateGroupForChecklist(question: Question, convertedValidators) {\n if (question.type !== QuestionType.Checklist || question.checklistItems.length === 0) {\n return null;\n }\n\n const checklistForms: FormGroup = this.fb.group({});\n for (const checklistItem of question.checklistItems) {\n const checklistItemControl = this.fb.control(null, convertedValidators);\n checklistForms.addControl(checklistItem.name, checklistItemControl);\n }\n return checklistForms;\n }\n\n\n /**\n * Generates the form template for a repeater question.\n * @param question The question. Must be of type repeater or else null is returned.\n * @returns A form group.\n * @author Will Poulson\n */\n public generateFormsForRepeater(question: Question, index?: any): FormGroup {\n if (question.type !== QuestionType.Repeater || question.repeaterQuestions.length === 0) {\n console.log('Question isnt a repeater or has no questions, returning null');\n return null;\n }\n\n const repeaterQuestions = index ? question.filteredRepeaterQuestions[index] : question.repeaterQuestions;\n\n console.log('Got the following repeater questions', repeaterQuestions);\n\n const repeaterForms: FormGroup = this.fb.group({});\n for (const repeaterQuestion of repeaterQuestions) {\n const repeaterQuestionControl = this.generateControlForRepeaterQuestion(repeaterQuestion);\n repeaterForms.addControl(repeaterQuestion.name, repeaterQuestionControl);\n }\n return repeaterForms;\n }\n\n /**\n * Generates a control for a repeaters question.\n * @param repeaterQuestion A repeater question.\n * @returns An abstract control.\n * @author Will Poulson\n */\n private generateControlForRepeaterQuestion(repeaterQuestion: RepeaterQuestion): AbstractControl {\n const convertedValidators = this.convertValidators(repeaterQuestion.validators);\n return this.fb.control(null, { validators: convertedValidators, updateOn: 'blur' });\n }\n\n /**\n * Converts an array of validators into form validators.\n * @param validators The uncoverted array of validators.\n * @returns A convered array of form validators.\n * @author Will Poulson\n */\n private convertValidators(validators: Array<Validator>): Array<ValidatorFn> {\n if (!validators || validators.length === 0) {\n return [];\n }\n const convertedValidators: Array<ValidatorFn> = [];\n for (const validator of validators) {\n const convertedValidator = this.convertValidator(validator);\n if (convertedValidator) {\n convertedValidators.push(convertedValidator);\n }\n }\n return convertedValidators;\n }\n\n /**\n * Converts a single validator into a form validator.\n * @param validator The unconverted validator.\n * @returns A converted form validator.\n * @author Will Poulson\n */\n private convertValidator(validator: Validator): ValidatorFn | null {\n switch (validator.type) {\n case ValidationType.Required:\n return Validators.required;\n default:\n return null;\n }\n }\n\n /**\n * Constructs the forms for repeaters from saved state.\n * @param savedState The saved state to load.\n * @param sections The sections already generated by the form constructor.\n */\n public constructRepeaterFromsFromState(savedState: any, sections: Array<Section>, currentQuestionnaireForm: FormGroup) {\n for (const section of sections) {\n for (const question of section.questions) {\n if (question.type !== QuestionType.Repeater) {\n continue;\n }\n\n const repeaterArray = savedState[section.name][question.name];\n if (!repeaterArray || repeaterArray.length === 0) {\n continue;\n }\n\n const repeaterFormArray = currentQuestionnaireForm.get([section.name, question.name]) as FormArray;\n\n if (repeaterFormArray.controls.length === repeaterArray.length) {\n continue;\n }\n\n // For each item that used to be there push a new empty template there to be populated.\n for (const repeaterItem of repeaterArray) {\n const index = repeaterArray.indexOf(repeaterItem);\n const repeaterItemTemplate = this.generateFormsForRepeater(question, index);\n repeaterFormArray.push(repeaterItemTemplate);\n }\n }\n }\n }\n}\n","import { Injectable, Inject, EventEmitter } from '@angular/core';\nimport { FormConstructorService } from './form-constructor.service';\nimport { Questionnaire } from '../interfaces/questionnaire';\nimport { FormGroup, AbstractControl, FormArray, FormBuilder } from '@angular/forms';\nimport { Section } from '../interfaces/section';\nimport { Question } from '../interfaces/question';\nimport { Subscription } from 'rxjs';\nimport * as _ from 'lodash';\nimport { QuestionnaireOptions } from '../interfaces/questionnaire-options';\nimport { QuestionType } from '../enums/question-type.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QuestionnaireService {\n public dataChangedEvent: EventEmitter<any> = new EventEmitter<any>();\n public sectionFinishedEvent: EventEmitter<any> = new EventEmitter<any>();\n\n private originalQuestionnaire: Questionnaire;\n\n private currentQuestionnaire: Questionnaire;\n private currentQuestionnaireForm: FormGroup;\n\n private currentSectionName: string;\n private currentQuestionName: string;\n\n private questionnaireValueChangeSubscription: Subscription;\n private questionValueChangeSubscription: Subscription;\n\n public additionalData: Object;\n\n private skippable = true;\n\n constructor(\n private formConstuctor: FormConstructorService,\n @Inject('options') private options: QuestionnaireOptions\n ) { }\n\n /**\n * Loads a questionnaire from data.\n * @param questionnaire The questionnaire data to load, often parsed JSON from the editor.\n * @param savedState The saved state of the questionnaire, often from localstorage.\n * @returns null\n * @author Will Poulson\n */\n public loadQuestionnaire(questionnaire: Questionnaire, savedState?: Object, additionalData?: Object) {\n this.originalQuestionnaire = _.cloneDeep(questionnaire);\n this.currentQuestionnaire = _.cloneDeep(questionnaire);\n\n this.additionalData = additionalData;\n\n if (savedState && Object.keys(savedState).length > 0) {\n const newData = this.formConstuctor.generateFormsForQuestionnaire(\n _.cloneDeep(this.originalQuestionnaire),\n _.cloneDeep(this.currentQuestionnaire),\n this.currentQuestionnaireForm,\n this.additionalData,\n true\n );\n\n if (newData) {\n this.formConstuctor.constructRepeaterFromsFromState(savedState, newData.sections, newData.forms);\n this.currentQuestionnaireForm = newData.forms;\n this.currentQuestionnaireForm.patchValue(savedState);\n }\n\n }\n\n this.updateQuestionnaire(savedState);\n\n\n\n if (this.options.skipToFirstSection) {\n this.currentSectionName = Object.keys(this.currentQuestionnaireForm.controls)[0];\n }\n\n if (this.options.skipToFirstQuestion) {\n this.currentQuestionName = Object.keys(this.currentSection.formGroup.controls)[0];\n }\n\n }\n\n /**\n * Updates the current questionnaire, used when a value is updated to check conditions.\n * @param savedState The saved state of the questionnaire, often from localstorage.\n * @returns null\n * @author Will Poulson\n */\n public updateQuestionnaire(savedState?: Object) {\n const oldLength = this.currentQuestionnaire.sections.map(x => x.questions.length).reduce((a, b) => a + b, 0);\n\n const newData = this.formConstuctor.generateFormsForQuestionnaire(\n _.cloneDeep(this.originalQuestionnaire),\n _.cloneDeep(this.currentQuestionnaire),\n this.currentQuestionnaireForm,\n this.additionalData\n );\n\n if (newData) {\n this.currentQuestionnaireForm = newData.forms;\n this.currentQuestionnaire.sections = newData.sections;\n }\n\n if (savedState && Object.keys(savedState).length > 0) {\n this.currentQuestionnaireForm.patchValue(savedState);\n }\n\n if (this.questionnaireValueChangeSubscription) {\n this.questionnaireValueChangeSubscription.unsubscribe();\n }\n\n if (this.questionValueChangeSubscription) {\n this.questionValueChangeSubscription.unsubscribe();\n }\n\n this.questionnaireValueChangeSubscription = this.currentQuestionnaireForm.valueChanges.subscribe(() => {\n this.dataChangedEvent.emit();\n this.updateQuestionnaire(this.currentQuestionnaireForm.getRawValue());\n });\n\n if (this.currentQuestion && this.currentQuestion.formControl) {\n this.questionValueChangeSubscription = this.currentQuestion.formControl.valueChanges.subscribe(() => {\n this.clearFields(this.currentQuestion.data.clearfields);\n });\n }\n\n const newLength = this.currentQuestionnaire.sections.map(x => x.questions.length).reduce((a, b) => a + b, 0);\n\n if (oldLength !== newLength) {\n for (const section of this.currentQuestionnaire.sections) {\n for (const question of section.questions) {\n const control = this.currentQuestionnaireForm.get([section.name, question.name]);\n if (control && control.value === null && question.defaultValue) {\n control.setValue(question.defaultValue);\n }\n }\n }\n }\n }\n\n public updateAdditionalData(payload: any) {\n this.additionalData = Object.assign(this.additionalData, payload);\n this.updateQuestionnaire(this.currentQuestionnaireForm.getRawValue());\n }\n\n public clearAdditionalData() {\n this.additionalData = {};\n this.updateQuestionnaire(this.currentQuestionnaireForm.getRawValue());\n }\n\n public get isValid() {\n return this.currentQuestionnaireForm.valid;\n }\n\n public get isFirstQuestion(): boolean {\n if (!this.currentSection || !this.currentQuestion) {\n return false;\n }\n const currentIndex = this.currentSection.data.questions.indexOf(this.currentQuestion.data);\n return currentIndex === 0;\n }\n\n public get isLastQuestion(): boolean {\n if (!this.currentSection || !this.currentQuestion) {\n return false;\n }\n const currentIndex = this.currentSection.data.questions.indexOf(this.currentQuestion.data);\n const maxIndex = this.currentSection.data.questions.length - 1;\n return currentIndex === maxIndex;\n }\n\n public get isFirstSection(): boolean {\n if (!this.currentSection) {\n return false;\n }\n\n const currentIndex = this.currentQuestionnaire.sections.indexOf(this.currentSection.data);\n return currentIndex === 0;\n }\n\n public get isLastSection(): boolean {\n if (!this.currentSection) {\n return false;\n }\n\n const currentIndex = this.currentQuestionnaire.sections.indexOf(this.currentSection.data);\n const maxIndex = this.currentQuestionnaire.sections.length - 1;\n return currentIndex === maxIndex;\n }\n\n public sectionValid(name: string) {\n return this.currentQuestionnaireForm.get(name).valid;\n }\n\n /**\n * Clears all the fields parsed\n * @param clearfields An array of strings, paths to clear.\n * @author Will Poulson\n */\n private clearFields(clearfields: Array<string>) {\n if (!clearfields || clearfields.length === 0) {\n return;\n }\n\n for (const clearfield of clearfields) {\n const control = this.currentQuestionnaireForm.get(clearfield);\n\n if (control) {\n control.reset(undefined);\n }\n }\n }\n\n /**\n * Unloads the current questionnaire.\n * Useful when exiting a questionnaire page or completing a questionnaire.\n * @author Will Poulson\n */\n public unloadQuestionnaire() {\n this.originalQuestionnaire = undefined;\n this.currentQuestionnaireForm = undefined;\n this.currentQuestionnaire = undefined;\n this.currentSectionName = undefined;\n this.currentQuestionName = undefined;\n this.additionalData = undefined;\n }\n\n /**\n * Gets the current selected section.\n * @returns An object containing the section data and the related form group.\n * @author Will Poulson\n */\n public get currentSection(): { data: Section; formGroup: FormGroup; } | null {\n if (!this.currentSectionName) {\n return null;\n }\n\n const data = this.currentQuestionnaire.sections.find((x) => {\n return x.name === this.currentSectionName;\n });\n\n if (!data) {\n return null;\n }\n\n return {\n data: data,\n formGroup: this.currentQuestionnaireForm.get(data.name) as FormGroup\n };\n }\n\n /**\n * Gets all the avaialble sections.\n * @returns An array of all avaialble sections.\n * @author Will Poulson\n */\n public get availableSections(): Array<Section> {\n if (!this.currentQuestionnaire || !this.currentQuestionnaire.sections) {\n return [];\n }\n return this.currentQuestionnaire.sections;\n }\n\n /**\n * Gets the current data for the entire questionnaire.\n * @returns An object of data.\n * @author Will Poulson\n */\n public get currentData() {\n return this.currentQuestionnaireForm ? this.currentQuestionnaireForm.getRawValue() : {};\n }\n\n\n /**\n * Gets the current selected question.\n * @returns An object containing the question data and the related form control.\n * @author Will Poulson\n */\n public get currentQuestion(): { data: Question; formControl: AbstractControl | null; } | null {\n if (!this.currentQuestionName) {\n return null;\n }\n\n const data = this.currentSection.data.questions.find((x) => {\n return x.name === this.currentQuestionName;\n });\n\n if (!data) {\n return null;\n }\n\n const formControl = this.currentSection.formGroup.get(data.name) as AbstractControl;\n\n return {\n data: data,\n formControl: formControl\n };\n }\n\n /**\n * Navigates to the next question.\n * If there is no question to navigate to it will reject with a out of bounds exception.\n * If allowSkipRequiredField is false then it will reject if the current question is invalid.\n * If emitSectionFinishEvent is true then it will emit an event if it's navigating past the length of questions.\n * @returns A promise which will resolve when the question has been navigated to.\n * @author Will Poulson\n */\n public nextQuestion() {\n return new Promise((resolve, reject) => {\n if (!this.options.allowSkipRequiredField) {\n if (this.currentQuestion.formControl && !this.currentQuestion.formControl.valid) {\n return reject('Current question is invalid');\n }\n }\n\n this.getCurrentQuestionIndex().then((currentIndex) => {\n const lastQuestionIndex = this.currentSection.data.questions.length - 1;\n const isLastQuestion = lastQuestionIndex === currentIndex;\n\n if (isLastQuestion) {\n this.sectionFinishedEvent.emit();\n return resolve();\n }\n\n const newIndex = currentIndex + 1;\n\n this.navigateToQuestion(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Navigates to the previous question.\n * If there is no question to navigate to it will reject with a out of bounds exception.\n * If allowNavigateBackwards is false then it will reject.\n * @returns A promise which will resolve when the question has been navigated to.\n * @author Will Poulson\n */\n public prevQuestion() {\n return new Promise((resolve, reject) => {\n if (!this.options.allowNavigateBackwards) {\n return reject('This questionnaire does not allow for backwards navigation');\n }\n\n this.getCurrentQuestionIndex().then((currentIndex) => {\n const newIndex = currentIndex - 1;\n\n this.navigateToQuestion(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Gets the current questions index.\n * @returns A promise which resolves a number.\n * @author Will Poulson\n */\n private getCurrentQuestionIndex(): Promise<number> {\n return new Promise((resolve, reject) => {\n const currentIndex = this.currentSection.data.questions.indexOf(this.currentQuestion.data);\n\n if (currentIndex === -1) {\n return reject('Could not find current question');\n }\n\n return resolve(currentIndex);\n });\n }\n\n /**\n * Checks a question is in bounds then navigates to it.\n * @param index The index to navigate to.\n * @returns A promise which will resolve when the question has been navigated to.\n * @author Will Poulson\n */\n public navigateToQuestion(index: number) {\n return new Promise((resolve, reject) => {\n if (this.currentSection.data.questions.length - 1 < index || index < 0) {\n return reject('Out of bounds exception');\n }\n\n this.currentQuestionName = this.currentSection.data.questions[index].name;\n return resolve();\n });\n }\n\n /**\n * Navigates to the next section.\n * @returns A promise which will resolve when the section has been navigated to.\n * @author Will Poulson\n */\n public nextSection() {\n return new Promise((resolve, reject) => {\n this.getCurrentSectionIndex().then((currentIndex) => {\n const newIndex = currentIndex + 1;\n this.navigateToSection(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Navigates to the previous section.\n * @returns A promise which will resolve when the section has been navigated to.\n * @author Will Poulson\n */\n public prevSection() {\n return new Promise((resolve, reject) => {\n this.getCurrentSectionIndex().then((currentIndex) => {\n const newIndex = currentIndex - 1;\n this.navigateToSection(newIndex).then(() => {\n return resolve();\n }).catch((error) => {\n return reject(error);\n });\n }).catch((error) => {\n return reject(error);\n });\n });\n }\n\n /**\n * Gets the current section index.\n * @returns A promise which resolves a number.\n * @author Will Poulson\n */\n private getCurrentSectionIndex(): Promise<number> {\n return new Promise((resolve, reject) => {\n const currentIndex = this.currentQuestionnaire.sections.indexOf(this.currentSection.data);\n\n if (currentIndex === -1) {\n return reject('Could not find current section');\n }\n\n return resolve(currentIndex);\n });\n }\n\n /**\n * Checks a section is in bounds then navigates to it.\n * @param index The index to navigate to.\n * @returns A promise which will resolve when the section has been navigated to.\n * @author Will Poulson\n */\n public navigateToSection(index: number) {\n return new Promise((resolve, reject) => {\n if (this.currentQuestionnaire.sections.length - 1 < index || index < 0) {\n return reject('Out of bounds exception');\n }\n\n this.currentSectionName = this.currentQuestionnaire.sections[index].name;\n return resolve();\n });\n }\n\n /**\n * Answers the current question with the parsed value.\n * @param answer The value to answer the question with.\n * @author Will Poulson\n */\n public answerCurrentQuestion(answer: any, sendToNextQuestion?: boolean) {\n if (!sendToNextQuestion) {\n this.currentQuestion.formControl.setValue(answer);\n return;\n }\n\n if (this.skippable) { // Timeout to prevent skipping glitch.\n this.skippable = false;\n setTimeout(() => {\n this.currentQuestion.formControl.setValue(answer);\n this.nextQuestion().then(() => {\n this.skippable = true;\n });\n }, 150);\n }\n }\n\n /**\n * Adds a repeater item to the current question.\n * Current question must be of type Repeater.\n * @returns A promise which resolves when the repeater item has been added.\n * @author Will Poulson\n */\n public addRepeaterItem() {\n return new Promise((resolve, reject) => {\n if (this.currentQuestion.data.type !== QuestionType.Repeater) {\n return reject(`Current question isn't a repeater`);\n }\n \n const repeaterForm = this.formConstuctor.generateFormsForRepeater(this.currentQuestion.data);\n\n if (!repeaterForm) {\n return reject(`Repeater template failed to generate. May be due to the repeater having no items in the editor.`);\n }\n\n\n if (!(this.currentQuestion.formControl instanceof FormArray)) {\n return reject(`The current questions control isn't of type FormArray`);\n }\n\n this.currentQuestion.formControl.push(repeaterForm);\n return resolve();\n });\n }\n\n /**\n * Removes a repeater item on the current question.\n * Current question must be of type Repeater.\n * @param index The index at which to remove.\n * @returns A promise which resolves when the repeater item has been removed.\n * @author Will Poulson\n */\n public removeRepeaterItem(index: number) {\n return new Promise((resolve, reject) => {\n if (this.currentQuestion.data.type !== QuestionType.Repeater) {\n return reject(`Current question isn't a repeater`);\n }\n\n if (!(this.currentQuestion.formControl instanceof FormArray)) {\n return reject(`The current questions control isn't of type FormArray`);\n }\n\n this.currentQuestion.formControl.removeAt(index);\n return resolve();\n });\n }\n\n /**\n * Returns the display text for a given repeater item\n * @param index The index at which to get the label for.\n * @returns A string which is the display text.\n * @author Will Poulson\n */\n public getRepeaterItemLabel(index: number): string {\n if (!this.currentQuestion.formControl || !(this.currentQuestion.formControl instanceof FormArray)) {\n return '';\n }\n\n const repeaterItem = this.currentQuestion.formControl.controls[index];\n\n if (!repeaterItem) {\n return '';\n }\n\n const template = this.currentQuestion.data.repeaterDisplayName;\n const splitTemplate = template.split(' ');\n\n const displayArray = [];\n for (const templateItem of splitTemplate) {\n if (templateItem.match(/\\[.*?\\]/)) {\n const path = templateItem.replace(/[\\[\\]']+/g, '');\n const item = repeaterItem.get(path);\n const value = (item && item.value ? item.value : '?');\n displayArray.push(value);\n } else {\n displayArray.push(templateItem);\n }\n }\n\n const display = displayArray.join(' ');\n return display;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormConstructorService } from './services/form-constructor.service';\nimport { QuestionnaireService } from './services/questionnaire.service';\nimport { FilterService } from './services/filter.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionnaireOptions } from './interfaces/questionnaire-options';\nimport { ModuleWithProviders } from '@angular/compiler/src/core';\n\n@NgModule({\n declarations: [],\n providers: [\n FormConstructorService,\n FilterService\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule\n ],\n})\nexport class GgQuestionnaireV2Module {\n public static forRoot(options: QuestionnaireOptions): ModuleWithProviders {\n return {\n ngModule: GgQuestionnaireV2Module,\n providers: [\n QuestionnaireService,\n {\n provide: 'options',\n useValue: options\n }\n ]\n };\n }\n}\n","export enum InputType {\n Text = 'text',\n Number = 'number',\n Email = 'email',\n Telephone = 'tel',\n Password = 'password',\n Color = 'color',\n Date = 'date',\n DateTimeLocal = 'datetime-local',\n Time = 'time',\n Month = 'month',\n Week = 'week',\n}\n","export enum RepeaterQuestionType {\n Input = 'input',\n Select = 'select',\n Upload = 'upload',\n}\n"],"names":["tslib_1.__values","_.clone","_.get","_.keys","Injectable","Validators","FormBuilder","EventEmitter","_.cloneDeep","FormArray","Inject","NgModule","FormsModule","ReactiveFormsModule"],"mappings":"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"}