@ampath-kenya/ngx-openmrs-formentry 2.12.21 → 2.12.23-alpha
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.
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +3 -3
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -1
- package/esm2015/form-entry/value-adapters/person-address.adapter.js +2 -1
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +2 -3
- package/esm5/form-entry/value-adapters/person-address.adapter.js +2 -1
- package/esm5/form-entry/value-adapters/person-attribute.adapter.js +2 -3
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +3 -3
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +4 -4
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/debug-mode.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-errors.service.ts","null","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relation.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/hider-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-alerts/alert-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/disabler-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-node.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/js-expression-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/conditional-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/control-relations.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/expression-runner/expression-runner.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-control.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-group.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-array.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-control-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/question-base.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-answered.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/future-date-restriction.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/js-expression-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/validations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/js-expression.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/utils/messages.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/validation.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/hiders-disablers.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/show-messages.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-control.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.css.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/data-sources.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/error-renderer/error-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-field-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/directives/historical-value-directive.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/diacritics.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option-list.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/secure.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/shared.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-picker/date-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/time-picker/time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/picker-modal/modal.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/pipes/moment.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/afe-ng-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-schema-compiler.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-area-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/ui-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/multi-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/interfaces/nested-questions.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/group-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/repeating-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/checkbox.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/time-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/file-upload-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/test-order-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/max-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/min-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/decimal-point-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/dummy-data-source.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/historical-encounter-data.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-expression-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/question.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs-adapter-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/order.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/encounter.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-attribute.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/appointments-overview/appointments-overview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-view/encounter-viewer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-pdf-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-container/encounter-container.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/question-control.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/file-preview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/remote-answer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-address.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-entry.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/pair.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/rendering-type.ts"],"names":["DebugModeService","this","cookieKey","prototype","debugEnabled","Injectable","FormErrorsService","announceErrorFieldSource","Subject","announceErrorField$","asObservable","announceErrorField","error","next","control","tab","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","create","__values","o","s","Symbol","iterator","m","i","call","length","value","done","TypeError","ControlRelation","relatedTo","_control","_relatedTo","_registerForChangesFromRelatedControl","defineProperty","_lastUpdateValue","updateControlBasedOnRelation","newValue","updateCalculatedValue","updateValueAndValidity","updateHiddenState","updateDisabledState","updateAlert","_this","valueChanges","subscribe","ControlRelations","relationFor","_otherRelations","_relationFor","_relations","addRelatedControls","AbstractControl","relations","push","HiderHelper","hideControl","hidden","disable","showControl","setHiderForControl","hider","hiders","clearHidersForControl","splice","evaluateControlHiders","hiddenValue","forEach","reEvaluateHidingExpression","toHide","setUpReEvaluationWhenValueChanges","val","AlertHelper","hideAlert","shown","showAlert","setAlertsForControl","alert","alerts","clearAlertsForControl","evaluateControlAlerts","messageValue","message","reEvaluateAlertExpression","alertMessage","DisablerHelper","setDisablerForControl","disabler","disablers","clearDisablersForControl","evaluateControlDisablers","toDisable","reEvaluateDisablingExpression","enable","NodeBase","question","form","parentPath","_questionModel","_form","_path","key","removeAt","index","createChildNode","removeChildNode","LeafNode","_super","parentControl","tslib_1.__extends","GroupNode","_children","setChild","node","children","ArrayNode","formFactory","childNodeCreatedEvents","createChildFunc","g","fireChildNodeCreatedListener","confirm","removeChildFunc","addChildNodeCreatedListener","func","ValidationModel","validations","type","JsExpressionValidationModel","failsWhenExpression","ConditionalValidationModel","referenceQuestionId","referenceQuestionAnswers","ControlRelationsFactory","buildRelations","rootNode","controlsStore","mapControlIds","nodeBase","setRelations","buildArrayNodeRelations","rootControlsStore","arrayControlStore","child","questionBase","id","createRelationsToArrayControls","rChild","parentNodePath","path","substring","lastIndexOf","indexOf","aChild","aChildId","this_1","hasRelation","nodes","searchNodeByPath","an","rootControl_1","controlRelations","otherRelations","addValueChangeListener","getRelationsForControl","nodeBaseArray","searchNodeByQuestionId","controlList","addRelationToControl","required","validators","element","hide","field","calculateExpression","related","moment","moment_","ExpressionRunner","getRunnable","expression","helper","dataDependencies","runner","runnable","run","scope","uuid","window","getControlRelationValueString","getHelperMethods","getDataDependencies","dataSourcesContainer","dataSources","paramList","argList","funcDeclarationCode","funcCallCode","keys","console","warn","eval","e","relation","relatedAsControl","isArray","arrayNode","uuid_1","controlRelationsFactory_1","relationsForControl_1","concat","setControlArrayValues","relationsForControl","_getFormControlKeys","values","_getValuesForKey","array","obj","AfeFormControl","formState","validator","asyncValidator","hiderHelper","disablerHelper","_controlRelations","_previousValue","fireValueChangeListener","param","setValue","show","setHidingFn","newHider","setCalculatorFn","newCalculator","calculator","_val","clearHidingFns","setDisablingFn","newDisabler","clearDisablingFns","setAlertFn","clearMessageFns","_valueChangeListener","FormControl","AfeFormGroup","controls","FormGroup","AfeFormArray","_uuid","FormArray","AfeControlType","QuestionBase","options","defaultValue","originalValue","extras","renderingType","label","historicalDataValue","setHistoricalValue","v","enableHistoricalValue","showHistoricalEncounterDate","showHistoricalValueDate","undefined","ConditionalRequiredValidator","validate","model","isRequired","relationValue","conditional_required","ConditionalAnsweredValidator","successCondition","conditional_answered","RequiredValidator","DateValidator","test","Date","toString","date","MinValidator","min","requiredValue","actualValue","MaxValidator","max","MinDateValidator","mindate","requiredDate","newDate","getTime","actualDate","MaxDateValidator","maxdate","FutureDateRestrictionValidator","now","futureDateRestriction","JsExpressionHelper","calcBMI","height","weight","r","toFixed","parseFloat","calcBSA","result","Math","sqrt","calcBMIForAgeZscore","bmiForAgeRef","bmi","formattedSDValue","refSectionObject","_.first","refObjectValues","map","x","refObjectKeys","minimumValue","minReferencePoint_1","_.forEach","lastReferenceValue_1","_.last","_.findIndex","replace","includes","calcWeightForHeightZscore","weightForHeightRef","refSection","_.filter","refObject","minReferencePoint_2","lastReferenceValue_2","calcHeightForAgeZscore","heightForAgeRef","minReferencePoint_3","lastReferenceValue_3","isEmpty","arrayContains","members","contains","extractRepeatingGroupValues","item","formatDate","format","offset","Error","arrayContainsAny","Validations","JSExpressionValidatorsEnabled","JsExpressionValidator","helperFunctions","js_expression","Messages","REQUIRED_FIELD_MSG","INVALID_DATE_MSG","FUTURE_DATE_RESTRICTION_MSG","MIN_LENGTH_MSG","MAX_LENGTH_MSG","MAX_DATE_MSG","MIN_DATE_MSG","MAX_MSG","MIN_MSG","ValidationFactory","getValidators","list","dateValidator","allowFutureDates","futureDateRestrictionValidator","jsExpressionValidator","getMaxValueValidator","getMinValueValidator","conditionalRequiredValidator","conditionalAnsweredValidator","requiredValidator","Validators","minLength","maxLength","errors","messages","property","minlength","requiredLength","maxlength","HidersDisablersFactory","expressionRunner","expressionHelper","_debugModeService","getJsExpressionDisabler","disableWhenExpression","getJsExpressionHider","convertHideObjectToString","hideWhenExpression","join","AlertsFactory","getJsExpressionshowAlert","alertWhenExpression","FormControlService","validationFactory","hidersDisablersFactory","alertsFactory","generateControlModel","questionModel","generateChildren","controlType","generateFormArray","generateFormGroupModel","generateFormControl","formGroup","wireHidersDisablers","wireAlerts","setControl","asGroup","questions","_generateFormGroupChildrenModel","generated","addControl","formArray","wireCalculator","alert_1","dataSource","DEFAULT_STYLES","DataSources","_dataSources","registerDataSource","unWrap","log","clearDataSource","FormRendererComponent","formErrorsService","document","childComponents","isCollapsed","activeTab","ngOnInit","setUpRemoteSelect","setUpFileUpload","valueProcessingInfo","lastFormTab","scrollToControl","isExpanded","parentComponent","addChildComponent","dataSourceOptions","checkSection","groupChildrenHidden_1","every","k","innerNode","clickTab","tabNumber","loadPreviousTab","isCurrentTabFirst","body","scrollTop","isCurrentTabLast","loadNextTab","tabSelected","$event","setPreviousTab","hasErrors","touched","valid","getErrors","split","elSelector","tabComponent","setTimeout","section","getElementById","focus","scrollIntoView","behavior","block","onDateChanged","upload","event","toggleInformation","infoId","style","display","Component","args","selector","template","styles","Inject","DOCUMENT","Input","ErrorRendererComponent","showErrors","markInvalidControls","getControlError","errorNode","pageIndex","getPageIndex","HistoricalFieldHelperService","getDisplayTextFromOptions","valueProperty","displayProperty","displayText","historicalValue","_.isArray","valueConverted_1","_.each","option","HistoricalValueDirective","historicalFieldHelper","_nodeChange","EventEmitter","target","name","_node","compareString","stopPropagation","emit","a","_.isUndefined","text","_date","valueDate","Directive","Output","HostListener","STYLE","Option","disabled","highlighted","selected","undecoratedCopy","Diacritics","strip","DIACRITICS","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","OptionList","_highlightedOption","_options","highlight","equalValues","v0","v1","slice","sort","getOptionsByValue","filter","selection","selectedOption","select","multiple","clearSelection","deselect","term","trim","resetFilter","l","toUpperCase","t","hasShownSelected","getFirstShownSelected","getFirstShown","highlightOption","clearHighlightedOption","highlightNextOption","shownOptions","filtered","getHighlightedIndexFromList","highlightPreviousOption","highlightedOption","getHighlightedIndex","hasShown","some","hasSelected","_a","tslib_1.__values","_b","SELECT_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","SelectComponent","multi","KEYS","BACKSPACE","TAB","ENTER","ESC","SPACE","UP","DOWN","allowClear","highlightColor","highlightTextColor","noFilter","notFoundMsg","placeholder","opened","closed","deselected","typed","_value","filterEnabled","filterInputWidth","hasFocus","isBelow","isDisabled","isOpen","placeholderView","clearClicked","selectContainerClicked","onChange","_","onTouched","ngAfterViewInit","updateFilterWidth","ngOnChanges","changes","updateOptionsList","isFirstChange","numOptions","optionList","minNumOptions","currentValue","onWindowClick","closeDropdown","onWindowResize","updateWidth","onSelectContainerClick","toggleDropdown","onSelectContainerFocus","onSelectContainerKeydown","handleSelectContainerKeydown","onDropdownOptionClicked","toggleSelectOption","selectOption","onDropdownClose","onSingleFilterClick","onSingleFilterInput","onSingleFilterKeydown","handleSingleFilterKeydown","onMultipleFilterInput","openDropdown","onMultipleFilterKeydown","handleMultipleFilterKeydown","onClearSelectionClick","onDeselectOptionClick","deselectOption","open","close","clear","valueChanged","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","firstTime","updatePosition","filterInput","nativeElement","clearFilterInput","dropdown","moveHighlightedIntoView","selectHighlightedOption","deselectLast","sel","setMultipleFilterInput","which","altKey","preventDefault","selectionSpan","blur","width","offsetWidth","left","offsetLeft","top","offsetTop","offsetHeight","providers","encapsulation","ViewEncapsulation","None","ViewChild","SelectDropdownComponent","optionClicked","singleFilterClick","singleFilterInput","singleFilterKeydown","disabledColor","disabledTextColor","optionsReset","onOptionsWheel","handleOptionsWheel","onOptionMouseover","onOptionClick","getOptionStyle","background-color","color","optionsList","listHeight","itemIndex","itemHeight","itemTop","itemBottom","viewTop","div","atTop","atBottom","scrollHeight","deltaY","SelectModule","NgModule","declarations","exports","imports","CommonModule","FormsModule","SecurePipe","_ref","sanitizer","_latestValue","_latestReturnedValue","_subscription","_obj","_result","BehaviorSubject","_internalSubscription","ngOnDestroy","_dispose","transform","url","getfile","internalTransform","asyncTrasnform","previousUrl","sanitized","bypassSecurityTrustUrl","WrappedValue","wrap","_subscribe","_updateLatestValue","unsubscribe","async","markForCheck","Pipe","pure","ChangeDetectorRef","DomSanitizer","SharedModule","FileUploadComponent","renderer","uploading","fileUuid","pdfUploaded","formEntryMode","propagateChange","_dataSource","checkFileType","onFileChange","fileList","fileList_1","fileList_1_1","file","data","fileUpload","image","clearValue","pdfUrl","getPdfUrl","fetchFile","changingThisBreaksApplicationSecurity","search","Renderer2","RemoteFileUploadModule","WebcamModule","NgxFileUploaderModule","DatePickerComponent","locale","viewFormat","returnObject","onDatePickerCancel","onSelectDate","onDisplayMonths","onDisplayYears","displayYearsIndex","monthsShort","initValue","fullYearRange","currentYear","calendarDate","clone","startOf","year","displayYearRange","generateCalendar","prev","subtract","showMonthSelection","showYearSelection","add","selectDay","day","daysDifference","diff","selectedDay","parseToReturnObjectType","cancelDatePicker","selectMonth","month","selectYear","selectToday","today","clearPickDate","generateYears","years","_.chunk","currentMonth","dayNames","weekdaysShort","initDate","selectedDate","calendarDays","start","localeData","firstDayOfWeek","end","toDate","toJSON","toArray","toISOString","toObject","TimePickerComponent","showSecond","use12Hour","onSelectTime","onTimePickerCancel","hourFormat","time","initTime","increaseHour","decreaseHour","increaseMinute","decreaseMinute","increaseSecond","decreaseSecond","selectTime","cancelTimePicker","selectNow","clearTime","ModalComponent","onOverlayClick","closeModal","changeDetection","ChangeDetectionStrategy","OnPush","animations","MomentPipe","Moment","DateTimePickerComponent","showDate","showTime","showWeeks","weeks","onDateChange","showDatePicker","showTimePicker","weeksSelected","count","nextDate","setDate","getDate","setTime","toggleDatePicker","status","toggleTimePicker","modelValue","DateTimePickerModule","MY_FORMATS","parse","dateInput","monthYearLabel","dateA11yLabel","monthYearA11yLabel","NgxDateTimePickerComponent","selectedTime","loadInitial","onTimeSelect","setDateTime","onDateSelect","dateString","setCurrentTime","currentTime","weekSelect","dateToUse","nextWeekDate","nextWeekTime","selectionChange","getWeekPickerCssClass","getDatePickerCssClass","getTimePickerCssClass","newTime","newDateTime","dateTimeString","MAT_DATE_FORMATS","useValue","DateAdapter","useClass","MomentDateAdapter","NgxDateTimePickerModule","ReactiveFormsModule","MatDatepickerModule","MatFormFieldModule","MatNativeDateModule","MatInputModule","MatSelectModule","AfeNgSelectComponent","question_options","getChangingText","getData","resolveSelectedOption","selected_question_option","searchText","subject","searchOptions","mappedOptions","onValueChange","subjectOption","resolveSelectedValue","resetOptions","FormSchemaCompiler","compileFormSchema","formSchema","referencedComponents","refForms","getReferencedForms","_.isEmpty","placeHolders","getAllPlaceholderObjects","replaceAllPlaceholdersWithActualObjects","findSchemaByName","schemaArray","nameOfSchema","foundSchema","schema","getPageInSchemaByLabel","pageLabel","foundPage","pages","page","getSectionInSchemaByPageLabelBySectionLabel","sectionLabel","foundSection","sections","getQuestionByIdInSchema","questionId","isQuestionObjectWithId","isSchemaSubObjectExpandable","toExpand","getQuestionsArrayByQuestionIdInSchema","getQuestionsArrayByQuestionId","parent","object","returnedValue","objectKeys","_.includes","referencedObjects","extractPlaceholderObjects","subSchema","objectsArray","reference","fillPlaceholderObject","placeHolderObject","referenceObject","member","keyValReferencedForms","placeHoldersArray","placeHolder","referencedObject","getReferencedObject","removeExcludedQuestionsFromPlaceholder","removeObjectFromArray","indexOfObject","excludeQuestions","excludedQuestionId","questionsArray","referenceData","formSchemasLookupArray","referencedForms","alias","formName","TextInputQuestion","TextAreaInputQuestion","rows","SelectQuestion","UiSelectQuestion","DateQuestion","showWeeksAdder","MultiSelectQuestion","NestedQuestion","QuestionGroup","RepeatingQuestion","CheckBoxQuestion","TimeQuestion","FileUploadQuestion","TestOrderQuestion","orderType","selectableOrders","orderSettingUuid","rendering","DateValidationModel","MaxValidationModel","MinValidationModel","DecimalPointValidationModel","decimalPlace","setFailExpression","setMessage","setValuesAndExpressions","DummyDataSource","returnErrorOnNext","selectOptions","sampleData","concept","of","HistoricalEncounterDataService","registerEncounters","encounters","encStore","getValue","pathArray","getFirstValue","getAllObjects","getSingleObject","group_1","encounter","_transformEncounter","_.sortBy","reverse","putObject","getObject","answers","getAllValues","encounterDatetime","_.isNil","newpath","childObject","prevEncounter","location","patient","encounterType","provider","obs","processedObs","_transformObs","_.extend","obsRep","singleObs","_augumentObs","groupMembers","group_2","existing","toAdd","_.has","temp","apply","HistoricalHelperService","evaluate","expr","additionalScopevalues","HD","deps","evaluatePrecondition","additionalScope","histValue","QuestionFactory","historicalHelperService","createQuestionModel","toFormQuestionModel","toSelectQuestion","schemaQuestion","questionOptions","addValidators","copyProperties","addDisableOrHideProperty","addAlertProperty","addHistoricalExpressions","addCalculatorProperty","toNumericQuestion","toNumberQuestion","toDecimalQuestion","toDateQuestion","toEncounterDatetimeQuestion","weeksList","toTimeQuestion","toCheckBoxQuestion","toMultiCheckboxQuestion","renderType","toTextAreaQuestion","toTextQuestion","toFileUploadQuestion","toDrugQuestion","toProblemQuestion","toConceptAnswerSelect","toRepeatingQuestion","getChildrenQuestionModels","testOrder","toTestOrderQuestion","orders","toGroupQuestion","toPageQuestion","toSectionQuestion","getSchemaQuestions","toPersonAttributeQuestion","searchFunction","resolveFunction","toPersonAddressQuestion","toEncounterProviderQuestion","toFieldSetQuestion","toReturn","toEncounterLocationQuestion","toAmrsLocationsQuestion","toSiblingLocationsQuestion","toNonAmrsLocationsQuestion","listQuestions","getQuestions","foundArray","toModel","generateId","convertOldVersionComplexObsQuestionToNewVersion","converted","mainField","JSON","stringify","shownDateOptions","obsField","dateField","dateOptions","assign","mappings","source","destination","decimalModel","historicalExpression","origValue","historicalPrepopulateCondition","historicalPrepopulate","valDate","differenceInDays","Number","isInteger","allowedHistoricalValueAgeInDays","calculate","random","floor","String","fromCharCode","Form","questionFactory","existingOrders","_showErrors","_dataSourcesContainer","found","aChildNode","questionType","searchNodeByQuestionType","findNodesByQuestionId","nodeAsGroup","results","invalidControlNodes","c","markAsTouched","groupNode","updateHiddenDisabledStateForAllControls","_updateHiddenDisabledStateForAllControls","updateAlertsForAllControls","_updateAlertsForAllControls","FormFactory","controlService","questionFactroy","controlRelationsFactory","hd","createForm","createNode","parentNode","createArrayNode","createGroupNode","createLeafNode","controlModel","createNodeChildren","createArrayNodeChild","removeArrayNodeChild","factory","groupQuestion","group","nodeControl","nodeToRemove","controlIndexToRemove","ObsAdapterHelper","findObsAnswerToQuestion","obsArray","isObsNode","childQuestionsUuids","getChildQuestionsConceptUuids","isSubsetOf","getGroupMembersConceptUuids","obsWithGroupMembers","supersetArray","subsetArray","setSimpleObsNodeValue","obsToUse","initialValue","setNodeFormControlValue","setMultiselectObsNodeValue","obsUuids","obs_1","obs_1_1","setComplexObsNodeValue","valueField","setNodeValue","obsDatetime","setGroupObsNodeValue","setRepeatingGroupObsNodeValue","createdNode","getObsNodeType","answeringObs","multiselectObs","complexObs","groupObs","repeatingGroupObs","getSimpleObsPayload","voided","simpleNodeValueChanged","toOpenMrsDateTimeString","getComplexObsPayload","valuePayload","getObsNodePayload","areDatesEqual","payload","getMultiselectObsPayload","existingUuids","getGroupPayload","childrenPayload","groupPayload","getRepeatingGroupPayload","nodeAsArray","groupsUuidsAfterEditting","voidedGroup","groupNodePayoad","arrayNodePayload","simpleObs","groupedObs","repeatingGroupedObs","date1","date2","isSame","datetime","ObsValueAdapter","generateFormPayload","populateForm","setValues","forcegroup","setObsValue","_.find","setComplexObsValue","setRepeatingGroupValues","nodes_1","nodes_1_1","obsUuid","multiObs","getMultiselectValues","multiObs_1","multiObs_1_1","groupRepeatingObs","intersect","schemaQuestions","_.intersection","groups","getQuestionNodes","arrays","pages_1","pages_1_1","repeatingGroup","nodes_2","nodes_2_1","traverse","processGroup","obsPayload","getObsPayload","mappedMembers","Boolean","mapInitialGroup","current","mapModelGroup","processRepeatingGroups","initialValues","repeatingModel","_d","_e","deleted","leftOuterJoinArrays","newObs","groupConcept","newObsPayload","deletedObs","createGroupDeletedObs","deletedObs_1","deletedObs_1_1","createGroupNewObs","newObsPayload_1","newObsPayload_1_1","first","second","obj2","_.isEqual","newPayload","payload_1","payload_1_1","payload_2","payload_2_1","getExactTime","processObs","obsValue","multis","processMultiSelect","mappedInitial","mappedCurrent","processDeletedMultiSelectObs","processNewMultiSelectObs","updateOrVoidObs","processComplexObs","createdPayload","values_1","values_1_1","values_2","values_2_1","qs","rep","multiSelectObs","values_3","values_3_1","isObs","nodes_3","nodes_3_1","OrderValueAdapter","formOrderNodes","_setOrderProvider","_findTestOrderQuestionNodes","_createOrdersPayload","_getExistingOrders","_setOrderValues","providerUuid","orderNodes","deletedOrders","selectedOrders","orderNode","orderNodeValues","order","orderValue","payloadOrder","_createPayloadOrder","orderNumber","orderNodes_1","orderNodes_1_1","_getDeletedOrders","_addDeletedOrdersToPayload","orderUuid","dateVoided","auditInfo","orderNodes_2","orderNodes_2_1","_setOrderNodeValues","orderConcept","quesitonExtras","orderer","careSetting","deleteOrders","existingOrderConcept","orders_1","orders_1_1","childNode","formNode","EncounterAdapter","ordersAdapter","obsAdapter","populateNode","getEncounterNodes","firstProvider_1","generateNodePayload","setNonFilledPayloadMembers","dateValue","utcOffset","encounterRole","_getEncounterNodes","patientUuid","setPayloadPatientUuid","visitUuid","setPayloadVisitUuid","encounterTypeUuid","setPayloadEncounterTypeUuid","formUuid","setPayloadFormUuid","encounterUuid","setPayloadEncounterUuid","_isEncounterNode","PersonAttribuAdapter","getPersonAttributeNodes","isSimpleValue","attributeType","hydratedObject","_getPersonAttributesNodes","RemoteSelectComponent","items","loading","characters","change","dataFromSourceChanged","subscribeToDataSourceDataChanges","restoreSelectedValue","selectC","_.map","_.clone","_.uniqBy","canSearch","removed","RemoteSelectModule","AppointmentsOverviewComponent","showAppointments","loadingAppointments","errorLoadingAppointments","appointmentsLoaded","appointments","resetProperties","monthlyScheduleResourceService","locationUuid","userLocation","startDate","endDate","endOf","getMonthlySchedule","limit","locationUuids","department","groupBy","_data","weeklyMap","Map","scheduleDate","scheduledObj","scheduled","set","dayCount","EncounterViewerService","resolveSelectedValueFromSchema","answerUuid","answer","hasAnswer","answered","questionsAnswered","$answered","ans","isDate","convertTime","unixTimestamp","getFullYear","getMonth","hour","getHours","getMinutes","getSeconds","EncounterViewerComponent","encounterViewerService","_schema","enc","fileDataSource","remoteDataSource","customDataSource","questionAnswered","checkForColon","questionLabel","EncounterPdfViewerService","obsValueAdapter","subscribedAnswers","stack","getPages","remoteSelectsOnly","remoteAns","content","remoteQuestions","getSections","table","widths","headerRows","keepWithHeaderRows","layout","margin","hLineWidth","vLineWidth","hLineColor","vLineColor","resolve","answeredSections","answeredSections_1","answeredSections_1_1","getRemoteSectionData","answeredSections_2","answeredSections_2_1","getSectionData","appendResolvedAnswer","resolvedAnswer","bold","section_1","section_1_1","remoteAns_1","remoteAns_1_1","resolveValue","section_2","section_2_1","arrayElement","isUuid","arr_1","elem","generatePdfDefinition","docDefinition$","remoteSelects","combineLatest","docDefinition","pageSize","fontSize","banner","bannerItem","bannerLabel","confidential","footer","alignment","header","pageNumber","tableExample","tableHeader","fillColor","borderColor","tableSubheader","timestamp","defaultStyle","displayPdf","pdf","pdfMake","vfs","pdfMake.vfs","titleize","nid","birthdate","age","mui","mhn","currentPage","pageCount","toUTCString","win","createPdf","ISO_8601","isValid","str","charAt","substr","toLowerCase","providedIn","EncounterContainerComponent","encAdapter","encounterPdfViewerService","$form","$enc","QuestionControlComponent","innerValue","el","_.isNumber","noop","FilePreviewComponent","encounterService","resultsIsPdf","onTouchedCallback","onChangeCallback","onBlur","getUrl","RemoteAnswerComponent","EncounterViewerModule","HttpClientModule","CheckboxControlComponent","checked","selectOpt","CheckboxModule","NgxTimePickerComponent","formatTimeValue","timeValue","timeInputString","timeArray","dateArray","defaultFormat","NgxTimePickerModule","PersonAddressAdapter","getPersonAddressNodes","addressType","_getPersonAddressNodes","FormEntryModule","CollapseModule","MatIconModule","MatTabsModule","MatCardModule","TimeAgoPipe","FormBuilder","Pair","RenderingType"],"mappings":"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VC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU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","sourcesContent":["/*\nThis service checks if the debug mode on ng2-amrs\nhas been enabled by checking cookies.\nIf the debug mode has been enabled then\nit returns true and all fields are displayed\nfor use by testers\n*/\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DebugModeService {\n public cookieKey = 'formDebug';\n\n constructor() {}\n public debugEnabled(): boolean {\n // check if the hidefield\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { AfeFormControl } from '../../public_api';\nimport { AfeFormArray, AfeFormGroup } from '../../abstract-controls-extension';\n\n@Injectable()\nexport class FormErrorsService {\n // Observable string sources\n public static control: AfeFormControl | AfeFormArray | AfeFormGroup = null;\n public static tab: number = null;\n public announceErrorFieldSource = new Subject<string>();\n public announceErrorField$: Observable<\n any\n > = this.announceErrorFieldSource.asObservable();\n public announceErrorField(error: string) {\n this.announceErrorFieldSource.next(error);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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 __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\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\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { AbstractControl } from '@angular/forms';\n\n// import { CanHide } from '../form-entry/control-hiders-disablers/can-hide';\n// import { CanDisable } from '../form-entry/control-hiders-disablers/can-disable';\n\nexport class ControlRelation {\n private _control: AbstractControl;\n private _relatedTo: AbstractControl;\n private _lastUpdateValue: any;\n\n constructor(control: AbstractControl, relatedTo: AbstractControl) {\n this._control = control;\n this._relatedTo = relatedTo;\n this._registerForChangesFromRelatedControl();\n }\n\n get control(): AbstractControl {\n return this._control;\n }\n\n get relatedTo(): AbstractControl {\n return this._relatedTo;\n }\n\n get lastUpdateValue(): any {\n return this._lastUpdateValue;\n }\n\n updateControlBasedOnRelation(newValue: any): boolean {\n if (newValue !== this._lastUpdateValue) {\n this._lastUpdateValue = newValue;\n\n if ((this._control as any).updateCalculatedValue) {\n (this._control as any).updateCalculatedValue();\n }\n\n this._control.updateValueAndValidity();\n if ((this._control as any).updateHiddenState) {\n (this._control as any).updateHiddenState();\n }\n\n if ((this._control as any).updateDisabledState) {\n (this._control as any).updateDisabledState();\n }\n\n if ((this._control as any).updateAlert) {\n (this._control as any).updateAlert();\n }\n return true;\n }\n return false;\n }\n\n private _registerForChangesFromRelatedControl() {\n this._relatedTo.valueChanges.subscribe((value) => {\n this.updateControlBasedOnRelation(value);\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { ControlRelation } from './control-relation';\n\nexport class ControlRelations {\n private _relationFor: AbstractControl;\n private _relations: ControlRelation[];\n private _otherRelations: any = [];\n\n constructor(\n relationFor: AbstractControl,\n relatedTo?: AbstractControl | AbstractControl[]\n ) {\n this._relationFor = relationFor;\n this._relations = [];\n\n if (relatedTo) {\n this.addRelatedControls(relatedTo);\n }\n }\n\n get relationsFor(): AbstractControl {\n return this._relationFor;\n }\n\n get relations(): ControlRelation[] {\n return this._relations;\n }\n\n get otherRelations() {\n return this._otherRelations;\n }\n\n addRelatedControls(relatedTo: AbstractControl | AbstractControl[]) {\n if (relatedTo instanceof AbstractControl) {\n this.relations.push(new ControlRelation(this._relationFor, relatedTo));\n }\n\n if (relatedTo instanceof Array) {\n for (let i = 0; i < relatedTo.length; i++) {\n this.relations.push(\n new ControlRelation(this._relationFor, relatedTo[i])\n );\n }\n }\n }\n}\n","import { CanHide, Hider } from './can-hide';\nexport class HiderHelper {\n public hideControl(control: CanHide) {\n control.hidden = true;\n if (control.disable) {\n control.disable();\n }\n }\n\n public showControl(control: CanHide) {\n control.hidden = false;\n }\n\n public setHiderForControl(control: CanHide, hider: Hider) {\n control.hiders.push(hider);\n }\n\n public clearHidersForControl(control: CanHide) {\n control.hiders.splice(0);\n control.hidden = false;\n }\n\n public evaluateControlHiders(control: CanHide) {\n let hiddenValue = false;\n control.hiders.forEach((hider) => {\n hider.reEvaluateHidingExpression();\n if (hider.toHide === true) {\n hiddenValue = true;\n }\n });\n\n control.hidden = hiddenValue;\n if (control.hidden && control.disable) {\n control.disable();\n // control.setValue(null);\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanHide) {\n if (control.updateHiddenState) {\n control.valueChanges.subscribe((val) => {\n control.updateHiddenState();\n });\n }\n }\n}\n","import { CanGenerateAlert, Alert } from './can-generate-alert';\nexport class AlertHelper {\n public hideAlert(control: Alert) {\n control.shown = false;\n }\n\n public showAlert(control: Alert) {\n control.shown = true;\n }\n\n public setAlertsForControl(control: CanGenerateAlert, alert: Alert) {\n control.alerts.push(alert);\n }\n\n public clearAlertsForControl(control: CanGenerateAlert) {\n control.alerts.splice(0);\n control.alert = '';\n }\n\n public evaluateControlAlerts(control: CanGenerateAlert) {\n let messageValue = '';\n control.alerts.forEach((message) => {\n message.reEvaluateAlertExpression();\n if (message.shown === true) {\n messageValue = message.alertMessage;\n } else {\n messageValue = '';\n }\n });\n\n control.alert = messageValue;\n // if (control.message && control.disable) {\n // control.disable();\n // // control.setValue(null);\n // }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanGenerateAlert) {\n if (control.updateAlert) {\n control.valueChanges.subscribe((val) => {\n control.updateAlert();\n });\n }\n }\n}\n","import { CanDisable, Disabler } from './can-disable';\nexport class DisablerHelper {\n public setDisablerForControl(control: CanDisable, disabler: Disabler) {\n control.disablers.push(disabler);\n }\n\n public clearDisablersForControl(control: CanDisable) {\n control.disablers.splice(0);\n control.disable();\n }\n\n public evaluateControlDisablers(control: CanDisable) {\n let toDisable = false;\n control.disablers.forEach((hider) => {\n hider.reEvaluateDisablingExpression();\n if (hider.toDisable === true) {\n toDisable = true;\n }\n });\n\n // console.log('Control', control);\n\n if (toDisable) {\n control.disable();\n } else {\n control.enable();\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanDisable) {\n if (control.updateDisabledState) {\n control.valueChanges.subscribe((val) => {\n control.updateDisabledState();\n });\n }\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { FormFactory } from './form.factory';\nimport { Form } from './form';\n\n// import { AfeControlType, AfeFormArray, AfeFormGroup, AfeFormControl } from '../../abstract-controls-extension';\nimport { QuestionBase, RepeatingQuestion } from '../question-models/models';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nexport interface ChildNodeCreatedListener {\n addChildNodeCreatedListener(func: any);\n\n fireChildNodeCreatedListener(node: GroupNode);\n}\n\nexport type CreateArrayChildNodeFunction = (\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n) => GroupNode;\n\nexport interface RemoveArrayChildNodeFunction {\n (index: number, node: ArrayNode);\n}\n\nexport class NodeBase {\n public children?: any;\n private _control: AfeFormControl | AfeFormArray | AfeFormGroup;\n private _questionModel: QuestionBase;\n private _form: Form;\n private _path: string;\n\n public initialValue: any;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n this._control = control;\n this._questionModel = question;\n this._form = form;\n this._path = parentPath ? parentPath + '.' + question.key : question.key;\n }\n\n public get question(): QuestionBase {\n return this._questionModel;\n }\n\n public get control(): AfeFormControl | AfeFormArray | AfeFormGroup {\n return this._control;\n }\n\n public get form(): Form {\n return this._form;\n }\n\n public get path(): string {\n return this._path;\n }\n removeAt(index: number) {}\n\n createChildNode() {}\n removeChildNode() {}\n}\n\nexport class LeafNode extends NodeBase {\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n }\n}\n\nexport class GroupNode extends NodeBase {\n private _children: any;\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = {};\n }\n\n public get children(): any {\n return this._children;\n }\n\n public setChild(key: string, node: NodeBase) {\n this.children[key] = node;\n }\n}\n\nexport class ArrayNode extends NodeBase implements ChildNodeCreatedListener {\n private childNodeCreatedEvents: any[] = [];\n private _children: GroupNode[];\n public createChildFunc: CreateArrayChildNodeFunction;\n public removeChildFunc: RemoveArrayChildNodeFunction;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n private formFactory?: FormFactory,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = [];\n this.childNodeCreatedEvents = [];\n }\n\n public get children(): GroupNode[] {\n return this._children;\n }\n\n public createChildNode(): GroupNode {\n if (this.createChildFunc) {\n const g: GroupNode = this.createChildFunc(\n this.question as RepeatingQuestion,\n this,\n this.formFactory\n );\n this.fireChildNodeCreatedListener(g);\n return g;\n }\n return null;\n }\n\n public removeAt(index: number) {\n const removePrompt = confirm('Are you sure you want to remove?');\n if (removePrompt) {\n if (this.removeChildFunc) {\n this.removeChildFunc(index, this);\n }\n }\n }\n\n addChildNodeCreatedListener(func: any) {\n this.childNodeCreatedEvents.push(func);\n }\n\n fireChildNodeCreatedListener(node: GroupNode) {\n for (let i = 0; i < this.childNodeCreatedEvents.length; i++) {\n const func: any = this.childNodeCreatedEvents[i];\n func(node);\n }\n }\n}\n","export class ValidationModel {\n type: string;\n\n message: string;\n\n constructor(validations: any) {\n this.type = validations.type;\n this.message = validations.message || null;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class JsExpressionValidationModel extends ValidationModel {\n failsWhenExpression: string;\n\n constructor(validations: any) {\n super(validations);\n this.failsWhenExpression = validations.failsWhenExpression;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class ConditionalValidationModel extends ValidationModel {\n referenceQuestionId: string;\n referenceQuestionAnswers: any;\n\n constructor(validations: any) {\n super(validations);\n this.referenceQuestionId = validations.referenceQuestionId;\n this.referenceQuestionAnswers = validations.referenceQuestionAnswers;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// import { ControlRelation } from '../../change-tracking/control-relation';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\nimport { Form } from './form';\n\n@Injectable()\nexport class ControlRelationsFactory {\n constructor() {}\n\n buildRelations(rootNode: GroupNode) {\n const controlsStore: any = this.mapControlIds(rootNode, {});\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key)) {\n const nodeBase: NodeBase = controlsStore[key];\n\n this.setRelations(controlsStore, nodeBase);\n }\n }\n }\n\n buildArrayNodeRelations(node: GroupNode) {\n const form: Form = node.form;\n\n if (!form) {\n return;\n }\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for controls in the same array\n this.buildRelations(node);\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const child: NodeBase = rootControlsStore[key];\n\n if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n this.setRelations(arrayControlStore, child);\n }\n }\n }\n }\n\n // define relations for controls outside the group to controls in this group\n this.createRelationsToArrayControls(node);\n\n // fire relations\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const child: NodeBase = arrayControlStore[id];\n const control: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n control.updateHiddenState();\n control.updateAlert();\n }\n }\n }\n\n createRelationsToArrayControls(node: GroupNode) {\n const form: Form = node.form;\n\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n // loop through form controls\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const rChild: NodeBase = rootControlsStore[key];\n\n const parentNodePath = node.path.substring(\n 0,\n node.path.lastIndexOf('.')\n );\n\n if (rChild.path.indexOf(parentNodePath + '.') === -1) {\n // loop through controls in the array group\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const aChild: NodeBase = arrayControlStore[id];\n const aChildId = aChild.question.key;\n if (this.hasRelation(aChildId, rChild.question)) {\n const nodes: Array<NodeBase> = node.form.searchNodeByPath(\n rootNode,\n parentNodePath,\n []\n );\n if (nodes.length > 0) {\n const an = nodes[0] as ArrayNode;\n const rootControl = rChild.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (\n rootControl.controlRelations.otherRelations.indexOf(an) ===\n -1\n ) {\n rootControl.controlRelations.otherRelations.push(an);\n }\n\n (aChild.control as\n | AfeFormControl\n | AfeFormArray).addValueChangeListener((value) => {\n if ((rootControl as any).updateCalculatedValue) {\n (rootControl as any).updateCalculatedValue();\n }\n\n rootControl.updateValueAndValidity();\n if ((rootControl as any).updateHiddenState) {\n (rootControl as any).updateHiddenState();\n }\n\n if ((rootControl as any).updateAlert) {\n (rootControl as any).updateAlert();\n }\n\n if ((rootControl as any).updateDisabledState) {\n (rootControl as any).updateDisabledState();\n }\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n getRelationsForControl(\n id,\n node: GroupNode\n ): Array<AfeFormControl | AfeFormArray> {\n const relations: Array<AfeFormControl | AfeFormArray> = new Array<\n AfeFormControl | AfeFormArray\n >();\n\n const nodeBaseArray: Array<NodeBase> = node.form.searchNodeByQuestionId(id);\n\n if (nodeBaseArray.length > 0) {\n const nodeBase: NodeBase = nodeBaseArray[0];\n\n const controlList: any = this.mapControlIds(node, {});\n\n for (const key in controlList) {\n if (controlList.hasOwnProperty(key)) {\n if (\n this.hasRelation(controlList[key].question.key, nodeBase.question)\n ) {\n relations.push(controlList[key].control);\n }\n }\n }\n }\n return relations;\n }\n\n mapControlIds(node: GroupNode, controlsStore: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.mapControlIds(child, controlsStore);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n } else if (child instanceof ArrayNode) {\n const questionBase: QuestionBase = (child as ArrayNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n }\n }\n }\n\n return controlsStore;\n }\n\n setRelations(controlsStore: any, nodeBase: NodeBase) {\n const questionBase: QuestionBase = nodeBase.question;\n\n const id = questionBase.key;\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key) && key !== id) {\n const node: NodeBase = controlsStore[key];\n const question: QuestionBase = node.question;\n\n if (this.hasRelation(id, question, nodeBase)) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n\n // add conditional required and conditional answered relations\n if (typeof question.required === 'object') {\n const required: any = question.required;\n\n if (required.type === 'conditionalRequired') {\n if (required.referenceQuestionId === id) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n }\n }\n }\n }\n }\n\n hasRelation(id: string, questionBase: QuestionBase, nodeBase?: NodeBase) {\n let hasRelation = false;\n\n if (questionBase.validators && questionBase.validators.length > 0) {\n questionBase.validators.forEach((element) => {\n if (element instanceof JsExpressionValidationModel) {\n const model: JsExpressionValidationModel = element as JsExpressionValidationModel;\n\n const failsWhenExpression: string = model.failsWhenExpression;\n if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (\n element instanceof ConditionalValidationModel &&\n element.type === 'conditionalAnswered' &&\n element.referenceQuestionId === id\n ) {\n hasRelation = true;\n }\n });\n }\n\n // add hiders and disablers relations\n if (!hasRelation) {\n if (typeof questionBase.hide === 'string') {\n const hide: string = questionBase.hide as string;\n\n if (hide.length > 0 && hide.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (typeof questionBase.hide === 'object') {\n const hideObj: any = questionBase.hide;\n\n if (hideObj.field === id) {\n hasRelation = true;\n }\n }\n\n if (questionBase.alert && typeof questionBase.alert === 'object') {\n hasRelation = true;\n }\n\n if (typeof questionBase.disable === 'string') {\n const disable: string = questionBase.disable as string;\n\n if (disable.length > 0 && disable.indexOf(id) !== -1) {\n hasRelation = true;\n }\n }\n }\n\n // add calculate expressions relations\n if (\n !hasRelation &&\n questionBase.calculateExpression &&\n questionBase.calculateExpression.length > 0 &&\n questionBase.calculateExpression.indexOf(id) !== -1\n ) {\n hasRelation = true;\n }\n\n return hasRelation;\n }\n\n addRelationToControl(\n control: AfeFormControl | AfeFormArray,\n related: AfeFormControl | AfeFormArray\n ) {\n // let relations = control.controlRelations.relations;\n //\n // let hasRelation = false;\n //\n // relations.forEach(element => {\n //\n // let controlRelation: ControlRelation = element as ControlRelation;\n //\n // let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;\n //\n // if ( control.uuid !== undefined && control.uuid === relation.uuid ) {\n // hasRelation = true;\n // }\n // });\n\n // if ( !hasRelation ) {\n control.controlRelations.addRelatedControls(related);\n // }\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension/control-extensions';\nimport { ArrayNode } from '../form-factory/form-node';\nimport { ControlRelationsFactory } from '../form-factory/control-relations.factory';\nimport { Form } from '../form-factory/form';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nexport class ExpressionRunner {\n getRunnable(\n expression: string,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n helper: any,\n dataDependencies: any,\n form?: Form\n ): Runnable {\n const runner = this;\n const runnable: Runnable = {\n run: () => {\n /* tslint:disable */\n let scope: any = {};\n if (control.uuid) {\n scope[control.uuid] = control.value;\n }\n window['moment'] = moment;\n // scope.moment = moment;\n scope['myValue'] = control.value;\n runner.getControlRelationValueString(control, scope);\n runner.getHelperMethods(helper, scope);\n runner.getDataDependencies(dataDependencies, scope);\n\n if (form) {\n // console.error('Form defined', form);\n runner.getDataDependencies(\n form.dataSourcesContainer.dataSources,\n scope\n );\n }\n\n let paramList = '';\n let argList = '';\n for (let o in scope) {\n paramList = paramList === '' ? paramList + o : paramList + ',' + o;\n argList =\n argList === ''\n ? argList + \"scope['\" + o + \"']\"\n : argList + \",scope['\" + o + \"']\";\n }\n\n // prevent more than one return statements\n if (expression.indexOf('return') === -1) {\n expression = '\"return ' + expression + '\"';\n }\n\n let funcDeclarationCode =\n 'var afeDynamicFunc = new Function(\"' +\n paramList +\n '\", ' +\n expression +\n ');';\n let funcCallCode =\n 'afeDynamicFunc.call(this ' +\n (argList === '' ? '' : ',' + argList) +\n ');';\n\n try {\n if (Object.keys(scope).indexOf('undefined') >= 0) {\n console.warn('Missing reference found', expression, scope);\n return false;\n }\n //console.info('results: ', expression, eval(funcDeclarationCode + funcCallCode));\n return eval(funcDeclarationCode + funcCallCode);\n } catch (e) {\n // if (window['error_count']) {\n // window['error_count'] = window['error_count'] + 1;\n // } else {\n // window['error_count'] = 1;\n // }\n // console.error(window['error_count'] + ' Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n // console.error('Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n\n // Uncomment the line above during debugging\n // console.error('Error running expression:' + expression, scope);\n\n return false;\n }\n /* tslint:enable */\n }\n };\n return runnable;\n }\n\n private getControlRelationValueString(\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n scope: any\n ) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n if (relation.relatedTo) {\n const related = relation.relatedTo as any;\n const relatedAsControl = relation.relatedTo as AbstractControl;\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n scope[related.uuid] = relation.relatedTo.value;\n } else {\n scope[related.uuid] =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.otherRelations &&\n control.controlRelations.otherRelations.length > 0\n ) {\n control.controlRelations.otherRelations.forEach((node) => {\n if (node instanceof ArrayNode) {\n const arrayNode: ArrayNode = node as ArrayNode;\n const uuid = control.uuid;\n\n const controlRelationsFactory: ControlRelationsFactory = new ControlRelationsFactory();\n let relationsForControl: Array<AfeFormControl | AfeFormArray> = [];\n // get all related controls\n arrayNode.children.forEach((child) => {\n relationsForControl = relationsForControl.concat(\n controlRelationsFactory.getRelationsForControl(uuid, child)\n );\n });\n\n this.setControlArrayValues(\n control as AfeFormControl | AfeFormArray,\n relationsForControl,\n scope\n );\n }\n });\n }\n }\n\n private setControlArrayValues(\n control: AfeFormControl | AfeFormArray,\n relationsForControl: Array<AfeFormControl | AfeFormArray>,\n scope: any\n ) {\n const keys: Array<string> = this._getFormControlKeys(relationsForControl);\n\n keys.forEach((key) => {\n const values: any = this._getValuesForKey(key, relationsForControl);\n scope[key] = values;\n });\n }\n\n private _getFormControlKeys(\n array: Array<AfeFormControl | AfeFormArray>\n ): Array<string> {\n const keys: Array<string> = [];\n array.forEach((control) => {\n if (keys.indexOf(control.uuid) === -1) {\n keys.push(control.uuid);\n }\n });\n\n return keys;\n }\n\n private _getValuesForKey(\n key: string,\n array: Array<AfeFormControl | AfeFormArray>\n ): any {\n const values: any = [];\n\n array.forEach((control) => {\n if (control.uuid === key) {\n values.push(control.value);\n }\n });\n\n return values;\n }\n\n private getHelperMethods(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n\n private getDataDependencies(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n}\n\nexport interface Runnable {\n run();\n}\n","import {\n FormControl,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControlOptions\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { CanCalculate } from '../form-entry/control-calculators/can-calculate';\nimport { ExpressionRunner } from '../form-entry/expression-runner/expression-runner';\n\nclass AfeFormControl\n extends FormControl\n implements\n CanHide,\n CanDisable,\n CanCalculate,\n CanGenerateAlert,\n ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n public uuid: string;\n public pathFromRoot: string;\n\n hidden = false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n calculator: Function;\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n constructor(\n formState?: any,\n validator?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(formState, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue('');\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n setCalculatorFn(newCalculator: Function) {\n this.calculator = newCalculator;\n }\n\n updateCalculatedValue() {\n if (this.calculator) {\n const _val = this.calculator.call(ExpressionRunner, {});\n this.setValue(_val);\n }\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\nexport { AfeFormControl };\n","import {\n FormGroup,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\n\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\n\nexport class AfeFormGroup\n extends FormGroup\n implements CanHide, CanDisable, CanGenerateAlert {\n private _controlRelations: ControlRelations;\n\n public uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue({});\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","import {\n FormArray,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\n\nexport class AfeFormArray\n extends FormArray\n implements CanHide, CanDisable, CanGenerateAlert, ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n private _uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n\n constructor(\n controls: AbstractControl[],\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.alerts = [];\n this.disablers = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get uuid(): string {\n return this._uuid;\n }\n set uuid(val: string) {\n this._uuid = val;\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue([]);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (this.alerts.length > 0) {\n this.updateAlert();\n }\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","export enum AfeControlType {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n None\n}\n","import { BaseOptions } from './interfaces/base-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\nimport { ValidationModel } from './validation.model';\n\nexport class QuestionBase implements BaseOptions {\n type: string;\n order?: number;\n questionOptions?: any;\n questions?: any;\n placeholder?: any;\n hidden?: any;\n showTime?: any;\n showWeek?: any;\n showDate?: boolean;\n historicalDisplay?: any;\n rows?: any;\n showWeeksAdder?: any;\n key: string;\n alert?: any;\n\n label?: string;\n renderingType: string;\n\n defaultValue?: any;\n originalValue?: any;\n enableHistoricalValue?: boolean;\n showHistoricalValueDate?: boolean;\n historicalDataValue?: any;\n extras?: any;\n dataSource?: string;\n dataSourceOptions?: any;\n\n controlType?: AfeControlType;\n validators?: Array<ValidationModel>;\n required?: boolean;\n hide?: string | boolean;\n disable?: string | boolean;\n calculateExpression?: string;\n options?: any;\n maxTime?: string;\n minTime?: string;\n\n constructor(options: BaseOptions) {\n this.defaultValue = options.defaultValue;\n this.originalValue = options.originalValue;\n this.extras = options.extras;\n this.renderingType = options.type;\n this.key = options.key || '';\n this.label = options.label || '';\n this.validators = options.validators || [];\n this.required = options.required;\n this.hide = options.hide;\n this.disable = options.disable;\n this.alert = options.alert;\n this.historicalDataValue = options.historicalDataValue;\n this.calculateExpression = options.calculateExpression;\n }\n\n setHistoricalValue(v: boolean) {\n this.enableHistoricalValue = v;\n }\n showHistoricalEncounterDate(v?: boolean) {\n this.showHistoricalValueDate = v === undefined ? true : v;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalRequiredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let isRequired: boolean;\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n relationValue = relation.relatedTo.value;\n } else {\n relationValue =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) !== -1\n ) {\n isRequired = true;\n }\n\n if (isRequired && !value) {\n return { conditional_required: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalAnsweredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let successCondition: any = true;\n\n if (value) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (Array.isArray(relatedAsControl.value)) {\n relationValue = relatedAsControl.value;\n } else {\n relationValue =\n relatedAsControl.value &&\n typeof relatedAsControl.value === 'object' &&\n relatedAsControl.value.value\n ? relatedAsControl.value.value\n : relatedAsControl.value;\n }\n }\n\n if (!relationValue) {\n successCondition = false;\n } else if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) === -1\n ) {\n successCondition = false;\n }\n });\n }\n }\n\n if (!successCondition) {\n return { conditional_answered: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class RequiredValidator {\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value: any = control.value;\n const isEmpty: boolean =\n value == null || (typeof value === 'string' && value.length === 0);\n\n return isEmpty ? { required: true } : null;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class DateValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n\n if (value && value.length !== 0) {\n // YYYY-MM-DD or DD-MM-YYYY\n const test: boolean = !/Invalid|NaN/.test(new Date(value).toString());\n\n return test ? null : { date: true };\n } else {\n return null;\n }\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MinValidator {\n validate(min: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v >= min\n ? null\n : { min: { requiredValue: min, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MaxValidator {\n validate(max: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v <= max\n ? null\n : { max: { requiredValue: max, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MinDateValidator {\n validate(min: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() < min.getTime()\n ? { mindate: { requiredDate: min, actualDate: newDate } }\n : null;\n } else {\n return { mindate: { requiredDate: min } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MaxDateValidator {\n validate(max: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() > max.getTime()\n ? { maxdate: { requiredDate: max, actualDate: newDate } }\n : null;\n } else {\n return { maxdate: { requiredDate: max } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class FutureDateRestrictionValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n const now: Date = new Date();\n\n if (value && value.length !== 0) {\n if (!new DateValidator().validate(value)) {\n const d: Date = new Date(value);\n\n return d.getTime() > now.getTime()\n ? { futureDateRestriction: true }\n : null;\n }\n }\n\n return null;\n }\n}\n","import * as _ from 'lodash';\nexport class JsExpressionHelper {\n calcBMI(height, weight) {\n let r;\n if (height && weight) {\n r = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n return height && weight ? parseFloat(r) : null;\n }\n\n calcBSA(height: number, weight: number) {\n let result;\n if (height && weight) {\n result = Math.sqrt((height * weight) / 3600).toFixed(2);\n }\n return height && weight ? parseFloat(result) : null;\n }\n\n calcBMIForAgeZscore(bmiForAgeRef, height, weight) {\n let bmi;\n const maxAgeInDays = 1856;\n if (height && weight) {\n bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n const refSectionObject = _.first(bmiForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (bmi < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= bmi) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return bmi && refSectionObject ? formattedSDValue : null;\n }\n calcWeightForHeightZscore(weightForHeightRef, height, weight) {\n let refSection;\n let formattedSDValue;\n if (height && weight) {\n height = parseFloat(height).toFixed(1);\n }\n const standardHeightMin = 45;\n const standardMaxHeight = 110;\n if (height < standardHeightMin || height > standardMaxHeight) {\n formattedSDValue = -4;\n } else {\n refSection = _.filter(weightForHeightRef, (refObject) => {\n return parseFloat(refObject['Length']).toFixed(1) === height;\n });\n }\n\n const refSectionObject = _.first(refSection);\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (weight < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= weight) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight ? formattedSDValue : null;\n }\n\n calcHeightForAgeZscore(heightForAgeRef, height, weight) {\n const refSectionObject = _.first(heightForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (height < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= height) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight && refSectionObject ? formattedSDValue : null;\n }\n\n isEmpty(val) {\n if (\n val === undefined ||\n val === null ||\n val === '' ||\n val === 'null' ||\n val === 'undefined'\n ) {\n return true;\n }\n\n if (Array.isArray(val) && val.length === 0) {\n return true;\n }\n return false;\n }\n\n arrayContains(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n\n let contains = true;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) === -1) {\n contains = false;\n }\n }\n\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n extractRepeatingGroupValues(key, array) {\n const values = array.map(function (item) {\n return item[key];\n });\n return values;\n }\n formatDate(value, format, offset) {\n format = format || 'yyyy-MM-dd';\n offset = offset || '+0300';\n\n if (!(value instanceof Date)) {\n value = new Date(value);\n if (value === null || value === undefined) {\n throw new Error(\n 'DateFormatException: value passed ' + 'is not a valid date'\n );\n }\n }\n\n return value; // TODO implement this\n // return $filter('date')(value, format, offset);\n }\n\n arrayContainsAny(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n let contains = false;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) !== -1) {\n contains = true;\n }\n }\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n\n get helperFunctions() {\n const helper = this;\n return {\n arrayContainsAny: helper.arrayContainsAny,\n calcBMI: helper.calcBMI,\n calcBMIForAgeZscore: helper.calcBMIForAgeZscore,\n calcWeightForHeightZscore: helper.calcWeightForHeightZscore,\n calcHeightForAgeZscore: helper.calcHeightForAgeZscore,\n isEmpty: helper.isEmpty,\n arrayContains: helper.arrayContains,\n extractRepeatingGroupValues: helper.extractRepeatingGroupValues\n };\n }\n}\n","export class Validations {\n public static JSExpressionValidatorsEnabled = false;\n\n constructor() {}\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ExpressionRunner } from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { Validations } from './validations';\n\nexport class JsExpressionValidator {\n constructor() {}\n\n validate(model: JsExpressionValidationModel, form?: any) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n if (!Validations.JSExpressionValidatorsEnabled) {\n return null;\n }\n\n const expression = model.failsWhenExpression;\n const helper = new JsExpressionHelper();\n const dataDependencies = {};\n\n const helperFunctions = helper.helperFunctions;\n const runnable = new ExpressionRunner().getRunnable(\n expression,\n control,\n helperFunctions,\n dataDependencies,\n form\n );\n\n if (runnable.run()) {\n return {\n js_expression: { expression: expression, message: model.message }\n };\n }\n\n return null;\n };\n }\n}\n","export class Messages {\n public static readonly REQUIRED_FIELD_MSG = 'This field is required!';\n\n public static readonly INVALID_DATE_MSG = 'Provided date is invalid!';\n\n public static readonly FUTURE_DATE_RESTRICTION_MSG =\n 'Future date is not allowed!';\n\n public static readonly MIN_LENGTH_MSG = 'Min Length should be {minLength}';\n\n public static readonly MAX_LENGTH_MSG = 'Max Length should be {maxLength}';\n\n public static readonly MAX_DATE_MSG = 'Max Date should be {maxDate}';\n\n public static readonly MIN_DATE_MSG = 'Min Date should be {minDate}';\n\n public static readonly MAX_MSG = 'Max value should be {max}';\n\n public static readonly MIN_MSG = 'Min value should be {min}';\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport * as _ from 'lodash';\n\nimport { ConditionalRequiredValidator } from '../validators/conditional-required.validator';\nimport { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';\nimport { RequiredValidator } from '../validators/required.validator';\nimport { DateValidator } from '../validators/date.validator';\nimport { MinValidator } from '../validators/min.validator';\nimport { MaxValidator } from '../validators/max.validator';\nimport { MinDateValidator } from '../validators/min-date.validator';\nimport { MaxDateValidator } from '../validators/max-date.validator';\nimport { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';\nimport { JsExpressionValidator } from '../validators/js-expression.validator';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Messages } from '../utils/messages';\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\n@Injectable()\nexport class ValidationFactory {\n constructor() {}\n\n getValidators(question: QuestionBase, form?: any) {\n const list: Array<any> = [];\n\n if (question.validators) {\n _.forEach(question.validators, (validator: ValidationModel) => {\n switch (validator.type) {\n case 'date':\n list.push(this.dateValidator);\n const allowFutureDates: boolean = (<DateValidationModel>validator)\n .allowFutureDates;\n\n if (!allowFutureDates) {\n list.push(this.futureDateRestrictionValidator);\n }\n break;\n case 'js_expression':\n list.push(\n this.jsExpressionValidator.validate(\n <JsExpressionValidationModel>validator,\n form\n )\n );\n break;\n case 'max':\n list.push(\n this.getMaxValueValidator((<MaxValidationModel>validator).max)\n );\n break;\n case 'min':\n list.push(\n this.getMinValueValidator((<MinValidationModel>validator).min)\n );\n break;\n case 'conditionalRequired':\n list.push(\n this.conditionalRequiredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n case 'conditionalAnswered':\n list.push(\n this.conditionalAnsweredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n }\n });\n }\n\n if (\n question.required &&\n typeof question.required === 'string' &&\n question.required === 'true'\n ) {\n list.push(this.requiredValidator);\n } else {\n // TODO - handle custom required validator\n }\n\n return list;\n }\n\n get conditionalRequiredValidator(): ConditionalRequiredValidator {\n return new ConditionalRequiredValidator();\n }\n\n get conditionalAnsweredValidator(): ConditionalAnsweredValidator {\n return new ConditionalAnsweredValidator();\n }\n\n get requiredValidator(): any {\n return new RequiredValidator().validate;\n }\n\n get dateValidator(): any {\n return new DateValidator().validate;\n }\n\n get futureDateRestrictionValidator(): any {\n return new FutureDateRestrictionValidator().validate;\n }\n\n get maxDateValidator(): any {\n return new MaxDateValidator().validate;\n }\n\n get minDateValidator(): any {\n return new MinDateValidator().validate;\n }\n\n get minLengthValidator(): any {\n return Validators.minLength;\n }\n\n get maxLengthValidator() {\n return Validators.maxLength;\n }\n\n public getMinValueValidator(min: number): any {\n return new MinValidator().validate(min);\n }\n\n public getMaxValueValidator(max: number): any {\n return new MaxValidator().validate(max);\n }\n\n get jsExpressionValidator() {\n return new JsExpressionValidator();\n }\n\n public errors(errors: any, question: QuestionBase): Array<string> {\n const messages: Array<string> = [];\n\n for (const property in errors) {\n if (errors.hasOwnProperty(property)) {\n switch (property) {\n case 'required':\n messages.push(Messages.REQUIRED_FIELD_MSG);\n break;\n case 'date':\n messages.push(Messages.INVALID_DATE_MSG);\n break;\n case 'futureDateRestriction':\n messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);\n break;\n case 'minlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{minLength}',\n errors.minlength.requiredLength\n )\n );\n break;\n case 'maxlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{maxLength}',\n errors.maxlength.requiredLength\n )\n );\n break;\n case 'maxdate':\n messages.push(\n Messages.MAX_DATE_MSG.replace(\n '{maxDate}',\n errors.maxdate.requiredDate\n )\n );\n break;\n case 'mindate':\n messages.push(\n Messages.MIN_DATE_MSG.replace(\n '{minDate}',\n errors.mindate.requiredDate\n )\n );\n break;\n case 'max':\n messages.push(\n Messages.MAX_MSG.replace('{max}', errors.max.requiredValue)\n );\n break;\n case 'min':\n messages.push(\n Messages.MIN_MSG.replace('{min}', errors.min.requiredValue)\n );\n break;\n case 'js_expression':\n messages.push(errors['js_expression'].message);\n break;\n case 'conditional_required':\n messages.push(errors['conditional_required'].message);\n break;\n case 'conditional_answered':\n messages.push(errors['conditional_answered'].message);\n break;\n }\n }\n }\n\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Disabler } from '../control-hiders-disablers/can-disable';\nimport { Hider } from '../control-hiders-disablers/can-hide';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n// Add ability to display all fields for debugging\nimport { DebugModeService } from './../services/debug-mode.service';\n\n@Injectable()\nexport class HidersDisablersFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper,\n private _debugModeService: DebugModeService\n ) {}\n\n getJsExpressionDisabler(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Disabler {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.disable as string,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const disabler: Disabler = {\n toDisable: false,\n disableWhenExpression: question.disable as string,\n reEvaluateDisablingExpression: () => {\n const result = runnable.run();\n disabler.toDisable = result;\n }\n };\n return disabler;\n }\n\n getJsExpressionHider(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Hider {\n const hide: any = question.hide;\n const value: string =\n typeof hide === 'object'\n ? this.convertHideObjectToString(hide)\n : (question.hide as string);\n\n // check if debugging has been enabled\n\n const debugEnabled = this._debugModeService.debugEnabled();\n\n const runnable: Runnable = this.expressionRunner.getRunnable(\n value,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n\n const hider: Hider = {\n toHide: false,\n hideWhenExpression: value,\n reEvaluateHidingExpression: () => {\n /* if debug is enabled then hiders to be false\n else run the normal eveluator i.e runnable.run()\n */\n if (debugEnabled === true) {\n hider.toHide = false;\n } else {\n hider.toHide = runnable.run();\n }\n }\n };\n return hider;\n }\n\n convertHideObjectToString(hide: any) {\n if (hide.value instanceof Array) {\n const arrayStr: string = \"'\" + hide.value.join(\"','\") + \"'\";\n const exp = '!arrayContains([' + arrayStr + '],' + hide.field + ')';\n return exp;\n }\n\n return '';\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Alert } from '../control-alerts/can-generate-alert';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n\n@Injectable()\nexport class AlertsFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper\n ) {}\n getJsExpressionshowAlert(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Alert {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.alert.alertWhenExpression,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const showAlert: Alert = {\n shown: false,\n alertWhenExpression: question.alert.alertWhenExpression,\n alertMessage: question.alert.message,\n reEvaluateAlertExpression: () => {\n const result = runnable.run();\n showAlert.shown = result;\n }\n };\n return showAlert;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n AfeControlType\n} from '../../abstract-controls-extension';\n\nimport { NestedQuestion } from '../question-models/interfaces/nested-questions';\n\nimport { QuestionBase } from '../question-models/question-base';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { HidersDisablersFactory } from './hiders-disablers.factory';\nimport { AlertsFactory } from './show-messages.factory';\nimport { Form } from './form';\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\n\n@Injectable()\nexport class FormControlService {\n controls = [];\n validationFactory: ValidationFactory;\n hidersDisablersFactory: HidersDisablersFactory;\n\n constructor(\n validationFactory: ValidationFactory,\n hidersDisablersFactory: HidersDisablersFactory,\n private alertsFactory: AlertsFactory\n ) {\n this.validationFactory = validationFactory;\n this.hidersDisablersFactory = hidersDisablersFactory;\n }\n\n generateControlModel(\n questionModel: QuestionBase | NestedQuestion,\n parentControl: AfeFormGroup,\n generateChildren: boolean,\n form?: Form\n ): AfeFormControl | AfeFormArray | AfeFormGroup {\n if (questionModel instanceof QuestionBase) {\n if (questionModel.controlType === AfeControlType.AfeFormArray) {\n return this.generateFormArray(questionModel, parentControl, form);\n }\n if (questionModel.controlType === AfeControlType.AfeFormGroup) {\n return this.generateFormGroupModel(\n questionModel,\n generateChildren,\n parentControl,\n form\n );\n }\n\n if (questionModel.controlType === AfeControlType.AfeFormControl) {\n return this.generateFormControl(questionModel, parentControl, form);\n }\n }\n return null;\n }\n\n generateFormGroupModel(\n question: QuestionBase,\n generateChildren: boolean,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormGroup {\n const formGroup = new AfeFormGroup({});\n this.wireHidersDisablers(question, formGroup, form);\n this.wireAlerts(question, formGroup, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formGroup);\n }\n\n const asGroup = question as QuestionGroup;\n\n if (generateChildren && asGroup && asGroup.questions.length > 0) {\n this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);\n }\n\n return formGroup;\n }\n\n _generateFormGroupChildrenModel(\n questions: QuestionBase[],\n parentControl: AfeFormGroup,\n form?: Form\n ) {\n if (questions.length > 0) {\n questions.forEach((element) => {\n const generated = this.generateControlModel(\n element,\n parentControl,\n true,\n form\n );\n if (generated !== null) {\n parentControl.addControl(element.key, generated);\n }\n });\n }\n }\n\n generateFormArray(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormArray {\n const validators = this.validationFactory.getValidators(question, form);\n let formArray: AfeFormArray;\n if (validators && validators.length > 0) {\n formArray = new AfeFormArray([], validators[0]);\n } else {\n formArray = new AfeFormArray([]);\n }\n formArray.uuid = question.key;\n this.wireHidersDisablers(question, formArray, form);\n this.wireAlerts(question, formArray, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formArray);\n }\n\n return formArray;\n }\n\n generateFormControl(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormControl {\n const value = question.defaultValue || '';\n const validators = this.validationFactory.getValidators(question, form);\n\n const control = new AfeFormControl(value, validators);\n control.uuid = question.key;\n this.wireHidersDisablers(question, control, form);\n this.wireAlerts(question, control, form);\n this.wireCalculator(\n question,\n control,\n form ? form.dataSourcesContainer.dataSources : null\n );\n\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, control);\n }\n\n return control;\n }\n\n private wireAlerts(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.alert && question.alert !== '') {\n const alert = this.alertsFactory.getJsExpressionshowAlert(\n question,\n control,\n form\n );\n control.setAlertFn(alert);\n }\n }\n private wireHidersDisablers(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.hide && question.hide !== '') {\n const hider = this.hidersDisablersFactory.getJsExpressionHider(\n question,\n control,\n form\n );\n control.setHidingFn(hider);\n }\n\n if (question.disable && question.disable !== '') {\n const disable = this.hidersDisablersFactory.getJsExpressionDisabler(\n question,\n control,\n form\n );\n control.setDisablingFn(disable);\n }\n }\n\n private wireCalculator(\n question: QuestionBase,\n control: AfeFormControl,\n dataSource?: any\n ) {\n if (question.calculateExpression && question.calculateExpression !== '') {\n const helper: JsExpressionHelper = new JsExpressionHelper();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n question.calculateExpression,\n control,\n helper.helperFunctions,\n dataSource\n );\n // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class\n control.setCalculatorFn(runnable.run);\n }\n }\n}\n","export const DEFAULT_STYLES = `a {\n color: white;\n text-decoration: none;\n font-size: 12px;\n text-transform: uppercase;\n }\n\n ul {\n list-style-type: none;\n margin: 2px auto;\n position: relative;\n }\n\n li {\n display: block;\n padding: 10px 20px;\n white-space: nowrap;\n transition: all 0.3s ease-in;\n border-bottom: 4px solid transparent;\n }\n\n li:hover {\n border-bottom: 4px solid white;\n opacity: 0.7;\n cursor: pointer;\n }\n\n .owl-theme .owl-controls .owl-nav {\n position: absolute;\n width: 100%;\n top: 0;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"] {\n position: absolute;\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"]:hover {\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav .owl-next {\n right: 0;\n transform: translate(120%);\n }\n\n .owl-theme .owl-controls .owl-nav .owl-prev {\n left: 0;\n transform: translate(-120%);\n }\n\n .slick-initialized .swipe-tab-content {\n position: relative;\n min-height: 365px;\n }\n @media screen and (min-width: 767px) {\n .slick-initialized .swipe-tab-content {\n min-height: 500px;\n }\n .time-control{\n width:50%;\n }\n }\n .slick-initialized .swipe-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n background: none;\n border: 0;\n color: #757575;\n cursor: pointer;\n text-align: center;\n border-bottom: 2px solid rgba(51, 122, 183, 0);\n transition: all 0.5s;\n }\n .slick-initialized .swipe-tab:hover {\n color: #337AB7;\n }\n .slick-initialized .swipe-tab.active-tab {\n border-bottom-color: #337AB7;\n color: #337AB7;\n font-weight: bold;\n }\n\n .disabled {\n opacity: .5;\n pointer-events: none;\n }\n\n .select2-container {\n margin-top: -5px;\n }\n\n .btn {\n padding: 0px 12px !important;\n }\n\n .form-tooltip{\n color:rgb(51, 122, 183);\n display: inline-block;\n }\n .question-info{\n opacity:0;\n height:0px;\n display: none;\n transition-duration: opacity 1s ease-out;\n transtion-delay: 0.5s;\n padding-top: 2px;\n padding-bottom: 2px;\n color: #696969;\n border-style: ridge;\n border-width: 1px;\n border-color: #337ab7;\n margin-top: 2px;\n }\n .hide-info{\n display:none;\n height:0px;\n }\n .form-tooltip:hover ~ .question-info {\n display:block;\n opacity:1;\n height:auto;\n }\n .form-tooltip .tooltipcontent::after {\n content: \" \";\n position: absolute;\n bottom: 100%; /* At the top of the tooltip */\n right: 0%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #337ab7;\n border-left-color: transparent;\n }\n\n ng-select.form-control {\n padding-top: 0;\n height: auto;\n padding-bottom: 0;\n }\n\n .forms-dropdown-menu {\n max-height: 450px;\n overflow-y: scroll;\n }\n .no-border {\n border: 0;\n box-shadow: none;\n}\n.time-control{\n width:100%;\n}\n\n `;\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DataSources {\n private _dataSources: any = {};\n constructor() {}\n\n get dataSources(): any {\n return this._dataSources;\n }\n\n registerDataSource(key: string, dataSource: any, unWrap = false) {\n if (unWrap) {\n // tslint:disable-next-line:forin\n for (const o in dataSource) {\n console.log('registering', o, dataSource[o]);\n this.registerDataSource(o, dataSource[o], false);\n }\n }\n if (this.dataSources[key]) {\n console.warn('Overriding registered data source', key);\n }\n this._dataSources[key] = dataSource;\n }\n\n clearDataSource(key: string) {\n delete this._dataSources[key];\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Inject,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport 'hammerjs';\nimport { DEFAULT_STYLES } from './form-renderer.component.css';\nimport { DOCUMENT } from '@angular/common';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, LeafNode, GroupNode } from '../form-factory/form-node';\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { FormErrorsService } from '../services/form-errors.service';\nimport { QuestionGroup } from '../question-models/group-question';\n// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';\n// import * as _ from 'lodash';\n\n// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';\n// import { QuestionBase } from '../question-models';\n\n@Component({\n selector: 'form-renderer',\n template: `<!--CONTAINERS-->\n<div *ngIf=\"node.question.renderingType === 'form'\">\n <div class=\"dropdown dropdown-tabs forms-dropdown\">\n <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">\n <i class=\"fa fa-angle-double-down\"></i>\n </a>\n <ul\n class=\"dropdown-menu dropdown-menu-right forms-dropdown-menu\"\n role=\"menu\"\n aria-labelledby=\"dropdownMenu\"\n >\n <li\n *ngFor=\"let question of node.question.questions; let i = index\"\n (click)=\"clickTab(i)\"\n >\n {{ question.label }}\n </li>\n </ul>\n </div>\n <mat-tab-group\n (selectedIndexChange)=\"tabSelected($event)\"\n [selectedIndex]=\"activeTab\"\n >\n <mat-tab\n [label]=\"question.label\"\n *ngFor=\"let question of node.question.questions; let i = index\"\n >\n <div (swipeLeft)=\"loadNextTab()\" (swipeRight)=\"loadPreviousTab()\">\n <form-renderer\n [node]=\"node.children[question.key]\"\n [parentComponent]=\"this\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div style=\"text-align: center\">\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadPreviousTab()\"\n [ngClass]=\"{ disabled: isCurrentTabFirst() }\"\n >\n <<\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadNextTab()\"\n [ngClass]=\"{ disabled: isCurrentTabLast() }\"\n >\n >>\n </button>\n </div>\n</div>\n<div *ngIf=\"node.question.renderingType === 'page'\">\n <!--<h2>{{node.question.label}}</h2>-->\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n</div>\n<div *ngIf=\"node.question.renderingType === 'section' && checkSection(node)\">\n <div class=\"panel panel-primary\">\n <div class=\"panel-heading\">\n <button\n type=\"button\"\n class=\"btn btn-primary pull-right\"\n (click)=\"isCollapsed = !isCollapsed\"\n >\n {{ isCollapsed ? 'Show' : 'Hide' }}\n </button>\n {{ node.question.label }}\n </div>\n <div class=\"panel-body\" [collapse]=\"isCollapsed\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n </div>\n </div>\n</div>\n\n<!-- MESSAGES -->\n<div\n *ngIf=\"node.control && node.control.alert && node.control.alert !== ''\"\n class=\"alert alert-warning\"\n>\n <a class=\"close\" data-dismiss=\"alert\">×</a> {{ node.control.alert }}\n</div>\n\n<!--CONTROLS-->\n\n<div\n *ngIf=\"node.question.controlType === 0\"\n class=\"form-group\"\n [formGroup]=\"parentGroup\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--LEAF CONTROL-->\n <div class=\"question-area\">\n <a\n class=\"form-tooltip pull-right\"\n (click)=\"toggleInformation(node.question.extras.id)\"\n data-placement=\"right\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n <i class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></i>\n </a>\n\n <label\n *ngIf=\"node.question.label\"\n [style.color]=\"hasErrors() ? 'red' : ''\"\n class=\"control-label\"\n [attr.for]=\"node.question.key\"\n >\n {{ node.question.required ? '*' : '' }} {{ node.question.label }}\n </label>\n <div [ngSwitch]=\"node.question.renderingType\">\n <select\n class=\"form-control\"\n *ngSwitchCase=\"'select'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n <option *ngFor=\"let o of node.question.options\" [ngValue]=\"o.value\">\n {{ o.label }}\n </option>\n </select>\n\n <app-file-upload\n *ngSwitchCase=\"'file'\"\n [dataSource]=\"dataSource\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n (fileChanged)=\"upload($event)\"\n >\n </app-file-upload>\n <textarea\n [placeholder]=\"node.question.placeholder\"\n [rows]=\"node.question.rows\"\n class=\"form-control\"\n *ngSwitchCase=\"'textarea'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n </textarea>\n <!--\n <ng-select *ngSwitchCase=\"'remote-select'\" [items]=\"items$ | async\" bindLabel=\"label\" bindValue=\"value\" placeholder=\"{{node.question.placeholder}}\"\n [hideSelected]=\"true\" [loading]=\"itemsLoading\" [typeahead]=\"itemsInput$\" [formControlName]=\"node.question.key\" [id]=\"node.question.key + 'id'\">\n </ng-select>\n -->\n <remote-select\n *ngSwitchCase=\"'remote-select'\"\n [placeholder]=\"node.question.placeholder\"\n tabindex=\"0\"\n [dataSource]=\"dataSource\"\n [componentID]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n ></remote-select>\n <!-- \n <date-time-picker *ngSwitchCase=\"'date'\" [showTime]=\"node.question.showTime\" tabindex=\"0\" [weeks]='node.question.extras.questionOptions.weeksList'\n (onDateChange)=\"onDateChanged(node)\" [showWeeks]=\"node.question.showWeeksAdder\" [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"></date-time-picker>\n -->\n\n <ngx-date-time-picker\n *ngSwitchCase=\"'date'\"\n [showTime]=\"node.question.showTime\"\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [weeks]=\"node.question.extras.questionOptions.weeksList\"\n (onDateChange)=\"onDateChanged(node)\"\n [showWeeks]=\"node.question.showWeeksAdder\"\n ></ngx-date-time-picker>\n <ngx-time-picker \n *ngSwitchCase=\"'time'\" \n id=\"node.question.key + 'id'\" \n [formControlName]=\"node.question.key\"\n ></ngx-time-picker>\n <ng-select\n *ngSwitchCase=\"'multi-select'\"\n [style.height]=\"'auto'\"\n [style.overflow-x]=\"'hidden'\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"true\"\n >\n </ng-select>\n <ng-select\n *ngSwitchCase=\"'single-select'\"\n [style.height]=\"auto\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"false\"\n >\n </ng-select>\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'number'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'number'\"\n [id]=\"node.question.key + 'id'\"\n [step]=\"'any'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'decimal'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'text'\"\n [id]=\"node.question.key + 'id'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchDefault\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"node.question.renderingType\"\n [id]=\"node.question.key + 'id'\"\n />\n\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let o of node.question.options\">\n <label class=\"form-control no-border\">\n <input\n type=\"radio\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [value]=\"o.value\"\n />\n {{ o.label }}\n </label>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'checkbox'\">\n <checkbox\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [selected]=\"node.control.value\"\n ></checkbox>\n </div>\n\n <div\n *ngIf=\"\n node.question.enableHistoricalValue && node.question.historicalDisplay\n \"\n style=\"margin-top: 2px\"\n >\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-xs-9\">\n <span class=\"text-warning\">Previous Value: </span>\n <strong>{{ node.question.historicalDisplay?.text }}</strong>\n <span *ngIf=\"node.question.showHistoricalValueDate\">\n <span> | </span>\n <strong class=\"text-primary\"\n >{{ node.question.historicalDisplay?._date }}\n </strong>\n <span\n class=\"text-primary\"\n *ngIf=\"\n node.question.historicalDisplay &&\n node.question.historicalDisplay._date\n \"\n >\n ({{ node.question.historicalDisplay._date | timeAgo }})</span\n >\n </span>\n </div>\n <button\n type=\"button\"\n [node]=\"node\"\n [name]=\"'historyValue'\"\n class=\"btn btn-primary btn-small col-xs-3\"\n >\n Use Value\n </button>\n </div>\n </div>\n </div>\n <appointments-overview [node]=\"node\"></appointments-overview>\n <div *ngIf=\"hasErrors()\">\n <p *ngFor=\"let e of errors()\">\n <span class=\"text-danger\">{{ e }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"question-info col-md-12 col-lg-12 col-sm-12\"\n id=\"{{ node.question.extras.id }}\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n {{ node.question.extras.questionInfo }}\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 1\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--ARRAY CONTROL-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div class=\"well\" style=\"padding: 2px\" *ngSwitchCase=\"'repeating'\">\n <h4 style=\"margin: 2px; font-weight: bold\">{{ node.question.label }}</h4>\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 2px;\n \"\n />\n <div [ngSwitch]=\"node.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <div>{{ child.orderNumber }}</div>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\" style=\"margin-bottom: 20px\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n </div>\n <button\n type=\"button \"\n class=\"btn btn-primary\"\n (click)=\"node.createChildNode()\"\n >\n Add\n </button>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 2\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--GROUP-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n <div\n *ngSwitchCase=\"'field-set'\"\n style=\"border: 1px solid #eeeeee; padding: 2px; margin: 2px\"\n >\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </div>\n</div>\n`,\n styles: ['../../style/app.css', DEFAULT_STYLES]\n})\nexport class FormRendererComponent implements OnInit {\n @Input() public parentComponent: FormRendererComponent;\n @Input() public node: NodeBase;\n @Input() public parentGroup: AfeFormGroup;\n public childComponents: FormRendererComponent[] = [];\n public showTime: boolean;\n public showWeeks: boolean;\n public activeTab: number;\n public dataSource: DataSource;\n public isCollapsed = false;\n public auto: any;\n\n // items$: Observable<any[]>;\n // itemsLoading = false;\n // itemsInput$ = new Subject<string>();\n\n constructor(\n private validationFactory: ValidationFactory,\n private dataSources: DataSources,\n private formErrorsService: FormErrorsService,\n @Inject(DOCUMENT) private document: any\n ) {\n this.activeTab = 0;\n }\n\n public ngOnInit() {\n this.setUpRemoteSelect();\n this.setUpFileUpload();\n if (this.node && this.node.form) {\n const tab = this.node.form.valueProcessingInfo.lastFormTab;\n if (tab && tab !== this.activeTab) {\n this.activeTab = tab;\n }\n }\n if (this.node && this.node.question.renderingType === 'form') {\n this.formErrorsService.announceErrorField$.subscribe((error) => {\n this.scrollToControl(error);\n });\n }\n\n if (this.node && this.node.question.renderingType === 'section') {\n this.isCollapsed = !(this.node.question as QuestionGroup).isExpanded;\n }\n\n if (this.parentComponent) {\n this.parentComponent.addChildComponent(this);\n }\n }\n\n public addChildComponent(child: FormRendererComponent) {\n this.childComponents.push(child);\n }\n\n public setUpRemoteSelect() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'remote-select'\n ) {\n // let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n /*\n let defaltValues = of([]);\n if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {\n defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(\n catchError(() => of([])), // empty list on error\n );\n }\n this.items$ = concat(\n defaltValues,\n this.itemsInput$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n tap(() => this.itemsLoading = true),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => {\n this.itemsLoading = false\n })\n ))\n )\n );\n */\n if (this.dataSource && this.node.question.dataSourceOptions) {\n this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;\n }\n }\n }\n\n public setUpFileUpload() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'file'\n ) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n // console.log('Key', this.node.question);\n // console.log('Data source', this.dataSource);\n }\n }\n\n checkSection(node: NodeBase) {\n if (node.question.renderingType === 'section') {\n let groupChildrenHidden = false;\n const allSectionControlsHidden = Object.keys(node.children).every((k) => {\n const innerNode = node.children[k];\n if (innerNode instanceof GroupNode) {\n groupChildrenHidden = Object.keys(innerNode.children).every(\n (i) => innerNode.children[i].control.hidden\n );\n }\n return node.children[k].control.hidden || groupChildrenHidden;\n });\n return !allSectionControlsHidden;\n }\n return true;\n }\n\n public clickTab(tabNumber) {\n this.activeTab = tabNumber;\n }\n\n public loadPreviousTab() {\n if (!this.isCurrentTabFirst()) {\n this.clickTab(this.activeTab - 1);\n document.body.scrollTop = 0;\n }\n }\n\n public isCurrentTabFirst() {\n return this.activeTab === 0;\n }\n\n public isCurrentTabLast() {\n return this.activeTab === this.node.question['questions'].length - 1;\n }\n\n public loadNextTab() {\n if (!this.isCurrentTabLast()) {\n this.clickTab(this.activeTab + 1);\n document.body.scrollTop = 0;\n }\n }\n public tabSelected($event) {\n this.activeTab = $event;\n this.setPreviousTab();\n }\n public setPreviousTab() {\n if (this.node && this.node.form) {\n this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;\n }\n }\n public hasErrors() {\n return this.node.control.touched && !this.node.control.valid;\n }\n\n public errors() {\n return this.getErrors(this.node);\n }\n\n public scrollToControl(error: string) {\n const tab: number = +error.split(',')[0];\n const elSelector = error.split(',')[1] + 'id';\n\n // the tab components\n const tabComponent: FormRendererComponent = this.childComponents[tab];\n\n this.clickTab(tab);\n\n setTimeout(() => {\n // expand all sections\n tabComponent.childComponents.forEach((section) => {\n section.isCollapsed = false;\n\n setTimeout(() => {\n const element: any = this.document.getElementById(elSelector);\n if (element !== null && element.focus) {\n element.focus();\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n });\n }, 200);\n }\n\n public onDateChanged(node: LeafNode) {\n // console.log('Node', node);\n this.node = node;\n }\n\n public upload(event) {\n // console.log('Event', event);\n // console.log('Data', this.dataSource);\n }\n\n public toggleInformation(infoId) {\n const e = document.getElementById(infoId);\n\n if (e.style.display === 'block') {\n e.style.display = 'none';\n } else {\n e.style.display = 'block';\n }\n\n console.log('InfoId', infoId);\n }\n\n private getErrors(node: NodeBase) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { Form } from '../form-factory/form';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { NodeBase, LeafNode } from '../form-factory/form-node';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { FormErrorsService } from '../services/form-errors.service';\n\n@Component({\n selector: 'error-renderer',\n template: `<div *ngIf=\"showErrors()\" class=\"container\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-warning\"\n *ngFor=\"let errorNode of errorNodes\"\n (click)=\"announceErrorField(errorNode)\"\n >\n <div class=\"error\" *ngIf=\"errorNode.control.valid == false\">\n <h4>{{ errorNode.question.label }}</h4>\n <span class=\"text-danger\"> {{ getControlError(errorNode) }}</span>\n </div>\n </li>\n </ul>\n</div>\n`,\n styles: [`ul{list-style:none}.list-group-item{padding:2px 15px;cursor:pointer}ul li:hover{background-color:#fff}h4{margin-top:7px;margin-bottom:7px}`]\n})\nexport class ErrorRendererComponent implements OnInit {\n @Input() form: Form;\n\n constructor(\n private validationFactory: ValidationFactory,\n private formErrorsService: FormErrorsService\n ) {}\n\n ngOnInit() {}\n\n showErrors() {\n return !this.form.valid && this.form.showErrors;\n }\n\n get errorNodes() {\n const invalidControls = this.form.markInvalidControls(\n this.form.rootNode,\n []\n );\n return invalidControls;\n }\n\n getControlError(node: LeafNode) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n announceErrorField(errorNode: LeafNode) {\n const nodes: Array<NodeBase> = this.form.searchNodeByQuestionId(\n errorNode.path.substring(0, errorNode.path.indexOf('.'))\n );\n\n _.forEach(nodes, (node: NodeBase) => {\n if (node.question.renderingType === 'page') {\n const pageIndex: number = this.getPageIndex(node);\n this.formErrorsService.announceErrorField(\n pageIndex + ',' + errorNode.question.key\n );\n }\n });\n }\n\n getPageIndex(node: NodeBase) {\n const questionGroup: QuestionGroup = this.form.rootNode\n .question as QuestionGroup;\n return questionGroup.questions.indexOf(node.question);\n }\n}\n","import * as _ from 'lodash';\nimport { QuestionBase } from '../question-models/question-base';\n\nexport class HistoricalFieldHelperService {\n public getDisplayTextFromOptions(\n question: QuestionBase,\n valueProperty: string,\n displayProperty: string\n ): string {\n let displayText = '';\n const historicalValue = question.historicalDataValue;\n if (_.isArray(historicalValue.value)) {\n let valueConverted = 0;\n _.each(historicalValue.value, (val) => {\n _.each(question.options, (option) => {\n if (option[valueProperty] === val) {\n if (valueConverted === 0) {\n displayText = displayText + option[displayProperty];\n } else {\n displayText = displayText + ', ' + option[displayProperty];\n }\n valueConverted++;\n }\n });\n });\n } else {\n _.each(question.options, (option) => {\n if (option[valueProperty] === historicalValue.value) {\n displayText = option[displayProperty];\n }\n });\n }\n return displayText;\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport { HistoricalFieldHelperService } from '../helpers/historical-field-helper-service';\nimport * as _ from 'lodash';\nimport { NodeBase } from '../form-factory/form-node';\n\n@Directive({\n selector: `[node]`\n})\nexport class HistoricalValueDirective {\n @Input() _node: NodeBase;\n @Output() _nodeChange = new EventEmitter<Object>();\n\n historicalDisplay: string;\n\n constructor(private historicalFieldHelper: HistoricalFieldHelperService) {}\n\n @HostListener('click', ['$event'])\n setValue(e) {\n if (e.target.name === 'historyValue') {\n if (\n this._node &&\n (!this.compareString(this._node.question.renderingType, 'page') ||\n !this.compareString(this._node.question.renderingType, 'section'))\n ) {\n this._node.control.setValue(\n this._node.question.historicalDataValue.value\n );\n\n this._node.question[\n 'historicalValue'\n ] = this._node.question.historicalDataValue;\n e.stopPropagation();\n this._nodeChange.emit(this._node);\n }\n }\n }\n private compareString(a, b) {\n if (a === b) {\n return true;\n } else {\n return false;\n }\n }\n @Input()\n set node(node: NodeBase) {\n if (node) {\n this._node = node;\n if (\n this._node.question.enableHistoricalValue &&\n !_.isUndefined(this._node.question.historicalDataValue)\n ) {\n const display: any = { text: '', _date: '' };\n if (\n this._node.question.renderingType === 'select' ||\n this._node.question.renderingType === 'multi-select' ||\n this._node.question.renderingType === 'single-select'\n ) {\n display.text = this.historicalFieldHelper.getDisplayTextFromOptions(\n this._node.question,\n 'value',\n 'label'\n );\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n } else if (!_.isUndefined(this._node.question.historicalDataValue)) {\n display.text = this._node.question.historicalDataValue.value;\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n }\n }\n }\n }\n}\n","export const STYLE = `\nng-select {\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle;\n width: 100%;\n}\nng-select * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nng-select > div {\n border: 1px solid #ddd;\n box-sizing: border-box;\n cursor: pointer;\n user-select: none;\n width: 100%;\n}\nng-select > div.disabled {\n background-color: #eee;\n color: #aaa;\n cursor: default;\n pointer-events: none;\n}\nng-select > div > div.single {\n display: flex;\n height: 30px;\n width: 100%;\n}\nng-select > div > div.single > div.value,\nng-select > div > div.single > div.placeholder {\n flex: 1;\n line-height: 30px;\n overflow: hidden;\n padding: 0 10px;\n white-space: nowrap;\n}\nng-select > div > div.single > div.placeholder {\n color: #a9a9a9;\n}\nng-select > div > div.single > div.clear,\nng-select > div > div.single > div.toggle {\n color: #aaa;\n line-height: 30px;\n text-align: center;\n width: 30px;\n}\nng-select > div > div.single > div.clear:hover,\nng-select > div > div.single > div.toggle:hover {\n background-color: #ececec;\n}\nng-select > div > div.single > div.clear {\n font-size: 18px;\n}\nng-select > div > div.single > div.toggle {\n font-size: 14px;\n}\nng-select > div > div.multiple {\n display: flex;\n flex-flow: row wrap;\n height: 100%;\n min-height: 30px;\n padding: 0 10px;\n width: 100%;\n}\nng-select > div > div.multiple > div.option {\n background-color: #eee;\n border: 1px solid #aaa;\n border-radius: 4px;\n color: #333;\n cursor: default;\n display: inline-block;\n flex-shrink: 0;\n font-size: 14px;\n line-height: 22px;\n margin: 3px 5px 3px 0;\n padding: 0 4px;\n}\nng-select > div > div.multiple > div.option span.deselect-option {\n color: #aaa;\n cursor: pointer;\n font-size: 14px;\n height: 20px;\n line-height: 20px;\n}\nng-select > div > div.multiple > div.option span.deselect-option:hover {\n color: #555;\n}\nng-select > div > div.multiple input {\n background-color: transparent;\n border: none;\n height: 30px;\n line-height: 30px;\n padding: 0;\n}\nng-select > div > div.multiple input:focus {\n outline: none;\n}\n`;\n","export class Option {\n value: string;\n label: string;\n\n disabled: boolean;\n highlighted: boolean;\n selected: boolean;\n shown: boolean;\n\n constructor(value: string, label: string) {\n this.value = value;\n this.label = label;\n\n this.disabled = false;\n this.highlighted = false;\n this.selected = false;\n this.shown = true;\n }\n\n show() {\n this.shown = true;\n }\n\n hide() {\n this.shown = false;\n }\n\n disable() {\n this.disabled = true;\n }\n\n enable() {\n this.disabled = false;\n }\n\n undecoratedCopy() {\n return {\n label: this.label,\n value: this.value\n };\n }\n}\n","export class Diacritics {\n static DIACRITICS = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n\n static strip(text: string): string {\n const match = (a: string): string => {\n return this.DIACRITICS[a] || a;\n };\n if (text) {\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n } else {\n return '';\n }\n }\n}\n","import { Option } from './option';\nimport { Diacritics } from './diacritics';\n\nexport class OptionList {\n private _options: Array<Option>;\n\n /* Consider using these for performance improvement. */\n // private _selection: Array<Option>;\n // private _filtered: Array<Option>;\n // private _value: Array<string>;\n\n private _highlightedOption: Option = null;\n // v0 and v1 are assumed not to be undefined or null.\n static equalValues(v0: Array<string>, v1: Array<string>): boolean {\n if (v0.length !== v1.length) {\n return false;\n }\n\n const a: Array<string> = v0.slice().sort();\n const b: Array<string> = v1.slice().sort();\n\n return a.every((v, i) => {\n return v === b[i];\n });\n }\n\n constructor(options: Array<any>) {\n if (typeof options === 'undefined' || options === null) {\n options = [];\n }\n\n this._options = options.map((option) => {\n const o: Option = new Option(option.value, option.label);\n if (option.disabled) {\n o.disable();\n }\n return o;\n });\n\n this.highlight();\n }\n\n /** Options. **/\n\n get options(): Array<Option> {\n return this._options;\n }\n\n getOptionsByValue(value: string): Array<Option> {\n return this.options.filter((option) => {\n return option.value === value;\n });\n }\n\n /** Value. **/\n\n get value(): Array<string> {\n return this.selection.map((selectedOption) => {\n return selectedOption.value;\n });\n }\n\n set value(v: Array<string>) {\n v = typeof v === 'undefined' || v === null ? [] : v;\n\n this.options.forEach((option) => {\n option.selected = v.indexOf(option.value) > -1;\n });\n }\n\n /** Selection. **/\n\n get selection(): Array<Option> {\n return this.options.filter((option) => {\n return option.selected;\n });\n }\n\n select(option: Option, multiple: boolean) {\n if (!multiple) {\n this.clearSelection();\n }\n option.selected = true;\n }\n\n deselect(option: Option) {\n option.selected = false;\n }\n\n clearSelection() {\n this.options.forEach((option) => {\n option.selected = false;\n });\n }\n\n /** Filter. **/\n\n get filtered(): Array<Option> {\n return this.options.filter((option) => {\n return option.shown;\n });\n }\n\n filter(term: string) {\n if (term.trim() === '') {\n this.resetFilter();\n } else {\n this.options.forEach((option) => {\n const l: string = Diacritics.strip(option.label).toUpperCase();\n const t: string = Diacritics.strip(term).toUpperCase();\n option.shown = l.indexOf(t) > -1;\n });\n }\n\n this.highlight();\n }\n\n resetFilter() {\n this.options.forEach((option) => {\n option.shown = true;\n });\n }\n\n /** Highlight. **/\n\n get highlightedOption(): Option {\n return this._highlightedOption;\n }\n\n highlight() {\n const option: Option = this.hasShownSelected()\n ? this.getFirstShownSelected()\n : this.getFirstShown();\n this.highlightOption(option);\n }\n\n highlightOption(option: Option) {\n this.clearHighlightedOption();\n\n if (option !== null) {\n option.highlighted = true;\n this._highlightedOption = option;\n }\n }\n\n highlightNextOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > -1 && index < shownOptions.length - 1) {\n this.highlightOption(shownOptions[index + 1]);\n }\n }\n\n highlightPreviousOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > 0) {\n this.highlightOption(shownOptions[index - 1]);\n }\n }\n\n private clearHighlightedOption() {\n if (this.highlightedOption !== null) {\n this.highlightedOption.highlighted = false;\n this._highlightedOption = null;\n }\n }\n\n private getHighlightedIndexFromList(options: Array<Option>) {\n for (let i = 0; i < options.length; i++) {\n if (options[i].highlighted) {\n return i;\n }\n }\n return -1;\n }\n\n getHighlightedIndex() {\n return this.getHighlightedIndexFromList(this.filtered);\n }\n\n /** Util. **/\n\n hasShown() {\n return this.options.some((option) => {\n return option.shown;\n });\n }\n\n hasSelected() {\n return this.options.some((option) => {\n return option.selected;\n });\n }\n\n hasShownSelected() {\n return this.options.some((option) => {\n return option.shown && option.selected;\n });\n }\n\n private getFirstShown(): Option {\n for (const option of this.options) {\n if (option.shown) {\n return option;\n }\n }\n return null;\n }\n\n private getFirstShownSelected(): Option {\n for (const option of this.options) {\n if (option.shown && option.selected) {\n return option;\n }\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n Input,\n OnChanges,\n OnInit,\n Output,\n EventEmitter,\n ExistingProvider,\n ViewChild,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { STYLE } from './select.component.style';\nimport { SelectDropdownComponent } from './select-dropdown.component';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\nexport const SELECT_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable:no-use-before-declare\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n};\n\n@Component({\n selector: 'ng-select',\n template: `<div\n #selection\n [attr.tabindex]=\"disabled ? null : 0\"\n [ngClass]=\"{\n open: isOpen,\n focus: hasFocus,\n below: isBelow,\n disabled: disabled\n }\"\n (click)=\"onSelectContainerClick($event)\"\n (focus)=\"onSelectContainerFocus()\"\n (keydown)=\"onSelectContainerKeydown($event)\"\n (window:click)=\"onWindowClick()\"\n (window:resize)=\"onWindowResize()\"\n>\n <div class=\"single\" *ngIf=\"!multiple\">\n <div class=\"value\" *ngIf=\"optionList.hasSelected()\">\n {{ optionList.selection[0].label }}\n </div>\n <div class=\"placeholder\" *ngIf=\"!optionList.hasSelected()\">\n {{ placeholderView }}\n </div>\n <div\n class=\"clear\"\n *ngIf=\"allowClear\"\n (click)=\"onClearSelectionClick($event)\"\n >\n ✕\n </div>\n <div class=\"toggle\" *ngIf=\"isOpen\">▲</div>\n <div class=\"toggle\" *ngIf=\"!isOpen\">▼</div>\n </div>\n\n <div class=\"multiple\" *ngIf=\"multiple\">\n <div class=\"option\" *ngFor=\"let option of optionList.selection\">\n <span class=\"deselect-option\" (click)=\"onDeselectOptionClick(option)\">\n ✕\n </span>\n {{ option.label }}\n </div>\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n tabindex=\"-1\"\n [placeholder]=\"placeholderView\"\n [ngStyle]=\"{ 'width.px': filterInputWidth }\"\n (input)=\"onMultipleFilterInput($event)\"\n (keydown)=\"onMultipleFilterKeydown($event)\"\n />\n </div>\n</div>\n<select-dropdown\n *ngIf=\"isOpen\"\n #dropdown\n [multiple]=\"multiple\"\n [optionList]=\"optionList\"\n [notFoundMsg]=\"notFoundMsg\"\n [highlightColor]=\"highlightColor\"\n [highlightTextColor]=\"highlightTextColor\"\n [filterEnabled]=\"filterEnabled\"\n [width]=\"width\"\n [top]=\"top\"\n [left]=\"left\"\n (close)=\"onDropdownClose($event)\"\n (optionClicked)=\"onDropdownOptionClicked($event)\"\n (singleFilterClick)=\"onSingleFilterClick()\"\n (singleFilterInput)=\"onSingleFilterInput($event)\"\n (singleFilterKeydown)=\"onSingleFilterKeydown($event)\"\n>\n</select-dropdown>\n`,\n styles: [STYLE],\n providers: [SELECT_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent\n implements AfterViewInit, ControlValueAccessor, OnChanges, OnInit {\n /** Keys. **/\n\n private KEYS: any = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n UP: 38,\n DOWN: 40\n };\n\n @Input() options: Array<any>;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() highlightColor = '#2196f3';\n @Input() highlightTextColor = '#fff';\n @Input() multiple = false;\n @Input() noFilter = 0;\n @Input() notFoundMsg = 'No results found';\n @Input() placeholder = '';\n\n @Output() opened: EventEmitter<null> = new EventEmitter<null>();\n @Output() closed: EventEmitter<null> = new EventEmitter<null>();\n @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n @Output() deselected: EventEmitter<any> = new EventEmitter<any>();\n @Output() typed: EventEmitter<any> = new EventEmitter<any>();\n\n @ViewChild('selection') selectionSpan: any;\n @ViewChild('dropdown') dropdown: SelectDropdownComponent;\n @ViewChild('filterInput') filterInput: any;\n\n private _value: Array<any> = [];\n optionList: OptionList;\n\n // Selection state variables.\n hasSelected = false;\n\n // View state variables.\n filterEnabled = true;\n filterInputWidth = 1;\n hasFocus = false;\n isBelow = true;\n isDisabled = false;\n isOpen = false;\n placeholderView = '';\n\n clearClicked = false;\n selectContainerClicked = false;\n\n // Width and position for the dropdown container.\n width: number;\n top: number;\n left: number;\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n /** Event handlers. **/\n\n // Angular lifecycle hooks.\n\n ngOnInit() {\n this.placeholderView = this.placeholder;\n }\n\n ngAfterViewInit() {\n this.updateFilterWidth();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('options')) {\n this.updateOptionsList(changes['options'].isFirstChange());\n }\n if (changes.hasOwnProperty('noFilter')) {\n const numOptions: number = this.optionList.options.length;\n const minNumOptions: number = changes['noFilter'].currentValue;\n this.filterEnabled = numOptions >= minNumOptions;\n }\n }\n\n // Window.\n\n onWindowClick() {\n if (!this.selectContainerClicked) {\n this.closeDropdown();\n }\n this.clearClicked = false;\n this.selectContainerClicked = false;\n }\n\n onWindowResize() {\n this.updateWidth();\n }\n\n // Select container.\n\n onSelectContainerClick(event: any) {\n this.selectContainerClicked = true;\n if (!this.clearClicked) {\n this.toggleDropdown();\n }\n }\n\n onSelectContainerFocus() {\n this.onTouched();\n }\n\n onSelectContainerKeydown(event: any) {\n this.handleSelectContainerKeydown(event);\n }\n\n // Dropdown container.\n\n onDropdownOptionClicked(option: Option) {\n this.multiple ? this.toggleSelectOption(option) : this.selectOption(option);\n }\n\n onDropdownClose(focus: any) {\n this.closeDropdown(focus);\n }\n\n // Single filter input.\n\n onSingleFilterClick() {\n this.selectContainerClicked = true;\n }\n\n onSingleFilterInput(term: string) {\n setTimeout(() => {\n if (term.length > 2) {\n this.typed.emit(term);\n }\n }, 500);\n this.optionList.filter(term);\n }\n\n onSingleFilterKeydown(event: any) {\n this.handleSingleFilterKeydown(event);\n }\n\n // Multiple filter input.\n\n onMultipleFilterInput(event: any) {\n if (!this.isOpen) {\n this.openDropdown();\n }\n this.updateFilterWidth();\n setTimeout(() => {\n this.optionList.filter(event.target.value);\n });\n }\n\n onMultipleFilterKeydown(event: any) {\n this.handleMultipleFilterKeydown(event);\n }\n\n // Single clear select.\n\n onClearSelectionClick(event: any) {\n this.clearClicked = true;\n this.clearSelection();\n this.closeDropdown(true);\n }\n\n // Multiple deselect option.\n\n onDeselectOptionClick(option: Option) {\n this.clearClicked = true;\n this.deselectOption(option);\n }\n\n /** API. **/\n\n // TODO fix issues with global click/key handler that closes the dropdown.\n open() {\n this.openDropdown();\n }\n\n close() {\n this.closeDropdown();\n }\n\n clear() {\n this.clearSelection();\n }\n\n select(value: string) {\n this.optionList.getOptionsByValue(value).forEach((option) => {\n this.selectOption(option);\n });\n this.valueChanged();\n }\n\n /** ControlValueAccessor interface methods. **/\n\n writeValue(value: any) {\n this.value = value;\n }\n\n registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Value. **/\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this.multiple ? this._value : this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n\n if (!OptionList.equalValues(v, this._value)) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n private valueChanged() {\n this._value = this.optionList.value;\n\n this.hasSelected = this._value.length > 0;\n this.placeholderView = this.hasSelected ? '' : this.placeholder;\n this.updateFilterWidth();\n\n this.onChange(this.value);\n }\n\n /** Initialization. **/\n\n private updateOptionsList(firstTime: boolean) {\n let v: Array<string>;\n\n if (!firstTime) {\n v = this.optionList.value;\n }\n\n this.optionList = new OptionList(this.options);\n\n if (!firstTime) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n /** Dropdown. **/\n\n private toggleDropdown() {\n if (!this.isDisabled) {\n this.isOpen ? this.closeDropdown(true) : this.openDropdown();\n }\n }\n\n private openDropdown() {\n if (!this.isOpen) {\n this.updateWidth();\n this.updatePosition();\n this.isOpen = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n this.opened.emit(null);\n }\n }\n /* tslint:disable */\n private closeDropdown(focus: boolean = false) {\n if (this.isOpen) {\n this.clearFilterInput();\n this.isOpen = false;\n if (focus) {\n this.focus();\n }\n this.closed.emit(null);\n }\n }\n /* tslint:enable */\n /** Select. **/\n\n private selectOption(option: Option) {\n if (!option.selected) {\n this.optionList.select(option, this.multiple);\n this.valueChanged();\n this.selected.emit(option.undecoratedCopy());\n // Is this not allready done when setting the value??\n /*setTimeout(() => {\n if (this.multiple) {\n this.updateFilterWidth();\n }\n });*/\n }\n }\n\n private deselectOption(option: Option) {\n if (option.selected) {\n this.optionList.deselect(option);\n this.valueChanged();\n this.deselected.emit(option.undecoratedCopy());\n setTimeout(() => {\n if (this.multiple) {\n // this.updateFilterWidth();\n this.updatePosition();\n this.optionList.highlight();\n if (this.isOpen) {\n this.dropdown.moveHighlightedIntoView();\n }\n }\n });\n }\n }\n\n private clearSelection() {\n const selection: Array<Option> = this.optionList.selection;\n if (selection.length > 0) {\n this.optionList.clearSelection();\n this.valueChanged();\n\n if (selection.length === 1) {\n this.deselected.emit(selection[0].undecoratedCopy());\n } else {\n this.deselected.emit(\n selection.map((option) => {\n return option.undecoratedCopy();\n })\n );\n }\n }\n }\n\n private toggleSelectOption(option: Option) {\n option.selected ? this.deselectOption(option) : this.selectOption(option);\n }\n\n private selectHighlightedOption() {\n const option: Option = this.optionList.highlightedOption;\n if (option !== null) {\n this.selectOption(option);\n this.closeDropdown(true);\n }\n }\n\n private deselectLast() {\n const sel: Array<Option> = this.optionList.selection;\n\n if (sel.length > 0) {\n const option: Option = sel[sel.length - 1];\n this.deselectOption(option);\n this.setMultipleFilterInput(option.label + ' ');\n }\n }\n\n /** Filter. **/\n\n private clearFilterInput() {\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n } else {\n this.dropdown.clearFilterInput();\n }\n }\n\n private setMultipleFilterInput(value: string) {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = value;\n }\n }\n\n private handleSelectContainerKeydown(event: any) {\n const key = event.which;\n\n if (this.isOpen) {\n if (key === this.KEYS.ESC || (key === this.KEYS.UP && event.altKey)) {\n this.closeDropdown(true);\n } else if (key === this.KEYS.TAB) {\n this.closeDropdown();\n } else if (key === this.KEYS.ENTER) {\n this.selectHighlightedOption();\n } else if (key === this.KEYS.UP) {\n this.optionList.highlightPreviousOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n } else if (key === this.KEYS.DOWN) {\n this.optionList.highlightNextOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n }\n } else {\n if (\n key === this.KEYS.ENTER ||\n key === this.KEYS.SPACE ||\n (key === this.KEYS.DOWN && event.altKey)\n ) {\n /* FIREFOX HACK:\n *\n * The setTimeout is added to prevent the enter keydown event\n * to be triggered for the filter input field, which causes\n * the dropdown to be closed again.\n */\n setTimeout(() => {\n this.openDropdown();\n });\n }\n }\n }\n\n private handleMultipleFilterKeydown(event: any) {\n const key = event.which;\n\n if (key === this.KEYS.BACKSPACE) {\n if (\n this.hasSelected &&\n this.filterEnabled &&\n this.filterInput.nativeElement.value === ''\n ) {\n this.deselectLast();\n }\n }\n }\n\n private handleSingleFilterKeydown(event: any) {\n const key = event.which;\n\n if (\n key === this.KEYS.ESC ||\n key === this.KEYS.TAB ||\n key === this.KEYS.UP ||\n key === this.KEYS.DOWN ||\n key === this.KEYS.ENTER\n ) {\n this.handleSelectContainerKeydown(event);\n }\n }\n\n /** View. **/\n\n focus() {\n this.hasFocus = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n } else {\n this.selectionSpan.nativeElement.focus();\n }\n }\n\n blur() {\n this.hasFocus = false;\n this.selectionSpan.nativeElement.blur();\n }\n\n updateWidth() {\n this.width = this.selectionSpan.nativeElement.offsetWidth;\n }\n\n updatePosition() {\n const e = this.selectionSpan.nativeElement;\n this.left = e.offsetLeft;\n this.top = e.offsetTop + e.offsetHeight;\n }\n\n updateFilterWidth() {\n if (typeof this.filterInput !== 'undefined') {\n const value: string = this.filterInput.nativeElement.value;\n this.filterInputWidth =\n value.length === 0\n ? 1 + this.placeholderView.length * 10\n : 1 + value.length * 10;\n }\n }\n}\n","export const STYLE = `select-dropdown {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown > div {\n background-color: #fff;\n border: 1px solid #ccc;\n border-top: none;\n box-sizing: border-box;\n position: absolute;\n z-index: 1;\n}\nselect-dropdown > div .filter {\n padding: 3px;\n width: 100%;\n}\nselect-dropdown > div .filter input {\n border: 1px solid #eee;\n box-sizing: border-box;\n padding: 4px;\n width: 100%;\n}\nselect-dropdown > div .options {\n max-height: 200px;\n overflow-y: auto;\n}\nselect-dropdown > div .options ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\nselect-dropdown > div .options ul li {\n padding: 4px 8px;\n cursor: pointer;\n user-select: none;\n}\nselect-dropdown .selected {\n background-color: #e0e0e0;\n}\nselect-dropdown .selected.highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .disabled {\n background-color: #fff;\n color: #9e9e9e;\n cursor: default;\n pointer-events: none;\n}`;\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { STYLE } from './select-dropdown.component.style';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\n@Component({\n selector: 'select-dropdown',\n template: `<div [ngStyle]=\"{ 'top.px': top, 'left.px': left, 'width.px': width }\">\n <div class=\"filter\" *ngIf=\"!multiple\">\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n (click)=\"onSingleFilterClick($event)\"\n (input)=\"onSingleFilterInput($event)\"\n (keydown)=\"onSingleFilterKeydown($event)\"\n />\n </div>\n\n <div class=\"options\" #optionsList>\n <ul (wheel)=\"onOptionsWheel($event)\">\n <li\n *ngFor=\"let option of optionList.filtered\"\n [ngClass]=\"{\n highlighted: option.highlighted,\n selected: option.selected,\n disabled: option.disabled\n }\"\n [ngStyle]=\"getOptionStyle(option)\"\n (click)=\"onOptionClick(option)\"\n (mouseover)=\"onOptionMouseover(option)\"\n >\n {{ option.label }}\n </li>\n <li *ngIf=\"!optionList.hasShown()\" class=\"message\">\n {{ notFoundMsg }}\n </li>\n </ul>\n </div>\n</div>\n`,\n styles: [STYLE],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectDropdownComponent\n implements AfterViewInit, OnChanges, OnInit {\n @Input() filterEnabled: boolean;\n @Input() highlightColor: string;\n @Input() highlightTextColor: string;\n @Input() left: number;\n @Input() multiple: boolean;\n @Input() notFoundMsg: string;\n @Input() optionList: OptionList;\n @Input() top: number;\n @Input() width: number;\n\n @Output() close = new EventEmitter<boolean>();\n @Output() optionClicked = new EventEmitter<Option>();\n @Output() singleFilterClick = new EventEmitter<null>();\n @Output() singleFilterInput = new EventEmitter<string>();\n @Output() singleFilterKeydown = new EventEmitter<any>();\n\n @ViewChild('filterInput') filterInput: any;\n @ViewChild('optionsList') optionsList: any;\n\n disabledColor = '#fff';\n disabledTextColor = '9e9e9e';\n\n /** Event handlers. **/\n\n // Angular life cycle hooks.\n\n ngOnInit() {\n this.optionsReset();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('optionList')) {\n this.optionsReset();\n }\n }\n\n ngAfterViewInit() {\n this.moveHighlightedIntoView();\n if (!this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n }\n\n // Filter input (single select).\n\n onSingleFilterClick(event: any) {\n this.singleFilterClick.emit(null);\n }\n\n onSingleFilterInput(event: any) {\n this.singleFilterInput.emit(event.target.value);\n }\n\n onSingleFilterKeydown(event: any) {\n this.singleFilterKeydown.emit(event);\n }\n\n // Options list.\n\n onOptionsWheel(event: any) {\n this.handleOptionsWheel(event);\n }\n\n onOptionMouseover(option: Option) {\n this.optionList.highlightOption(option);\n }\n\n onOptionClick(option: Option) {\n this.optionClicked.emit(option);\n }\n\n /** Initialization. **/\n\n private optionsReset() {\n this.optionList.resetFilter();\n this.optionList.highlight();\n }\n\n /** View. **/\n\n getOptionStyle(option: Option): any {\n if (option.highlighted) {\n return {\n 'background-color': this.highlightColor,\n color: this.highlightTextColor\n };\n } else {\n return {};\n }\n }\n\n clearFilterInput() {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n }\n }\n\n moveHighlightedIntoView() {\n const list = this.optionsList.nativeElement;\n const listHeight = list.offsetHeight;\n\n const itemIndex = this.optionList.getHighlightedIndex();\n\n if (itemIndex > -1) {\n const item = list.children[0].children[itemIndex];\n const itemHeight = item.offsetHeight;\n\n const itemTop = itemIndex * itemHeight;\n const itemBottom = itemTop + itemHeight;\n\n const viewTop = list.scrollTop;\n const viewBottom = viewTop + listHeight;\n\n if (itemBottom > viewBottom) {\n list.scrollTop = itemBottom - listHeight;\n } else if (itemTop < viewTop) {\n list.scrollTop = itemTop;\n }\n }\n }\n\n private handleOptionsWheel(e: any) {\n const div = this.optionsList.nativeElement;\n const atTop = div.scrollTop === 0;\n const atBottom = div.offsetHeight + div.scrollTop === div.scrollHeight;\n\n if (atTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (atBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { SelectComponent } from './select.component';\nimport { SelectDropdownComponent } from './select-dropdown.component';\n\n@NgModule({\n declarations: [SelectComponent, SelectDropdownComponent],\n exports: [SelectComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class SelectModule {}\n","import {\n Pipe,\n PipeTransform,\n OnDestroy,\n WrappedValue,\n ChangeDetectorRef\n} from '@angular/core';\nimport { of } from 'rxjs';\n\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DomSanitizer } from '@angular/platform-browser';\n// import { FileUploadResourceService } from '../../etl-api/file-upload-resource.service';\n\n// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML.\n// tslint:disable-next-line:use-pipe-transform-interface\n@Pipe({\n name: 'secure',\n pure: false\n})\nexport class SecurePipe implements PipeTransform, OnDestroy {\n private _latestValue: any = null;\n private _latestReturnedValue: any = null;\n private _subscription: Subscription = null;\n private _obj: Observable<any> = null;\n private getfile;\n private previousUrl: string;\n private _result: BehaviorSubject<any> = new BehaviorSubject(null);\n private result: Observable<any> = this._result.asObservable();\n private _internalSubscription: Subscription = null;\n\n constructor(\n private _ref: ChangeDetectorRef,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._dispose();\n }\n }\n\n transform(url: string, getfile): any {\n this.getfile = getfile;\n const obj = this.internalTransform(url);\n return this.asyncTrasnform(obj);\n }\n\n private internalTransform(url: string): Observable<any> {\n if (!url) {\n return this.result;\n }\n\n if (this.previousUrl !== url) {\n this.previousUrl = url;\n this._internalSubscription = this.getfile(url).subscribe((m) => {\n const sanitized = this.sanitizer.bypassSecurityTrustUrl(m);\n this._result.next(sanitized);\n });\n }\n\n return this.result;\n }\n\n private asyncTrasnform(obj: Observable<any>): any {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.asyncTrasnform(obj);\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n\n private _subscribe(obj: Observable<any>) {\n const _this = this;\n this._obj = obj;\n\n this._subscription = obj.subscribe({\n next: function (value) {\n return _this._updateLatestValue(obj, value);\n },\n error: (e: any) => {\n throw e;\n }\n });\n }\n\n private _dispose() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n if (this._internalSubscription) {\n this._internalSubscription.unsubscribe();\n }\n\n this._internalSubscription = null;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n\n private _updateLatestValue(async: any, value: Object) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurePipe } from './components/file-upload/secure.pipe';\nimport { DataSources } from './form-entry/data-sources/data-sources';\n@NgModule({\n declarations: [SecurePipe],\n imports: [CommonModule],\n exports: [SecurePipe],\n providers: [DataSources]\n})\nexport class SharedModule {}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n Renderer2,\n ChangeDetectorRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport { SecurePipe } from './secure.pipe';\n@Component({\n selector: 'app-file-upload',\n template: `<lib-file-uploader\n [srcUrl]=\"pdfUrl\"\n [formEntry]=\"formEntryMode\"\n [(ngModel)]=\"fileUuid\"\n (_onClear)=\"clearValue()\"\n (uploadData)=\"onFileChange($event)\"\n>\n</lib-file-uploader>\n<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!pdfUploaded\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this.dataSource.fetchFile\"\n alt=\"\"\n />\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true\n }\n ],\n styles: [\n `\n img {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n `\n ]\n})\nexport class FileUploadComponent implements OnInit, ControlValueAccessor {\n uploading = false;\n fileUuid = null;\n pdfUploaded = false;\n formEntryMode = true;\n pdfUrl: string;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.fileUuid) {\n this.checkFileType();\n }\n }\n public onFileChange(fileList) {\n for (const file of fileList) {\n this.upload(file);\n }\n }\n upload(data) {\n if (this.dataSource) {\n this.uploading = true;\n this.dataSource.fileUpload(data).subscribe(\n (result) => {\n this.fileUuid = result.image;\n this.checkFileType();\n this.propagateChange(this.fileUuid);\n this.uploading = false;\n },\n (error) => {\n this.uploading = false;\n }\n );\n }\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value !== this.fileUuid) {\n this.fileUuid = value;\n this.checkFileType();\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (_: any) => {};\n\n public clearValue() {\n this.fileUuid = null;\n this.pdfUploaded = false;\n this.pdfUrl = null;\n this.propagateChange(this.fileUuid);\n }\n\n public getPdfUrl(fileUuid: string) {\n this.dataSource.fetchFile(fileUuid, 'pdf').subscribe((file) => {\n this.pdfUploaded = true;\n this.pdfUrl = file.changingThisBreaksApplicationSecurity;\n });\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.getPdfUrl(this.fileUuid);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgxFileUploaderModule } from 'ngx-file-uploader';\n\nimport { SharedModule } from '../../shared.module';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { FileUploadComponent } from './file-upload.component';\nimport { WebcamModule } from 'ngx-webcam';\n\n@NgModule({\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n SharedModule,\n WebcamModule,\n NgxFileUploaderModule\n ],\n exports: [FileUploadComponent],\n declarations: [FileUploadComponent],\n providers: []\n})\nexport class RemoteFileUploadModule {}\n","/**\n * date-picker.component\n */\n\nimport { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport * as _ from 'lodash';\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./date-picker.component.css');\n// const myDpTpl: string = require('./date-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'date-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelDatePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">\n <div class=\"picker-header-nav\">\n <span class=\"nav-prev\" (click)=\"prev()\"></span>\n </div>\n <div class=\"picker-header-content\">\n <div class=\"content\">\n <span (click)=\"showMonthSelection()\" class=\"month\">{{\n calendarDate | moment: 'MMMM'\n }}</span>\n <span class=\"seperator\">|</span>\n <span (click)=\"showYearSelection()\" class=\"year\">{{\n calendarDate | moment: 'YYYY'\n }}</span>\n </div>\n </div>\n <div class=\"picker-header-nav\">\n <span class=\"nav-next\" (click)=\"next()\"></span>\n </div>\n </div>\n <div class=\"picker-calendar\">\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span class=\"picker-weekday\" *ngFor=\"let day of dayNames\">{{\n day\n }}</span>\n </div>\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span\n class=\"picker-day\"\n (click)=\"selectDay(day)\"\n [ngClass]=\"{\n 'out-focus': day.month() != calendarDate.month(),\n today: day.isSame(today),\n selected: day.isSame(selectedDate)\n }\"\n *ngFor=\"let day of calendarDays\"\n >\n {{ day | moment: 'D' }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayMonths\">\n <span\n class=\"picker-month\"\n *ngFor=\"let month of monthsShort\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{\n selected: month === currentMonth\n }\"\n >\n {{ month }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayYears\">\n <span\n class=\"picker-year\"\n *ngFor=\"let year of displayYearRange\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{\n selected: year === currentYear\n }\"\n >\n {{ year }}\n </span>\n </div>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-today\" (click)=\"selectToday()\">\n <span class=\"text\">Today</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearPickDate()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelDatePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:666px}.picker-box{font-family:'Open Sans';min-width:400px!important;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;display:flex;height:2.5rem;width:100%}.picker-header-nav{position:relative;cursor:pointer;width:calc(100% / 8)}.picker-header-nav>*{position:absolute;top:50%;right:auto;bottom:auto;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.picker-header-nav .nav-next::before,.picker-header-nav .nav-prev::before{content:' ';border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker-header-nav .nav-next::before{border-right:0;border-left:.75em solid #000}.picker-header-content{width:calc(100% * 6 / 8);text-align:center}.picker-header-content .month{font-size:1.778rem;line-height:2.5rem;margin-right:.5rem;font-weight:700}.picker-header-content .year{font-style:italic;color:#999}.picker-calendar{width:100%}.picker-calendar .picker-calendar-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.625rem}.picker-calendar .picker-weekday{font-weight:700;text-align:left;color:#999;width:calc(100% / 7)}.picker-calendar .picker-day,.picker-calendar .picker-month,.picker-calendar .picker-year{font-size:1.333rem;line-height:2.5rem;position:relative;height:2.5rem;text-align:center;cursor:pointer;width:calc(100% / 7)}.picker-calendar .picker-day:hover,.picker-calendar .picker-month:hover,.picker-calendar .picker-year:hover{background:#b1dcfb}.picker-calendar .out-focus{color:#ddd}.picker-calendar .out-focus:hover{color:#000}.picker-calendar .selected{background:#0089ec;color:#fff}.picker-calendar .selected:hover{background:#0089ec}.picker-calendar .today::before{content:' ';position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker-footer{cursor:pointer}.picker-footer .picker-action{text-align:center;width:calc(100% / 3)}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-today::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-today::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class DatePickerComponent implements OnInit {\n public dayNames: Array<string>;\n\n @Input() public initDate: any;\n @Input() public locale = 'en';\n @Input() public viewFormat = 'll';\n @Input() public returnObject = 'js';\n @Output() public onDatePickerCancel = new EventEmitter<boolean>();\n @Output() public onSelectDate = new EventEmitter<any>();\n\n public calendarDate: Moment;\n public selectedDate: Moment;\n public currentMonth: any;\n public today: Moment;\n public currentYear: number;\n public onDisplayMonths = false;\n public onDisplayYears = false;\n public displayYearsIndex = 0;\n public displayYearRange: Array<number>;\n public fullYearRange: Array<any>;\n public monthsShort: Array<string> = moment.monthsShort();\n public calendarDays: Array<Moment>;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.initValue();\n // default to current year range\n _.each(this.fullYearRange, (v, i) => {\n this.currentYear = this.calendarDate.clone().startOf('year').year();\n if (v.indexOf(this.currentYear) !== -1) {\n this.displayYearsIndex = i;\n }\n });\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n this.generateCalendar();\n }\n\n public prev(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex--;\n if (this.displayYearsIndex < 0) {\n this.displayYearsIndex = 0;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n } else {\n this.calendarDate = this.calendarDate.clone().subtract(1, 'M');\n }\n this.generateCalendar();\n }\n\n public showMonthSelection(): void {\n this.onDisplayMonths = true;\n this.onDisplayYears = false;\n }\n\n public showYearSelection(): void {\n this.onDisplayYears = true;\n this.onDisplayMonths = false;\n }\n\n public next(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex++;\n if (this.displayYearsIndex >= this.fullYearRange.length) {\n this.displayYearsIndex = this.fullYearRange.length - 1;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex++];\n } else {\n this.calendarDate = this.calendarDate.clone().add(1, 'M');\n }\n this.generateCalendar();\n }\n\n public selectDay(day: Moment): void {\n const daysDifference = day.diff(\n this.calendarDate.clone().startOf('date'),\n 'days'\n );\n day = this.calendarDate.clone().add(daysDifference, 'd');\n const selectedDay = this.parseToReturnObjectType(day);\n this.onSelectDate.emit(selectedDay);\n this.cancelDatePicker();\n return;\n }\n\n public selectMonth(month: string) {\n this.calendarDate = this.calendarDate.clone().month(month);\n this.onDisplayMonths = false;\n this.generateCalendar();\n }\n\n public selectYear(year: number) {\n this.calendarDate = this.calendarDate.clone().year(year);\n this.onDisplayYears = false;\n this.generateCalendar();\n }\n\n public selectToday(): void {\n const today = this.parseToReturnObjectType(moment());\n this.onSelectDate.emit(today);\n this.cancelDatePicker();\n return;\n }\n\n public clearPickDate(): void {\n this.onSelectDate.emit(null);\n this.cancelDatePicker();\n return;\n }\n\n public cancelDatePicker(): void {\n this.onDatePickerCancel.emit(false);\n return;\n }\n\n protected generateYears(): void {\n const currentYear = moment().year();\n const startYr = this.calendarDate.clone().subtract(100, 'y').year();\n // const endYr = this.calendarDate.clone().add(10, 'y').year();\n const years = [];\n for (let year = startYr; year <= currentYear; year++) {\n years.push(year);\n }\n\n this.fullYearRange = _.chunk(years, 14);\n }\n\n protected initValue() {\n // set moment locale (default is en)\n moment.locale(this.locale);\n // set today value\n this.today = moment().startOf('date');\n this.currentMonth = this.monthsShort[moment().month()];\n this.currentYear = moment().year();\n\n // set week days name array\n this.dayNames = moment.weekdaysShort(true);\n\n // check if the input initDate has value\n if (this.initDate) {\n this.calendarDate =\n this.returnObject === 'string'\n ? moment(this.initDate, this.viewFormat)\n : moment(this.initDate);\n this.selectedDate = this.calendarDate.clone().startOf('date');\n } else {\n this.calendarDate = moment();\n }\n this.generateYears();\n }\n\n protected generateCalendar(): void {\n this.calendarDays = [];\n const start =\n 0 -\n ((this.calendarDate.clone().startOf('month').day() +\n (7 - moment.localeData().firstDayOfWeek())) %\n 7);\n const end = 41 + start; // iterator ending point\n\n for (let i = start; i <= end; i += 1) {\n const day = this.calendarDate.clone().startOf('month').add(i, 'days');\n this.calendarDays.push(day);\n }\n }\n\n protected parseToReturnObjectType(day: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return day.toDate();\n\n case 'string':\n return day.format(this.viewFormat);\n\n case 'moment':\n return day;\n\n case 'json':\n return day.toJSON();\n\n case 'array':\n return day.toArray();\n\n case 'iso':\n return day.toISOString();\n\n case 'object':\n return day.toObject();\n\n default:\n return day;\n }\n }\n}\n","/**\n * time-picker.component\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./time-picker.component.css');\n// const myDpTpl: string = require('./time-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'time-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelTimePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">Time Picker</div>\n <div class=\"picker-table\">\n <ul class=\"picker-table-time\">\n <li class=\"picker-table-number hour\">\n <span class=\"arrow up\" (click)=\"increaseHour()\"></span>\n {{ time | moment: hourFormat }}\n <span class=\"arrow down\" (click)=\"decreaseHour()\"></span>\n </li>\n <li class=\"picker-table-separator\">:</li>\n <li class=\"picker-table-number minute\">\n <span class=\"arrow up\" (click)=\"increaseMinute()\"></span>\n {{ time | moment: 'mm' }}\n <span class=\"arrow down\" (click)=\"decreaseMinute()\"></span>\n </li>\n <li *ngIf=\"showSecond\" class=\"picker-table-separator\">:</li>\n <li *ngIf=\"showSecond\" class=\"picker-table-number second\">\n <span class=\"arrow up\" (click)=\"increaseSecond()\"></span>\n {{ time | moment: 'ss' }}\n <span class=\"arrow down\" (click)=\"decreaseSecond()\"></span>\n </li>\n <li *ngIf=\"use12Hour\" class=\"picker-table-meridiem meridiem\">\n {{ time | moment: 'A' }}\n </li>\n </ul>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-now\" (click)=\"selectNow()\">\n <span class=\"text\">Now</span>\n </div>\n <div class=\"picker-action action-confirm\" (click)=\"selectTime()\">\n <span class=\"text\">Confirm</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearTime()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelTimePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:40rem;font-family:'Open Sans'}.picker-box{width:100%;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;height:2.5rem;width:100%}.picker-header{text-align:center}.picker-table{width:100%;margin:2.5rem 0}.picker-table-time{font-size:2.37rem;line-height:2.5rem;list-style:none;margin:0;padding:0;display:flex;justify-content:center;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-table-meridiem,.picker-table-number,.picker-table-separator{text-align:center}.picker-table-meridiem,.picker-table-number{position:relative;width:20%}.arrow{position:absolute;left:50%;border:solid #777;border-width:0 .2rem .2rem 0;display:inline-block;padding:.25rem;cursor:pointer}.arrow.up{top:-1rem;-webkit-transform:translateX(-50%) rotate(-135deg);transform:translateX(-50%) rotate(-135deg)}.arrow.down{bottom:-1rem;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.arrow:hover{border-color:#1975d2}.picker-table-separator{width:calc(20% / 3)}.picker-footer{display:flex;justify-content:center;width:100%;cursor:pointer}.picker-footer .picker-action{width:25%;text-align:center}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-confirm::before,.picker-footer .action-now::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-now::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-confirm::before{width:1rem;height:1rem;border-radius:100%;background-color:#00b5ad}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class TimePickerComponent implements OnInit {\n @Input() initTime: any;\n @Input() showSecond = true;\n @Input() viewFormat = 'hh:mm A';\n @Input() use12Hour = false;\n @Input() returnObject = 'js';\n @Output() onSelectTime = new EventEmitter<any>();\n @Output() onTimePickerCancel = new EventEmitter<boolean>();\n hourFormat = 'HH';\n public time: Moment;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.use12Hour) {\n this.hourFormat = 'hh';\n }\n this.time = this.initTime\n ? moment(this.initTime, this.viewFormat)\n : moment();\n\n // check if the input initDate has value\n if (this.initTime) {\n this.time =\n this.returnObject === 'string'\n ? moment(this.initTime, this.viewFormat)\n : moment(this.initTime);\n } else {\n this.time = moment();\n }\n }\n\n increaseHour(): void {\n this.time = this.time.clone().add(1, 'h');\n }\n\n decreaseHour(): void {\n this.time = this.time.clone().subtract(1, 'h');\n }\n\n increaseMinute() {\n this.time = this.time.clone().add(1, 'm');\n }\n\n decreaseMinute() {\n this.time = this.time.clone().subtract(1, 'm');\n }\n\n increaseSecond(): void {\n this.time = this.time.clone().add(1, 's');\n }\n\n decreaseSecond(): void {\n this.time = this.time.clone().subtract(1, 's');\n }\n\n selectTime(): void {\n const selectTime = this.parseToReturnObjectType(this.time);\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n selectNow(): void {\n const selectTime = this.parseToReturnObjectType(moment());\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n clearTime(): void {\n this.onSelectTime.emit(null);\n this.cancelTimePicker();\n return;\n }\n\n cancelTimePicker(): void {\n this.onTimePickerCancel.emit(false);\n return;\n }\n\n protected parseToReturnObjectType(time: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return time.toDate();\n\n case 'string':\n return time.format(this.viewFormat);\n\n case 'moment':\n return time;\n\n case 'json':\n return time.toJSON();\n\n case 'array':\n return time.toArray();\n\n case 'iso':\n return time.toISOString();\n\n case 'object':\n return time.toObject();\n\n default:\n return time;\n }\n }\n}\n","/**\n * modal.component\n */\n\nimport {\n Component,\n Output,\n OnInit,\n EventEmitter,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./modal.component.css');\n// const myDpTpl: string = require('./modal.component.html');\n// webpack2_\n\n@Component({\n selector: 'picker-modal',\n template: `<section class=\"x-modal\">\n <section class=\"modal-overlay\" (click)=\"closeModal()\"></section>\n <section class=\"modal-main\" id=\"section-modal-main\">\n <ng-content></ng-content>\n </section>\n</section>\n`,\n styles: [`:host{z-index:9999999999}*,::after,::before{box-sizing:border-box}.modal-main{position:absolute;left:19.6%;right:auto;top:auto;z-index:111;background-color:#fff;border:1px solid #d7dad7;border-radius:6px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);box-shadow:0 5px 15px rgba(0,0,0,.3)}`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: []\n})\nexport class ModalComponent implements OnInit {\n @Output() onOverlayClick = new EventEmitter<boolean>();\n\n constructor() {}\n\n ngOnInit() {}\n\n closeModal() {\n this.onOverlayClick.emit(false);\n }\n}\n","/**\n * moment.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Moment } from 'moment/moment';\n\n@Pipe({ name: 'moment' })\nexport class MomentPipe implements PipeTransform {\n transform(moment: Moment, format?: string): string {\n return format ? moment.format(format) : moment.format('MMM DD, YYYY');\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\n\nconst Moment = moment_;\n\n@Component({\n selector: 'date-time-picker',\n template: `<div class=\"row\">\n <div *ngIf=\"!showTime\" class=\"col-xs-12 col-md-12\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-8 col-md-8\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-4 col-md-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n </div>\n</div>\n<date-picker\n *ngIf=\"showDatePicker\"\n [initDate]=\"value\"\n (onSelectDate)=\"setDate($event)\"\n (onDatePickerCancel)=\"toggleDatePicker($event)\"\n></date-picker>\n\n<time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"setTime($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n></time-picker>\n`,\n styles: [`input[readonly]{background-color:#fff}.up{bottom:100%!important;top:auto!important}.glyphicon{top:1px}`],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor {\n @Input() modelValue: any;\n @Input() showDate = true;\n @Input() showTime = false;\n @Input() showWeeks = false;\n @Input() weeks: number[] = [2, 4, 6, 8, 12, 16, 24];\n @Output() onDateChange = new EventEmitter<any>();\n public showDatePicker = false;\n public showTimePicker = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor() {}\n\n ngOnInit() {}\n\n weeksSelected(count) {\n const now = new Date();\n const nextDate = now.setDate(now.getDate() + count * 7);\n this.value = Moment(nextDate).format();\n }\n setDate(date: any): void {\n if (date && date !== '') {\n this.value = Moment(date).format();\n } else {\n this.value = date;\n }\n }\n\n setTime(time: any): void {\n if (time && time !== '') {\n this.value = Moment(time).format();\n } else {\n this.value = time;\n }\n return;\n }\n\n toggleDatePicker(status: boolean): void {\n this.showDatePicker = status;\n /*setTimeout(function() {\n let _body = document.getElementById('content-wrapper').getBoundingClientRect(),\n elem = document.getElementById('section-modal-main');\n if (elem) {\n let elemBox = elem.getBoundingClientRect();\n if (elemBox.bottom > _body.bottom) {\n elem.style.bottom = '36px';\n }\n }\n }, 0);*/\n return;\n }\n\n toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n get value() {\n return this.modelValue;\n }\n\n set value(val) {\n this.modelValue = val;\n this.onDateChange.emit(val);\n this.onChange(val);\n this.onTouched();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n writeValue(value) {\n if (value instanceof Date) {\n this.value = Moment(value).format();\n } else {\n this.value = value;\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { TimePickerComponent } from './time-picker/time-picker.component';\nimport { ModalComponent } from './picker-modal/modal.component';\nimport { MomentPipe } from './pipes/moment.pipe';\nimport { DateTimePickerComponent } from './date-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n exports: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n providers: []\n})\nexport class DateTimePickerModule {}\n","import { Moment } from 'moment/moment';\n\nimport {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormControl\n} from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'LL'\n },\n display: {\n dateInput: 'LL',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY'\n }\n};\n\n@Component({\n selector: 'ngx-date-time-picker',\n template: `<div>\n <div class=\"row\">\n <div [class]=\"getDatePickerCssClass()\">\n <div class=\"input-group\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n class=\"form-control\"\n [value]=\"value\"\n placeholder=\"Choose a date\"\n (dateChange)=\"onDateSelect($event)\"\n (click)=\"picker.open()\"\n readonly\n />\n <mat-datepicker #picker disabled=\"false\"></mat-datepicker>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n class=\"input-group-btn\"\n ></mat-datepicker-toggle>\n </div>\n </div>\n <div [class]=\"getWeekPickerCssClass()\" *ngIf=\"showWeeks\">\n <mat-select\n placeholder=\"Select Weeks\"\n class=\"form-control\"\n name=\"weeks\"\n (selectionChange)=\"weekSelect($event)\"\n >\n <mat-option *ngFor=\"let count of weeks\" [value]=\"count\">\n {{ count }} Weeks\n </mat-option>\n </mat-select>\n </div>\n <div [class]=\"getTimePickerCssClass()\" *ngIf=\"showTime\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n <time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"onTimeSelect($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n ></time-picker>\n </div>\n </div>\n</div>\n`,\n styles: [`#time-section{display:inline-block}#ngx-atp-time-picker,#ngx-mat-form-field{width:100%}.up{bottom:100%!important;top:auto!important}.time-btn{margin-top:-20px}`],\n providers: [\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n { provide: DateAdapter, useClass: MomentDateAdapter },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class NgxDateTimePickerComponent\n implements OnInit, ControlValueAccessor {\n // public date = new FormControl(moment());\n public selectedTime = moment().format();\n public selectedDate = moment().format();\n public loadInitial = false;\n public value;\n public showTimePicker = false;\n @Input() weeks: number[] = [0, 2, 4, 6, 8, 12, 16, 24];\n @Input() modelValue: any;\n @Input() showTime = false;\n @Input() showWeeks = true;\n @Output() onDateChange = new EventEmitter<any>();\n public onChange: any = () => {};\n public onTouched: any = () => {};\n public ngOnInit() {}\n\n public writeValue(value) {\n this.value = value;\n }\n\n public registerOnChange(fn) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn) {}\n\n public onTimeSelect($event) {\n const setDate = moment(this.selectedDate);\n const setTime = $event;\n this.setDateTime(setDate, setTime);\n }\n\n public onDateSelect($event) {\n const setDate = moment($event.value);\n const setTime = this.selectedTime;\n const dateString = this.setDateTime(setDate, setTime);\n\n const selectedDate = $event.value;\n this.value = dateString;\n }\n\n public toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n\n public setCurrentTime() {\n const setDate = moment(this.selectedDate);\n const currentTime = moment().format('HH:mm:ss');\n this.setDateTime(setDate, currentTime);\n }\n\n public weekSelect($event) {\n const dateToUse = moment().format();\n const nextWeekDate = moment(dateToUse).add($event.value, 'weeks');\n const nextWeekTime = dateToUse;\n this.setDateTime(nextWeekDate, nextWeekTime);\n }\n\n public selectionChange($event) {\n console.log('Week selected', $event);\n }\n\n public getWeekPickerCssClass() {\n if (this.showTime) {\n return 'col-sm-2 form-group';\n }\n return 'col-sm-3 form-group';\n }\n\n public getDatePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n\n if (this.showTime === true) {\n return 'col-sm-8 form-group';\n }\n return 'col-sm-12 form-group';\n }\n\n public getTimePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n return 'col-sm-4 form-group';\n }\n\n public setDateTime(setDate, setTime) {\n const newDate = moment(setDate).format('DD-MM-YYYY');\n let newTime;\n if (this.showTime) {\n newTime = moment(setTime).format('HH:mm:ss');\n } else {\n newTime = '00:00:00';\n }\n const newDateTime = moment(newDate + '' + newTime, 'DD-MM-YYYY HH:mm:ss');\n const dateTimeString = moment(newDateTime).format();\n this.selectedDate = dateTimeString;\n this.selectedTime = dateTimeString;\n this.value = dateTimeString;\n this.onChange(this.value);\n\n return dateTimeString;\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatNativeDateModule, MatInputModule } from '@angular/material';\nimport { NgxDateTimePickerComponent } from './ngx-date-time-picker.component';\n// import { AmazingTimePickerModule } from 'amazing-time-picker';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n DateTimePickerModule,\n // AmazingTimePickerModule,\n MatSelectModule\n ],\n declarations: [NgxDateTimePickerComponent],\n exports: [\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n NgxDateTimePickerComponent\n ],\n providers: []\n})\nexport class NgxDateTimePickerModule {}\n","import { SelectOption } from './interfaces/select-option';\nexport class Option {\n label: string;\n value: any;\n constructor(options: SelectOption) {\n this.label = options.label;\n this.value = options.value;\n }\n}\n","import { Component, Input, forwardRef, OnInit, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { Option } from '../form-entry/question-models/select-option';\n\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\n@Component({\n selector: 'afe-ng-select',\n template: `<ng-select\n (searchInputText)=\"getChangingText($event)\"\n (ngModelChange)=\"onValueChange($event)\"\n [options]=\"question_options\"\n [multiple]=\"multiple\"\n >\n </ng-select> `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfeNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class AfeNgSelectComponent\n implements ControlValueAccessor, OnInit, OnChanges {\n subject: BehaviorSubject<Option[]>;\n subjectOption: BehaviorSubject<Option>;\n @Input() dataSource: DataSource;\n @Input() multiple: boolean;\n @Input() extras: any;\n question_options: any = [];\n selected_question_option: any;\n errors: any = [];\n propagateChange = (_: any) => {};\n\n getChangingText(event) {\n // console.log(event);\n this.getData(event).subscribe((options) => {\n this.question_options = options;\n });\n }\n\n writeValue(obj: any): void {}\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n ngOnChanges(changes: any) {}\n\n ngOnInit() {\n if (this.extras) {\n if (this.extras.originalValue) {\n this.resolveSelectedOption(this.extras.originalValue).subscribe(\n (option) => {\n this.selected_question_option = option;\n }\n );\n }\n }\n }\n\n getData(searchText: string): Observable<Option[]> {\n this.subject = new BehaviorSubject<Option[]>([]);\n\n const OptionsObservable = this.dataSource.searchOptions(searchText);\n\n OptionsObservable.subscribe(\n (options) => {\n // console.log('options', options);\n const mappedOptions: Option[] = new Array<Option>();\n\n for (let i = 0; i < options.length; i++) {\n mappedOptions.push(new Option(options[i]));\n }\n this.subject.next(mappedOptions);\n },\n (error) => {\n this.subject.error(error);\n }\n );\n\n return this.subject.asObservable();\n }\n\n onValueChange(event) {}\n resolveSelectedOption(value: any): Observable<Option> {\n this.subjectOption = new BehaviorSubject<Option>(null);\n const OptionObservable = this.dataSource.resolveSelectedValue(value);\n\n OptionObservable.subscribe(\n (option) => {\n // console.log('option', option);\n this.subjectOption.next(option);\n },\n (error) => {\n this.subjectOption.error(error);\n }\n );\n\n return this.subjectOption.asObservable();\n }\n\n resetOptions() {\n this.subject.next(new Array<Option>());\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FormSchemaCompiler {\n constructor() {}\n\n public compileFormSchema(\n formSchema: Object,\n referencedComponents: Array<any>\n ): Object {\n // get all referenced forms\n const refForms: Object = this.getReferencedForms(\n formSchema,\n referencedComponents\n );\n if (_.isEmpty(refForms)) {\n return formSchema;\n }\n\n // get all place-holders from the form schema\n const placeHolders = this.getAllPlaceholderObjects(formSchema);\n if (_.isEmpty(placeHolders)) {\n return formSchema;\n }\n\n // replace all placeHolders\n this.replaceAllPlaceholdersWithActualObjects(refForms, placeHolders);\n return formSchema;\n }\n\n private findSchemaByName(\n schemaArray: Array<any>,\n nameOfSchema: string\n ): Object {\n if (_.isEmpty(schemaArray) || _.isEmpty(nameOfSchema)) {\n return;\n }\n let foundSchema: any = {};\n _.each(schemaArray, (schema: any) => {\n if (schema.name === nameOfSchema) {\n foundSchema = schema;\n }\n });\n return foundSchema;\n }\n\n private getPageInSchemaByLabel(schema: any, pageLabel: string): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel)) {\n return;\n }\n let foundPage: Object = {};\n _.each(schema.pages, (page) => {\n if (page.label === pageLabel) {\n foundPage = page;\n }\n });\n return foundPage;\n }\n\n private getSectionInSchemaByPageLabelBySectionLabel(\n schema: Object,\n pageLabel: string,\n sectionLabel: string\n ): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel) || _.isEmpty(sectionLabel)) {\n return;\n }\n const foundPage: any = this.getPageInSchemaByLabel(schema, pageLabel);\n if (_.isEmpty(foundPage)) {\n return;\n }\n let foundSection: Object = {};\n _.each(foundPage.sections, (section) => {\n if (section.label === sectionLabel) {\n foundSection = section;\n }\n });\n return foundSection;\n }\n\n private getQuestionByIdInSchema(schema: any, questionId: string): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n if (Array.isArray(schema)) {\n let question: Array<any>;\n for (let i = 0; i < schema.length; i++) {\n if (!_.isEmpty(schema[i])) {\n question = this.getQuestionByIdInSchema(schema[i], questionId);\n }\n if (!_.isEmpty(question)) {\n break;\n }\n }\n return question;\n } else if (typeof schema === 'object') {\n if (this.isQuestionObjectWithId(schema, questionId)) {\n return schema;\n } else if (this.isSchemaSubObjectExpandable(schema)) {\n const toExpand = schema.pages || schema.sections || schema.questions;\n return this.getQuestionByIdInSchema(toExpand, questionId);\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n private getQuestionsArrayByQuestionIdInSchema(\n schema: any,\n questionId: string\n ): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n return this.getQuestionsArrayByQuestionId(schema, schema, questionId);\n }\n\n private getQuestionsArrayByQuestionId(\n parent: any,\n object: any,\n questionId: string\n ): Array<any> {\n if (Array.isArray(object)) {\n let returnedValue: Array<any>;\n for (let i = 0; i < object.length; i++) {\n if (!_.isEmpty(object[i])) {\n returnedValue = this.getQuestionsArrayByQuestionId(\n object,\n object[i],\n questionId\n );\n }\n if (!_.isEmpty(returnedValue)) {\n break;\n }\n }\n\n return returnedValue;\n } else if (typeof object === 'object') {\n if (this.isQuestionObjectWithId(object, questionId)) {\n return parent;\n } else if (this.isSchemaSubObjectExpandable(object)) {\n const toExpand = object.pages || object.sections || object.questions;\n return this.getQuestionsArrayByQuestionId(\n toExpand,\n toExpand,\n questionId\n );\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n // object is page or section or question\n private isSchemaSubObjectExpandable(object: Object): Boolean {\n if (typeof object === 'object') {\n const objectKeys = Object.keys(object);\n if (\n _.includes(objectKeys, 'pages') ||\n _.includes(objectKeys, 'sections') ||\n _.includes(objectKeys, 'questions')\n ) {\n return true;\n }\n }\n return false;\n }\n\n private isQuestionObjectWithId(object: Object, id: any): Boolean {\n return object['id'] === id;\n }\n\n private getAllPlaceholderObjects(schema: Object): Array<any> {\n const referencedObjects: Array<any> = [];\n this.extractPlaceholderObjects(schema, referencedObjects);\n return referencedObjects;\n }\n\n private extractPlaceholderObjects(\n subSchema: any,\n objectsArray: Array<Object>\n ): void {\n if (_.isEmpty(subSchema)) {\n return;\n }\n if (Array.isArray(subSchema)) {\n for (let i = 0; i < subSchema.length; i++) {\n if (!_.isEmpty(subSchema[i])) {\n this.extractPlaceholderObjects(subSchema[i], objectsArray);\n }\n }\n } else if (typeof subSchema === 'object') {\n if (!_.isEmpty(subSchema.reference)) {\n objectsArray.push(subSchema);\n } else if (this.isSchemaSubObjectExpandable(subSchema)) {\n const toExpand =\n subSchema.pages || subSchema.sections || subSchema.questions;\n this.extractPlaceholderObjects(toExpand, objectsArray);\n }\n }\n }\n\n private fillPlaceholderObject(\n placeHolderObject: Object,\n referenceObject: Object\n ): Object {\n for (const member in referenceObject) {\n if (_.isEmpty(placeHolderObject[member])) {\n placeHolderObject[member] = referenceObject[member];\n }\n }\n return placeHolderObject;\n }\n\n private replaceAllPlaceholdersWithActualObjects(\n keyValReferencedForms: Object,\n placeHoldersArray: Array<any>\n ): Array<any> {\n _.each(placeHoldersArray, (placeHolder) => {\n const referencedObject: Object = this.getReferencedObject(\n placeHolder.reference,\n keyValReferencedForms\n );\n\n if (_.isEmpty(referencedObject)) {\n console.error(\n 'Form compile: Error finding referenced object',\n placeHolder.reference\n );\n } else {\n placeHolder = this.fillPlaceholderObject(placeHolder, referencedObject);\n placeHolder = this.removeExcludedQuestionsFromPlaceholder(placeHolder);\n delete placeHolder['reference'];\n }\n });\n return placeHoldersArray;\n }\n\n private removeObjectFromArray(array: Array<any>, object: Object): void {\n const indexOfObject = array.indexOf(object);\n if (indexOfObject === -1) {\n return;\n }\n\n array.splice(indexOfObject, 1);\n }\n\n private removeExcludedQuestionsFromPlaceholder(placeHolder: any): Object {\n if (Array.isArray(placeHolder.reference.excludeQuestions)) {\n _.each(placeHolder.reference.excludeQuestions, (excludedQuestionId) => {\n const questionsArray: Array<any> = this.getQuestionsArrayByQuestionIdInSchema(\n placeHolder,\n excludedQuestionId\n );\n\n if (!Array.isArray(questionsArray)) {\n return;\n }\n const question = this.getQuestionByIdInSchema(\n questionsArray,\n excludedQuestionId\n );\n\n this.removeObjectFromArray(questionsArray, question);\n });\n }\n return placeHolder;\n }\n\n private getReferencedObject(\n referenceData: any,\n keyValReferencedForms: Object\n ): Object {\n if (_.isEmpty(referenceData.form)) {\n console.error(\n 'Form compile: reference missing form attribute',\n referenceData\n );\n return;\n }\n if (_.isEmpty(keyValReferencedForms[referenceData.form])) {\n console.error(\n 'Form compile: referenced form alias not found',\n referenceData\n );\n return;\n }\n if (!_.isEmpty(referenceData.questionId)) {\n return this.getQuestionByIdInSchema(\n keyValReferencedForms[referenceData.form],\n referenceData.questionId\n );\n }\n\n if (!_.isEmpty(referenceData.page) && !_.isEmpty(referenceData.section)) {\n return this.getSectionInSchemaByPageLabelBySectionLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page,\n referenceData.section\n );\n }\n if (!_.isEmpty(referenceData.page)) {\n return this.getPageInSchemaByLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page\n );\n }\n console.error(\n 'Form compile: Unsupported reference type',\n referenceData.reference\n );\n }\n\n private getReferencedForms(\n formSchema: any,\n formSchemasLookupArray: Array<any>\n ): Object {\n const referencedForms: Array<any> = formSchema.referencedForms;\n\n if (_.isEmpty(referencedForms)) {\n return;\n }\n\n const keyValReferencedForms: Object = {};\n\n _.each(referencedForms, (reference: any) => {\n keyValReferencedForms[reference.alias] = this.findSchemaByName(\n formSchemasLookupArray,\n reference.formName\n );\n });\n return keyValReferencedForms;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TextQuestionOptions } from './interfaces/text-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextInputQuestion extends QuestionBase {\n placeholder: string;\n constructor(options: TextQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { TextInputQuestion } from './text-input-question';\nimport { TextAreaQuestionOptions } from './interfaces/text-area-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextAreaInputQuestion extends TextInputQuestion {\n isExpanded: boolean;\n rows: number;\n\n constructor(options: TextAreaQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.isExpanded = options.isExpanded || false;\n this.rows = options.rows || 18;\n this.renderingType = 'textarea';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { SelectQuestionOptions } from './interfaces/select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class SelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n dataSource?: any;\n\n constructor(options: SelectQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n this.dataSource = options.dataSource || '';\n }\n}\n","import { QuestionBase } from './question-base';\nimport { UiSelectQuestionOptions } from './interfaces/ui-select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class UiSelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n searchFunction: Function;\n resolveFunction: Function;\n constructor(options: UiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'ui-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { DateQuestionOptions } from './interfaces/date-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class DateQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n constructor(options: DateQuestionOptions) {\n super(options);\n this.renderingType = 'date';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { SelectQuestion } from './select-question';\nimport { MultiSelectQuestionOptions } from './interfaces/multi-select-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class MultiSelectQuestion extends SelectQuestion {\n options: { key: string; value: string }[];\n\n constructor(options: MultiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'multi-select' || 'single-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from '../question-base';\nimport { BaseOptions } from './base-options';\n\nexport abstract class NestedQuestion extends QuestionBase {\n abstract questions: QuestionBase[];\n constructor(options: BaseOptions) {\n super(options);\n }\n}\n","import { QuestionBase } from './question-base';\nimport { GroupQuestionOptions } from './interfaces/group-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class QuestionGroup extends NestedQuestion {\n questions: QuestionBase[];\n isExpanded = true;\n\n constructor(options: GroupQuestionOptions) {\n super(options);\n this.renderingType = 'group';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormGroup;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { RepeatingQuestionOptions } from './interfaces/repeating-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class RepeatingQuestion extends NestedQuestion {\n questions: QuestionBase[];\n\n constructor(options: RepeatingQuestionOptions) {\n super(options);\n this.renderingType = 'repeating';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormArray;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { CheckboxOptions } from './interfaces/checkbox-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class CheckBoxQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n\n constructor(options: CheckboxOptions) {\n super(options);\n this.renderingType = 'checkbox' || 'radio';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TimeQuestionOptions } from './interfaces/time-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TimeQuestion extends QuestionBase {\n constructor(options: TimeQuestionOptions) {\n super(options);\n this.renderingType = 'time';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { FileUploadQuestionOptions } from './interfaces/file-upload-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class FileUploadQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n dataSource?: any;\n constructor(options: FileUploadQuestionOptions) {\n super(options);\n this.renderingType = 'file';\n this.dataSource = options.dataSource;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TestOrderQuestionOptions } from './interfaces/test-order-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TestOrderQuestion extends QuestionBase {\n orderType: string;\n selectableOrders: { concept: string; label: string }[];\n orderSettingUuid: string;\n rendering: string;\n options: any[];\n constructor(options: TestOrderQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.orderType = options.orderType;\n this.selectableOrders = options.selectableOrders;\n this.options = options.options;\n this.orderSettingUuid = options.orderSettingUuid;\n this.rendering = options.orderSettingUuid;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class DateValidationModel extends ValidationModel {\n allowFutureDates = false;\n\n constructor(validations: any) {\n super(validations);\n\n this.allowFutureDates =\n validations.allowFutureDates === 'true' ? true : false;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MaxValidationModel extends ValidationModel {\n max: number;\n\n constructor(validations: any) {\n super(validations);\n const max: any = validations.max;\n this.max = +max;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MinValidationModel extends ValidationModel {\n min: number;\n\n constructor(validations: any) {\n super(validations);\n const min: any = validations.min;\n this.min = +min;\n }\n}\n","export class DecimalPointValidationModel {\n type: string;\n message: string;\n decimalPlace = 0;\n failsWhenExpression = '';\n\n constructor(validations: any) {\n this.type = 'js_expression';\n this.decimalPlace = validations.decimalPlace;\n }\n setFailExpression(): void {\n this.failsWhenExpression = `!isEmpty(myValue) && String(myValue).split('.')[1].length !== ${this.decimalPlace}`;\n }\n setMessage() {\n this.message = `Value must be to ${this.decimalPlace} decimal places`;\n }\n setValuesAndExpressions() {\n this.setMessage();\n this.setFailExpression();\n }\n}\n","import { Option } from '../question-models/select-option';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\n\nexport class DummyDataSource implements DataSource {\n options: Observable<Option[]>;\n option: Observable<Option>;\n returnErrorOnNext = false;\n\n constructor() {}\n\n resolveSelectedValue(value): Observable<Option> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter((option) => option.value === value);\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions[0]);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n fileUpload(url) {\n return of({ image: '' });\n }\n fetchFile(url) {\n return of({ image: '' });\n }\n searchOptions(searchText): Observable<Option[]> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter(\n (option) => option.label.indexOf(searchText) !== -1\n );\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n\n sampleData(): any {\n return [\n {\n concept: 'a899e0ac-1350-11df-a1f1-0026b9348838',\n label: 'None'\n },\n {\n concept: 'a8ad1276-1350-11df-a1f1-0026b9348838',\n label: 'Breathlessness'\n },\n {\n concept: 'a892e4b4-1350-11df-a1f1-0026b9348838',\n label: 'Chest pain'\n },\n {\n concept: 'a8afc8b8-1350-11df-a1f1-0026b9348838',\n label: 'Cough = 2 weeks'\n },\n {\n concept: 'd7adae14-c386-49cc-8f7c-765d8ceec566',\n label: 'Fever for = 2 weeks'\n },\n {\n concept: '3f57aafc-7162-41da-a51b-6a804cb6f5e8',\n label: 'New exposure to household contact with TB'\n },\n {\n concept: 'a89807f0-1350-11df-a1f1-0026b9348838',\n label: 'Noticeable Weight loss'\n },\n {\n concept: 'e1862fef-68ed-4df4-90dd-a00152f719aa',\n label: 'Night sweats = 2 weeks'\n },\n {\n concept: 'a8ad462e-1350-11df-a1f1-0026b9348838',\n label: 'Abdomen'\n },\n {\n concept: 'f218c60e-4b54-475a-a4fa-facab9216da8',\n label: 'Groin'\n },\n {\n concept: 'a8a774b0-1350-11df-a1f1-0026b9348838',\n label: 'Joints'\n },\n {\n concept: '4639388c-ee31-4dcf-abb4-ad71253493bb',\n label: 'Neck Kw'\n }\n ];\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class HistoricalEncounterDataService {\n dataSources: any = {};\n constructor() {}\n\n registerEncounters(name: string, encounters: any) {\n const encStore: any = {\n data: [],\n getValue: (key: string, index = 0): any => {\n const pathArray = key.split('.');\n if (pathArray.length > 0) {\n return this.getFirstValue(pathArray, encStore.data[index]);\n }\n return encStore.data[index][key];\n },\n getAllObjects: () => {\n return encStore.data;\n },\n getSingleObject: (index = 0) => {\n return encStore.data[index];\n }\n };\n\n if (_.isArray(encounters)) {\n const group: Array<any> = [];\n _.each(encounters, (encounter) => {\n group.push(this._transformEncounter(encounter));\n });\n\n // Sort them in reverse chronological order\n encStore.data = _.sortBy(group, 'encounterDatetime').reverse();\n } else {\n // Assume a single openmrs rest encounter object.\n encStore.data.push(this._transformEncounter(encounters));\n }\n\n this.putObject(name, encStore);\n }\n\n putObject(name, object): void {\n this.dataSources[name] = object;\n }\n\n getObject(name: string): any {\n return this.dataSources[name] || null;\n }\n\n getFirstValue(path: Array<string>, object: any): any {\n const answers = [];\n\n this.getAllValues(path, object, answers);\n\n if (answers.length > 0) {\n return {\n value: answers[0],\n valueDate: moment(object.encounterDatetime).format('ll')\n };\n }\n }\n\n getAllValues(path, object, answers) {\n if (_.isNil(object)) {\n return;\n }\n\n if (path.length <= 1) {\n if (!_.isNil(object[path[0]])) {\n answers.push(object[path[0]]);\n }\n return;\n }\n\n const newpath = path.splice(1);\n const key = path[0];\n\n if (_.isArray(object[key]) && object[key].length > 0) {\n _.each(object[key], (childObject) => {\n this.getAllValues(newpath.slice(0), childObject, answers);\n });\n } else {\n this.getAllValues(newpath.slice(0), object[key], answers);\n }\n }\n\n private _transformEncounter(encounter: any) {\n if (_.isNil(encounter)) {\n return;\n }\n // Transform encounter Level details to key value pairs.\n const prevEncounter: any = {\n encounterDatetime: encounter.encounterDatetime\n };\n\n if (encounter.location && encounter.location.uuid) {\n prevEncounter.location = encounter.location.uuid;\n }\n\n if (encounter.patient && encounter.patient.uuid) {\n prevEncounter.patient = encounter.patient.uuid;\n }\n\n if (encounter.form && encounter.form.uuid) {\n prevEncounter.form = encounter.form.uuid;\n }\n\n if (encounter.encounterType && encounter.encounterType.uuid) {\n prevEncounter.encounterType = encounter.encounterType.uuid;\n }\n\n if (encounter.provider) {\n const provider = encounter.provider;\n prevEncounter.provider = provider.uuid;\n }\n\n // Deal with obs.\n if (encounter.obs) {\n const processedObs: any = this._transformObs(encounter.obs);\n\n // add in individual processed obs to prevEncounter\n _.extend(prevEncounter, processedObs);\n }\n\n return prevEncounter;\n }\n\n private _transformObs(obs: any): any {\n if (!obs) {\n return null;\n }\n\n const obsRep: any = {};\n if (_.isArray(obs)) {\n _.each(obs, (singleObs) => {\n this._augumentObs(obsRep, this._transformObs(singleObs));\n });\n return obsRep;\n } else if (obs.groupMembers) {\n const group: any = {};\n _.each(obs.groupMembers, (member) => {\n this._augumentObs(group, this._transformObs(member));\n });\n\n // Handle already existing data\n if (obsRep[obs.concept.uuid] && _.isArray(obsRep[obs.concept.uuid])) {\n obsRep[obs.concept.uuid].push(group);\n } else {\n obsRep[obs.concept.uuid] = [group];\n }\n return obsRep;\n } else {\n if (obs.value instanceof Object) {\n obsRep[obs.concept.uuid] = obs.value.uuid;\n } else {\n obsRep[obs.concept.uuid] = obs.value;\n }\n return obsRep;\n }\n }\n\n private _augumentObs(existing: any, toAdd: any): any {\n for (const key in toAdd) {\n if (_.has(existing, key)) {\n // check if not an array yet\n if (!_.isArray(existing[key])) {\n const temp = existing[key];\n existing[key] = [temp];\n }\n\n // Check whether the incoming is array (for group members)\n if (_.isArray(toAdd[key])) {\n Array.prototype.push.apply(existing[key], toAdd[key]);\n } else {\n existing[key].push(toAdd[key]);\n }\n } else {\n existing[key] = toAdd[key];\n }\n }\n return existing;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { HistoricalEncounterDataService } from '../services/historical-encounter-data.service';\nimport { JsExpressionHelper } from './js-expression-helper';\nimport {\n Runnable,\n ExpressionRunner\n} from '../expression-runner/expression-runner';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\n@Injectable()\nexport class HistoricalHelperService {\n constructor() {}\n\n public evaluate(\n expr: string,\n dataSources: any,\n additionalScopevalues: any\n ): any {\n const HD = new HistoricalEncounterDataService();\n HD.registerEncounters('prevEnc', dataSources['rawPrevEnc']);\n const deps: any = {\n HD: HD\n };\n\n if (additionalScopevalues) {\n for (const o in additionalScopevalues) {\n if (additionalScopevalues[o]) {\n deps[o] = additionalScopevalues[o];\n }\n }\n }\n\n const helper = new JsExpressionHelper();\n const control: AfeFormControl = new AfeFormControl();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n expr,\n control,\n helper.helperFunctions,\n deps\n );\n\n return runnable.run();\n }\n\n public evaluatePrecondition(\n expr: string,\n dataSources: any,\n historicalValue: any\n ): any {\n const additionalScope = {\n histValue: historicalValue\n };\n\n return this.evaluate(expr, dataSources, additionalScope);\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport { TextInputQuestion } from '../question-models/text-input-question';\nimport { TextAreaInputQuestion } from '../question-models/text-area-input-question';\nimport { SelectQuestion } from '../question-models/select-question';\nimport { UiSelectQuestion } from '../question-models/ui-select-question';\nimport { DateQuestion } from '../question-models/date-question';\nimport { TimeQuestion } from './../question-models/time-question';\nimport { MultiSelectQuestion } from '../question-models/multi-select-question';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { RepeatingQuestion } from '../question-models/repeating-question';\nimport { QuestionBase } from '../question-models/question-base';\nimport { FileUploadQuestion } from '../question-models/file-upload-question';\nimport { TestOrderQuestion } from '../question-models/test-order-question';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { DecimalPointValidationModel } from '../question-models/decimal-point-validation.model';\nimport { DummyDataSource } from '../data-sources/dummy-data-source';\nimport { HistoricalHelperService } from '../helpers/historical-expression-helper-service';\nimport { Form } from './form';\nimport { CheckBoxQuestion } from '../question-models/models';\n\nexport class QuestionFactory {\n dataSources: any = {};\n historicalHelperService: HistoricalHelperService = new HistoricalHelperService();\n constructor() {}\n\n createQuestionModel(formSchema: any, form?: Form): QuestionBase {\n if (form) {\n const dataSources = form.dataSourcesContainer.dataSources;\n this.dataSources = dataSources;\n }\n return this.toFormQuestionModel(formSchema);\n }\n\n toSelectQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n\n const options: any = question.options;\n options.splice(0, 0, {\n label: '',\n value: ''\n });\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumericQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumberQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDecimalQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'decimal';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDateQuestion(schemaQuestion: any): DateQuestion {\n if (schemaQuestion.type === 'encounterDatetime') {\n return this.toEncounterDatetimeQuestion(schemaQuestion);\n }\n const question = new DateQuestion({ type: '', key: '' });\n question.renderingType = 'date';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showTime = schemaQuestion.questionOptions.showTime as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTimeQuestion(schemaQuestion: any): TimeQuestion {\n const question = new TimeQuestion({ type: '', key: '' });\n question.renderingType = 'time';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterDatetimeQuestion(schemaQuestion: any): DateQuestion {\n const question = new DateQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.renderingType = 'date';\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n question.showTime = true;\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toCheckBoxQuestion(schemaQuestion: any): CheckBoxQuestion {\n const question = new CheckBoxQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.answers.map((obj) => {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.options.splice(0, 0);\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n const mappings: any = {\n label: 'label',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toMultiCheckboxQuestion(schemaQuestion: any): MultiSelectQuestion {\n const question = new MultiSelectQuestion({\n renderType: '',\n options: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.validators = this.addValidators(schemaQuestion);\n question.dataSource = new DummyDataSource();\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextAreaQuestion(schemaQuestion: any): TextAreaInputQuestion {\n const question = new TextAreaInputQuestion({\n isExpanded: false,\n rows: 18,\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.isExpanded = schemaQuestion.isExpanded;\n question.rows = schemaQuestion.questionOptions.rows;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFileUploadQuestion(schemaQuestion: any): FileUploadQuestion {\n const question = new FileUploadQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'file';\n question.dataSource = 'file';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDrugQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'drug';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toProblemQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'problem';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toConceptAnswerSelect(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource =\n schemaQuestion.questionOptions.dataSource || 'conceptAnswers';\n question.dataSourceOptions = {\n concept: schemaQuestion.questionOptions.concept\n };\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toRepeatingQuestion(schemaQuestion: any): RepeatingQuestion {\n const question = new RepeatingQuestion({\n questions: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n if (schemaQuestion.type === 'testOrder') {\n const testOrder = this.toTestOrderQuestion(schemaQuestion);\n const orders = [];\n orders.push(testOrder);\n question.questions = orders;\n }\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toGroupQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toPageQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'page';\n question.controlType = AfeControlType.None;\n question.questions = [];\n schemaQuestion.sections.forEach((element) => {\n question.questions.push(this.toSectionQuestion(element));\n });\n return question;\n }\n\n toFormQuestionModel(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'form';\n question.controlType = AfeControlType.AfeFormGroup;\n question.extras = schemaQuestion;\n question.questions = [];\n schemaQuestion.pages.forEach((element) => {\n question.questions.push(this.toPageQuestion(element));\n });\n\n return question;\n }\n\n toSectionQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'section';\n question.controlType = AfeControlType.None;\n question.isExpanded = schemaQuestion.isExpanded === 'true' ? true : false;\n question.questions = this.getSchemaQuestions(schemaQuestion.questions);\n return question;\n }\n\n toPersonAttributeQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAttribute';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n toPersonAddressQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAddress';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterProviderQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'provider';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFieldSetQuestion(schemaQuestion: any): QuestionGroup {\n const toReturn = this.toGroupQuestion(schemaQuestion);\n toReturn.renderingType = 'field-set';\n return toReturn;\n }\n\n toEncounterLocationQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'location';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'amrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toSiblingLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'siblingLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNonAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'nonAmrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTestOrderQuestion(schemaQuestion: any): TestOrderQuestion {\n const question = new TestOrderQuestion({\n type: '',\n key: '',\n orderType: '',\n selectableOrders: [],\n orderSettingUuid: '',\n label: '',\n rendering: ''\n });\n\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.selectableOrders.map(\n function (obj) {\n return {\n label: obj.label,\n value: obj.concept\n };\n }\n );\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n this.copyProperties(mappings, schemaQuestion, question);\n return question;\n }\n\n getSchemaQuestions(schema: any): any {\n const listQuestions = new Array();\n this.getQuestions(schema, listQuestions);\n return listQuestions;\n }\n\n getQuestions(schema: any, foundArray: any): any {\n if (!Array.isArray(foundArray)) {\n foundArray = [];\n }\n if (Array.isArray(schema)) {\n for (const property in schema) {\n if (schema.hasOwnProperty(property)) {\n this.getQuestions(schema[property], foundArray);\n }\n }\n }\n\n if (schema && !Array.isArray(schema) && typeof schema === 'object') {\n if (schema.questionOptions) {\n if (\n schema.questionOptions.rendering === 'group' ||\n schema.questionOptions.rendering === 'repeating'\n ) {\n // schema.questions = this.getGroupMembers(schema.questions);\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n } else if (schema.questionOptions.rendering === 'field-set') {\n } else {\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n }\n } else {\n for (const o in schema) {\n if (schema.hasOwnProperty(o)) {\n this.getQuestions(schema[o], foundArray);\n }\n }\n }\n }\n }\n\n getChildrenQuestionModels(schema: any): any {\n const children = [];\n this.getQuestions(schema, children);\n return children;\n }\n\n toModel(schema: any, renderType: string): any {\n if (renderType === 'ui-select-extended') {\n renderType = schema.type;\n }\n if (!schema.id) {\n schema['id'] = this.generateId(10);\n }\n\n if (\n schema.questionOptions &&\n (schema.questionOptions.showDate === true ||\n schema.questionOptions.showDate === 'true')\n ) {\n schema = this.convertOldVersionComplexObsQuestionToNewVersion(schema);\n renderType = 'field-set';\n }\n\n switch (renderType) {\n case 'select':\n return this.toSelectQuestion(schema);\n case 'single-select':\n return this.toSelectQuestion(schema);\n case 'multi-select':\n return this.toSelectQuestion(schema);\n case 'numeric':\n return this.toNumericQuestion(schema);\n case 'number':\n return this.toNumberQuestion(schema);\n case 'decimal':\n return this.toDecimalQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'date':\n return this.toDateQuestion(schema);\n case 'time':\n return this.toTimeQuestion(schema);\n case 'multiCheckbox':\n return this.toMultiCheckboxQuestion(schema);\n case 'drug':\n return this.toDrugQuestion(schema);\n case 'problem':\n return this.toProblemQuestion(schema);\n case 'group':\n return this.toGroupQuestion(schema);\n case 'field-set':\n return this.toFieldSetQuestion(schema);\n case 'repeating':\n return this.toRepeatingQuestion(schema);\n case 'personAttribute':\n return this.toPersonAttributeQuestion(schema);\n case 'text':\n return this.toTextQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'select-concept-answers':\n return this.toConceptAnswerSelect(schema);\n case 'encounterLocation':\n return this.toEncounterLocationQuestion(schema);\n case 'amrsLocations':\n return this.toAmrsLocationsQuestion(schema);\n case 'nonAmrsLocations':\n return this.toNonAmrsLocationsQuestion(schema);\n case 'siblingLocations':\n return this.toSiblingLocationsQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'radio':\n return this.toCheckBoxQuestion(schema);\n case 'checkbox':\n return this.toCheckBoxQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'file':\n return this.toFileUploadQuestion(schema);\n default:\n console.warn('New Schema Question Type found.........' + renderType);\n return this.toTextQuestion(schema);\n }\n }\n\n convertOldVersionComplexObsQuestionToNewVersion(schemaQuestion: any) {\n const converted: any = {};\n converted.type = 'complex-obs';\n converted.label = schemaQuestion.label;\n converted.id = 'complex_' + schemaQuestion.id;\n converted.questionOptions = {};\n converted.questionOptions.concept = schemaQuestion.questionOptions.concept;\n converted.questionOptions.rendering = 'field-set';\n converted.questions = [];\n converted.validators = [];\n\n const mainField: any = JSON.parse(JSON.stringify(schemaQuestion));\n mainField.type = 'complex-obs-child';\n delete mainField.questionOptions.showDate;\n delete mainField.questionOptions.shownDateOptions;\n mainField.questionOptions.obsField = 'value';\n\n const dateField: any = {};\n dateField.type = 'complex-obs-child';\n dateField.label = 'Date of ' + mainField.label;\n dateField.id = 'date_' + mainField.id;\n dateField.questionOptions = {};\n dateField.questionOptions.concept = schemaQuestion.questionOptions.concept;\n dateField.questionOptions.rendering = 'date';\n dateField.questionOptions.obsField = 'obsDatetime';\n const dateOptions: any = (Object as any).assign(\n {},\n schemaQuestion.questionOptions.shownDateOptions\n );\n dateField.validators = dateOptions.validators;\n dateField.hide = dateOptions.hide;\n\n converted.questions.push(mainField);\n converted.questions.push(dateField);\n\n return converted;\n }\n\n copyProperties(mappings: any, source: any, destination: QuestionBase) {\n for (const property in source) {\n if (\n mappings.hasOwnProperty(property) &&\n destination.hasOwnProperty(mappings[property])\n ) {\n destination[mappings[property]] = source[property];\n }\n }\n }\n\n addValidators(schemaQuestion: any): Array<ValidationModel> {\n const validators: Array<ValidationModel> = [];\n\n if (schemaQuestion.validators) {\n // TODO - add more validator types\n _.forEach(schemaQuestion.validators, (validator: any) => {\n switch (validator.type) {\n case 'date':\n validators.push(new DateValidationModel(validator));\n break;\n case 'js_expression':\n validators.push(new JsExpressionValidationModel(validator));\n break;\n case 'decimal':\n const decimalModel = new DecimalPointValidationModel(validator);\n decimalModel.setValuesAndExpressions();\n validators.push(decimalModel);\n break;\n case 'conditionalAnswered':\n validators.push(new ConditionalValidationModel(validator));\n break;\n default:\n validators.push(new ValidationModel(validator));\n break;\n }\n });\n }\n\n const questionOptions = schemaQuestion.questionOptions;\n const renderingType = questionOptions ? questionOptions.rendering : '';\n if (renderingType === 'number' || renderingType === 'decimal') {\n if (questionOptions.max && questionOptions.min) {\n validators.push(\n new MaxValidationModel({\n type: 'max',\n max: questionOptions.max\n })\n );\n validators.push(\n new MinValidationModel({\n type: 'min',\n min: questionOptions.min\n })\n );\n }\n }\n\n // add conditional required validators\n if (typeof schemaQuestion.required === 'object') {\n const required: any = schemaQuestion.required;\n\n if (required.type === 'conditionalRequired') {\n validators.push(\n new ConditionalValidationModel({\n referenceQuestionId: required.referenceQuestionId,\n referenceQuestionAnswers: required.referenceQuestionAnswers,\n type: required.type,\n message: required.message\n })\n );\n }\n }\n\n return validators;\n }\n\n addHistoricalExpressions(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.historicalExpression &&\n schemaQuestion.historicalExpression.length > 0\n ) {\n question.setHistoricalValue(true);\n if (schemaQuestion.showHistoricalEncounterDate !== undefined) {\n question.showHistoricalEncounterDate(\n schemaQuestion.showHistoricalEncounterDate === 'true'\n );\n } else {\n question.showHistoricalEncounterDate();\n }\n const origValue = this.historicalHelperService.evaluate(\n schemaQuestion.historicalExpression,\n this.dataSources,\n undefined\n );\n question.historicalDataValue = origValue;\n // console.info('historical value', origValue);\n // console.info('historical data question :::', question);\n // console.info('schema data question :::', schemaQuestion);\n\n if (schemaQuestion.historicalPrepopulateCondition && origValue) {\n const toPopulate = this.historicalHelperService.evaluatePrecondition(\n schemaQuestion.historicalPrepopulateCondition,\n this.dataSources,\n origValue\n );\n\n if (toPopulate) {\n question.defaultValue = origValue.value;\n }\n return; // don't try to evaluate the other option\n }\n\n if (schemaQuestion.historicalPrepopulate && origValue) {\n // sample schema options for this branch\n // \"historicalPrepopulate\":true,\n // \"allowedHistoricalValueAgeInDays\": 40000,\n const valDate = moment(origValue.valueDate);\n const differenceInDays = moment().diff(valDate, 'days');\n if (Number.isInteger(schemaQuestion.allowedHistoricalValueAgeInDays)) {\n if (\n differenceInDays <= schemaQuestion.allowedHistoricalValueAgeInDays\n ) {\n question.defaultValue = origValue.value;\n }\n } else {\n question.defaultValue = origValue.value;\n }\n }\n }\n }\n\n addCalculatorProperty(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.questionOptions &&\n typeof schemaQuestion.questionOptions.calculate === 'object'\n ) {\n question.calculateExpression =\n schemaQuestion.questionOptions.calculate.calculateExpression;\n }\n }\n\n addAlertProperty(schemaQuestion: any, question: QuestionBase): any {\n if (schemaQuestion.alert) {\n question.alert = schemaQuestion.alert;\n }\n // if (typeof schemaQuestion.message === 'object') {\n // if (schemaQuestion.message.alertWhenExpression) {\n // question.message = schemaQuestion.message.alertWhenExpression;\n // }\n // }\n }\n\n addDisableOrHideProperty(schemaQuestion: any, question: QuestionBase): any {\n if (!!schemaQuestion.disable) {\n question.disable = schemaQuestion.disable;\n }\n\n if (typeof schemaQuestion.disable === 'object') {\n question.disable = schemaQuestion.disable.disableWhenExpression;\n }\n\n if (!!schemaQuestion.hide) {\n question.hide = schemaQuestion.hide;\n }\n if (typeof schemaQuestion.hide === 'object') {\n if (schemaQuestion.hide.hideWhenExpression) {\n question.hide = schemaQuestion.hide.hideWhenExpression;\n }\n }\n }\n private generateId(x) {\n let s = '_';\n while (s.length < x && x > 0) {\n const r = Math.random();\n s +=\n r < 0.1\n ? Math.floor(r * 100)\n : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65));\n }\n return '_' + s;\n }\n}\n","import * as _ from 'lodash';\n\nimport { FormFactory } from './form.factory';\nimport { QuestionFactory } from './question.factory';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { QuestionBase } from '../question-models/question-base';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\n\nexport class Form {\n public rootNode: GroupNode;\n public valueProcessingInfo: any = {};\n public existingOrders: any = {};\n private _dataSourcesContainer: DataSources;\n private _showErrors = false;\n constructor(\n public schema: any,\n public formFactory: FormFactory,\n public questionFactory: QuestionFactory\n ) {\n this._dataSourcesContainer = new DataSources();\n }\n\n get dataSourcesContainer(): DataSources {\n return this._dataSourcesContainer;\n }\n\n searchNodeByPath(node: GroupNode, path, found: Array<NodeBase>) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n this.searchNodeByPath(child, path, found);\n } else if (child instanceof LeafNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n } else if (child instanceof ArrayNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n const aChild: ArrayNode = child as ArrayNode;\n\n aChild.children.forEach((aChildNode) => {\n this.searchNodeByPath(aChildNode, path, found);\n });\n }\n }\n }\n\n return found;\n }\n\n searchNodeByQuestionId(\n questionId: string,\n questionType?: string\n ): Array<NodeBase> {\n const found = [];\n if (questionType) {\n this.searchNodeByQuestionType(this.rootNode, questionType, found);\n } else {\n this.findNodesByQuestionId(this.rootNode, questionId, found);\n }\n return found;\n }\n\n searchNodeByQuestionType(\n rootNode: any,\n questionType: string,\n found: Array<NodeBase>\n ) {\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.searchNodeByQuestionType(\n nodeAsGroup.children[o],\n questionType,\n found\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.searchNodeByQuestionType(node, questionType, found);\n });\n }\n\n if (rootNode instanceof LeafNode) {\n const questionBase: QuestionBase = rootNode.question;\n\n if (\n questionBase.extras &&\n questionBase.extras.type &&\n questionBase.extras.type === questionType\n ) {\n found.push(rootNode);\n }\n }\n }\n\n private findNodesByQuestionId(\n rootNode: NodeBase,\n questionId: string,\n results: Array<NodeBase>\n ) {\n if (rootNode.question.key === questionId) {\n results.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.findNodesByQuestionId(\n nodeAsGroup.children[o],\n questionId,\n results\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.findNodesByQuestionId(node, questionId, results);\n });\n }\n }\n\n get valid() {\n return this.rootNode.control.valid;\n }\n\n set showErrors(show: boolean) {\n this._showErrors = show;\n }\n\n get showErrors() {\n return this._showErrors;\n }\n\n markInvalidControls(node: GroupNode, invalidControlNodes?: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.markInvalidControls(child, invalidControlNodes);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n const c: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (!c.valid && !c.disabled) {\n if (invalidControlNodes) {\n invalidControlNodes.push(child);\n }\n\n c.markAsTouched();\n }\n }\n } else if (child instanceof ArrayNode) {\n const arrayNode: ArrayNode = child as ArrayNode;\n\n if (\n arrayNode &&\n arrayNode.children &&\n arrayNode.children.length > 0\n ) {\n _.forEach(arrayNode.children, (groupNode: any) => {\n this.markInvalidControls(groupNode, invalidControlNodes);\n });\n }\n }\n }\n }\n\n return invalidControlNodes;\n }\n\n updateHiddenDisabledStateForAllControls() {\n this._updateHiddenDisabledStateForAllControls(this.rootNode);\n }\n\n updateAlertsForAllControls() {\n this._updateAlertsForAllControls(this.rootNode);\n }\n\n private _updateAlertsForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateAlert) {\n (rootNode.control as any).updateAlert();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateAlertsForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateAlertsForAllControls(node);\n });\n }\n }\n private _updateHiddenDisabledStateForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateDisabledState) {\n (rootNode.control as any).updateDisabledState();\n }\n\n if ((rootNode.control as any).updateHiddenState) {\n (rootNode.control as any).updateHiddenState();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateHiddenDisabledStateForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateHiddenDisabledStateForAllControls(node);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\n// import { AbstractControl } from '@angular/forms';\n\nimport { LeafNode, GroupNode, ArrayNode, NodeBase } from './form-node';\nimport {\n QuestionBase,\n NestedQuestion,\n RepeatingQuestion,\n QuestionGroup\n} from '../question-models/models';\nimport { FormControlService } from './form-control.service';\nimport { QuestionFactory } from './question.factory';\nimport {\n AfeFormGroup,\n AfeControlType,\n AfeFormArray\n} from '../../abstract-controls-extension';\nimport { ControlRelationsFactory } from './control-relations.factory';\nimport { Validations } from '../validators/validations';\n\nimport { Form } from './form';\n\n@Injectable()\nexport class FormFactory {\n public hd: any = {\n getValue: () => {\n return 20;\n }\n };\n\n constructor(\n public controlService: FormControlService,\n public questionFactroy: QuestionFactory,\n public controlRelationsFactory: ControlRelationsFactory\n ) {}\n\n createForm(schema: any, dataSource?: any): Form {\n const form: Form = new Form(schema, this, this.questionFactroy);\n if (dataSource) {\n for (const key in dataSource) {\n if (dataSource.hasOwnProperty(key)) {\n form.dataSourcesContainer.registerDataSource(\n key,\n dataSource[key],\n false\n );\n }\n }\n }\n const question = this.questionFactroy.createQuestionModel(schema, form);\n form.rootNode = this.createNode(question, null, null, form) as GroupNode;\n\n this.buildRelations(form.rootNode);\n form.updateHiddenDisabledStateForAllControls();\n form.updateAlertsForAllControls();\n return form;\n }\n\n buildRelations(rootNode: GroupNode) {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildRelations(rootNode);\n\n // enable js expression validations\n Validations.JSExpressionValidatorsEnabled = true;\n }\n\n createNode(\n question: QuestionBase | NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): NodeBase {\n let node: NodeBase = null;\n if (question instanceof NestedQuestion) {\n if (question instanceof RepeatingQuestion) {\n node = this.createArrayNode(question, parentNode, parentControl, form);\n } else {\n node = this.createGroupNode(question, parentNode, parentControl, form);\n }\n } else {\n node = this.createLeafNode(question, parentNode, parentControl, form);\n }\n return node;\n }\n\n createLeafNode(\n question: QuestionBase,\n parentNode: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): LeafNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n );\n return new LeafNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n }\n\n createGroupNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): GroupNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const groupNode = new GroupNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n this.createNodeChildren(\n question,\n groupNode,\n controlModel || parentControl,\n form\n );\n return groupNode;\n }\n\n createArrayNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): ArrayNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const arrayNode = new ArrayNode(\n question,\n controlModel,\n parentControl,\n this,\n form,\n parentNode ? parentNode.path : undefined\n );\n arrayNode.createChildFunc = this.createArrayNodeChild;\n arrayNode.removeChildFunc = this.removeArrayNodeChild;\n\n arrayNode.addChildNodeCreatedListener((node: GroupNode) => {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildArrayNodeRelations(node);\n Validations.JSExpressionValidatorsEnabled = true;\n });\n return arrayNode;\n }\n\n createNodeChildren(\n question: NestedQuestion,\n node: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): any {\n question.questions.forEach((element) => {\n const child = this.createNode(element, node, parentControl, form);\n node.setChild(element.key, child);\n });\n return node.children;\n }\n\n createArrayNodeChild(\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n ): GroupNode {\n if (factory === null || factory === undefined) {\n factory = this;\n }\n const groupQuestion: QuestionGroup = new QuestionGroup({\n key: node.path + '.' + node.children.length + '',\n type: 'group',\n extras: question.extras,\n label: '',\n questions: question.questions\n });\n\n if (question.controlType === AfeControlType.None) {\n groupQuestion.controlType = question.controlType;\n }\n\n const group = factory.createGroupNode(groupQuestion, null, null, node.form);\n node.children.push(group);\n\n if (node.control instanceof AfeFormArray) {\n const nodeControl = node.control as AfeFormArray;\n nodeControl.setControl(nodeControl.controls.length, group.control);\n }\n\n return group;\n }\n\n removeArrayNodeChild(index: number, node: ArrayNode) {\n const nodeToRemove = node.children[index];\n\n node.children.splice(index, 1);\n if (node.control !== null || node.control !== undefined) {\n if (node.control instanceof AfeFormArray) {\n const control = node.control as AfeFormArray;\n const controlIndexToRemove = control.controls.indexOf(\n nodeToRemove.control\n );\n if (controlIndexToRemove >= 0) {\n control.removeAt(controlIndexToRemove);\n }\n }\n }\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport {\n NodeBase,\n ArrayNode,\n GroupNode,\n LeafNode\n} from '../form-factory/form-node';\n\nexport class ObsAdapterHelper {\n constructor() {}\n\n findObsAnswerToQuestion(node: NodeBase, obsArray: Array<any>): Array<any> {\n const found = [];\n\n if (!this.isObsNode(node)) {\n return found;\n }\n\n if (\n node instanceof LeafNode ||\n (node instanceof GroupNode && node.question.extras.type === 'complex-obs')\n ) {\n _.each(obsArray, (item) => {\n if (\n item.concept &&\n item.concept.uuid === node.question.extras.questionOptions.concept\n ) {\n found.push(item);\n }\n });\n\n return found;\n }\n\n // At this point the node is either a group or a repeating node\n\n const childQuestionsUuids = this.getChildQuestionsConceptUuids(node);\n if (childQuestionsUuids.length > 0) {\n _.each(obsArray, (obs) => {\n if (\n obs.concept &&\n obs.concept.uuid === node.question.extras.questionOptions.concept &&\n Array.isArray(obs.groupMembers) &&\n this.isSubsetOf(\n childQuestionsUuids,\n this.getGroupMembersConceptUuids(obs)\n )\n ) {\n found.push(obs);\n }\n });\n }\n\n return found;\n }\n\n getChildQuestionsConceptUuids(node: NodeBase): Array<string> {\n const found = [];\n\n if (node.question.extras && node.question.extras.questions) {\n _.each(node.question.extras.questions, (question) => {\n if (question.questionOptions && question.questionOptions.concept) {\n found.push(question.questionOptions.concept);\n }\n });\n }\n\n return found;\n }\n\n getGroupMembersConceptUuids(obsWithGroupMembers): Array<string> {\n const found = [];\n\n if (Array.isArray(obsWithGroupMembers.groupMembers)) {\n _.each(obsWithGroupMembers.groupMembers, (member) => {\n found.push(member.concept.uuid);\n });\n }\n\n return found;\n }\n\n isObsNode(node: NodeBase): boolean {\n return (\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs' ||\n node.question.extras.type === 'complex-obs-child')\n );\n }\n\n isSubsetOf(supersetArray: Array<any>, subsetArray: Array<any>): boolean {\n if (subsetArray.length === 0 && supersetArray.length === 0) {\n return true;\n }\n return subsetArray.every((element): boolean => {\n return supersetArray.indexOf(element) >= 0;\n });\n }\n\n setSimpleObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const obsToUse = obs[0];\n\n // set initial value\n node.initialValue = obsToUse;\n\n if (!this.isEmpty(obsToUse.value) && obsToUse.value.uuid) {\n // answer to the obs is a concept, use uuid value\n this.setNodeFormControlValue(node, obsToUse.value.uuid);\n } else if (!this.isEmpty(obsToUse.value)) {\n this.setNodeFormControlValue(node, obsToUse.value);\n }\n }\n }\n\n setMultiselectObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n node.initialValue = obs;\n\n const obsUuids = [];\n for (const m of obs) {\n obsUuids.push(m.value.uuid);\n }\n\n this.setNodeFormControlValue(node, obsUuids);\n }\n }\n\n setComplexObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n // set the obs value here\n this.setNodeValue(valueField, obs);\n node.initialValue = valueField.initialValue;\n\n // set the date value here\n dateField.initialValue = valueField.initialValue;\n this.setNodeFormControlValue(\n dateField,\n valueField.initialValue.obsDatetime\n );\n }\n }\n\n setGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const groupNode = node as GroupNode;\n groupNode.initialValue = obs[0];\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs[0].groupMembers);\n }\n }\n }\n\n setRepeatingGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const arrayNode = node as ArrayNode;\n arrayNode.initialValue = obs;\n\n for (let i = 0; i < obs.length; i++) {\n const createdNode = arrayNode.createChildNode();\n this.setGroupObsNodeValue(createdNode, [obs[i]]);\n }\n }\n }\n\n setNodeValue(node: NodeBase, obs: Array<any>) {\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs);\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n this.setNodeValue(arrayNode.children[i], obs);\n }\n break;\n }\n break;\n case 'simple':\n // search asnwering obs at this point\n const answeringObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setSimpleObsNodeValue(node, answeringObs);\n break;\n\n case 'multiselect':\n // search asnwering obs at this point\n const multiselectObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setMultiselectObsNodeValue(node, multiselectObs);\n break;\n\n case 'complex':\n // search asnwering obs at this point\n const complexObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setComplexObsNodeValue(node, complexObs);\n break;\n\n case 'group':\n const groupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (groupObs.length > 0) {\n this.setGroupObsNodeValue(node, groupObs);\n }\n\n break;\n case 'repeatingGroup':\n const repeatingGroupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (repeatingGroupObs.length > 0) {\n this.setRepeatingGroupObsNodeValue(node, repeatingGroupObs);\n }\n\n break;\n default:\n console.error('Unknown obs node', node);\n break;\n }\n }\n\n setNodeFormControlValue(node: NodeBase, value) {\n node.control.setValue(value);\n // TODO: Determine if we need this call\n // node.control.updateValueAndValidity();\n\n // TODO: Remove this hack and put it in appropriate place\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n }\n\n getObsNodeType(node: NodeBase): string {\n if (this.isObsNode(node)) {\n if (\n node instanceof LeafNode &&\n (node.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n node.question.extras.questionOptions.rendering === 'checkbox' ||\n node.question.extras.questionOptions.rendering === 'multi-select')\n ) {\n return 'multiselect';\n }\n\n if (node instanceof LeafNode) {\n return 'simple';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n return 'complex';\n }\n\n if (\n node instanceof ArrayNode &&\n node.question.extras.type === 'obsGroup' &&\n node.question.extras.questionOptions.rendering === 'repeating'\n ) {\n return 'repeatingGroup';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'obsGroup'\n ) {\n return 'group';\n }\n\n return 'unknownObs';\n }\n return 'unknown';\n }\n\n // PAYLOAD GENERATION FUNCTIONS\n getSimpleObsPayload(node: NodeBase): any {\n // check for empty values first\n if (this.isEmpty(node.control.value)) {\n if (node.initialValue) {\n // Handle case for existing voided obs\n return {\n uuid: node.initialValue.uuid,\n voided: true\n };\n }\n return null;\n }\n\n // check for exisiting, unchanged values\n if (node.initialValue && !this.simpleNodeValueChanged(node)) {\n return null;\n }\n\n // all numbers, text, concepts answers are handled in the same way\n // no need for further formatting in this case\n const obs: any = {\n concept: node.question.extras.questionOptions.concept,\n value: node.control.value\n };\n\n // handle date fields\n if (node.question.extras.questionOptions.rendering === 'date') {\n obs.value = this.toOpenMrsDateTimeString(node.control.value);\n }\n\n if (node.initialValue) {\n // for existing cases, delete concept property, and add uuid\n delete obs.concept;\n obs.uuid = node.initialValue.uuid;\n }\n\n return obs;\n }\n\n getComplexObsPayload(node: NodeBase) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n const valuePayload = this.getObsNodePayload(valueField);\n console.log('valuePayload', valuePayload);\n\n // set obs datetime for the generated payload\n if (valuePayload.length > 0) {\n valuePayload[0].obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return valuePayload[0];\n } else if (valuePayload.length === 0 && node.initialValue) {\n // determine if date changed\n if (\n !this.areDatesEqual(\n node.initialValue.obsDatetime,\n dateField.control.value\n )\n ) {\n const payload: any = {\n uuid: node.initialValue.uuid\n };\n payload.obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return payload;\n }\n }\n return null;\n }\n\n getMultiselectObsPayload(node: NodeBase): Array<any> {\n const payload: Array<any> = [];\n\n const existingUuids = [];\n\n // add voided obs i.e. deleted options\n if (Array.isArray(node.initialValue)) {\n _.each(node.initialValue, (item) => {\n existingUuids.push(item.value.uuid);\n if (Array.isArray(node.control.value)) {\n if (node.control.value.indexOf(item.value.uuid) < 0) {\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n } else {\n // every value was deleted\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n });\n }\n\n // add new obs i.e they didn't exisit originally\n if (Array.isArray(node.control.value)) {\n _.each(node.control.value, (item) => {\n if (existingUuids.indexOf(item) < 0) {\n payload.push({\n concept: node.question.extras.questionOptions.concept,\n value: item\n });\n }\n });\n }\n\n return payload;\n }\n\n getGroupPayload(node: NodeBase) {\n const nodeAsGroup: GroupNode = node as GroupNode;\n\n let childrenPayload = [];\n _.each(nodeAsGroup.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n });\n\n if (childrenPayload.length === 0) {\n return null;\n }\n\n const groupPayload: any = {\n groupMembers: childrenPayload\n };\n\n if (nodeAsGroup.initialValue) {\n groupPayload.uuid = nodeAsGroup.initialValue.uuid;\n } else {\n groupPayload.concept =\n nodeAsGroup.question.extras.questionOptions.concept;\n }\n\n return groupPayload;\n }\n\n getRepeatingGroupPayload(node: NodeBase) {\n const nodeAsArray: ArrayNode = node as ArrayNode;\n\n let childrenPayload = [];\n\n const groupsUuidsAfterEditting = [];\n _.each(nodeAsArray.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n if (child.initialValue && child.initialValue.uuid) {\n groupsUuidsAfterEditting.push(child.initialValue.uuid);\n }\n });\n\n // void deleted groups\n // console.log('groupsUuidsAfterEditting', groupsUuidsAfterEditting);\n if (nodeAsArray.initialValue && Array.isArray(nodeAsArray.initialValue)) {\n _.each(nodeAsArray.initialValue, (obs) => {\n if (groupsUuidsAfterEditting.indexOf(obs.uuid) < 0) {\n const voidedGroup = {\n uuid: obs.uuid,\n voided: true\n };\n childrenPayload.push(voidedGroup);\n }\n });\n }\n\n if (childrenPayload.length <= 0) {\n return null;\n }\n return childrenPayload;\n }\n\n getObsNodePayload(node: NodeBase): Array<any> {\n let payload = [];\n\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n const groupNodePayoad = this.getObsNodePayload(\n groupNode.children[o]\n );\n if (Array.isArray(groupNodePayoad) && groupNodePayoad.length > 0) {\n payload = payload.concat(groupNodePayoad);\n }\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n const arrayNodePayload = this.getObsNodePayload(\n arrayNode.children[i]\n );\n if (\n Array.isArray(arrayNodePayload) &&\n arrayNodePayload.length > 0\n ) {\n payload = payload.concat(arrayNodePayload);\n }\n }\n break;\n }\n break;\n case 'simple':\n const simpleObs = this.getSimpleObsPayload(node);\n if (simpleObs !== null) {\n payload.push(simpleObs);\n }\n break;\n\n case 'multiselect':\n const multiselectObs = this.getMultiselectObsPayload(node);\n\n if (Array.isArray(multiselectObs) && multiselectObs.length > 0) {\n payload = payload.concat(multiselectObs);\n }\n break;\n\n case 'complex':\n const complexObs = this.getComplexObsPayload(node);\n if (complexObs !== null) {\n payload.push(complexObs);\n }\n break;\n\n case 'group':\n const groupedObs = this.getGroupPayload(node);\n if (groupedObs && groupedObs !== null) {\n payload.push(groupedObs);\n }\n break;\n case 'repeatingGroup':\n const repeatingGroupedObs = this.getRepeatingGroupPayload(node);\n if (\n Array.isArray(repeatingGroupedObs) &&\n repeatingGroupedObs.length > 0\n ) {\n payload = payload.concat(repeatingGroupedObs);\n }\n break;\n default:\n break;\n }\n\n return payload;\n }\n\n simpleNodeValueChanged(node: NodeBase): boolean {\n if (node.initialValue) {\n if (node.initialValue.value && node.initialValue.value.uuid) {\n // question whose answer is a concept\n return node.control.value !== node.initialValue.value.uuid;\n }\n\n if (node.question.extras.questionOptions.rendering === 'date') {\n return !this.areDatesEqual(node.control.value, node.initialValue.value);\n }\n return node.control.value !== node.initialValue.value;\n }\n return false;\n }\n\n areDatesEqual(date1, date2) {\n return moment(date1).isSame(date2);\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n toOpenMrsDateTimeString(datetime: string): string {\n if (this.isEmpty(datetime)) {\n return undefined;\n } else {\n // transform value to memoent value to avoid error\n const formattedVal = moment(datetime).format();\n const val = formattedVal.substring(0, 19).replace('T', ' ');\n return this.isEmpty(val) ? undefined : val;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'rxjs';\n\nimport * as _ from 'lodash';\n\nimport { LeafNode, GroupNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport { ObsAdapterHelper } from './obs-adapter-helper';\n\n@Injectable()\nexport class ObsValueAdapter implements ValueAdapter {\n constructor(private helper: ObsAdapterHelper) {}\n\n generateFormPayload(form: Form) {\n return this.helper.getObsNodePayload(form.rootNode);\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Get obs Payload\n // return this.getObsPayload(questionNodes);\n }\n\n populateForm(form: Form, payload) {\n this.helper.setNodeValue(form.rootNode, payload);\n\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Extract set obs\n // this.setValues(questionNodes, payload);\n }\n\n // TODO: Get rid of all the functions below as they will not be needed\n // once the helper is stable\n\n setValues(nodes, payload?, forcegroup?) {\n if (nodes) {\n for (const node of nodes) {\n if (node instanceof LeafNode) {\n this.setObsValue(node, payload);\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n } else if (\n (node.question &&\n node.question.extras &&\n node.question.renderingType === 'group') ||\n forcegroup\n ) {\n const groupObs = _.find(payload, (o: any) => {\n return (\n o.concept.uuid === node.question.extras.questionOptions.concept &&\n o.groupMembers\n );\n });\n if (groupObs) {\n if (node.node) {\n node.node['initialValue'] = groupObs;\n }\n\n this.setValues(node.groupMembers, groupObs.groupMembers);\n }\n if (forcegroup && node.payload) {\n this.setValues(node.groupMembers, node.payload.groupMembers);\n }\n } else if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n this.setComplexObsValue(node, payload);\n } else if (\n node.question &&\n node.question.extras &&\n node.question.renderingType === 'repeating' &&\n !forcegroup\n ) {\n this.setRepeatingGroupValues(node, payload);\n node.node.control.updateValueAndValidity();\n } else {\n throw new Error('not implemented');\n }\n }\n }\n }\n\n setObsValue(node, payload) {\n if (\n (node.question &&\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n (node.question.extras.type === 'complex-obs-child' &&\n node.question.extras.questionOptions.obsField === 'value')) &&\n node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||\n node.question.extras.questionOptions.rendering !== 'checkbox' ||\n node.question.extras.questionOptions.rendering !== 'multi-select'\n ) {\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (obs) {\n if (obs.value instanceof Object) {\n node.control.setValue(obs.value.uuid);\n node.control.updateValueAndValidity();\n } else {\n node.control.setValue(obs.value);\n node.control.updateValueAndValidity();\n }\n node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };\n }\n } else {\n const multiObs = _.filter(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (multiObs && multiObs.length > 0) {\n node.control.setValue(this.getMultiselectValues(multiObs));\n node.control.updateValueAndValidity();\n node['initialValue'] = multiObs;\n }\n }\n }\n\n setComplexObsValue(node, payload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n // set the usual obs value\n this.setObsValue(valueField, payload);\n\n // set the obs date\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n\n if (obs) {\n dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };\n (dateField as LeafNode).control.setValue(obs.obsDatetime);\n (dateField as LeafNode).control.updateValueAndValidity();\n }\n }\n\n getMultiselectValues(multiObs) {\n const values = [];\n for (const m of multiObs) {\n values.push(m.value.uuid);\n }\n return values;\n }\n\n setRepeatingGroupValues(node, payload) {\n const groupRepeatingObs = _.filter(payload, (o: any) => {\n const found =\n o.concept.uuid === node.question.extras.questionOptions.concept;\n let intersect = false;\n if (found && o.groupMembers) {\n const obs = o.groupMembers.map((a) => {\n return a.concept.uuid;\n });\n\n const schemaQuestions = node.question.questions.map((a) => {\n return a.extras.questionOptions.concept;\n });\n\n intersect = _.intersection(obs, schemaQuestions).length > 0;\n }\n return found && intersect;\n });\n if (groupRepeatingObs.length > 0) {\n node.node['initialValue'] = groupRepeatingObs;\n for (let i = 0; i < groupRepeatingObs.length; i++) {\n node.node.createChildNode();\n }\n }\n const groups = [];\n let index = 0;\n for (const child of node.node.children) {\n const children = Object.keys(child.children).map(function (key) {\n return child.children[key];\n });\n const groupPayload = groupRepeatingObs[index];\n groups.push({\n question: node.question,\n groupMembers: children,\n payload: groupPayload\n });\n index++;\n }\n this.setValues(groups, groupRepeatingObs, true);\n }\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n for (const section of page.page) {\n arrays.push(section.section);\n }\n }\n return merged.concat.apply([], arrays);\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n\n processGroup(obs, obsPayload) {\n if (\n obs.question &&\n obs.question.extras &&\n obs.question.extras.questionOptions.rendering === 'group'\n ) {\n const members = _.filter(\n this.getObsPayload(obs.groupMembers),\n (o: any) => {\n return o.value !== '';\n }\n );\n\n const mappedMembers = members.map((a) => {\n return a.voided;\n });\n if (members.length > 0 && mappedMembers.every(Boolean)) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n voided: true\n });\n } else if (members.length > 0) {\n if (obs.node.initialValue) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n groupMembers: members\n });\n } else {\n obsPayload.push({\n concept: obs.question.extras.questionOptions.concept,\n groupMembers: members\n });\n }\n }\n }\n }\n\n mapInitialGroup(group) {\n let current = {};\n for (const member of group.groupMembers) {\n let value: any = '';\n if (member.value instanceof Object) {\n value = member.value.uuid;\n } else if (member.value) {\n value = member.value;\n } else if (member.groupMembers && member.groupMembers.length > 0) {\n current = this.mapInitialGroup(group);\n }\n current[member.concept.uuid + ':' + value] = value;\n }\n return current;\n }\n\n mapModelGroup(node, value) {\n const current = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n const groupQuestion: any = _.find(node.question.questions, {\n key: key\n });\n const modelValue = value[key];\n if (modelValue instanceof Object) {\n } else if (modelValue !== '') {\n current[\n groupQuestion.extras.questionOptions.concept + ':' + modelValue\n ] = modelValue;\n }\n }\n }\n return current;\n }\n\n processRepeatingGroups(node, obsPayload) {\n const initialValues = [];\n if (node.node.initialValue) {\n for (const group of node.node.initialValue) {\n initialValues.push({\n uuid: group.uuid,\n value: this.mapInitialGroup(group)\n });\n }\n }\n const repeatingModel = [];\n for (const value of node.node.control.value) {\n repeatingModel.push({ value: this.mapModelGroup(node, value) });\n }\n const deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);\n const newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);\n const groupConcept = node.question.extras.questionOptions.concept;\n let newObsPayload = [];\n if (deleted.length > 0) {\n const deletedObs = this.createGroupDeletedObs(deleted);\n for (const d of deletedObs) {\n obsPayload.push(d);\n }\n if (newObs.length > 0) {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n } else {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n\n if (newObsPayload.length > 0) {\n for (const p of newObsPayload) {\n obsPayload.push(p);\n }\n }\n }\n\n leftOuterJoinArrays(first, second) {\n const unique = first.filter(function (obj) {\n return !second.some(function (obj2) {\n return _.isEqual(obj.value, obj2.value);\n });\n });\n return unique;\n }\n\n createGroupNewObs(payload, groupConcept) {\n const newPayload = [];\n for (const obs of payload) {\n const groupPayload = [];\n /* tslint:disable */\n for (let key in obs.value) {\n let concept = key.split(':')[0];\n let value = key.split(':')[1];\n groupPayload.push({ concept: concept, value: value });\n }\n newPayload.push({ concept: groupConcept, groupMembers: groupPayload });\n /* tslint:enable */\n }\n return newPayload;\n }\n\n createGroupDeletedObs(payload) {\n const deletedObs = [];\n for (const d of payload) {\n deletedObs.push({ uuid: d.uuid, voided: true });\n }\n return deletedObs;\n }\n\n getExactTime(datetime: string) {\n return datetime.substring(0, 19).replace('T', ' ');\n }\n\n processObs(obs, obsPayload) {\n if (obs.control && obs.question.extras) {\n const obsValue = {\n concept: obs.question.extras.questionOptions.concept,\n value:\n obs.question.extras.questionOptions.rendering === 'date' &&\n !this.isEmpty(obs.control.value)\n ? this.getExactTime(obs.control.value)\n : obs.control.value\n };\n\n if (\n obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n obs.question.extras.questionOptions.rendering === 'checkbox' ||\n obs.question.extras.questionOptions.rendering === 'multi-select'\n ) {\n const multis = this.processMultiSelect(\n obs.question.extras.questionOptions.concept,\n obs.control.value\n );\n if (obs.initialValue) {\n const mappedInitial = obs.initialValue.map((a) => {\n return {\n uuid: a.uuid,\n value: { concept: a.concept.uuid, value: a.value.uuid }\n };\n });\n const mappedCurrent = multis.map((a) => {\n return { value: a };\n });\n const deletedObs = this.leftOuterJoinArrays(\n mappedInitial,\n mappedCurrent\n );\n const newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);\n this.processDeletedMultiSelectObs(deletedObs, obsPayload);\n this.processNewMultiSelectObs(newObs, obsPayload);\n } else {\n this.processNewMultiSelectObs(multis, obsPayload);\n }\n } else {\n if (obs.initialValue && obs.initialValue.value && obsValue) {\n this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);\n } else if (obsValue.value !== '' && obsValue.value !== null) {\n obsPayload.push(obsValue);\n }\n }\n }\n }\n\n processComplexObs(node, obsPayload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n\n if (valueField) {\n // process obs as usual\n this.processObs(valueField, obsPayload);\n\n // obtain the last inserted obs and set the obsDatetime\n const createdPayload =\n obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;\n if (\n createdPayload &&\n ((createdPayload.concept &&\n createdPayload.concept ===\n node.question.extras.questionOptions.concept) ||\n (valueField.initialValue &&\n createdPayload.uuid === valueField.initialValue.obsUuid))\n ) {\n if (\n dateField.initialValue &&\n dateField.control.value !== dateField.initialValue.value\n ) {\n createdPayload.obsDatetime = dateField.control.value;\n }\n }\n }\n }\n\n processDeletedMultiSelectObs(values, obsPayload) {\n for (const value of values) {\n obsPayload.push({ uuid: value.uuid, voided: true });\n }\n }\n\n processNewMultiSelectObs(values, obsPayload) {\n for (const multi of values) {\n if (multi.value instanceof Object) {\n obsPayload.push(multi.value);\n } else {\n obsPayload.push(multi);\n }\n }\n }\n\n updateOrVoidObs(obsValue, initialValue, obsPayload) {\n if (this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, voided: true });\n } else if (!this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });\n }\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({\n page: page,\n label: o.children[key].question.label\n });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({\n section: section,\n node: o.children[key],\n label: o.children[key].question.label\n });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n }\n }\n return questions;\n }\n\n processMultiSelect(concept, values) {\n const multiSelectObs = [];\n if (values && values !== null) {\n for (const value of values) {\n const obs = {\n concept: concept,\n value: value\n };\n multiSelectObs.push(obs);\n }\n }\n return multiSelectObs;\n }\n\n isObs(node) {\n return (\n node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs'\n );\n }\n\n getObsPayload(nodes) {\n const obsPayload = [];\n for (const node of nodes) {\n if (this.isObs(node)) {\n if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'group')\n ) {\n this.processGroup(node, obsPayload);\n } else if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'repeating')\n ) {\n this.processRepeatingGroups(node, obsPayload);\n } else if (\n node instanceof GroupNode &&\n (node as GroupNode).question.extras.type === 'complex-obs'\n ) {\n this.processComplexObs(node, obsPayload);\n } else {\n this.processObs(node, obsPayload);\n }\n }\n }\n return obsPayload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport * as _ from 'lodash';\n@Injectable()\nexport class OrderValueAdapter implements ValueAdapter {\n formOrderNodes = [];\n private provider = '';\n\n generateFormPayload(form: Form) {\n this.formOrderNodes = [];\n this._setOrderProvider(form);\n this._findTestOrderQuestionNodes(form.rootNode);\n return this._createOrdersPayload(this.formOrderNodes, form);\n }\n\n populateForm(form: Form, payload) {\n form.existingOrders = payload;\n this.formOrderNodes = [];\n this._findTestOrderQuestionNodes(form.rootNode);\n const existingOrders = this._getExistingOrders(form);\n this._setOrderValues(this.formOrderNodes, existingOrders);\n }\n\n private _setOrderProvider(form: Form) {\n if (form.valueProcessingInfo.providerUuid) {\n this.provider = form.valueProcessingInfo.providerUuid;\n }\n }\n\n private _createOrdersPayload(orderNodes, form: Form) {\n const payload = [];\n const selectedOrders = [];\n let deletedOrders = [];\n const existingOrders = this._getExistingOrders(form);\n for (const orderNode of orderNodes) {\n const orderNodeValues = orderNode.control.value;\n const orders = [];\n if (existingOrders) {\n existingOrders.map(function (obj) {\n orders[obj.concept] = obj.concept;\n });\n }\n\n for (const order in orderNodeValues) {\n if (orderNodeValues.hasOwnProperty(order)) {\n const orderValue = orderNodeValues[order][orderNode.question.key];\n\n const payloadOrder = this._createPayloadOrder(\n orderValue,\n orderNode.question.extras\n );\n\n if (\n orders[orderValue] !== orderValue &&\n payloadOrder.concept !== ''\n ) {\n payload.push(payloadOrder);\n }\n selectedOrders[orderValue] = orderValue;\n if (payloadOrder.orderNumber === '') {\n delete payloadOrder.orderNumber;\n }\n if (payloadOrder.uuid === '') {\n delete payloadOrder.uuid;\n }\n }\n }\n }\n\n deletedOrders = this._getDeletedOrders(selectedOrders, existingOrders);\n return this._addDeletedOrdersToPayload(deletedOrders, payload);\n }\n\n private _getExistingOrders(form: Form) {\n if (form.existingOrders && form.existingOrders.orders) {\n let existingOrders = form.existingOrders.orders.map((o) => {\n return {\n concept: o.concept.uuid,\n orderNumber: o.orderNumber,\n orderUuid: o.uuid,\n voided: o.voided,\n dateVoided: o.auditInfo.dateVoided\n };\n });\n\n return (existingOrders = _.filter(existingOrders, (order: any) => {\n if (order.voided === true || order.dateVoided) {\n return false;\n } else {\n return true;\n }\n }));\n } else {\n return;\n }\n }\n\n private _setOrderValues(node, existingOrders) {\n this._findTestOrderQuestionNodes(node);\n\n const orderNodes = this.formOrderNodes;\n for (const orderNode of orderNodes) {\n this._setOrderNodeValues(orderNode, existingOrders);\n }\n }\n\n private _addDeletedOrdersToPayload(deletedOrders, payload): any {\n for (const order in deletedOrders) {\n if (deletedOrders.hasOwnProperty(order)) {\n payload.push({ uuid: deletedOrders[order], voided: true });\n }\n }\n return payload;\n }\n\n private _createPayloadOrder(orderConcept, quesitonExtras): any {\n const order = {\n concept: '',\n type: '',\n orderer: '',\n careSetting: ''\n };\n order.concept = orderConcept;\n order.type = quesitonExtras.questionOptions.orderType;\n order.orderer = this.provider;\n order.careSetting = quesitonExtras.questionOptions.orderSettingUuid;\n\n // delete orderer if provider not provided\n if (order.orderer === '') {\n delete order.orderer;\n }\n\n return order;\n }\n\n private _getDeletedOrders(selectedOrders, existingOrders): any {\n const deleteOrders = [];\n if (selectedOrders) {\n for (const order in existingOrders) {\n if (existingOrders.hasOwnProperty(order)) {\n const existingOrderConcept = existingOrders[order].concept;\n const selectedOrder = selectedOrders[existingOrderConcept];\n if (selectedOrder !== existingOrderConcept) {\n deleteOrders.push(existingOrders[order].orderUuid);\n }\n }\n }\n }\n // console.log('Deleted Orders ', deleteOrders);\n return deleteOrders;\n }\n\n private _setOrderNodeValues(node, orders) {\n let index = 0;\n node['initialValue'] = orders;\n for (const order of orders) {\n node.createChildNode();\n const value = {};\n value[node.question.key] = order.concept;\n const childNode = node.children[index];\n childNode.control.setValue(value);\n childNode['initialValue'] = value;\n childNode['orderNumber'] = order.orderNumber;\n // console.log('Set Value', node.children[index].control.value, node, childNode);\n index++;\n }\n }\n\n private _findTestOrderQuestionNodes(formNode) {\n if (formNode.children) {\n if (formNode.children instanceof Object) {\n for (const key in formNode.children) {\n if (formNode.children.hasOwnProperty(key)) {\n switch (formNode.children[key].question.renderingType) {\n case 'page':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'section':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'group':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n\n break;\n case 'repeating':\n if (formNode.children) {\n // tslint:disable-next-line:forin\n for (const node in formNode.children) {\n const question = formNode.children[node].question;\n if (\n question.extras &&\n question.extras.type === 'testOrder'\n ) {\n this.formOrderNodes.push(formNode.children[node]);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\n\nimport { ValueAdapter } from './value.adapter';\nimport { ObsValueAdapter } from './obs.adapter';\nimport { OrderValueAdapter } from './order.adapter';\n\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class EncounterAdapter implements ValueAdapter {\n constructor(\n public ordersAdapter: OrderValueAdapter,\n public obsAdapter: ObsValueAdapter\n ) {}\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n\n if (Array.isArray(payload.orders)) {\n this.ordersAdapter.populateForm(form, payload);\n }\n if (Array.isArray(payload.obs)) {\n this.obsAdapter.populateForm(form, payload.obs);\n }\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (payload === undefined || payload === null) {\n throw new Error('Expected payload');\n }\n\n const nodes = this.getEncounterNodes(rootNode);\n\n nodes.forEach((node) => {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n if (payload['encounterDatetime']) {\n // console.log('date', payload['encounterDatetime']);\n node.control.setValue(\n moment(payload['encounterDatetime']).toDate()\n );\n node.initialValue = moment(payload['encounterDatetime']).toDate();\n }\n break;\n case 'encounterProvider':\n if (\n Array.isArray(payload['encounterProviders']) &&\n payload['encounterProviders'].length > 0\n ) {\n const firstProvider: any =\n payload['encounterProviders'][0].provider;\n if (firstProvider && firstProvider.uuid) {\n // Very weird work around for an issue with setting the value\n node.control.setValue(firstProvider.uuid);\n setTimeout(() => {\n node.control.setValue(firstProvider.uuid);\n });\n node.initialValue = firstProvider.uuid;\n }\n }\n break;\n case 'encounterLocation':\n if (payload['location'] && payload['location'].uuid) {\n node.control.setValue(payload['location'].uuid);\n node.initialValue = payload['location'].uuid;\n }\n break;\n default:\n break;\n }\n });\n }\n\n generateFormPayload(form: Form) {\n const payload = this.generateNodePayload(form.rootNode);\n\n this.setNonFilledPayloadMembers(form, payload);\n\n payload['obs'] = this.obsAdapter.generateFormPayload(form) || [];\n\n payload['orders'] = this.ordersAdapter.generateFormPayload(form) || [];\n\n return payload;\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getEncounterNodes(rootNode);\n const payload = {};\n\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== ''\n ) {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n const dateValue = moment(node.control.value).utcOffset(\n rootNode.form.valueProcessingInfo.utcOffset || '+0300'\n );\n payload['encounterDatetime'] = dateValue.format(\n 'YYYY-MM-DD HH:mm:ss'\n );\n break;\n case 'encounterProvider':\n if (node.control.value && node.control.value !== '') {\n const providers = [];\n providers.push({\n provider: node.control.value,\n encounterRole: 'a0b03050-c99b-11e0-9572-0800200c9a66' // unknown provider role in the encounter as default\n });\n payload['encounterProviders'] = providers;\n }\n break;\n case 'encounterLocation':\n payload['location'] = node.control.value;\n break;\n default:\n break;\n }\n }\n });\n\n return payload;\n }\n\n getEncounterNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getEncounterNodes(rootNode, results);\n return results;\n }\n\n setNonFilledPayloadMembers(form: Form, payload) {\n if (form.valueProcessingInfo.patientUuid) {\n this.setPayloadPatientUuid(payload, form.valueProcessingInfo.patientUuid);\n }\n\n if (form.valueProcessingInfo.visitUuid) {\n this.setPayloadVisitUuid(payload, form.valueProcessingInfo.visitUuid);\n }\n\n if (form.valueProcessingInfo.encounterTypeUuid) {\n this.setPayloadEncounterTypeUuid(\n payload,\n form.valueProcessingInfo.encounterTypeUuid\n );\n }\n\n if (form.valueProcessingInfo.formUuid) {\n this.setPayloadFormUuid(payload, form.valueProcessingInfo.formUuid);\n }\n\n if (form.valueProcessingInfo.encounterUuid) {\n this.setPayloadEncounterUuid(\n payload,\n form.valueProcessingInfo.encounterUuid\n );\n }\n }\n\n setPayloadPatientUuid(payload, patientUuid: string) {\n payload['patient'] = patientUuid;\n }\n\n setPayloadVisitUuid(payload, visitUuid: string) {\n payload['visit'] = visitUuid;\n }\n\n setPayloadEncounterTypeUuid(payload, encounterTypeUuid: string) {\n payload['encounterType'] = encounterTypeUuid;\n }\n\n setPayloadFormUuid(payload, formUuid: string) {\n payload['form'] = formUuid;\n }\n\n setPayloadEncounterUuid(payload, encounterUuid: string) {\n payload['uuid'] = encounterUuid;\n }\n\n private _getEncounterNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (this._isEncounterNode(rootNode)) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getEncounterNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getEncounterNodes(child, array);\n });\n }\n }\n\n private _isEncounterNode(node: NodeBase): boolean {\n if (\n node.question.extras &&\n (node.question.extras.type === 'encounterDatetime' ||\n node.question.extras.type === 'encounterProvider' ||\n node.question.extras.type === 'encounterLocation')\n ) {\n return true;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAttribuAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAttributeNodes(rootNode);\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n if (node.question.extras.questionOptions.isSimpleValue === true) {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n value: node.control.value\n });\n } else {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n hydratedObject: node.control.value\n });\n }\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (!Array.isArray(payload)) {\n throw new Error('Expected an array of attributes');\n }\n\n const nodes = this.getPersonAttributeNodes(rootNode);\n\n nodes.forEach((node) => {\n payload.forEach((element) => {\n if (\n element.attributeType.uuid ===\n node.question.extras.questionOptions.attributeType\n ) {\n if (element.value && element.value.uuid) {\n node.control.setValue(element.value.uuid);\n node.initialValue = element.value.uuid;\n node.control.uuid = payload['uuid'];\n } else {\n node.control.setValue(element.value);\n node.initialValue = element.value;\n node.control.uuid = payload['uuid'];\n }\n }\n });\n });\n }\n\n getPersonAttributeNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAttributesNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAttributesNodes(\n rootNode: NodeBase,\n array: Array<NodeBase>\n ) {\n if (\n rootNode.question.extras &&\n (rootNode.question.extras.type === 'personAttribute' ||\n rootNode.question.extras.type === 'amrsLocations' ||\n rootNode.question.extras.type === 'nonAmrsLocations' ||\n rootNode.question.extras.type === 'siblingLocations')\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAttributesNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAttributesNodes(child, array);\n });\n }\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n ViewChild,\n Output,\n EventEmitter,\n Renderer2\n} from '@angular/core';\nimport { SelectComponent } from '../../components/select/select.component';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n@Component({\n selector: 'remote-select',\n template: `<div>\n <ng-select\n [id]=\"componentID\"\n [noFilter]=\"0\"\n (selected)=\"selected($event)\"\n (deselected)=\"removed($event)\"\n [options]=\"items\"\n [allowClear]=\"true\"\n [placeholder]=\"placeholder\"\n [notFoundMsg]=\"notFoundMsg\"\n (typed)=\"typed($event)\"\n tabindex=\"0\"\n >\n </ng-select>\n <div *ngIf=\"loading\">resolving....</div>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteSelectComponent),\n multi: true\n }\n ]\n})\nexport class RemoteSelectComponent implements OnInit, ControlValueAccessor {\n // @Input() dataSource: DataSource;\n @Input() placeholder = 'Search...';\n @Input() componentID: string;\n items = [];\n value = [];\n loading = false;\n searchText = '';\n notFoundMsg = 'match no found';\n @Output() done: EventEmitter<any> = new EventEmitter<any>();\n\n characters = [];\n @ViewChild(SelectComponent) private selectC: SelectComponent;\n\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n if (this._dataSource && this._dataSource.dataFromSourceChanged) {\n this.subscribeToDataSourceDataChanges();\n }\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n subscribeToDataSourceDataChanges() {\n this._dataSource.dataFromSourceChanged.subscribe((results) => {\n if (results.length > 0) {\n this.items = results;\n this.notFoundMsg = '';\n // console.log('updating items', results, this.selectC.value);\n this.restoreSelectedValue(this.selectC.value, results);\n } else {\n this.notFoundMsg = 'Not found';\n this.items = [];\n }\n });\n }\n\n public typed(value: any): void {\n this.search(value);\n }\n search(value: string) {\n if (this.dataSource) {\n this.searchText = value;\n this.notFoundMsg = 'Loading.........';\n this.dataSource.searchOptions(value).subscribe(\n (result) => {\n if (result.length > 0) {\n const existing = _.map(this.value, _.clone);\n const concat = existing.concat(result);\n this.items = _.uniqBy(concat, 'value');\n }\n this.notFoundMsg = '';\n },\n (error) => {\n this.notFoundMsg = 'Errored';\n }\n );\n }\n }\n\n restoreSelectedValue(value, results) {\n let found = false;\n _.each(results, (item) => {\n if (item.value === value) {\n setTimeout(() => {\n this.selectC.select(value);\n this.selectC.value = value;\n });\n found = true;\n }\n });\n if (!found) {\n // console.log('not found after loading items', value, results);\n setTimeout(() => {\n this.selectC.select('');\n this.selectC.value = '';\n });\n }\n }\n\n canSearch(searchText: string) {\n return (\n (searchText.length - this.searchText.length >= 2 ||\n (searchText.length - this.searchText.length <= 2 &&\n searchText !== '')) &&\n this.loading === false\n );\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value && value !== '') {\n if (this.dataSource) {\n this.loading = true;\n this.dataSource.resolveSelectedValue(value).subscribe(\n (result: any) => {\n this.items = [result];\n setTimeout(() => {\n this.selectC.select(result.value);\n this.selectC.value = result.value;\n });\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n removed(event) {\n console.log('Removed');\n this.propagateChange('');\n }\n selected(event) {\n this.propagateChange(event.value);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (change: any) => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { RemoteSelectComponent } from './remote-select.component';\n\n@NgModule({\n imports: [CommonModule, SelectModule, FormsModule],\n exports: [RemoteSelectComponent],\n declarations: [RemoteSelectComponent],\n providers: []\n})\nexport class RemoteSelectModule {}\n","import { Component, OnInit, OnChanges, Input } from '@angular/core';\n\nimport { LeafNode } from '../../form-entry/form-factory/form-node';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\ninterface DailyScheduled {\n date: string;\n count: {\n scheduled: number;\n };\n}\ninterface WeeeklyScheduleReport {\n reports: {\n attended: any;\n hasNotReturned: any;\n scheduled: any;\n };\n results: DailyScheduled[];\n totals: {\n attended: number;\n hasNotReturned: number;\n scheduled: number;\n };\n}\ninterface DayCount {\n date: string;\n count: number;\n}\n\n@Component({\n selector: 'appointments-overview',\n template: `<div *ngIf=\"showAppointments\" class=\"appointments\">\n <p *ngIf=\"loadingAppointments\">\n <span *ngIf=\"!appointmentsLoaded && errorLoadingAppointments\"\n >Error checking appointments</span\n >\n <span *ngIf=\"loadingAppointments\"\n ><span class=\"fa fa-spinner fa-spin\"></span>Checking appointments...</span\n >\n </p>\n <div *ngIf=\"appointmentsLoaded && !errorLoadingAppointments\">\n <table\n *ngIf=\"appointments.length > 0\"\n class=\"table table-stripped table-bordered\"\n >\n <thead>\n <tr>\n <th\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span>{{ appointment.date }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span\n ><strong\n ><em>{{ appointment.count }}</em></strong\n ></span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n`,\n styles: [`.appointments{margin-top:12px;font-size:12px;color:#999}.appointments p{padding-top:12px}.appointments th{border-bottom:0!important;color:#333}.appointments td span,.appointments th span{display:block}.appointments td.active,.appointments th.active{background-color:#3c8dbc;color:#fff!important;padding:0}.appointments td.active span,.appointments th.active span{padding:4px}.appointments span.fa{display:inline-block;margin-right:7px}`]\n})\nexport class AppointmentsOverviewComponent implements OnInit, OnChanges {\n @Input() node: LeafNode;\n showAppointments = false;\n loadingAppointments = false;\n errorLoadingAppointments = false;\n appointmentsLoaded = false;\n appointments: Array<any> = [];\n today = '';\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.node.control.valueChanges.subscribe((v) => {\n this.resetProperties();\n const node = this.node;\n if (\n node.question.extras.questionOptions.concept &&\n (node.question.extras.questionOptions.concept ===\n 'a8a666ba-1350-11df-a1f1-0026b9348838' ||\n node.question.extras.questionOptions.concept ===\n 'a89d2398-1350-11df-a1f1-0026b9348838')\n ) {\n // console.log('what change is here', this.showAppointments);\n if (!this.showAppointments) {\n this.loadingAppointments = true;\n this.showAppointments = true;\n let dataSource;\n if (node.form && node.form.dataSourcesContainer.dataSources) {\n dataSource =\n node.form.dataSourcesContainer.dataSources\n .monthlyScheduleResourceService;\n }\n const locationUuid =\n node.form.dataSourcesContainer.dataSources.userLocation.uuid;\n if (dataSource && locationUuid) {\n const startDate = moment(v)\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD');\n const endDate = moment(v)\n .endOf('week')\n .subtract(1, 'day')\n .format('YYYY-MM-DD');\n this.today = moment(v).format('DD-MM-YYYY');\n dataSource\n .getMonthlySchedule({\n startDate: startDate,\n endDate: endDate,\n limit: 5,\n locationUuids: locationUuid,\n department: 'HIV',\n groupBy: 'groupByPerson,groupByAttendedDate,groupByRtcDate'\n })\n .subscribe(\n (data: WeeeklyScheduleReport) => {\n const _data: DayCount[] = [];\n const weeklyMap = new Map();\n // create the weeks schedule with zero appointments\n for (let i = 0; i < 5; i++) {\n const scheduleDate = moment(v)\n .startOf('week')\n .add(i, 'day')\n .format('YYYY-MM-DD');\n const scheduledObj: DailyScheduled = {\n date: scheduleDate,\n count: {\n scheduled: 0\n }\n };\n weeklyMap.set(scheduleDate, scheduledObj);\n }\n\n const results: DailyScheduled[] = data.results || [];\n // replace placeholder schedules with actual schedules in the map obj\n results.forEach((scheduled: DailyScheduled) => {\n weeklyMap.set(scheduled.date, scheduled);\n });\n // retrieve scheduled obj from map to data array\n weeklyMap.forEach((value: DailyScheduled, key: string) => {\n const dayCount: DayCount = {\n date: key,\n count: value.count.scheduled || 0\n };\n _data.push(dayCount);\n });\n this.appointmentsLoaded = true;\n this.loadingAppointments = false;\n\n this.appointments = _data;\n },\n (error: any) => {\n this.loadingAppointments = false;\n this.errorLoadingAppointments = true;\n this.showAppointments = false;\n console.error(error);\n }\n );\n } else {\n this.showAppointments = false;\n this.errorLoadingAppointments = true;\n }\n }\n }\n });\n }\n\n resetProperties() {\n this.loadingAppointments = false;\n this.appointmentsLoaded = false;\n this.errorLoadingAppointments = false;\n this.showAppointments = false;\n this.appointments = [];\n this.today = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n GroupNode,\n LeafNode,\n ArrayNode,\n NodeBase\n} from '../form-entry/form-factory/form-node';\nimport * as _ from 'lodash';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\nimport { Observable } from 'rxjs';\nimport { SelectOption } from '../form-entry/question-models/interfaces/select-option';\nconst comma = ', ';\nconst newLine = '\\n';\n\n@Injectable()\nexport class EncounterViewerService implements DataSource {\n constructor() {}\n public resolveSelectedValue(value: any): Observable<SelectOption> {\n return;\n }\n public searchOptions(searchText: any): Observable<SelectOption[]> {\n return;\n }\n public fileUpload(data: any): Observable<any> {\n return;\n }\n public fetchFile(url: any): Observable<any> {\n return;\n }\n\n public resolveSelectedValueFromSchema(\n answerUuid: string,\n schema: any\n ): string {\n let label;\n if (schema.pages) {\n _.forEach(schema.pages, (page) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, page);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.sections) {\n _.forEach(schema.sections, (section) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, section);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.questions) {\n _.forEach(schema.questions, (question) => {\n if (question.questions) {\n const l = this.resolveSelectedValueFromSchema(answerUuid, question);\n if (l) {\n label = l;\n }\n } else {\n if (question.questionOptions.answers) {\n _.forEach(question.questionOptions.answers, (answer) => {\n if (answer.concept === answerUuid) {\n label = answer.label;\n }\n });\n } else if (question.questionOptions.selectableOrders) {\n _.forEach(question.questionOptions.selectableOrders, (order) => {\n if (order.concept === answerUuid) {\n label = order.label;\n }\n });\n }\n }\n });\n }\n return label;\n }\n\n public hasAnswer(node: NodeBase) {\n let answered = false;\n if (node.initialValue) {\n answered = true;\n }\n return answered;\n }\n\n public questionsAnswered(node: any, answered?: boolean[]) {\n const $answered = answered || [];\n if (node.question.renderingType === 'page') {\n _.forEach(node.children, (childNode: any) => {\n this.questionsAnswered(childNode, $answered);\n });\n } else if (node.question.renderingType === 'section') {\n _.forEach(node.children, (childNode) => {\n if (childNode.question.renderingType === 'group') {\n _.forEach(childNode.children, (child) => {\n const ans = this.questionsAnswered(child, $answered);\n if (ans) {\n $answered.push(ans);\n }\n });\n } else if (this.hasAnswer(childNode)) {\n $answered.push(true);\n }\n });\n } else {\n return this.hasAnswer(node);\n }\n\n if ($answered.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n\n public isDate(val: any) {\n if (Date.parse(val)) {\n return true;\n } else {\n return false;\n }\n }\n public convertTime(unixTimestamp: number) {\n const a = new Date(unixTimestamp);\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n const year = a.getFullYear();\n const month = months[a.getMonth()];\n const date = a.getDate();\n const hour = a.getHours();\n const min = a.getMinutes();\n const sec = a.getSeconds();\n const suffix = hour < 12 ? 'AM' : 'PM';\n let time;\n if (hour === 0 && min === 0) {\n time = date + ' ' + month + ' ' + year;\n } else {\n time =\n date +\n ' ' +\n month +\n ' ' +\n year +\n ' ' +\n hour +\n ':' +\n min +\n suffix +\n ' (EAT)';\n }\n return time;\n }\n}\n","import { Component, OnInit, Input, Inject } from '@angular/core';\nimport {\n NodeBase,\n GroupNode,\n LeafNode\n} from '../../form-entry/form-factory/form-node';\nimport { QuestionBase } from '../../form-entry/question-models/question-base';\nimport * as _ from 'lodash';\n\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { DataSources } from '../../form-entry/data-sources/data-sources';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\n\nimport { EncounterViewerService } from '../encounter-viewer.service';\n\n@Component({\n selector: 'encounter-viewer',\n template: `<div class=\"viewer\">\n <div *ngIf=\"rootNode.question.renderingType === 'form'\" class=\"form\">\n <div *ngFor=\"let question of rootNode.question.questions; let i = index\">\n <div *ngIf=\"questionsAnswered(rootNode.children[question.key])\">\n <div [attr.id]=\"'page' + i\" class=\"panel panel-default\">\n <p class=\"page-label panel-heading text-primary\">\n {{ question.label }}\n </p>\n <div class=\"panel-body\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentComponent]=\"this\"\n [parentGroup]=\"rootNode.control\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.renderingType === 'page'\" class=\"page\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n\n <div\n *ngIf=\"\n rootNode.question.renderingType === 'section' &&\n questionsAnswered(rootNode)\n \"\n class=\"section\"\n >\n <div class=\"panel panel-primary\">\n <p class=\"panel-heading section-label\">{{ rootNode.question.label }}</p>\n </div>\n <div *ngFor=\"let question of rootNode.question.questions\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [parentComponent]=\"this\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n </div>\n\n <!--Leaf Controls-->\n <div style=\"margin-left: 10px\">\n <form *ngIf=\"rootNode.question.controlType === 0\" [formGroup]=\"parentGroup\">\n <div *ngIf=\"rootNode.control.value\">\n <div class=\"question-answer\">\n <label\n *ngIf=\"rootNode.question.label\"\n [attr.for]=\"rootNode.question.key\"\n style=\"font-weight: 400\"\n >\n {{ rootNode.question.label }}\n </label>\n <span *ngIf=\"checkForColon(rootNode.question.label)\">:</span>\n <div\n [ngSwitch]=\"rootNode.question.renderingType\"\n style=\"display: inline-block; font-weight: bold\"\n >\n <div *ngSwitchCase=\"'file'\">\n <file-preview\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"fileDataSource\"\n ></file-preview>\n </div>\n <div *ngSwitchCase=\"'remote-select'\">\n <remote-answer\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"remoteDataSource\"\n ></remote-answer>\n </div>\n <div *ngSwitchDefault style=\"display: inline-block\">\n <question-control\n [schema]=\"_schema\"\n [value]=\"rootNode.control.value\"\n [dataSource]=\"customDataSource\"\n ></question-control>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n\n <!--Array Controls-->\n <div\n *ngIf=\"rootNode.question.controlType === 1 && questionsAnswered(rootNode)\"\n >\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'repeating'\">\n <div [ngSwitch]=\"rootNode.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <label>{{ rootNode.question.label }}:</label>\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\">\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.controlType === 2\">\n <!--GROUP-->\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n <div *ngSwitchCase=\"'field-set'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n</div>\n`,\n styles: [`.page-label{font-size:20px;font-weight:700}.section-label{font-size:18px;font-weight:500}.panel-primary{border:none!important}.question-answer{font-size:16px}.panel{margin-bottom:5px}div.section{margin-bottom:15px!important}.line-breaker{white-space:pre-line}hr{margin:10px}`]\n})\nexport class EncounterViewerComponent implements OnInit {\n public rootNode: NodeBase;\n public enc: any;\n public fileDataSource: DataSource;\n public remoteDataSource: DataSource;\n public customDataSource: DataSource;\n public _schema;\n @Input() public parentGroup: AfeFormGroup;\n @Input() public parentComponent: EncounterViewerComponent;\n @Input() set node(rootNode: NodeBase) {\n this.rootNode = rootNode;\n }\n\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n\n @Input() public set encounter(enc: any) {\n this.enc = enc;\n }\n @Input() set form(form: any) {\n this.rootNode = form.rootNode;\n this._schema = form.schema;\n console.log(this.getQuestionNodes(this.traverse(this.rootNode)));\n }\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private dataSources: DataSources\n ) {}\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n arrays.push(page.page);\n }\n return merged.concat.apply([], arrays);\n }\n public ngOnInit() {\n if (this.rootNode) {\n }\n if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'file'\n ) {\n this.fileDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'remote-select'\n ) {\n this.remoteDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else {\n this.customDataSource = this.encounterViewerService;\n }\n }\n\n public questionsAnswered(node: any) {\n const $answered = this.encounterViewerService.questionsAnswered(node);\n return $answered;\n }\n\n public questionAnswered(node: NodeBase) {\n const answered = this.encounterViewerService.hasAnswer(node);\n return answered;\n }\n\n public checkForColon(questionLabel: string) {\n if (questionLabel.indexOf(':') === -1) {\n return true;\n } else {\n return false;\n }\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({ page: page });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({ section: section });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n } else {\n console.log('Console.log', o);\n }\n }\n return questions;\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Form } from '../form-entry/form-factory/form';\nimport { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { DataSources } from '../form-entry/data-sources/data-sources';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\nimport { combineLatest, BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs/Observable';\n\nimport * as moment_ from 'moment';\nimport * as _ from 'lodash';\nimport * as pdfMake from 'pdfmake/build/pdfmake.js';\nimport 'pdfmake/build/vfs_fonts.js';\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\n\nconst moment = moment_;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncounterPdfViewerService {\n private remoteDataSource: DataSource;\n public error: boolean;\n public errorMessage: string;\n public showLoader: boolean;\n public subscribedAnswers: any = {\n questions: {\n stack: []\n },\n answers: []\n };\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private obsValueAdapter: ObsValueAdapter,\n private dataSources: DataSources\n ) {}\n\n getPages(\n pages: any,\n form: Form,\n remoteSelectsOnly?: boolean,\n remoteAns?: any\n ): any[] {\n const content = [];\n let remoteQuestions = [];\n\n for (const page of pages) {\n if (remoteSelectsOnly) {\n remoteQuestions = remoteQuestions.concat(\n this.getSections(page.page, form, false, remoteAns)\n );\n } else {\n for (const question of form.rootNode.question.questions) {\n if (\n page.label ===\n form.rootNode.children[question.key].question.label &&\n this.encounterViewerService.questionsAnswered(\n form.rootNode.children[question.key]\n )\n ) {\n content.push({\n style: 'tableExample',\n table: {\n widths: ['*'],\n headerRows: 1,\n keepWithHeaderRows: 1,\n body: [\n [{ text: page.label, style: 'tableHeader' }],\n [\n {\n style: 'tableExample',\n table: {\n widths: ['*'],\n body: this.getSections(page.page, form, true, remoteAns)\n },\n layout: 'noBorders',\n margin: [5, 0, 0, 0]\n }\n ]\n ]\n },\n layout: {\n hLineWidth: function (i, node) {\n return i === 0 || i === node.table.body.length ? 0.5 : 0.5;\n },\n vLineWidth: function (i, node) {\n return i === 0 || i === node.table.widths.length ? 0.5 : 0.5;\n },\n hLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n },\n vLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n }\n }\n });\n }\n }\n }\n }\n return remoteSelectsOnly ? remoteQuestions : content;\n }\n\n getSections(sections: any, form: Form, resolve: any, remoteAns: any): any[] {\n const content = [];\n const answeredSections = [];\n let questions: Array<Observable<any>> = [];\n\n sections.map((s) => {\n if (this.encounterViewerService.questionsAnswered(s.node)) {\n answeredSections.push(s);\n }\n });\n\n for (const section of answeredSections) {\n questions = questions.concat(this.getRemoteSectionData(section.section));\n }\n\n if (resolve && remoteAns) {\n for (const section of answeredSections) {\n content.push([\n {\n table: {\n widths: ['*'],\n body: [\n [{ text: section.label, style: 'tableSubheader' }],\n [this.getSectionData(section.section, remoteAns, form)]\n ]\n },\n layout: 'noBorders'\n }\n ]);\n }\n return content;\n } else {\n return questions;\n }\n }\n\n private appendResolvedAnswer(\n resolvedAnswer: any,\n questions: any,\n node?: any\n ) {\n if (resolvedAnswer) {\n questions.stack.push({\n text: [\n `${node ? node.question.label : 'Question label'}${\n node ? (node.question.label.indexOf(':') > 1 ? '' : ':') : ''\n } `,\n { text: `${resolvedAnswer}`, bold: true }\n ],\n style: 'answers'\n });\n }\n }\n\n // get remote selects only\n getRemoteSectionData(section: any): any {\n const questions: Array<Observable<any>> = [];\n this.subscribedAnswers.questions.stack = [];\n\n for (const node of section) {\n if (node.question.renderingType === 'remote-select') {\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n if (node.control.value !== '') {\n if (this.remoteDataSource) {\n questions.push(\n this.remoteDataSource.resolveSelectedValue(node.control.value)\n );\n }\n }\n }\n }\n return questions;\n }\n\n // merge remote selects\n getSectionData(section: any, remoteAns: any[], form: Form): any {\n const questions = {\n stack: []\n };\n\n let resolvedAnswer = '';\n\n for (const node of section) {\n switch (node.question.renderingType) {\n case 'group':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'field-set':\n if (node.children) {\n const groupMembers = [];\n const result = Object.keys(node.children).map(\n (key) => node.children[key]\n );\n\n if (result) {\n groupMembers.push(result);\n questions.stack.push(\n this.getSectionData(groupMembers[0], remoteAns, form)\n );\n }\n }\n break;\n\n case 'repeating':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'remote-select':\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n for (const ans of remoteAns) {\n if (ans.value === node.control.value) {\n this.appendResolvedAnswer(ans.label, questions, node);\n }\n }\n break;\n\n default:\n const answer = node.control.value;\n if (answer) {\n resolvedAnswer = this.resolveValue(answer, form);\n this.appendResolvedAnswer(resolvedAnswer, questions, node);\n }\n }\n }\n\n return questions;\n }\n\n resolveValue(answer: any, form: Form, arrayElement?: boolean): any {\n if (answer !== '') {\n if (this.isUuid(answer)) {\n const val = this.encounterViewerService.resolveSelectedValueFromSchema(\n answer,\n form.schema\n );\n if (!arrayElement) {\n if (val) {\n return val.toUpperCase();\n } else {\n return answer;\n }\n } else {\n return val;\n }\n } else if (_.isArray(answer)) {\n const arr = [];\n _.forEach(answer, (elem) => {\n arr.push(this.resolveValue(elem, form, true));\n });\n return arr.toString();\n } else if (this.isDate(answer)) {\n if (!arrayElement) {\n return this.encounterViewerService.convertTime(answer);\n } else {\n return this.encounterViewerService.convertTime(answer);\n }\n } else if (typeof answer === 'object') {\n const values = [];\n const result = Object.keys(answer).map((key) => [key, answer[key]]);\n\n values.push(result);\n return values;\n } else {\n return answer;\n }\n }\n }\n\n generatePdfDefinition(form: Form): any {\n const docDefinition$ = new BehaviorSubject<any>({});\n const remoteSelects = this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n true\n );\n\n combineLatest(remoteSelects).subscribe((remoteAns) => {\n if (remoteAns) {\n const docDefinition = {\n pageSize: 'A4',\n content: this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n false,\n remoteAns\n ),\n styles: {\n answers: {\n fontSize: 8\n },\n banner: {\n fontSize: 9,\n bold: true,\n margin: [50, 15, 30, 0]\n },\n bannerItem: {\n margin: [2, 2, 2, 2]\n },\n bannerLabel: {\n color: '#2f4f4f'\n },\n confidential: {\n color: 'red',\n fontSize: 8,\n bold: true,\n margin: [60, 0, 0, 0]\n },\n footer: {\n alignment: 'center',\n fontSize: 8,\n bold: true\n },\n header: {\n fontSize: 9,\n bold: true,\n margin: [5, 5, 5, 5]\n },\n pageNumber: {\n color: '#2f4f4f',\n fontSize: 6\n },\n tableExample: {\n fontSize: 10,\n margin: [5, 0, 0, 5]\n },\n tableHeader: {\n fillColor: '#f5f5f5',\n width: ['100%'],\n borderColor: '#333',\n fontSize: 9,\n bold: true,\n margin: [5, 0, 5, 0]\n },\n tableSubheader: {\n fillColor: '#337ab7',\n width: ['100%'],\n fontSize: 9,\n color: 'white',\n margin: [5, 0, 5, 0]\n },\n timestamp: {\n bold: true,\n color: '#2f4f4f'\n }\n },\n defaultStyle: {\n fontSize: 7\n }\n };\n docDefinition$.next(docDefinition);\n }\n });\n\n return docDefinition$;\n }\n\n displayPdf(form) {\n const pdf = pdfMake;\n let patient;\n pdf.vfs = pdfMake.vfs;\n\n if (form.dataSourcesContainer.dataSources._dataSources) {\n patient =\n form.dataSourcesContainer.dataSources._dataSources['patientInfo'];\n }\n\n this.generatePdfDefinition(form).subscribe(\n (docDefinition) => {\n if (!_.isEmpty(docDefinition)) {\n if (typeof patient !== 'undefined') {\n const banner = [];\n\n if (patient.name) {\n banner.push({\n text: [\n { text: 'Name: ', style: 'bannerLabel' },\n { text: `${this.titleize(patient.name)}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.nid) {\n banner.push({\n text: [\n { text: 'ID: ', style: 'bannerLabel' },\n { text: `${patient.nid}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.birthdate) {\n banner.push({\n text: [\n { text: 'DOB: ', style: 'bannerLabel' },\n {\n text: `${moment(patient.birthdate).format('l')} (${\n patient.age\n } yo)`\n }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mui) {\n banner.push({\n text: [\n { text: 'MUI: ', style: 'bannerLabel' },\n { text: `${patient.mui}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mhn) {\n banner.push({\n text: [\n { text: 'MTRH No: ', style: 'bannerLabel' },\n { text: `${patient.mhn}` }\n ],\n style: 'bannerItem'\n });\n }\n\n docDefinition.header = {\n style: 'banner',\n table: {\n body: [banner]\n },\n layout: 'noBorders'\n };\n }\n\n docDefinition.footer = (currentPage, pageCount) => {\n return {\n style: 'footer',\n widths: ['*', 'auto'],\n table: {\n body: [\n [\n {\n text:\n 'Note: Confidentiality is one of the core duties of all medical practitioners. ' +\n \"Patients' personal health information should be kept private.\",\n style: 'confidential'\n },\n ''\n ],\n [\n {\n text: `Generated on ${new Date().toUTCString()}`,\n style: 'timestamp'\n },\n {\n text: `${currentPage.toString()} of ${pageCount}`,\n style: 'pageNumber'\n }\n ]\n ]\n },\n layout: 'noBorders'\n };\n };\n\n const win = window.open('', '_blank');\n pdf.createPdf(docDefinition).open({}, win);\n }\n },\n (error) => {\n console.log('Error: ', error);\n }\n );\n }\n\n isDate(val: any) {\n return moment(val, moment.ISO_8601, true).isValid();\n }\n\n isUuid(value: string) {\n return (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n );\n }\n\n titleize(str) {\n return str.replace(\n /\\w\\S*/g,\n (s) => s.charAt(0).toUpperCase() + s.substr(1).toLowerCase()\n );\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Form } from '../../form-entry/form-factory/form';\nimport { NodeBase } from '../../form-entry/form-factory/form-node';\nimport { EncounterAdapter } from '../../form-entry/value-adapters/encounter.adapter';\n\nimport { EncounterPdfViewerService } from '../encounter-pdf-viewer.service';\n\n@Component({\n selector: 'encounter-renderer',\n template: `<a\n type=\"button\"\n style=\"display: block; font-size: 28px; cursor: pointer\"\n class=\"text-right\"\n (click)=\"displayPdf()\"\n>\n <span class=\"glyphicon text-primary glyphicon-print\"></span>\n</a>\n<encounter-viewer\n class=\"card\"\n [form]=\"$form\"\n [encounter]=\"$enc\"\n></encounter-viewer>\n`,\n styles: [`.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}`]\n})\nexport class EncounterContainerComponent implements OnInit {\n public $form: Form;\n public $enc: any;\n\n @Input() public set form(form) {\n this.$form = form;\n }\n @Input() public set encounter(enc) {\n this.$enc = enc;\n }\n\n constructor(\n private encAdapter: EncounterAdapter,\n private encounterPdfViewerService: EncounterPdfViewerService\n ) {}\n\n ngOnInit() {}\n\n displayPdf() {\n this.encounterPdfViewerService.displayPdf(this.$form);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'question-control',\n styles: [`input{border:none;box-shadow:none;color:#000;background:#fff!important;padding-top:23px;display:block;position:relative}`],\n template: `<div>\n {{ innerValue }}\n</div>\n`\n})\nexport class QuestionControlComponent implements OnInit {\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n @Input() public set value(value) {\n this._value = value;\n }\n @Input() public set dataSource(dataSource: any) {\n this._dataSource = dataSource;\n }\n // The internal data model\n public innerValue: any = '';\n private _value: any;\n private _schema: any;\n private _dataSource: EncounterViewerService;\n constructor() {}\n\n ngOnInit() {\n this.writeValue(this._value);\n }\n public isUuid(value: string) {\n if (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n // Current time string.\n\n public writeValue(v: any, arrayElement?: boolean) {\n if (v !== this.innerValue) {\n if (this.isUuid(v)) {\n if (!arrayElement) {\n const val = this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n if (val) {\n this.innerValue = val.toUpperCase();\n } else {\n this.innerValue = v;\n }\n } else {\n return this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n }\n } else if (_.isArray(v)) {\n const arr = [];\n _.forEach(v, (el) => {\n arr.push(this.writeValue(el, true));\n });\n this.innerValue = arr;\n } else if (this.isDate(v)) {\n if (!arrayElement) {\n this.innerValue = this._dataSource.convertTime(v);\n } else {\n return this._dataSource.convertTime(v);\n }\n } else {\n if (!arrayElement) {\n this.innerValue = v;\n } else {\n return v;\n }\n }\n }\n }\n\n public isDate(str: string) {\n return this._dataSource.isDate(str) && !_.isNumber(str);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'file-preview',\n styles: [``],\n template: `<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!resultsIsPdf\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this._dataSource.fetchFile\"\n alt=\"image\"\n />\n </div>\n <a *ngIf=\"resultsIsPdf\" (click)=\"getUrl()\" style=\"cursor: pointer\"\n ><u>Open PDF</u></a\n > `,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FilePreviewComponent),\n multi: true\n }\n ]\n})\nexport class FilePreviewComponent implements ControlValueAccessor, OnInit {\n @Input() public source: any;\n public fileUuid = null;\n public pdfUrl: any;\n public resultsIsPdf = false;\n public _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor(private encounterService: EncounterViewerService) {}\n ngOnInit() {}\n // get accessor\n get value(): any {\n return this.fileUuid;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n this.checkFileType();\n }\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.resultsIsPdf = true;\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {\n // const files = event.srcElement.files;\n // const fileToLoad = files[0];\n // const fileReader = new FileReader();\n // fileReader.onload = (fileLoadedEvent) => {\n // const data = fileReader.result;\n // const fileType = data.substring('data:image/'.length, data.indexOf(';base64'));\n // const payload = {\n // data,\n // extension: fileType\n // };\n // };\n // fileReader.readAsDataURL(fileToLoad);\n }\n public getUrl() {\n this.dataSource.fetchFile(this.fileUuid, 'pdf').subscribe((file) => {\n window.open(file.changingThisBreaksApplicationSecurity, '_blank');\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'remote-answer',\n styles: [],\n template: `\n <div *ngIf=\"innerValue\">\n {{ innerValue }}\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteAnswerComponent),\n multi: true\n }\n ]\n})\nexport class RemoteAnswerComponent implements ControlValueAccessor {\n @Input() public source: any;\n public innerValue = null;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor() {}\n // get accessor\n get value(): any {\n return this.innerValue;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.innerValue) {\n if (this._dataSource) {\n this._dataSource.resolveSelectedValue(v).subscribe((ans) => {\n this.innerValue = ans.label;\n });\n } else {\n this.innerValue = v;\n }\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EncounterViewerComponent } from './encounter-view/encounter-viewer.component';\nimport { EncounterContainerComponent } from './encounter-container/encounter-container.component';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { EncounterPdfViewerService } from './encounter-pdf-viewer.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionControlComponent } from './display-controls/question-control.component';\nimport { FilePreviewComponent } from './display-controls/file-preview.component';\nimport { RemoteAnswerComponent } from './display-controls/remote-answer.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SharedModule } from '../shared.module';\n@NgModule({\n declarations: [\n EncounterViewerComponent,\n EncounterContainerComponent,\n QuestionControlComponent,\n FilePreviewComponent,\n RemoteAnswerComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n HttpClientModule,\n SharedModule\n ],\n providers: [EncounterViewerService, EncounterPdfViewerService],\n exports: [EncounterContainerComponent, HttpClientModule]\n})\nexport class EncounterViewerModule {}\n","import {\n Component,\n Input,\n forwardRef,\n OnInit,\n AfterViewInit\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'checkbox',\n template: `<div *ngFor=\"let option of options; let i = index\">\n <label class=\"form-control no-border\">\n <input\n type=\"checkbox\"\n id=\"i + 'id'\"\n (change)=\"selectOpt(option, $event)\"\n value=\"option.value\"\n [checked]=\"option.checked\"\n />\n {{ option.label }}\n </label>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlComponent),\n multi: true\n }\n ],\n styles: [\n `\n .no-border {\n border: 0;\n box-shadow: none;\n }\n `\n ]\n})\nexport class CheckboxControlComponent implements OnInit, AfterViewInit {\n @Input() public options: Array<any>;\n @Input() public selected: Array<any>;\n public _value: Array<any> = [];\n\n public ngOnInit() {\n this.options = this.options.map((option) => {\n if (this.selected.indexOf(option.value) !== -1) {\n Object.assign(option, { checked: true });\n }\n return option;\n });\n }\n\n public ngAfterViewInit() {}\n\n public writeValue(value: any) {\n this.value = value;\n }\n\n public registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this._value || this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n }\n\n public selectOpt(option, event) {\n if (event.target.checked) {\n this._value.push(option.value);\n } else {\n this.options.forEach((o) => {\n if (o.value === option.value) {\n this._value.splice(o, 1);\n }\n });\n }\n\n this.onChange(this.value);\n }\n\n private onChange = (change: any) => {};\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxControlComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [CheckboxControlComponent],\n exports: [CheckboxControlComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class CheckboxModule {}\n","import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Component, OnInit, forwardRef } from '@angular/core';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Component({\n selector: 'ngx-time-picker',\n template: `<input\n type=\"time\"\n class=\"form-control\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onTimeSelect($event)\"\n/>\n`,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => NgxTimePickerComponent)\n }\n ]\n})\nexport class NgxTimePickerComponent implements OnInit, ControlValueAccessor {\n public value: string = moment().format('HH:mm:ss');\n public onChange: any = () => {};\n public onTouched: any = () => {};\n\n public ngOnInit() {}\n\n public writeValue(value: any): void {\n this.value = this.formatTimeValue(value);\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n public onTimeSelect($event: string): void {\n const timeValue = this.formatTimeValue($event);\n this.value = timeValue;\n this.onChange(timeValue);\n }\n\n public formatTimeValue(timeInputString: string): string {\n /*\n Allows processing of data that comes in as date-time\n or just time i.e '1970-03-01 12:32:21' or '12:32:21'\n or '12:32' or '1970-01-01T13:03:00.000+0300'\n */\n let timeArray = [];\n let dateArray = [];\n let timeValue = '';\n\n if (typeof timeInputString === 'undefined' || timeInputString === null) {\n } else {\n timeArray = timeInputString.split(':');\n dateArray = timeInputString.split('-');\n }\n if (timeArray.length === 1 && moment(timeInputString).isValid()) {\n timeValue = moment(timeInputString).format('HH:mm:ss');\n } else if (timeArray.length > 1 && timeArray.length < 2) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length > 1) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length <= 1) {\n timeValue = moment(timeInputString, 'HH:mm:ss').format('HH:mm:ss');\n } else {\n timeValue = moment().format('HH:mm:ss');\n }\n return timeValue;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxTimePickerComponent } from './ngx-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n declarations: [NgxTimePickerComponent],\n exports: [NgxTimePickerComponent],\n providers: []\n})\nexport class NgxTimePickerModule {}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAddressAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAddressNodes(rootNode);\n const element = {};\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n element[node.question.extras.questionOptions.addressType] =\n node.control.value;\n element['uuid'] = node.control.uuid;\n payload.push(element);\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n const nodes = this.getPersonAddressNodes(rootNode);\n nodes.forEach((node) => {\n Object.keys(payload).forEach((key, value) => {\n if (key === node.question.extras.questionOptions.addressType) {\n if (value) {\n node.control.setValue(payload[key]);\n node.initialValue = payload[key];\n node.control.uuid = payload['uuid'];\n } else {\n node.control.setValue(payload[key]);\n node.initialValue = payload[key];\n node.control.uuid = payload['uuid'];\n }\n }\n });\n });\n }\n\n getPersonAddressNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAddressNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAddressNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (\n rootNode.question.extras &&\n rootNode.question.extras.type === 'personAddress'\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAddressNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAddressNodes(child, array);\n });\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { MatTabsModule, MatIconModule, MatCardModule } from '@angular/material';\n// import { NoopAnimationsModule} from '@angular/platform-browser/animations';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormBuilder } from '@angular/forms';\nimport { DebugModeService } from '../form-entry/services/debug-mode.service';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { FormErrorsService } from './services/form-errors.service';\nimport { FormControlService } from './form-factory/form-control.service';\nimport { ValidationFactory } from './form-factory/validation.factory';\nimport { FormRendererComponent } from './form-renderer/form-renderer.component';\nimport { ErrorRendererComponent } from './error-renderer/error-renderer.component';\nimport { HistoricalValueDirective } from './directives/historical-value-directive';\nimport { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';\nimport { SelectModule } from '../components/select/select.module';\n// import { NgSelectModule } from '@ng-select/ng-select';\nimport { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';\nimport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nimport { NgxDateTimePickerModule } from '../components/ngx-date-time-picker/ngx-date-time-picker.module';\nimport { AfeNgSelectComponent } from '../components/afe-ng-select.component';\nimport { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';\nimport { AlertsFactory } from './form-factory/show-messages.factory';\nimport { ExpressionRunner } from './expression-runner/expression-runner';\nimport { JsExpressionHelper } from './helpers/js-expression-helper';\nimport { FormSchemaCompiler } from './services/form-schema-compiler.service';\nimport { FormFactory } from './form-factory/form.factory';\nimport { QuestionFactory } from './form-factory/question.factory';\nimport { ControlRelationsFactory } from './form-factory/control-relations.factory';\nimport { EncounterAdapter } from './value-adapters/encounter.adapter';\nimport { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';\nimport { OrderValueAdapter } from './value-adapters/order.adapter';\nimport { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';\nimport { ObsValueAdapter } from './value-adapters/obs.adapter';\nimport { RemoteSelectModule } from '../components/remote-select/remote-select.module';\nimport { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';\nimport { EncounterViewerModule } from '../encounter-viewer/encounter-viewer.module';\nimport { CheckboxModule } from '../components/check-box/checkbox.module';\nimport { SharedModule } from '../shared.module';\nimport { TimeAgoPipe } from 'time-ago-pipe';\nimport { NgxTimePickerModule } from '../components/ngx-time-picker/ngx-time-picker.module';\nimport { PersonAddressAdapter } from './value-adapters/person-address.adapter';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CollapseModule,\n // NgSelectModule,\n SelectModule,\n DateTimePickerModule,\n RemoteSelectModule,\n // NoopAnimationsModule,\n RemoteFileUploadModule,\n EncounterViewerModule,\n CheckboxModule,\n MatIconModule,\n MatTabsModule,\n MatCardModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule,\n SharedModule\n ],\n declarations: [\n FormRendererComponent,\n AfeNgSelectComponent,\n AppointmentsOverviewComponent,\n HistoricalValueDirective,\n ErrorRendererComponent,\n TimeAgoPipe\n ],\n providers: [\n FormBuilder,\n FormControlService,\n FormErrorsService,\n ValidationFactory,\n HidersDisablersFactory,\n AlertsFactory,\n ExpressionRunner,\n JsExpressionHelper,\n HistoricalFieldHelperService,\n FormSchemaCompiler,\n FormFactory,\n QuestionFactory,\n ValidationFactory,\n ControlRelationsFactory,\n ObsAdapterHelper,\n ObsValueAdapter,\n EncounterAdapter,\n PersonAttribuAdapter,\n OrderValueAdapter,\n DebugModeService,\n PersonAddressAdapter\n ],\n exports: [\n FormRendererComponent,\n AfeNgSelectComponent,\n ErrorRendererComponent,\n DateTimePickerModule,\n EncounterViewerModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule\n ]\n})\nexport class FormEntryModule {}\n","export class Pair {\n key: string;\n\n value: any;\n\n constructor(key: string, value: any) {\n this.key = key;\n this.value = value;\n }\n}\n","export enum RenderingType {\n Form,\n Page,\n Section,\n Select,\n DropDown\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/debug-mode.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-errors.service.ts","null","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relation.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/hider-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-alerts/alert-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/disabler-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-node.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/js-expression-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/conditional-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/control-relations.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/expression-runner/expression-runner.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-control.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-group.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-array.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-control-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/question-base.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-answered.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/future-date-restriction.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/js-expression-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/validations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/js-expression.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/utils/messages.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/validation.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/hiders-disablers.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/show-messages.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-control.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.css.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/data-sources.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/error-renderer/error-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-field-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/directives/historical-value-directive.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/diacritics.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option-list.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/secure.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/shared.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-picker/date-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/time-picker/time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/picker-modal/modal.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/pipes/moment.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/afe-ng-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-schema-compiler.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-area-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/ui-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/multi-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/interfaces/nested-questions.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/group-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/repeating-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/checkbox.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/time-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/file-upload-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/test-order-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/max-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/min-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/decimal-point-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/dummy-data-source.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/historical-encounter-data.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-expression-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/question.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs-adapter-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/order.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/encounter.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-attribute.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/appointments-overview/appointments-overview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-view/encounter-viewer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-pdf-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-container/encounter-container.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/question-control.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/file-preview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/remote-answer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-address.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-entry.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/pair.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/rendering-type.ts"],"names":["DebugModeService","this","cookieKey","prototype","debugEnabled","Injectable","FormErrorsService","announceErrorFieldSource","Subject","announceErrorField$","asObservable","announceErrorField","error","next","control","tab","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","create","__values","o","s","Symbol","iterator","m","i","call","length","value","done","TypeError","ControlRelation","relatedTo","_control","_relatedTo","_registerForChangesFromRelatedControl","defineProperty","_lastUpdateValue","updateControlBasedOnRelation","newValue","updateCalculatedValue","updateValueAndValidity","updateHiddenState","updateDisabledState","updateAlert","_this","valueChanges","subscribe","ControlRelations","relationFor","_otherRelations","_relationFor","_relations","addRelatedControls","AbstractControl","relations","push","HiderHelper","hideControl","hidden","disable","showControl","setHiderForControl","hider","hiders","clearHidersForControl","splice","evaluateControlHiders","hiddenValue","forEach","reEvaluateHidingExpression","toHide","setUpReEvaluationWhenValueChanges","val","AlertHelper","hideAlert","shown","showAlert","setAlertsForControl","alert","alerts","clearAlertsForControl","evaluateControlAlerts","messageValue","message","reEvaluateAlertExpression","alertMessage","DisablerHelper","setDisablerForControl","disabler","disablers","clearDisablersForControl","evaluateControlDisablers","toDisable","reEvaluateDisablingExpression","enable","NodeBase","question","form","parentPath","_questionModel","_form","_path","key","removeAt","index","createChildNode","removeChildNode","LeafNode","_super","parentControl","tslib_1.__extends","GroupNode","_children","setChild","node","children","ArrayNode","formFactory","childNodeCreatedEvents","createChildFunc","g","fireChildNodeCreatedListener","confirm","removeChildFunc","addChildNodeCreatedListener","func","ValidationModel","validations","type","JsExpressionValidationModel","failsWhenExpression","ConditionalValidationModel","referenceQuestionId","referenceQuestionAnswers","ControlRelationsFactory","buildRelations","rootNode","controlsStore","mapControlIds","nodeBase","setRelations","buildArrayNodeRelations","rootControlsStore","arrayControlStore","child","questionBase","id","createRelationsToArrayControls","rChild","parentNodePath","path","substring","lastIndexOf","indexOf","aChild","aChildId","this_1","hasRelation","nodes","searchNodeByPath","an","rootControl_1","controlRelations","otherRelations","addValueChangeListener","getRelationsForControl","nodeBaseArray","searchNodeByQuestionId","controlList","addRelationToControl","required","validators","element","hide","field","calculateExpression","related","moment","moment_","ExpressionRunner","getRunnable","expression","helper","dataDependencies","runner","runnable","run","scope","uuid","window","getControlRelationValueString","getHelperMethods","getDataDependencies","dataSourcesContainer","dataSources","paramList","argList","funcDeclarationCode","funcCallCode","keys","console","warn","eval","e","relation","relatedAsControl","isArray","arrayNode","uuid_1","controlRelationsFactory_1","relationsForControl_1","concat","setControlArrayValues","relationsForControl","_getFormControlKeys","values","_getValuesForKey","array","obj","AfeFormControl","formState","validator","asyncValidator","hiderHelper","disablerHelper","_controlRelations","_previousValue","fireValueChangeListener","param","setValue","show","setHidingFn","newHider","setCalculatorFn","newCalculator","calculator","_val","clearHidingFns","setDisablingFn","newDisabler","clearDisablingFns","setAlertFn","clearMessageFns","_valueChangeListener","FormControl","AfeFormGroup","controls","FormGroup","AfeFormArray","_uuid","FormArray","AfeControlType","QuestionBase","options","defaultValue","originalValue","extras","renderingType","label","historicalDataValue","setHistoricalValue","v","enableHistoricalValue","showHistoricalEncounterDate","showHistoricalValueDate","undefined","ConditionalRequiredValidator","validate","model","isRequired","relationValue","conditional_required","ConditionalAnsweredValidator","successCondition","conditional_answered","RequiredValidator","DateValidator","test","Date","toString","date","MinValidator","min","requiredValue","actualValue","MaxValidator","max","MinDateValidator","mindate","requiredDate","newDate","getTime","actualDate","MaxDateValidator","maxdate","FutureDateRestrictionValidator","now","futureDateRestriction","JsExpressionHelper","calcBMI","height","weight","r","toFixed","parseFloat","calcBSA","result","Math","sqrt","calcBMIForAgeZscore","bmiForAgeRef","bmi","formattedSDValue","refSectionObject","_.first","refObjectValues","map","x","refObjectKeys","minimumValue","minReferencePoint_1","_.forEach","lastReferenceValue_1","_.last","_.findIndex","replace","includes","calcWeightForHeightZscore","weightForHeightRef","refSection","_.filter","refObject","minReferencePoint_2","lastReferenceValue_2","calcHeightForAgeZscore","heightForAgeRef","minReferencePoint_3","lastReferenceValue_3","isEmpty","arrayContains","members","contains","extractRepeatingGroupValues","item","formatDate","format","offset","Error","arrayContainsAny","Validations","JSExpressionValidatorsEnabled","JsExpressionValidator","helperFunctions","js_expression","Messages","REQUIRED_FIELD_MSG","INVALID_DATE_MSG","FUTURE_DATE_RESTRICTION_MSG","MIN_LENGTH_MSG","MAX_LENGTH_MSG","MAX_DATE_MSG","MIN_DATE_MSG","MAX_MSG","MIN_MSG","ValidationFactory","getValidators","list","dateValidator","allowFutureDates","futureDateRestrictionValidator","jsExpressionValidator","getMaxValueValidator","getMinValueValidator","conditionalRequiredValidator","conditionalAnsweredValidator","requiredValidator","Validators","minLength","maxLength","errors","messages","property","minlength","requiredLength","maxlength","HidersDisablersFactory","expressionRunner","expressionHelper","_debugModeService","getJsExpressionDisabler","disableWhenExpression","getJsExpressionHider","convertHideObjectToString","hideWhenExpression","join","AlertsFactory","getJsExpressionshowAlert","alertWhenExpression","FormControlService","validationFactory","hidersDisablersFactory","alertsFactory","generateControlModel","questionModel","generateChildren","controlType","generateFormArray","generateFormGroupModel","generateFormControl","formGroup","wireHidersDisablers","wireAlerts","setControl","asGroup","questions","_generateFormGroupChildrenModel","generated","addControl","formArray","wireCalculator","alert_1","dataSource","DEFAULT_STYLES","DataSources","_dataSources","registerDataSource","unWrap","log","clearDataSource","FormRendererComponent","formErrorsService","document","childComponents","isCollapsed","activeTab","ngOnInit","setUpRemoteSelect","setUpFileUpload","valueProcessingInfo","lastFormTab","scrollToControl","isExpanded","parentComponent","addChildComponent","dataSourceOptions","checkSection","groupChildrenHidden_1","every","k","innerNode","clickTab","tabNumber","loadPreviousTab","isCurrentTabFirst","body","scrollTop","isCurrentTabLast","loadNextTab","tabSelected","$event","setPreviousTab","hasErrors","touched","valid","getErrors","split","elSelector","tabComponent","setTimeout","section","getElementById","focus","scrollIntoView","behavior","block","onDateChanged","upload","event","toggleInformation","infoId","style","display","Component","args","selector","template","styles","Inject","DOCUMENT","Input","ErrorRendererComponent","showErrors","markInvalidControls","getControlError","errorNode","pageIndex","getPageIndex","HistoricalFieldHelperService","getDisplayTextFromOptions","valueProperty","displayProperty","displayText","historicalValue","_.isArray","valueConverted_1","_.each","option","HistoricalValueDirective","historicalFieldHelper","_nodeChange","EventEmitter","target","name","_node","compareString","stopPropagation","emit","a","_.isUndefined","text","_date","valueDate","Directive","Output","HostListener","STYLE","Option","disabled","highlighted","selected","undecoratedCopy","Diacritics","strip","DIACRITICS","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","OptionList","_highlightedOption","_options","highlight","equalValues","v0","v1","slice","sort","getOptionsByValue","filter","selection","selectedOption","select","multiple","clearSelection","deselect","term","trim","resetFilter","l","toUpperCase","t","hasShownSelected","getFirstShownSelected","getFirstShown","highlightOption","clearHighlightedOption","highlightNextOption","shownOptions","filtered","getHighlightedIndexFromList","highlightPreviousOption","highlightedOption","getHighlightedIndex","hasShown","some","hasSelected","_a","tslib_1.__values","_b","SELECT_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","SelectComponent","multi","KEYS","BACKSPACE","TAB","ENTER","ESC","SPACE","UP","DOWN","allowClear","highlightColor","highlightTextColor","noFilter","notFoundMsg","placeholder","opened","closed","deselected","typed","_value","filterEnabled","filterInputWidth","hasFocus","isBelow","isDisabled","isOpen","placeholderView","clearClicked","selectContainerClicked","onChange","_","onTouched","ngAfterViewInit","updateFilterWidth","ngOnChanges","changes","updateOptionsList","isFirstChange","numOptions","optionList","minNumOptions","currentValue","onWindowClick","closeDropdown","onWindowResize","updateWidth","onSelectContainerClick","toggleDropdown","onSelectContainerFocus","onSelectContainerKeydown","handleSelectContainerKeydown","onDropdownOptionClicked","toggleSelectOption","selectOption","onDropdownClose","onSingleFilterClick","onSingleFilterInput","onSingleFilterKeydown","handleSingleFilterKeydown","onMultipleFilterInput","openDropdown","onMultipleFilterKeydown","handleMultipleFilterKeydown","onClearSelectionClick","onDeselectOptionClick","deselectOption","open","close","clear","valueChanged","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","firstTime","updatePosition","filterInput","nativeElement","clearFilterInput","dropdown","moveHighlightedIntoView","selectHighlightedOption","deselectLast","sel","setMultipleFilterInput","which","altKey","preventDefault","selectionSpan","blur","width","offsetWidth","left","offsetLeft","top","offsetTop","offsetHeight","providers","encapsulation","ViewEncapsulation","None","ViewChild","SelectDropdownComponent","optionClicked","singleFilterClick","singleFilterInput","singleFilterKeydown","disabledColor","disabledTextColor","optionsReset","onOptionsWheel","handleOptionsWheel","onOptionMouseover","onOptionClick","getOptionStyle","background-color","color","optionsList","listHeight","itemIndex","itemHeight","itemTop","itemBottom","viewTop","div","atTop","atBottom","scrollHeight","deltaY","SelectModule","NgModule","declarations","exports","imports","CommonModule","FormsModule","SecurePipe","_ref","sanitizer","_latestValue","_latestReturnedValue","_subscription","_obj","_result","BehaviorSubject","_internalSubscription","ngOnDestroy","_dispose","transform","url","getfile","internalTransform","asyncTrasnform","previousUrl","sanitized","bypassSecurityTrustUrl","WrappedValue","wrap","_subscribe","_updateLatestValue","unsubscribe","async","markForCheck","Pipe","pure","ChangeDetectorRef","DomSanitizer","SharedModule","FileUploadComponent","renderer","uploading","fileUuid","pdfUploaded","formEntryMode","propagateChange","_dataSource","checkFileType","onFileChange","fileList","fileList_1","fileList_1_1","file","data","fileUpload","image","clearValue","pdfUrl","getPdfUrl","fetchFile","changingThisBreaksApplicationSecurity","search","Renderer2","RemoteFileUploadModule","WebcamModule","NgxFileUploaderModule","DatePickerComponent","locale","viewFormat","returnObject","onDatePickerCancel","onSelectDate","onDisplayMonths","onDisplayYears","displayYearsIndex","monthsShort","initValue","fullYearRange","currentYear","calendarDate","clone","startOf","year","displayYearRange","generateCalendar","prev","subtract","showMonthSelection","showYearSelection","add","selectDay","day","daysDifference","diff","selectedDay","parseToReturnObjectType","cancelDatePicker","selectMonth","month","selectYear","selectToday","today","clearPickDate","generateYears","years","_.chunk","currentMonth","dayNames","weekdaysShort","initDate","selectedDate","calendarDays","start","localeData","firstDayOfWeek","end","toDate","toJSON","toArray","toISOString","toObject","TimePickerComponent","showSecond","use12Hour","onSelectTime","onTimePickerCancel","hourFormat","time","initTime","increaseHour","decreaseHour","increaseMinute","decreaseMinute","increaseSecond","decreaseSecond","selectTime","cancelTimePicker","selectNow","clearTime","ModalComponent","onOverlayClick","closeModal","changeDetection","ChangeDetectionStrategy","OnPush","animations","MomentPipe","Moment","DateTimePickerComponent","showDate","showTime","showWeeks","weeks","onDateChange","showDatePicker","showTimePicker","weeksSelected","count","nextDate","setDate","getDate","setTime","toggleDatePicker","status","toggleTimePicker","modelValue","DateTimePickerModule","MY_FORMATS","parse","dateInput","monthYearLabel","dateA11yLabel","monthYearA11yLabel","NgxDateTimePickerComponent","selectedTime","loadInitial","onTimeSelect","setDateTime","onDateSelect","dateString","setCurrentTime","currentTime","weekSelect","dateToUse","nextWeekDate","nextWeekTime","selectionChange","getWeekPickerCssClass","getDatePickerCssClass","getTimePickerCssClass","newTime","newDateTime","dateTimeString","MAT_DATE_FORMATS","useValue","DateAdapter","useClass","MomentDateAdapter","NgxDateTimePickerModule","ReactiveFormsModule","MatDatepickerModule","MatFormFieldModule","MatNativeDateModule","MatInputModule","MatSelectModule","AfeNgSelectComponent","question_options","getChangingText","getData","resolveSelectedOption","selected_question_option","searchText","subject","searchOptions","mappedOptions","onValueChange","subjectOption","resolveSelectedValue","resetOptions","FormSchemaCompiler","compileFormSchema","formSchema","referencedComponents","refForms","getReferencedForms","_.isEmpty","placeHolders","getAllPlaceholderObjects","replaceAllPlaceholdersWithActualObjects","findSchemaByName","schemaArray","nameOfSchema","foundSchema","schema","getPageInSchemaByLabel","pageLabel","foundPage","pages","page","getSectionInSchemaByPageLabelBySectionLabel","sectionLabel","foundSection","sections","getQuestionByIdInSchema","questionId","isQuestionObjectWithId","isSchemaSubObjectExpandable","toExpand","getQuestionsArrayByQuestionIdInSchema","getQuestionsArrayByQuestionId","parent","object","returnedValue","objectKeys","_.includes","referencedObjects","extractPlaceholderObjects","subSchema","objectsArray","reference","fillPlaceholderObject","placeHolderObject","referenceObject","member","keyValReferencedForms","placeHoldersArray","placeHolder","referencedObject","getReferencedObject","removeExcludedQuestionsFromPlaceholder","removeObjectFromArray","indexOfObject","excludeQuestions","excludedQuestionId","questionsArray","referenceData","formSchemasLookupArray","referencedForms","alias","formName","TextInputQuestion","TextAreaInputQuestion","rows","SelectQuestion","UiSelectQuestion","DateQuestion","showWeeksAdder","MultiSelectQuestion","NestedQuestion","QuestionGroup","RepeatingQuestion","CheckBoxQuestion","TimeQuestion","FileUploadQuestion","TestOrderQuestion","orderType","selectableOrders","orderSettingUuid","rendering","DateValidationModel","MaxValidationModel","MinValidationModel","DecimalPointValidationModel","decimalPlace","setFailExpression","setMessage","setValuesAndExpressions","DummyDataSource","returnErrorOnNext","selectOptions","sampleData","concept","of","HistoricalEncounterDataService","registerEncounters","encounters","encStore","getValue","pathArray","getFirstValue","getAllObjects","getSingleObject","group_1","encounter","_transformEncounter","_.sortBy","reverse","putObject","getObject","answers","getAllValues","encounterDatetime","_.isNil","newpath","childObject","prevEncounter","location","patient","encounterType","provider","obs","processedObs","_transformObs","_.extend","obsRep","singleObs","_augumentObs","groupMembers","group_2","existing","toAdd","_.has","temp","apply","HistoricalHelperService","evaluate","expr","additionalScopevalues","HD","deps","evaluatePrecondition","additionalScope","histValue","QuestionFactory","historicalHelperService","createQuestionModel","toFormQuestionModel","toSelectQuestion","schemaQuestion","questionOptions","addValidators","copyProperties","addDisableOrHideProperty","addAlertProperty","addHistoricalExpressions","addCalculatorProperty","toNumericQuestion","toNumberQuestion","toDecimalQuestion","toDateQuestion","toEncounterDatetimeQuestion","weeksList","toTimeQuestion","toCheckBoxQuestion","toMultiCheckboxQuestion","renderType","toTextAreaQuestion","toTextQuestion","toFileUploadQuestion","toDrugQuestion","toProblemQuestion","toConceptAnswerSelect","toRepeatingQuestion","getChildrenQuestionModels","testOrder","toTestOrderQuestion","orders","toGroupQuestion","toPageQuestion","toSectionQuestion","getSchemaQuestions","toPersonAttributeQuestion","searchFunction","resolveFunction","toPersonAddressQuestion","toEncounterProviderQuestion","toFieldSetQuestion","toReturn","toEncounterLocationQuestion","toAmrsLocationsQuestion","toSiblingLocationsQuestion","toNonAmrsLocationsQuestion","listQuestions","getQuestions","foundArray","toModel","generateId","convertOldVersionComplexObsQuestionToNewVersion","converted","mainField","JSON","stringify","shownDateOptions","obsField","dateField","dateOptions","assign","mappings","source","destination","decimalModel","historicalExpression","origValue","historicalPrepopulateCondition","historicalPrepopulate","valDate","differenceInDays","Number","isInteger","allowedHistoricalValueAgeInDays","calculate","random","floor","String","fromCharCode","Form","questionFactory","existingOrders","_showErrors","_dataSourcesContainer","found","aChildNode","questionType","searchNodeByQuestionType","findNodesByQuestionId","nodeAsGroup","results","invalidControlNodes","c","markAsTouched","groupNode","updateHiddenDisabledStateForAllControls","_updateHiddenDisabledStateForAllControls","updateAlertsForAllControls","_updateAlertsForAllControls","FormFactory","controlService","questionFactroy","controlRelationsFactory","hd","createForm","createNode","parentNode","createArrayNode","createGroupNode","createLeafNode","controlModel","createNodeChildren","createArrayNodeChild","removeArrayNodeChild","factory","groupQuestion","group","nodeControl","nodeToRemove","controlIndexToRemove","ObsAdapterHelper","findObsAnswerToQuestion","obsArray","isObsNode","childQuestionsUuids","getChildQuestionsConceptUuids","isSubsetOf","getGroupMembersConceptUuids","obsWithGroupMembers","supersetArray","subsetArray","setSimpleObsNodeValue","obsToUse","initialValue","setNodeFormControlValue","setMultiselectObsNodeValue","obsUuids","obs_1","obs_1_1","setComplexObsNodeValue","valueField","setNodeValue","obsDatetime","setGroupObsNodeValue","setRepeatingGroupObsNodeValue","createdNode","getObsNodeType","answeringObs","multiselectObs","complexObs","groupObs","repeatingGroupObs","getSimpleObsPayload","voided","simpleNodeValueChanged","toOpenMrsDateTimeString","getComplexObsPayload","valuePayload","getObsNodePayload","areDatesEqual","payload","getMultiselectObsPayload","existingUuids","getGroupPayload","childrenPayload","groupPayload","getRepeatingGroupPayload","nodeAsArray","groupsUuidsAfterEditting","voidedGroup","groupNodePayoad","arrayNodePayload","simpleObs","groupedObs","repeatingGroupedObs","date1","date2","isSame","datetime","ObsValueAdapter","generateFormPayload","populateForm","setValues","forcegroup","setObsValue","_.find","setComplexObsValue","setRepeatingGroupValues","nodes_1","nodes_1_1","obsUuid","multiObs","getMultiselectValues","multiObs_1","multiObs_1_1","groupRepeatingObs","intersect","schemaQuestions","_.intersection","groups","getQuestionNodes","arrays","pages_1","pages_1_1","repeatingGroup","nodes_2","nodes_2_1","traverse","processGroup","obsPayload","getObsPayload","mappedMembers","Boolean","mapInitialGroup","current","mapModelGroup","processRepeatingGroups","initialValues","repeatingModel","_d","_e","deleted","leftOuterJoinArrays","newObs","groupConcept","newObsPayload","deletedObs","createGroupDeletedObs","deletedObs_1","deletedObs_1_1","createGroupNewObs","newObsPayload_1","newObsPayload_1_1","first","second","obj2","_.isEqual","newPayload","payload_1","payload_1_1","payload_2","payload_2_1","getExactTime","processObs","obsValue","multis","processMultiSelect","mappedInitial","mappedCurrent","processDeletedMultiSelectObs","processNewMultiSelectObs","updateOrVoidObs","processComplexObs","createdPayload","values_1","values_1_1","values_2","values_2_1","qs","rep","multiSelectObs","values_3","values_3_1","isObs","nodes_3","nodes_3_1","OrderValueAdapter","formOrderNodes","_setOrderProvider","_findTestOrderQuestionNodes","_createOrdersPayload","_getExistingOrders","_setOrderValues","providerUuid","orderNodes","deletedOrders","selectedOrders","orderNode","orderNodeValues","order","orderValue","payloadOrder","_createPayloadOrder","orderNumber","orderNodes_1","orderNodes_1_1","_getDeletedOrders","_addDeletedOrdersToPayload","orderUuid","dateVoided","auditInfo","orderNodes_2","orderNodes_2_1","_setOrderNodeValues","orderConcept","quesitonExtras","orderer","careSetting","deleteOrders","existingOrderConcept","orders_1","orders_1_1","childNode","formNode","EncounterAdapter","ordersAdapter","obsAdapter","populateNode","getEncounterNodes","firstProvider_1","generateNodePayload","setNonFilledPayloadMembers","dateValue","utcOffset","encounterRole","_getEncounterNodes","patientUuid","setPayloadPatientUuid","visitUuid","setPayloadVisitUuid","encounterTypeUuid","setPayloadEncounterTypeUuid","formUuid","setPayloadFormUuid","encounterUuid","setPayloadEncounterUuid","_isEncounterNode","PersonAttribuAdapter","getPersonAttributeNodes","isSimpleValue","attributeType","hydratedObject","_getPersonAttributesNodes","RemoteSelectComponent","items","loading","characters","change","dataFromSourceChanged","subscribeToDataSourceDataChanges","restoreSelectedValue","selectC","_.map","_.clone","_.uniqBy","canSearch","removed","RemoteSelectModule","AppointmentsOverviewComponent","showAppointments","loadingAppointments","errorLoadingAppointments","appointmentsLoaded","appointments","resetProperties","monthlyScheduleResourceService","locationUuid","userLocation","startDate","endDate","endOf","getMonthlySchedule","limit","locationUuids","department","groupBy","_data","weeklyMap","Map","scheduleDate","scheduledObj","scheduled","set","dayCount","EncounterViewerService","resolveSelectedValueFromSchema","answerUuid","answer","hasAnswer","answered","questionsAnswered","$answered","ans","isDate","convertTime","unixTimestamp","getFullYear","getMonth","hour","getHours","getMinutes","getSeconds","EncounterViewerComponent","encounterViewerService","_schema","enc","fileDataSource","remoteDataSource","customDataSource","questionAnswered","checkForColon","questionLabel","EncounterPdfViewerService","obsValueAdapter","subscribedAnswers","stack","getPages","remoteSelectsOnly","remoteAns","content","remoteQuestions","getSections","table","widths","headerRows","keepWithHeaderRows","layout","margin","hLineWidth","vLineWidth","hLineColor","vLineColor","resolve","answeredSections","answeredSections_1","answeredSections_1_1","getRemoteSectionData","answeredSections_2","answeredSections_2_1","getSectionData","appendResolvedAnswer","resolvedAnswer","bold","section_1","section_1_1","remoteAns_1","remoteAns_1_1","resolveValue","section_2","section_2_1","arrayElement","isUuid","arr_1","elem","generatePdfDefinition","docDefinition$","remoteSelects","combineLatest","docDefinition","pageSize","fontSize","banner","bannerItem","bannerLabel","confidential","footer","alignment","header","pageNumber","tableExample","tableHeader","fillColor","borderColor","tableSubheader","timestamp","defaultStyle","displayPdf","pdf","pdfMake","vfs","pdfMake.vfs","titleize","nid","birthdate","age","mui","mhn","currentPage","pageCount","toUTCString","win","createPdf","ISO_8601","isValid","str","charAt","substr","toLowerCase","providedIn","EncounterContainerComponent","encAdapter","encounterPdfViewerService","$form","$enc","QuestionControlComponent","innerValue","el","_.isNumber","noop","FilePreviewComponent","encounterService","resultsIsPdf","onTouchedCallback","onChangeCallback","onBlur","getUrl","RemoteAnswerComponent","EncounterViewerModule","HttpClientModule","CheckboxControlComponent","checked","selectOpt","CheckboxModule","NgxTimePickerComponent","formatTimeValue","timeValue","timeInputString","timeArray","dateArray","defaultFormat","NgxTimePickerModule","PersonAddressAdapter","getPersonAddressNodes","addressType","_getPersonAddressNodes","FormEntryModule","CollapseModule","MatIconModule","MatTabsModule","MatCardModule","TimeAgoPipe","FormBuilder","Pair","RenderingType"],"mappings":"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VC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU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","sourcesContent":["/*\nThis service checks if the debug mode on ng2-amrs\nhas been enabled by checking cookies.\nIf the debug mode has been enabled then\nit returns true and all fields are displayed\nfor use by testers\n*/\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DebugModeService {\n public cookieKey = 'formDebug';\n\n constructor() {}\n public debugEnabled(): boolean {\n // check if the hidefield\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { AfeFormControl } from '../../public_api';\nimport { AfeFormArray, AfeFormGroup } from '../../abstract-controls-extension';\n\n@Injectable()\nexport class FormErrorsService {\n // Observable string sources\n public static control: AfeFormControl | AfeFormArray | AfeFormGroup = null;\n public static tab: number = null;\n public announceErrorFieldSource = new Subject<string>();\n public announceErrorField$: Observable<\n any\n > = this.announceErrorFieldSource.asObservable();\n public announceErrorField(error: string) {\n this.announceErrorFieldSource.next(error);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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 __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\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\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { AbstractControl } from '@angular/forms';\n\n// import { CanHide } from '../form-entry/control-hiders-disablers/can-hide';\n// import { CanDisable } from '../form-entry/control-hiders-disablers/can-disable';\n\nexport class ControlRelation {\n private _control: AbstractControl;\n private _relatedTo: AbstractControl;\n private _lastUpdateValue: any;\n\n constructor(control: AbstractControl, relatedTo: AbstractControl) {\n this._control = control;\n this._relatedTo = relatedTo;\n this._registerForChangesFromRelatedControl();\n }\n\n get control(): AbstractControl {\n return this._control;\n }\n\n get relatedTo(): AbstractControl {\n return this._relatedTo;\n }\n\n get lastUpdateValue(): any {\n return this._lastUpdateValue;\n }\n\n updateControlBasedOnRelation(newValue: any): boolean {\n if (newValue !== this._lastUpdateValue) {\n this._lastUpdateValue = newValue;\n\n if ((this._control as any).updateCalculatedValue) {\n (this._control as any).updateCalculatedValue();\n }\n\n this._control.updateValueAndValidity();\n if ((this._control as any).updateHiddenState) {\n (this._control as any).updateHiddenState();\n }\n\n if ((this._control as any).updateDisabledState) {\n (this._control as any).updateDisabledState();\n }\n\n if ((this._control as any).updateAlert) {\n (this._control as any).updateAlert();\n }\n return true;\n }\n return false;\n }\n\n private _registerForChangesFromRelatedControl() {\n this._relatedTo.valueChanges.subscribe((value) => {\n this.updateControlBasedOnRelation(value);\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { ControlRelation } from './control-relation';\n\nexport class ControlRelations {\n private _relationFor: AbstractControl;\n private _relations: ControlRelation[];\n private _otherRelations: any = [];\n\n constructor(\n relationFor: AbstractControl,\n relatedTo?: AbstractControl | AbstractControl[]\n ) {\n this._relationFor = relationFor;\n this._relations = [];\n\n if (relatedTo) {\n this.addRelatedControls(relatedTo);\n }\n }\n\n get relationsFor(): AbstractControl {\n return this._relationFor;\n }\n\n get relations(): ControlRelation[] {\n return this._relations;\n }\n\n get otherRelations() {\n return this._otherRelations;\n }\n\n addRelatedControls(relatedTo: AbstractControl | AbstractControl[]) {\n if (relatedTo instanceof AbstractControl) {\n this.relations.push(new ControlRelation(this._relationFor, relatedTo));\n }\n\n if (relatedTo instanceof Array) {\n for (let i = 0; i < relatedTo.length; i++) {\n this.relations.push(\n new ControlRelation(this._relationFor, relatedTo[i])\n );\n }\n }\n }\n}\n","import { CanHide, Hider } from './can-hide';\nexport class HiderHelper {\n public hideControl(control: CanHide) {\n control.hidden = true;\n if (control.disable) {\n control.disable();\n }\n }\n\n public showControl(control: CanHide) {\n control.hidden = false;\n }\n\n public setHiderForControl(control: CanHide, hider: Hider) {\n control.hiders.push(hider);\n }\n\n public clearHidersForControl(control: CanHide) {\n control.hiders.splice(0);\n control.hidden = false;\n }\n\n public evaluateControlHiders(control: CanHide) {\n let hiddenValue = false;\n control.hiders.forEach((hider) => {\n hider.reEvaluateHidingExpression();\n if (hider.toHide === true) {\n hiddenValue = true;\n }\n });\n\n control.hidden = hiddenValue;\n if (control.hidden && control.disable) {\n control.disable();\n // control.setValue(null);\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanHide) {\n if (control.updateHiddenState) {\n control.valueChanges.subscribe((val) => {\n control.updateHiddenState();\n });\n }\n }\n}\n","import { CanGenerateAlert, Alert } from './can-generate-alert';\nexport class AlertHelper {\n public hideAlert(control: Alert) {\n control.shown = false;\n }\n\n public showAlert(control: Alert) {\n control.shown = true;\n }\n\n public setAlertsForControl(control: CanGenerateAlert, alert: Alert) {\n control.alerts.push(alert);\n }\n\n public clearAlertsForControl(control: CanGenerateAlert) {\n control.alerts.splice(0);\n control.alert = '';\n }\n\n public evaluateControlAlerts(control: CanGenerateAlert) {\n let messageValue = '';\n control.alerts.forEach((message) => {\n message.reEvaluateAlertExpression();\n if (message.shown === true) {\n messageValue = message.alertMessage;\n } else {\n messageValue = '';\n }\n });\n\n control.alert = messageValue;\n // if (control.message && control.disable) {\n // control.disable();\n // // control.setValue(null);\n // }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanGenerateAlert) {\n if (control.updateAlert) {\n control.valueChanges.subscribe((val) => {\n control.updateAlert();\n });\n }\n }\n}\n","import { CanDisable, Disabler } from './can-disable';\nexport class DisablerHelper {\n public setDisablerForControl(control: CanDisable, disabler: Disabler) {\n control.disablers.push(disabler);\n }\n\n public clearDisablersForControl(control: CanDisable) {\n control.disablers.splice(0);\n control.disable();\n }\n\n public evaluateControlDisablers(control: CanDisable) {\n let toDisable = false;\n control.disablers.forEach((hider) => {\n hider.reEvaluateDisablingExpression();\n if (hider.toDisable === true) {\n toDisable = true;\n }\n });\n\n // console.log('Control', control);\n\n if (toDisable) {\n control.disable();\n } else {\n control.enable();\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanDisable) {\n if (control.updateDisabledState) {\n control.valueChanges.subscribe((val) => {\n control.updateDisabledState();\n });\n }\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { FormFactory } from './form.factory';\nimport { Form } from './form';\n\n// import { AfeControlType, AfeFormArray, AfeFormGroup, AfeFormControl } from '../../abstract-controls-extension';\nimport { QuestionBase, RepeatingQuestion } from '../question-models/models';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nexport interface ChildNodeCreatedListener {\n addChildNodeCreatedListener(func: any);\n\n fireChildNodeCreatedListener(node: GroupNode);\n}\n\nexport type CreateArrayChildNodeFunction = (\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n) => GroupNode;\n\nexport interface RemoveArrayChildNodeFunction {\n (index: number, node: ArrayNode);\n}\n\nexport class NodeBase {\n public children?: any;\n private _control: AfeFormControl | AfeFormArray | AfeFormGroup;\n private _questionModel: QuestionBase;\n private _form: Form;\n private _path: string;\n\n public initialValue: any;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n this._control = control;\n this._questionModel = question;\n this._form = form;\n this._path = parentPath ? parentPath + '.' + question.key : question.key;\n }\n\n public get question(): QuestionBase {\n return this._questionModel;\n }\n\n public get control(): AfeFormControl | AfeFormArray | AfeFormGroup {\n return this._control;\n }\n\n public get form(): Form {\n return this._form;\n }\n\n public get path(): string {\n return this._path;\n }\n removeAt(index: number) {}\n\n createChildNode() {}\n removeChildNode() {}\n}\n\nexport class LeafNode extends NodeBase {\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n }\n}\n\nexport class GroupNode extends NodeBase {\n private _children: any;\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = {};\n }\n\n public get children(): any {\n return this._children;\n }\n\n public setChild(key: string, node: NodeBase) {\n this.children[key] = node;\n }\n}\n\nexport class ArrayNode extends NodeBase implements ChildNodeCreatedListener {\n private childNodeCreatedEvents: any[] = [];\n private _children: GroupNode[];\n public createChildFunc: CreateArrayChildNodeFunction;\n public removeChildFunc: RemoveArrayChildNodeFunction;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n private formFactory?: FormFactory,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = [];\n this.childNodeCreatedEvents = [];\n }\n\n public get children(): GroupNode[] {\n return this._children;\n }\n\n public createChildNode(): GroupNode {\n if (this.createChildFunc) {\n const g: GroupNode = this.createChildFunc(\n this.question as RepeatingQuestion,\n this,\n this.formFactory\n );\n this.fireChildNodeCreatedListener(g);\n return g;\n }\n return null;\n }\n\n public removeAt(index: number) {\n const removePrompt = confirm('Are you sure you want to remove?');\n if (removePrompt) {\n if (this.removeChildFunc) {\n this.removeChildFunc(index, this);\n }\n }\n }\n\n addChildNodeCreatedListener(func: any) {\n this.childNodeCreatedEvents.push(func);\n }\n\n fireChildNodeCreatedListener(node: GroupNode) {\n for (let i = 0; i < this.childNodeCreatedEvents.length; i++) {\n const func: any = this.childNodeCreatedEvents[i];\n func(node);\n }\n }\n}\n","export class ValidationModel {\n type: string;\n\n message: string;\n\n constructor(validations: any) {\n this.type = validations.type;\n this.message = validations.message || null;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class JsExpressionValidationModel extends ValidationModel {\n failsWhenExpression: string;\n\n constructor(validations: any) {\n super(validations);\n this.failsWhenExpression = validations.failsWhenExpression;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class ConditionalValidationModel extends ValidationModel {\n referenceQuestionId: string;\n referenceQuestionAnswers: any;\n\n constructor(validations: any) {\n super(validations);\n this.referenceQuestionId = validations.referenceQuestionId;\n this.referenceQuestionAnswers = validations.referenceQuestionAnswers;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// import { ControlRelation } from '../../change-tracking/control-relation';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\nimport { Form } from './form';\n\n@Injectable()\nexport class ControlRelationsFactory {\n constructor() {}\n\n buildRelations(rootNode: GroupNode) {\n const controlsStore: any = this.mapControlIds(rootNode, {});\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key)) {\n const nodeBase: NodeBase = controlsStore[key];\n\n this.setRelations(controlsStore, nodeBase);\n }\n }\n }\n\n buildArrayNodeRelations(node: GroupNode) {\n const form: Form = node.form;\n\n if (!form) {\n return;\n }\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for controls in the same array\n this.buildRelations(node);\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const child: NodeBase = rootControlsStore[key];\n\n if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n this.setRelations(arrayControlStore, child);\n }\n }\n }\n }\n\n // define relations for controls outside the group to controls in this group\n this.createRelationsToArrayControls(node);\n\n // fire relations\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const child: NodeBase = arrayControlStore[id];\n const control: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n control.updateHiddenState();\n control.updateAlert();\n }\n }\n }\n\n createRelationsToArrayControls(node: GroupNode) {\n const form: Form = node.form;\n\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n // loop through form controls\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const rChild: NodeBase = rootControlsStore[key];\n\n const parentNodePath = node.path.substring(\n 0,\n node.path.lastIndexOf('.')\n );\n\n if (rChild.path.indexOf(parentNodePath + '.') === -1) {\n // loop through controls in the array group\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const aChild: NodeBase = arrayControlStore[id];\n const aChildId = aChild.question.key;\n if (this.hasRelation(aChildId, rChild.question)) {\n const nodes: Array<NodeBase> = node.form.searchNodeByPath(\n rootNode,\n parentNodePath,\n []\n );\n if (nodes.length > 0) {\n const an = nodes[0] as ArrayNode;\n const rootControl = rChild.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (\n rootControl.controlRelations.otherRelations.indexOf(an) ===\n -1\n ) {\n rootControl.controlRelations.otherRelations.push(an);\n }\n\n (aChild.control as\n | AfeFormControl\n | AfeFormArray).addValueChangeListener((value) => {\n if ((rootControl as any).updateCalculatedValue) {\n (rootControl as any).updateCalculatedValue();\n }\n\n rootControl.updateValueAndValidity();\n if ((rootControl as any).updateHiddenState) {\n (rootControl as any).updateHiddenState();\n }\n\n if ((rootControl as any).updateAlert) {\n (rootControl as any).updateAlert();\n }\n\n if ((rootControl as any).updateDisabledState) {\n (rootControl as any).updateDisabledState();\n }\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n getRelationsForControl(\n id,\n node: GroupNode\n ): Array<AfeFormControl | AfeFormArray> {\n const relations: Array<AfeFormControl | AfeFormArray> = new Array<\n AfeFormControl | AfeFormArray\n >();\n\n const nodeBaseArray: Array<NodeBase> = node.form.searchNodeByQuestionId(id);\n\n if (nodeBaseArray.length > 0) {\n const nodeBase: NodeBase = nodeBaseArray[0];\n\n const controlList: any = this.mapControlIds(node, {});\n\n for (const key in controlList) {\n if (controlList.hasOwnProperty(key)) {\n if (\n this.hasRelation(controlList[key].question.key, nodeBase.question)\n ) {\n relations.push(controlList[key].control);\n }\n }\n }\n }\n return relations;\n }\n\n mapControlIds(node: GroupNode, controlsStore: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.mapControlIds(child, controlsStore);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n } else if (child instanceof ArrayNode) {\n const questionBase: QuestionBase = (child as ArrayNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n }\n }\n }\n\n return controlsStore;\n }\n\n setRelations(controlsStore: any, nodeBase: NodeBase) {\n const questionBase: QuestionBase = nodeBase.question;\n\n const id = questionBase.key;\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key) && key !== id) {\n const node: NodeBase = controlsStore[key];\n const question: QuestionBase = node.question;\n\n if (this.hasRelation(id, question, nodeBase)) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n\n // add conditional required and conditional answered relations\n if (typeof question.required === 'object') {\n const required: any = question.required;\n\n if (required.type === 'conditionalRequired') {\n if (required.referenceQuestionId === id) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n }\n }\n }\n }\n }\n\n hasRelation(id: string, questionBase: QuestionBase, nodeBase?: NodeBase) {\n let hasRelation = false;\n\n if (questionBase.validators && questionBase.validators.length > 0) {\n questionBase.validators.forEach((element) => {\n if (element instanceof JsExpressionValidationModel) {\n const model: JsExpressionValidationModel = element as JsExpressionValidationModel;\n\n const failsWhenExpression: string = model.failsWhenExpression;\n if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (\n element instanceof ConditionalValidationModel &&\n element.type === 'conditionalAnswered' &&\n element.referenceQuestionId === id\n ) {\n hasRelation = true;\n }\n });\n }\n\n // add hiders and disablers relations\n if (!hasRelation) {\n if (typeof questionBase.hide === 'string') {\n const hide: string = questionBase.hide as string;\n\n if (hide.length > 0 && hide.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (typeof questionBase.hide === 'object') {\n const hideObj: any = questionBase.hide;\n\n if (hideObj.field === id) {\n hasRelation = true;\n }\n }\n\n if (questionBase.alert && typeof questionBase.alert === 'object') {\n hasRelation = true;\n }\n\n if (typeof questionBase.disable === 'string') {\n const disable: string = questionBase.disable as string;\n\n if (disable.length > 0 && disable.indexOf(id) !== -1) {\n hasRelation = true;\n }\n }\n }\n\n // add calculate expressions relations\n if (\n !hasRelation &&\n questionBase.calculateExpression &&\n questionBase.calculateExpression.length > 0 &&\n questionBase.calculateExpression.indexOf(id) !== -1\n ) {\n hasRelation = true;\n }\n\n return hasRelation;\n }\n\n addRelationToControl(\n control: AfeFormControl | AfeFormArray,\n related: AfeFormControl | AfeFormArray\n ) {\n // let relations = control.controlRelations.relations;\n //\n // let hasRelation = false;\n //\n // relations.forEach(element => {\n //\n // let controlRelation: ControlRelation = element as ControlRelation;\n //\n // let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;\n //\n // if ( control.uuid !== undefined && control.uuid === relation.uuid ) {\n // hasRelation = true;\n // }\n // });\n\n // if ( !hasRelation ) {\n control.controlRelations.addRelatedControls(related);\n // }\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension/control-extensions';\nimport { ArrayNode } from '../form-factory/form-node';\nimport { ControlRelationsFactory } from '../form-factory/control-relations.factory';\nimport { Form } from '../form-factory/form';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nexport class ExpressionRunner {\n getRunnable(\n expression: string,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n helper: any,\n dataDependencies: any,\n form?: Form\n ): Runnable {\n const runner = this;\n const runnable: Runnable = {\n run: () => {\n /* tslint:disable */\n let scope: any = {};\n if (control.uuid) {\n scope[control.uuid] = control.value;\n }\n window['moment'] = moment;\n // scope.moment = moment;\n scope['myValue'] = control.value;\n runner.getControlRelationValueString(control, scope);\n runner.getHelperMethods(helper, scope);\n runner.getDataDependencies(dataDependencies, scope);\n\n if (form) {\n // console.error('Form defined', form);\n runner.getDataDependencies(\n form.dataSourcesContainer.dataSources,\n scope\n );\n }\n\n let paramList = '';\n let argList = '';\n for (let o in scope) {\n paramList = paramList === '' ? paramList + o : paramList + ',' + o;\n argList =\n argList === ''\n ? argList + \"scope['\" + o + \"']\"\n : argList + \",scope['\" + o + \"']\";\n }\n\n // prevent more than one return statements\n if (expression.indexOf('return') === -1) {\n expression = '\"return ' + expression + '\"';\n }\n\n let funcDeclarationCode =\n 'var afeDynamicFunc = new Function(\"' +\n paramList +\n '\", ' +\n expression +\n ');';\n let funcCallCode =\n 'afeDynamicFunc.call(this ' +\n (argList === '' ? '' : ',' + argList) +\n ');';\n\n try {\n if (Object.keys(scope).indexOf('undefined') >= 0) {\n console.warn('Missing reference found', expression, scope);\n return false;\n }\n //console.info('results: ', expression, eval(funcDeclarationCode + funcCallCode));\n return eval(funcDeclarationCode + funcCallCode);\n } catch (e) {\n // if (window['error_count']) {\n // window['error_count'] = window['error_count'] + 1;\n // } else {\n // window['error_count'] = 1;\n // }\n // console.error(window['error_count'] + ' Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n // console.error('Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n\n // Uncomment the line above during debugging\n // console.error('Error running expression:' + expression, scope);\n\n return false;\n }\n /* tslint:enable */\n }\n };\n return runnable;\n }\n\n private getControlRelationValueString(\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n scope: any\n ) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n if (relation.relatedTo) {\n const related = relation.relatedTo as any;\n const relatedAsControl = relation.relatedTo as AbstractControl;\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n scope[related.uuid] = relation.relatedTo.value;\n } else {\n scope[related.uuid] =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.otherRelations &&\n control.controlRelations.otherRelations.length > 0\n ) {\n control.controlRelations.otherRelations.forEach((node) => {\n if (node instanceof ArrayNode) {\n const arrayNode: ArrayNode = node as ArrayNode;\n const uuid = control.uuid;\n\n const controlRelationsFactory: ControlRelationsFactory = new ControlRelationsFactory();\n let relationsForControl: Array<AfeFormControl | AfeFormArray> = [];\n // get all related controls\n arrayNode.children.forEach((child) => {\n relationsForControl = relationsForControl.concat(\n controlRelationsFactory.getRelationsForControl(uuid, child)\n );\n });\n\n this.setControlArrayValues(\n control as AfeFormControl | AfeFormArray,\n relationsForControl,\n scope\n );\n }\n });\n }\n }\n\n private setControlArrayValues(\n control: AfeFormControl | AfeFormArray,\n relationsForControl: Array<AfeFormControl | AfeFormArray>,\n scope: any\n ) {\n const keys: Array<string> = this._getFormControlKeys(relationsForControl);\n\n keys.forEach((key) => {\n const values: any = this._getValuesForKey(key, relationsForControl);\n scope[key] = values;\n });\n }\n\n private _getFormControlKeys(\n array: Array<AfeFormControl | AfeFormArray>\n ): Array<string> {\n const keys: Array<string> = [];\n array.forEach((control) => {\n if (keys.indexOf(control.uuid) === -1) {\n keys.push(control.uuid);\n }\n });\n\n return keys;\n }\n\n private _getValuesForKey(\n key: string,\n array: Array<AfeFormControl | AfeFormArray>\n ): any {\n const values: any = [];\n\n array.forEach((control) => {\n if (control.uuid === key) {\n values.push(control.value);\n }\n });\n\n return values;\n }\n\n private getHelperMethods(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n\n private getDataDependencies(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n}\n\nexport interface Runnable {\n run();\n}\n","import {\n FormControl,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControlOptions\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { CanCalculate } from '../form-entry/control-calculators/can-calculate';\nimport { ExpressionRunner } from '../form-entry/expression-runner/expression-runner';\n\nclass AfeFormControl\n extends FormControl\n implements\n CanHide,\n CanDisable,\n CanCalculate,\n CanGenerateAlert,\n ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n public uuid: string;\n public pathFromRoot: string;\n\n hidden = false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n calculator: Function;\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n constructor(\n formState?: any,\n validator?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(formState, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue('');\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n setCalculatorFn(newCalculator: Function) {\n this.calculator = newCalculator;\n }\n\n updateCalculatedValue() {\n if (this.calculator) {\n const _val = this.calculator.call(ExpressionRunner, {});\n this.setValue(_val);\n }\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\nexport { AfeFormControl };\n","import {\n FormGroup,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\n\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\n\nexport class AfeFormGroup\n extends FormGroup\n implements CanHide, CanDisable, CanGenerateAlert {\n private _controlRelations: ControlRelations;\n\n public uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue({});\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","import {\n FormArray,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\n\nexport class AfeFormArray\n extends FormArray\n implements CanHide, CanDisable, CanGenerateAlert, ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n private _uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n\n constructor(\n controls: AbstractControl[],\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.alerts = [];\n this.disablers = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get uuid(): string {\n return this._uuid;\n }\n set uuid(val: string) {\n this._uuid = val;\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue([]);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (this.alerts.length > 0) {\n this.updateAlert();\n }\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","export enum AfeControlType {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n None\n}\n","import { BaseOptions } from './interfaces/base-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\nimport { ValidationModel } from './validation.model';\n\nexport class QuestionBase implements BaseOptions {\n type: string;\n order?: number;\n questionOptions?: any;\n questions?: any;\n placeholder?: any;\n hidden?: any;\n showTime?: any;\n showWeek?: any;\n showDate?: boolean;\n historicalDisplay?: any;\n rows?: any;\n showWeeksAdder?: any;\n key: string;\n alert?: any;\n\n label?: string;\n renderingType: string;\n\n defaultValue?: any;\n originalValue?: any;\n enableHistoricalValue?: boolean;\n showHistoricalValueDate?: boolean;\n historicalDataValue?: any;\n extras?: any;\n dataSource?: string;\n dataSourceOptions?: any;\n\n controlType?: AfeControlType;\n validators?: Array<ValidationModel>;\n required?: boolean;\n hide?: string | boolean;\n disable?: string | boolean;\n calculateExpression?: string;\n options?: any;\n maxTime?: string;\n minTime?: string;\n\n constructor(options: BaseOptions) {\n this.defaultValue = options.defaultValue;\n this.originalValue = options.originalValue;\n this.extras = options.extras;\n this.renderingType = options.type;\n this.key = options.key || '';\n this.label = options.label || '';\n this.validators = options.validators || [];\n this.required = options.required;\n this.hide = options.hide;\n this.disable = options.disable;\n this.alert = options.alert;\n this.historicalDataValue = options.historicalDataValue;\n this.calculateExpression = options.calculateExpression;\n }\n\n setHistoricalValue(v: boolean) {\n this.enableHistoricalValue = v;\n }\n showHistoricalEncounterDate(v?: boolean) {\n this.showHistoricalValueDate = v === undefined ? true : v;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalRequiredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let isRequired: boolean;\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n relationValue = relation.relatedTo.value;\n } else {\n relationValue =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) !== -1\n ) {\n isRequired = true;\n }\n\n if (isRequired && !value) {\n return { conditional_required: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalAnsweredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let successCondition: any = true;\n\n if (value) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (Array.isArray(relatedAsControl.value)) {\n relationValue = relatedAsControl.value;\n } else {\n relationValue =\n relatedAsControl.value &&\n typeof relatedAsControl.value === 'object' &&\n relatedAsControl.value.value\n ? relatedAsControl.value.value\n : relatedAsControl.value;\n }\n }\n\n if (!relationValue) {\n successCondition = false;\n } else if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) === -1\n ) {\n successCondition = false;\n }\n });\n }\n }\n\n if (!successCondition) {\n return { conditional_answered: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class RequiredValidator {\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value: any = control.value;\n const isEmpty: boolean =\n value == null || (typeof value === 'string' && value.length === 0);\n\n return isEmpty ? { required: true } : null;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class DateValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n\n if (value && value.length !== 0) {\n // YYYY-MM-DD or DD-MM-YYYY\n const test: boolean = !/Invalid|NaN/.test(new Date(value).toString());\n\n return test ? null : { date: true };\n } else {\n return null;\n }\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MinValidator {\n validate(min: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v >= min\n ? null\n : { min: { requiredValue: min, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MaxValidator {\n validate(max: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v <= max\n ? null\n : { max: { requiredValue: max, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MinDateValidator {\n validate(min: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() < min.getTime()\n ? { mindate: { requiredDate: min, actualDate: newDate } }\n : null;\n } else {\n return { mindate: { requiredDate: min } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MaxDateValidator {\n validate(max: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() > max.getTime()\n ? { maxdate: { requiredDate: max, actualDate: newDate } }\n : null;\n } else {\n return { maxdate: { requiredDate: max } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class FutureDateRestrictionValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n const now: Date = new Date();\n\n if (value && value.length !== 0) {\n if (!new DateValidator().validate(value)) {\n const d: Date = new Date(value);\n\n return d.getTime() > now.getTime()\n ? { futureDateRestriction: true }\n : null;\n }\n }\n\n return null;\n }\n}\n","import * as _ from 'lodash';\nexport class JsExpressionHelper {\n calcBMI(height, weight) {\n let r;\n if (height && weight) {\n r = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n return height && weight ? parseFloat(r) : null;\n }\n\n calcBSA(height: number, weight: number) {\n let result;\n if (height && weight) {\n result = Math.sqrt((height * weight) / 3600).toFixed(2);\n }\n return height && weight ? parseFloat(result) : null;\n }\n\n calcBMIForAgeZscore(bmiForAgeRef, height, weight) {\n let bmi;\n const maxAgeInDays = 1856;\n if (height && weight) {\n bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n const refSectionObject = _.first(bmiForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (bmi < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= bmi) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return bmi && refSectionObject ? formattedSDValue : null;\n }\n calcWeightForHeightZscore(weightForHeightRef, height, weight) {\n let refSection;\n let formattedSDValue;\n if (height && weight) {\n height = parseFloat(height).toFixed(1);\n }\n const standardHeightMin = 45;\n const standardMaxHeight = 110;\n if (height < standardHeightMin || height > standardMaxHeight) {\n formattedSDValue = -4;\n } else {\n refSection = _.filter(weightForHeightRef, (refObject) => {\n return parseFloat(refObject['Length']).toFixed(1) === height;\n });\n }\n\n const refSectionObject = _.first(refSection);\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (weight < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= weight) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight ? formattedSDValue : null;\n }\n\n calcHeightForAgeZscore(heightForAgeRef, height, weight) {\n const refSectionObject = _.first(heightForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (height < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= height) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight && refSectionObject ? formattedSDValue : null;\n }\n\n isEmpty(val) {\n if (\n val === undefined ||\n val === null ||\n val === '' ||\n val === 'null' ||\n val === 'undefined'\n ) {\n return true;\n }\n\n if (Array.isArray(val) && val.length === 0) {\n return true;\n }\n return false;\n }\n\n arrayContains(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n\n let contains = true;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) === -1) {\n contains = false;\n }\n }\n\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n extractRepeatingGroupValues(key, array) {\n const values = array.map(function (item) {\n return item[key];\n });\n return values;\n }\n formatDate(value, format, offset) {\n format = format || 'yyyy-MM-dd';\n offset = offset || '+0300';\n\n if (!(value instanceof Date)) {\n value = new Date(value);\n if (value === null || value === undefined) {\n throw new Error(\n 'DateFormatException: value passed ' + 'is not a valid date'\n );\n }\n }\n\n return value; // TODO implement this\n // return $filter('date')(value, format, offset);\n }\n\n arrayContainsAny(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n let contains = false;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) !== -1) {\n contains = true;\n }\n }\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n\n get helperFunctions() {\n const helper = this;\n return {\n arrayContainsAny: helper.arrayContainsAny,\n calcBMI: helper.calcBMI,\n calcBMIForAgeZscore: helper.calcBMIForAgeZscore,\n calcWeightForHeightZscore: helper.calcWeightForHeightZscore,\n calcHeightForAgeZscore: helper.calcHeightForAgeZscore,\n isEmpty: helper.isEmpty,\n arrayContains: helper.arrayContains,\n extractRepeatingGroupValues: helper.extractRepeatingGroupValues\n };\n }\n}\n","export class Validations {\n public static JSExpressionValidatorsEnabled = false;\n\n constructor() {}\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ExpressionRunner } from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { Validations } from './validations';\n\nexport class JsExpressionValidator {\n constructor() {}\n\n validate(model: JsExpressionValidationModel, form?: any) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n if (!Validations.JSExpressionValidatorsEnabled) {\n return null;\n }\n\n const expression = model.failsWhenExpression;\n const helper = new JsExpressionHelper();\n const dataDependencies = {};\n\n const helperFunctions = helper.helperFunctions;\n const runnable = new ExpressionRunner().getRunnable(\n expression,\n control,\n helperFunctions,\n dataDependencies,\n form\n );\n\n if (runnable.run()) {\n return {\n js_expression: { expression: expression, message: model.message }\n };\n }\n\n return null;\n };\n }\n}\n","export class Messages {\n public static readonly REQUIRED_FIELD_MSG = 'This field is required!';\n\n public static readonly INVALID_DATE_MSG = 'Provided date is invalid!';\n\n public static readonly FUTURE_DATE_RESTRICTION_MSG =\n 'Future date is not allowed!';\n\n public static readonly MIN_LENGTH_MSG = 'Min Length should be {minLength}';\n\n public static readonly MAX_LENGTH_MSG = 'Max Length should be {maxLength}';\n\n public static readonly MAX_DATE_MSG = 'Max Date should be {maxDate}';\n\n public static readonly MIN_DATE_MSG = 'Min Date should be {minDate}';\n\n public static readonly MAX_MSG = 'Max value should be {max}';\n\n public static readonly MIN_MSG = 'Min value should be {min}';\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport * as _ from 'lodash';\n\nimport { ConditionalRequiredValidator } from '../validators/conditional-required.validator';\nimport { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';\nimport { RequiredValidator } from '../validators/required.validator';\nimport { DateValidator } from '../validators/date.validator';\nimport { MinValidator } from '../validators/min.validator';\nimport { MaxValidator } from '../validators/max.validator';\nimport { MinDateValidator } from '../validators/min-date.validator';\nimport { MaxDateValidator } from '../validators/max-date.validator';\nimport { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';\nimport { JsExpressionValidator } from '../validators/js-expression.validator';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Messages } from '../utils/messages';\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\n@Injectable()\nexport class ValidationFactory {\n constructor() {}\n\n getValidators(question: QuestionBase, form?: any) {\n const list: Array<any> = [];\n\n if (question.validators) {\n _.forEach(question.validators, (validator: ValidationModel) => {\n switch (validator.type) {\n case 'date':\n list.push(this.dateValidator);\n const allowFutureDates: boolean = (<DateValidationModel>validator)\n .allowFutureDates;\n\n if (!allowFutureDates) {\n list.push(this.futureDateRestrictionValidator);\n }\n break;\n case 'js_expression':\n list.push(\n this.jsExpressionValidator.validate(\n <JsExpressionValidationModel>validator,\n form\n )\n );\n break;\n case 'max':\n list.push(\n this.getMaxValueValidator((<MaxValidationModel>validator).max)\n );\n break;\n case 'min':\n list.push(\n this.getMinValueValidator((<MinValidationModel>validator).min)\n );\n break;\n case 'conditionalRequired':\n list.push(\n this.conditionalRequiredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n case 'conditionalAnswered':\n list.push(\n this.conditionalAnsweredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n }\n });\n }\n\n if (\n question.required &&\n typeof question.required === 'string' &&\n question.required === 'true'\n ) {\n list.push(this.requiredValidator);\n } else {\n // TODO - handle custom required validator\n }\n\n return list;\n }\n\n get conditionalRequiredValidator(): ConditionalRequiredValidator {\n return new ConditionalRequiredValidator();\n }\n\n get conditionalAnsweredValidator(): ConditionalAnsweredValidator {\n return new ConditionalAnsweredValidator();\n }\n\n get requiredValidator(): any {\n return new RequiredValidator().validate;\n }\n\n get dateValidator(): any {\n return new DateValidator().validate;\n }\n\n get futureDateRestrictionValidator(): any {\n return new FutureDateRestrictionValidator().validate;\n }\n\n get maxDateValidator(): any {\n return new MaxDateValidator().validate;\n }\n\n get minDateValidator(): any {\n return new MinDateValidator().validate;\n }\n\n get minLengthValidator(): any {\n return Validators.minLength;\n }\n\n get maxLengthValidator() {\n return Validators.maxLength;\n }\n\n public getMinValueValidator(min: number): any {\n return new MinValidator().validate(min);\n }\n\n public getMaxValueValidator(max: number): any {\n return new MaxValidator().validate(max);\n }\n\n get jsExpressionValidator() {\n return new JsExpressionValidator();\n }\n\n public errors(errors: any, question: QuestionBase): Array<string> {\n const messages: Array<string> = [];\n\n for (const property in errors) {\n if (errors.hasOwnProperty(property)) {\n switch (property) {\n case 'required':\n messages.push(Messages.REQUIRED_FIELD_MSG);\n break;\n case 'date':\n messages.push(Messages.INVALID_DATE_MSG);\n break;\n case 'futureDateRestriction':\n messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);\n break;\n case 'minlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{minLength}',\n errors.minlength.requiredLength\n )\n );\n break;\n case 'maxlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{maxLength}',\n errors.maxlength.requiredLength\n )\n );\n break;\n case 'maxdate':\n messages.push(\n Messages.MAX_DATE_MSG.replace(\n '{maxDate}',\n errors.maxdate.requiredDate\n )\n );\n break;\n case 'mindate':\n messages.push(\n Messages.MIN_DATE_MSG.replace(\n '{minDate}',\n errors.mindate.requiredDate\n )\n );\n break;\n case 'max':\n messages.push(\n Messages.MAX_MSG.replace('{max}', errors.max.requiredValue)\n );\n break;\n case 'min':\n messages.push(\n Messages.MIN_MSG.replace('{min}', errors.min.requiredValue)\n );\n break;\n case 'js_expression':\n messages.push(errors['js_expression'].message);\n break;\n case 'conditional_required':\n messages.push(errors['conditional_required'].message);\n break;\n case 'conditional_answered':\n messages.push(errors['conditional_answered'].message);\n break;\n }\n }\n }\n\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Disabler } from '../control-hiders-disablers/can-disable';\nimport { Hider } from '../control-hiders-disablers/can-hide';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n// Add ability to display all fields for debugging\nimport { DebugModeService } from './../services/debug-mode.service';\n\n@Injectable()\nexport class HidersDisablersFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper,\n private _debugModeService: DebugModeService\n ) {}\n\n getJsExpressionDisabler(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Disabler {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.disable as string,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const disabler: Disabler = {\n toDisable: false,\n disableWhenExpression: question.disable as string,\n reEvaluateDisablingExpression: () => {\n const result = runnable.run();\n disabler.toDisable = result;\n }\n };\n return disabler;\n }\n\n getJsExpressionHider(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Hider {\n const hide: any = question.hide;\n const value: string =\n typeof hide === 'object'\n ? this.convertHideObjectToString(hide)\n : (question.hide as string);\n\n // check if debugging has been enabled\n\n const debugEnabled = this._debugModeService.debugEnabled();\n\n const runnable: Runnable = this.expressionRunner.getRunnable(\n value,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n\n const hider: Hider = {\n toHide: false,\n hideWhenExpression: value,\n reEvaluateHidingExpression: () => {\n /* if debug is enabled then hiders to be false\n else run the normal eveluator i.e runnable.run()\n */\n if (debugEnabled === true) {\n hider.toHide = false;\n } else {\n hider.toHide = runnable.run();\n }\n }\n };\n return hider;\n }\n\n convertHideObjectToString(hide: any) {\n if (hide.value instanceof Array) {\n const arrayStr: string = \"'\" + hide.value.join(\"','\") + \"'\";\n const exp = '!arrayContains([' + arrayStr + '],' + hide.field + ')';\n return exp;\n }\n\n return '';\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Alert } from '../control-alerts/can-generate-alert';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n\n@Injectable()\nexport class AlertsFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper\n ) {}\n getJsExpressionshowAlert(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Alert {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.alert.alertWhenExpression,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const showAlert: Alert = {\n shown: false,\n alertWhenExpression: question.alert.alertWhenExpression,\n alertMessage: question.alert.message,\n reEvaluateAlertExpression: () => {\n const result = runnable.run();\n showAlert.shown = result;\n }\n };\n return showAlert;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n AfeControlType\n} from '../../abstract-controls-extension';\n\nimport { NestedQuestion } from '../question-models/interfaces/nested-questions';\n\nimport { QuestionBase } from '../question-models/question-base';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { HidersDisablersFactory } from './hiders-disablers.factory';\nimport { AlertsFactory } from './show-messages.factory';\nimport { Form } from './form';\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\n\n@Injectable()\nexport class FormControlService {\n controls = [];\n validationFactory: ValidationFactory;\n hidersDisablersFactory: HidersDisablersFactory;\n\n constructor(\n validationFactory: ValidationFactory,\n hidersDisablersFactory: HidersDisablersFactory,\n private alertsFactory: AlertsFactory\n ) {\n this.validationFactory = validationFactory;\n this.hidersDisablersFactory = hidersDisablersFactory;\n }\n\n generateControlModel(\n questionModel: QuestionBase | NestedQuestion,\n parentControl: AfeFormGroup,\n generateChildren: boolean,\n form?: Form\n ): AfeFormControl | AfeFormArray | AfeFormGroup {\n if (questionModel instanceof QuestionBase) {\n if (questionModel.controlType === AfeControlType.AfeFormArray) {\n return this.generateFormArray(questionModel, parentControl, form);\n }\n if (questionModel.controlType === AfeControlType.AfeFormGroup) {\n return this.generateFormGroupModel(\n questionModel,\n generateChildren,\n parentControl,\n form\n );\n }\n\n if (questionModel.controlType === AfeControlType.AfeFormControl) {\n return this.generateFormControl(questionModel, parentControl, form);\n }\n }\n return null;\n }\n\n generateFormGroupModel(\n question: QuestionBase,\n generateChildren: boolean,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormGroup {\n const formGroup = new AfeFormGroup({});\n this.wireHidersDisablers(question, formGroup, form);\n this.wireAlerts(question, formGroup, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formGroup);\n }\n\n const asGroup = question as QuestionGroup;\n\n if (generateChildren && asGroup && asGroup.questions.length > 0) {\n this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);\n }\n\n return formGroup;\n }\n\n _generateFormGroupChildrenModel(\n questions: QuestionBase[],\n parentControl: AfeFormGroup,\n form?: Form\n ) {\n if (questions.length > 0) {\n questions.forEach((element) => {\n const generated = this.generateControlModel(\n element,\n parentControl,\n true,\n form\n );\n if (generated !== null) {\n parentControl.addControl(element.key, generated);\n }\n });\n }\n }\n\n generateFormArray(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormArray {\n const validators = this.validationFactory.getValidators(question, form);\n let formArray: AfeFormArray;\n if (validators && validators.length > 0) {\n formArray = new AfeFormArray([], validators[0]);\n } else {\n formArray = new AfeFormArray([]);\n }\n formArray.uuid = question.key;\n this.wireHidersDisablers(question, formArray, form);\n this.wireAlerts(question, formArray, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formArray);\n }\n\n return formArray;\n }\n\n generateFormControl(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormControl {\n const value = question.defaultValue || '';\n const validators = this.validationFactory.getValidators(question, form);\n\n const control = new AfeFormControl(value, validators);\n control.uuid = question.key;\n this.wireHidersDisablers(question, control, form);\n this.wireAlerts(question, control, form);\n this.wireCalculator(\n question,\n control,\n form ? form.dataSourcesContainer.dataSources : null\n );\n\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, control);\n }\n\n return control;\n }\n\n private wireAlerts(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.alert && question.alert !== '') {\n const alert = this.alertsFactory.getJsExpressionshowAlert(\n question,\n control,\n form\n );\n control.setAlertFn(alert);\n }\n }\n private wireHidersDisablers(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.hide && question.hide !== '') {\n const hider = this.hidersDisablersFactory.getJsExpressionHider(\n question,\n control,\n form\n );\n control.setHidingFn(hider);\n }\n\n if (question.disable && question.disable !== '') {\n const disable = this.hidersDisablersFactory.getJsExpressionDisabler(\n question,\n control,\n form\n );\n control.setDisablingFn(disable);\n }\n }\n\n private wireCalculator(\n question: QuestionBase,\n control: AfeFormControl,\n dataSource?: any\n ) {\n if (question.calculateExpression && question.calculateExpression !== '') {\n const helper: JsExpressionHelper = new JsExpressionHelper();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n question.calculateExpression,\n control,\n helper.helperFunctions,\n dataSource\n );\n // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class\n control.setCalculatorFn(runnable.run);\n }\n }\n}\n","export const DEFAULT_STYLES = `a {\n color: white;\n text-decoration: none;\n font-size: 12px;\n text-transform: uppercase;\n }\n\n ul {\n list-style-type: none;\n margin: 2px auto;\n position: relative;\n }\n\n li {\n display: block;\n padding: 10px 20px;\n white-space: nowrap;\n transition: all 0.3s ease-in;\n border-bottom: 4px solid transparent;\n }\n\n li:hover {\n border-bottom: 4px solid white;\n opacity: 0.7;\n cursor: pointer;\n }\n\n .owl-theme .owl-controls .owl-nav {\n position: absolute;\n width: 100%;\n top: 0;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"] {\n position: absolute;\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"]:hover {\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav .owl-next {\n right: 0;\n transform: translate(120%);\n }\n\n .owl-theme .owl-controls .owl-nav .owl-prev {\n left: 0;\n transform: translate(-120%);\n }\n\n .slick-initialized .swipe-tab-content {\n position: relative;\n min-height: 365px;\n }\n @media screen and (min-width: 767px) {\n .slick-initialized .swipe-tab-content {\n min-height: 500px;\n }\n .time-control{\n width:50%;\n }\n }\n .slick-initialized .swipe-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n background: none;\n border: 0;\n color: #757575;\n cursor: pointer;\n text-align: center;\n border-bottom: 2px solid rgba(51, 122, 183, 0);\n transition: all 0.5s;\n }\n .slick-initialized .swipe-tab:hover {\n color: #337AB7;\n }\n .slick-initialized .swipe-tab.active-tab {\n border-bottom-color: #337AB7;\n color: #337AB7;\n font-weight: bold;\n }\n\n .disabled {\n opacity: .5;\n pointer-events: none;\n }\n\n .select2-container {\n margin-top: -5px;\n }\n\n .btn {\n padding: 0px 12px !important;\n }\n\n .form-tooltip{\n color:rgb(51, 122, 183);\n display: inline-block;\n }\n .question-info{\n opacity:0;\n height:0px;\n display: none;\n transition-duration: opacity 1s ease-out;\n transtion-delay: 0.5s;\n padding-top: 2px;\n padding-bottom: 2px;\n color: #696969;\n border-style: ridge;\n border-width: 1px;\n border-color: #337ab7;\n margin-top: 2px;\n }\n .hide-info{\n display:none;\n height:0px;\n }\n .form-tooltip:hover ~ .question-info {\n display:block;\n opacity:1;\n height:auto;\n }\n .form-tooltip .tooltipcontent::after {\n content: \" \";\n position: absolute;\n bottom: 100%; /* At the top of the tooltip */\n right: 0%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #337ab7;\n border-left-color: transparent;\n }\n\n ng-select.form-control {\n padding-top: 0;\n height: auto;\n padding-bottom: 0;\n }\n\n .forms-dropdown-menu {\n max-height: 450px;\n overflow-y: scroll;\n }\n .no-border {\n border: 0;\n box-shadow: none;\n}\n.time-control{\n width:100%;\n}\n\n `;\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DataSources {\n private _dataSources: any = {};\n constructor() {}\n\n get dataSources(): any {\n return this._dataSources;\n }\n\n registerDataSource(key: string, dataSource: any, unWrap = false) {\n if (unWrap) {\n // tslint:disable-next-line:forin\n for (const o in dataSource) {\n console.log('registering', o, dataSource[o]);\n this.registerDataSource(o, dataSource[o], false);\n }\n }\n if (this.dataSources[key]) {\n console.warn('Overriding registered data source', key);\n }\n this._dataSources[key] = dataSource;\n }\n\n clearDataSource(key: string) {\n delete this._dataSources[key];\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Inject,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport 'hammerjs';\nimport { DEFAULT_STYLES } from './form-renderer.component.css';\nimport { DOCUMENT } from '@angular/common';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, LeafNode, GroupNode } from '../form-factory/form-node';\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { FormErrorsService } from '../services/form-errors.service';\nimport { QuestionGroup } from '../question-models/group-question';\n// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';\n// import * as _ from 'lodash';\n\n// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';\n// import { QuestionBase } from '../question-models';\n\n@Component({\n selector: 'form-renderer',\n template: `<!--CONTAINERS-->\n<div *ngIf=\"node.question.renderingType === 'form'\">\n <div class=\"dropdown dropdown-tabs forms-dropdown\">\n <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">\n <i class=\"fa fa-angle-double-down\"></i>\n </a>\n <ul\n class=\"dropdown-menu dropdown-menu-right forms-dropdown-menu\"\n role=\"menu\"\n aria-labelledby=\"dropdownMenu\"\n >\n <li\n *ngFor=\"let question of node.question.questions; let i = index\"\n (click)=\"clickTab(i)\"\n >\n {{ question.label }}\n </li>\n </ul>\n </div>\n <mat-tab-group\n (selectedIndexChange)=\"tabSelected($event)\"\n [selectedIndex]=\"activeTab\"\n >\n <mat-tab\n [label]=\"question.label\"\n *ngFor=\"let question of node.question.questions; let i = index\"\n >\n <div (swipeLeft)=\"loadNextTab()\" (swipeRight)=\"loadPreviousTab()\">\n <form-renderer\n [node]=\"node.children[question.key]\"\n [parentComponent]=\"this\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div style=\"text-align: center\">\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadPreviousTab()\"\n [ngClass]=\"{ disabled: isCurrentTabFirst() }\"\n >\n <<\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadNextTab()\"\n [ngClass]=\"{ disabled: isCurrentTabLast() }\"\n >\n >>\n </button>\n </div>\n</div>\n<div *ngIf=\"node.question.renderingType === 'page'\">\n <!--<h2>{{node.question.label}}</h2>-->\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n</div>\n<div *ngIf=\"node.question.renderingType === 'section' && checkSection(node)\">\n <div class=\"panel panel-primary\">\n <div class=\"panel-heading\">\n <button\n type=\"button\"\n class=\"btn btn-primary pull-right\"\n (click)=\"isCollapsed = !isCollapsed\"\n >\n {{ isCollapsed ? 'Show' : 'Hide' }}\n </button>\n {{ node.question.label }}\n </div>\n <div class=\"panel-body\" [collapse]=\"isCollapsed\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n </div>\n </div>\n</div>\n\n<!-- MESSAGES -->\n<div\n *ngIf=\"node.control && node.control.alert && node.control.alert !== ''\"\n class=\"alert alert-warning\"\n>\n <a class=\"close\" data-dismiss=\"alert\">×</a> {{ node.control.alert }}\n</div>\n\n<!--CONTROLS-->\n\n<div\n *ngIf=\"node.question.controlType === 0\"\n class=\"form-group\"\n [formGroup]=\"parentGroup\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--LEAF CONTROL-->\n <div class=\"question-area\">\n <a\n class=\"form-tooltip pull-right\"\n (click)=\"toggleInformation(node.question.extras.id)\"\n data-placement=\"right\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n <i class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></i>\n </a>\n\n <label\n *ngIf=\"node.question.label\"\n [style.color]=\"hasErrors() ? 'red' : ''\"\n class=\"control-label\"\n [attr.for]=\"node.question.key\"\n >\n {{ node.question.required ? '*' : '' }} {{ node.question.label }}\n </label>\n <div [ngSwitch]=\"node.question.renderingType\">\n <select\n class=\"form-control\"\n *ngSwitchCase=\"'select'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n <option *ngFor=\"let o of node.question.options\" [ngValue]=\"o.value\">\n {{ o.label }}\n </option>\n </select>\n\n <app-file-upload\n *ngSwitchCase=\"'file'\"\n [dataSource]=\"dataSource\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n (fileChanged)=\"upload($event)\"\n >\n </app-file-upload>\n <textarea\n [placeholder]=\"node.question.placeholder\"\n [rows]=\"node.question.rows\"\n class=\"form-control\"\n *ngSwitchCase=\"'textarea'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n </textarea>\n <!--\n <ng-select *ngSwitchCase=\"'remote-select'\" [items]=\"items$ | async\" bindLabel=\"label\" bindValue=\"value\" placeholder=\"{{node.question.placeholder}}\"\n [hideSelected]=\"true\" [loading]=\"itemsLoading\" [typeahead]=\"itemsInput$\" [formControlName]=\"node.question.key\" [id]=\"node.question.key + 'id'\">\n </ng-select>\n -->\n <remote-select\n *ngSwitchCase=\"'remote-select'\"\n [placeholder]=\"node.question.placeholder\"\n tabindex=\"0\"\n [dataSource]=\"dataSource\"\n [componentID]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n ></remote-select>\n <!-- \n <date-time-picker *ngSwitchCase=\"'date'\" [showTime]=\"node.question.showTime\" tabindex=\"0\" [weeks]='node.question.extras.questionOptions.weeksList'\n (onDateChange)=\"onDateChanged(node)\" [showWeeks]=\"node.question.showWeeksAdder\" [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"></date-time-picker>\n -->\n\n <ngx-date-time-picker\n *ngSwitchCase=\"'date'\"\n [showTime]=\"node.question.showTime\"\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [weeks]=\"node.question.extras.questionOptions.weeksList\"\n (onDateChange)=\"onDateChanged(node)\"\n [showWeeks]=\"node.question.showWeeksAdder\"\n ></ngx-date-time-picker>\n <ngx-time-picker \n *ngSwitchCase=\"'time'\" \n id=\"node.question.key + 'id'\" \n [formControlName]=\"node.question.key\"\n ></ngx-time-picker>\n <ng-select\n *ngSwitchCase=\"'multi-select'\"\n [style.height]=\"'auto'\"\n [style.overflow-x]=\"'hidden'\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"true\"\n >\n </ng-select>\n <ng-select\n *ngSwitchCase=\"'single-select'\"\n [style.height]=\"auto\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"false\"\n >\n </ng-select>\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'number'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'number'\"\n [id]=\"node.question.key + 'id'\"\n [step]=\"'any'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'decimal'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'text'\"\n [id]=\"node.question.key + 'id'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchDefault\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"node.question.renderingType\"\n [id]=\"node.question.key + 'id'\"\n />\n\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let o of node.question.options\">\n <label class=\"form-control no-border\">\n <input\n type=\"radio\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [value]=\"o.value\"\n />\n {{ o.label }}\n </label>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'checkbox'\">\n <checkbox\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [selected]=\"node.control.value\"\n ></checkbox>\n </div>\n\n <div\n *ngIf=\"\n node.question.enableHistoricalValue && node.question.historicalDisplay\n \"\n style=\"margin-top: 2px\"\n >\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-xs-9\">\n <span class=\"text-warning\">Previous Value: </span>\n <strong>{{ node.question.historicalDisplay?.text }}</strong>\n <span *ngIf=\"node.question.showHistoricalValueDate\">\n <span> | </span>\n <strong class=\"text-primary\"\n >{{ node.question.historicalDisplay?._date }}\n </strong>\n <span\n class=\"text-primary\"\n *ngIf=\"\n node.question.historicalDisplay &&\n node.question.historicalDisplay._date\n \"\n >\n ({{ node.question.historicalDisplay._date | timeAgo }})</span\n >\n </span>\n </div>\n <button\n type=\"button\"\n [node]=\"node\"\n [name]=\"'historyValue'\"\n class=\"btn btn-primary btn-small col-xs-3\"\n >\n Use Value\n </button>\n </div>\n </div>\n </div>\n <appointments-overview [node]=\"node\"></appointments-overview>\n <div *ngIf=\"hasErrors()\">\n <p *ngFor=\"let e of errors()\">\n <span class=\"text-danger\">{{ e }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"question-info col-md-12 col-lg-12 col-sm-12\"\n id=\"{{ node.question.extras.id }}\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n {{ node.question.extras.questionInfo }}\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 1\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--ARRAY CONTROL-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div class=\"well\" style=\"padding: 2px\" *ngSwitchCase=\"'repeating'\">\n <h4 style=\"margin: 2px; font-weight: bold\">{{ node.question.label }}</h4>\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 2px;\n \"\n />\n <div [ngSwitch]=\"node.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <div>{{ child.orderNumber }}</div>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\" style=\"margin-bottom: 20px\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n </div>\n <button\n type=\"button \"\n class=\"btn btn-primary\"\n (click)=\"node.createChildNode()\"\n >\n Add\n </button>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 2\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--GROUP-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n <div\n *ngSwitchCase=\"'field-set'\"\n style=\"border: 1px solid #eeeeee; padding: 2px; margin: 2px\"\n >\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </div>\n</div>\n`,\n styles: ['../../style/app.css', DEFAULT_STYLES]\n})\nexport class FormRendererComponent implements OnInit {\n @Input() public parentComponent: FormRendererComponent;\n @Input() public node: NodeBase;\n @Input() public parentGroup: AfeFormGroup;\n public childComponents: FormRendererComponent[] = [];\n public showTime: boolean;\n public showWeeks: boolean;\n public activeTab: number;\n public dataSource: DataSource;\n public isCollapsed = false;\n public auto: any;\n\n // items$: Observable<any[]>;\n // itemsLoading = false;\n // itemsInput$ = new Subject<string>();\n\n constructor(\n private validationFactory: ValidationFactory,\n private dataSources: DataSources,\n private formErrorsService: FormErrorsService,\n @Inject(DOCUMENT) private document: any\n ) {\n this.activeTab = 0;\n }\n\n public ngOnInit() {\n this.setUpRemoteSelect();\n this.setUpFileUpload();\n if (this.node && this.node.form) {\n const tab = this.node.form.valueProcessingInfo.lastFormTab;\n if (tab && tab !== this.activeTab) {\n this.activeTab = tab;\n }\n }\n if (this.node && this.node.question.renderingType === 'form') {\n this.formErrorsService.announceErrorField$.subscribe((error) => {\n this.scrollToControl(error);\n });\n }\n\n if (this.node && this.node.question.renderingType === 'section') {\n this.isCollapsed = !(this.node.question as QuestionGroup).isExpanded;\n }\n\n if (this.parentComponent) {\n this.parentComponent.addChildComponent(this);\n }\n }\n\n public addChildComponent(child: FormRendererComponent) {\n this.childComponents.push(child);\n }\n\n public setUpRemoteSelect() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'remote-select'\n ) {\n // let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n /*\n let defaltValues = of([]);\n if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {\n defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(\n catchError(() => of([])), // empty list on error\n );\n }\n this.items$ = concat(\n defaltValues,\n this.itemsInput$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n tap(() => this.itemsLoading = true),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => {\n this.itemsLoading = false\n })\n ))\n )\n );\n */\n if (this.dataSource && this.node.question.dataSourceOptions) {\n this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;\n }\n }\n }\n\n public setUpFileUpload() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'file'\n ) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n // console.log('Key', this.node.question);\n // console.log('Data source', this.dataSource);\n }\n }\n\n checkSection(node: NodeBase) {\n if (node.question.renderingType === 'section') {\n let groupChildrenHidden = false;\n const allSectionControlsHidden = Object.keys(node.children).every((k) => {\n const innerNode = node.children[k];\n if (innerNode instanceof GroupNode) {\n groupChildrenHidden = Object.keys(innerNode.children).every(\n (i) => innerNode.children[i].control.hidden\n );\n }\n return node.children[k].control.hidden || groupChildrenHidden;\n });\n return !allSectionControlsHidden;\n }\n return true;\n }\n\n public clickTab(tabNumber) {\n this.activeTab = tabNumber;\n }\n\n public loadPreviousTab() {\n if (!this.isCurrentTabFirst()) {\n this.clickTab(this.activeTab - 1);\n document.body.scrollTop = 0;\n }\n }\n\n public isCurrentTabFirst() {\n return this.activeTab === 0;\n }\n\n public isCurrentTabLast() {\n return this.activeTab === this.node.question['questions'].length - 1;\n }\n\n public loadNextTab() {\n if (!this.isCurrentTabLast()) {\n this.clickTab(this.activeTab + 1);\n document.body.scrollTop = 0;\n }\n }\n public tabSelected($event) {\n this.activeTab = $event;\n this.setPreviousTab();\n }\n public setPreviousTab() {\n if (this.node && this.node.form) {\n this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;\n }\n }\n public hasErrors() {\n return this.node.control.touched && !this.node.control.valid;\n }\n\n public errors() {\n return this.getErrors(this.node);\n }\n\n public scrollToControl(error: string) {\n const tab: number = +error.split(',')[0];\n const elSelector = error.split(',')[1] + 'id';\n\n // the tab components\n const tabComponent: FormRendererComponent = this.childComponents[tab];\n\n this.clickTab(tab);\n\n setTimeout(() => {\n // expand all sections\n tabComponent.childComponents.forEach((section) => {\n section.isCollapsed = false;\n\n setTimeout(() => {\n const element: any = this.document.getElementById(elSelector);\n if (element !== null && element.focus) {\n element.focus();\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n });\n }, 200);\n }\n\n public onDateChanged(node: LeafNode) {\n // console.log('Node', node);\n this.node = node;\n }\n\n public upload(event) {\n // console.log('Event', event);\n // console.log('Data', this.dataSource);\n }\n\n public toggleInformation(infoId) {\n const e = document.getElementById(infoId);\n\n if (e.style.display === 'block') {\n e.style.display = 'none';\n } else {\n e.style.display = 'block';\n }\n\n console.log('InfoId', infoId);\n }\n\n private getErrors(node: NodeBase) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { Form } from '../form-factory/form';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { NodeBase, LeafNode } from '../form-factory/form-node';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { FormErrorsService } from '../services/form-errors.service';\n\n@Component({\n selector: 'error-renderer',\n template: `<div *ngIf=\"showErrors()\" class=\"container\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-warning\"\n *ngFor=\"let errorNode of errorNodes\"\n (click)=\"announceErrorField(errorNode)\"\n >\n <div class=\"error\" *ngIf=\"errorNode.control.valid == false\">\n <h4>{{ errorNode.question.label }}</h4>\n <span class=\"text-danger\"> {{ getControlError(errorNode) }}</span>\n </div>\n </li>\n </ul>\n</div>\n`,\n styles: [`ul{list-style:none}.list-group-item{padding:2px 15px;cursor:pointer}ul li:hover{background-color:#fff}h4{margin-top:7px;margin-bottom:7px}`]\n})\nexport class ErrorRendererComponent implements OnInit {\n @Input() form: Form;\n\n constructor(\n private validationFactory: ValidationFactory,\n private formErrorsService: FormErrorsService\n ) {}\n\n ngOnInit() {}\n\n showErrors() {\n return !this.form.valid && this.form.showErrors;\n }\n\n get errorNodes() {\n const invalidControls = this.form.markInvalidControls(\n this.form.rootNode,\n []\n );\n return invalidControls;\n }\n\n getControlError(node: LeafNode) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n announceErrorField(errorNode: LeafNode) {\n const nodes: Array<NodeBase> = this.form.searchNodeByQuestionId(\n errorNode.path.substring(0, errorNode.path.indexOf('.'))\n );\n\n _.forEach(nodes, (node: NodeBase) => {\n if (node.question.renderingType === 'page') {\n const pageIndex: number = this.getPageIndex(node);\n this.formErrorsService.announceErrorField(\n pageIndex + ',' + errorNode.question.key\n );\n }\n });\n }\n\n getPageIndex(node: NodeBase) {\n const questionGroup: QuestionGroup = this.form.rootNode\n .question as QuestionGroup;\n return questionGroup.questions.indexOf(node.question);\n }\n}\n","import * as _ from 'lodash';\nimport { QuestionBase } from '../question-models/question-base';\n\nexport class HistoricalFieldHelperService {\n public getDisplayTextFromOptions(\n question: QuestionBase,\n valueProperty: string,\n displayProperty: string\n ): string {\n let displayText = '';\n const historicalValue = question.historicalDataValue;\n if (_.isArray(historicalValue.value)) {\n let valueConverted = 0;\n _.each(historicalValue.value, (val) => {\n _.each(question.options, (option) => {\n if (option[valueProperty] === val) {\n if (valueConverted === 0) {\n displayText = displayText + option[displayProperty];\n } else {\n displayText = displayText + ', ' + option[displayProperty];\n }\n valueConverted++;\n }\n });\n });\n } else {\n _.each(question.options, (option) => {\n if (option[valueProperty] === historicalValue.value) {\n displayText = option[displayProperty];\n }\n });\n }\n return displayText;\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport { HistoricalFieldHelperService } from '../helpers/historical-field-helper-service';\nimport * as _ from 'lodash';\nimport { NodeBase } from '../form-factory/form-node';\n\n@Directive({\n selector: `[node]`\n})\nexport class HistoricalValueDirective {\n @Input() _node: NodeBase;\n @Output() _nodeChange = new EventEmitter<Object>();\n\n historicalDisplay: string;\n\n constructor(private historicalFieldHelper: HistoricalFieldHelperService) {}\n\n @HostListener('click', ['$event'])\n setValue(e) {\n if (e.target.name === 'historyValue') {\n if (\n this._node &&\n (!this.compareString(this._node.question.renderingType, 'page') ||\n !this.compareString(this._node.question.renderingType, 'section'))\n ) {\n this._node.control.setValue(\n this._node.question.historicalDataValue.value\n );\n\n this._node.question[\n 'historicalValue'\n ] = this._node.question.historicalDataValue;\n e.stopPropagation();\n this._nodeChange.emit(this._node);\n }\n }\n }\n private compareString(a, b) {\n if (a === b) {\n return true;\n } else {\n return false;\n }\n }\n @Input()\n set node(node: NodeBase) {\n if (node) {\n this._node = node;\n if (\n this._node.question.enableHistoricalValue &&\n !_.isUndefined(this._node.question.historicalDataValue)\n ) {\n const display: any = { text: '', _date: '' };\n if (\n this._node.question.renderingType === 'select' ||\n this._node.question.renderingType === 'multi-select' ||\n this._node.question.renderingType === 'single-select'\n ) {\n display.text = this.historicalFieldHelper.getDisplayTextFromOptions(\n this._node.question,\n 'value',\n 'label'\n );\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n } else if (!_.isUndefined(this._node.question.historicalDataValue)) {\n display.text = this._node.question.historicalDataValue.value;\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n }\n }\n }\n }\n}\n","export const STYLE = `\nng-select {\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle;\n width: 100%;\n}\nng-select * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nng-select > div {\n border: 1px solid #ddd;\n box-sizing: border-box;\n cursor: pointer;\n user-select: none;\n width: 100%;\n}\nng-select > div.disabled {\n background-color: #eee;\n color: #aaa;\n cursor: default;\n pointer-events: none;\n}\nng-select > div > div.single {\n display: flex;\n height: 30px;\n width: 100%;\n}\nng-select > div > div.single > div.value,\nng-select > div > div.single > div.placeholder {\n flex: 1;\n line-height: 30px;\n overflow: hidden;\n padding: 0 10px;\n white-space: nowrap;\n}\nng-select > div > div.single > div.placeholder {\n color: #a9a9a9;\n}\nng-select > div > div.single > div.clear,\nng-select > div > div.single > div.toggle {\n color: #aaa;\n line-height: 30px;\n text-align: center;\n width: 30px;\n}\nng-select > div > div.single > div.clear:hover,\nng-select > div > div.single > div.toggle:hover {\n background-color: #ececec;\n}\nng-select > div > div.single > div.clear {\n font-size: 18px;\n}\nng-select > div > div.single > div.toggle {\n font-size: 14px;\n}\nng-select > div > div.multiple {\n display: flex;\n flex-flow: row wrap;\n height: 100%;\n min-height: 30px;\n padding: 0 10px;\n width: 100%;\n}\nng-select > div > div.multiple > div.option {\n background-color: #eee;\n border: 1px solid #aaa;\n border-radius: 4px;\n color: #333;\n cursor: default;\n display: inline-block;\n flex-shrink: 0;\n font-size: 14px;\n line-height: 22px;\n margin: 3px 5px 3px 0;\n padding: 0 4px;\n}\nng-select > div > div.multiple > div.option span.deselect-option {\n color: #aaa;\n cursor: pointer;\n font-size: 14px;\n height: 20px;\n line-height: 20px;\n}\nng-select > div > div.multiple > div.option span.deselect-option:hover {\n color: #555;\n}\nng-select > div > div.multiple input {\n background-color: transparent;\n border: none;\n height: 30px;\n line-height: 30px;\n padding: 0;\n}\nng-select > div > div.multiple input:focus {\n outline: none;\n}\n`;\n","export class Option {\n value: string;\n label: string;\n\n disabled: boolean;\n highlighted: boolean;\n selected: boolean;\n shown: boolean;\n\n constructor(value: string, label: string) {\n this.value = value;\n this.label = label;\n\n this.disabled = false;\n this.highlighted = false;\n this.selected = false;\n this.shown = true;\n }\n\n show() {\n this.shown = true;\n }\n\n hide() {\n this.shown = false;\n }\n\n disable() {\n this.disabled = true;\n }\n\n enable() {\n this.disabled = false;\n }\n\n undecoratedCopy() {\n return {\n label: this.label,\n value: this.value\n };\n }\n}\n","export class Diacritics {\n static DIACRITICS = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n\n static strip(text: string): string {\n const match = (a: string): string => {\n return this.DIACRITICS[a] || a;\n };\n if (text) {\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n } else {\n return '';\n }\n }\n}\n","import { Option } from './option';\nimport { Diacritics } from './diacritics';\n\nexport class OptionList {\n private _options: Array<Option>;\n\n /* Consider using these for performance improvement. */\n // private _selection: Array<Option>;\n // private _filtered: Array<Option>;\n // private _value: Array<string>;\n\n private _highlightedOption: Option = null;\n // v0 and v1 are assumed not to be undefined or null.\n static equalValues(v0: Array<string>, v1: Array<string>): boolean {\n if (v0.length !== v1.length) {\n return false;\n }\n\n const a: Array<string> = v0.slice().sort();\n const b: Array<string> = v1.slice().sort();\n\n return a.every((v, i) => {\n return v === b[i];\n });\n }\n\n constructor(options: Array<any>) {\n if (typeof options === 'undefined' || options === null) {\n options = [];\n }\n\n this._options = options.map((option) => {\n const o: Option = new Option(option.value, option.label);\n if (option.disabled) {\n o.disable();\n }\n return o;\n });\n\n this.highlight();\n }\n\n /** Options. **/\n\n get options(): Array<Option> {\n return this._options;\n }\n\n getOptionsByValue(value: string): Array<Option> {\n return this.options.filter((option) => {\n return option.value === value;\n });\n }\n\n /** Value. **/\n\n get value(): Array<string> {\n return this.selection.map((selectedOption) => {\n return selectedOption.value;\n });\n }\n\n set value(v: Array<string>) {\n v = typeof v === 'undefined' || v === null ? [] : v;\n\n this.options.forEach((option) => {\n option.selected = v.indexOf(option.value) > -1;\n });\n }\n\n /** Selection. **/\n\n get selection(): Array<Option> {\n return this.options.filter((option) => {\n return option.selected;\n });\n }\n\n select(option: Option, multiple: boolean) {\n if (!multiple) {\n this.clearSelection();\n }\n option.selected = true;\n }\n\n deselect(option: Option) {\n option.selected = false;\n }\n\n clearSelection() {\n this.options.forEach((option) => {\n option.selected = false;\n });\n }\n\n /** Filter. **/\n\n get filtered(): Array<Option> {\n return this.options.filter((option) => {\n return option.shown;\n });\n }\n\n filter(term: string) {\n if (term.trim() === '') {\n this.resetFilter();\n } else {\n this.options.forEach((option) => {\n const l: string = Diacritics.strip(option.label).toUpperCase();\n const t: string = Diacritics.strip(term).toUpperCase();\n option.shown = l.indexOf(t) > -1;\n });\n }\n\n this.highlight();\n }\n\n resetFilter() {\n this.options.forEach((option) => {\n option.shown = true;\n });\n }\n\n /** Highlight. **/\n\n get highlightedOption(): Option {\n return this._highlightedOption;\n }\n\n highlight() {\n const option: Option = this.hasShownSelected()\n ? this.getFirstShownSelected()\n : this.getFirstShown();\n this.highlightOption(option);\n }\n\n highlightOption(option: Option) {\n this.clearHighlightedOption();\n\n if (option !== null) {\n option.highlighted = true;\n this._highlightedOption = option;\n }\n }\n\n highlightNextOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > -1 && index < shownOptions.length - 1) {\n this.highlightOption(shownOptions[index + 1]);\n }\n }\n\n highlightPreviousOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > 0) {\n this.highlightOption(shownOptions[index - 1]);\n }\n }\n\n private clearHighlightedOption() {\n if (this.highlightedOption !== null) {\n this.highlightedOption.highlighted = false;\n this._highlightedOption = null;\n }\n }\n\n private getHighlightedIndexFromList(options: Array<Option>) {\n for (let i = 0; i < options.length; i++) {\n if (options[i].highlighted) {\n return i;\n }\n }\n return -1;\n }\n\n getHighlightedIndex() {\n return this.getHighlightedIndexFromList(this.filtered);\n }\n\n /** Util. **/\n\n hasShown() {\n return this.options.some((option) => {\n return option.shown;\n });\n }\n\n hasSelected() {\n return this.options.some((option) => {\n return option.selected;\n });\n }\n\n hasShownSelected() {\n return this.options.some((option) => {\n return option.shown && option.selected;\n });\n }\n\n private getFirstShown(): Option {\n for (const option of this.options) {\n if (option.shown) {\n return option;\n }\n }\n return null;\n }\n\n private getFirstShownSelected(): Option {\n for (const option of this.options) {\n if (option.shown && option.selected) {\n return option;\n }\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n Input,\n OnChanges,\n OnInit,\n Output,\n EventEmitter,\n ExistingProvider,\n ViewChild,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { STYLE } from './select.component.style';\nimport { SelectDropdownComponent } from './select-dropdown.component';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\nexport const SELECT_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable:no-use-before-declare\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n};\n\n@Component({\n selector: 'ng-select',\n template: `<div\n #selection\n [attr.tabindex]=\"disabled ? null : 0\"\n [ngClass]=\"{\n open: isOpen,\n focus: hasFocus,\n below: isBelow,\n disabled: disabled\n }\"\n (click)=\"onSelectContainerClick($event)\"\n (focus)=\"onSelectContainerFocus()\"\n (keydown)=\"onSelectContainerKeydown($event)\"\n (window:click)=\"onWindowClick()\"\n (window:resize)=\"onWindowResize()\"\n>\n <div class=\"single\" *ngIf=\"!multiple\">\n <div class=\"value\" *ngIf=\"optionList.hasSelected()\">\n {{ optionList.selection[0].label }}\n </div>\n <div class=\"placeholder\" *ngIf=\"!optionList.hasSelected()\">\n {{ placeholderView }}\n </div>\n <div\n class=\"clear\"\n *ngIf=\"allowClear\"\n (click)=\"onClearSelectionClick($event)\"\n >\n ✕\n </div>\n <div class=\"toggle\" *ngIf=\"isOpen\">▲</div>\n <div class=\"toggle\" *ngIf=\"!isOpen\">▼</div>\n </div>\n\n <div class=\"multiple\" *ngIf=\"multiple\">\n <div class=\"option\" *ngFor=\"let option of optionList.selection\">\n <span class=\"deselect-option\" (click)=\"onDeselectOptionClick(option)\">\n ✕\n </span>\n {{ option.label }}\n </div>\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n tabindex=\"-1\"\n [placeholder]=\"placeholderView\"\n [ngStyle]=\"{ 'width.px': filterInputWidth }\"\n (input)=\"onMultipleFilterInput($event)\"\n (keydown)=\"onMultipleFilterKeydown($event)\"\n />\n </div>\n</div>\n<select-dropdown\n *ngIf=\"isOpen\"\n #dropdown\n [multiple]=\"multiple\"\n [optionList]=\"optionList\"\n [notFoundMsg]=\"notFoundMsg\"\n [highlightColor]=\"highlightColor\"\n [highlightTextColor]=\"highlightTextColor\"\n [filterEnabled]=\"filterEnabled\"\n [width]=\"width\"\n [top]=\"top\"\n [left]=\"left\"\n (close)=\"onDropdownClose($event)\"\n (optionClicked)=\"onDropdownOptionClicked($event)\"\n (singleFilterClick)=\"onSingleFilterClick()\"\n (singleFilterInput)=\"onSingleFilterInput($event)\"\n (singleFilterKeydown)=\"onSingleFilterKeydown($event)\"\n>\n</select-dropdown>\n`,\n styles: [STYLE],\n providers: [SELECT_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent\n implements AfterViewInit, ControlValueAccessor, OnChanges, OnInit {\n /** Keys. **/\n\n private KEYS: any = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n UP: 38,\n DOWN: 40\n };\n\n @Input() options: Array<any>;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() highlightColor = '#2196f3';\n @Input() highlightTextColor = '#fff';\n @Input() multiple = false;\n @Input() noFilter = 0;\n @Input() notFoundMsg = 'No results found';\n @Input() placeholder = '';\n\n @Output() opened: EventEmitter<null> = new EventEmitter<null>();\n @Output() closed: EventEmitter<null> = new EventEmitter<null>();\n @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n @Output() deselected: EventEmitter<any> = new EventEmitter<any>();\n @Output() typed: EventEmitter<any> = new EventEmitter<any>();\n\n @ViewChild('selection') selectionSpan: any;\n @ViewChild('dropdown') dropdown: SelectDropdownComponent;\n @ViewChild('filterInput') filterInput: any;\n\n private _value: Array<any> = [];\n optionList: OptionList;\n\n // Selection state variables.\n hasSelected = false;\n\n // View state variables.\n filterEnabled = true;\n filterInputWidth = 1;\n hasFocus = false;\n isBelow = true;\n isDisabled = false;\n isOpen = false;\n placeholderView = '';\n\n clearClicked = false;\n selectContainerClicked = false;\n\n // Width and position for the dropdown container.\n width: number;\n top: number;\n left: number;\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n /** Event handlers. **/\n\n // Angular lifecycle hooks.\n\n ngOnInit() {\n this.placeholderView = this.placeholder;\n }\n\n ngAfterViewInit() {\n this.updateFilterWidth();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('options')) {\n this.updateOptionsList(changes['options'].isFirstChange());\n }\n if (changes.hasOwnProperty('noFilter')) {\n const numOptions: number = this.optionList.options.length;\n const minNumOptions: number = changes['noFilter'].currentValue;\n this.filterEnabled = numOptions >= minNumOptions;\n }\n }\n\n // Window.\n\n onWindowClick() {\n if (!this.selectContainerClicked) {\n this.closeDropdown();\n }\n this.clearClicked = false;\n this.selectContainerClicked = false;\n }\n\n onWindowResize() {\n this.updateWidth();\n }\n\n // Select container.\n\n onSelectContainerClick(event: any) {\n this.selectContainerClicked = true;\n if (!this.clearClicked) {\n this.toggleDropdown();\n }\n }\n\n onSelectContainerFocus() {\n this.onTouched();\n }\n\n onSelectContainerKeydown(event: any) {\n this.handleSelectContainerKeydown(event);\n }\n\n // Dropdown container.\n\n onDropdownOptionClicked(option: Option) {\n this.multiple ? this.toggleSelectOption(option) : this.selectOption(option);\n }\n\n onDropdownClose(focus: any) {\n this.closeDropdown(focus);\n }\n\n // Single filter input.\n\n onSingleFilterClick() {\n this.selectContainerClicked = true;\n }\n\n onSingleFilterInput(term: string) {\n setTimeout(() => {\n if (term.length > 2) {\n this.typed.emit(term);\n }\n }, 500);\n this.optionList.filter(term);\n }\n\n onSingleFilterKeydown(event: any) {\n this.handleSingleFilterKeydown(event);\n }\n\n // Multiple filter input.\n\n onMultipleFilterInput(event: any) {\n if (!this.isOpen) {\n this.openDropdown();\n }\n this.updateFilterWidth();\n setTimeout(() => {\n this.optionList.filter(event.target.value);\n });\n }\n\n onMultipleFilterKeydown(event: any) {\n this.handleMultipleFilterKeydown(event);\n }\n\n // Single clear select.\n\n onClearSelectionClick(event: any) {\n this.clearClicked = true;\n this.clearSelection();\n this.closeDropdown(true);\n }\n\n // Multiple deselect option.\n\n onDeselectOptionClick(option: Option) {\n this.clearClicked = true;\n this.deselectOption(option);\n }\n\n /** API. **/\n\n // TODO fix issues with global click/key handler that closes the dropdown.\n open() {\n this.openDropdown();\n }\n\n close() {\n this.closeDropdown();\n }\n\n clear() {\n this.clearSelection();\n }\n\n select(value: string) {\n this.optionList.getOptionsByValue(value).forEach((option) => {\n this.selectOption(option);\n });\n this.valueChanged();\n }\n\n /** ControlValueAccessor interface methods. **/\n\n writeValue(value: any) {\n this.value = value;\n }\n\n registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Value. **/\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this.multiple ? this._value : this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n\n if (!OptionList.equalValues(v, this._value)) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n private valueChanged() {\n this._value = this.optionList.value;\n\n this.hasSelected = this._value.length > 0;\n this.placeholderView = this.hasSelected ? '' : this.placeholder;\n this.updateFilterWidth();\n\n this.onChange(this.value);\n }\n\n /** Initialization. **/\n\n private updateOptionsList(firstTime: boolean) {\n let v: Array<string>;\n\n if (!firstTime) {\n v = this.optionList.value;\n }\n\n this.optionList = new OptionList(this.options);\n\n if (!firstTime) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n /** Dropdown. **/\n\n private toggleDropdown() {\n if (!this.isDisabled) {\n this.isOpen ? this.closeDropdown(true) : this.openDropdown();\n }\n }\n\n private openDropdown() {\n if (!this.isOpen) {\n this.updateWidth();\n this.updatePosition();\n this.isOpen = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n this.opened.emit(null);\n }\n }\n /* tslint:disable */\n private closeDropdown(focus: boolean = false) {\n if (this.isOpen) {\n this.clearFilterInput();\n this.isOpen = false;\n if (focus) {\n this.focus();\n }\n this.closed.emit(null);\n }\n }\n /* tslint:enable */\n /** Select. **/\n\n private selectOption(option: Option) {\n if (!option.selected) {\n this.optionList.select(option, this.multiple);\n this.valueChanged();\n this.selected.emit(option.undecoratedCopy());\n // Is this not allready done when setting the value??\n /*setTimeout(() => {\n if (this.multiple) {\n this.updateFilterWidth();\n }\n });*/\n }\n }\n\n private deselectOption(option: Option) {\n if (option.selected) {\n this.optionList.deselect(option);\n this.valueChanged();\n this.deselected.emit(option.undecoratedCopy());\n setTimeout(() => {\n if (this.multiple) {\n // this.updateFilterWidth();\n this.updatePosition();\n this.optionList.highlight();\n if (this.isOpen) {\n this.dropdown.moveHighlightedIntoView();\n }\n }\n });\n }\n }\n\n private clearSelection() {\n const selection: Array<Option> = this.optionList.selection;\n if (selection.length > 0) {\n this.optionList.clearSelection();\n this.valueChanged();\n\n if (selection.length === 1) {\n this.deselected.emit(selection[0].undecoratedCopy());\n } else {\n this.deselected.emit(\n selection.map((option) => {\n return option.undecoratedCopy();\n })\n );\n }\n }\n }\n\n private toggleSelectOption(option: Option) {\n option.selected ? this.deselectOption(option) : this.selectOption(option);\n }\n\n private selectHighlightedOption() {\n const option: Option = this.optionList.highlightedOption;\n if (option !== null) {\n this.selectOption(option);\n this.closeDropdown(true);\n }\n }\n\n private deselectLast() {\n const sel: Array<Option> = this.optionList.selection;\n\n if (sel.length > 0) {\n const option: Option = sel[sel.length - 1];\n this.deselectOption(option);\n this.setMultipleFilterInput(option.label + ' ');\n }\n }\n\n /** Filter. **/\n\n private clearFilterInput() {\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n } else {\n this.dropdown.clearFilterInput();\n }\n }\n\n private setMultipleFilterInput(value: string) {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = value;\n }\n }\n\n private handleSelectContainerKeydown(event: any) {\n const key = event.which;\n\n if (this.isOpen) {\n if (key === this.KEYS.ESC || (key === this.KEYS.UP && event.altKey)) {\n this.closeDropdown(true);\n } else if (key === this.KEYS.TAB) {\n this.closeDropdown();\n } else if (key === this.KEYS.ENTER) {\n this.selectHighlightedOption();\n } else if (key === this.KEYS.UP) {\n this.optionList.highlightPreviousOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n } else if (key === this.KEYS.DOWN) {\n this.optionList.highlightNextOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n }\n } else {\n if (\n key === this.KEYS.ENTER ||\n key === this.KEYS.SPACE ||\n (key === this.KEYS.DOWN && event.altKey)\n ) {\n /* FIREFOX HACK:\n *\n * The setTimeout is added to prevent the enter keydown event\n * to be triggered for the filter input field, which causes\n * the dropdown to be closed again.\n */\n setTimeout(() => {\n this.openDropdown();\n });\n }\n }\n }\n\n private handleMultipleFilterKeydown(event: any) {\n const key = event.which;\n\n if (key === this.KEYS.BACKSPACE) {\n if (\n this.hasSelected &&\n this.filterEnabled &&\n this.filterInput.nativeElement.value === ''\n ) {\n this.deselectLast();\n }\n }\n }\n\n private handleSingleFilterKeydown(event: any) {\n const key = event.which;\n\n if (\n key === this.KEYS.ESC ||\n key === this.KEYS.TAB ||\n key === this.KEYS.UP ||\n key === this.KEYS.DOWN ||\n key === this.KEYS.ENTER\n ) {\n this.handleSelectContainerKeydown(event);\n }\n }\n\n /** View. **/\n\n focus() {\n this.hasFocus = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n } else {\n this.selectionSpan.nativeElement.focus();\n }\n }\n\n blur() {\n this.hasFocus = false;\n this.selectionSpan.nativeElement.blur();\n }\n\n updateWidth() {\n this.width = this.selectionSpan.nativeElement.offsetWidth;\n }\n\n updatePosition() {\n const e = this.selectionSpan.nativeElement;\n this.left = e.offsetLeft;\n this.top = e.offsetTop + e.offsetHeight;\n }\n\n updateFilterWidth() {\n if (typeof this.filterInput !== 'undefined') {\n const value: string = this.filterInput.nativeElement.value;\n this.filterInputWidth =\n value.length === 0\n ? 1 + this.placeholderView.length * 10\n : 1 + value.length * 10;\n }\n }\n}\n","export const STYLE = `select-dropdown {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown > div {\n background-color: #fff;\n border: 1px solid #ccc;\n border-top: none;\n box-sizing: border-box;\n position: absolute;\n z-index: 1;\n}\nselect-dropdown > div .filter {\n padding: 3px;\n width: 100%;\n}\nselect-dropdown > div .filter input {\n border: 1px solid #eee;\n box-sizing: border-box;\n padding: 4px;\n width: 100%;\n}\nselect-dropdown > div .options {\n max-height: 200px;\n overflow-y: auto;\n}\nselect-dropdown > div .options ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\nselect-dropdown > div .options ul li {\n padding: 4px 8px;\n cursor: pointer;\n user-select: none;\n}\nselect-dropdown .selected {\n background-color: #e0e0e0;\n}\nselect-dropdown .selected.highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .disabled {\n background-color: #fff;\n color: #9e9e9e;\n cursor: default;\n pointer-events: none;\n}`;\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { STYLE } from './select-dropdown.component.style';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\n@Component({\n selector: 'select-dropdown',\n template: `<div [ngStyle]=\"{ 'top.px': top, 'left.px': left, 'width.px': width }\">\n <div class=\"filter\" *ngIf=\"!multiple\">\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n (click)=\"onSingleFilterClick($event)\"\n (input)=\"onSingleFilterInput($event)\"\n (keydown)=\"onSingleFilterKeydown($event)\"\n />\n </div>\n\n <div class=\"options\" #optionsList>\n <ul (wheel)=\"onOptionsWheel($event)\">\n <li\n *ngFor=\"let option of optionList.filtered\"\n [ngClass]=\"{\n highlighted: option.highlighted,\n selected: option.selected,\n disabled: option.disabled\n }\"\n [ngStyle]=\"getOptionStyle(option)\"\n (click)=\"onOptionClick(option)\"\n (mouseover)=\"onOptionMouseover(option)\"\n >\n {{ option.label }}\n </li>\n <li *ngIf=\"!optionList.hasShown()\" class=\"message\">\n {{ notFoundMsg }}\n </li>\n </ul>\n </div>\n</div>\n`,\n styles: [STYLE],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectDropdownComponent\n implements AfterViewInit, OnChanges, OnInit {\n @Input() filterEnabled: boolean;\n @Input() highlightColor: string;\n @Input() highlightTextColor: string;\n @Input() left: number;\n @Input() multiple: boolean;\n @Input() notFoundMsg: string;\n @Input() optionList: OptionList;\n @Input() top: number;\n @Input() width: number;\n\n @Output() close = new EventEmitter<boolean>();\n @Output() optionClicked = new EventEmitter<Option>();\n @Output() singleFilterClick = new EventEmitter<null>();\n @Output() singleFilterInput = new EventEmitter<string>();\n @Output() singleFilterKeydown = new EventEmitter<any>();\n\n @ViewChild('filterInput') filterInput: any;\n @ViewChild('optionsList') optionsList: any;\n\n disabledColor = '#fff';\n disabledTextColor = '9e9e9e';\n\n /** Event handlers. **/\n\n // Angular life cycle hooks.\n\n ngOnInit() {\n this.optionsReset();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('optionList')) {\n this.optionsReset();\n }\n }\n\n ngAfterViewInit() {\n this.moveHighlightedIntoView();\n if (!this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n }\n\n // Filter input (single select).\n\n onSingleFilterClick(event: any) {\n this.singleFilterClick.emit(null);\n }\n\n onSingleFilterInput(event: any) {\n this.singleFilterInput.emit(event.target.value);\n }\n\n onSingleFilterKeydown(event: any) {\n this.singleFilterKeydown.emit(event);\n }\n\n // Options list.\n\n onOptionsWheel(event: any) {\n this.handleOptionsWheel(event);\n }\n\n onOptionMouseover(option: Option) {\n this.optionList.highlightOption(option);\n }\n\n onOptionClick(option: Option) {\n this.optionClicked.emit(option);\n }\n\n /** Initialization. **/\n\n private optionsReset() {\n this.optionList.resetFilter();\n this.optionList.highlight();\n }\n\n /** View. **/\n\n getOptionStyle(option: Option): any {\n if (option.highlighted) {\n return {\n 'background-color': this.highlightColor,\n color: this.highlightTextColor\n };\n } else {\n return {};\n }\n }\n\n clearFilterInput() {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n }\n }\n\n moveHighlightedIntoView() {\n const list = this.optionsList.nativeElement;\n const listHeight = list.offsetHeight;\n\n const itemIndex = this.optionList.getHighlightedIndex();\n\n if (itemIndex > -1) {\n const item = list.children[0].children[itemIndex];\n const itemHeight = item.offsetHeight;\n\n const itemTop = itemIndex * itemHeight;\n const itemBottom = itemTop + itemHeight;\n\n const viewTop = list.scrollTop;\n const viewBottom = viewTop + listHeight;\n\n if (itemBottom > viewBottom) {\n list.scrollTop = itemBottom - listHeight;\n } else if (itemTop < viewTop) {\n list.scrollTop = itemTop;\n }\n }\n }\n\n private handleOptionsWheel(e: any) {\n const div = this.optionsList.nativeElement;\n const atTop = div.scrollTop === 0;\n const atBottom = div.offsetHeight + div.scrollTop === div.scrollHeight;\n\n if (atTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (atBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { SelectComponent } from './select.component';\nimport { SelectDropdownComponent } from './select-dropdown.component';\n\n@NgModule({\n declarations: [SelectComponent, SelectDropdownComponent],\n exports: [SelectComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class SelectModule {}\n","import {\n Pipe,\n PipeTransform,\n OnDestroy,\n WrappedValue,\n ChangeDetectorRef\n} from '@angular/core';\nimport { of } from 'rxjs';\n\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DomSanitizer } from '@angular/platform-browser';\n// import { FileUploadResourceService } from '../../etl-api/file-upload-resource.service';\n\n// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML.\n// tslint:disable-next-line:use-pipe-transform-interface\n@Pipe({\n name: 'secure',\n pure: false\n})\nexport class SecurePipe implements PipeTransform, OnDestroy {\n private _latestValue: any = null;\n private _latestReturnedValue: any = null;\n private _subscription: Subscription = null;\n private _obj: Observable<any> = null;\n private getfile;\n private previousUrl: string;\n private _result: BehaviorSubject<any> = new BehaviorSubject(null);\n private result: Observable<any> = this._result.asObservable();\n private _internalSubscription: Subscription = null;\n\n constructor(\n private _ref: ChangeDetectorRef,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._dispose();\n }\n }\n\n transform(url: string, getfile): any {\n this.getfile = getfile;\n const obj = this.internalTransform(url);\n return this.asyncTrasnform(obj);\n }\n\n private internalTransform(url: string): Observable<any> {\n if (!url) {\n return this.result;\n }\n\n if (this.previousUrl !== url) {\n this.previousUrl = url;\n this._internalSubscription = this.getfile(url).subscribe((m) => {\n const sanitized = this.sanitizer.bypassSecurityTrustUrl(m);\n this._result.next(sanitized);\n });\n }\n\n return this.result;\n }\n\n private asyncTrasnform(obj: Observable<any>): any {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.asyncTrasnform(obj);\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n\n private _subscribe(obj: Observable<any>) {\n const _this = this;\n this._obj = obj;\n\n this._subscription = obj.subscribe({\n next: function (value) {\n return _this._updateLatestValue(obj, value);\n },\n error: (e: any) => {\n throw e;\n }\n });\n }\n\n private _dispose() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n if (this._internalSubscription) {\n this._internalSubscription.unsubscribe();\n }\n\n this._internalSubscription = null;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n\n private _updateLatestValue(async: any, value: Object) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurePipe } from './components/file-upload/secure.pipe';\nimport { DataSources } from './form-entry/data-sources/data-sources';\n@NgModule({\n declarations: [SecurePipe],\n imports: [CommonModule],\n exports: [SecurePipe],\n providers: [DataSources]\n})\nexport class SharedModule {}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n Renderer2,\n ChangeDetectorRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport { SecurePipe } from './secure.pipe';\n@Component({\n selector: 'app-file-upload',\n template: `<lib-file-uploader\n [srcUrl]=\"pdfUrl\"\n [formEntry]=\"formEntryMode\"\n [(ngModel)]=\"fileUuid\"\n (_onClear)=\"clearValue()\"\n (uploadData)=\"onFileChange($event)\"\n>\n</lib-file-uploader>\n<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!pdfUploaded\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this.dataSource.fetchFile\"\n alt=\"\"\n />\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true\n }\n ],\n styles: [\n `\n img {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n `\n ]\n})\nexport class FileUploadComponent implements OnInit, ControlValueAccessor {\n uploading = false;\n fileUuid = null;\n pdfUploaded = false;\n formEntryMode = true;\n pdfUrl: string;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.fileUuid) {\n this.checkFileType();\n }\n }\n public onFileChange(fileList) {\n for (const file of fileList) {\n this.upload(file);\n }\n }\n upload(data) {\n if (this.dataSource) {\n this.uploading = true;\n this.dataSource.fileUpload(data).subscribe(\n (result) => {\n this.fileUuid = result.image;\n this.checkFileType();\n this.propagateChange(this.fileUuid);\n this.uploading = false;\n },\n (error) => {\n this.uploading = false;\n }\n );\n }\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value !== this.fileUuid) {\n this.fileUuid = value;\n this.checkFileType();\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (_: any) => {};\n\n public clearValue() {\n this.fileUuid = null;\n this.pdfUploaded = false;\n this.pdfUrl = null;\n this.propagateChange(this.fileUuid);\n }\n\n public getPdfUrl(fileUuid: string) {\n this.dataSource.fetchFile(fileUuid, 'pdf').subscribe((file) => {\n this.pdfUploaded = true;\n this.pdfUrl = file.changingThisBreaksApplicationSecurity;\n });\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.getPdfUrl(this.fileUuid);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgxFileUploaderModule } from 'ngx-file-uploader';\n\nimport { SharedModule } from '../../shared.module';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { FileUploadComponent } from './file-upload.component';\nimport { WebcamModule } from 'ngx-webcam';\n\n@NgModule({\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n SharedModule,\n WebcamModule,\n NgxFileUploaderModule\n ],\n exports: [FileUploadComponent],\n declarations: [FileUploadComponent],\n providers: []\n})\nexport class RemoteFileUploadModule {}\n","/**\n * date-picker.component\n */\n\nimport { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport * as _ from 'lodash';\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./date-picker.component.css');\n// const myDpTpl: string = require('./date-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'date-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelDatePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">\n <div class=\"picker-header-nav\">\n <span class=\"nav-prev\" (click)=\"prev()\"></span>\n </div>\n <div class=\"picker-header-content\">\n <div class=\"content\">\n <span (click)=\"showMonthSelection()\" class=\"month\">{{\n calendarDate | moment: 'MMMM'\n }}</span>\n <span class=\"seperator\">|</span>\n <span (click)=\"showYearSelection()\" class=\"year\">{{\n calendarDate | moment: 'YYYY'\n }}</span>\n </div>\n </div>\n <div class=\"picker-header-nav\">\n <span class=\"nav-next\" (click)=\"next()\"></span>\n </div>\n </div>\n <div class=\"picker-calendar\">\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span class=\"picker-weekday\" *ngFor=\"let day of dayNames\">{{\n day\n }}</span>\n </div>\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span\n class=\"picker-day\"\n (click)=\"selectDay(day)\"\n [ngClass]=\"{\n 'out-focus': day.month() != calendarDate.month(),\n today: day.isSame(today),\n selected: day.isSame(selectedDate)\n }\"\n *ngFor=\"let day of calendarDays\"\n >\n {{ day | moment: 'D' }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayMonths\">\n <span\n class=\"picker-month\"\n *ngFor=\"let month of monthsShort\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{\n selected: month === currentMonth\n }\"\n >\n {{ month }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayYears\">\n <span\n class=\"picker-year\"\n *ngFor=\"let year of displayYearRange\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{\n selected: year === currentYear\n }\"\n >\n {{ year }}\n </span>\n </div>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-today\" (click)=\"selectToday()\">\n <span class=\"text\">Today</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearPickDate()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelDatePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:666px}.picker-box{font-family:'Open Sans';min-width:400px!important;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;display:flex;height:2.5rem;width:100%}.picker-header-nav{position:relative;cursor:pointer;width:calc(100% / 8)}.picker-header-nav>*{position:absolute;top:50%;right:auto;bottom:auto;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.picker-header-nav .nav-next::before,.picker-header-nav .nav-prev::before{content:' ';border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker-header-nav .nav-next::before{border-right:0;border-left:.75em solid #000}.picker-header-content{width:calc(100% * 6 / 8);text-align:center}.picker-header-content .month{font-size:1.778rem;line-height:2.5rem;margin-right:.5rem;font-weight:700}.picker-header-content .year{font-style:italic;color:#999}.picker-calendar{width:100%}.picker-calendar .picker-calendar-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.625rem}.picker-calendar .picker-weekday{font-weight:700;text-align:left;color:#999;width:calc(100% / 7)}.picker-calendar .picker-day,.picker-calendar .picker-month,.picker-calendar .picker-year{font-size:1.333rem;line-height:2.5rem;position:relative;height:2.5rem;text-align:center;cursor:pointer;width:calc(100% / 7)}.picker-calendar .picker-day:hover,.picker-calendar .picker-month:hover,.picker-calendar .picker-year:hover{background:#b1dcfb}.picker-calendar .out-focus{color:#ddd}.picker-calendar .out-focus:hover{color:#000}.picker-calendar .selected{background:#0089ec;color:#fff}.picker-calendar .selected:hover{background:#0089ec}.picker-calendar .today::before{content:' ';position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker-footer{cursor:pointer}.picker-footer .picker-action{text-align:center;width:calc(100% / 3)}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-today::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-today::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class DatePickerComponent implements OnInit {\n public dayNames: Array<string>;\n\n @Input() public initDate: any;\n @Input() public locale = 'en';\n @Input() public viewFormat = 'll';\n @Input() public returnObject = 'js';\n @Output() public onDatePickerCancel = new EventEmitter<boolean>();\n @Output() public onSelectDate = new EventEmitter<any>();\n\n public calendarDate: Moment;\n public selectedDate: Moment;\n public currentMonth: any;\n public today: Moment;\n public currentYear: number;\n public onDisplayMonths = false;\n public onDisplayYears = false;\n public displayYearsIndex = 0;\n public displayYearRange: Array<number>;\n public fullYearRange: Array<any>;\n public monthsShort: Array<string> = moment.monthsShort();\n public calendarDays: Array<Moment>;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.initValue();\n // default to current year range\n _.each(this.fullYearRange, (v, i) => {\n this.currentYear = this.calendarDate.clone().startOf('year').year();\n if (v.indexOf(this.currentYear) !== -1) {\n this.displayYearsIndex = i;\n }\n });\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n this.generateCalendar();\n }\n\n public prev(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex--;\n if (this.displayYearsIndex < 0) {\n this.displayYearsIndex = 0;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n } else {\n this.calendarDate = this.calendarDate.clone().subtract(1, 'M');\n }\n this.generateCalendar();\n }\n\n public showMonthSelection(): void {\n this.onDisplayMonths = true;\n this.onDisplayYears = false;\n }\n\n public showYearSelection(): void {\n this.onDisplayYears = true;\n this.onDisplayMonths = false;\n }\n\n public next(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex++;\n if (this.displayYearsIndex >= this.fullYearRange.length) {\n this.displayYearsIndex = this.fullYearRange.length - 1;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex++];\n } else {\n this.calendarDate = this.calendarDate.clone().add(1, 'M');\n }\n this.generateCalendar();\n }\n\n public selectDay(day: Moment): void {\n const daysDifference = day.diff(\n this.calendarDate.clone().startOf('date'),\n 'days'\n );\n day = this.calendarDate.clone().add(daysDifference, 'd');\n const selectedDay = this.parseToReturnObjectType(day);\n this.onSelectDate.emit(selectedDay);\n this.cancelDatePicker();\n return;\n }\n\n public selectMonth(month: string) {\n this.calendarDate = this.calendarDate.clone().month(month);\n this.onDisplayMonths = false;\n this.generateCalendar();\n }\n\n public selectYear(year: number) {\n this.calendarDate = this.calendarDate.clone().year(year);\n this.onDisplayYears = false;\n this.generateCalendar();\n }\n\n public selectToday(): void {\n const today = this.parseToReturnObjectType(moment());\n this.onSelectDate.emit(today);\n this.cancelDatePicker();\n return;\n }\n\n public clearPickDate(): void {\n this.onSelectDate.emit(null);\n this.cancelDatePicker();\n return;\n }\n\n public cancelDatePicker(): void {\n this.onDatePickerCancel.emit(false);\n return;\n }\n\n protected generateYears(): void {\n const currentYear = moment().year();\n const startYr = this.calendarDate.clone().subtract(100, 'y').year();\n // const endYr = this.calendarDate.clone().add(10, 'y').year();\n const years = [];\n for (let year = startYr; year <= currentYear; year++) {\n years.push(year);\n }\n\n this.fullYearRange = _.chunk(years, 14);\n }\n\n protected initValue() {\n // set moment locale (default is en)\n moment.locale(this.locale);\n // set today value\n this.today = moment().startOf('date');\n this.currentMonth = this.monthsShort[moment().month()];\n this.currentYear = moment().year();\n\n // set week days name array\n this.dayNames = moment.weekdaysShort(true);\n\n // check if the input initDate has value\n if (this.initDate) {\n this.calendarDate =\n this.returnObject === 'string'\n ? moment(this.initDate, this.viewFormat)\n : moment(this.initDate);\n this.selectedDate = this.calendarDate.clone().startOf('date');\n } else {\n this.calendarDate = moment();\n }\n this.generateYears();\n }\n\n protected generateCalendar(): void {\n this.calendarDays = [];\n const start =\n 0 -\n ((this.calendarDate.clone().startOf('month').day() +\n (7 - moment.localeData().firstDayOfWeek())) %\n 7);\n const end = 41 + start; // iterator ending point\n\n for (let i = start; i <= end; i += 1) {\n const day = this.calendarDate.clone().startOf('month').add(i, 'days');\n this.calendarDays.push(day);\n }\n }\n\n protected parseToReturnObjectType(day: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return day.toDate();\n\n case 'string':\n return day.format(this.viewFormat);\n\n case 'moment':\n return day;\n\n case 'json':\n return day.toJSON();\n\n case 'array':\n return day.toArray();\n\n case 'iso':\n return day.toISOString();\n\n case 'object':\n return day.toObject();\n\n default:\n return day;\n }\n }\n}\n","/**\n * time-picker.component\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./time-picker.component.css');\n// const myDpTpl: string = require('./time-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'time-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelTimePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">Time Picker</div>\n <div class=\"picker-table\">\n <ul class=\"picker-table-time\">\n <li class=\"picker-table-number hour\">\n <span class=\"arrow up\" (click)=\"increaseHour()\"></span>\n {{ time | moment: hourFormat }}\n <span class=\"arrow down\" (click)=\"decreaseHour()\"></span>\n </li>\n <li class=\"picker-table-separator\">:</li>\n <li class=\"picker-table-number minute\">\n <span class=\"arrow up\" (click)=\"increaseMinute()\"></span>\n {{ time | moment: 'mm' }}\n <span class=\"arrow down\" (click)=\"decreaseMinute()\"></span>\n </li>\n <li *ngIf=\"showSecond\" class=\"picker-table-separator\">:</li>\n <li *ngIf=\"showSecond\" class=\"picker-table-number second\">\n <span class=\"arrow up\" (click)=\"increaseSecond()\"></span>\n {{ time | moment: 'ss' }}\n <span class=\"arrow down\" (click)=\"decreaseSecond()\"></span>\n </li>\n <li *ngIf=\"use12Hour\" class=\"picker-table-meridiem meridiem\">\n {{ time | moment: 'A' }}\n </li>\n </ul>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-now\" (click)=\"selectNow()\">\n <span class=\"text\">Now</span>\n </div>\n <div class=\"picker-action action-confirm\" (click)=\"selectTime()\">\n <span class=\"text\">Confirm</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearTime()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelTimePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:40rem;font-family:'Open Sans'}.picker-box{width:100%;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;height:2.5rem;width:100%}.picker-header{text-align:center}.picker-table{width:100%;margin:2.5rem 0}.picker-table-time{font-size:2.37rem;line-height:2.5rem;list-style:none;margin:0;padding:0;display:flex;justify-content:center;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-table-meridiem,.picker-table-number,.picker-table-separator{text-align:center}.picker-table-meridiem,.picker-table-number{position:relative;width:20%}.arrow{position:absolute;left:50%;border:solid #777;border-width:0 .2rem .2rem 0;display:inline-block;padding:.25rem;cursor:pointer}.arrow.up{top:-1rem;-webkit-transform:translateX(-50%) rotate(-135deg);transform:translateX(-50%) rotate(-135deg)}.arrow.down{bottom:-1rem;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.arrow:hover{border-color:#1975d2}.picker-table-separator{width:calc(20% / 3)}.picker-footer{display:flex;justify-content:center;width:100%;cursor:pointer}.picker-footer .picker-action{width:25%;text-align:center}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-confirm::before,.picker-footer .action-now::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-now::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-confirm::before{width:1rem;height:1rem;border-radius:100%;background-color:#00b5ad}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class TimePickerComponent implements OnInit {\n @Input() initTime: any;\n @Input() showSecond = true;\n @Input() viewFormat = 'hh:mm A';\n @Input() use12Hour = false;\n @Input() returnObject = 'js';\n @Output() onSelectTime = new EventEmitter<any>();\n @Output() onTimePickerCancel = new EventEmitter<boolean>();\n hourFormat = 'HH';\n public time: Moment;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.use12Hour) {\n this.hourFormat = 'hh';\n }\n this.time = this.initTime\n ? moment(this.initTime, this.viewFormat)\n : moment();\n\n // check if the input initDate has value\n if (this.initTime) {\n this.time =\n this.returnObject === 'string'\n ? moment(this.initTime, this.viewFormat)\n : moment(this.initTime);\n } else {\n this.time = moment();\n }\n }\n\n increaseHour(): void {\n this.time = this.time.clone().add(1, 'h');\n }\n\n decreaseHour(): void {\n this.time = this.time.clone().subtract(1, 'h');\n }\n\n increaseMinute() {\n this.time = this.time.clone().add(1, 'm');\n }\n\n decreaseMinute() {\n this.time = this.time.clone().subtract(1, 'm');\n }\n\n increaseSecond(): void {\n this.time = this.time.clone().add(1, 's');\n }\n\n decreaseSecond(): void {\n this.time = this.time.clone().subtract(1, 's');\n }\n\n selectTime(): void {\n const selectTime = this.parseToReturnObjectType(this.time);\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n selectNow(): void {\n const selectTime = this.parseToReturnObjectType(moment());\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n clearTime(): void {\n this.onSelectTime.emit(null);\n this.cancelTimePicker();\n return;\n }\n\n cancelTimePicker(): void {\n this.onTimePickerCancel.emit(false);\n return;\n }\n\n protected parseToReturnObjectType(time: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return time.toDate();\n\n case 'string':\n return time.format(this.viewFormat);\n\n case 'moment':\n return time;\n\n case 'json':\n return time.toJSON();\n\n case 'array':\n return time.toArray();\n\n case 'iso':\n return time.toISOString();\n\n case 'object':\n return time.toObject();\n\n default:\n return time;\n }\n }\n}\n","/**\n * modal.component\n */\n\nimport {\n Component,\n Output,\n OnInit,\n EventEmitter,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./modal.component.css');\n// const myDpTpl: string = require('./modal.component.html');\n// webpack2_\n\n@Component({\n selector: 'picker-modal',\n template: `<section class=\"x-modal\">\n <section class=\"modal-overlay\" (click)=\"closeModal()\"></section>\n <section class=\"modal-main\" id=\"section-modal-main\">\n <ng-content></ng-content>\n </section>\n</section>\n`,\n styles: [`:host{z-index:9999999999}*,::after,::before{box-sizing:border-box}.modal-main{position:absolute;left:19.6%;right:auto;top:auto;z-index:111;background-color:#fff;border:1px solid #d7dad7;border-radius:6px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);box-shadow:0 5px 15px rgba(0,0,0,.3)}`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: []\n})\nexport class ModalComponent implements OnInit {\n @Output() onOverlayClick = new EventEmitter<boolean>();\n\n constructor() {}\n\n ngOnInit() {}\n\n closeModal() {\n this.onOverlayClick.emit(false);\n }\n}\n","/**\n * moment.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Moment } from 'moment/moment';\n\n@Pipe({ name: 'moment' })\nexport class MomentPipe implements PipeTransform {\n transform(moment: Moment, format?: string): string {\n return format ? moment.format(format) : moment.format('MMM DD, YYYY');\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\n\nconst Moment = moment_;\n\n@Component({\n selector: 'date-time-picker',\n template: `<div class=\"row\">\n <div *ngIf=\"!showTime\" class=\"col-xs-12 col-md-12\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-8 col-md-8\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-4 col-md-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n </div>\n</div>\n<date-picker\n *ngIf=\"showDatePicker\"\n [initDate]=\"value\"\n (onSelectDate)=\"setDate($event)\"\n (onDatePickerCancel)=\"toggleDatePicker($event)\"\n></date-picker>\n\n<time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"setTime($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n></time-picker>\n`,\n styles: [`input[readonly]{background-color:#fff}.up{bottom:100%!important;top:auto!important}.glyphicon{top:1px}`],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor {\n @Input() modelValue: any;\n @Input() showDate = true;\n @Input() showTime = false;\n @Input() showWeeks = false;\n @Input() weeks: number[] = [2, 4, 6, 8, 12, 16, 24];\n @Output() onDateChange = new EventEmitter<any>();\n public showDatePicker = false;\n public showTimePicker = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor() {}\n\n ngOnInit() {}\n\n weeksSelected(count) {\n const now = new Date();\n const nextDate = now.setDate(now.getDate() + count * 7);\n this.value = Moment(nextDate).format();\n }\n setDate(date: any): void {\n if (date && date !== '') {\n this.value = Moment(date).format();\n } else {\n this.value = date;\n }\n }\n\n setTime(time: any): void {\n if (time && time !== '') {\n this.value = Moment(time).format();\n } else {\n this.value = time;\n }\n return;\n }\n\n toggleDatePicker(status: boolean): void {\n this.showDatePicker = status;\n /*setTimeout(function() {\n let _body = document.getElementById('content-wrapper').getBoundingClientRect(),\n elem = document.getElementById('section-modal-main');\n if (elem) {\n let elemBox = elem.getBoundingClientRect();\n if (elemBox.bottom > _body.bottom) {\n elem.style.bottom = '36px';\n }\n }\n }, 0);*/\n return;\n }\n\n toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n get value() {\n return this.modelValue;\n }\n\n set value(val) {\n this.modelValue = val;\n this.onDateChange.emit(val);\n this.onChange(val);\n this.onTouched();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n writeValue(value) {\n if (value instanceof Date) {\n this.value = Moment(value).format();\n } else {\n this.value = value;\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { TimePickerComponent } from './time-picker/time-picker.component';\nimport { ModalComponent } from './picker-modal/modal.component';\nimport { MomentPipe } from './pipes/moment.pipe';\nimport { DateTimePickerComponent } from './date-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n exports: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n providers: []\n})\nexport class DateTimePickerModule {}\n","import { Moment } from 'moment/moment';\n\nimport {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormControl\n} from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'LL'\n },\n display: {\n dateInput: 'LL',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY'\n }\n};\n\n@Component({\n selector: 'ngx-date-time-picker',\n template: `<div>\n <div class=\"row\">\n <div [class]=\"getDatePickerCssClass()\">\n <div class=\"input-group\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n class=\"form-control\"\n [value]=\"value\"\n placeholder=\"Choose a date\"\n (dateChange)=\"onDateSelect($event)\"\n (click)=\"picker.open()\"\n readonly\n />\n <mat-datepicker #picker disabled=\"false\"></mat-datepicker>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n class=\"input-group-btn\"\n ></mat-datepicker-toggle>\n </div>\n </div>\n <div [class]=\"getWeekPickerCssClass()\" *ngIf=\"showWeeks\">\n <mat-select\n placeholder=\"Select Weeks\"\n class=\"form-control\"\n name=\"weeks\"\n (selectionChange)=\"weekSelect($event)\"\n >\n <mat-option *ngFor=\"let count of weeks\" [value]=\"count\">\n {{ count }} Weeks\n </mat-option>\n </mat-select>\n </div>\n <div [class]=\"getTimePickerCssClass()\" *ngIf=\"showTime\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n <time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"onTimeSelect($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n ></time-picker>\n </div>\n </div>\n</div>\n`,\n styles: [`#time-section{display:inline-block}#ngx-atp-time-picker,#ngx-mat-form-field{width:100%}.up{bottom:100%!important;top:auto!important}.time-btn{margin-top:-20px}`],\n providers: [\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n { provide: DateAdapter, useClass: MomentDateAdapter },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class NgxDateTimePickerComponent\n implements OnInit, ControlValueAccessor {\n // public date = new FormControl(moment());\n public selectedTime = moment().format();\n public selectedDate = moment().format();\n public loadInitial = false;\n public value;\n public showTimePicker = false;\n @Input() weeks: number[] = [0, 2, 4, 6, 8, 12, 16, 24];\n @Input() modelValue: any;\n @Input() showTime = false;\n @Input() showWeeks = true;\n @Output() onDateChange = new EventEmitter<any>();\n public onChange: any = () => {};\n public onTouched: any = () => {};\n public ngOnInit() {}\n\n public writeValue(value) {\n this.value = value;\n }\n\n public registerOnChange(fn) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn) {}\n\n public onTimeSelect($event) {\n const setDate = moment(this.selectedDate);\n const setTime = $event;\n this.setDateTime(setDate, setTime);\n }\n\n public onDateSelect($event) {\n const setDate = moment($event.value);\n const setTime = this.selectedTime;\n const dateString = this.setDateTime(setDate, setTime);\n\n const selectedDate = $event.value;\n this.value = dateString;\n }\n\n public toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n\n public setCurrentTime() {\n const setDate = moment(this.selectedDate);\n const currentTime = moment().format('HH:mm:ss');\n this.setDateTime(setDate, currentTime);\n }\n\n public weekSelect($event) {\n const dateToUse = moment().format();\n const nextWeekDate = moment(dateToUse).add($event.value, 'weeks');\n const nextWeekTime = dateToUse;\n this.setDateTime(nextWeekDate, nextWeekTime);\n }\n\n public selectionChange($event) {\n console.log('Week selected', $event);\n }\n\n public getWeekPickerCssClass() {\n if (this.showTime) {\n return 'col-sm-2 form-group';\n }\n return 'col-sm-3 form-group';\n }\n\n public getDatePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n\n if (this.showTime === true) {\n return 'col-sm-8 form-group';\n }\n return 'col-sm-12 form-group';\n }\n\n public getTimePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n return 'col-sm-4 form-group';\n }\n\n public setDateTime(setDate, setTime) {\n const newDate = moment(setDate).format('DD-MM-YYYY');\n let newTime;\n if (this.showTime) {\n newTime = moment(setTime).format('HH:mm:ss');\n } else {\n newTime = '00:00:00';\n }\n const newDateTime = moment(newDate + '' + newTime, 'DD-MM-YYYY HH:mm:ss');\n const dateTimeString = moment(newDateTime).format();\n this.selectedDate = dateTimeString;\n this.selectedTime = dateTimeString;\n this.value = dateTimeString;\n this.onChange(this.value);\n\n return dateTimeString;\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatNativeDateModule, MatInputModule } from '@angular/material';\nimport { NgxDateTimePickerComponent } from './ngx-date-time-picker.component';\n// import { AmazingTimePickerModule } from 'amazing-time-picker';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n DateTimePickerModule,\n // AmazingTimePickerModule,\n MatSelectModule\n ],\n declarations: [NgxDateTimePickerComponent],\n exports: [\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n NgxDateTimePickerComponent\n ],\n providers: []\n})\nexport class NgxDateTimePickerModule {}\n","import { SelectOption } from './interfaces/select-option';\nexport class Option {\n label: string;\n value: any;\n constructor(options: SelectOption) {\n this.label = options.label;\n this.value = options.value;\n }\n}\n","import { Component, Input, forwardRef, OnInit, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { Option } from '../form-entry/question-models/select-option';\n\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\n@Component({\n selector: 'afe-ng-select',\n template: `<ng-select\n (searchInputText)=\"getChangingText($event)\"\n (ngModelChange)=\"onValueChange($event)\"\n [options]=\"question_options\"\n [multiple]=\"multiple\"\n >\n </ng-select> `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfeNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class AfeNgSelectComponent\n implements ControlValueAccessor, OnInit, OnChanges {\n subject: BehaviorSubject<Option[]>;\n subjectOption: BehaviorSubject<Option>;\n @Input() dataSource: DataSource;\n @Input() multiple: boolean;\n @Input() extras: any;\n question_options: any = [];\n selected_question_option: any;\n errors: any = [];\n propagateChange = (_: any) => {};\n\n getChangingText(event) {\n // console.log(event);\n this.getData(event).subscribe((options) => {\n this.question_options = options;\n });\n }\n\n writeValue(obj: any): void {}\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n ngOnChanges(changes: any) {}\n\n ngOnInit() {\n if (this.extras) {\n if (this.extras.originalValue) {\n this.resolveSelectedOption(this.extras.originalValue).subscribe(\n (option) => {\n this.selected_question_option = option;\n }\n );\n }\n }\n }\n\n getData(searchText: string): Observable<Option[]> {\n this.subject = new BehaviorSubject<Option[]>([]);\n\n const OptionsObservable = this.dataSource.searchOptions(searchText);\n\n OptionsObservable.subscribe(\n (options) => {\n // console.log('options', options);\n const mappedOptions: Option[] = new Array<Option>();\n\n for (let i = 0; i < options.length; i++) {\n mappedOptions.push(new Option(options[i]));\n }\n this.subject.next(mappedOptions);\n },\n (error) => {\n this.subject.error(error);\n }\n );\n\n return this.subject.asObservable();\n }\n\n onValueChange(event) {}\n resolveSelectedOption(value: any): Observable<Option> {\n this.subjectOption = new BehaviorSubject<Option>(null);\n const OptionObservable = this.dataSource.resolveSelectedValue(value);\n\n OptionObservable.subscribe(\n (option) => {\n // console.log('option', option);\n this.subjectOption.next(option);\n },\n (error) => {\n this.subjectOption.error(error);\n }\n );\n\n return this.subjectOption.asObservable();\n }\n\n resetOptions() {\n this.subject.next(new Array<Option>());\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FormSchemaCompiler {\n constructor() {}\n\n public compileFormSchema(\n formSchema: Object,\n referencedComponents: Array<any>\n ): Object {\n // get all referenced forms\n const refForms: Object = this.getReferencedForms(\n formSchema,\n referencedComponents\n );\n if (_.isEmpty(refForms)) {\n return formSchema;\n }\n\n // get all place-holders from the form schema\n const placeHolders = this.getAllPlaceholderObjects(formSchema);\n if (_.isEmpty(placeHolders)) {\n return formSchema;\n }\n\n // replace all placeHolders\n this.replaceAllPlaceholdersWithActualObjects(refForms, placeHolders);\n return formSchema;\n }\n\n private findSchemaByName(\n schemaArray: Array<any>,\n nameOfSchema: string\n ): Object {\n if (_.isEmpty(schemaArray) || _.isEmpty(nameOfSchema)) {\n return;\n }\n let foundSchema: any = {};\n _.each(schemaArray, (schema: any) => {\n if (schema.name === nameOfSchema) {\n foundSchema = schema;\n }\n });\n return foundSchema;\n }\n\n private getPageInSchemaByLabel(schema: any, pageLabel: string): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel)) {\n return;\n }\n let foundPage: Object = {};\n _.each(schema.pages, (page) => {\n if (page.label === pageLabel) {\n foundPage = page;\n }\n });\n return foundPage;\n }\n\n private getSectionInSchemaByPageLabelBySectionLabel(\n schema: Object,\n pageLabel: string,\n sectionLabel: string\n ): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel) || _.isEmpty(sectionLabel)) {\n return;\n }\n const foundPage: any = this.getPageInSchemaByLabel(schema, pageLabel);\n if (_.isEmpty(foundPage)) {\n return;\n }\n let foundSection: Object = {};\n _.each(foundPage.sections, (section) => {\n if (section.label === sectionLabel) {\n foundSection = section;\n }\n });\n return foundSection;\n }\n\n private getQuestionByIdInSchema(schema: any, questionId: string): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n if (Array.isArray(schema)) {\n let question: Array<any>;\n for (let i = 0; i < schema.length; i++) {\n if (!_.isEmpty(schema[i])) {\n question = this.getQuestionByIdInSchema(schema[i], questionId);\n }\n if (!_.isEmpty(question)) {\n break;\n }\n }\n return question;\n } else if (typeof schema === 'object') {\n if (this.isQuestionObjectWithId(schema, questionId)) {\n return schema;\n } else if (this.isSchemaSubObjectExpandable(schema)) {\n const toExpand = schema.pages || schema.sections || schema.questions;\n return this.getQuestionByIdInSchema(toExpand, questionId);\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n private getQuestionsArrayByQuestionIdInSchema(\n schema: any,\n questionId: string\n ): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n return this.getQuestionsArrayByQuestionId(schema, schema, questionId);\n }\n\n private getQuestionsArrayByQuestionId(\n parent: any,\n object: any,\n questionId: string\n ): Array<any> {\n if (Array.isArray(object)) {\n let returnedValue: Array<any>;\n for (let i = 0; i < object.length; i++) {\n if (!_.isEmpty(object[i])) {\n returnedValue = this.getQuestionsArrayByQuestionId(\n object,\n object[i],\n questionId\n );\n }\n if (!_.isEmpty(returnedValue)) {\n break;\n }\n }\n\n return returnedValue;\n } else if (typeof object === 'object') {\n if (this.isQuestionObjectWithId(object, questionId)) {\n return parent;\n } else if (this.isSchemaSubObjectExpandable(object)) {\n const toExpand = object.pages || object.sections || object.questions;\n return this.getQuestionsArrayByQuestionId(\n toExpand,\n toExpand,\n questionId\n );\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n // object is page or section or question\n private isSchemaSubObjectExpandable(object: Object): Boolean {\n if (typeof object === 'object') {\n const objectKeys = Object.keys(object);\n if (\n _.includes(objectKeys, 'pages') ||\n _.includes(objectKeys, 'sections') ||\n _.includes(objectKeys, 'questions')\n ) {\n return true;\n }\n }\n return false;\n }\n\n private isQuestionObjectWithId(object: Object, id: any): Boolean {\n return object['id'] === id;\n }\n\n private getAllPlaceholderObjects(schema: Object): Array<any> {\n const referencedObjects: Array<any> = [];\n this.extractPlaceholderObjects(schema, referencedObjects);\n return referencedObjects;\n }\n\n private extractPlaceholderObjects(\n subSchema: any,\n objectsArray: Array<Object>\n ): void {\n if (_.isEmpty(subSchema)) {\n return;\n }\n if (Array.isArray(subSchema)) {\n for (let i = 0; i < subSchema.length; i++) {\n if (!_.isEmpty(subSchema[i])) {\n this.extractPlaceholderObjects(subSchema[i], objectsArray);\n }\n }\n } else if (typeof subSchema === 'object') {\n if (!_.isEmpty(subSchema.reference)) {\n objectsArray.push(subSchema);\n } else if (this.isSchemaSubObjectExpandable(subSchema)) {\n const toExpand =\n subSchema.pages || subSchema.sections || subSchema.questions;\n this.extractPlaceholderObjects(toExpand, objectsArray);\n }\n }\n }\n\n private fillPlaceholderObject(\n placeHolderObject: Object,\n referenceObject: Object\n ): Object {\n for (const member in referenceObject) {\n if (_.isEmpty(placeHolderObject[member])) {\n placeHolderObject[member] = referenceObject[member];\n }\n }\n return placeHolderObject;\n }\n\n private replaceAllPlaceholdersWithActualObjects(\n keyValReferencedForms: Object,\n placeHoldersArray: Array<any>\n ): Array<any> {\n _.each(placeHoldersArray, (placeHolder) => {\n const referencedObject: Object = this.getReferencedObject(\n placeHolder.reference,\n keyValReferencedForms\n );\n\n if (_.isEmpty(referencedObject)) {\n console.error(\n 'Form compile: Error finding referenced object',\n placeHolder.reference\n );\n } else {\n placeHolder = this.fillPlaceholderObject(placeHolder, referencedObject);\n placeHolder = this.removeExcludedQuestionsFromPlaceholder(placeHolder);\n delete placeHolder['reference'];\n }\n });\n return placeHoldersArray;\n }\n\n private removeObjectFromArray(array: Array<any>, object: Object): void {\n const indexOfObject = array.indexOf(object);\n if (indexOfObject === -1) {\n return;\n }\n\n array.splice(indexOfObject, 1);\n }\n\n private removeExcludedQuestionsFromPlaceholder(placeHolder: any): Object {\n if (Array.isArray(placeHolder.reference.excludeQuestions)) {\n _.each(placeHolder.reference.excludeQuestions, (excludedQuestionId) => {\n const questionsArray: Array<any> = this.getQuestionsArrayByQuestionIdInSchema(\n placeHolder,\n excludedQuestionId\n );\n\n if (!Array.isArray(questionsArray)) {\n return;\n }\n const question = this.getQuestionByIdInSchema(\n questionsArray,\n excludedQuestionId\n );\n\n this.removeObjectFromArray(questionsArray, question);\n });\n }\n return placeHolder;\n }\n\n private getReferencedObject(\n referenceData: any,\n keyValReferencedForms: Object\n ): Object {\n if (_.isEmpty(referenceData.form)) {\n console.error(\n 'Form compile: reference missing form attribute',\n referenceData\n );\n return;\n }\n if (_.isEmpty(keyValReferencedForms[referenceData.form])) {\n console.error(\n 'Form compile: referenced form alias not found',\n referenceData\n );\n return;\n }\n if (!_.isEmpty(referenceData.questionId)) {\n return this.getQuestionByIdInSchema(\n keyValReferencedForms[referenceData.form],\n referenceData.questionId\n );\n }\n\n if (!_.isEmpty(referenceData.page) && !_.isEmpty(referenceData.section)) {\n return this.getSectionInSchemaByPageLabelBySectionLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page,\n referenceData.section\n );\n }\n if (!_.isEmpty(referenceData.page)) {\n return this.getPageInSchemaByLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page\n );\n }\n console.error(\n 'Form compile: Unsupported reference type',\n referenceData.reference\n );\n }\n\n private getReferencedForms(\n formSchema: any,\n formSchemasLookupArray: Array<any>\n ): Object {\n const referencedForms: Array<any> = formSchema.referencedForms;\n\n if (_.isEmpty(referencedForms)) {\n return;\n }\n\n const keyValReferencedForms: Object = {};\n\n _.each(referencedForms, (reference: any) => {\n keyValReferencedForms[reference.alias] = this.findSchemaByName(\n formSchemasLookupArray,\n reference.formName\n );\n });\n return keyValReferencedForms;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TextQuestionOptions } from './interfaces/text-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextInputQuestion extends QuestionBase {\n placeholder: string;\n constructor(options: TextQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { TextInputQuestion } from './text-input-question';\nimport { TextAreaQuestionOptions } from './interfaces/text-area-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextAreaInputQuestion extends TextInputQuestion {\n isExpanded: boolean;\n rows: number;\n\n constructor(options: TextAreaQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.isExpanded = options.isExpanded || false;\n this.rows = options.rows || 18;\n this.renderingType = 'textarea';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { SelectQuestionOptions } from './interfaces/select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class SelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n dataSource?: any;\n\n constructor(options: SelectQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n this.dataSource = options.dataSource || '';\n }\n}\n","import { QuestionBase } from './question-base';\nimport { UiSelectQuestionOptions } from './interfaces/ui-select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class UiSelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n searchFunction: Function;\n resolveFunction: Function;\n constructor(options: UiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'ui-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { DateQuestionOptions } from './interfaces/date-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class DateQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n constructor(options: DateQuestionOptions) {\n super(options);\n this.renderingType = 'date';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { SelectQuestion } from './select-question';\nimport { MultiSelectQuestionOptions } from './interfaces/multi-select-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class MultiSelectQuestion extends SelectQuestion {\n options: { key: string; value: string }[];\n\n constructor(options: MultiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'multi-select' || 'single-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from '../question-base';\nimport { BaseOptions } from './base-options';\n\nexport abstract class NestedQuestion extends QuestionBase {\n abstract questions: QuestionBase[];\n constructor(options: BaseOptions) {\n super(options);\n }\n}\n","import { QuestionBase } from './question-base';\nimport { GroupQuestionOptions } from './interfaces/group-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class QuestionGroup extends NestedQuestion {\n questions: QuestionBase[];\n isExpanded = true;\n\n constructor(options: GroupQuestionOptions) {\n super(options);\n this.renderingType = 'group';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormGroup;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { RepeatingQuestionOptions } from './interfaces/repeating-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class RepeatingQuestion extends NestedQuestion {\n questions: QuestionBase[];\n\n constructor(options: RepeatingQuestionOptions) {\n super(options);\n this.renderingType = 'repeating';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormArray;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { CheckboxOptions } from './interfaces/checkbox-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class CheckBoxQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n\n constructor(options: CheckboxOptions) {\n super(options);\n this.renderingType = 'checkbox' || 'radio';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TimeQuestionOptions } from './interfaces/time-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TimeQuestion extends QuestionBase {\n constructor(options: TimeQuestionOptions) {\n super(options);\n this.renderingType = 'time';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { FileUploadQuestionOptions } from './interfaces/file-upload-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class FileUploadQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n dataSource?: any;\n constructor(options: FileUploadQuestionOptions) {\n super(options);\n this.renderingType = 'file';\n this.dataSource = options.dataSource;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TestOrderQuestionOptions } from './interfaces/test-order-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TestOrderQuestion extends QuestionBase {\n orderType: string;\n selectableOrders: { concept: string; label: string }[];\n orderSettingUuid: string;\n rendering: string;\n options: any[];\n constructor(options: TestOrderQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.orderType = options.orderType;\n this.selectableOrders = options.selectableOrders;\n this.options = options.options;\n this.orderSettingUuid = options.orderSettingUuid;\n this.rendering = options.orderSettingUuid;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class DateValidationModel extends ValidationModel {\n allowFutureDates = false;\n\n constructor(validations: any) {\n super(validations);\n\n this.allowFutureDates =\n validations.allowFutureDates === 'true' ? true : false;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MaxValidationModel extends ValidationModel {\n max: number;\n\n constructor(validations: any) {\n super(validations);\n const max: any = validations.max;\n this.max = +max;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MinValidationModel extends ValidationModel {\n min: number;\n\n constructor(validations: any) {\n super(validations);\n const min: any = validations.min;\n this.min = +min;\n }\n}\n","export class DecimalPointValidationModel {\n type: string;\n message: string;\n decimalPlace = 0;\n failsWhenExpression = '';\n\n constructor(validations: any) {\n this.type = 'js_expression';\n this.decimalPlace = validations.decimalPlace;\n }\n setFailExpression(): void {\n this.failsWhenExpression = `!isEmpty(myValue) && String(myValue).split('.')[1].length !== ${this.decimalPlace}`;\n }\n setMessage() {\n this.message = `Value must be to ${this.decimalPlace} decimal places`;\n }\n setValuesAndExpressions() {\n this.setMessage();\n this.setFailExpression();\n }\n}\n","import { Option } from '../question-models/select-option';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\n\nexport class DummyDataSource implements DataSource {\n options: Observable<Option[]>;\n option: Observable<Option>;\n returnErrorOnNext = false;\n\n constructor() {}\n\n resolveSelectedValue(value): Observable<Option> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter((option) => option.value === value);\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions[0]);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n fileUpload(url) {\n return of({ image: '' });\n }\n fetchFile(url) {\n return of({ image: '' });\n }\n searchOptions(searchText): Observable<Option[]> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter(\n (option) => option.label.indexOf(searchText) !== -1\n );\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n\n sampleData(): any {\n return [\n {\n concept: 'a899e0ac-1350-11df-a1f1-0026b9348838',\n label: 'None'\n },\n {\n concept: 'a8ad1276-1350-11df-a1f1-0026b9348838',\n label: 'Breathlessness'\n },\n {\n concept: 'a892e4b4-1350-11df-a1f1-0026b9348838',\n label: 'Chest pain'\n },\n {\n concept: 'a8afc8b8-1350-11df-a1f1-0026b9348838',\n label: 'Cough = 2 weeks'\n },\n {\n concept: 'd7adae14-c386-49cc-8f7c-765d8ceec566',\n label: 'Fever for = 2 weeks'\n },\n {\n concept: '3f57aafc-7162-41da-a51b-6a804cb6f5e8',\n label: 'New exposure to household contact with TB'\n },\n {\n concept: 'a89807f0-1350-11df-a1f1-0026b9348838',\n label: 'Noticeable Weight loss'\n },\n {\n concept: 'e1862fef-68ed-4df4-90dd-a00152f719aa',\n label: 'Night sweats = 2 weeks'\n },\n {\n concept: 'a8ad462e-1350-11df-a1f1-0026b9348838',\n label: 'Abdomen'\n },\n {\n concept: 'f218c60e-4b54-475a-a4fa-facab9216da8',\n label: 'Groin'\n },\n {\n concept: 'a8a774b0-1350-11df-a1f1-0026b9348838',\n label: 'Joints'\n },\n {\n concept: '4639388c-ee31-4dcf-abb4-ad71253493bb',\n label: 'Neck Kw'\n }\n ];\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class HistoricalEncounterDataService {\n dataSources: any = {};\n constructor() {}\n\n registerEncounters(name: string, encounters: any) {\n const encStore: any = {\n data: [],\n getValue: (key: string, index = 0): any => {\n const pathArray = key.split('.');\n if (pathArray.length > 0) {\n return this.getFirstValue(pathArray, encStore.data[index]);\n }\n return encStore.data[index][key];\n },\n getAllObjects: () => {\n return encStore.data;\n },\n getSingleObject: (index = 0) => {\n return encStore.data[index];\n }\n };\n\n if (_.isArray(encounters)) {\n const group: Array<any> = [];\n _.each(encounters, (encounter) => {\n group.push(this._transformEncounter(encounter));\n });\n\n // Sort them in reverse chronological order\n encStore.data = _.sortBy(group, 'encounterDatetime').reverse();\n } else {\n // Assume a single openmrs rest encounter object.\n encStore.data.push(this._transformEncounter(encounters));\n }\n\n this.putObject(name, encStore);\n }\n\n putObject(name, object): void {\n this.dataSources[name] = object;\n }\n\n getObject(name: string): any {\n return this.dataSources[name] || null;\n }\n\n getFirstValue(path: Array<string>, object: any): any {\n const answers = [];\n\n this.getAllValues(path, object, answers);\n\n if (answers.length > 0) {\n return {\n value: answers[0],\n valueDate: moment(object.encounterDatetime).format('ll')\n };\n }\n }\n\n getAllValues(path, object, answers) {\n if (_.isNil(object)) {\n return;\n }\n\n if (path.length <= 1) {\n if (!_.isNil(object[path[0]])) {\n answers.push(object[path[0]]);\n }\n return;\n }\n\n const newpath = path.splice(1);\n const key = path[0];\n\n if (_.isArray(object[key]) && object[key].length > 0) {\n _.each(object[key], (childObject) => {\n this.getAllValues(newpath.slice(0), childObject, answers);\n });\n } else {\n this.getAllValues(newpath.slice(0), object[key], answers);\n }\n }\n\n private _transformEncounter(encounter: any) {\n if (_.isNil(encounter)) {\n return;\n }\n // Transform encounter Level details to key value pairs.\n const prevEncounter: any = {\n encounterDatetime: encounter.encounterDatetime\n };\n\n if (encounter.location && encounter.location.uuid) {\n prevEncounter.location = encounter.location.uuid;\n }\n\n if (encounter.patient && encounter.patient.uuid) {\n prevEncounter.patient = encounter.patient.uuid;\n }\n\n if (encounter.form && encounter.form.uuid) {\n prevEncounter.form = encounter.form.uuid;\n }\n\n if (encounter.encounterType && encounter.encounterType.uuid) {\n prevEncounter.encounterType = encounter.encounterType.uuid;\n }\n\n if (encounter.provider) {\n const provider = encounter.provider;\n prevEncounter.provider = provider.uuid;\n }\n\n // Deal with obs.\n if (encounter.obs) {\n const processedObs: any = this._transformObs(encounter.obs);\n\n // add in individual processed obs to prevEncounter\n _.extend(prevEncounter, processedObs);\n }\n\n return prevEncounter;\n }\n\n private _transformObs(obs: any): any {\n if (!obs) {\n return null;\n }\n\n const obsRep: any = {};\n if (_.isArray(obs)) {\n _.each(obs, (singleObs) => {\n this._augumentObs(obsRep, this._transformObs(singleObs));\n });\n return obsRep;\n } else if (obs.groupMembers) {\n const group: any = {};\n _.each(obs.groupMembers, (member) => {\n this._augumentObs(group, this._transformObs(member));\n });\n\n // Handle already existing data\n if (obsRep[obs.concept.uuid] && _.isArray(obsRep[obs.concept.uuid])) {\n obsRep[obs.concept.uuid].push(group);\n } else {\n obsRep[obs.concept.uuid] = [group];\n }\n return obsRep;\n } else {\n if (obs.value instanceof Object) {\n obsRep[obs.concept.uuid] = obs.value.uuid;\n } else {\n obsRep[obs.concept.uuid] = obs.value;\n }\n return obsRep;\n }\n }\n\n private _augumentObs(existing: any, toAdd: any): any {\n for (const key in toAdd) {\n if (_.has(existing, key)) {\n // check if not an array yet\n if (!_.isArray(existing[key])) {\n const temp = existing[key];\n existing[key] = [temp];\n }\n\n // Check whether the incoming is array (for group members)\n if (_.isArray(toAdd[key])) {\n Array.prototype.push.apply(existing[key], toAdd[key]);\n } else {\n existing[key].push(toAdd[key]);\n }\n } else {\n existing[key] = toAdd[key];\n }\n }\n return existing;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { HistoricalEncounterDataService } from '../services/historical-encounter-data.service';\nimport { JsExpressionHelper } from './js-expression-helper';\nimport {\n Runnable,\n ExpressionRunner\n} from '../expression-runner/expression-runner';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\n@Injectable()\nexport class HistoricalHelperService {\n constructor() {}\n\n public evaluate(\n expr: string,\n dataSources: any,\n additionalScopevalues: any\n ): any {\n const HD = new HistoricalEncounterDataService();\n HD.registerEncounters('prevEnc', dataSources['rawPrevEnc']);\n const deps: any = {\n HD: HD\n };\n\n if (additionalScopevalues) {\n for (const o in additionalScopevalues) {\n if (additionalScopevalues[o]) {\n deps[o] = additionalScopevalues[o];\n }\n }\n }\n\n const helper = new JsExpressionHelper();\n const control: AfeFormControl = new AfeFormControl();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n expr,\n control,\n helper.helperFunctions,\n deps\n );\n\n return runnable.run();\n }\n\n public evaluatePrecondition(\n expr: string,\n dataSources: any,\n historicalValue: any\n ): any {\n const additionalScope = {\n histValue: historicalValue\n };\n\n return this.evaluate(expr, dataSources, additionalScope);\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport { TextInputQuestion } from '../question-models/text-input-question';\nimport { TextAreaInputQuestion } from '../question-models/text-area-input-question';\nimport { SelectQuestion } from '../question-models/select-question';\nimport { UiSelectQuestion } from '../question-models/ui-select-question';\nimport { DateQuestion } from '../question-models/date-question';\nimport { TimeQuestion } from './../question-models/time-question';\nimport { MultiSelectQuestion } from '../question-models/multi-select-question';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { RepeatingQuestion } from '../question-models/repeating-question';\nimport { QuestionBase } from '../question-models/question-base';\nimport { FileUploadQuestion } from '../question-models/file-upload-question';\nimport { TestOrderQuestion } from '../question-models/test-order-question';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { DecimalPointValidationModel } from '../question-models/decimal-point-validation.model';\nimport { DummyDataSource } from '../data-sources/dummy-data-source';\nimport { HistoricalHelperService } from '../helpers/historical-expression-helper-service';\nimport { Form } from './form';\nimport { CheckBoxQuestion } from '../question-models/models';\n\nexport class QuestionFactory {\n dataSources: any = {};\n historicalHelperService: HistoricalHelperService = new HistoricalHelperService();\n constructor() {}\n\n createQuestionModel(formSchema: any, form?: Form): QuestionBase {\n if (form) {\n const dataSources = form.dataSourcesContainer.dataSources;\n this.dataSources = dataSources;\n }\n return this.toFormQuestionModel(formSchema);\n }\n\n toSelectQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n\n const options: any = question.options;\n options.splice(0, 0, {\n label: '',\n value: ''\n });\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumericQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumberQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDecimalQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'decimal';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDateQuestion(schemaQuestion: any): DateQuestion {\n if (schemaQuestion.type === 'encounterDatetime') {\n return this.toEncounterDatetimeQuestion(schemaQuestion);\n }\n const question = new DateQuestion({ type: '', key: '' });\n question.renderingType = 'date';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showTime = schemaQuestion.questionOptions.showTime as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTimeQuestion(schemaQuestion: any): TimeQuestion {\n const question = new TimeQuestion({ type: '', key: '' });\n question.renderingType = 'time';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterDatetimeQuestion(schemaQuestion: any): DateQuestion {\n const question = new DateQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.renderingType = 'date';\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n question.showTime = true;\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toCheckBoxQuestion(schemaQuestion: any): CheckBoxQuestion {\n const question = new CheckBoxQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.answers.map((obj) => {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.options.splice(0, 0);\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n const mappings: any = {\n label: 'label',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toMultiCheckboxQuestion(schemaQuestion: any): MultiSelectQuestion {\n const question = new MultiSelectQuestion({\n renderType: '',\n options: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.validators = this.addValidators(schemaQuestion);\n question.dataSource = new DummyDataSource();\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextAreaQuestion(schemaQuestion: any): TextAreaInputQuestion {\n const question = new TextAreaInputQuestion({\n isExpanded: false,\n rows: 18,\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.isExpanded = schemaQuestion.isExpanded;\n question.rows = schemaQuestion.questionOptions.rows;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFileUploadQuestion(schemaQuestion: any): FileUploadQuestion {\n const question = new FileUploadQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'file';\n question.dataSource = 'file';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDrugQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'drug';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toProblemQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'problem';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toConceptAnswerSelect(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource =\n schemaQuestion.questionOptions.dataSource || 'conceptAnswers';\n question.dataSourceOptions = {\n concept: schemaQuestion.questionOptions.concept\n };\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toRepeatingQuestion(schemaQuestion: any): RepeatingQuestion {\n const question = new RepeatingQuestion({\n questions: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n if (schemaQuestion.type === 'testOrder') {\n const testOrder = this.toTestOrderQuestion(schemaQuestion);\n const orders = [];\n orders.push(testOrder);\n question.questions = orders;\n }\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toGroupQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toPageQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'page';\n question.controlType = AfeControlType.None;\n question.questions = [];\n schemaQuestion.sections.forEach((element) => {\n question.questions.push(this.toSectionQuestion(element));\n });\n return question;\n }\n\n toFormQuestionModel(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'form';\n question.controlType = AfeControlType.AfeFormGroup;\n question.extras = schemaQuestion;\n question.questions = [];\n schemaQuestion.pages.forEach((element) => {\n question.questions.push(this.toPageQuestion(element));\n });\n\n return question;\n }\n\n toSectionQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'section';\n question.controlType = AfeControlType.None;\n question.isExpanded = schemaQuestion.isExpanded === 'true' ? true : false;\n question.questions = this.getSchemaQuestions(schemaQuestion.questions);\n return question;\n }\n\n toPersonAttributeQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAttribute';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n toPersonAddressQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAddress';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterProviderQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'provider';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFieldSetQuestion(schemaQuestion: any): QuestionGroup {\n const toReturn = this.toGroupQuestion(schemaQuestion);\n toReturn.renderingType = 'field-set';\n return toReturn;\n }\n\n toEncounterLocationQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'location';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'amrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toSiblingLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'siblingLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNonAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'nonAmrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTestOrderQuestion(schemaQuestion: any): TestOrderQuestion {\n const question = new TestOrderQuestion({\n type: '',\n key: '',\n orderType: '',\n selectableOrders: [],\n orderSettingUuid: '',\n label: '',\n rendering: ''\n });\n\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.selectableOrders.map(\n function (obj) {\n return {\n label: obj.label,\n value: obj.concept\n };\n }\n );\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n this.copyProperties(mappings, schemaQuestion, question);\n return question;\n }\n\n getSchemaQuestions(schema: any): any {\n const listQuestions = new Array();\n this.getQuestions(schema, listQuestions);\n return listQuestions;\n }\n\n getQuestions(schema: any, foundArray: any): any {\n if (!Array.isArray(foundArray)) {\n foundArray = [];\n }\n if (Array.isArray(schema)) {\n for (const property in schema) {\n if (schema.hasOwnProperty(property)) {\n this.getQuestions(schema[property], foundArray);\n }\n }\n }\n\n if (schema && !Array.isArray(schema) && typeof schema === 'object') {\n if (schema.questionOptions) {\n if (\n schema.questionOptions.rendering === 'group' ||\n schema.questionOptions.rendering === 'repeating'\n ) {\n // schema.questions = this.getGroupMembers(schema.questions);\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n } else if (schema.questionOptions.rendering === 'field-set') {\n } else {\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n }\n } else {\n for (const o in schema) {\n if (schema.hasOwnProperty(o)) {\n this.getQuestions(schema[o], foundArray);\n }\n }\n }\n }\n }\n\n getChildrenQuestionModels(schema: any): any {\n const children = [];\n this.getQuestions(schema, children);\n return children;\n }\n\n toModel(schema: any, renderType: string): any {\n if (renderType === 'ui-select-extended') {\n renderType = schema.type;\n }\n if (!schema.id) {\n schema['id'] = this.generateId(10);\n }\n\n if (\n schema.questionOptions &&\n (schema.questionOptions.showDate === true ||\n schema.questionOptions.showDate === 'true')\n ) {\n schema = this.convertOldVersionComplexObsQuestionToNewVersion(schema);\n renderType = 'field-set';\n }\n\n switch (renderType) {\n case 'select':\n return this.toSelectQuestion(schema);\n case 'single-select':\n return this.toSelectQuestion(schema);\n case 'multi-select':\n return this.toSelectQuestion(schema);\n case 'numeric':\n return this.toNumericQuestion(schema);\n case 'number':\n return this.toNumberQuestion(schema);\n case 'decimal':\n return this.toDecimalQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'date':\n return this.toDateQuestion(schema);\n case 'time':\n return this.toTimeQuestion(schema);\n case 'multiCheckbox':\n return this.toMultiCheckboxQuestion(schema);\n case 'drug':\n return this.toDrugQuestion(schema);\n case 'problem':\n return this.toProblemQuestion(schema);\n case 'group':\n return this.toGroupQuestion(schema);\n case 'field-set':\n return this.toFieldSetQuestion(schema);\n case 'repeating':\n return this.toRepeatingQuestion(schema);\n case 'personAttribute':\n return this.toPersonAttributeQuestion(schema);\n case 'text':\n return this.toTextQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'select-concept-answers':\n return this.toConceptAnswerSelect(schema);\n case 'encounterLocation':\n return this.toEncounterLocationQuestion(schema);\n case 'amrsLocations':\n return this.toAmrsLocationsQuestion(schema);\n case 'nonAmrsLocations':\n return this.toNonAmrsLocationsQuestion(schema);\n case 'siblingLocations':\n return this.toSiblingLocationsQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'radio':\n return this.toCheckBoxQuestion(schema);\n case 'checkbox':\n return this.toCheckBoxQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'file':\n return this.toFileUploadQuestion(schema);\n default:\n console.warn('New Schema Question Type found.........' + renderType);\n return this.toTextQuestion(schema);\n }\n }\n\n convertOldVersionComplexObsQuestionToNewVersion(schemaQuestion: any) {\n const converted: any = {};\n converted.type = 'complex-obs';\n converted.label = schemaQuestion.label;\n converted.id = 'complex_' + schemaQuestion.id;\n converted.questionOptions = {};\n converted.questionOptions.concept = schemaQuestion.questionOptions.concept;\n converted.questionOptions.rendering = 'field-set';\n converted.questions = [];\n converted.validators = [];\n\n const mainField: any = JSON.parse(JSON.stringify(schemaQuestion));\n mainField.type = 'complex-obs-child';\n delete mainField.questionOptions.showDate;\n delete mainField.questionOptions.shownDateOptions;\n mainField.questionOptions.obsField = 'value';\n\n const dateField: any = {};\n dateField.type = 'complex-obs-child';\n dateField.label = 'Date of ' + mainField.label;\n dateField.id = 'date_' + mainField.id;\n dateField.questionOptions = {};\n dateField.questionOptions.concept = schemaQuestion.questionOptions.concept;\n dateField.questionOptions.rendering = 'date';\n dateField.questionOptions.obsField = 'obsDatetime';\n const dateOptions: any = (Object as any).assign(\n {},\n schemaQuestion.questionOptions.shownDateOptions\n );\n dateField.validators = dateOptions.validators;\n dateField.hide = dateOptions.hide;\n\n converted.questions.push(mainField);\n converted.questions.push(dateField);\n\n return converted;\n }\n\n copyProperties(mappings: any, source: any, destination: QuestionBase) {\n for (const property in source) {\n if (\n mappings.hasOwnProperty(property) &&\n destination.hasOwnProperty(mappings[property])\n ) {\n destination[mappings[property]] = source[property];\n }\n }\n }\n\n addValidators(schemaQuestion: any): Array<ValidationModel> {\n const validators: Array<ValidationModel> = [];\n\n if (schemaQuestion.validators) {\n // TODO - add more validator types\n _.forEach(schemaQuestion.validators, (validator: any) => {\n switch (validator.type) {\n case 'date':\n validators.push(new DateValidationModel(validator));\n break;\n case 'js_expression':\n validators.push(new JsExpressionValidationModel(validator));\n break;\n case 'decimal':\n const decimalModel = new DecimalPointValidationModel(validator);\n decimalModel.setValuesAndExpressions();\n validators.push(decimalModel);\n break;\n case 'conditionalAnswered':\n validators.push(new ConditionalValidationModel(validator));\n break;\n default:\n validators.push(new ValidationModel(validator));\n break;\n }\n });\n }\n\n const questionOptions = schemaQuestion.questionOptions;\n const renderingType = questionOptions ? questionOptions.rendering : '';\n if (renderingType === 'number' || renderingType === 'decimal') {\n if (questionOptions.max && questionOptions.min) {\n validators.push(\n new MaxValidationModel({\n type: 'max',\n max: questionOptions.max\n })\n );\n validators.push(\n new MinValidationModel({\n type: 'min',\n min: questionOptions.min\n })\n );\n }\n }\n\n // add conditional required validators\n if (typeof schemaQuestion.required === 'object') {\n const required: any = schemaQuestion.required;\n\n if (required.type === 'conditionalRequired') {\n validators.push(\n new ConditionalValidationModel({\n referenceQuestionId: required.referenceQuestionId,\n referenceQuestionAnswers: required.referenceQuestionAnswers,\n type: required.type,\n message: required.message\n })\n );\n }\n }\n\n return validators;\n }\n\n addHistoricalExpressions(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.historicalExpression &&\n schemaQuestion.historicalExpression.length > 0\n ) {\n question.setHistoricalValue(true);\n if (schemaQuestion.showHistoricalEncounterDate !== undefined) {\n question.showHistoricalEncounterDate(\n schemaQuestion.showHistoricalEncounterDate === 'true'\n );\n } else {\n question.showHistoricalEncounterDate();\n }\n const origValue = this.historicalHelperService.evaluate(\n schemaQuestion.historicalExpression,\n this.dataSources,\n undefined\n );\n question.historicalDataValue = origValue;\n // console.info('historical value', origValue);\n // console.info('historical data question :::', question);\n // console.info('schema data question :::', schemaQuestion);\n\n if (schemaQuestion.historicalPrepopulateCondition && origValue) {\n const toPopulate = this.historicalHelperService.evaluatePrecondition(\n schemaQuestion.historicalPrepopulateCondition,\n this.dataSources,\n origValue\n );\n\n if (toPopulate) {\n question.defaultValue = origValue.value;\n }\n return; // don't try to evaluate the other option\n }\n\n if (schemaQuestion.historicalPrepopulate && origValue) {\n // sample schema options for this branch\n // \"historicalPrepopulate\":true,\n // \"allowedHistoricalValueAgeInDays\": 40000,\n const valDate = moment(origValue.valueDate);\n const differenceInDays = moment().diff(valDate, 'days');\n if (Number.isInteger(schemaQuestion.allowedHistoricalValueAgeInDays)) {\n if (\n differenceInDays <= schemaQuestion.allowedHistoricalValueAgeInDays\n ) {\n question.defaultValue = origValue.value;\n }\n } else {\n question.defaultValue = origValue.value;\n }\n }\n }\n }\n\n addCalculatorProperty(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.questionOptions &&\n typeof schemaQuestion.questionOptions.calculate === 'object'\n ) {\n question.calculateExpression =\n schemaQuestion.questionOptions.calculate.calculateExpression;\n }\n }\n\n addAlertProperty(schemaQuestion: any, question: QuestionBase): any {\n if (schemaQuestion.alert) {\n question.alert = schemaQuestion.alert;\n }\n // if (typeof schemaQuestion.message === 'object') {\n // if (schemaQuestion.message.alertWhenExpression) {\n // question.message = schemaQuestion.message.alertWhenExpression;\n // }\n // }\n }\n\n addDisableOrHideProperty(schemaQuestion: any, question: QuestionBase): any {\n if (!!schemaQuestion.disable) {\n question.disable = schemaQuestion.disable;\n }\n\n if (typeof schemaQuestion.disable === 'object') {\n question.disable = schemaQuestion.disable.disableWhenExpression;\n }\n\n if (!!schemaQuestion.hide) {\n question.hide = schemaQuestion.hide;\n }\n if (typeof schemaQuestion.hide === 'object') {\n if (schemaQuestion.hide.hideWhenExpression) {\n question.hide = schemaQuestion.hide.hideWhenExpression;\n }\n }\n }\n private generateId(x) {\n let s = '_';\n while (s.length < x && x > 0) {\n const r = Math.random();\n s +=\n r < 0.1\n ? Math.floor(r * 100)\n : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65));\n }\n return '_' + s;\n }\n}\n","import * as _ from 'lodash';\n\nimport { FormFactory } from './form.factory';\nimport { QuestionFactory } from './question.factory';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { QuestionBase } from '../question-models/question-base';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\n\nexport class Form {\n public rootNode: GroupNode;\n public valueProcessingInfo: any = {};\n public existingOrders: any = {};\n private _dataSourcesContainer: DataSources;\n private _showErrors = false;\n constructor(\n public schema: any,\n public formFactory: FormFactory,\n public questionFactory: QuestionFactory\n ) {\n this._dataSourcesContainer = new DataSources();\n }\n\n get dataSourcesContainer(): DataSources {\n return this._dataSourcesContainer;\n }\n\n searchNodeByPath(node: GroupNode, path, found: Array<NodeBase>) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n this.searchNodeByPath(child, path, found);\n } else if (child instanceof LeafNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n } else if (child instanceof ArrayNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n const aChild: ArrayNode = child as ArrayNode;\n\n aChild.children.forEach((aChildNode) => {\n this.searchNodeByPath(aChildNode, path, found);\n });\n }\n }\n }\n\n return found;\n }\n\n searchNodeByQuestionId(\n questionId: string,\n questionType?: string\n ): Array<NodeBase> {\n const found = [];\n if (questionType) {\n this.searchNodeByQuestionType(this.rootNode, questionType, found);\n } else {\n this.findNodesByQuestionId(this.rootNode, questionId, found);\n }\n return found;\n }\n\n searchNodeByQuestionType(\n rootNode: any,\n questionType: string,\n found: Array<NodeBase>\n ) {\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.searchNodeByQuestionType(\n nodeAsGroup.children[o],\n questionType,\n found\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.searchNodeByQuestionType(node, questionType, found);\n });\n }\n\n if (rootNode instanceof LeafNode) {\n const questionBase: QuestionBase = rootNode.question;\n\n if (\n questionBase.extras &&\n questionBase.extras.type &&\n questionBase.extras.type === questionType\n ) {\n found.push(rootNode);\n }\n }\n }\n\n private findNodesByQuestionId(\n rootNode: NodeBase,\n questionId: string,\n results: Array<NodeBase>\n ) {\n if (rootNode.question.key === questionId) {\n results.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.findNodesByQuestionId(\n nodeAsGroup.children[o],\n questionId,\n results\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.findNodesByQuestionId(node, questionId, results);\n });\n }\n }\n\n get valid() {\n return this.rootNode.control.valid;\n }\n\n set showErrors(show: boolean) {\n this._showErrors = show;\n }\n\n get showErrors() {\n return this._showErrors;\n }\n\n markInvalidControls(node: GroupNode, invalidControlNodes?: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.markInvalidControls(child, invalidControlNodes);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n const c: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (!c.valid && !c.disabled) {\n if (invalidControlNodes) {\n invalidControlNodes.push(child);\n }\n\n c.markAsTouched();\n }\n }\n } else if (child instanceof ArrayNode) {\n const arrayNode: ArrayNode = child as ArrayNode;\n\n if (\n arrayNode &&\n arrayNode.children &&\n arrayNode.children.length > 0\n ) {\n _.forEach(arrayNode.children, (groupNode: any) => {\n this.markInvalidControls(groupNode, invalidControlNodes);\n });\n }\n }\n }\n }\n\n return invalidControlNodes;\n }\n\n updateHiddenDisabledStateForAllControls() {\n this._updateHiddenDisabledStateForAllControls(this.rootNode);\n }\n\n updateAlertsForAllControls() {\n this._updateAlertsForAllControls(this.rootNode);\n }\n\n private _updateAlertsForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateAlert) {\n (rootNode.control as any).updateAlert();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateAlertsForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateAlertsForAllControls(node);\n });\n }\n }\n private _updateHiddenDisabledStateForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateDisabledState) {\n (rootNode.control as any).updateDisabledState();\n }\n\n if ((rootNode.control as any).updateHiddenState) {\n (rootNode.control as any).updateHiddenState();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateHiddenDisabledStateForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateHiddenDisabledStateForAllControls(node);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\n// import { AbstractControl } from '@angular/forms';\n\nimport { LeafNode, GroupNode, ArrayNode, NodeBase } from './form-node';\nimport {\n QuestionBase,\n NestedQuestion,\n RepeatingQuestion,\n QuestionGroup\n} from '../question-models/models';\nimport { FormControlService } from './form-control.service';\nimport { QuestionFactory } from './question.factory';\nimport {\n AfeFormGroup,\n AfeControlType,\n AfeFormArray\n} from '../../abstract-controls-extension';\nimport { ControlRelationsFactory } from './control-relations.factory';\nimport { Validations } from '../validators/validations';\n\nimport { Form } from './form';\n\n@Injectable()\nexport class FormFactory {\n public hd: any = {\n getValue: () => {\n return 20;\n }\n };\n\n constructor(\n public controlService: FormControlService,\n public questionFactroy: QuestionFactory,\n public controlRelationsFactory: ControlRelationsFactory\n ) {}\n\n createForm(schema: any, dataSource?: any): Form {\n const form: Form = new Form(schema, this, this.questionFactroy);\n if (dataSource) {\n for (const key in dataSource) {\n if (dataSource.hasOwnProperty(key)) {\n form.dataSourcesContainer.registerDataSource(\n key,\n dataSource[key],\n false\n );\n }\n }\n }\n const question = this.questionFactroy.createQuestionModel(schema, form);\n form.rootNode = this.createNode(question, null, null, form) as GroupNode;\n\n this.buildRelations(form.rootNode);\n form.updateHiddenDisabledStateForAllControls();\n form.updateAlertsForAllControls();\n return form;\n }\n\n buildRelations(rootNode: GroupNode) {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildRelations(rootNode);\n\n // enable js expression validations\n Validations.JSExpressionValidatorsEnabled = true;\n }\n\n createNode(\n question: QuestionBase | NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): NodeBase {\n let node: NodeBase = null;\n if (question instanceof NestedQuestion) {\n if (question instanceof RepeatingQuestion) {\n node = this.createArrayNode(question, parentNode, parentControl, form);\n } else {\n node = this.createGroupNode(question, parentNode, parentControl, form);\n }\n } else {\n node = this.createLeafNode(question, parentNode, parentControl, form);\n }\n return node;\n }\n\n createLeafNode(\n question: QuestionBase,\n parentNode: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): LeafNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n );\n return new LeafNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n }\n\n createGroupNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): GroupNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const groupNode = new GroupNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n this.createNodeChildren(\n question,\n groupNode,\n controlModel || parentControl,\n form\n );\n return groupNode;\n }\n\n createArrayNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): ArrayNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const arrayNode = new ArrayNode(\n question,\n controlModel,\n parentControl,\n this,\n form,\n parentNode ? parentNode.path : undefined\n );\n arrayNode.createChildFunc = this.createArrayNodeChild;\n arrayNode.removeChildFunc = this.removeArrayNodeChild;\n\n arrayNode.addChildNodeCreatedListener((node: GroupNode) => {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildArrayNodeRelations(node);\n Validations.JSExpressionValidatorsEnabled = true;\n });\n return arrayNode;\n }\n\n createNodeChildren(\n question: NestedQuestion,\n node: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): any {\n question.questions.forEach((element) => {\n const child = this.createNode(element, node, parentControl, form);\n node.setChild(element.key, child);\n });\n return node.children;\n }\n\n createArrayNodeChild(\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n ): GroupNode {\n if (factory === null || factory === undefined) {\n factory = this;\n }\n const groupQuestion: QuestionGroup = new QuestionGroup({\n key: node.path + '.' + node.children.length + '',\n type: 'group',\n extras: question.extras,\n label: '',\n questions: question.questions\n });\n\n if (question.controlType === AfeControlType.None) {\n groupQuestion.controlType = question.controlType;\n }\n\n const group = factory.createGroupNode(groupQuestion, null, null, node.form);\n node.children.push(group);\n\n if (node.control instanceof AfeFormArray) {\n const nodeControl = node.control as AfeFormArray;\n nodeControl.setControl(nodeControl.controls.length, group.control);\n }\n\n return group;\n }\n\n removeArrayNodeChild(index: number, node: ArrayNode) {\n const nodeToRemove = node.children[index];\n\n node.children.splice(index, 1);\n if (node.control !== null || node.control !== undefined) {\n if (node.control instanceof AfeFormArray) {\n const control = node.control as AfeFormArray;\n const controlIndexToRemove = control.controls.indexOf(\n nodeToRemove.control\n );\n if (controlIndexToRemove >= 0) {\n control.removeAt(controlIndexToRemove);\n }\n }\n }\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport {\n NodeBase,\n ArrayNode,\n GroupNode,\n LeafNode\n} from '../form-factory/form-node';\n\nexport class ObsAdapterHelper {\n constructor() {}\n\n findObsAnswerToQuestion(node: NodeBase, obsArray: Array<any>): Array<any> {\n const found = [];\n\n if (!this.isObsNode(node)) {\n return found;\n }\n\n if (\n node instanceof LeafNode ||\n (node instanceof GroupNode && node.question.extras.type === 'complex-obs')\n ) {\n _.each(obsArray, (item) => {\n if (\n item.concept &&\n item.concept.uuid === node.question.extras.questionOptions.concept\n ) {\n found.push(item);\n }\n });\n\n return found;\n }\n\n // At this point the node is either a group or a repeating node\n\n const childQuestionsUuids = this.getChildQuestionsConceptUuids(node);\n if (childQuestionsUuids.length > 0) {\n _.each(obsArray, (obs) => {\n if (\n obs.concept &&\n obs.concept.uuid === node.question.extras.questionOptions.concept &&\n Array.isArray(obs.groupMembers) &&\n this.isSubsetOf(\n childQuestionsUuids,\n this.getGroupMembersConceptUuids(obs)\n )\n ) {\n found.push(obs);\n }\n });\n }\n\n return found;\n }\n\n getChildQuestionsConceptUuids(node: NodeBase): Array<string> {\n const found = [];\n\n if (node.question.extras && node.question.extras.questions) {\n _.each(node.question.extras.questions, (question) => {\n if (question.questionOptions && question.questionOptions.concept) {\n found.push(question.questionOptions.concept);\n }\n });\n }\n\n return found;\n }\n\n getGroupMembersConceptUuids(obsWithGroupMembers): Array<string> {\n const found = [];\n\n if (Array.isArray(obsWithGroupMembers.groupMembers)) {\n _.each(obsWithGroupMembers.groupMembers, (member) => {\n found.push(member.concept.uuid);\n });\n }\n\n return found;\n }\n\n isObsNode(node: NodeBase): boolean {\n return (\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs' ||\n node.question.extras.type === 'complex-obs-child')\n );\n }\n\n isSubsetOf(supersetArray: Array<any>, subsetArray: Array<any>): boolean {\n if (subsetArray.length === 0 && supersetArray.length === 0) {\n return true;\n }\n return subsetArray.every((element): boolean => {\n return supersetArray.indexOf(element) >= 0;\n });\n }\n\n setSimpleObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const obsToUse = obs[0];\n\n // set initial value\n node.initialValue = obsToUse;\n\n if (!this.isEmpty(obsToUse.value) && obsToUse.value.uuid) {\n // answer to the obs is a concept, use uuid value\n this.setNodeFormControlValue(node, obsToUse.value.uuid);\n } else if (!this.isEmpty(obsToUse.value)) {\n this.setNodeFormControlValue(node, obsToUse.value);\n }\n }\n }\n\n setMultiselectObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n node.initialValue = obs;\n\n const obsUuids = [];\n for (const m of obs) {\n obsUuids.push(m.value.uuid);\n }\n\n this.setNodeFormControlValue(node, obsUuids);\n }\n }\n\n setComplexObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n // set the obs value here\n this.setNodeValue(valueField, obs);\n node.initialValue = valueField.initialValue;\n\n // set the date value here\n dateField.initialValue = valueField.initialValue;\n this.setNodeFormControlValue(\n dateField,\n valueField.initialValue.obsDatetime\n );\n }\n }\n\n setGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const groupNode = node as GroupNode;\n groupNode.initialValue = obs[0];\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs[0].groupMembers);\n }\n }\n }\n\n setRepeatingGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const arrayNode = node as ArrayNode;\n arrayNode.initialValue = obs;\n\n for (let i = 0; i < obs.length; i++) {\n const createdNode = arrayNode.createChildNode();\n this.setGroupObsNodeValue(createdNode, [obs[i]]);\n }\n }\n }\n\n setNodeValue(node: NodeBase, obs: Array<any>) {\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs);\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n this.setNodeValue(arrayNode.children[i], obs);\n }\n break;\n }\n break;\n case 'simple':\n // search asnwering obs at this point\n const answeringObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setSimpleObsNodeValue(node, answeringObs);\n break;\n\n case 'multiselect':\n // search asnwering obs at this point\n const multiselectObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setMultiselectObsNodeValue(node, multiselectObs);\n break;\n\n case 'complex':\n // search asnwering obs at this point\n const complexObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setComplexObsNodeValue(node, complexObs);\n break;\n\n case 'group':\n const groupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (groupObs.length > 0) {\n this.setGroupObsNodeValue(node, groupObs);\n }\n\n break;\n case 'repeatingGroup':\n const repeatingGroupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (repeatingGroupObs.length > 0) {\n this.setRepeatingGroupObsNodeValue(node, repeatingGroupObs);\n }\n\n break;\n default:\n console.error('Unknown obs node', node);\n break;\n }\n }\n\n setNodeFormControlValue(node: NodeBase, value) {\n node.control.setValue(value);\n // TODO: Determine if we need this call\n // node.control.updateValueAndValidity();\n\n // TODO: Remove this hack and put it in appropriate place\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n }\n\n getObsNodeType(node: NodeBase): string {\n if (this.isObsNode(node)) {\n if (\n node instanceof LeafNode &&\n (node.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n node.question.extras.questionOptions.rendering === 'checkbox' ||\n node.question.extras.questionOptions.rendering === 'multi-select')\n ) {\n return 'multiselect';\n }\n\n if (node instanceof LeafNode) {\n return 'simple';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n return 'complex';\n }\n\n if (\n node instanceof ArrayNode &&\n node.question.extras.type === 'obsGroup' &&\n node.question.extras.questionOptions.rendering === 'repeating'\n ) {\n return 'repeatingGroup';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'obsGroup'\n ) {\n return 'group';\n }\n\n return 'unknownObs';\n }\n return 'unknown';\n }\n\n // PAYLOAD GENERATION FUNCTIONS\n getSimpleObsPayload(node: NodeBase): any {\n // check for empty values first\n if (this.isEmpty(node.control.value)) {\n if (node.initialValue) {\n // Handle case for existing voided obs\n return {\n uuid: node.initialValue.uuid,\n voided: true\n };\n }\n return null;\n }\n\n // check for exisiting, unchanged values\n if (node.initialValue && !this.simpleNodeValueChanged(node)) {\n return null;\n }\n\n // all numbers, text, concepts answers are handled in the same way\n // no need for further formatting in this case\n const obs: any = {\n concept: node.question.extras.questionOptions.concept,\n value: node.control.value\n };\n\n // handle date fields\n if (node.question.extras.questionOptions.rendering === 'date') {\n obs.value = this.toOpenMrsDateTimeString(node.control.value);\n }\n\n if (node.initialValue) {\n // for existing cases, delete concept property, and add uuid\n delete obs.concept;\n obs.uuid = node.initialValue.uuid;\n }\n\n return obs;\n }\n\n getComplexObsPayload(node: NodeBase) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n const valuePayload = this.getObsNodePayload(valueField);\n console.log('valuePayload', valuePayload);\n\n // set obs datetime for the generated payload\n if (valuePayload.length > 0) {\n valuePayload[0].obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return valuePayload[0];\n } else if (valuePayload.length === 0 && node.initialValue) {\n // determine if date changed\n if (\n !this.areDatesEqual(\n node.initialValue.obsDatetime,\n dateField.control.value\n )\n ) {\n const payload: any = {\n uuid: node.initialValue.uuid\n };\n payload.obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return payload;\n }\n }\n return null;\n }\n\n getMultiselectObsPayload(node: NodeBase): Array<any> {\n const payload: Array<any> = [];\n\n const existingUuids = [];\n\n // add voided obs i.e. deleted options\n if (Array.isArray(node.initialValue)) {\n _.each(node.initialValue, (item) => {\n existingUuids.push(item.value.uuid);\n if (Array.isArray(node.control.value)) {\n if (node.control.value.indexOf(item.value.uuid) < 0) {\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n } else {\n // every value was deleted\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n });\n }\n\n // add new obs i.e they didn't exisit originally\n if (Array.isArray(node.control.value)) {\n _.each(node.control.value, (item) => {\n if (existingUuids.indexOf(item) < 0) {\n payload.push({\n concept: node.question.extras.questionOptions.concept,\n value: item\n });\n }\n });\n }\n\n return payload;\n }\n\n getGroupPayload(node: NodeBase) {\n const nodeAsGroup: GroupNode = node as GroupNode;\n\n let childrenPayload = [];\n _.each(nodeAsGroup.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n });\n\n if (childrenPayload.length === 0) {\n return null;\n }\n\n const groupPayload: any = {\n groupMembers: childrenPayload\n };\n\n if (nodeAsGroup.initialValue) {\n groupPayload.uuid = nodeAsGroup.initialValue.uuid;\n } else {\n groupPayload.concept =\n nodeAsGroup.question.extras.questionOptions.concept;\n }\n\n return groupPayload;\n }\n\n getRepeatingGroupPayload(node: NodeBase) {\n const nodeAsArray: ArrayNode = node as ArrayNode;\n\n let childrenPayload = [];\n\n const groupsUuidsAfterEditting = [];\n _.each(nodeAsArray.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n if (child.initialValue && child.initialValue.uuid) {\n groupsUuidsAfterEditting.push(child.initialValue.uuid);\n }\n });\n\n // void deleted groups\n // console.log('groupsUuidsAfterEditting', groupsUuidsAfterEditting);\n if (nodeAsArray.initialValue && Array.isArray(nodeAsArray.initialValue)) {\n _.each(nodeAsArray.initialValue, (obs) => {\n if (groupsUuidsAfterEditting.indexOf(obs.uuid) < 0) {\n const voidedGroup = {\n uuid: obs.uuid,\n voided: true\n };\n childrenPayload.push(voidedGroup);\n }\n });\n }\n\n if (childrenPayload.length <= 0) {\n return null;\n }\n return childrenPayload;\n }\n\n getObsNodePayload(node: NodeBase): Array<any> {\n let payload = [];\n\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n const groupNodePayoad = this.getObsNodePayload(\n groupNode.children[o]\n );\n if (Array.isArray(groupNodePayoad) && groupNodePayoad.length > 0) {\n payload = payload.concat(groupNodePayoad);\n }\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n const arrayNodePayload = this.getObsNodePayload(\n arrayNode.children[i]\n );\n if (\n Array.isArray(arrayNodePayload) &&\n arrayNodePayload.length > 0\n ) {\n payload = payload.concat(arrayNodePayload);\n }\n }\n break;\n }\n break;\n case 'simple':\n const simpleObs = this.getSimpleObsPayload(node);\n if (simpleObs !== null) {\n payload.push(simpleObs);\n }\n break;\n\n case 'multiselect':\n const multiselectObs = this.getMultiselectObsPayload(node);\n\n if (Array.isArray(multiselectObs) && multiselectObs.length > 0) {\n payload = payload.concat(multiselectObs);\n }\n break;\n\n case 'complex':\n const complexObs = this.getComplexObsPayload(node);\n if (complexObs !== null) {\n payload.push(complexObs);\n }\n break;\n\n case 'group':\n const groupedObs = this.getGroupPayload(node);\n if (groupedObs && groupedObs !== null) {\n payload.push(groupedObs);\n }\n break;\n case 'repeatingGroup':\n const repeatingGroupedObs = this.getRepeatingGroupPayload(node);\n if (\n Array.isArray(repeatingGroupedObs) &&\n repeatingGroupedObs.length > 0\n ) {\n payload = payload.concat(repeatingGroupedObs);\n }\n break;\n default:\n break;\n }\n\n return payload;\n }\n\n simpleNodeValueChanged(node: NodeBase): boolean {\n if (node.initialValue) {\n if (node.initialValue.value && node.initialValue.value.uuid) {\n // question whose answer is a concept\n return node.control.value !== node.initialValue.value.uuid;\n }\n\n if (node.question.extras.questionOptions.rendering === 'date') {\n return !this.areDatesEqual(node.control.value, node.initialValue.value);\n }\n return node.control.value !== node.initialValue.value;\n }\n return false;\n }\n\n areDatesEqual(date1, date2) {\n return moment(date1).isSame(date2);\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n toOpenMrsDateTimeString(datetime: string): string {\n if (this.isEmpty(datetime)) {\n return undefined;\n } else {\n // transform value to memoent value to avoid error\n const formattedVal = moment(datetime).format();\n const val = formattedVal.substring(0, 19).replace('T', ' ');\n return this.isEmpty(val) ? undefined : val;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'rxjs';\n\nimport * as _ from 'lodash';\n\nimport { LeafNode, GroupNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport { ObsAdapterHelper } from './obs-adapter-helper';\n\n@Injectable()\nexport class ObsValueAdapter implements ValueAdapter {\n constructor(private helper: ObsAdapterHelper) {}\n\n generateFormPayload(form: Form) {\n return this.helper.getObsNodePayload(form.rootNode);\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Get obs Payload\n // return this.getObsPayload(questionNodes);\n }\n\n populateForm(form: Form, payload) {\n this.helper.setNodeValue(form.rootNode, payload);\n\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Extract set obs\n // this.setValues(questionNodes, payload);\n }\n\n // TODO: Get rid of all the functions below as they will not be needed\n // once the helper is stable\n\n setValues(nodes, payload?, forcegroup?) {\n if (nodes) {\n for (const node of nodes) {\n if (node instanceof LeafNode) {\n this.setObsValue(node, payload);\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n } else if (\n (node.question &&\n node.question.extras &&\n node.question.renderingType === 'group') ||\n forcegroup\n ) {\n const groupObs = _.find(payload, (o: any) => {\n return (\n o.concept.uuid === node.question.extras.questionOptions.concept &&\n o.groupMembers\n );\n });\n if (groupObs) {\n if (node.node) {\n node.node['initialValue'] = groupObs;\n }\n\n this.setValues(node.groupMembers, groupObs.groupMembers);\n }\n if (forcegroup && node.payload) {\n this.setValues(node.groupMembers, node.payload.groupMembers);\n }\n } else if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n this.setComplexObsValue(node, payload);\n } else if (\n node.question &&\n node.question.extras &&\n node.question.renderingType === 'repeating' &&\n !forcegroup\n ) {\n this.setRepeatingGroupValues(node, payload);\n node.node.control.updateValueAndValidity();\n } else {\n throw new Error('not implemented');\n }\n }\n }\n }\n\n setObsValue(node, payload) {\n if (\n (node.question &&\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n (node.question.extras.type === 'complex-obs-child' &&\n node.question.extras.questionOptions.obsField === 'value')) &&\n node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||\n node.question.extras.questionOptions.rendering !== 'checkbox' ||\n node.question.extras.questionOptions.rendering !== 'multi-select'\n ) {\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (obs) {\n if (obs.value instanceof Object) {\n node.control.setValue(obs.value.uuid);\n node.control.updateValueAndValidity();\n } else {\n node.control.setValue(obs.value);\n node.control.updateValueAndValidity();\n }\n node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };\n }\n } else {\n const multiObs = _.filter(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (multiObs && multiObs.length > 0) {\n node.control.setValue(this.getMultiselectValues(multiObs));\n node.control.updateValueAndValidity();\n node['initialValue'] = multiObs;\n }\n }\n }\n\n setComplexObsValue(node, payload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n // set the usual obs value\n this.setObsValue(valueField, payload);\n\n // set the obs date\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n\n if (obs) {\n dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };\n (dateField as LeafNode).control.setValue(obs.obsDatetime);\n (dateField as LeafNode).control.updateValueAndValidity();\n }\n }\n\n getMultiselectValues(multiObs) {\n const values = [];\n for (const m of multiObs) {\n values.push(m.value.uuid);\n }\n return values;\n }\n\n setRepeatingGroupValues(node, payload) {\n const groupRepeatingObs = _.filter(payload, (o: any) => {\n const found =\n o.concept.uuid === node.question.extras.questionOptions.concept;\n let intersect = false;\n if (found && o.groupMembers) {\n const obs = o.groupMembers.map((a) => {\n return a.concept.uuid;\n });\n\n const schemaQuestions = node.question.questions.map((a) => {\n return a.extras.questionOptions.concept;\n });\n\n intersect = _.intersection(obs, schemaQuestions).length > 0;\n }\n return found && intersect;\n });\n if (groupRepeatingObs.length > 0) {\n node.node['initialValue'] = groupRepeatingObs;\n for (let i = 0; i < groupRepeatingObs.length; i++) {\n node.node.createChildNode();\n }\n }\n const groups = [];\n let index = 0;\n for (const child of node.node.children) {\n const children = Object.keys(child.children).map(function (key) {\n return child.children[key];\n });\n const groupPayload = groupRepeatingObs[index];\n groups.push({\n question: node.question,\n groupMembers: children,\n payload: groupPayload\n });\n index++;\n }\n this.setValues(groups, groupRepeatingObs, true);\n }\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n for (const section of page.page) {\n arrays.push(section.section);\n }\n }\n return merged.concat.apply([], arrays);\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n\n processGroup(obs, obsPayload) {\n if (\n obs.question &&\n obs.question.extras &&\n obs.question.extras.questionOptions.rendering === 'group'\n ) {\n const members = _.filter(\n this.getObsPayload(obs.groupMembers),\n (o: any) => {\n return o.value !== '';\n }\n );\n\n const mappedMembers = members.map((a) => {\n return a.voided;\n });\n if (members.length > 0 && mappedMembers.every(Boolean)) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n voided: true\n });\n } else if (members.length > 0) {\n if (obs.node.initialValue) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n groupMembers: members\n });\n } else {\n obsPayload.push({\n concept: obs.question.extras.questionOptions.concept,\n groupMembers: members\n });\n }\n }\n }\n }\n\n mapInitialGroup(group) {\n let current = {};\n for (const member of group.groupMembers) {\n let value: any = '';\n if (member.value instanceof Object) {\n value = member.value.uuid;\n } else if (member.value) {\n value = member.value;\n } else if (member.groupMembers && member.groupMembers.length > 0) {\n current = this.mapInitialGroup(group);\n }\n current[member.concept.uuid + ':' + value] = value;\n }\n return current;\n }\n\n mapModelGroup(node, value) {\n const current = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n const groupQuestion: any = _.find(node.question.questions, {\n key: key\n });\n const modelValue = value[key];\n if (modelValue instanceof Object) {\n } else if (modelValue !== '') {\n current[\n groupQuestion.extras.questionOptions.concept + ':' + modelValue\n ] = modelValue;\n }\n }\n }\n return current;\n }\n\n processRepeatingGroups(node, obsPayload) {\n const initialValues = [];\n if (node.node.initialValue) {\n for (const group of node.node.initialValue) {\n initialValues.push({\n uuid: group.uuid,\n value: this.mapInitialGroup(group)\n });\n }\n }\n const repeatingModel = [];\n for (const value of node.node.control.value) {\n repeatingModel.push({ value: this.mapModelGroup(node, value) });\n }\n const deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);\n const newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);\n const groupConcept = node.question.extras.questionOptions.concept;\n let newObsPayload = [];\n if (deleted.length > 0) {\n const deletedObs = this.createGroupDeletedObs(deleted);\n for (const d of deletedObs) {\n obsPayload.push(d);\n }\n if (newObs.length > 0) {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n } else {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n\n if (newObsPayload.length > 0) {\n for (const p of newObsPayload) {\n obsPayload.push(p);\n }\n }\n }\n\n leftOuterJoinArrays(first, second) {\n const unique = first.filter(function (obj) {\n return !second.some(function (obj2) {\n return _.isEqual(obj.value, obj2.value);\n });\n });\n return unique;\n }\n\n createGroupNewObs(payload, groupConcept) {\n const newPayload = [];\n for (const obs of payload) {\n const groupPayload = [];\n /* tslint:disable */\n for (let key in obs.value) {\n let concept = key.split(':')[0];\n let value = key.split(':')[1];\n groupPayload.push({ concept: concept, value: value });\n }\n newPayload.push({ concept: groupConcept, groupMembers: groupPayload });\n /* tslint:enable */\n }\n return newPayload;\n }\n\n createGroupDeletedObs(payload) {\n const deletedObs = [];\n for (const d of payload) {\n deletedObs.push({ uuid: d.uuid, voided: true });\n }\n return deletedObs;\n }\n\n getExactTime(datetime: string) {\n return datetime.substring(0, 19).replace('T', ' ');\n }\n\n processObs(obs, obsPayload) {\n if (obs.control && obs.question.extras) {\n const obsValue = {\n concept: obs.question.extras.questionOptions.concept,\n value:\n obs.question.extras.questionOptions.rendering === 'date' &&\n !this.isEmpty(obs.control.value)\n ? this.getExactTime(obs.control.value)\n : obs.control.value\n };\n\n if (\n obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n obs.question.extras.questionOptions.rendering === 'checkbox' ||\n obs.question.extras.questionOptions.rendering === 'multi-select'\n ) {\n const multis = this.processMultiSelect(\n obs.question.extras.questionOptions.concept,\n obs.control.value\n );\n if (obs.initialValue) {\n const mappedInitial = obs.initialValue.map((a) => {\n return {\n uuid: a.uuid,\n value: { concept: a.concept.uuid, value: a.value.uuid }\n };\n });\n const mappedCurrent = multis.map((a) => {\n return { value: a };\n });\n const deletedObs = this.leftOuterJoinArrays(\n mappedInitial,\n mappedCurrent\n );\n const newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);\n this.processDeletedMultiSelectObs(deletedObs, obsPayload);\n this.processNewMultiSelectObs(newObs, obsPayload);\n } else {\n this.processNewMultiSelectObs(multis, obsPayload);\n }\n } else {\n if (obs.initialValue && obs.initialValue.value && obsValue) {\n this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);\n } else if (obsValue.value !== '' && obsValue.value !== null) {\n obsPayload.push(obsValue);\n }\n }\n }\n }\n\n processComplexObs(node, obsPayload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n\n if (valueField) {\n // process obs as usual\n this.processObs(valueField, obsPayload);\n\n // obtain the last inserted obs and set the obsDatetime\n const createdPayload =\n obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;\n if (\n createdPayload &&\n ((createdPayload.concept &&\n createdPayload.concept ===\n node.question.extras.questionOptions.concept) ||\n (valueField.initialValue &&\n createdPayload.uuid === valueField.initialValue.obsUuid))\n ) {\n if (\n dateField.initialValue &&\n dateField.control.value !== dateField.initialValue.value\n ) {\n createdPayload.obsDatetime = dateField.control.value;\n }\n }\n }\n }\n\n processDeletedMultiSelectObs(values, obsPayload) {\n for (const value of values) {\n obsPayload.push({ uuid: value.uuid, voided: true });\n }\n }\n\n processNewMultiSelectObs(values, obsPayload) {\n for (const multi of values) {\n if (multi.value instanceof Object) {\n obsPayload.push(multi.value);\n } else {\n obsPayload.push(multi);\n }\n }\n }\n\n updateOrVoidObs(obsValue, initialValue, obsPayload) {\n if (this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, voided: true });\n } else if (!this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });\n }\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({\n page: page,\n label: o.children[key].question.label\n });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({\n section: section,\n node: o.children[key],\n label: o.children[key].question.label\n });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n }\n }\n return questions;\n }\n\n processMultiSelect(concept, values) {\n const multiSelectObs = [];\n if (values && values !== null) {\n for (const value of values) {\n const obs = {\n concept: concept,\n value: value\n };\n multiSelectObs.push(obs);\n }\n }\n return multiSelectObs;\n }\n\n isObs(node) {\n return (\n node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs'\n );\n }\n\n getObsPayload(nodes) {\n const obsPayload = [];\n for (const node of nodes) {\n if (this.isObs(node)) {\n if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'group')\n ) {\n this.processGroup(node, obsPayload);\n } else if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'repeating')\n ) {\n this.processRepeatingGroups(node, obsPayload);\n } else if (\n node instanceof GroupNode &&\n (node as GroupNode).question.extras.type === 'complex-obs'\n ) {\n this.processComplexObs(node, obsPayload);\n } else {\n this.processObs(node, obsPayload);\n }\n }\n }\n return obsPayload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport * as _ from 'lodash';\n@Injectable()\nexport class OrderValueAdapter implements ValueAdapter {\n formOrderNodes = [];\n private provider = '';\n\n generateFormPayload(form: Form) {\n this.formOrderNodes = [];\n this._setOrderProvider(form);\n this._findTestOrderQuestionNodes(form.rootNode);\n return this._createOrdersPayload(this.formOrderNodes, form);\n }\n\n populateForm(form: Form, payload) {\n form.existingOrders = payload;\n this.formOrderNodes = [];\n this._findTestOrderQuestionNodes(form.rootNode);\n const existingOrders = this._getExistingOrders(form);\n this._setOrderValues(this.formOrderNodes, existingOrders);\n }\n\n private _setOrderProvider(form: Form) {\n if (form.valueProcessingInfo.providerUuid) {\n this.provider = form.valueProcessingInfo.providerUuid;\n }\n }\n\n private _createOrdersPayload(orderNodes, form: Form) {\n const payload = [];\n const selectedOrders = [];\n let deletedOrders = [];\n const existingOrders = this._getExistingOrders(form);\n for (const orderNode of orderNodes) {\n const orderNodeValues = orderNode.control.value;\n const orders = [];\n if (existingOrders) {\n existingOrders.map(function (obj) {\n orders[obj.concept] = obj.concept;\n });\n }\n\n for (const order in orderNodeValues) {\n if (orderNodeValues.hasOwnProperty(order)) {\n const orderValue = orderNodeValues[order][orderNode.question.key];\n\n const payloadOrder = this._createPayloadOrder(\n orderValue,\n orderNode.question.extras\n );\n\n if (\n orders[orderValue] !== orderValue &&\n payloadOrder.concept !== ''\n ) {\n payload.push(payloadOrder);\n }\n selectedOrders[orderValue] = orderValue;\n if (payloadOrder.orderNumber === '') {\n delete payloadOrder.orderNumber;\n }\n if (payloadOrder.uuid === '') {\n delete payloadOrder.uuid;\n }\n }\n }\n }\n\n deletedOrders = this._getDeletedOrders(selectedOrders, existingOrders);\n return this._addDeletedOrdersToPayload(deletedOrders, payload);\n }\n\n private _getExistingOrders(form: Form) {\n if (form.existingOrders && form.existingOrders.orders) {\n let existingOrders = form.existingOrders.orders.map((o) => {\n return {\n concept: o.concept.uuid,\n orderNumber: o.orderNumber,\n orderUuid: o.uuid,\n voided: o.voided,\n dateVoided: o.auditInfo.dateVoided\n };\n });\n\n return (existingOrders = _.filter(existingOrders, (order: any) => {\n if (order.voided === true || order.dateVoided) {\n return false;\n } else {\n return true;\n }\n }));\n } else {\n return;\n }\n }\n\n private _setOrderValues(node, existingOrders) {\n this._findTestOrderQuestionNodes(node);\n\n const orderNodes = this.formOrderNodes;\n for (const orderNode of orderNodes) {\n this._setOrderNodeValues(orderNode, existingOrders);\n }\n }\n\n private _addDeletedOrdersToPayload(deletedOrders, payload): any {\n for (const order in deletedOrders) {\n if (deletedOrders.hasOwnProperty(order)) {\n payload.push({ uuid: deletedOrders[order], voided: true });\n }\n }\n return payload;\n }\n\n private _createPayloadOrder(orderConcept, quesitonExtras): any {\n const order = {\n concept: '',\n type: '',\n orderer: '',\n careSetting: ''\n };\n order.concept = orderConcept;\n order.type = quesitonExtras.questionOptions.orderType;\n order.orderer = this.provider;\n order.careSetting = quesitonExtras.questionOptions.orderSettingUuid;\n\n // delete orderer if provider not provided\n if (order.orderer === '') {\n delete order.orderer;\n }\n\n return order;\n }\n\n private _getDeletedOrders(selectedOrders, existingOrders): any {\n const deleteOrders = [];\n if (selectedOrders) {\n for (const order in existingOrders) {\n if (existingOrders.hasOwnProperty(order)) {\n const existingOrderConcept = existingOrders[order].concept;\n const selectedOrder = selectedOrders[existingOrderConcept];\n if (selectedOrder !== existingOrderConcept) {\n deleteOrders.push(existingOrders[order].orderUuid);\n }\n }\n }\n }\n // console.log('Deleted Orders ', deleteOrders);\n return deleteOrders;\n }\n\n private _setOrderNodeValues(node, orders) {\n let index = 0;\n node['initialValue'] = orders;\n for (const order of orders) {\n node.createChildNode();\n const value = {};\n value[node.question.key] = order.concept;\n const childNode = node.children[index];\n childNode.control.setValue(value);\n childNode['initialValue'] = value;\n childNode['orderNumber'] = order.orderNumber;\n // console.log('Set Value', node.children[index].control.value, node, childNode);\n index++;\n }\n }\n\n private _findTestOrderQuestionNodes(formNode) {\n if (formNode.children) {\n if (formNode.children instanceof Object) {\n for (const key in formNode.children) {\n if (formNode.children.hasOwnProperty(key)) {\n switch (formNode.children[key].question.renderingType) {\n case 'page':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'section':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'group':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n\n break;\n case 'repeating':\n if (formNode.children) {\n // tslint:disable-next-line:forin\n for (const node in formNode.children) {\n const question = formNode.children[node].question;\n if (\n question.extras &&\n question.extras.type === 'testOrder'\n ) {\n this.formOrderNodes.push(formNode.children[node]);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\n\nimport { ValueAdapter } from './value.adapter';\nimport { ObsValueAdapter } from './obs.adapter';\nimport { OrderValueAdapter } from './order.adapter';\n\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class EncounterAdapter implements ValueAdapter {\n constructor(\n public ordersAdapter: OrderValueAdapter,\n public obsAdapter: ObsValueAdapter\n ) {}\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n\n if (Array.isArray(payload.orders)) {\n this.ordersAdapter.populateForm(form, payload);\n }\n if (Array.isArray(payload.obs)) {\n this.obsAdapter.populateForm(form, payload.obs);\n }\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (payload === undefined || payload === null) {\n throw new Error('Expected payload');\n }\n\n const nodes = this.getEncounterNodes(rootNode);\n\n nodes.forEach((node) => {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n if (payload['encounterDatetime']) {\n // console.log('date', payload['encounterDatetime']);\n node.control.setValue(\n moment(payload['encounterDatetime']).toDate()\n );\n node.initialValue = moment(payload['encounterDatetime']).toDate();\n }\n break;\n case 'encounterProvider':\n if (\n Array.isArray(payload['encounterProviders']) &&\n payload['encounterProviders'].length > 0\n ) {\n const firstProvider: any =\n payload['encounterProviders'][0].provider;\n if (firstProvider && firstProvider.uuid) {\n // Very weird work around for an issue with setting the value\n node.control.setValue(firstProvider.uuid);\n setTimeout(() => {\n node.control.setValue(firstProvider.uuid);\n });\n node.initialValue = firstProvider.uuid;\n }\n }\n break;\n case 'encounterLocation':\n if (payload['location'] && payload['location'].uuid) {\n node.control.setValue(payload['location'].uuid);\n node.initialValue = payload['location'].uuid;\n }\n break;\n default:\n break;\n }\n });\n }\n\n generateFormPayload(form: Form) {\n const payload = this.generateNodePayload(form.rootNode);\n\n this.setNonFilledPayloadMembers(form, payload);\n\n payload['obs'] = this.obsAdapter.generateFormPayload(form) || [];\n\n payload['orders'] = this.ordersAdapter.generateFormPayload(form) || [];\n\n return payload;\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getEncounterNodes(rootNode);\n const payload = {};\n\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== ''\n ) {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n const dateValue = moment(node.control.value).utcOffset(\n rootNode.form.valueProcessingInfo.utcOffset || '+0300'\n );\n payload['encounterDatetime'] = dateValue.format(\n 'YYYY-MM-DD HH:mm:ss'\n );\n break;\n case 'encounterProvider':\n if (node.control.value && node.control.value !== '') {\n const providers = [];\n providers.push({\n provider: node.control.value,\n encounterRole: 'a0b03050-c99b-11e0-9572-0800200c9a66' // unknown provider role in the encounter as default\n });\n payload['encounterProviders'] = providers;\n }\n break;\n case 'encounterLocation':\n payload['location'] = node.control.value;\n break;\n default:\n break;\n }\n }\n });\n\n return payload;\n }\n\n getEncounterNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getEncounterNodes(rootNode, results);\n return results;\n }\n\n setNonFilledPayloadMembers(form: Form, payload) {\n if (form.valueProcessingInfo.patientUuid) {\n this.setPayloadPatientUuid(payload, form.valueProcessingInfo.patientUuid);\n }\n\n if (form.valueProcessingInfo.visitUuid) {\n this.setPayloadVisitUuid(payload, form.valueProcessingInfo.visitUuid);\n }\n\n if (form.valueProcessingInfo.encounterTypeUuid) {\n this.setPayloadEncounterTypeUuid(\n payload,\n form.valueProcessingInfo.encounterTypeUuid\n );\n }\n\n if (form.valueProcessingInfo.formUuid) {\n this.setPayloadFormUuid(payload, form.valueProcessingInfo.formUuid);\n }\n\n if (form.valueProcessingInfo.encounterUuid) {\n this.setPayloadEncounterUuid(\n payload,\n form.valueProcessingInfo.encounterUuid\n );\n }\n }\n\n setPayloadPatientUuid(payload, patientUuid: string) {\n payload['patient'] = patientUuid;\n }\n\n setPayloadVisitUuid(payload, visitUuid: string) {\n payload['visit'] = visitUuid;\n }\n\n setPayloadEncounterTypeUuid(payload, encounterTypeUuid: string) {\n payload['encounterType'] = encounterTypeUuid;\n }\n\n setPayloadFormUuid(payload, formUuid: string) {\n payload['form'] = formUuid;\n }\n\n setPayloadEncounterUuid(payload, encounterUuid: string) {\n payload['uuid'] = encounterUuid;\n }\n\n private _getEncounterNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (this._isEncounterNode(rootNode)) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getEncounterNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getEncounterNodes(child, array);\n });\n }\n }\n\n private _isEncounterNode(node: NodeBase): boolean {\n if (\n node.question.extras &&\n (node.question.extras.type === 'encounterDatetime' ||\n node.question.extras.type === 'encounterProvider' ||\n node.question.extras.type === 'encounterLocation')\n ) {\n return true;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAttribuAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAttributeNodes(rootNode);\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n if (node.question.extras.questionOptions.isSimpleValue === true) {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n value: node.control.value\n });\n } else {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n hydratedObject: node.control.value\n });\n }\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (!Array.isArray(payload)) {\n throw new Error('Expected an array of attributes');\n }\n\n const nodes = this.getPersonAttributeNodes(rootNode);\n\n nodes.forEach((node) => {\n payload.forEach((element) => {\n if (\n element.attributeType.uuid ===\n node.question.extras.questionOptions.attributeType\n ) {\n console.log(element.attributeType,element)\n if (element.value && element.value.uuid) {\n node.control.setValue(element.value.uuid);\n node.initialValue = element.value.uuid;\n } else {\n node.control.setValue(element.value);\n node.initialValue = element.value;\n }\n }\n });\n });\n }\n\n getPersonAttributeNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAttributesNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAttributesNodes(\n rootNode: NodeBase,\n array: Array<NodeBase>\n ) {\n if (\n rootNode.question.extras &&\n (rootNode.question.extras.type === 'personAttribute' ||\n rootNode.question.extras.type === 'amrsLocations' ||\n rootNode.question.extras.type === 'nonAmrsLocations' ||\n rootNode.question.extras.type === 'siblingLocations')\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAttributesNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAttributesNodes(child, array);\n });\n }\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n ViewChild,\n Output,\n EventEmitter,\n Renderer2\n} from '@angular/core';\nimport { SelectComponent } from '../../components/select/select.component';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n@Component({\n selector: 'remote-select',\n template: `<div>\n <ng-select\n [id]=\"componentID\"\n [noFilter]=\"0\"\n (selected)=\"selected($event)\"\n (deselected)=\"removed($event)\"\n [options]=\"items\"\n [allowClear]=\"true\"\n [placeholder]=\"placeholder\"\n [notFoundMsg]=\"notFoundMsg\"\n (typed)=\"typed($event)\"\n tabindex=\"0\"\n >\n </ng-select>\n <div *ngIf=\"loading\">resolving....</div>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteSelectComponent),\n multi: true\n }\n ]\n})\nexport class RemoteSelectComponent implements OnInit, ControlValueAccessor {\n // @Input() dataSource: DataSource;\n @Input() placeholder = 'Search...';\n @Input() componentID: string;\n items = [];\n value = [];\n loading = false;\n searchText = '';\n notFoundMsg = 'match no found';\n @Output() done: EventEmitter<any> = new EventEmitter<any>();\n\n characters = [];\n @ViewChild(SelectComponent) private selectC: SelectComponent;\n\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n if (this._dataSource && this._dataSource.dataFromSourceChanged) {\n this.subscribeToDataSourceDataChanges();\n }\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n subscribeToDataSourceDataChanges() {\n this._dataSource.dataFromSourceChanged.subscribe((results) => {\n if (results.length > 0) {\n this.items = results;\n this.notFoundMsg = '';\n // console.log('updating items', results, this.selectC.value);\n this.restoreSelectedValue(this.selectC.value, results);\n } else {\n this.notFoundMsg = 'Not found';\n this.items = [];\n }\n });\n }\n\n public typed(value: any): void {\n this.search(value);\n }\n search(value: string) {\n if (this.dataSource) {\n this.searchText = value;\n this.notFoundMsg = 'Loading.........';\n this.dataSource.searchOptions(value).subscribe(\n (result) => {\n if (result.length > 0) {\n const existing = _.map(this.value, _.clone);\n const concat = existing.concat(result);\n this.items = _.uniqBy(concat, 'value');\n }\n this.notFoundMsg = '';\n },\n (error) => {\n this.notFoundMsg = 'Errored';\n }\n );\n }\n }\n\n restoreSelectedValue(value, results) {\n let found = false;\n _.each(results, (item) => {\n if (item.value === value) {\n setTimeout(() => {\n this.selectC.select(value);\n this.selectC.value = value;\n });\n found = true;\n }\n });\n if (!found) {\n // console.log('not found after loading items', value, results);\n setTimeout(() => {\n this.selectC.select('');\n this.selectC.value = '';\n });\n }\n }\n\n canSearch(searchText: string) {\n return (\n (searchText.length - this.searchText.length >= 2 ||\n (searchText.length - this.searchText.length <= 2 &&\n searchText !== '')) &&\n this.loading === false\n );\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value && value !== '') {\n if (this.dataSource) {\n this.loading = true;\n this.dataSource.resolveSelectedValue(value).subscribe(\n (result: any) => {\n this.items = [result];\n setTimeout(() => {\n this.selectC.select(result.value);\n this.selectC.value = result.value;\n });\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n removed(event) {\n console.log('Removed');\n this.propagateChange('');\n }\n selected(event) {\n this.propagateChange(event.value);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (change: any) => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { RemoteSelectComponent } from './remote-select.component';\n\n@NgModule({\n imports: [CommonModule, SelectModule, FormsModule],\n exports: [RemoteSelectComponent],\n declarations: [RemoteSelectComponent],\n providers: []\n})\nexport class RemoteSelectModule {}\n","import { Component, OnInit, OnChanges, Input } from '@angular/core';\n\nimport { LeafNode } from '../../form-entry/form-factory/form-node';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\ninterface DailyScheduled {\n date: string;\n count: {\n scheduled: number;\n };\n}\ninterface WeeeklyScheduleReport {\n reports: {\n attended: any;\n hasNotReturned: any;\n scheduled: any;\n };\n results: DailyScheduled[];\n totals: {\n attended: number;\n hasNotReturned: number;\n scheduled: number;\n };\n}\ninterface DayCount {\n date: string;\n count: number;\n}\n\n@Component({\n selector: 'appointments-overview',\n template: `<div *ngIf=\"showAppointments\" class=\"appointments\">\n <p *ngIf=\"loadingAppointments\">\n <span *ngIf=\"!appointmentsLoaded && errorLoadingAppointments\"\n >Error checking appointments</span\n >\n <span *ngIf=\"loadingAppointments\"\n ><span class=\"fa fa-spinner fa-spin\"></span>Checking appointments...</span\n >\n </p>\n <div *ngIf=\"appointmentsLoaded && !errorLoadingAppointments\">\n <table\n *ngIf=\"appointments.length > 0\"\n class=\"table table-stripped table-bordered\"\n >\n <thead>\n <tr>\n <th\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span>{{ appointment.date }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span\n ><strong\n ><em>{{ appointment.count }}</em></strong\n ></span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n`,\n styles: [`.appointments{margin-top:12px;font-size:12px;color:#999}.appointments p{padding-top:12px}.appointments th{border-bottom:0!important;color:#333}.appointments td span,.appointments th span{display:block}.appointments td.active,.appointments th.active{background-color:#3c8dbc;color:#fff!important;padding:0}.appointments td.active span,.appointments th.active span{padding:4px}.appointments span.fa{display:inline-block;margin-right:7px}`]\n})\nexport class AppointmentsOverviewComponent implements OnInit, OnChanges {\n @Input() node: LeafNode;\n showAppointments = false;\n loadingAppointments = false;\n errorLoadingAppointments = false;\n appointmentsLoaded = false;\n appointments: Array<any> = [];\n today = '';\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.node.control.valueChanges.subscribe((v) => {\n this.resetProperties();\n const node = this.node;\n if (\n node.question.extras.questionOptions.concept &&\n (node.question.extras.questionOptions.concept ===\n 'a8a666ba-1350-11df-a1f1-0026b9348838' ||\n node.question.extras.questionOptions.concept ===\n 'a89d2398-1350-11df-a1f1-0026b9348838')\n ) {\n // console.log('what change is here', this.showAppointments);\n if (!this.showAppointments) {\n this.loadingAppointments = true;\n this.showAppointments = true;\n let dataSource;\n if (node.form && node.form.dataSourcesContainer.dataSources) {\n dataSource =\n node.form.dataSourcesContainer.dataSources\n .monthlyScheduleResourceService;\n }\n const locationUuid =\n node.form.dataSourcesContainer.dataSources.userLocation.uuid;\n if (dataSource && locationUuid) {\n const startDate = moment(v)\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD');\n const endDate = moment(v)\n .endOf('week')\n .subtract(1, 'day')\n .format('YYYY-MM-DD');\n this.today = moment(v).format('DD-MM-YYYY');\n dataSource\n .getMonthlySchedule({\n startDate: startDate,\n endDate: endDate,\n limit: 5,\n locationUuids: locationUuid,\n department: 'HIV',\n groupBy: 'groupByPerson,groupByAttendedDate,groupByRtcDate'\n })\n .subscribe(\n (data: WeeeklyScheduleReport) => {\n const _data: DayCount[] = [];\n const weeklyMap = new Map();\n // create the weeks schedule with zero appointments\n for (let i = 0; i < 5; i++) {\n const scheduleDate = moment(v)\n .startOf('week')\n .add(i, 'day')\n .format('YYYY-MM-DD');\n const scheduledObj: DailyScheduled = {\n date: scheduleDate,\n count: {\n scheduled: 0\n }\n };\n weeklyMap.set(scheduleDate, scheduledObj);\n }\n\n const results: DailyScheduled[] = data.results || [];\n // replace placeholder schedules with actual schedules in the map obj\n results.forEach((scheduled: DailyScheduled) => {\n weeklyMap.set(scheduled.date, scheduled);\n });\n // retrieve scheduled obj from map to data array\n weeklyMap.forEach((value: DailyScheduled, key: string) => {\n const dayCount: DayCount = {\n date: key,\n count: value.count.scheduled || 0\n };\n _data.push(dayCount);\n });\n this.appointmentsLoaded = true;\n this.loadingAppointments = false;\n\n this.appointments = _data;\n },\n (error: any) => {\n this.loadingAppointments = false;\n this.errorLoadingAppointments = true;\n this.showAppointments = false;\n console.error(error);\n }\n );\n } else {\n this.showAppointments = false;\n this.errorLoadingAppointments = true;\n }\n }\n }\n });\n }\n\n resetProperties() {\n this.loadingAppointments = false;\n this.appointmentsLoaded = false;\n this.errorLoadingAppointments = false;\n this.showAppointments = false;\n this.appointments = [];\n this.today = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n GroupNode,\n LeafNode,\n ArrayNode,\n NodeBase\n} from '../form-entry/form-factory/form-node';\nimport * as _ from 'lodash';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\nimport { Observable } from 'rxjs';\nimport { SelectOption } from '../form-entry/question-models/interfaces/select-option';\nconst comma = ', ';\nconst newLine = '\\n';\n\n@Injectable()\nexport class EncounterViewerService implements DataSource {\n constructor() {}\n public resolveSelectedValue(value: any): Observable<SelectOption> {\n return;\n }\n public searchOptions(searchText: any): Observable<SelectOption[]> {\n return;\n }\n public fileUpload(data: any): Observable<any> {\n return;\n }\n public fetchFile(url: any): Observable<any> {\n return;\n }\n\n public resolveSelectedValueFromSchema(\n answerUuid: string,\n schema: any\n ): string {\n let label;\n if (schema.pages) {\n _.forEach(schema.pages, (page) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, page);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.sections) {\n _.forEach(schema.sections, (section) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, section);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.questions) {\n _.forEach(schema.questions, (question) => {\n if (question.questions) {\n const l = this.resolveSelectedValueFromSchema(answerUuid, question);\n if (l) {\n label = l;\n }\n } else {\n if (question.questionOptions.answers) {\n _.forEach(question.questionOptions.answers, (answer) => {\n if (answer.concept === answerUuid) {\n label = answer.label;\n }\n });\n } else if (question.questionOptions.selectableOrders) {\n _.forEach(question.questionOptions.selectableOrders, (order) => {\n if (order.concept === answerUuid) {\n label = order.label;\n }\n });\n }\n }\n });\n }\n return label;\n }\n\n public hasAnswer(node: NodeBase) {\n let answered = false;\n if (node.initialValue) {\n answered = true;\n }\n return answered;\n }\n\n public questionsAnswered(node: any, answered?: boolean[]) {\n const $answered = answered || [];\n if (node.question.renderingType === 'page') {\n _.forEach(node.children, (childNode: any) => {\n this.questionsAnswered(childNode, $answered);\n });\n } else if (node.question.renderingType === 'section') {\n _.forEach(node.children, (childNode) => {\n if (childNode.question.renderingType === 'group') {\n _.forEach(childNode.children, (child) => {\n const ans = this.questionsAnswered(child, $answered);\n if (ans) {\n $answered.push(ans);\n }\n });\n } else if (this.hasAnswer(childNode)) {\n $answered.push(true);\n }\n });\n } else {\n return this.hasAnswer(node);\n }\n\n if ($answered.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n\n public isDate(val: any) {\n if (Date.parse(val)) {\n return true;\n } else {\n return false;\n }\n }\n public convertTime(unixTimestamp: number) {\n const a = new Date(unixTimestamp);\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n const year = a.getFullYear();\n const month = months[a.getMonth()];\n const date = a.getDate();\n const hour = a.getHours();\n const min = a.getMinutes();\n const sec = a.getSeconds();\n const suffix = hour < 12 ? 'AM' : 'PM';\n let time;\n if (hour === 0 && min === 0) {\n time = date + ' ' + month + ' ' + year;\n } else {\n time =\n date +\n ' ' +\n month +\n ' ' +\n year +\n ' ' +\n hour +\n ':' +\n min +\n suffix +\n ' (EAT)';\n }\n return time;\n }\n}\n","import { Component, OnInit, Input, Inject } from '@angular/core';\nimport {\n NodeBase,\n GroupNode,\n LeafNode\n} from '../../form-entry/form-factory/form-node';\nimport { QuestionBase } from '../../form-entry/question-models/question-base';\nimport * as _ from 'lodash';\n\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { DataSources } from '../../form-entry/data-sources/data-sources';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\n\nimport { EncounterViewerService } from '../encounter-viewer.service';\n\n@Component({\n selector: 'encounter-viewer',\n template: `<div class=\"viewer\">\n <div *ngIf=\"rootNode.question.renderingType === 'form'\" class=\"form\">\n <div *ngFor=\"let question of rootNode.question.questions; let i = index\">\n <div *ngIf=\"questionsAnswered(rootNode.children[question.key])\">\n <div [attr.id]=\"'page' + i\" class=\"panel panel-default\">\n <p class=\"page-label panel-heading text-primary\">\n {{ question.label }}\n </p>\n <div class=\"panel-body\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentComponent]=\"this\"\n [parentGroup]=\"rootNode.control\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.renderingType === 'page'\" class=\"page\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n\n <div\n *ngIf=\"\n rootNode.question.renderingType === 'section' &&\n questionsAnswered(rootNode)\n \"\n class=\"section\"\n >\n <div class=\"panel panel-primary\">\n <p class=\"panel-heading section-label\">{{ rootNode.question.label }}</p>\n </div>\n <div *ngFor=\"let question of rootNode.question.questions\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [parentComponent]=\"this\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n </div>\n\n <!--Leaf Controls-->\n <div style=\"margin-left: 10px\">\n <form *ngIf=\"rootNode.question.controlType === 0\" [formGroup]=\"parentGroup\">\n <div *ngIf=\"rootNode.control.value\">\n <div class=\"question-answer\">\n <label\n *ngIf=\"rootNode.question.label\"\n [attr.for]=\"rootNode.question.key\"\n style=\"font-weight: 400\"\n >\n {{ rootNode.question.label }}\n </label>\n <span *ngIf=\"checkForColon(rootNode.question.label)\">:</span>\n <div\n [ngSwitch]=\"rootNode.question.renderingType\"\n style=\"display: inline-block; font-weight: bold\"\n >\n <div *ngSwitchCase=\"'file'\">\n <file-preview\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"fileDataSource\"\n ></file-preview>\n </div>\n <div *ngSwitchCase=\"'remote-select'\">\n <remote-answer\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"remoteDataSource\"\n ></remote-answer>\n </div>\n <div *ngSwitchDefault style=\"display: inline-block\">\n <question-control\n [schema]=\"_schema\"\n [value]=\"rootNode.control.value\"\n [dataSource]=\"customDataSource\"\n ></question-control>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n\n <!--Array Controls-->\n <div\n *ngIf=\"rootNode.question.controlType === 1 && questionsAnswered(rootNode)\"\n >\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'repeating'\">\n <div [ngSwitch]=\"rootNode.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <label>{{ rootNode.question.label }}:</label>\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\">\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.controlType === 2\">\n <!--GROUP-->\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n <div *ngSwitchCase=\"'field-set'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n</div>\n`,\n styles: [`.page-label{font-size:20px;font-weight:700}.section-label{font-size:18px;font-weight:500}.panel-primary{border:none!important}.question-answer{font-size:16px}.panel{margin-bottom:5px}div.section{margin-bottom:15px!important}.line-breaker{white-space:pre-line}hr{margin:10px}`]\n})\nexport class EncounterViewerComponent implements OnInit {\n public rootNode: NodeBase;\n public enc: any;\n public fileDataSource: DataSource;\n public remoteDataSource: DataSource;\n public customDataSource: DataSource;\n public _schema;\n @Input() public parentGroup: AfeFormGroup;\n @Input() public parentComponent: EncounterViewerComponent;\n @Input() set node(rootNode: NodeBase) {\n this.rootNode = rootNode;\n }\n\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n\n @Input() public set encounter(enc: any) {\n this.enc = enc;\n }\n @Input() set form(form: any) {\n this.rootNode = form.rootNode;\n this._schema = form.schema;\n console.log(this.getQuestionNodes(this.traverse(this.rootNode)));\n }\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private dataSources: DataSources\n ) {}\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n arrays.push(page.page);\n }\n return merged.concat.apply([], arrays);\n }\n public ngOnInit() {\n if (this.rootNode) {\n }\n if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'file'\n ) {\n this.fileDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'remote-select'\n ) {\n this.remoteDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else {\n this.customDataSource = this.encounterViewerService;\n }\n }\n\n public questionsAnswered(node: any) {\n const $answered = this.encounterViewerService.questionsAnswered(node);\n return $answered;\n }\n\n public questionAnswered(node: NodeBase) {\n const answered = this.encounterViewerService.hasAnswer(node);\n return answered;\n }\n\n public checkForColon(questionLabel: string) {\n if (questionLabel.indexOf(':') === -1) {\n return true;\n } else {\n return false;\n }\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({ page: page });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({ section: section });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n } else {\n console.log('Console.log', o);\n }\n }\n return questions;\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Form } from '../form-entry/form-factory/form';\nimport { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { DataSources } from '../form-entry/data-sources/data-sources';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\nimport { combineLatest, BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs/Observable';\n\nimport * as moment_ from 'moment';\nimport * as _ from 'lodash';\nimport * as pdfMake from 'pdfmake/build/pdfmake.js';\nimport 'pdfmake/build/vfs_fonts.js';\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\n\nconst moment = moment_;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncounterPdfViewerService {\n private remoteDataSource: DataSource;\n public error: boolean;\n public errorMessage: string;\n public showLoader: boolean;\n public subscribedAnswers: any = {\n questions: {\n stack: []\n },\n answers: []\n };\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private obsValueAdapter: ObsValueAdapter,\n private dataSources: DataSources\n ) {}\n\n getPages(\n pages: any,\n form: Form,\n remoteSelectsOnly?: boolean,\n remoteAns?: any\n ): any[] {\n const content = [];\n let remoteQuestions = [];\n\n for (const page of pages) {\n if (remoteSelectsOnly) {\n remoteQuestions = remoteQuestions.concat(\n this.getSections(page.page, form, false, remoteAns)\n );\n } else {\n for (const question of form.rootNode.question.questions) {\n if (\n page.label ===\n form.rootNode.children[question.key].question.label &&\n this.encounterViewerService.questionsAnswered(\n form.rootNode.children[question.key]\n )\n ) {\n content.push({\n style: 'tableExample',\n table: {\n widths: ['*'],\n headerRows: 1,\n keepWithHeaderRows: 1,\n body: [\n [{ text: page.label, style: 'tableHeader' }],\n [\n {\n style: 'tableExample',\n table: {\n widths: ['*'],\n body: this.getSections(page.page, form, true, remoteAns)\n },\n layout: 'noBorders',\n margin: [5, 0, 0, 0]\n }\n ]\n ]\n },\n layout: {\n hLineWidth: function (i, node) {\n return i === 0 || i === node.table.body.length ? 0.5 : 0.5;\n },\n vLineWidth: function (i, node) {\n return i === 0 || i === node.table.widths.length ? 0.5 : 0.5;\n },\n hLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n },\n vLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n }\n }\n });\n }\n }\n }\n }\n return remoteSelectsOnly ? remoteQuestions : content;\n }\n\n getSections(sections: any, form: Form, resolve: any, remoteAns: any): any[] {\n const content = [];\n const answeredSections = [];\n let questions: Array<Observable<any>> = [];\n\n sections.map((s) => {\n if (this.encounterViewerService.questionsAnswered(s.node)) {\n answeredSections.push(s);\n }\n });\n\n for (const section of answeredSections) {\n questions = questions.concat(this.getRemoteSectionData(section.section));\n }\n\n if (resolve && remoteAns) {\n for (const section of answeredSections) {\n content.push([\n {\n table: {\n widths: ['*'],\n body: [\n [{ text: section.label, style: 'tableSubheader' }],\n [this.getSectionData(section.section, remoteAns, form)]\n ]\n },\n layout: 'noBorders'\n }\n ]);\n }\n return content;\n } else {\n return questions;\n }\n }\n\n private appendResolvedAnswer(\n resolvedAnswer: any,\n questions: any,\n node?: any\n ) {\n if (resolvedAnswer) {\n questions.stack.push({\n text: [\n `${node ? node.question.label : 'Question label'}${\n node ? (node.question.label.indexOf(':') > 1 ? '' : ':') : ''\n } `,\n { text: `${resolvedAnswer}`, bold: true }\n ],\n style: 'answers'\n });\n }\n }\n\n // get remote selects only\n getRemoteSectionData(section: any): any {\n const questions: Array<Observable<any>> = [];\n this.subscribedAnswers.questions.stack = [];\n\n for (const node of section) {\n if (node.question.renderingType === 'remote-select') {\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n if (node.control.value !== '') {\n if (this.remoteDataSource) {\n questions.push(\n this.remoteDataSource.resolveSelectedValue(node.control.value)\n );\n }\n }\n }\n }\n return questions;\n }\n\n // merge remote selects\n getSectionData(section: any, remoteAns: any[], form: Form): any {\n const questions = {\n stack: []\n };\n\n let resolvedAnswer = '';\n\n for (const node of section) {\n switch (node.question.renderingType) {\n case 'group':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'field-set':\n if (node.children) {\n const groupMembers = [];\n const result = Object.keys(node.children).map(\n (key) => node.children[key]\n );\n\n if (result) {\n groupMembers.push(result);\n questions.stack.push(\n this.getSectionData(groupMembers[0], remoteAns, form)\n );\n }\n }\n break;\n\n case 'repeating':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'remote-select':\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n for (const ans of remoteAns) {\n if (ans.value === node.control.value) {\n this.appendResolvedAnswer(ans.label, questions, node);\n }\n }\n break;\n\n default:\n const answer = node.control.value;\n if (answer) {\n resolvedAnswer = this.resolveValue(answer, form);\n this.appendResolvedAnswer(resolvedAnswer, questions, node);\n }\n }\n }\n\n return questions;\n }\n\n resolveValue(answer: any, form: Form, arrayElement?: boolean): any {\n if (answer !== '') {\n if (this.isUuid(answer)) {\n const val = this.encounterViewerService.resolveSelectedValueFromSchema(\n answer,\n form.schema\n );\n if (!arrayElement) {\n if (val) {\n return val.toUpperCase();\n } else {\n return answer;\n }\n } else {\n return val;\n }\n } else if (_.isArray(answer)) {\n const arr = [];\n _.forEach(answer, (elem) => {\n arr.push(this.resolveValue(elem, form, true));\n });\n return arr.toString();\n } else if (this.isDate(answer)) {\n if (!arrayElement) {\n return this.encounterViewerService.convertTime(answer);\n } else {\n return this.encounterViewerService.convertTime(answer);\n }\n } else if (typeof answer === 'object') {\n const values = [];\n const result = Object.keys(answer).map((key) => [key, answer[key]]);\n\n values.push(result);\n return values;\n } else {\n return answer;\n }\n }\n }\n\n generatePdfDefinition(form: Form): any {\n const docDefinition$ = new BehaviorSubject<any>({});\n const remoteSelects = this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n true\n );\n\n combineLatest(remoteSelects).subscribe((remoteAns) => {\n if (remoteAns) {\n const docDefinition = {\n pageSize: 'A4',\n content: this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n false,\n remoteAns\n ),\n styles: {\n answers: {\n fontSize: 8\n },\n banner: {\n fontSize: 9,\n bold: true,\n margin: [50, 15, 30, 0]\n },\n bannerItem: {\n margin: [2, 2, 2, 2]\n },\n bannerLabel: {\n color: '#2f4f4f'\n },\n confidential: {\n color: 'red',\n fontSize: 8,\n bold: true,\n margin: [60, 0, 0, 0]\n },\n footer: {\n alignment: 'center',\n fontSize: 8,\n bold: true\n },\n header: {\n fontSize: 9,\n bold: true,\n margin: [5, 5, 5, 5]\n },\n pageNumber: {\n color: '#2f4f4f',\n fontSize: 6\n },\n tableExample: {\n fontSize: 10,\n margin: [5, 0, 0, 5]\n },\n tableHeader: {\n fillColor: '#f5f5f5',\n width: ['100%'],\n borderColor: '#333',\n fontSize: 9,\n bold: true,\n margin: [5, 0, 5, 0]\n },\n tableSubheader: {\n fillColor: '#337ab7',\n width: ['100%'],\n fontSize: 9,\n color: 'white',\n margin: [5, 0, 5, 0]\n },\n timestamp: {\n bold: true,\n color: '#2f4f4f'\n }\n },\n defaultStyle: {\n fontSize: 7\n }\n };\n docDefinition$.next(docDefinition);\n }\n });\n\n return docDefinition$;\n }\n\n displayPdf(form) {\n const pdf = pdfMake;\n let patient;\n pdf.vfs = pdfMake.vfs;\n\n if (form.dataSourcesContainer.dataSources._dataSources) {\n patient =\n form.dataSourcesContainer.dataSources._dataSources['patientInfo'];\n }\n\n this.generatePdfDefinition(form).subscribe(\n (docDefinition) => {\n if (!_.isEmpty(docDefinition)) {\n if (typeof patient !== 'undefined') {\n const banner = [];\n\n if (patient.name) {\n banner.push({\n text: [\n { text: 'Name: ', style: 'bannerLabel' },\n { text: `${this.titleize(patient.name)}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.nid) {\n banner.push({\n text: [\n { text: 'ID: ', style: 'bannerLabel' },\n { text: `${patient.nid}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.birthdate) {\n banner.push({\n text: [\n { text: 'DOB: ', style: 'bannerLabel' },\n {\n text: `${moment(patient.birthdate).format('l')} (${\n patient.age\n } yo)`\n }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mui) {\n banner.push({\n text: [\n { text: 'MUI: ', style: 'bannerLabel' },\n { text: `${patient.mui}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mhn) {\n banner.push({\n text: [\n { text: 'MTRH No: ', style: 'bannerLabel' },\n { text: `${patient.mhn}` }\n ],\n style: 'bannerItem'\n });\n }\n\n docDefinition.header = {\n style: 'banner',\n table: {\n body: [banner]\n },\n layout: 'noBorders'\n };\n }\n\n docDefinition.footer = (currentPage, pageCount) => {\n return {\n style: 'footer',\n widths: ['*', 'auto'],\n table: {\n body: [\n [\n {\n text:\n 'Note: Confidentiality is one of the core duties of all medical practitioners. ' +\n \"Patients' personal health information should be kept private.\",\n style: 'confidential'\n },\n ''\n ],\n [\n {\n text: `Generated on ${new Date().toUTCString()}`,\n style: 'timestamp'\n },\n {\n text: `${currentPage.toString()} of ${pageCount}`,\n style: 'pageNumber'\n }\n ]\n ]\n },\n layout: 'noBorders'\n };\n };\n\n const win = window.open('', '_blank');\n pdf.createPdf(docDefinition).open({}, win);\n }\n },\n (error) => {\n console.log('Error: ', error);\n }\n );\n }\n\n isDate(val: any) {\n return moment(val, moment.ISO_8601, true).isValid();\n }\n\n isUuid(value: string) {\n return (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n );\n }\n\n titleize(str) {\n return str.replace(\n /\\w\\S*/g,\n (s) => s.charAt(0).toUpperCase() + s.substr(1).toLowerCase()\n );\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Form } from '../../form-entry/form-factory/form';\nimport { NodeBase } from '../../form-entry/form-factory/form-node';\nimport { EncounterAdapter } from '../../form-entry/value-adapters/encounter.adapter';\n\nimport { EncounterPdfViewerService } from '../encounter-pdf-viewer.service';\n\n@Component({\n selector: 'encounter-renderer',\n template: `<a\n type=\"button\"\n style=\"display: block; font-size: 28px; cursor: pointer\"\n class=\"text-right\"\n (click)=\"displayPdf()\"\n>\n <span class=\"glyphicon text-primary glyphicon-print\"></span>\n</a>\n<encounter-viewer\n class=\"card\"\n [form]=\"$form\"\n [encounter]=\"$enc\"\n></encounter-viewer>\n`,\n styles: [`.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}`]\n})\nexport class EncounterContainerComponent implements OnInit {\n public $form: Form;\n public $enc: any;\n\n @Input() public set form(form) {\n this.$form = form;\n }\n @Input() public set encounter(enc) {\n this.$enc = enc;\n }\n\n constructor(\n private encAdapter: EncounterAdapter,\n private encounterPdfViewerService: EncounterPdfViewerService\n ) {}\n\n ngOnInit() {}\n\n displayPdf() {\n this.encounterPdfViewerService.displayPdf(this.$form);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'question-control',\n styles: [`input{border:none;box-shadow:none;color:#000;background:#fff!important;padding-top:23px;display:block;position:relative}`],\n template: `<div>\n {{ innerValue }}\n</div>\n`\n})\nexport class QuestionControlComponent implements OnInit {\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n @Input() public set value(value) {\n this._value = value;\n }\n @Input() public set dataSource(dataSource: any) {\n this._dataSource = dataSource;\n }\n // The internal data model\n public innerValue: any = '';\n private _value: any;\n private _schema: any;\n private _dataSource: EncounterViewerService;\n constructor() {}\n\n ngOnInit() {\n this.writeValue(this._value);\n }\n public isUuid(value: string) {\n if (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n // Current time string.\n\n public writeValue(v: any, arrayElement?: boolean) {\n if (v !== this.innerValue) {\n if (this.isUuid(v)) {\n if (!arrayElement) {\n const val = this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n if (val) {\n this.innerValue = val.toUpperCase();\n } else {\n this.innerValue = v;\n }\n } else {\n return this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n }\n } else if (_.isArray(v)) {\n const arr = [];\n _.forEach(v, (el) => {\n arr.push(this.writeValue(el, true));\n });\n this.innerValue = arr;\n } else if (this.isDate(v)) {\n if (!arrayElement) {\n this.innerValue = this._dataSource.convertTime(v);\n } else {\n return this._dataSource.convertTime(v);\n }\n } else {\n if (!arrayElement) {\n this.innerValue = v;\n } else {\n return v;\n }\n }\n }\n }\n\n public isDate(str: string) {\n return this._dataSource.isDate(str) && !_.isNumber(str);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'file-preview',\n styles: [``],\n template: `<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!resultsIsPdf\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this._dataSource.fetchFile\"\n alt=\"image\"\n />\n </div>\n <a *ngIf=\"resultsIsPdf\" (click)=\"getUrl()\" style=\"cursor: pointer\"\n ><u>Open PDF</u></a\n > `,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FilePreviewComponent),\n multi: true\n }\n ]\n})\nexport class FilePreviewComponent implements ControlValueAccessor, OnInit {\n @Input() public source: any;\n public fileUuid = null;\n public pdfUrl: any;\n public resultsIsPdf = false;\n public _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor(private encounterService: EncounterViewerService) {}\n ngOnInit() {}\n // get accessor\n get value(): any {\n return this.fileUuid;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n this.checkFileType();\n }\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.resultsIsPdf = true;\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {\n // const files = event.srcElement.files;\n // const fileToLoad = files[0];\n // const fileReader = new FileReader();\n // fileReader.onload = (fileLoadedEvent) => {\n // const data = fileReader.result;\n // const fileType = data.substring('data:image/'.length, data.indexOf(';base64'));\n // const payload = {\n // data,\n // extension: fileType\n // };\n // };\n // fileReader.readAsDataURL(fileToLoad);\n }\n public getUrl() {\n this.dataSource.fetchFile(this.fileUuid, 'pdf').subscribe((file) => {\n window.open(file.changingThisBreaksApplicationSecurity, '_blank');\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'remote-answer',\n styles: [],\n template: `\n <div *ngIf=\"innerValue\">\n {{ innerValue }}\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteAnswerComponent),\n multi: true\n }\n ]\n})\nexport class RemoteAnswerComponent implements ControlValueAccessor {\n @Input() public source: any;\n public innerValue = null;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor() {}\n // get accessor\n get value(): any {\n return this.innerValue;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.innerValue) {\n if (this._dataSource) {\n this._dataSource.resolveSelectedValue(v).subscribe((ans) => {\n this.innerValue = ans.label;\n });\n } else {\n this.innerValue = v;\n }\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EncounterViewerComponent } from './encounter-view/encounter-viewer.component';\nimport { EncounterContainerComponent } from './encounter-container/encounter-container.component';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { EncounterPdfViewerService } from './encounter-pdf-viewer.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionControlComponent } from './display-controls/question-control.component';\nimport { FilePreviewComponent } from './display-controls/file-preview.component';\nimport { RemoteAnswerComponent } from './display-controls/remote-answer.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SharedModule } from '../shared.module';\n@NgModule({\n declarations: [\n EncounterViewerComponent,\n EncounterContainerComponent,\n QuestionControlComponent,\n FilePreviewComponent,\n RemoteAnswerComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n HttpClientModule,\n SharedModule\n ],\n providers: [EncounterViewerService, EncounterPdfViewerService],\n exports: [EncounterContainerComponent, HttpClientModule]\n})\nexport class EncounterViewerModule {}\n","import {\n Component,\n Input,\n forwardRef,\n OnInit,\n AfterViewInit\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'checkbox',\n template: `<div *ngFor=\"let option of options; let i = index\">\n <label class=\"form-control no-border\">\n <input\n type=\"checkbox\"\n id=\"i + 'id'\"\n (change)=\"selectOpt(option, $event)\"\n value=\"option.value\"\n [checked]=\"option.checked\"\n />\n {{ option.label }}\n </label>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlComponent),\n multi: true\n }\n ],\n styles: [\n `\n .no-border {\n border: 0;\n box-shadow: none;\n }\n `\n ]\n})\nexport class CheckboxControlComponent implements OnInit, AfterViewInit {\n @Input() public options: Array<any>;\n @Input() public selected: Array<any>;\n public _value: Array<any> = [];\n\n public ngOnInit() {\n this.options = this.options.map((option) => {\n if (this.selected.indexOf(option.value) !== -1) {\n Object.assign(option, { checked: true });\n }\n return option;\n });\n }\n\n public ngAfterViewInit() {}\n\n public writeValue(value: any) {\n this.value = value;\n }\n\n public registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this._value || this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n }\n\n public selectOpt(option, event) {\n if (event.target.checked) {\n this._value.push(option.value);\n } else {\n this.options.forEach((o) => {\n if (o.value === option.value) {\n this._value.splice(o, 1);\n }\n });\n }\n\n this.onChange(this.value);\n }\n\n private onChange = (change: any) => {};\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxControlComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [CheckboxControlComponent],\n exports: [CheckboxControlComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class CheckboxModule {}\n","import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Component, OnInit, forwardRef } from '@angular/core';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Component({\n selector: 'ngx-time-picker',\n template: `<input\n type=\"time\"\n class=\"form-control\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onTimeSelect($event)\"\n/>\n`,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => NgxTimePickerComponent)\n }\n ]\n})\nexport class NgxTimePickerComponent implements OnInit, ControlValueAccessor {\n public value: string = moment().format('HH:mm:ss');\n public onChange: any = () => {};\n public onTouched: any = () => {};\n\n public ngOnInit() {}\n\n public writeValue(value: any): void {\n this.value = this.formatTimeValue(value);\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n public onTimeSelect($event: string): void {\n const timeValue = this.formatTimeValue($event);\n this.value = timeValue;\n this.onChange(timeValue);\n }\n\n public formatTimeValue(timeInputString: string): string {\n /*\n Allows processing of data that comes in as date-time\n or just time i.e '1970-03-01 12:32:21' or '12:32:21'\n or '12:32' or '1970-01-01T13:03:00.000+0300'\n */\n let timeArray = [];\n let dateArray = [];\n let timeValue = '';\n\n if (typeof timeInputString === 'undefined' || timeInputString === null) {\n } else {\n timeArray = timeInputString.split(':');\n dateArray = timeInputString.split('-');\n }\n if (timeArray.length === 1 && moment(timeInputString).isValid()) {\n timeValue = moment(timeInputString).format('HH:mm:ss');\n } else if (timeArray.length > 1 && timeArray.length < 2) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length > 1) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length <= 1) {\n timeValue = moment(timeInputString, 'HH:mm:ss').format('HH:mm:ss');\n } else {\n timeValue = moment().format('HH:mm:ss');\n }\n return timeValue;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxTimePickerComponent } from './ngx-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n declarations: [NgxTimePickerComponent],\n exports: [NgxTimePickerComponent],\n providers: []\n})\nexport class NgxTimePickerModule {}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAddressAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAddressNodes(rootNode);\n const element = {};\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n element[node.question.extras.questionOptions.addressType] =\n node.control.value;\n element['uuid'] = node.control.uuid;\n payload.push(element);\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n const nodes = this.getPersonAddressNodes(rootNode);\n nodes.forEach((node) => {\n Object.keys(payload).forEach((key, value) => {\n console.log(payload)\n if (key === node.question.extras.questionOptions.addressType) {\n if (value) {\n node.control.setValue(payload[key]);\n node.initialValue = payload[key];\n node.control.uuid = payload['uuid'];\n } else {\n node.control.setValue(payload[key]);\n node.initialValue = payload[key];\n node.control.uuid = payload['uuid'];\n }\n }\n });\n });\n }\n\n getPersonAddressNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAddressNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAddressNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (\n rootNode.question.extras &&\n rootNode.question.extras.type === 'personAddress'\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAddressNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAddressNodes(child, array);\n });\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { MatTabsModule, MatIconModule, MatCardModule } from '@angular/material';\n// import { NoopAnimationsModule} from '@angular/platform-browser/animations';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormBuilder } from '@angular/forms';\nimport { DebugModeService } from '../form-entry/services/debug-mode.service';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { FormErrorsService } from './services/form-errors.service';\nimport { FormControlService } from './form-factory/form-control.service';\nimport { ValidationFactory } from './form-factory/validation.factory';\nimport { FormRendererComponent } from './form-renderer/form-renderer.component';\nimport { ErrorRendererComponent } from './error-renderer/error-renderer.component';\nimport { HistoricalValueDirective } from './directives/historical-value-directive';\nimport { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';\nimport { SelectModule } from '../components/select/select.module';\n// import { NgSelectModule } from '@ng-select/ng-select';\nimport { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';\nimport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nimport { NgxDateTimePickerModule } from '../components/ngx-date-time-picker/ngx-date-time-picker.module';\nimport { AfeNgSelectComponent } from '../components/afe-ng-select.component';\nimport { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';\nimport { AlertsFactory } from './form-factory/show-messages.factory';\nimport { ExpressionRunner } from './expression-runner/expression-runner';\nimport { JsExpressionHelper } from './helpers/js-expression-helper';\nimport { FormSchemaCompiler } from './services/form-schema-compiler.service';\nimport { FormFactory } from './form-factory/form.factory';\nimport { QuestionFactory } from './form-factory/question.factory';\nimport { ControlRelationsFactory } from './form-factory/control-relations.factory';\nimport { EncounterAdapter } from './value-adapters/encounter.adapter';\nimport { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';\nimport { OrderValueAdapter } from './value-adapters/order.adapter';\nimport { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';\nimport { ObsValueAdapter } from './value-adapters/obs.adapter';\nimport { RemoteSelectModule } from '../components/remote-select/remote-select.module';\nimport { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';\nimport { EncounterViewerModule } from '../encounter-viewer/encounter-viewer.module';\nimport { CheckboxModule } from '../components/check-box/checkbox.module';\nimport { SharedModule } from '../shared.module';\nimport { TimeAgoPipe } from 'time-ago-pipe';\nimport { NgxTimePickerModule } from '../components/ngx-time-picker/ngx-time-picker.module';\nimport { PersonAddressAdapter } from './value-adapters/person-address.adapter';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CollapseModule,\n // NgSelectModule,\n SelectModule,\n DateTimePickerModule,\n RemoteSelectModule,\n // NoopAnimationsModule,\n RemoteFileUploadModule,\n EncounterViewerModule,\n CheckboxModule,\n MatIconModule,\n MatTabsModule,\n MatCardModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule,\n SharedModule\n ],\n declarations: [\n FormRendererComponent,\n AfeNgSelectComponent,\n AppointmentsOverviewComponent,\n HistoricalValueDirective,\n ErrorRendererComponent,\n TimeAgoPipe\n ],\n providers: [\n FormBuilder,\n FormControlService,\n FormErrorsService,\n ValidationFactory,\n HidersDisablersFactory,\n AlertsFactory,\n ExpressionRunner,\n JsExpressionHelper,\n HistoricalFieldHelperService,\n FormSchemaCompiler,\n FormFactory,\n QuestionFactory,\n ValidationFactory,\n ControlRelationsFactory,\n ObsAdapterHelper,\n ObsValueAdapter,\n EncounterAdapter,\n PersonAttribuAdapter,\n OrderValueAdapter,\n DebugModeService,\n PersonAddressAdapter\n ],\n exports: [\n FormRendererComponent,\n AfeNgSelectComponent,\n ErrorRendererComponent,\n DateTimePickerModule,\n EncounterViewerModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule\n ]\n})\nexport class FormEntryModule {}\n","export class Pair {\n key: string;\n\n value: any;\n\n constructor(key: string, value: any) {\n this.key = key;\n this.value = value;\n }\n}\n","export enum RenderingType {\n Form,\n Page,\n Section,\n Select,\n DropDown\n}\n"]}
|