formbuilder-lhcforms 7.0.2 → 7.0.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["./src/app/ngx-schema-form/ngx-schema-form.component.ts","./src/app/lib/widgets/label/label.component.ts","./src/app/base-page/base-page.component.ts","./src/app/base-page/base-page.component.html","./src/app/lib/widgets/integer/integer.component.ts","./src/app/lib/widgets/enablewhen-answer-coding/enablewhen-answer-coding.component.ts","./src/app/lib/pipes/app-json.pipe.ts","./src/app/lib/widgets/fhir-search-dlg/fhir-search-dlg.component.ts","./src/app/lib/widgets/fhir-search-dlg/fhir-search-dlg.component.html","./src/app/lib/widgets/grid.component/grid.component.ts","./src/app/lib/widgets/checkbox.component/checkbox.component.ts","./src/environments/environment.ts","./src/app/lib/widgets/table/table.component.ts","./src/app/lib/widgets/table/table.component.html","./src/app/lib/widgets/initial/initial.component.ts","./src/app/sf-form-wrapper/sf-form-wrapper.component.ts","./src/app/sf-form-wrapper/sf-form-wrapper.component.html","./src/app/lib/widgets/units/units.component.ts","./src/app/services/login.service.ts","./src/app/form-fields/form-fields.component.ts","./src/app/lib/widgets/string/string.component.ts","./src/app/lib/widgets/string/string.component.html","./src/app/lib/widgets/enable-operator/enable-operator.component.ts","./src/app/lib/widgets/side-label-checkbox/side-label-checkbox.component.ts","./src/app/lib/widgets/title/title.component.ts","./src/app/lib/widgets/fhir-servers-dlg/fhir-servers-dlg.component.ts","./src/app/lib/widgets/total-score/total-score.component.ts","./src/app/lib/widgets/form-element/form-element.component.ts","./src/app/services/fhir.service.ts","./src/app/lib/widgets/lfb-array-widget/lfb-array-widget.component.ts","./src/app/lib/widgets/string-with-css/string-with-css.component.ts","./src/app/lib/widgets/string-with-css/string-with-css.component.html","./src/app/fetch.service.ts","./src/app/lib/widgets/extensions/extensions.component.ts","./src/app/lib/widgets/left-label-form-group/left-label-form-group.component.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/lib/widgets/label-radio/label-radio.component.ts","./src/app/lib/widgets/help-text/help-text.component.ts","./src/app/lib/widgets/restrictions-operator/restrictions-operator.component.ts","./src/app/lib/widgets/restrictions-operator/restrictions-operator.component.html","./src/app/app.module.ts","./src/app/item/item.component.ts","./src/app/item/item.component.html","./src/app/lib/widgets/boolean-controlled/boolean-controlled.component.ts","./src/app/lib/lforms-widget-registry.ts","./src/app/lib/widgets/loinc-notice/loinc-notice.component.ts","./src/app/lib/widgets/loinc-notice/loinc-notice.component.html","./src/app/services/restriction-operator.service.ts","./src/app/header/header.component.ts","./src/app/lib/widgets/auto-complete/auto-complete.component.ts","./src/app/footer/footer.component.ts","./src/app/lib/util.ts","./src/app/lib/widgets/select/select.component.ts","./src/app/lib/widgets/select/select.component.html","./src/app/lib/widgets/element-chooser/element-chooser.component.ts","./src/app/lib/widgets/enable-behavior/enable-behavior.component.ts","./src/app/lib/widgets/radio/radio.component.ts","./src/app/lib/widgets/boolean-radio/boolean-radio.component.ts","./src/app/lib/widgets/boolean-radio/boolean-radio.component.html","./src/app/services/form.service.ts","./src/app/services/tree.service.ts","./src/app/lib/widgets/row-layout/row-layout.component.ts","./src/app/lib/widgets/item-json-editor/item-json-editor.component.ts","./src/app/shared-object.service.ts","./src/app/lib/widgets/enable-when-source/enable-when-source.component.ts","./src/app/lib/widgets/fhir-export-dlg/fhir-export-dlg.component.ts","./src/app/lib/widgets/fhir-export-dlg/fhir-export-dlg.component.html","./src/app/app-routing.module.ts","./src/app/lib/widgets/preview-dlg/preview-dlg.component.ts","./src/app/lib/widgets/preview-dlg/preview-dlg.component.html","./src/app/lib/widgets/type/type.component.ts","./src/app/lib/widgets/answer-option/answer-option.component.ts","./src/app/lib/widgets/lfb-control-widget/lfb-control-widget.component.ts","./src/app/lib/widgets/restrictions/restrictions.component.ts","./src/app/lib/widgets/message-dlg/message-dlg.component.ts","./src/main.ts","./$_lazy_route_resource lazy namespace object"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["/**\n * Handle layout and editing of item level fields\n */\nimport {\n AfterViewInit, ChangeDetectorRef,\n Component, ComponentFactoryResolver,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild, ViewContainerRef\n} from '@angular/core';\nimport {SharedObjectService} from '../shared-object.service';\nimport {Binding, Validator} from '@lhncbc/ngx-schema-form';\nimport {LinkIdCollection} from '../item/item.component';\nimport {FormService} from '../services/form.service';\nimport {SfFormWrapperComponent} from '../sf-form-wrapper/sf-form-wrapper.component';\n\n@Component({\n selector: 'lfb-ngx-schema-form',\n template: `\n <div class=\"container\">\n <ng-container #viewContainer></ng-container>\n <!--\n <sf-form #itemForm *ngIf=\"model\" [schema]=\"mySchema\"\n [(model)]=\"model\"\n [bindings]=\"myFieldBindings\"\n ></sf-form>\n -->\n </div>\n `,\n styles: [`\n\n pre {\n padding: 02em;\n border: solid 1px black;\n background: #eee;\n }\n\n /* label */\n :host /deep/ .formHelp {\n display: block;\n font-size: 0.7em;\n }\n\n :host /deep/ sf-form-element > div {\n margin-top: 1em;\n margin-bottom: 1em;\n }\n\n :host ::ng-deep .form-control {\n height: calc(1.0em + .75rem + 2px);\n padding: 0 3px 0 3px;\n }\n\n :host /deep/ fieldset {\n border: 0;\n }\n\n .title {\n margin-top: 10px;\n font-size: 20px;\n font-weight: bold;\n }\n\n `]\n})\nexport class NgxSchemaFormComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n static ID = 0;\n _id = ++NgxSchemaFormComponent.ID;\n // @ViewChild('itemForm') itemForm: FormComponent;\n @ViewChild('viewContainer', {read: ViewContainerRef}) containerRef: ViewContainerRef;\n\n mySchema: any = {properties: {}};\n myTestSchema: any;\n @Output()\n setLinkId = new EventEmitter();\n @Input()\n model: any;\n @Output()\n modelChange = new EventEmitter<any>();\n @Output()\n valueChange = new EventEmitter<any>();\n @Input()\n linkIdCollection = new LinkIdCollection();\n\n /**\n * Setup form validators\n * TODO - link id is hidden for time being.\n */\n myValidators: { [path: string]: Validator } = {\n // Should have a value and should not exist in the form.\n '/linkId': (value, property, form) => {\n if (value.trim().length === 0 || this.linkIdCollection.hasLinkId(value)) {\n return [{\n linkId: {expectedValue: 'Unique linkId in the form'}\n }];\n }\n return null;\n }\n };\n\n /**\n * Field bindings\n */\n myFieldBindings: { [path: string]: Binding } = {\n /*\n '/linkId': {\n change: (event, formProperty: FormProperty) => {\n if (!formProperty.value && this.node) {\n formProperty.setValue(this.node.id, true);\n }\n if (formProperty.valid) {\n this.setLinkId.emit(formProperty.value);\n }\n }\n }\n */\n };\n\n constructor(private modelService: SharedObjectService, private formService: FormService,\n private cfr: ComponentFactoryResolver, private cd: ChangeDetectorRef) {\n this.mySchema = formService.getItemSchema();\n }\n\n /**\n * Merge schema and layout jsons\n */\n ngOnInit() {\n this.mySchema = this.formService.getItemSchema();\n }\n\n ngAfterViewInit() {\n // this.resetForm(this.model);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes.model) {\n this.resetForm(changes.model.currentValue);\n }\n /*\n if(changes.model.currentValue !== changes.model.previousValue) {\n if(this.itemForm) {\n this.itemForm.reset();\n this.itemForm.writeValue(changes.model.currentValue);\n }\n }\n */\n }\n\n\n /**\n * The model is changed, emit the event.\n * @param value - Event value.\n */\n updateValue(value: any) {\n this.valueChange.emit(value);\n this.modelService.currentItem = value;\n }\n\n updateModel(model: any) {\n this.modelChange.emit(model);\n this.modelService.currentItem = model;\n }\n\n /**\n * Reset ngx- form with new model\n */\n resetForm(model: any): void {\n if(!this.containerRef) {\n return;\n }\n\n const resolver = this.cfr.resolveComponentFactory(SfFormWrapperComponent);\n this.containerRef.clear();\n const componentRef = this.containerRef.createComponent(resolver);\n this.model = model;\n componentRef.instance.model = this.model;\n componentRef.instance.valueChange.subscribe((value) => {\n this.updateValue(value);\n })\n }\n\n ngOnDestroy() {\n }\n\n}\n","/**\n * A label with help icon and associated help message.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\n\n@Component({\n selector: 'lfb-label',\n template: `\n <label *ngIf=\"title\" [attr.for]=\"for\" class=\"col-form-label align-self-center p-0\"\n >{{title}} <button *ngIf=\"helpMessage\" class=\"btn border-0 p-0 b-0\" [matTooltip]=\"helpMessage\"\n [attr.aria-label]=\"'Tooltip for '+title+': '+helpMessage\" aria-hidden=\"true\"\n ><fa-icon [icon]=\"helpIcon\"></fa-icon></button\n ></label>\n `,\n styles: [`\n label {\n margin-bottom: 0;\n }\n `]\n})\nexport class LabelComponent implements OnInit {\n\n // Input properties\n @Input()\n title: string;\n @Input()\n helpMessage: string;\n @Input()\n helpIcon = faInfoCircle;\n @Input()\n for: string;\n @Input()\n labelWidthClass: string;\n constructor() { }\n\n ngOnInit() {\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output, TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {FormService} from '../services/form.service';\nimport {fhir} from '../fhir';\nimport {BehaviorSubject, from, Observable, of, Subject} from 'rxjs';\nimport {catchError, debounceTime, distinctUntilChanged, finalize, mergeMap, switchMap, takeUntil} from 'rxjs/operators';\nimport {MessageType} from '../lib/widgets/message-dlg/message-dlg.component';\nimport {NgbActiveModal, NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {AutoCompleteResult} from '../lib/widgets/auto-complete/auto-complete.component';\nimport {FetchService} from '../fetch.service';\nimport {FhirService} from '../services/fhir.service';\nimport {FhirServersDlgComponent} from '../lib/widgets/fhir-servers-dlg/fhir-servers-dlg.component';\nimport {FhirSearchDlgComponent} from '../lib/widgets/fhir-search-dlg/fhir-search-dlg.component';\nimport { PreviewDlgComponent } from '../lib/widgets/preview-dlg/preview-dlg.component';\nimport {AppJsonPipe} from '../lib/pipes/app-json.pipe';\nimport {Util} from '../lib/util';\nimport {MatTabChangeEvent} from '@angular/material/tabs';\nimport {MatDialog} from '@angular/material/dialog';\nimport {FhirExportDlgComponent} from '../lib/widgets/fhir-export-dlg/fhir-export-dlg.component';\nimport {LoincNoticeComponent} from '../lib/widgets/loinc-notice/loinc-notice.component';\nimport {SharedObjectService} from '../shared-object.service';\ndeclare var LForms: any;\n\ntype ExportType = 'CREATE' | 'UPDATE';\n\n@Component({\n selector: 'lfb-base-page',\n templateUrl: './base-page.component.html',\n styleUrls: ['./base-page.component.css'],\n providers: [NgbActiveModal]\n})\nexport class BasePageComponent implements OnDestroy {\n\n private unsubscribe = new Subject<void>()\n @Input()\n guidingStep = 'home'; // 'choose-start', 'home', 'item-editor'\n startOption = 'scratch';\n importOption = '';\n editMode = 'fresh';\n questionnaire: fhir.Questionnaire = null;\n formFields: fhir.Questionnaire = null;\n formValue: fhir.Questionnaire;\n formSubject = new Subject<fhir.Questionnaire>();\n @Output()\n state = new EventEmitter<string>();\n objectUrl: any;\n acResult: AutoCompleteResult = null;\n @ViewChild('lhcFormPreview') previewEl: ElementRef;\n @ViewChild('fileInput') fileInputEl: ElementRef;\n @ViewChild('loincSearchDlg') loincSearchDlg: TemplateRef<any>;\n selectedPreviewTab = 0;\n acceptTermsOfUse = false;\n\n\n constructor(private formService: FormService,\n private modelService: SharedObjectService,\n private modalService: NgbModal,\n private activeModal: NgbActiveModal,\n private dataSrv: FetchService,\n public fhirService: FhirService,\n private appJsonPipe: AppJsonPipe,\n private cdr: ChangeDetectorRef,\n private matDlg: MatDialog\n ) {\n const isAutoSaved = this.formService.isAutoSaved();\n if(isAutoSaved) {\n this.startOption = 'from_autosave';\n }\n\n this.acceptTermsOfUse = sessionStorage.acceptTermsOfUse === 'true';\n if(!this.acceptTermsOfUse) {\n this.modalService.open(\n LoincNoticeComponent,{size: 'lg', centered: true, keyboard: false, backdrop: 'static'}\n ).result\n .then(\n (result) => {\n this.acceptTermsOfUse = result;\n sessionStorage.acceptTermsOfUse = result;\n },\n (reason) => {\n console.error(reason);\n });\n }\n\n this.formSubject.asObservable().pipe(\n debounceTime(500),\n switchMap((fhirQ) => {\n this.formService.autoSaveForm(fhirQ);\n return of(fhirQ);\n }),\n takeUntil(this.unsubscribe)\n ).subscribe(() => {\n console.log('Saved');\n });\n\n formService.guidingStep$.subscribe((step) => {this.guidingStep = step;});\n }\n\n\n /**\n * Convert the questionnaire to lfData.\n */\n get lfData(): any {\n const q = Util.convertToQuestionnaireJSON(this.formValue);\n return LForms.Util.convertFHIRQuestionnaireToLForms(q, 'R4');\n }\n\n\n /**\n * Notify changes to form.\n * @param form - form object, a.k.a questionnaire\n */\n notifyChange(form) {\n this.formSubject.next(form);\n }\n\n\n /**\n * Handle value changes in form-fields component.\n * @param event - Emits questionnaire (Form level copy)\n */\n formFieldsChanged(event) {\n const itemList = this.formValue.item;\n Util.mirrorObject(this.formValue, Util.convertToQuestionnaireJSON(event));\n this.formValue.item = itemList;\n this.notifyChange(this.formValue);\n this.modelService.questionnaire = this.questionnaire;\n }\n\n\n /**\n * Handle value changes in item-component.\n * @param itemList - Emits item list. Form level fields should be untouched.\n */\n itemComponentChanged(itemList) {\n this.formValue.item = itemList;\n this.notifyChange(this.formValue);\n }\n\n\n /**\n * Set questionnaire.\n * Make\n * @param questionnaire - Input FHIR questionnaire\n */\n setQuestionnaire(questionnaire) {\n this.questionnaire = questionnaire;\n this.formValue = Object.assign({}, questionnaire);\n this.formFields = Object.assign({}, questionnaire);\n delete this.formFields.item;\n this.notifyChange(this.formValue);\n }\n\n\n /**\n * Switch guiding step\n * @param step - a\n */\n setStep(step: string) {\n this.formService.setGuidingStep(step);\n this.formService.autoSave('state', step);\n }\n\n /**\n * Check auto save status\n */\n isAutoSaved() {\n return this.formService.isAutoSaved();\n }\n /**\n * Handle continue button.\n */\n onContinue() {\n // TODO - Rethink the logic.\n if(this.startOption === 'from_autosave') {\n this.formService.setGuidingStep(this.formService.autoLoad('state'));\n this.setQuestionnaire(this.formService.autoLoadForm());\n }\n else if (this.startOption === 'scratch') {\n this.setStep('fl-editor');\n this.setQuestionnaire(Util.createDefaultForm());\n }\n else if (this.importOption === 'local') {\n this.fileInputEl.nativeElement.click();\n }\n else if (this.importOption === 'fhirServer') {\n this.fetchFormFromFHIRServer$().subscribe((form) => {\n if(form) {\n this.setQuestionnaire(form);\n this.setStep('fl-editor');\n }\n });\n }\n else if (this.importOption === 'loinc') {\n this.modalService.open(this.loincSearchDlg).result.then((qId)=>{\n this.dataSrv.getFormData(qId).subscribe((data) => {\n this.setQuestionnaire(data);\n this.setStep('fl-editor');\n });\n }, ()=>{});\n }\n }\n\n /**\n * Remove subscriptions before removing the component.\n */\n ngOnDestroy() {\n this.unsubscribe.next();\n }\n\n/////////////////////////////////////////\n\n /**\n * Set guiding to step to switch the page.\n */\n /*\n setGuidingStep(step: string) {\n // this.guidingStep = step;\n this.formService.autoSave('state', step);\n }\n*/\n /**\n * Select form from local file system. Copied from current form builder.\n *\n * @param event - Object having selected file from the browser file dialog.\n */\n onFileSelected(event) {\n const fileReader = new FileReader();\n const selectedFile = event.target.files[0];\n event.target.value = null; //\n fileReader.onload = () => {\n try {\n this.setQuestionnaire(this.formService.parseQuestionnaire(fileReader.result as string));\n setTimeout(() => {\n this.setStep('fl-editor');\n });\n }\n catch (e) {\n this.showError(e);\n }\n }\n fileReader.onerror = (error) => {\n this.showError('Error occurred reading file: ${selectedFile.name}');\n }\n fileReader.readAsText(selectedFile, 'UTF-8');\n }\n\n showError(error: any) {\n this.formService.showMessage('Error', error.message || error, MessageType.DANGER);\n }\n\n /**\n * View preview of lforms widget and questionnaire json\n */\n showPreviewDlg() {\n this.matDlg.open(PreviewDlgComponent, {data: {questionnaire: Util.convertToQuestionnaireJSON(this.formValue), lfData: this.lfData}, width: '80vw', height: '80vh'});\n }\n\n /**\n * Format result item for auto complete.\n * @param acResult - Result item.\n */\n formatter(acResult: any) {\n return acResult.id + ': ' + acResult.title;\n }\n\n /**\n * Save form to local file, mostly copied from current form builder.\n */\n saveToFile() {\n const content = this.toString(this.questionnaire);\n const blob = new Blob([content], {type: 'application/json;charset=utf-8'});\n const formName = this.questionnaire.title;\n const formShortName = this.questionnaire.name;\n const exportFileName = formShortName ? formShortName.replace(/\\s/g, '-') : (formName ? formName.replace(/\\s/g, '-') : 'form');\n\n // Use hidden anchor to do file download.\n // const downloadLink: HTMLAnchorElement = document.createElement('a');\n const downloadLink = document.getElementById('exportAnchor');\n const urlFactory = (window.URL || window.webkitURL);\n if(this.objectUrl != null) {\n // First release any resources on existing object url\n urlFactory.revokeObjectURL(this.objectUrl);\n this.objectUrl = null;\n }\n this.objectUrl = urlFactory.createObjectURL(blob);\n downloadLink.setAttribute('href', this.objectUrl);\n downloadLink.setAttribute('download', exportFileName + '.R4.json');\n // Avoid using downloadLink.click(), which will display down content in the browser.\n downloadLink.dispatchEvent(new MouseEvent('click'));\n }\n\n /**\n * Call back to auto complete search.\n * @param term - Search term\n */\n acSearch = (term$: Observable<string>): Observable<AutoCompleteResult []> => {\n return term$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n switchMap((term) => term.length < 2 ? [] : this.dataSrv.searchForms(term)));\n }\n\n /**\n * Get questionnaire by id\n * @param questionnaireId - Id of the questionnaire to fetch. If empty, return empty questionnaire.\n */\n getForm(questionnaireId: string) {\n if (!questionnaireId) {\n this.setQuestionnaire(Util.createDefaultForm());\n } else {\n this.dataSrv.getFormData(questionnaireId).subscribe((data) => {\n this.setQuestionnaire(data);\n this.acResult = null;\n });\n }\n }\n\n /**\n * Change button text based on context\n */\n createButtonLabel(): string {\n let ret = 'Create questions';\n if(this.questionnaire && this.questionnaire.item && this.questionnaire.item.length > 0) {\n ret = 'Edit questions'\n }\n return ret;\n }\n\n\n /**\n * Close menu handler.\n */\n newStart() {\n localStorage.clear();\n this.setQuestionnaire(Util.createDefaultForm());\n this.setStep('home');\n }\n\n /**\n * Import FHIR server menu handler.\n */\n importFromFHIRServer() {\n this.modalService.open(FhirServersDlgComponent, {size: 'lg'}).result.then((result) => {\n if(result) { // Server picked, invoke search dialog.\n this.modalService.open(FhirSearchDlgComponent, {size: 'lg', scrollable: true}).result.then((selected) => {\n if(selected !== false) { // Questionnaire picked, get the item from the server.\n this.fhirService.read(selected).subscribe((resp)=>{\n this.setQuestionnaire(resp);\n });\n }\n });\n }\n }, (reason) => {\n console.error(reason);\n });\n }\n\n /**\n * Fetch form from FHIR server invoking dialogs for server selection and search for forms.\n */\n fetchFormFromFHIRServer$(): Observable<any> {\n return from(this.modalService.open(FhirServersDlgComponent, {size: 'lg'}).result)\n .pipe(switchMap((result) => {\n if(result) {\n return from(this.modalService.open(FhirSearchDlgComponent, {size: 'lg', scrollable: true}).result);\n }\n else {\n return of(false);\n }\n }), switchMap((selected) => {\n if(selected !== false) {\n return this.fhirService.read(selected);\n }\n else {\n return of(null);\n }\n }));\n }\n\n\n /**\n * Create/Update questionnaire on the FHIR server.\n * @param type - 'CREATE' | 'UPDATE'\n */\n exportToServer(type: ExportType) {\n let observer: Observable<any>;\n if(type === 'CREATE') {\n this.modalService.open(FhirServersDlgComponent, {size: 'lg'}).result.then((result) => {\n if (result) { // Server picked, invoke search dialog.\n observer = this.fhirService.create(Util.convertToQuestionnaireJSON(this.formValue), null);\n this.handleServerResponse(observer);\n }\n }, (reason) => {\n console.error(reason);\n });\n }\n else if(type === 'UPDATE') {\n observer = this.fhirService.update(Util.convertToQuestionnaireJSON(this.formValue), null);\n this.handleServerResponse(observer);\n }\n }\n\n\n /**\n * Handle FHIR server response after create/update.\n * @param serverResponse - An observable yielding fhir resource.\n */\n handleServerResponse(serverResponse: Observable<fhir.Resource>) {\n serverResponse.pipe(\n catchError((err) => {\n console.error(err.message);\n return of(err);\n }),\n finalize(() => {\n })\n )\n .subscribe((response) => {\n const modalRef = this.modalService.open(FhirExportDlgComponent, {size: 'lg', scrollable: true});\n if(response instanceof Error) {\n modalRef.componentInstance.error = response;\n modalRef.componentInstance.serverResponse = null;\n }\n else {\n this.setQuestionnaire(response);\n modalRef.componentInstance.error = null;\n modalRef.componentInstance.serverResponse = response;\n }\n });\n }\n\n\n /**\n * Transform questionnaire model to FHIR compliant questionnaire in string format.\n *\n * The questionnaire, although mostly a FHIR questionnaire object, has some internal fields for processing.\n * Get a fully compliant FHIR questionnaire in string format.\n *\n * @param questionnaire - Questionnaire model is in the form builder.\n */\n toString(questionnaire: fhir.Questionnaire): string {\n return this.appJsonPipe.transform(questionnaire);\n }\n\n}\n","<div class=\"page-defaults container bg-white\">\n <div *ngIf=\"acceptTermsOfUse === true\">\n <lfb-header id=\"fixedTop\" [isFirebaseEnabled]=\"false\"></lfb-header>\n <div id=\"resizableMiddle\">\n\n <nav class=\"navbar navbar-light bg-light\" aria-label=\"Menu bar\" *ngIf=\"guidingStep !== 'home'\">\n <div class=\"btn-group-sm mr-2\" ngbDropdown role=\"group\" aria-label=\"Export menu\">\n <button class=\"btn btn-sm btn-secondary\" ngbDropdownToggle>\n Export\n </button>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"saveToFile()\">Export to file ...</button>\n <button ngbDropdownItem (click)=\"exportToServer('CREATE')\">Create a new questionnaire on a FHIR server...</button>\n <button ngbDropdownItem\n (click)=\"exportToServer('UPDATE')\"\n [disabled]=\"!questionnaire || !questionnaire.id\"\n >Update the questionnaire on the server ({{fhirService.getFhirServer().endpoint}})</button>\n </div>\n </div>\n <div class=\"btn-group-sm mr-2\" ngbDropdown role=\"group\" aria-label=\"Import menu\">\n <button class=\"btn btn-sm btn-secondary\" ngbDropdownToggle>\n Import\n </button>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"fileInput.click()\">Import from file...</button>\n <!-- <button ngbDropdownItem (click)=\"importLoinc()\">Import a LOINC form...</button> -->\n <button ngbDropdownItem (click)=\"importFromFHIRServer()\">Import from a FHIR server...</button>\n <div class=\"dropdown-divider\"></div>\n <form class=\"px-4 py-3\">\n <label>Import LOINC forms:</label>\n <input type=\"text\"\n placeholder=\"Search LOINC\"\n [(ngModel)]=\"acResult\"\n [ngModelOptions]=\"{standalone: true}\"\n [ngbTypeahead]=\"acSearch\"\n (selectItem)=\"getForm($event.item.id)\"\n [resultFormatter]=\"formatter\"\n [inputFormatter]=\"formatter\"\n [editable]='false' />\n </form>\n </div>\n </div>\n\n <div class=\"btn-group-sm mr-2\" role=\"group\" aria-label=\"Edit form attributes\">\n <button type=\"button\" class=\"btn btn-secondary\"\n (click)=\"setStep('fl-editor')\" [attr.disabled]=\"guidingStep === 'fl-editor' ? '' : null\">Edit form attributes</button>\n </div>\n <div class=\"btn-group-sm mr-2 ml-auto\" role=\"group\" aria-label=\"Preview\">\n <button type=\"button\" class=\"btn btn-secondary\"\n (click)=\"showPreviewDlg()\">Preview</button>\n </div>\n <div class=\"btn-group-sm mr-2\" role=\"group\" aria-label=\"Close editor\">\n <button type=\"button\" class=\"btn btn-secondary \" (click)=\"newStart()\">Close</button>\n </div>\n </nav>\n <a target=\"_self\" id=\"exportAnchor\" class=\"d-none\">Export</a>\n <input #fileInput class=\"d-none\" type=\"file\" (change)=\"onFileSelected($event)\">\n\n <ng-container *ngIf=\"guidingStep === 'home'\">\n <ng-container *ngTemplateOutlet=\"home\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"guidingStep === 'fl-editor'\">\n <ng-container *ngTemplateOutlet=\"formLevelFields\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"guidingStep === 'item-editor'\">\n <ng-container *ngTemplateOutlet=\"itemLevelFields\"></ng-container>\n </ng-container>\n </div>\n <lfb-footer id=\"fixedBottom\"></lfb-footer>\n </div>\n</div>\n\n<ng-template #home>\n <div class=\"card-body container\">\n <div>\n <p class=\"lead\">How do you want to create your form?</p>\n <ul class=\"list-unstyled ml-5\" ngbRadioGroup [(ngModel)]=\"startOption\" >\n <li *ngIf=\"isAutoSaved()\">\n <label ngbButtonLabel>\n <input ngbButton value=\"from_autosave\" type=\"radio\">\n Would you like to start from where you left off before?\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"scratch\" type=\"radio\">\n Start from scratch\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"existing\" type=\"radio\">\n Start with existing form\n </label>\n <ul *ngIf=\"startOption === 'existing'\" class=\"list-unstyled ml-5\" ngbRadioGroup [(ngModel)]=\"importOption\" >\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"local\" type=\"radio\">\n Import from local file\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"fhirServer\" type=\"radio\">\n Import from FHIR server\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"loinc\" type=\"radio\">\n Import from LOINC\n </label>\n </li>\n </ul>\n </li>\n </ul>\n <hr>\n <div class=\"btn-toolbar float-right mb-2\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\n <div class=\"btn-group\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn-sm btn-primary\" (click)=\"onContinue()\">Continue</button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #formLevelFields>\n <lfb-form-fields (state)=\"setStep($event)\"\n [questionnaire]=\"formFields\"\n (questionnaireChange)=\"formFieldsChanged($event)\"\n [questionsButtonLabel]=\"createButtonLabel()\"\n ></lfb-form-fields>\n</ng-template>\n\n<ng-template #itemLevelFields>\n <button type=\"button\"\n class=\"ml-2 font-weight-bold btn btn-link\"\n (click)=\"setStep('fl-editor')\"\n >{{questionnaire.title}}</button>\n <lfb-item-component [questionnaire]=\"questionnaire\"\n (itemChange)=\"itemComponentChanged($event)\"\n ></lfb-item-component>\n</ng-template>\n\n<ng-template #previewDlg let-modal>\n <div class=\"modal-header btn-primary\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">Preview of Questionnaire</h4>\n <button type=\"button\" class=\"close btn-primary text-white\" aria-label=\"Close\" (click)=\"modal.close('Cross click')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngTemplateOutlet=\"previewDlgBody\" class=\"mt-2\"></div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close('Close click')\">Close</button>\n </div>\n</ng-template>\n\n<ng-template #previewDlgBody>\n <mat-tab-group [(selectedIndex)]=\"selectedPreviewTab\">\n <mat-tab label=\"View Rendered Form\">\n <ng-template matTabContent>\n <wc-lhc-form [lfData]=\"lfData\"></wc-lhc-form>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"View Questionnaire JSON\">\n <ng-template matTabContent>\n <pre class=\"fix-pre\">{{ formValue | json }}</pre>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</ng-template>\n\n<ng-template #loincSearchDlg let-modal>\n <div class=\"modal-header btn-primary\">\n <h4 class=\"modal-title\" id=\"loinc-search-dlg-title\">Import a LOINC Form</h4>\n <button type=\"button\" class=\"close btn-primary text-white\" aria-label=\"Close\" (click)=\"modal.dismiss()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <form class=\"px-4 py-3\">\n <label for=\"loincSearch\"><span class=\"p-1\">Search LOINC form:</span></label>\n <input type=\"text\"\n id=\"loincSearch\"\n placeholder=\"Search LOINC forms\"\n [ngbTypeahead]=\"acSearch\"\n (selectItem)=\"modal.close($event.item.id)\"\n [resultFormatter]=\"formatter\"\n [inputFormatter]=\"formatter\"\n [editable]='false' />\n </form>\n </div>\n</ng-template>\n\n","/**\n * Customize layout of integer component from ngx-schema-form.\n */\nimport { Component } from '@angular/core';\n\nimport {IntegerWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-integer-widget',\n template: `\n <input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"\n ></lfb-label>\n\t <input [attr.readonly]=\"schema.readOnly?true:null\" [attr.name]=\"name\"\n\t [attr.id]=\"id\"\n\t class=\"text-widget integer-widget form-control {{controlWidthClass}}\" [formControl]=\"control\"\n\t [attr.type]=\"'number'\" [attr.min]=\"schema.minimum\" [attr.max]=\"schema.maximum\"\n\t [attr.placeholder]=\"schema.placeholder\"\n\t [attr.maxLength]=\"schema.maxLength || null\"\n [attr.minLength]=\"schema.minLength || null\">\n </div>\n </ng-template>\n `,\n styles: [``]\n})\nexport class IntegerComponent extends LfbControlWidgetComponent {\n}\n","/**\n * Answer coding component for enableWhen. The component is used for answer type choice for\n * selecting codes to satisfy a condition.\n */\nimport {AfterViewInit, Component, OnInit} from '@angular/core';\nimport {ObjectWidget} from '@lhncbc/ngx-schema-form';\nimport {FormService} from '../../../services/form.service';\n\n@Component({\n selector: 'lfb-enablewhen-answer-coding',\n template: `\n <div class=\"widget form-group form-group-sm\">\n <select [formControl]=\"control\"\n [attr.name]=\"name\" [attr.id]=\"id\"\n class=\"form-control\"\n (change)=\"onChange($event)\"\n >\n <ng-container>\n <option *ngFor=\"let option of answerOption\" [ngValue]=\"option.valueCoding\"\n >{{option.valueCoding.display}} ({{option.valueCoding.code}})</option>\n </ng-container>\n </select>\n </div>\n `,\n styles: [\n ]\n})\nexport class EnablewhenAnswerCodingComponent extends ObjectWidget implements AfterViewInit {\n\n answerOption: any[] = [];\n\n /**\n * Invoke super constructor.\n *\n * @param formService\n */\n constructor(private formService: FormService) {\n super();\n }\n\n /**\n * Component initialization.\n */\n ngAfterViewInit(): void {\n // Setup two binding between property value and control value.\n this.control.valueChanges.subscribe((value) => {\n this.formProperty.setValue(value, false);\n });\n\n this.formProperty.valueChanges.subscribe((newValue) => {\n const currentValue = this.control.value;\n if (currentValue.display !== newValue.display || currentValue.code !== newValue.code) {\n this.control.setValue(newValue, {emitEvent: false});\n }\n });\n\n // Listen to question value changes.\n this.formProperty.searchProperty('question').valueChanges.subscribe((source) => {\n this.answerOption = [];\n if (!source || !source.data) {\n return;\n }\n const answerType = this.formProperty.searchProperty('__$answerType').value;\n\n if (answerType === 'choice' || answerType === 'open-choice') {\n const sourceNode = this.formService.getTreeNodeByLinkId(source.data.linkId);\n this.answerOption =\n (sourceNode && sourceNode.data && sourceNode.data.answerOption)\n ? sourceNode.data.answerOption : [];\n }\n });\n }\n\n\n /**\n *\n * @param event\n */\n onChange(event): void {\n console.log('answer code selected: ' + event);\n }\n}\n","/**\n * Special case pipe to convert questionnaire object to json string.\n * Ignore functions and __$* keys. __$* are local fields, which should be ignored\n * when translating to form definitions.\n * In a special case, handles enableWhen.question, which may refer to\n * ITreeNode. ITreeNode should translate to its linkId.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport {Util} from '../util';\n\n@Pipe({\n name: 'appJson'\n})\nexport class AppJsonPipe implements PipeTransform {\n\n /**\n * Filter transformation.\n *\n * @param value - JSON object\n */\n transform(value: any): string {\n return JSON.stringify(Util.convertToQuestionnaireJSON(value), null, 2);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {FhirService, FHIRServer} from '../../../services/fhir.service';\nimport {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\nimport { fhir } from 'src/app/fhir';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {delay, map, switchMap, tap} from 'rxjs/operators';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\n// Search related inputs on the page.\ninterface State {\n searchTerm: string;\n searchField: SearchField;\n fhirServer: FHIRServer;\n}\n\ninterface SearchField {\n field: string,\n display: string,\n searchFieldPlaceholder: string\n}\n@Component({\n selector: 'lfb-fhir-search-dlg',\n styles: [`\n .result-item:hover {\n background-color: lightgrey;\n }\n\n .bs-like-control {\n border-color: lightgrey;\n border-radius: .2rem;\n color: #495057;\n font-size: 0.875rem;\n }\n `\n ],\n templateUrl: 'fhir-search-dlg.component.html'\n})\nexport class FhirSearchDlgComponent implements OnInit {\n\n infoIcon = faInfoCircle;\n private _loading$ = new BehaviorSubject<boolean>(false);\n private _search$ = new Subject<void>();\n private _bundle$ = new BehaviorSubject<fhir.Bundle>(null);\n\n inputTerm = '';\n resultsOffset = 0; // To calculate serial number of the results across pages\n pageSize = 20;\n nextUrl: fhir.uri = null;\n prevUrl: fhir.uri = null;\n total: number = undefined;\n questionnaires: fhir.Questionnaire [];\n\n /**\n * Define a structure to associate fhir search field, its modifiers, display and search input field placeholder.\n */\n searchFieldList: SearchField [] = [\n {field: '_content', display: 'Any text field', searchFieldPlaceholder: 'Search any text field'},\n {field: 'code', display: 'Item code', searchFieldPlaceholder: 'Search item code'},\n {field: 'title:contains', display: 'Form title only', searchFieldPlaceholder: 'Search form title'},\n {field: 'name:contains', display: 'Form name only', searchFieldPlaceholder: 'Search form name'}\n ];\n\n /**\n * Define a structure to associate search parameters on the page.\n * @private\n */\n private _state: State = {\n searchTerm: '',\n searchField: this.searchFieldList[0],\n fhirServer: this.fhirService.getFhirServer()\n };\n\n constructor(public fhirService: FhirService, private activeModal: NgbActiveModal) {\n // Set up search pipe line\n this._search$.pipe(\n tap(() => this._loading$.next(true)),\n switchMap(() => this._search()),\n tap(() => this._loading$.next(false))\n ).subscribe((bundle) => {\n this.total = undefined; // Reset total before processing bundle\n this._bundle$.next(bundle);\n });\n\n // Set up bundle pipe line. Bundle could be invoked either by search or navigation.\n this.bundle$.pipe(map((bundle) => {\n this.questionnaires = null;\n if(!bundle) {\n return null; // Might happen when initializing _bundle$\n }\n if(bundle.total !== undefined) { // page bundles may not have total. The existing total is valid.\n this.total = bundle.total;\n }\n\n // Capture navigation urls.\n this.nextUrl = null;\n this.prevUrl = null;\n if(bundle.link && bundle.link && bundle.link.length > 0) {\n bundle.link.forEach((lnk) => {\n switch (lnk.relation) {\n case 'self':\n this.resultsOffset = this._getOffset(lnk.url);\n break;\n case 'next':\n this.nextUrl = lnk.url;\n break;\n case 'prev':\n case 'previous':\n this.prevUrl = lnk.url;\n break;\n }\n });\n }\n\n if(!bundle.entry) {\n return null;\n }\n return bundle.entry.map((e) => {\n // Trim down resource\n const res = e.resource;\n const ret = {};\n ['id', 'title', 'name', 'publisher', 'date', 'status', 'code'].forEach((f) => {\n if(res[f]) {\n ret[f] = res[f];\n }\n });\n return ret;\n });\n })\n ).subscribe((resources: fhir.Questionnaire []) => {\n this.questionnaires = resources;\n });\n }\n\n // Getters and setters\n get loading$() { return this._loading$.asObservable(); }\n get bundle$() { return this._bundle$.asObservable(); }\n get searchTerm() { return this._state.searchTerm; }\n set searchTerm(searchTerm: string) { this._set({searchTerm}); }\n get searchField() { return this._state.searchField; }\n set searchField(searchField: SearchField) { this._set({searchField});}\n get selectedFHIRServer() {return this._state.fhirServer;}\n set selectedFHIRServer(fhirServer: FHIRServer) {\n this.fhirService.setFhirServer(fhirServer);\n this._set({fhirServer});\n }\n\n /**\n * Set partial properties of search state.\n * @param patch - Partial state fields.\n * @private\n */\n private _set(patch: Partial<State>) {\n Object.assign(this._state, patch);\n // this._search$.next();\n }\n\n /**\n * Invoke search with inputs\n * @private\n */\n private _search(): Observable<fhir.Bundle> {\n return this.fhirService.search(this.searchTerm, this.searchField.field, {_count: this.pageSize});\n }\n\n ngOnInit(): void {\n }\n\n /**\n * Search button handler.\n */\n searchInput() {\n this.searchTerm = this.inputTerm;\n this._search$.next();\n }\n\n /**\n * Next page button handler\n */\n nextPage(): void {\n this.getBundleByUrl(this.nextUrl);\n }\n\n /**\n * Previous page button handler\n */\n prevPage(): void {\n this.getBundleByUrl(this.prevUrl);\n }\n\n /**\n * Get resource bundle using url, typically by navigation links.\n * @param url\n */\n getBundleByUrl(url: fhir.uri): void {\n this.fhirService.getBundleByUrl(url).subscribe((bundle) => {\n this._bundle$.next(bundle);\n });\n }\n\n /**\n * Get offset of results page. Used to calculate serial numbers on the page.\n * @param url\n */\n _getOffset(url: fhir.uri): number {\n let ret = '';\n if(url) {\n ret = new URL(url).searchParams.get('_getpagesoffset');\n }\n return ret ? parseInt(ret, 10) : 0;\n }\n\n /**\n * Handle dialog dismiss\n * @param reason\n */\n dismiss(reason: any): void {\n this.activeModal.dismiss(reason);\n }\n\n /**\n * Handle dialog close\n * @param value\n */\n close(value: any): void {\n this.activeModal.close(value);\n }\n\n /**\n * Get FHIR server list.\n */\n getServerList(): FHIRServer [] {\n return this.fhirService.fhirServerList;\n }\n}\n","<div class=\"modal-header bg-primary\">\n <h4 class=\"modal-title text-white\">Import a questionnaire</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"close(false)\">\n <span class=\"text-white\" aria-hidden=\"true\">×</span>\n </button>\n</div>\n<!--\nPut search in modal header and results in modal body.\nIt helps to keep the search visible while results are scrolling\n-->\n<div class=\"modal-header\"><ng-container *ngTemplateOutlet=\"search\"></ng-container></div>\n<ng-container *ngTemplateOutlet=\"results\"></ng-container>\n\n<!-- Search template -->\n<ng-template #search>\n <form class=\"container\">\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"input-group input-group-sm\">\n <input type=\"text\" class=\"form-control\"\n [(ngModel)]=\"inputTerm\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"searchField.searchFieldPlaceholder\"\n aria-label=\"Search term\"\n aria-describedby=\"filterHelp\">\n <button\n class=\"align-self-baseline btn btn-sm btn-primary input-group-append\"\n type=\"button\"\n id=\"button-addon2\"\n (click)=\"searchInput()\"\n [disabled]=\"loading$ | async\">\n <span *ngIf=\"loading$ | async\" class=\"spinner-border spinner-border-sm mr-2\" aria-hidden=\"true\" role=\"status\"></span>\n <span *ngIf=\"loading$ | async\">Loading...</span>\n <span *ngIf=\"(loading$ | async) === false\">Search</span>\n </button>\n <span class=\"ml-1 align-self-end\" ngbTooltip=\"Choose a search field and enter the search term. Choosing 'Any text field' implies searching '_content'. Please refer to FHIR REST API for details.\">\n <fa-icon [icon]=\"infoIcon\"></fa-icon>\n </span>\n </div>\n <!-- <small id=\"filterHelp\" class=\"form-text text-muted\">Enter a term to narrow down the result set.</small> -->\n </div>\n <div class=\"col form-group d-sm-inline-flex\">\n <label for=\"SelectFHIRServer1\" class=\"align-self-center mb-0 text-nowrap\">FHIR Server: </label>\n <select class=\"form-control form-control-sm\" id=\"SelectFHIRServer1\" [(ngModel)]=\"selectedFHIRServer\" [ngModelOptions]=\"{standalone: true}\">\n <option *ngFor=\"let server of getServerList()\" [ngValue]=\"server\">{{server.endpoint}}</option>\n </select>\n </div>\n </div>\n <div class=\"m-0 mb-2 row\">\n <label for=\"searchField1\" class=\"align-self-center mb-0 mr-2 text-nowrap\">Search by term occurring in: </label>\n <select class=\"form-control form-control-sm w-auto\" id=\"searchField1\" [(ngModel)]=\"searchField\" [ngModelOptions]=\"{standalone: true}\">\n <option *ngFor=\"let field of searchFieldList\" [ngValue]=\"field\">{{field.display}}</option>\n </select>\n </div>\n <div *ngIf=\"bundle$ | async\" class=\"row\">\n <div class=\"col\">\n <h4 *ngIf=\"total === 1\">{{ total }} resource was found.</h4>\n <h4 *ngIf=\"total > 1\">{{ total }} resources were found.</h4>\n <h4 *ngIf=\"total === 0\">No resources were found.</h4>\n <h4 *ngIf=\"total === undefined\">The following resources were found.</h4>\n </div>\n <div class=\"col-auto btn-group btn-group-sm btn-sm float-right\" role=\"group\" aria-label=\"Navigation\">\n <button type=\"button\" class=\"btn btn-outline-primary\" [disabled]=\"!prevUrl\" (click)=\"prevPage()\">Previous</button>\n <button type=\"button\" class=\"btn btn-outline-primary\" [disabled]=\"!nextUrl\" (click)=\"nextPage()\">Next</button>\n </div>\n </div>\n </form>\n</ng-template>\n\n<!-- Results template -->\n<ng-template #results>\n <ng-container *ngIf=\"questionnaires\">\n <div class=\"modal-body bg-light\">\n <div class=\"list-group list-group-flush\">\n <a href=\"#\" class=\"list-group-item list-group-item-action result-item\" *ngFor=\"let q of questionnaires; index as i\" (click)=\"close(q.id)\">\n <div class=\"row\">\n <div class=\"col-1\">{{resultsOffset + i + 1}}</div>\n <div class=\"col-11\">\n <div *ngIf=\"q.title || q.name\">{{q.title || q.name}}</div>\n <div *ngIf=\"(!q.title && !q.name)\">(No title or name assigned)</div>\n <div>ID: {{q.id}} <span *ngIf=\"q.version\">(version: {{q.version}})</span></div>\n <div *ngIf=\"q.publisher\">Publisher: {{q.publisher}}</div>\n <div *ngIf=\"q.date\">Last changed: {{q.date}}</div>\n </div>\n </div>\n </a>\n </div>\n </div>\n </ng-container>\n</ng-template>\n","import {Component} from '@angular/core';\nimport {ObjectWidget} from '@lhncbc/ngx-schema-form';\nimport {Util} from '../../util';\n\n\n/**\n *\n * A component to layout multiple fields in horizontal layout using bootstrap grid\n */\n@Component({\n selector: 'lfb-grid',\n template: `\n <div *ngFor=\"let fieldset of formProperty.schema.fieldsets\">\n <legend *ngIf=\"fieldset.title\">{{fieldset.title}}</legend>\n <span *ngIf=\"fieldset.description\" data-toggle=\"tooltip\" [title]=\"fieldset.description\" class=\"glyphicon glyphicon-info\" ></span>\n <div class=\"form-row\">\n <div [class]=\"gridClass(field)\" *ngFor=\"let field of getShowFields(fieldset)\">\n <sf-form-element [formProperty]=\"getShowFieldProperty(field)\"></sf-form-element>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .grid-border {\n border: lightgray 1px solid;\n }\n .grid-padding {\n padding: 0 5px 0 5px;\n }\n `]\n})\nexport class GridComponent extends ObjectWidget {\n\n /**\n * Get formProperty (refer to ngx-schema-form) of a showField (refer to assets/*layout.json).\n *\n * @param showField - Field object, see the assets/*-layout.json for the definition\n */\n getShowFieldProperty(showField) {\n const fieldId = typeof showField === 'string' ? showField : typeof showField === 'object' ? showField.field : null;\n const ret = this.formProperty.getProperty(fieldId);\n const schema = ret.schema;\n if (schema && !schema.title) {\n schema.title = Util.capitalize(fieldId);\n }\n return ret;\n }\n\n /**\n * Return bootstrap column class based on showField's definition.\n *\n * @param showField - Field to retrieve the class from.\n */\n gridClass(showField) {\n return showField && showField.col ? 'col-' + showField.col : 'col';\n }\n\n /**\n * Return show fields from fieldset. Fieldset and showFields are specified in layout json.\n *\n * @param fieldset - Field set can include hidden fields.\n */\n getShowFields(fieldset) {\n let ret = fieldset.showFields;\n ret = !ret ? fieldset.fields.map((e) => ({field: e})) : ret;\n ret = ret.filter((field) => {\n const propId = typeof field === 'string' ? field : typeof field === 'object' ? field.field : null;\n return Util.isVisible(this.formProperty, propId);\n });\n return ret;\n }\n\n /**\n * Get widget id.\n * @param showField - Property id or field definition in layout\n * @return widget id of the field.\n */\n getWidgetId(showField): string {\n const p = this.getShowFieldProperty(showField);\n let ret = null;\n if(p && p.schema && p.schema.widget && p.schema.widget.id) {\n ret = p.schema.widget.id;\n }\n return ret;\n }\n}\n","/**\n * Customize layout of checkbox from ngx-schema-form.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport {CheckboxWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-checkbox',\n template: `<div class=\"widget\">\n\t<div *ngIf=\"schema.type!='array'\" [attr.class]=\"'form-check '+lfbClass\">\n <input class=\"form-check-input\" [formControl]=\"control\" [attr.name]=\"name\"\n [attr.id]=\"id\" [indeterminate]=\"control.value !== false && control.value !== true ? true :null\"\n type=\"checkbox\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n <input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <label *ngIf=\"!nolabel && schema.title\" [attr.for]=\"id\" class=\"form-check-label control-label\">\n {{ schema.title }}\n <button *ngIf=\"schema.description\"\n class=\"btn border-0 m-0 p-0\"\n [attr.aria-label]=\"'Tooltip for '+schema.title+': '+schema.description\"\n aria-hidden=\"true\"\n [matTooltip]=\"schema.description\">\n <fa-icon [icon]=\"faInfo\"></fa-icon>\n </button>\n </label>\n\t</div>\n\t<ng-container *ngIf=\"schema.type==='array'\">\n\t\t<div *ngFor=\"let option of schema.items.oneOf\" class=\"checkbox\">\n\t\t\t<label class=\"horizontal control-label\">\n\t\t\t\t<input [attr.name]=\"name\"\n\t\t\t\t\tvalue=\"{{option.enum[0]}}\" type=\"checkbox\"\n\t\t\t\t\t[attr.disabled]=\"schema.readOnly ? '' : null\"\n\t\t\t\t\t(change)=\"onCheck($event.target)\"\n\t\t\t\t\t[attr.checked]=\"checked[option.enum[0]] ? true : null\"\n\t\t\t\t\t[attr.id]=\"id + '.' + option.enum[0]\"\n\t\t\t\t\t>\n\t\t\t\t{{option.description}}\n\t\t\t</label>\n\t\t</div>\n\t</ng-container>\n</div>`\n})\nexport class CheckboxComponent extends CheckboxWidget {\n @Input()\n nolabel = false;\n faInfo = faInfoCircle;\n @Input()\n lfbClass = 'text-center';\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","/**\n * Component to display array of object fields in a table format with field names at the top,\n * add button at the bottom, delete button for each row, label for the table at the left etc.\n *\n * It is optionally controlled by a boolean widget above the table.\n *\n * An optional selection column is provided to select rows with either radio buttons or checkboxes. For example,\n * It could be used as selection of rows for defaults in answer options table.\n * The checkbox selections are captured in an array of boolean values, while index of radio selection is captured\n * in an integer variable.\n */\n\nimport {AfterViewInit, Component, DoCheck, OnChanges, OnDestroy, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {ArrayWidget, FormProperty} from '@lhncbc/ngx-schema-form';\nimport {faPlusCircle} from '@fortawesome/free-solid-svg-icons';\nimport {faTrash} from '@fortawesome/free-solid-svg-icons';\nimport {faAngleDown} from '@fortawesome/free-solid-svg-icons';\nimport {faAngleRight} from '@fortawesome/free-solid-svg-icons';\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport {Util} from '../../util';\nimport {LfbArrayWidgetComponent} from '../lfb-array-widget/lfb-array-widget.component';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'lfb-table',\n templateUrl: './table.component.html', // Use separate files for possible reuse from a derived class\n styleUrls: ['./table.component.css']\n})\nexport class TableComponent extends LfbArrayWidgetComponent implements AfterViewInit, DoCheck, OnDestroy {\n\n static seqNum = 0;\n // Icons for buttons.\n faAdd = faPlusCircle;\n faRemove = faTrash;\n faRight = faAngleRight;\n faDown = faAngleDown;\n\n isCollapsed = false;\n addButtonLabel = 'Add'; // Default label\n noCollapseButton = false;\n noTableLabel = false;\n noHeader = false;\n // Flag to control hiding of add/remove buttons.\n singleItem = false;\n keyField = 'type'; // Key property of the object, based on which some fields could be hidden/shown.\n booleanControlledOption = false;\n booleanControlled = false;\n tableId = 'tableComponent'+TableComponent.seqNum++;\n\n // Row selection variables. Selections can be checkboxes or radio buttons.\n selectionRadio = -1; // Store array index of the radio button selection.\n selectionCheckbox: boolean [] = []; // Store an array of selected rows. Unselected elements are nulls or false.\n rowSelectionType = null; // 'radio' or 'checkbox'\n rowSelection = false; // If a row selection column is displayed. Default is no column.\n\n subscriptions: Subscription [] = [];\n /**\n * Make sure at least one row is present for zero length array?\n */\n ngDoCheck(): void {\n if(this.booleanControlled) {\n this.booleanControlledOption = this.booleanControlledOption || !Util.isEmpty(this.formProperty.value);\n }\n if (this.formProperty.properties.length === 0 && this.booleanControlledOption) {\n this.addItem();\n }\n /*\n // If a single radio item, change it checkbox.\n if (this.rowSelection && this.rowSelectionType === 'radio' && this.formProperty.value.length === 1) {\n this.rowSelectionType = 'checkbox';\n // If single radio was selected, transfer the selection to checkbox.\n if(this.selectionRadio === 0) {\n this.selectionCheckbox[0] = true;\n }\n }\n */\n }\n\n\n /**\n * Initialize\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n const widget = this.formProperty.schema.widget;\n this.addButtonLabel = widget && widget.addButtonLabel\n ? widget.addButtonLabel : 'Add';\n\n this.noTableLabel = !!widget.noTableLabel;\n this.noCollapseButton = !!widget.noCollapseButton;\n this.singleItem = !!widget.singleItem;\n this.booleanControlled = !!widget.booleanControlled;\n if(widget.booleanControlled) {\n this.booleanControlledOption = !!widget.booleanControlledOption;\n }\n\n this.booleanControlledOption = this.booleanControlledOption || !Util.isEmpty(this.formProperty.value);\n\n if(widget.rowSelection) {\n this.rowSelection = widget.rowSelection;\n this.rowSelectionType = widget.rowSelectionType || 'radio'; // Defaults to radio buttons.\n }\n this.selectionRadio = -1;\n this.selectionCheckbox = [];\n const singleItemEnableSource = this.formProperty.schema.widget ?\n this.formProperty.schema.widget.singleItemEnableSource : null;\n const multipleSelectionEnableSource = this.formProperty.schema.widget ?\n this.formProperty.schema.widget.multipleSelectionEnableSource : null;\n // Although intended to be source agnostic, it is mainly intended for 'repeats' field as source.\n // For example, when repeats is false, The initial field is only one row.\n // The requirement is:\n // . When source is false, hide add/remove buttons.\n // . Source if present and is true means show the buttons.\n // . Absence of source condition means the default behavior which is show the buttons.\n let prop = singleItemEnableSource ? this.formProperty.searchProperty(singleItemEnableSource) : null;\n let subsciption: Subscription;\n if (prop) {\n subsciption = prop.valueChanges.subscribe((newValue) => {\n if (newValue === false) {\n // If already has multiple items in the array, remove all items except first one.\n if (this.formProperty.properties.length > 1) {\n this.formProperty.properties = (this.formProperty.properties as FormProperty[]).slice(0, 1);\n this.formProperty.updateValueAndValidity(false, true);\n }\n }\n this.singleItem = !newValue;\n this.noCollapseButton = this.singleItem;\n if(this.rowSelection) {\n this.rowSelectionType = this.singleItem ? 'radio' : 'checkbox';\n }\n });\n this.subscriptions.push(subsciption);\n }\n\n prop = multipleSelectionEnableSource ? this.formProperty.searchProperty(multipleSelectionEnableSource) : null;\n if (prop) {\n subsciption = prop.valueChanges.subscribe((newValue) => {\n this.selectionRadio = -1;\n this.selectionCheckbox = [];\n if (newValue === false && this.rowSelection) {\n this.rowSelectionType = 'radio';\n }\n else if(newValue && this.rowSelection) {\n this.rowSelectionType = 'checkbox';\n }\n if(newValue === false && this.rowSelection && this.formProperty.properties.length === 1) {\n this.rowSelectionType = 'checkbox';\n }\n });\n this.subscriptions.push(subsciption);\n }\n\n const keyField = this.formProperty.findRoot().schema.widget.keyField;\n if (keyField) {\n this.keyField = keyField;\n }\n // Lookout for any changes to key field\n subsciption = this.formProperty.searchProperty(this.keyField).valueChanges.subscribe((newValue) => {\n const showFields = this.getShowFields();\n this.noHeader = showFields.some((f) => f.noHeader);\n });\n\n this.subscriptions.push(subsciption);\n }\n\n /**\n * Get fields to show.\n */\n getShowFields(): any [] {\n let ret: any [] = [];\n if (this.formProperty.schema.widget && this.formProperty.schema.widget.showFields) {\n const showFields = this.formProperty.schema.widget.showFields;\n ret = showFields.filter((field) => {\n return this.isVisible(field.field);\n });\n }\n return ret;\n }\n\n /**\n * Check visibility i.e. based on visibleIf of ngx-schema-form\n * @param propertyId - property id\n */\n isVisible(propertyId) {\n let ret = true;\n if (this.formProperty.properties.length > 0) {\n ret = Util.isVisible(this.formProperty.properties[0], propertyId);\n }\n return ret;\n }\n\n /**\n * Search for formProperty based on '.' delimited property ids.\n *\n * @param parentProperty -\n * @param propertyId -\n */\n getProperty(parentProperty: PropertyGroup, propertyId: string) {\n const path = propertyId.split('.');\n let p = parentProperty;\n for (const id of path) {\n p = p.getProperty(id);\n }\n return p;\n }\n\n /**\n * Get title of a field, given property id.\n * @param parentProperty -\n * @param propertyId -\n */\n getTitle(parentProperty, propertyId): string {\n const p = this.getProperty(parentProperty, propertyId);\n return p.schema && p.schema.title ? p.schema.title : Util.capitalize(propertyId);\n }\n\n\n /**\n * When clicking add button, prevent adding multiple empty rows. Alert the user with a popover message.\n * @param popoverRef - popover reference template.\n */\n addItemWithAlert(popoverRef) {\n const items = this.formProperty.properties as [];\n const lastItem = items.length ? items[items.length - 1] : null;\n if(!lastItem || !Util.isEmpty(lastItem.value)) { // If no lastItem or be not empty.\n this.addItem();\n setTimeout(() => {\n const props = this.formProperty.properties as FormProperty [];\n document.getElementById(this.getCanonicalPath(props,props.length - 1, 0)).focus();\n });\n }\n else {\n popoverRef.open();\n }\n }\n\n /**\n * Get canonical path of the control located in a cell in the table.\n *\n * @param arrayProperties - ArrayProperty of the table\n * @param row - Row index of the cell\n * @param col - Column index of the cell.\n */\n getCanonicalPath(arrayProperties, row, col) {\n return this.getPropertyFromTable(arrayProperties, row, col)?.canonicalPathNotation;\n }\n\n\n /**\n * Get form property of the control located in a table cell.\n * @param arrayProperties - ArrayProperty of the table.\n * @param row - Row index of the cell.\n * @param col - Col index of the cell.\n */\n getPropertyFromTable(arrayProperties, row, col): FormProperty {\n let prop = arrayProperties[row];\n const fieldPath = this.getShowFields()[col].field;\n fieldPath.split('.').forEach((field) => {\n prop = prop.getProperty(field);\n });\n return prop;\n }\n\n\n /**\n * Remove a given item, i.e. a row in the table.\n *\n * Before calling parent class api to remove the item, we need to do some house keeping with respect to table's\n * selection (radio/checkbox) indexes.\n *\n * @param formProperty - The row represented by its form property.\n */\n removeItem(formProperty) {\n const props = this.formProperty.properties as FormProperty [];\n\n const propIndex = props.findIndex((e) => e === formProperty);\n if(propIndex >= 0) {\n if(this.selectionCheckbox.length > 0) {\n this.selectionCheckbox.splice(propIndex, 1);\n }\n if(this.selectionRadio >= 0) {\n if(this.selectionRadio === propIndex) {\n this.selectionRadio = -1; // selected row is deleted. No selected radio button.\n }\n else if (this.selectionRadio > propIndex) {\n this.selectionRadio--;\n }\n }\n }\n super.removeItem(formProperty);\n }\n\n\n /**\n * Possible method for handling row selections for radio buttons.\n */\n radioSelection(event) {\n }\n\n\n /**\n * Possible method for handling row selections for checkboxes.\n */\n checkboxSelection(event) {\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => {\n s.unsubscribe();\n });\n }\n}\n","<ng-container *ngIf=\"booleanControlled\">\n <lfb-boolean-controlled\n [(bool)]=\"booleanControlledOption\"\n [controlWidthClass]=\"controlWidthClass\"\n [labelWidthClass]=\"labelWidthClass\"\n [label]=\"booleanLabel\"\n [labelPosition]=\"labelPosition\"\n [helpMessage]=\"schema.description\"\n ></lfb-boolean-controlled>\n</ng-container>\n\n<div *ngIf=\"!booleanControlled || booleanControlledOption\" class=\"widget form-group m-0\"\n [ngClass]=\n \"{'row': labelPosition === 'left'}\">\n <div [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\">\n <button *ngIf=\"!noCollapseButton\" href=\"#\" type=\"button\"\n [ngClass]=\"{'float-sm-right': labelPosition === 'left'}\"\n class=\"btn btn-default collapse-button\" (click)=\"isCollapsed = !isCollapsed\"\n [attr.aria-expanded]=\"!isCollapsed\" [attr.aria-controls]=\"tableId\">\n <fa-icon [icon]=\"isCollapsed ? faRight : faDown\" aria-hidden=\"true\"></fa-icon>\n </button>\n <lfb-label *ngIf=\"!noTableLabel\" [title]=\"schema.title\" [helpMessage]=\"schema.description\" [for]=\"id\"></lfb-label>\n </div>\n <div class=\"p-0 card {{controlWidthClass}}\" [attr.id]=\"tableId\">\n <table class=\"table table-borderless table-sm lfb-table\" *ngIf=\"formProperty.properties.length > 0\">\n <thead *ngIf=\"!noHeader\" class=\"thead-light\">\n <tr class=\"d-flex\">\n <th *ngFor=\"let showField of getShowFields()\" class=\"col-sm{{showField.col ? ('-'+showField.col) : ''}}\" scope=\"col\">\n <lfb-title\n [title]=\"showField.title || getTitle(formProperty.properties[0], showField.field)\"\n [helpMessage]=\"getProperty(formProperty.properties[0], showField.field).schema.description\"\n ></lfb-title>\n </th>\n <th *ngIf=\"rowSelectionType === 'radio' || rowSelectionType === 'checkbox'\" class=\"col-sm-2\">\n <lfb-title\n title=\"Default\"\n helpMessage=\"Pick a default item\"\n ></lfb-title>\n </th>\n <th *ngIf=\"!singleItem\" class=\"col-sm-1\"></th>\n </tr>\n </thead>\n <tbody [ngbCollapse]=\"isCollapsed\">\n <tr class=\"d-flex\" *ngFor=\"let itemProperty of formProperty.properties; index as ind\">\n <td *ngFor=\"let showField of getShowFields()\" class=\"col-sm{{showField.col ? ('-'+showField.col) : ''}}\">\n <lfb-form-element nolabel=\"true\" [formProperty]=\"getProperty(itemProperty, showField.field)\"></lfb-form-element>\n </td>\n <td *ngIf=\"rowSelectionType === 'radio'\" class=\"col-sm-2 text-center align-self-center\">\n <input type=\"radio\" [ngModel]=\"selectionRadio\" (ngModelChange)=\"radioSelection($event)\" [value]=\"ind\">\n </td>\n <td *ngIf=\"rowSelectionType === 'checkbox'\" class=\"col-sm-2 text-center align-self-center\">\n <input type=\"checkbox\" [(ngModel)]=\"selectionCheckbox[ind]\" (ngModelChange)=\"checkboxSelection($event)\">\n </td>\n <td [ngClass]=\"{'d-none': formProperty.properties.length === 1}\" class=\"col-sm-1 align-middle action-column\">\n <button (click)=\"removeItem(itemProperty)\" class=\"btn btn-default btn-link btn-sm array-remove-button\"\n [attr.disabled]=\"isRemoveButtonDisabled() ? '' : null\"\n *ngIf=\"!(schema.hasOwnProperty('minItems') &&\n schema.hasOwnProperty('maxItems') &&\n schema.minItems === schema.maxItems)\"\n matTooltip=\"Remove\" aria-label=\"Remove\"\n >\n <fa-icon [icon]=\"faRemove\" aria-hidden=\"true\"></fa-icon></button>\n </td>\n </tr>\n </tbody>\n </table>\n <button (click)=\"addItemWithAlert(alertPopover)\" class=\"btn-sm btn-light btn-link array-add-button\"\n [attr.disabled]=\"isAddButtonDisabled() ? '' : null\"\n *ngIf=\"!singleItem &&\n (!(schema.hasOwnProperty('minItems') && schema.hasOwnProperty('maxItems') && schema.minItems === schema.maxItems))\"\n [ngbPopover]=\"'Please fill in the above fields before adding a new item'\"\n #alertPopover=\"ngbPopover\" triggers=\"manual\" placement=\"bottom top\"\n popoverClass=\"\"\n >\n <fa-icon [icon]=\"faAdd\" aria-hidden=\"true\"></fa-icon> {{addButtonLabel}}\n </button>\n </div>\n</div>\n","/**\n * Handles FHIR initial field interaction in the item level form.\n */\nimport {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core';\nimport {TableComponent} from '../table/table.component';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'lfb-initial',\n templateUrl: './../table/table.component.html',\n styleUrls: ['./../table/table.component.css']\n})\nexport class InitialComponent extends TableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n constructor() {\n super();\n }\n}\n","import {\n AfterViewInit, ChangeDetectorRef,\n Component,\n ComponentFactoryResolver, EventEmitter, Input,\n OnChanges,\n OnDestroy,\n OnInit, Output,\n SimpleChanges, ViewChild, ViewContainerRef\n} from '@angular/core';\nimport {SharedObjectService} from '../shared-object.service';\nimport {FormService} from '../services/form.service';\nimport {LinkIdCollection} from '../item/item.component';\n\n@Component({\n selector: 'lfb-sf-form-wrapper',\n templateUrl: './sf-form-wrapper.component.html',\n styleUrls: ['./sf-form-wrapper.component.css']\n})\nexport class SfFormWrapperComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @ViewChild('itemForm', {read: ViewContainerRef}) itemForm: ViewContainerRef;\n\n mySchema: any = {properties: {}};\n myTestSchema: any;\n @Output()\n setLinkId = new EventEmitter();\n @Input()\n model: any;\n @Output()\n modelChange = new EventEmitter<any>();\n @Output()\n valueChange = new EventEmitter<any>();\n @Input()\n linkIdCollection = new LinkIdCollection();\n\n constructor(private modelService: SharedObjectService, private formService: FormService,\n private cfr: ComponentFactoryResolver, private cd: ChangeDetectorRef) {\n this.mySchema = formService.getItemSchema();\n }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit() {\n }\n\n ngOnChanges(changes: SimpleChanges) {\n console.log('sf-form-wrapper.ngOnChanges()');\n if(changes.model) {\n console.log('sf-form-wrapper.ngOnChanges(): model changed');\n this.model = changes.model.currentValue;\n }\n }\n\n updateValue(value) {\n this.valueChange.emit(value);\n this.modelChange.emit(this.model);\n }\n\n\n ngOnDestroy() {\n }\n}\n","<sf-form #itemForm *ngIf=\"model\" [schema]=\"mySchema\"\n [(model)]=\"model\" (onChange)=\"updateValue($event.value)\"\n></sf-form>\n\n","import {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core';\nimport {FormProperty} from '@lhncbc/ngx-schema-form';\nimport {fhir} from '../../../fhir';\nimport {ExtensionsComponent} from '../extensions/extensions.component';\nimport Def from 'autocomplete-lhc';\nimport {Subscription} from 'rxjs';\n\ninterface UnitExtension {\n url: string,\n valueCoding: {\n system?: string,\n code?: string,\n display?: string\n }\n}\n\n@Component({\n selector: 'lfb-units',\n template: `\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <div class=\"{{controlWidthClass}} p-0\">\n <input autocomplete=\"off\" type=\"text\" [attr.id]=\"elementId\" placeholder=\"Search for UCUM units or type your own\" class=\"form-control\" />\n </div>\n </div>\n `,\n styles: [`\n ::ng-deep .autocomp_selected {\n width: 100%;\n border: 0;\n padding: 0;\n }\n ::ng-deep .autocomp_selected ul {\n margin: 0;\n }\n `]\n})\nexport class UnitsComponent extends ExtensionsComponent implements OnInit, AfterViewInit, OnDestroy {\n\n static seqNum = 0;\n static questionUnitExtUrl = 'http://hl7.org/fhir/StructureDefinition/questionnaire-unit';\n static questionUnitOptionExtUrl = 'http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption';\n static ucumSystemUrl = 'http://unitsofmeasure.org'\n\n static unitsExtUrl = {\n quantity: UnitsComponent.questionUnitOptionExtUrl,\n decimal: UnitsComponent.questionUnitExtUrl,\n integer: UnitsComponent.questionUnitExtUrl\n }\n\n elementId: string;\n unitsSearchUrl = 'https://clinicaltables.nlm.nih.gov/api/ucum/v3/search?df=cs_code,name,guidance';\n options: any = {\n matchListValue: false,\n maxSelect: 1,\n suggestionMode: Def.Autocompleter.USE_STATISTICS,\n autocomp: true,\n tableFormat: true,\n colHeaders: [\n 'Unit',\n 'Name',\n 'Guidance'\n ],\n valueCols: [0]\n }\n\n autoComp: Def.Autocompleter;\n\n dataType = 'string';\n subscriptions: Subscription [];\n\n constructor() {\n super();\n this.elementId = 'units'+UnitsComponent.seqNum++;\n this.subscriptions = [];\n }\n\n ngAfterViewInit() {\n this.options.toolTip = this.schema.placeholder;\n // Watch item type to setup autocomplete\n let sub = this.formProperty.searchProperty('/type')\n .valueChanges.subscribe((changedValue) => {\n if(this.dataType !== changedValue) {\n if(changedValue === 'quantity') {\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.decimal);\n }\n else if(changedValue === 'decimal' || changedValue === 'integer') {\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.quantity);\n }\n else {\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.decimal);\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.quantity);\n }\n this.options.maxSelect = changedValue === 'quantity' ? '*' : 1;\n\n if(changedValue === 'quantity' || changedValue === 'decimal' || changedValue === 'integer') {\n this.resetAutocomplete();\n }\n this.dataType = changedValue;\n }\n });\n this.subscriptions.push(sub);\n\n sub = this.formProperty.valueChanges.subscribe(() => {\n this.resetAutocomplete();\n const initialUnits = (this.extensionsProp.properties as FormProperty[]).filter((p) => {\n return p.value.url === UnitsComponent.unitsExtUrl[this.dataType];\n });\n\n for (let i=0, len=initialUnits.length; i<len; ++i) {\n const dispVal = initialUnits[i].value.valueCoding.code || initialUnits[i].value.valueCoding.display;\n this.autoComp.storeSelectedItem(dispVal, dispVal);\n if(this.options.maxSelect === '*') {\n this.autoComp.addToSelectedArea(dispVal);\n }\n }\n });\n this.subscriptions.push(sub);\n\n // Setup selection handler\n Def.Autocompleter.Event.observeListSelections(this.elementId, (data) => {\n if(data.removed) {\n this.removeExt(UnitsComponent.unitsExtUrl[this.dataType], data.final_val); // We are displaying codes for the user.\n }\n else if(data.used_list) {\n const selectedUnit = data.list.find((unit) => {\n return unit[0] === data.item_code;\n });\n this.addExtension(this.createUnitExt(UnitsComponent.unitsExtUrl[this.dataType],\n UnitsComponent.ucumSystemUrl, data.item_code, selectedUnit[1]), 'valueCoding');\n }\n else {\n this.addExtension(this.createUnitExt(UnitsComponent.unitsExtUrl[this.dataType],\n null, data.final_val, data.final_val), 'valueCoding');\n }\n });\n\n }\n\n\n /**\n * Destroy autocomplete.\n * Make sure to reset value\n */\n destroyAutocomplete() {\n if(this.autoComp) {\n this.autoComp.setFieldVal('', false); // autoComp.destroy() does not clear the input box for single-select\n this.autoComp.destroy();\n this.autoComp = null;\n }\n }\n\n\n /**\n * Destroy and recreate autocomplete.\n */\n resetAutocomplete() {\n this.destroyAutocomplete();\n this.autoComp = new Def.Autocompleter.Search(this.elementId, this.unitsSearchUrl, this.options);\n }\n\n /**\n * Delete unit extension object from the extension array.\n * @param unit - FHIR extension represented as unit\n */\n deleteUnit(unit: fhir.Extension): any {\n this.removeExtension(unit);\n }\n\n\n /**\n * Create unit extension object\n *\n * @param unitsExtUrl - Extension uri for the associated unit.\n * @param system - System uri of the coding.\n * @param code - Code of the coding.\n * @param display - Display text of the coding.\n */\n createUnitExt(unitsExtUrl: fhir.uri, system: fhir.uri, code: string, display: string): fhir.Extension {\n const ret: UnitExtension =\n {\n url: unitsExtUrl,\n valueCoding: {code}\n };\n\n if(system) {\n ret.valueCoding.system = system;\n }\n if(display) {\n ret.valueCoding.display = display;\n }\n return ret;\n }\n\n\n /**\n * Clean up before destroy.\n * Destroy autocomplete, unsubscribe all subscriptions.\n */\n ngOnDestroy() {\n this.destroyAutocomplete();\n this.subscriptions.forEach((s) => {\n if(s) {\n s.unsubscribe();\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/**\n * Define user profile\n */\nexport interface UserProfile {\n displayName?: string;\n email?: string;\n}\n\n/**\n * Define login event\n */\nexport interface LoginEvent {\n userProfile: UserProfile;\n event: 'signedIn' | 'signedOut';\n}\n\n/**\n *\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoginService {\n\n service$ = new Subject<LoginEvent>();\n constructor() { }\n\n\n /**\n * Generate logout event.\n * @param userProfile\n */\n logOut(userProfile: UserProfile) {\n return this.service$.next(null);\n }\n\n /**\n * Let the listeners subscribe to the service.\n */\n service(): Observable<LoginEvent> {\n return this.service$.asObservable();\n }\n\n\n /**\n * Generate login event, after authentication.\n * TODO - authentication is not defined yet.\n */\n login() {\n return this.service$.next({event: 'signedIn', userProfile: {displayName: 'Test User', email: 'testUser@example.com'}});\n }\n}\n","/**\n * Handles editing of form level fields.\n */\nimport {\n Component,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {FetchService} from '../fetch.service';\nimport {AutoCompleteResult} from '../lib/widgets/auto-complete/auto-complete.component';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {FormService} from '../services/form.service';\nimport { fhir } from '../fhir';\nimport {Util} from '../lib/util';\n\n@Component({\n selector: 'lfb-form-fields',\n template: `\n <div class=\"card-body content\">\n <div *ngIf=\"true\">\n <h4 class=\"ml-2\">Form level attributes</h4>\n <p class=\"ml-4\">Enter basic information about the form.</p>\n <hr/>\n <div class=\"container\">\n <sf-form [schema]=\"qlSchema\"\n [(model)]=\"questionnaire\"\n (onChange)=\"valueChanged($event)\"\n ></sf-form>\n </div>\n <hr/>\n <div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\n <!-- <button type=\"button\" class=\"btn btn-sm btn-primary mt-4 mr-2\" (click)=\"allFields()\">Show advanced form fields</button> -->\n <button type=\"button\" class=\"btn btn-sm btn-primary mt-4 mr-2 ml-auto\" (click)=\"goToItemEditor()\">{{ questionsButtonLabel }}</button>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .content {\n padding: 0.5rem;\n }\n `]\n})\nexport class FormFieldsComponent {\n\n @Input()\n questionsButtonLabel = 'Create questions';\n @Input()\n questionnaire: fhir.Questionnaire;\n qlSchema: any = {properties: {}}; // Combines questionnaire schema with layout schema.\n notHidden = true;\n acResult: AutoCompleteResult = null;\n\n objectUrl: any;\n\n @Output()\n state = new EventEmitter<string>();\n @Output()\n questionnaireChange = new EventEmitter<fhir.Questionnaire>();\n\n constructor(\n private http: HttpClient,\n private dataSrv: FetchService,\n private modal: NgbModal,\n private formService: FormService\n ) {\n this.qlSchema = this.formService.getFormLevelSchema();\n }\n\n /**\n * Send message to base page to switch the view.\n */\n setGuidingStep(step: string) {\n this.formService.setGuidingStep(step);\n this.formService.autoSave('state', step); // Record change of state.\n }\n\n /**\n * Emit the change event.\n */\n valueChanged(event) {\n this.questionnaireChange.emit(Util.convertToQuestionnaireJSON(event.value));\n }\n\n\n /**\n * Json formatting\n * @param json - JSON object\n */\n stringify(json): string {\n return JSON.stringify(json, null, 2);\n }\n\n\n /**\n * TODO\n */\n allFields() {\n }\n\n\n /**\n * Button handler for edit questions\n */\n goToItemEditor(): void {\n this.setGuidingStep('item-editor');\n }\n}\n","/**\n * Component for general input box\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {ControlWidget, StringWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-string',\n templateUrl: './string.component.html'\n})\nexport class StringComponent extends LfbControlWidgetComponent {\n}\n","<input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n<ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <input [name]=\"name\" [readonly]=\"(schema.widget.id!=='color') && schema.readOnly\"\n class=\"textline-widget form-control {{controlWidthClass}}\"\n [attr.type]=\"!schema.widget.id || schema.widget.id === 'string' ? 'text' : schema.widget.id\"\n [attr.id]=\"id\" [formControl]=\"control\" [attr.placeholder]=\"schema.placeholder\"\n [attr.maxLength]=\"schema.maxLength || null\"\n [attr.minLength]=\"schema.minLength || null\"\n [required]=\"schema.isRequired\"\n [disabled]=\"schema.disabled\">\n </div>\n</ng-template>\n","/**\n * This component handles peculiar case of operator.\n *\n * The semantics of exists and not-exists are implied by 'exists' value in operator (this.formProperty)\n * and followed by true/false value in answerBoolean.\n *\n * The template here is not directly bound to control's form property.\n * It is updated programmatically in the class.\n */\n\nimport {Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {SelectComponent} from '../select/select.component';\n\n@Component({\n selector: 'lfb-enable-operator',\n template: `\n <select #mySelect\n [(ngModel)]=\"model\"\n (change)=\"onSelected()\"\n [attr.name]=\"name\" [attr.id]=\"id\"\n [disabled]=\"schema.readOnly\" class=\"form-control\">\n <ng-container>\n <option *ngFor=\"let option of options[answerType]\" [ngValue]=\"option.option\" >{{option.label}}</option>\n </ng-container>\n </select>\n `,\n styles: [\n ]\n})\nexport class EnableOperatorComponent extends SelectComponent implements OnInit {\n\n // All operators\n userOptions: any [] = [\n {option: 'exists', label: 'Not empty'},\n {option: 'notexists', label: 'Empty'},\n {option: '=', label: '='},\n {option: '!=', label: '!='},\n {option: '>', label: '>'},\n {option: '<', label: '<'},\n {option: '>=', label: '>='},\n {option: '<=', label: '<='}\n ];\n\n // A subset of operators for certain types\n userOptions2: any [] = this.userOptions.filter((e) => {\n return (\n e.option === 'exists' ||\n e.option === 'notexists' ||\n e.option === '=' ||\n e.option === '!='\n );\n });\n\n // Operators based on type.\n options = {\n decimal: this.userOptions,\n integer: this.userOptions,\n quantity: this.userOptions,\n date: this.userOptions,\n dateTime: this.userOptions,\n time: this.userOptions,\n string: this.userOptions,\n text: this.userOptions,\n url: this.userOptions2,\n boolean: this.userOptions2,\n choice: this.userOptions2,\n 'open-choice': this.userOptions2,\n attachment: this.userOptions2,\n reference: this.userOptions2\n };\n\n model: string;\n answerType: string;\n\n /**\n * Initialize\n */\n ngOnInit(): void {\n // this.formProperty represents operator from schema.\n const answerBool = this.formProperty.searchProperty('answerBoolean');\n answerBool.valueChanges.subscribe((val) => {\n if (val === true || val === false) {\n if (this.model === 'exists' || this.model === 'notexists') {\n this.formProperty.setValue('exists', true);\n }\n }\n });\n\n this.formProperty.valueChanges.subscribe((val) => {\n if (val === 'exists' && answerBool.value === false) {\n this.model = 'notexists';\n } else {\n this.model = val;\n }\n });\n\n this.formProperty.searchProperty('__$answerType').valueChanges.subscribe((val) => {\n this.answerType = val;\n });\n }\n\n /**\n * Update control property and its dependent answerBoolean based on user interaction with this widget.\n */\n onSelected(): void {\n if (this.model === 'exists') {\n // answerBoolean should be set to true.\n this.formProperty.searchProperty('answerBoolean').setValue(true, true);\n this.formProperty.setValue(this.model, true);\n } else if (this.model === 'notexists') {\n // There is no notexists. It is 'exists' with answerBoolean set to false\n this.formProperty.searchProperty('answerBoolean').setValue(false, true);\n this.formProperty.setValue('exists', true);\n } else {\n // All others cases\n this.formProperty.searchProperty('answerBoolean').reset(null, true);\n this.formProperty.setValue(this.model, true);\n }\n }\n}\n","/**\n * Customize checkbox\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {CheckboxWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-side-label-checkbox',\n template: `<div *ngIf=\"schema.type!='array'\" class=\"widget row m-0\">\n <label *ngIf=\"!nolabel && schema.title\" [attr.for]=\"id\" class=\"form-check-label {{labelWidthClass}}\">\n {{ schema.title }}\n <button *ngIf=\"schema.description\" class=\"btn border-0 m-0 p-0\"\n [attr.aria-label]=\"'Tooltip for '+schema.title+': '+schema.description\" aria-hidden=\"true\" [matTooltip]=\"schema.description\">\n <fa-icon [icon]=\"faInfo\"></fa-icon>\n </button>\n </label>\n <input [formControl]=\"control\" [attr.name]=\"name\"\n [attr.id]=\"id\" [indeterminate]=\"control.value !== false && control.value !== true ? true :null\"\n type=\"checkbox\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n </div>`,\n styles: [`\n input {\n margin-top: 0.5rem;\n }\n `]\n})\nexport class SideLabelCheckboxComponent extends CheckboxWidget implements OnInit {\n @Input()\n labelWidthClass: string;\n @Input()\n nolabel = false;\n faInfo = faInfoCircle;\n\n ngOnInit() {\n const widget = this.formProperty.schema.widget;\n // Input is priority followed by widget definition and default\n this.labelWidthClass =\n this.labelWidthClass\n ? this.labelWidthClass\n : (widget.labelWidthClass\n ? widget.labelWidthClass\n : 'col-sm');\n }\n\n}\n","/**\n * Component for creating a title for a control.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-title',\n template: `\n <span *ngIf=\"title\" class=\"horizontal control-label\">\n {{title}}\n <button *ngIf=\"helpMessage\" [attr.aria-label]=\"'Tooltip for '+title+': '+helpMessage\" class=\"btn border-0 m-0 p-0\" [matTooltip]=\"helpMessage\">\n <fa-icon [icon]=\"helpIcon\"></fa-icon>\n </button>\n </span>\n `\n})\nexport class TitleComponent implements OnInit {\n\n // Input properties\n @Input()\n title: string;\n @Input()\n helpMessage: string;\n @Input()\n helpIcon = faInfoCircle;\n constructor() { }\n\n ngOnInit() {\n }\n}\n","/**\n * Dialog to select FHIR server from the list of servers.\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {NgbActiveModal, NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {FhirService} from '../../../services/fhir.service';\n\n@Component({\n selector: 'lfb-fhir-servers-dlg',\n template: `\n <div class=\"modal-header bg-primary\">\n <h4 class=\"modal-title text-white\">Choose a FHIR server</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"dismiss()\">\n <span class=\"text-white\" aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\"></th>\n <th scope=\"col\">Fhir Server</th>\n <th scope=\"col\">Description</th>\n </tr>\n </thead>\n <tbody ngbRadioGroup name=\"fhirServer\" [(ngModel)]=\"selectedServer\">\n <tr *ngFor=\"let fhirServer of fhirServerList; index as i\">\n <th scope=\"row\">\n <label ngbButtonLabel><input ngbButton type=\"radio\" [value]=\"fhirServer\"></label>\n </th>\n <td>{{fhirServer.displayName}}</td>\n <td>{{ fhirServer.desc}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n <div class=\"modal-footer btn-group-sm\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"continue()\">Continue</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dismiss()\">Cancel</button>\n </div>\n `,\n styles: [\n ]\n})\nexport class FhirServersDlgComponent implements OnInit {\n\n @Input()\n fhirServerList: any [];\n selectedServer: any;\n\n constructor(private fhirService: FhirService,\n private modalService: NgbModal,\n private activeModal: NgbActiveModal) {\n this.fhirServerList = this.fhirService.fhirServerList;\n this.selectedServer = this.fhirService.getFhirServer();\n }\n\n ngOnInit(): void {\n }\n\n /**\n * Handler for continue button\n */\n continue() {\n this.fhirService.setFhirServer(this.selectedServer);\n this.activeModal.close(true);\n }\n\n /**\n * Handle dialog dismiss\n */\n dismiss() {\n this.activeModal.close(false);\n }\n}\n","/**\n * Handles total score input on the item level form\n */\nimport {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ExtensionsComponent} from '../extensions/extensions.component';\nimport {fhir} from '../../../fhir';\nimport {ArrayProperty, FormProperty} from '@lhncbc/ngx-schema-form';\nimport { RuleEditorService } from 'rule-editor';\nimport {SharedObjectService} from '../../../shared-object.service';\nimport {Subscription} from 'rxjs';\n\n\n@Component({\n selector: 'lfb-total-score',\n template: `\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0' : true, 'widget': true}\">\n <lfb-label [title]=\"schema.title\" [helpMessage]=\"schema.description\" [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"></lfb-label>\n\n <div ngbRadioGroup\n [attr.name]=\"name\"\n class=\"btn-group form-check-inline btn-group-sm btn-group-toggle\" [ngModel]=\"selected\" (ngModelChange)=\"onChange($event)\">\n <ng-container *ngFor=\"let option of ['No', 'Yes']\" class=\"radio\">\n <label ngbButtonLabel class=\"btn-outline-success m-0\">\n <input ngbButton [value]=\"option === 'Yes'\" type=\"radio\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n {{option}}\n </label>\n </ng-container>\n </div>\n </div>\n `,\n styles: [\n ]\n})\nexport class TotalScoreComponent extends ExtensionsComponent implements OnInit, OnDestroy {\n\n public static CALCULATED_EXPRESSION = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression';\n\n selected = false;\n questionnaire: fhir.Questionnaire;\n item: fhir.QuestionnaireItem;\n\n subscriptions: Subscription [] = [];\n\n constructor(private ruleEditorService: RuleEditorService, private modelService: SharedObjectService) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n const eligibleIndicator: FormProperty = this.formProperty.searchProperty('__$totalScoreItem');\n // TODO - Use rule-editor service to determine eligibility.\n const eligible = 'true';\n eligibleIndicator.setValue(eligible, true);\n let subscrption = eligibleIndicator.valueChanges.subscribe((value) => {\n if(value) {\n this.selected = this.isTotalScoreAssigned(this.extensionsProp.properties as FormProperty[]);\n }\n });\n this.subscriptions.push(subscrption);\n // Listen to changes in questionnaire and item.\n subscrption = this.modelService.currentItem$.subscribe((item) => {\n this.item = item;\n });\n this.subscriptions.push(subscrption);\n subscrption = this.modelService.questionnaire$.subscribe((q) => {\n this.questionnaire = q;\n });\n this.subscriptions.push(subscrption);\n\n }\n\n /**\n * Handle user interactions with this widget.\n *\n * @param selected - boolean from radio box.\n */\n onChange(selected) {\n if(selected) {\n this.ruleEditorService.addTotalScoreRule(this.questionnaire, this.item.linkId);\n }\n else {\n this.removeTotalScore();\n }\n }\n\n /**\n * TODO - Use rule-editor service to find if total score extension is present.\n * Check if extensions have total score included.\n * @param extensions - FHIR extension array to search for total score extension.\n * @return boolean\n */\n isTotalScoreAssigned(props: FormProperty []): boolean {\n if(!props || props.length === 0) {\n return false;\n }\n\n return props.some((p) => {\n return p.value.url === TotalScoreComponent.CALCULATED_EXPRESSION &&\n p.value.valueExpression.description.toLowerCase().isEqual('total score calculation');\n });\n }\n\n\n /**\n * Remove any existing total score extension.\n */\n removeTotalScore(): void {\n const props = this.extensionsProp.properties as FormProperty[];\n if(props && props.length > 0) {\n const i = props.findIndex((p) => {\n return p.value.url === TotalScoreComponent.CALCULATED_EXPRESSION && p.value.valueExpression.description.toLowerCase().isEqual('total score calculation')\n })\n if(i >= 0) {\n props.splice(i, 1);\n }\n }\n }\n\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => {\n s.unsubscribe();\n });\n }\n}\n","/**\n * Customize layout of form-element from ngx-schema-form\n */\nimport {Component, OnInit, OnChanges, Input, OnDestroy, SimpleChanges, DoCheck} from '@angular/core';\nimport { FormElementComponent} from '@lhncbc/ngx-schema-form';\nimport { Widget } from '@lhncbc/ngx-schema-form';\n\n\n@Component({\n selector: 'lfb-form-element',\n template: `\n <div *ngIf=\"formProperty.visible\"\n [class.has-error]=\"!formProperty.valid\"\n [class.has-success]=\"formProperty.valid\">\n <lfb-element-chooser\n [nolabel]=\"nolabel\"\n [layout]=\"layout\"\n [labelWidthClass]=\"labelWidthClass\"\n [booleanControlled]=\"booleanControlled\"\n [booleanLabel]=\"booleanLabel\"\n (widgetInstanciated)=\"onWidgetInstanciated($event)\"\n [widgetInfo]=\"formProperty.schema.widget\">\n </lfb-element-chooser>\n <sf-form-element-action *ngFor=\"let button of buttons\" [button]=\"button\" [formProperty]=\"formProperty\"></sf-form-element-action>\n </div>\n `,\n styles: []\n})\nexport class AppFormElementComponent extends FormElementComponent {\n static seqNum = 0;\n // Input properties, typically read from layout schema json.\n @Input()\n nolabel = false;\n @Input()\n layout: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n\n /*\n --- Used for debugging ----\nngOnChanges(changes: SimpleChanges): void {\n for (const prop in changes) {\n if (prop === 'formProperty') {\n console.log(\n`${prop}: ${changes[prop].previousValue ? changes[prop].previousValue.path : ''} /\n ${changes[prop].currentValue ? changes[prop].currentValue.path : ''} / ${changes[prop].firstChange}`);\n } else if (prop === 'control') {\n console.log(\n`${prop}: ${changes[prop].previousValue ? changes[prop].previousValue.valid : ''} /\n ${changes[prop].currentValue ? changes[prop].currentValue.valid : ''} / ${changes[prop].firstChange}`);\n } else {\n console.log(\n`${prop}: ${changes[prop].previousValue} / ${changes[prop].currentValue} / ${changes[prop].firstChange}`);\n }\n }\n }\n\n ngDoCheck(): void {\n console.log('Control of ' + this.formProperty.path + ': ');\n console.dir(this.control);\n }\n */\n\n /**\n * Override to add custom properties\n *\n * @param widget - Component widget\n */\n onWidgetInstanciated(widget: Widget<any>): void {\n super.onWidgetInstanciated(widget);\n this.setCanonicalId(); // Re-assign ids with canonical paths with proper indices.\n // @ts-ignore\n this.widget.nolabel = this.nolabel;\n // @ts-ignore\n this.widget.layout = this.layout;\n // @ts-ignore\n this.widget.labelWidthClass = this.labelWidthClass;\n // @ts-ignore\n this.widget.controlWidthClass = this.controlWidthClass;\n }\n\n\n /**\n * For some reason, the canonical path includes '*' for array items.\n * This method is to replace them with proper array indices. These ids are used for html element id\n */\n setCanonicalId(): void {\n // Parent path has proper index. Replace ancestral portion of the path with parent's path.\n const parentId = this.formProperty.parent?.canonicalPathNotation;\n if(parentId) {\n let id = parentId + this.formProperty.canonicalPathNotation.replace(/^.*\\./, '.');\n if (this.formProperty.root.rootName) {\n id = `${this.formProperty.root.rootName}:${id}`;\n }\n this.widget.name = id;\n this.widget.id = id;\n }\n }\n}\n","import {Injectable, Type} from '@angular/core';\nimport Client from 'fhirclient/lib/Client';\nimport * as FHIR from 'fhirclient';\nimport {defer, from, Observable} from 'rxjs';\nimport { fhir } from '../fhir';\nimport {fhirclient} from 'fhirclient/lib/types';\nimport Resource = fhirclient.FHIR.Resource;\n\nexport interface FHIRServer {\n // resultsOffset: number;\n // pageSize: number;\n id: number;\n displayName: string;\n endpoint: fhir.uri;\n desc: string;\n version: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FhirService {\n\n /*\n List of fhir servers.\n The server object definition:\n {\n id: // Helps to track the object in angular template binding\n displayName: // Name as seen by the user\n endpoint: // The url of the FHIR API endpoint to be assigned to\n // x-target-fhir-endpoint\n basicAuth: // Optional basic authentication string to be assigned to\n // x-target-fhir-server-authorization header.\n version: // FHIR version, ex: STU3, R4 ...\n }\n */\n fhirServerList: FHIRServer[] = [\n {\n id: 4,\n displayName: 'NLM HAPI FHIR Server - R4',\n endpoint: 'https://lforms-fhir.nlm.nih.gov/baseR4',\n desc: 'NLM Test Server (R4 Resources)',\n version: 'R4'\n },\n {\n id: 3,\n displayName: 'UHN HAPI Server - R4',\n endpoint: 'http://hapi.fhir.org/baseR4',\n desc: 'UHN Test Server (R4 Resources)',\n version: 'R4'\n },\n {\n id: 2,\n displayName: 'UHN HAPI Server - STU3',\n endpoint: 'http://hapi.fhir.org/baseDstu3',\n desc: 'UHN Test Server (STU3 Resources)',\n version: 'STU3'\n },\n {\n id: 1,\n displayName: 'clinFHIR R3',\n endpoint:'http://snapp.clinfhir.com:8081/baseDstu3',\n desc: 'Example Server',\n version: 'STU3'\n }\n ];\n/*\n config: any = {\n headers: {}\n };\n*/\n currentServer: FHIRServer;\n smartClient: Client;\n constructor() {\n // this.smartClient = FHIR.client(window.location.href+'fhir-api');\n this.setFhirServer(this.fhirServerList[0]);\n }\n\n /**\n * Creates a resource on the fhir server, assigning publisher field from the user profile.\n *\n * @param resource - A string representation of fhir resource or fhir resource object.\n * @param userProfile - User's login profile.\n * @returns - An http promise\n */\n create(resource: string | fhir.Resource, userProfile): Observable<fhir.Resource> {\n // There is no equivalent field to identify the author/publisher in lforms.\n // This field could be handy to retrieve user's resources from fhir server.\n // For now combine name and email to make it unique and searchable by name.\n const res = typeof resource === 'string' ? JSON.parse(resource) : resource;\n this.assignPublisher(res, userProfile);\n\n return this.promiseToObservable(this.smartClient.create(res));\n };\n\n\n /**\n * Creates a resource on the fhir server.\n *\n * @param resource - A string representation of fhir resource or fhir resource object.\n * @param userProfile - User's login profile.\n * @returns - An http promise\n */\n update(resource: string | fhir.Resource, userProfile): Observable<fhir.Resource> {\n const res = typeof resource === 'string' ? JSON.parse(resource) : resource;\n this.assignPublisher(res, userProfile);\n return this.promiseToObservable(this.smartClient.update(res));\n };\n\n\n /**\n * Read a questionnaire fhir resource.\n * @param id - Id of the resource.\n * @returns - An http promise\n */\n read(id): Observable<fhir.Resource> {\n return this.promiseToObservable(this.smartClient.request<fhir.Resource>({\n url: 'Questionnaire/'+id+'?_format=application/fhir+json',\n // headers: this.config.headers\n }));\n };\n\n\n /**\n * Delete a questionnaire fhir resource.\n *\n * @param id - Id of the resource.\n * @returns - An http promise\n */\n delete(id): Observable<any> {\n return this.promiseToObservable(this.smartClient.delete('Questionnaire/' + id));\n };\n\n\n /**\n *\n *\n * @param searchStr - A search term to search FHIR resources\n * @param searchField - Field to search, should be a valid searchable field. Refer to FHIR REST API for list of fields.\n * @param otherQueryParams? - (Optional) Any additional or overriding query parameters to send to FHIR server.\n * @returns Http promise\n */\n search(searchStr: string, searchField?: string, otherQueryParams?: any): Observable<fhir.Bundle> {\n const query = {_sort: ['-_lastUpdated'], _total: 'accurate', _format: 'application/fhir+json'};\n Object.assign(query, otherQueryParams);\n\n if(!searchField) {\n searchField = '_content';\n }\n\n if(searchStr) {\n // query[searchField+':contains'] = searchStr;\n query[searchField] = searchStr;\n }\n\n return this.promiseToObservable(this.smartClient.request<fhir.Bundle>({\n url: 'Questionnaire?' + this.queryToString(query)\n }));\n };\n\n\n /**\n * Get FHIR results using a url. The paginated results are obtained using a url in the result bundle\n * @param url - The URL referring to the resource bundle on the FHIR server.\n * @returns - FHIR resource bundle\n */\n getBundleByUrl(url: fhir.uri): Observable<fhir.Bundle> {\n return this.promiseToObservable(this.smartClient.request(url));\n };\n\n /**\n * Get FHIR pagination results using a current bundle. The paginated results are\n * obtained using a url in the current results bundle\n *\n * @param bundle - The FHIR bundle from which to extract the relation url.\n * @param relation - A string specifying the relation ('prev' | 'next')\n * @returns - FHIR resource bundle\n */\n getPage(bundle, relation): Observable<fhir.Bundle> {\n let url;\n if(relation === 'prev' || relation === 'previous') {\n url = bundle.link.prev || bundle.link.previous; // prev and previous are synonymous\n }\n else {\n url = bundle.link[relation];\n }\n\n return this.getBundleByUrl(url);\n };\n\n\n /**\n * Set fhir server headers\n *\n * @param fhirServer - fhirServer object. See dataConstants.fhirServerList for its definition.\n */\n setFhirServer(fhirServer: FHIRServer): void {\n this.currentServer = fhirServer;\n this.smartClient = FHIR.client(this.currentServer.endpoint);\n };\n\n getFhirServer(): FHIRServer {\n return this.currentServer;\n }\n\n /**\n * If publisher is specified, assign one by creating one from user profile, if exists.\n *\n * @param resource - FHIR resource object.\n * @param userProfile - User's login profile\n * @returns - a\n */\n assignPublisher(resource, userProfile): void {\n if(resource && !resource.publisher && userProfile) {\n if(userProfile.displayName) {\n let pubName = userProfile.displayName;\n if(userProfile.email) {\n pubName += '; ' + userProfile.email;\n }\n resource.publisher = pubName;\n }\n }\n }\n\n queryToString(obj: any): string {\n let ret: string = null;\n if(obj) {\n ret = Object.entries(obj).map(([k, v]) => {\n if(Array.isArray(v)) {\n v = (v as Array<string>).join(',');\n }\n return encodeURI(k)+'='+encodeURI(v as string);\n }).join('&');\n }\n return ret;\n }\n\n promiseToObservable<T>(promise: Promise<T>): Observable<T> {\n return defer(() => from(promise));\n }\n\n _getSmartClient(): Client {\n return this.smartClient;\n }\n}\n","/**\n * Customize array-widget from ngx-schema-form. ArrayWidget represents a component\n * with array of objects, typically like a table of rows with columns.\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {ArrayWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-array-widget',\n template: `\n `,\n styles: [\n ]\n})\nexport class LfbArrayWidgetComponent extends ArrayWidget implements OnInit {\n // Info icon\n faInfo = faInfoCircle;\n // Properties to customize the layout, typically read from layout schema json.\n @Input()\n nolabel = false;\n @Input()\n labelPosition: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n @Input()\n booleanControlledInitial = true;\n\n ngOnInit() {\n this.formProperty.valueChanges.subscribe((vals) => {\n this.updateWidget();\n\n });\n if(Array.isArray(this.formProperty.properties) && this.formProperty.properties.length === 0) {\n this.formProperty.addItem();\n }\n }\n\n\n updateWidget() {\n const widget = this.formProperty.schema.widget;\n // Input is priority followed by widget definition and default\n this.labelPosition = this.labelPosition || widget.labelPosition || 'top';\n\n // Apply width classes for only left positioned labels.\n this.labelWidthClass =\n this.labelPosition === 'left'\n ? (this.labelWidthClass || widget.labelWidthClass || 'col-sm')\n : '';\n\n this.controlWidthClass =\n this.labelPosition === 'left'\n ? (this.controlWidthClass || widget.controlWidthClass || 'col-sm')\n : '';\n\n this.booleanControlled = this.booleanControlled || !!widget.booleanControlled;\n this.booleanLabel = this.booleanLabel || widget.booleanLabel;\n\n this.booleanControlledInitial = widget.booleanControlledInitial !== undefined ?\n widget.booleanControlledInitial : this.booleanControlledInitial; // If not defined, show the control.\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {StringComponent} from '../string/string.component';\nimport {FormProperty} from '@lhncbc/ngx-schema-form';\nimport {fhir} from '../../../fhir';\nimport {Util} from '../../util';\n\n@Component({\n selector: 'lfb-string-with-css',\n templateUrl: './string-with-css.component.html'\n})\nexport class StringWithCssComponent extends StringComponent implements OnInit {\n\n static RENDERING_STYLE_EXT_URL = 'http://hl7.org/fhir/StructureDefinition/rendering-style';\n cssValue: string;\n name: string;\n elementTypeFieldFormProperty: FormProperty;\n elementTypeFieldValue; any;\n\n extensionTmpl: fhir.Extension = {\n url: StringWithCssComponent.RENDERING_STYLE_EXT_URL\n };\n\n\n constructor() {\n super();\n }\n\n\n /**\n * Initialize member variables.\n */\n ngOnInit() {\n this.name = this.formProperty.canonicalPathNotation;\n this.elementTypeFieldFormProperty = this.getCorrespondingFieldElementProperty();\n this.elementTypeFieldValue = this.elementTypeFieldFormProperty?.value;\n const ext = Util.findExtensionByUrl(this.elementTypeFieldValue?.extension,\n StringWithCssComponent.RENDERING_STYLE_EXT_URL);\n this.cssValue = ext?.valueString || '';\n }\n\n\n /**\n * Handle change of css input\n * @param cssString - new CSS input\n */\n cssChanged(cssString) {\n const ind = Util.findExtensionIndexByUrl(\n this.elementTypeFieldValue.extension, StringWithCssComponent.RENDERING_STYLE_EXT_URL);\n let ext;\n this.cssValue = cssString.trim();\n if(this.cssValue) {\n if(ind < 0) {\n ext = Object.assign({}, this.extensionTmpl);\n }\n else {\n ext = this.elementTypeFieldValue.extension[ind];\n }\n\n ext.valueString = this.cssValue;\n if(!this.elementTypeFieldValue.extension) {\n this.elementTypeFieldValue.extension = [];\n }\n if(this.elementTypeFieldValue.extension.length === 0) {\n this.elementTypeFieldValue.extension.push(ext);\n }\n }\n else if(ind >= 0) { // Empty value, remove any existing extension.\n this.elementTypeFieldValue.extension.splice(ind, 1);\n }\n\n this.elementTypeFieldFormProperty.reset(this.elementTypeFieldValue, false);\n }\n\n\n /**\n * Get sibling FHIR element type field of this field. Ex: _text for text, _prefix for prefix.\n */\n getCorrespondingFieldElementProperty() {\n let elName = this.formProperty?.canonicalPathNotation?.replace(/^.*\\./, '');\n elName = elName ? '_' + elName : null;\n return this.formProperty.parent.getProperty(elName);\n }\n\n /**\n * Create button label based on css content\n */\n cssButtonLabel() {\n const labelPrefix = (this.cssValue && this.cssValue.trim().length > 0) ? 'Edit' : 'Add';\n return labelPrefix + ' css styles';\n }\n}\n","<input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n<ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <div class=\"input-group {{controlWidthClass}} p-0\">\n <input [name]=\"name\" [attr.readonly]=\"(schema.widget.id!=='color') && schema.readOnly?true:null\"\n class=\"textline-widget form-control\"\n [attr.type]=\"!schema.widget.id || schema.widget.id === 'string' ? 'text' : schema.widget.id\"\n [attr.id]=\"id\" [formControl]=\"control\" [attr.placeholder]=\"schema.placeholder\"\n [attr.maxLength]=\"schema.maxLength || null\"\n [attr.minLength]=\"schema.minLength || null\"\n [attr.required]=\"schema.isRequired ? '' : null\"\n [attr.disabled]=\"schema.disabled ? '' : null\">\n <div class=\"input-group-append\">\n <div ngbDropdown class=\"d-inline-block\" #myDropdown=\"ngbDropdown\" placement=\"bottom-right\">\n <button class=\"btn btn-sm btn-outline-primary\" [attr.id]=\"id+'dropdownButton'\" ngbDropdownToggle>{{cssButtonLabel()}}</button>\n <div ngbDropdownMenu [attr.aria-labelledby]=\"id+'dropdownButton'\" style=\"{height: 200px; width: 200px}\">\n <form class=\"px-1 py-1\" [attr.id]=\"id+'dropdownForm'\">\n <div class=\"form-group\">\n <label [attr.for]=\"id+'css'\" class=\"text-nowrap\">Specify CSS Styles:</label>\n <textarea\n rows=\"4\"\n cols=\"50\"\n (change)=\"cssChanged($event.target.value)\"\n class=\"form-control\"\n [attr.id]=\"id+'css'\"\n >{{cssValue}}</textarea>\n </div>\n <button class=\"btn-sm btn-primary\" (click)=\"myDropdown.close()\">Close</button>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n","/**\n * A service to fetch data from clinical tables search service and lforms-fhir servers.\n */\nimport { Injectable } from '@angular/core';\nimport {HttpClient, HttpParams, HttpResponse} from '@angular/common/http';\nimport {Observable, of} from 'rxjs';\nimport {catchError, map, tap} from 'rxjs/operators';\nimport {TreeNode, ITreeOptions} from '@circlon/angular-tree-component/';\nimport {TREE_ACTIONS, KEYS, TreeModel} from '@circlon/angular-tree-component';\nimport {AutoCompleteResult} from './lib/widgets/auto-complete/auto-complete.component';\nimport {Util} from './lib/util';\ndeclare var LForms: any;\n\nenum JsonFormatType {\n R4 = 'R4',\n STU3 = 'STU3',\n LFORMS = 'lforms'\n}\n\nexport enum LoincItemType {\n PANEL = 'panel',\n QUESTION = 'question'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FetchService {\n static loincBaseUrl = 'https://clinicaltables.nlm.nih.gov';\n static loincSearchUrl = FetchService.loincBaseUrl + '/api/loinc_items/v3/search';\n static loincFormsUrl = FetchService.loincBaseUrl + '/loinc_form_definitions';\n static fhirUrl = 'https://lforms-fhir.nlm.nih.gov/baseR4/Questionnaire';\n treeOptions: ITreeOptions = {\n displayField: 'text',\n // isExpandedField: 'expanded',\n // idField: 'linkId',\n childrenField: 'item',\n actionMapping: {\n mouse: {\n dblClick: (tree, node, $event) => {\n if (node.hasChildren) { TREE_ACTIONS.TOGGLE_EXPANDED(tree, node, $event); }\n },\n click: TREE_ACTIONS.FOCUS,\n },\n keys: {\n [KEYS.ENTER]: TREE_ACTIONS.EXPAND\n }\n },\n nodeHeight: 23,\n allowDrag: (node) => {\n return true;\n },\n allowDrop: (node) => {\n return true;\n },\n // allowDragoverStyling: true,\n levelPadding: 10,\n useVirtualScroll: true,\n animateExpand: true,\n scrollOnActivate: true,\n animateSpeed: 30,\n animateAcceleration: 1.2,\n scrollContainer: document.documentElement // HTML\n };\n\n assetsUrl = '/assets';\n constructor(private http: HttpClient) { }\n\n /**\n * Get questionnaire by id from FHIR server.\n * @param id - Id of the questionnaire\n */\n getFormData(id: string): Observable<any> {\n return this.http.get(FetchService.fhirUrl + '/' + id, {responseType: 'json'});\n }\n\n /**\n * This is used to configure widget to edit item in json editor.\n */\n getItemEditorSchema(): Observable<any> {\n return this.http.get(this.assetsUrl + '/item-editor.schema.json', {responseType: 'json'});\n }\n\n /**\n * Options for sidebar tree\n */\n getTreeOptions() {\n return this.treeOptions;\n }\n\n\n /**\n * Search questionnaires on fhir server, intended for auto completion for importing questionnaires.\n *\n * @param term - Search term\n * @param options - http request options\n */\n searchForms(term: string, options?): Observable<AutoCompleteResult []> {\n options = options || {};\n options.observe = options.observe || 'body' as const;\n options.responseType = options.responseType || 'json' as const;\n options.params = (options.params || new HttpParams()).set('title', term).set('_elements', 'id,title');\n return this.http.get<AutoCompleteResult []>(FetchService.fhirUrl, options).pipe(\n tap((resp) => { console.log(resp); }),\n map((resp: any) => {\n return (resp.entry as Array<any>).map((e) => {\n return {title: e.resource.title, id: e.resource.id};\n });\n }),\n catchError((error) => {console.log('searching for ' + term, error); return of([]); })\n );\n }\n\n\n /**\n * Search CTSS for loinc items, intended for auto complete.\n *\n * @param term - Search term.\n * @param loincType - Panel or question.\n * @param options - http request options.\n */\n searchLoincItems(term: string, loincType?: LoincItemType, options?): Observable<AutoCompleteResult []> {\n options = options || {};\n options.observe = options.observe || 'body' as const;\n options.responseType = options.responseType || 'json' as const;\n options.params = (options.params ||\n new HttpParams());\n if(loincType === LoincItemType.PANEL) {\n options.params = options.params.set('type', 'form_and_section').set('available', true);\n }\n else {\n options.params = options.params.set('type', 'question').set('ef', 'answers,units,datatype');\n }\n options.params = options.params\n .set('terms', term)\n .set('maxList', 20);\n return this.http.get<AutoCompleteResult []>(FetchService.loincSearchUrl, options).pipe(\n // tap((resp: HttpResponse<AutoCompleteResult []>) => {console.log(resp)}),\n map((resp: any) => {\n const results: AutoCompleteResult [] = [];\n if (Array.isArray(resp)) {\n const loincNums: string[] = resp[1];\n const texts: string [] = resp[3];\n const extraFields: any = resp[2];\n loincNums.forEach((loincNum, index) => {\n const item: any = this.convertLoincQToItem(\n loincNum,\n texts[index][0],\n extraFields ? extraFields.answers[index] : null,\n extraFields ? extraFields.units[index] : null,\n extraFields ? extraFields.datatype[index] : null);\n results.push(item);\n // results.push({id: loincNum[index], title: texts[index][0]});\n });\n }\n return results;\n })\n );\n }\n\n\n /**\n * Fetch loinc panel based on loinc number.\n * @param loincNum - Loinc number\n * @param options - Any http options.\n */\n getLoincPanel(loincNum: string, options?): Observable<any> {\n options = options || {};\n options.observe = options.observe || 'body' as const;\n options.responseType = options.responseType || 'json' as const;\n options.params =\n (options.params ||\n new HttpParams())\n .set('loinc_num', loincNum);\n return this.http.get<any>(FetchService.loincFormsUrl, options).pipe(map((form: any) => {\n // We get the item (panel) in lforms form format. Convert form level fields to item level fields and pass it\n // FHIR conversion library.\n const convertedLFormsItem = {\n question: form.name,\n questionCode: form.code,\n dataType: 'SECTION',\n items: form.items\n };\n // Wrap it in LForms for conversion\n const wrapperLForm = {\n lformsVersion: form.lformsVersion,\n name: form.name,\n items: [convertedLFormsItem]\n };\n // const fhirQ = fhir.SDC.convertLFormsToQuestionnaire(wrapperLForm);\n const fhirQ = LForms.Util.getFormFHIRData('Questionnaire', 'R4', wrapperLForm);\n return fhirQ.item[0]; // It is just one item in item array.\n }));\n }\n\n /**\n * Create FHIR Questionnaire.item from loinc question info.\n *\n */\n convertLoincQToItem(loincNum: string, text: string, answers: any [], units: any[], datatype: string): any {\n const ret: any = {};\n ret.code = [\n {\n code: loincNum,\n system: 'http://loinc.org',\n display: text\n }\n ];\n ret.text = text;\n if(answers) {\n const answerOption: any[] = [];\n answers.forEach((answer) => {\n const option: any = {\n valueCoding: {\n code: answer.AnswerStringID,\n system: 'http://loinc.org',\n display: answer.displayText\n }\n }\n answerOption.push(option);\n });\n ret.answerOption = answerOption;\n }\n ret.type = Util.getFhirType(datatype);\n if(units) {\n ret.extension = Util.convertUnitsToExtensions(units);\n }\n return ret;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {LfbArrayWidgetComponent} from '../lfb-array-widget/lfb-array-widget.component';\nimport {ArrayProperty, FormProperty} from '@lhncbc/ngx-schema-form';\nimport {fhir} from '../../../fhir';\nimport uri = fhir.uri;\n\n@Component({\n selector: 'lfb-extensions',\n template: ``,\n styles: [\n ]\n})\nexport class ExtensionsComponent extends LfbArrayWidgetComponent implements OnInit {\n extensionsProp: ArrayProperty;\n _extMap: Map<fhir.uri, fhir.Extension []> = new Map();\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.extensionsProp = this.formProperty.searchProperty('extension') as ArrayProperty;\n /* this.extensionsProp.valueChanges.subscribe((val) => {}); */\n this._extMap = this.extensionsProp.value.reduce((acc: Map<uri, any>, ext: fhir.Extension, index: number) => {\n let e: fhir.Extension [] = acc.get(ext.url);\n if(!e) {\n e = [];\n acc.set(ext.url, e);\n }\n e.push(ext);\n return acc;\n }, this._extMap);\n }\n\n\n /**\n * Remove extension from the array, matching url, code and system. Code and system are optional\n * and should be used to match with increased specificity.\n * @param url\n * @param code\n * @param system\n */\n removeExt(url: fhir.uri, code?: string, system?: fhir.uri) {\n const extension: FormProperty = (this.extensionsProp.properties as FormProperty[]).find((ext) => {\n let ret = ext.value.url === url;\n ret = code ? (ret && ext.value.valueCoding && ext.value.valueCoding.code === code) : ret;\n return system ? (ret && ext.value.valueCoding.system === system) : ret;\n });\n this.extensionsProp.removeItem(extension);\n }\n\n\n /**\n * Remove extensions by extension url.\n * @param extUrl\n */\n removeExtensionsByUrl(extUrl: string) {\n const otherExts: any [] = (this.extensionsProp.properties as FormProperty[]).filter((ext) => {\n return ext.value.url !== extUrl;\n }).map(p => p.value);\n\n if(otherExts.length !== this.extensionsProp.properties.length) {\n this.extensionsProp.reset(otherExts);\n }\n }\n\n\n /**\n * Remove extension comparing the fields of given extension.\n * @param ext\n */\n removeExtension(ext: fhir.Extension): void {\n\n this.removeExt(ext.url, ext.valueCoding.code, ext.valueCoding.system);\n }\n\n\n /**\n * Add extension property.\n * Extension will include only one of several possible value[x] fields. If the value type is passed, removes all other\n * empty value[x].\n *\n * @param ext - Extension object\n * @param valueType - Key of valueType. It starts with 'value' prefix. If given,\n * all other value[x] will be deleted from the property value.\n *\n */\n addExtension(ext: fhir.Extension, valueType) {\n const extProp = this.extensionsProp.addItem(ext);\n if(valueType) {\n this.pruneUnusedValues(extProp, valueType);\n }\n return extProp;\n }\n\n\n /**\n * Remove unused value[x] fields from extension.\n *\n * @param extProperty - Extension form property\n * @param keepValueType - value[x] to keep.\n */\n pruneUnusedValues(extProperty: FormProperty, keepValueType) {\n const value = extProperty.value;\n const keys = Object.keys(value);\n for (const key of keys) {\n if(value.hasOwnProperty(key) && key.startsWith('value') && key !== keepValueType) {\n delete value[key];\n }\n }\n return extProperty;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {GridComponent} from '../grid.component/grid.component';\n\n/**\n *\n */\n@Component({\n selector: 'lfb-left-label-form-group',\n template: `\n <div class=\"form-group row\" *ngFor=\"let field of getShowFields()\">\n <div [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\">\n <lfb-label\n [for]=\"getShowFieldProperty(field).id\"\n [title]=\"getSchema(field).title\"\n [helpMessage]=\"getSchema(field).description\"\n ></lfb-label>\n </div>\n <div [class]=\"controlWidthClass\" >\n <lfb-form-element\n [nolabel]=\"true\"\n [formProperty]=\"getShowFieldProperty(field)\"\n ></lfb-form-element>\n </div>\n </div>\n `,\n styles: [`\n .form-group {\n margin: 0;\n }\n .row {\n margin: 0;\n }\n :host ::ng-deep .col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,\n .col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12\n {\n padding-right: 5px;\n padding-left: 5px;\n }\n `]\n})\nexport class LeftLabelFormGroupComponent extends GridComponent implements OnInit {\n\n labelWidthClass: string;\n controlWidthClass: string;\n label = true;\n\n ngOnInit(): void {\n const w = this.formProperty.schema.widget;\n this.labelWidthClass = w && w.labelWidth ? 'col-sm-' + w.labelWidth : 'col-sm';\n this.controlWidthClass = w && w.controlWidth ? 'col-sm-' + w.controlWidth : 'col-sm';\n this.label = w.label;\n }\n\n getShowFields(): string[] {\n return super.getShowFields(this.formProperty.schema.widget);\n }\n\n getSchema(propId: string) {\n return this.getShowFieldProperty(propId).schema;\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'lfb-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n title = 'formbuilder-lhcforms';\n}\n","<lfb-base-page></lfb-base-page>\n","/**\n * Customize ngx-schema-form radio component, mainly the layout.\n */\nimport { Component, OnInit } from '@angular/core';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-label-radio',\n template: `\n <input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"\n ></lfb-label>\n <!-- <span *ngIf=\"schema.description\" class=\"formHelp\">{{schema.description}}</span> -->\n <!--\n <div class=\"{{controlWidthClass}} form-check form-check-inline m-0\" >\n <div *ngFor=\"let option of schema.oneOf\" class=\"radio\">\n <label class=\"horizontal control-label\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option.enum[0]\"\n value=\"{{option.enum[0]}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n </div>\n <div *ngFor=\"let option of schema.enum\" class=\"radio\">\n <label class=\"m-0\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option\"\n value=\"{{option}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\"><span class=\"ml-1 mr-3\">{{option}}</span></label>\n </div>\n </div>\n -->\n <div ngbRadioGroup [formControl]=\"control\" class=\"form-check-inline btn-group btn-group-sm btn-group-toggle\" >\n <label *ngFor=\"let option of schema.oneOf\" ngbButtonLabel class=\"btn-outline-success\">\n <input ngbButton [attr.id]=\"id + '.' + option.enum[0]\"\n type=\"radio\" [value]=\"option\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n <label *ngFor=\"let option of schema.enum\" ngbButtonLabel class=\"btn-outline-success\">\n <input ngbButton [attr.id]=\"id + '.' + option\"\n type=\"radio\" [value]=\"option\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\"><span class=\"ml-1 mr-3\">{{option}}</span></label>\n </div>\n </div>\n </ng-template>\n `,\n styles: [`\n lfb-label {\n /* margin-left: .3rem; */\n }\n `]\n})\nexport class LabelRadioComponent extends LfbControlWidgetComponent {\n\n}\n","import {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core';\nimport {StringComponent} from '../string/string.component';\nimport {Subscription} from 'rxjs';\nimport {ArrayProperty} from '@lhncbc/ngx-schema-form';\nimport {Util} from '../../util';\n\n@Component({\n selector: 'lfb-help-text',\n templateUrl: '../string/string.component.html',\n styleUrls: ['./help-text.component.css']\n})\nexport class HelpTextComponent extends StringComponent implements AfterViewInit, OnDestroy {\n\n\n subscriptions: Subscription [] = [];\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n /*\n let itemArray;\n const itemProp = this.formProperty.searchProperty('/item') as ArrayProperty;\n let subscription = itemProp.valueChanges.subscribe((items) => {\n itemArray = items;\n const itemIndex = Util.findItemIndexWithHelpText(items);\n // const helpTextItem = this.findItemWithHelpText(items);\n if(itemIndex >= 0) {\n this.formProperty.setValue(items[itemIndex].text, false);\n }\n });\n this.subscriptions.push(subscription);\n\n subscription = this.formProperty.valueChanges.subscribe((val) => {\n const itemIndex = Util.findItemIndexWithHelpText(itemArray);\n // let helpTextItem = this.findItemWithHelpText(itemArray);\n if(itemIndex < 0 && val) {\n // helpTextItem = this.createHelpTextItem(val);\n itemProp.addItem(this.createHelpTextItem(val));\n }\n else if(val && val.trim().length > 0) {\n itemArray[itemIndex].text = val.trim();\n }\n else if (itemIndex >= 0) { // delete for empty val\n itemArray.splice(itemIndex, 1);\n }\n });\n\n this.subscriptions.push(subscription);\n */\n }\n\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => {\n s.unsubscribe();\n });\n }\n}\n","import {Component, ElementRef, EventEmitter, OnInit, Output, ViewChild} from '@angular/core';\nimport {SelectComponent} from '../select/select.component';\nimport {RestrictionsComponent} from '../restrictions/restrictions.component';\nimport {fhir} from '../../../fhir';\nimport {RestrictionOperatorService} from '../../../services/restriction-operator.service';\n\n/**\n * Used to get acceptance from parent component. The parent should subscribe to service\n * and set reject to true to cancel the change.\n */\nexport interface AcceptChange {\n newValue: string,\n oldValue: string,\n reject: boolean\n}\n\n\n/**\n * Restriction pull down list. Operates based data type selected.\n */\n@Component({\n selector: 'lfb-restrictions-operator',\n templateUrl: './restrictions-operator.component.html',\n styleUrls: ['./restrictions-operator.component.css']\n})\nexport class RestrictionsOperatorComponent extends SelectComponent implements OnInit {\n\n options: [];\n model: string;\n disable = false;\n @Output()\n rejectChange = new EventEmitter<{reject: boolean}>();\n @ViewChild('mySelect', {static: true}) mySelect: ElementRef;\n\n constructor(private operatorService: RestrictionOperatorService) {\n super();\n }\n\n ngOnInit() {\n // Set model based on the property value.\n this.formProperty.valueChanges.subscribe((opt) => {\n this.model = opt;\n });\n\n // Select options list based on type.\n this.formProperty.root.getProperty('type').valueChanges.subscribe((type) => {\n this.options = RestrictionsComponent.typeToOptions[type];\n });\n }\n\n /**\n * Handle model change event.\n * @param event - Angular event object.\n * @param alertSelected - Popover template reference to show alert message.\n */\n modelChanged(event, alertSelected) {\n // Setup acceptance info for any controlling component.\n const rejectChange: AcceptChange = {newValue: event, oldValue: this.model, reject: false};\n this.operatorService.next(rejectChange); // Listener will change reject flag to reject.\n if(rejectChange.reject) {\n // Restore previous value and display alert.\n this.mySelect.nativeElement.value = this.model;\n alertSelected.open();\n }\n else {\n this.model = event;\n this.formProperty.setValue(this.model, false);\n }\n return this.model;\n }\n\n /**\n * Return option based on uri.\n * @param extUrl - FHIR extension uri.\n */\n getOption(extUrl: fhir.uri) {\n return RestrictionsComponent.extUrlToOptionsMap[extUrl];\n }\n}\n","<select #mySelect\n [ngModel]=\"model\"\n (ngModelChange)=\"modelChanged($event, alertSelected)\"\n [attr.name]=\"name\" [attr.id]=\"id\"\n [disabled]=\"schema.readOnly\" class=\"form-control\"\n [ngbPopover]=\"'That restriction is already selected.'\"\n #alertSelected=\"ngbPopover\" triggers=\"manual\" placement=\"bottom top\"\n>\n <ng-container>\n <option *ngFor=\"let option of options\" [ngValue]=\"getOption(option.extUrl)\" >{{option.display}}</option>\n </ng-container>\n</select>\n","import { BrowserModule } from '@angular/platform-browser';\nimport {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport { SchemaFormModule, WidgetRegistry } from '@lhncbc/ngx-schema-form';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { ItemComponent } from './item/item.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatCardModule} from '@angular/material/card';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule} from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTabsModule} from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { NgxSchemaFormComponent } from './ngx-schema-form/ngx-schema-form.component';\nimport { TreeModule } from '@circlon/angular-tree-component';\nimport { ItemJsonEditorComponent } from './lib/widgets/item-json-editor/item-json-editor.component';\nimport { GridComponent } from './lib/widgets/grid.component/grid.component';\nimport { TableComponent } from './lib/widgets/table/table.component';\nimport { LformsWidgetRegistry} from './lib/lforms-widget-registry';\nimport { StringComponent } from './lib/widgets/string/string.component';\nimport { SelectComponent } from './lib/widgets/select/select.component';\nimport { CheckboxComponent } from './lib/widgets/checkbox.component/checkbox.component';\nimport { IntegerComponent } from './lib/widgets/integer/integer.component';\nimport { FontAwesomeModule} from '@fortawesome/angular-fontawesome';\nimport { AppFormElementComponent } from './lib/widgets/form-element/form-element.component';\nimport { LabelComponent } from './lib/widgets/label/label.component';\nimport { TitleComponent } from './lib/widgets/title/title.component';\nimport { ElementChooserComponent } from './lib/widgets/element-chooser/element-chooser.component';\nimport { AutoCompleteComponent } from './lib/widgets/auto-complete/auto-complete.component';\nimport { RadioComponent } from './lib/widgets/radio/radio.component';\nimport { HeaderComponent } from './header/header.component';\nimport { FooterComponent } from './footer/footer.component';\nimport {MatSelectModule} from '@angular/material/select';\nimport { EnableWhenSourceComponent } from './lib/widgets/enable-when-source/enable-when-source.component';\nimport { EnableOperatorComponent } from './lib/widgets/enable-operator/enable-operator.component';\nimport { LeftLabelFormGroupComponent } from './lib/widgets/left-label-form-group/left-label-form-group.component';\nimport { LfbControlWidgetComponent } from './lib/widgets/lfb-control-widget/lfb-control-widget.component';\nimport { LfbArrayWidgetComponent } from './lib/widgets/lfb-array-widget/lfb-array-widget.component';\nimport { SideLabelCheckboxComponent } from './lib/widgets/side-label-checkbox/side-label-checkbox.component';\nimport { EnablewhenAnswerCodingComponent } from './lib/widgets/enablewhen-answer-coding/enablewhen-answer-coding.component';\nimport { AppJsonPipe } from './lib/pipes/app-json.pipe';\nimport { BasePageComponent } from './base-page/base-page.component';\nimport { FormFieldsComponent } from './form-fields/form-fields.component';\nimport { LabelRadioComponent } from './lib/widgets/label-radio/label-radio.component';\nimport { RowLayoutComponent } from './lib/widgets/row-layout/row-layout.component';\nimport { BooleanControlledComponent } from './lib/widgets/boolean-controlled/boolean-controlled.component';\nimport { EnableBehaviorComponent } from './lib/widgets/enable-behavior/enable-behavior.component';\nimport { MessageDlgComponent } from './lib/widgets/message-dlg/message-dlg.component';\nimport { FhirServersDlgComponent } from './lib/widgets/fhir-servers-dlg/fhir-servers-dlg.component';\nimport { FhirSearchDlgComponent } from './lib/widgets/fhir-search-dlg/fhir-search-dlg.component';\nimport { BooleanRadioComponent } from './lib/widgets/boolean-radio/boolean-radio.component';\nimport { UnitsComponent } from './lib/widgets/units/units.component';\nimport { ExtensionsComponent } from './lib/widgets/extensions/extensions.component';\nimport { TotalScoreComponent } from './lib/widgets/total-score/total-score.component';\nimport { RuleEditorModule } from 'rule-editor';\nimport { AnswerOptionComponent } from './lib/widgets/answer-option/answer-option.component';\nimport { InitialComponent } from './lib/widgets/initial/initial.component';\nimport { HelpTextComponent } from './lib/widgets/help-text/help-text.component';\nimport { SfFormWrapperComponent } from './sf-form-wrapper/sf-form-wrapper.component';\nimport { TypeComponent } from './lib/widgets/type/type.component';\nimport { PreviewDlgComponent } from './lib/widgets/preview-dlg/preview-dlg.component';\nimport { FhirExportDlgComponent } from './lib/widgets/fhir-export-dlg/fhir-export-dlg.component';\nimport { LoincNoticeComponent } from './lib/widgets/loinc-notice/loinc-notice.component';\nimport { StringWithCssComponent } from './lib/widgets/string-with-css/string-with-css.component';\nimport { RestrictionsComponent } from './lib/widgets/restrictions/restrictions.component';\nimport { RestrictionsOperatorComponent } from './lib/widgets/restrictions-operator/restrictions-operator.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n NgxSchemaFormComponent,\n ItemComponent,\n ItemJsonEditorComponent,\n GridComponent,\n TableComponent,\n StringComponent,\n SelectComponent,\n CheckboxComponent,\n IntegerComponent,\n AppFormElementComponent,\n LabelComponent,\n TitleComponent,\n ElementChooserComponent,\n AutoCompleteComponent,\n RadioComponent,\n HeaderComponent,\n FooterComponent,\n EnableWhenSourceComponent,\n EnableOperatorComponent,\n LeftLabelFormGroupComponent,\n LfbControlWidgetComponent,\n LfbArrayWidgetComponent,\n SideLabelCheckboxComponent,\n EnablewhenAnswerCodingComponent,\n AppJsonPipe,\n BasePageComponent,\n FormFieldsComponent,\n LabelRadioComponent,\n BooleanControlledComponent,\n RowLayoutComponent,\n BooleanControlledComponent,\n EnableBehaviorComponent,\n MessageDlgComponent,\n FhirServersDlgComponent,\n FhirSearchDlgComponent,\n BooleanRadioComponent,\n UnitsComponent,\n ExtensionsComponent,\n TotalScoreComponent,\n AnswerOptionComponent,\n InitialComponent,\n HelpTextComponent,\n SfFormWrapperComponent,\n TypeComponent,\n PreviewDlgComponent,\n FhirExportDlgComponent,\n LoincNoticeComponent,\n StringWithCssComponent,\n RestrictionsComponent,\n RestrictionsOperatorComponent\n ],\n imports: [\n AppRoutingModule,\n BrowserModule,\n BrowserAnimationsModule,\n FormsModule,\n FontAwesomeModule,\n HttpClientModule,\n LayoutModule,\n MatButtonModule,\n MatCardModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatRadioModule,\n MatSidenavModule,\n MatStepperModule,\n MatTabsModule,\n MatToolbarModule,\n MatTooltipModule,\n NgbModule,\n RuleEditorModule,\n SchemaFormModule.forRoot(),\n TreeModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatDialogModule,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n providers: [{provide: WidgetRegistry, useClass: LformsWidgetRegistry}, AppJsonPipe],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","/**\n * Handle side bar tree, item level fields editing in ui and editing in json\n */\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n EventEmitter,\n OnChanges,\n SimpleChanges, AfterViewChecked, NgZone\n} from '@angular/core';\nimport {ITreeOptions, TreeComponent} from '@circlon/angular-tree-component';\nimport {FetchService, LoincItemType} from '../fetch.service';\nimport {MatInput} from '@angular/material/input';\nimport {ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {FormService} from '../services/form.service';\nimport {NgxSchemaFormComponent} from '../ngx-schema-form/ngx-schema-form.component';\nimport {ItemJsonEditorComponent} from '../lib/widgets/item-json-editor/item-json-editor.component';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {BehaviorSubject, interval, Observable, of, Subject, Subscription} from 'rxjs';\nimport {MatDialog} from '@angular/material/dialog';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport {fhir} from '../fhir';\nimport {TreeService} from '../services/tree.service';\nimport {Util} from '../lib/util';\n\nexport class LinkIdCollection {\n linkIdHash = {};\n\n addLinkId(linkId, itemPath): boolean {\n let ret = false;\n if (linkId && linkId.trim().length > 0) {\n this.linkIdHash[linkId.trim()] = itemPath;\n ret = true;\n }\n\n return ret;\n }\n\n getItemPath(linkId): string {\n return this.linkIdHash[linkId];\n }\n\n hasLinkId(linkId): boolean {\n return this.linkIdHash.hasOwnProperty(linkId);\n }\n\n deleteLinkId(linkId): boolean {\n let ret = false;\n if (this.getItemPath(linkId)) {\n delete this.linkIdHash[linkId];\n ret = true;\n }\n return ret;\n }\n\n changeLinkId(oldLinkId, newLinkId): boolean {\n let ret = false;\n const itemPath = this.getItemPath(oldLinkId);\n if (itemPath) {\n this.deleteLinkId(oldLinkId);\n this.addLinkId(newLinkId, itemPath);\n ret = true;\n }\n return ret;\n }\n}\n\n@Component({\n selector: 'lfb-item-component',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.css']\n})\nexport class ItemComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n id = 1;\n @ViewChild('tree') treeComponent: TreeComponent;\n @ViewChild('jsonEditor') jsonItemEditor: ItemJsonEditorComponent;\n @ViewChild('uiEditor') uiItemEditor: NgxSchemaFormComponent;\n @ViewChild('formSearch') sInput: MatInput;\n @ViewChild('drawer', { read: ElementRef }) sidenavEl: ElementRef;\n // qItem: any;\n focusNode: ITreeNode;\n itemData: fhir.QuestionnaireItem = null;\n treeOptions: ITreeOptions;\n @Input()\n questionnaire: fhir.Questionnaire = {resourceType: 'Questionnaire', status: 'draft', item: []};\n itemList: any [];\n @Output()\n itemChange = new EventEmitter<any []>();\n isTreeExpanded = false;\n editType = 'ui';\n itemEditorSchema: any;\n editor = 'ngx';\n loincType = LoincItemType.PANEL;\n\n loincTypeOpts = [\n {\n value: LoincItemType.PANEL,\n display: 'Panel'\n },\n {\n value: LoincItemType.QUESTION,\n display: 'Question'\n }\n ];\n\n loincItem: any;\n\n linkIdCollection = new LinkIdCollection();\n itemLoading$ = new BehaviorSubject<boolean>(false);\n itemLoading = false;\n\n treeReloaded$ = new BehaviorSubject<fhir.Questionnaire>(null);\n\n subscriptions: Subscription [] = [];\n\n /**\n * A function variable to pass into ng bootstrap typeahead for call back.\n * Wait at least for two characters, 200 millis of inactivity and not the\n * same string as previously searched.\n *\n * @param term$ - User typed string\n */\n acSearch = (term$: Observable<string>): Observable<any []> => {\n return term$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n switchMap((term) => term.length < 2 ? [] : this.dataSrv.searchLoincItems(term, this.loincType)));\n };\n\n constructor(\n private zone: NgZone,\n public dialog: MatDialog,\n private modalService: NgbModal,\n private treeService: TreeService,\n private formService: FormService,\n private dataSrv: FetchService) {\n this.treeOptions = this.dataSrv.getTreeOptions();\n const subscription = this.dataSrv.getItemEditorSchema().subscribe((data) => {\n this.itemEditorSchema = data;\n });\n this.subscriptions.push(subscription);\n }\n\n ngOnInit() {\n /*\n this.zone.runOutsideAngular(() => {\n // Check very regularly to see if the pending macrotasks have all cleared\n interval(10)\n .pipe(\n startWith(0), // So that we don't initially wait\n takeUntil(this.itemLoading$),\n // Turn the interval number into the current state of the zone\n map(() => !this.zone.hasPendingMacrotasks),\n // Don't emit until the zone state actually flips from `false` to `true`\n distinctUntilChanged(),\n // Filter out unstable event. Only emit once the state is stable again\n filter(stateStable => stateStable === true),\n // Complete the observable after it emits the first result\n take(1),\n tap(stateStable => {\n // FULLY RENDERED!!!!\n this.itemLoading$.next(false);\n // Add code here to report Fully Rendered\n })\n ).subscribe();\n });\n*/\n\n const sub = this.itemLoading$.subscribe((isLoading) => {\n this.itemLoading = isLoading;\n });\n this.subscriptions.push(sub);\n }\n\n\n /**\n * Initialize component\n */\n ngAfterViewInit() {\n this.treeOptions.scrollContainer = this.sidenavEl.nativeElement;\n this.formService.setTreeModel(this.treeComponent.treeModel);\n setTimeout(() => {\n this.treeComponent.treeModel.update();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.itemList = changes.questionnaire.currentValue?.item;\n this.itemList = this.itemList || [];\n if(this.itemList.length === 0) {\n this.itemList.push({text: 'Item 0', type: 'string'});\n }\n if(this.treeComponent?.treeModel) {\n this.treeComponent?.treeModel.update();\n }\n }\n\n /**\n * Inform the change to host element.\n */\n itemChanged(item) {\n // Util.mirrorObject(this.focusNode.data, Util.convertToQuestionnaireJSON(item));\n Util.mirrorObject(this.focusNode.data, item);\n this.itemChange.emit(this.itemList);\n }\n\n /**\n * Tree initialization\n */\n onTreeInitialized() {\n const node = this.treeComponent?.treeModel?.getFirstRoot();\n if(node) {\n this.treeComponent.treeModel.setFocusedNode(node);\n this.setNode(node);\n }\n }\n\n\n /**\n * Handles tree update event\n * @param event - Event\n */\n onTreeUpdated() {\n if(!this.treeComponent.treeModel.getFocusedNode()) {\n const node = this.treeComponent.treeModel.getFirstRoot();\n this.treeComponent.treeModel.setFocusedNode(node);\n this.setNode(node);\n }\n }\n\n\n /**\n * Handle tree's on focus event\n * @param event - Focus event.\n */\n onFocus(event) {\n // this.itemLoading$.next(true);\n this.setNode(event.node);\n }\n\n /**\n * Set selected node, typically invoked when user clicks a node on the tree.\n * @param node - Selected node.\n */\n setNode(node: ITreeNode): void {\n // this.item = node && node.data || null;\n this.focusNode = node;\n this.itemData = this.focusNode.data;\n // Not sure why new item is having some fields from prev item. Nonetheless reset the form.\n // Resetting has side effects. Revisit -- TODO\n // this.uiItemEditor.resetForm(this.item);\n if(this.focusNode && this.focusNode.data && !this.focusNode.data.linkId) {\n this.focusNode.data.linkId = this.defaultLinkId(this.focusNode);\n }\n this.treeService.nodeFocus.next(node);\n }\n\n /**\n * Handle tree expansion/collapse\n */\n toggleTreeExpansion() {\n if (this.treeComponent) {\n if (this.isTreeExpanded) {\n this.treeComponent.treeModel.collapseAll();\n this.isTreeExpanded = false;\n } else {\n this.treeComponent.treeModel.expandAll();\n this.isTreeExpanded = true;\n }\n }\n }\n\n\n /**\n * Create linkId, using a random number generated by the tree.\n */\n defaultLinkId(node: ITreeNode): string {\n return '' + node.id;\n }\n\n\n /**\n * Toggle between ui and json\n */\n toggleEditType(event) {\n this.editType = this.editType === 'json' ? 'ui' : 'json';\n }\n\n\n /**\n * Compute tree hierarchy sequence numbering.\n * @param node - Target node of computation\n */\n getIndexPath(node: ITreeNode): number[] {\n const ret: number [] = [];\n if (node) {\n ret.push(node.index + 1);\n while (node?.level > 1) {\n node = node.parent;\n const index = node ? node.index : 0;\n ret.push(index + 1);\n }\n }\n return ret.reverse();\n }\n\n\n /**\n * Handle add item button\n */\n addItem(event): void {\n this.insertAnItem({text: 'New item ' + this.id++});\n }\n\n insertAnItem(item, index?: number) {\n if(this.itemList.length === 0) {\n this.itemList.push(item);\n }\n else {\n if (typeof index === 'undefined') {\n index = this.focusNode ? this.focusNode.index + 1 : 0;\n }\n this.focusNode.parent.data.item.splice(index, 0, item);\n }\n\n this.treeComponent.treeModel.update();\n this.treeComponent.treeModel.focusNextNode();\n setTimeout(() => {\n document.getElementById('text').focus();\n });\n }\n\n /**\n * Handle delete item button\n * @param index - Index of the node among its siblings.\n */\n deleteItem(index?: number) {\n if (typeof index === 'undefined') {\n index = this.focusNode.index;\n }\n this.focusNode.parent.data.item.splice(index, 1);\n this.treeComponent.treeModel.update();\n this.treeComponent.treeModel.focusNextNode();\n // this.setNode(this.treeComponent.treeModel.getFocusedNode());\n }\n\n /**\n * Invoke the dialog which returns selected lforms item from the search box.\n * @param dialogTemplateRef - Dialog template for adding loinc item.\n */\n addLoincItem(dialogTemplateRef): void {\n this.modalService.open(dialogTemplateRef, {ariaLabelledBy: 'modal-basic-title'}).result.then((autoCompResult) => {\n const subscription = this.getLoincItem(autoCompResult, this.loincType).subscribe((item) => {\n this.insertAnItem(item);\n this.loincItem = null;\n subscription.unsubscribe();\n });\n }, (reason) => {\n this.loincItem = null;\n });\n }\n\n /**\n * Get loinc item using selected auto completion result.\n * If the selected item is a panel, use its loinc number to get the panel from the server, otherwise\n * return the selected item.\n *\n * @param autoCompResult - Auto completion item selected from the search box.\n *\n * @param loincType - Loinc item type: panel or question.\n */\n getLoincItem(autoCompResult, loincType: LoincItemType): Observable<any> {\n let ret: Observable<any>;\n if(loincType === LoincItemType.PANEL) {\n ret = this.dataSrv.getLoincPanel(autoCompResult.code[0].code);\n }\n else if(loincType === LoincItemType.QUESTION) {\n ret = of(autoCompResult);\n }\n\n return ret;\n }\n\n /**\n * TODO - not sure if we need this yet.\n * @param linkId - Link id\n */\n /*\n registerLinkId(linkId) {\n this.linkIdCollection.addLinkId(linkId, this.focusNode.path.join('/'));\n }\n*/\n /**\n * Fetch loinc item by id\n * loincNum - Loinc number of the item.\n *\n */\n getItem(loincNum: string) {\n }\n\n /**\n * Auto complete result formatting used in add loinc item dialog\n * @param acResult - Selected result item.\n */\n formatter(acResult: any) {\n return acResult.code[0].code + ': ' + acResult.text;\n }\n\n\n /**\n * Unsubscribe any subscriptions.\n */\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n}\n","<mat-sidenav-container>\n <mat-sidenav #drawer mode=\"side\" opened class=\"p-1 bg-light\">\n <div class=\"sidenav-header p-1\">Questions Tree</div>\n <tree-root\n #tree\n [nodes]=\"itemList\"\n [options]=\"treeOptions\"\n (focus)=\"onFocus($event)\"\n (updateData)=\"onTreeUpdated()\"\n >\n <ng-template #treeNodeTemplate let-node let-index=\"index\">\n <div [ngClass]=\"node.nodeClass\">\n <span class=\"node-display-prefix\">{{getIndexPath(node).join('.')}}</span> <span [ngClass]=\"node.nodeClass\">{{node.displayField}}</span>\n </div>\n </ng-template>\n </tree-root>\n </mat-sidenav>\n <mat-sidenav-content>\n <div class=\"sidenav-header p-1\" aria-live=\"polite\" aria-atomic=\"true\" id=\"itemContent\">Current Item <span *ngIf=\"focusNode?.data?.text\">({{focusNode.data.text}})</span></div>\n <div class=\"mt-1\">\n <div>\n <span>Edit item (question or header)</span>\n <!--\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary float-right\" (click)=\"toggleEditType($event)\">{{ editType === 'ui' ? \"View/Edit item's JSON\" : \"Edit item in GUI\" }}</button>\n -->\n </div>\n <ul>\n <li>\n The questions are organized in hierarchical tree on the left side. Select the desired item to edit their properties here.\n </li>\n </ul>\n </div>\n <hr/>\n <ng-container *ngIf=\"editType === 'ui'\">\n <div *ngIf=\"itemLoading\" class=\"overlay\">\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border text-primary\" role=\"status\" style=\"width: 3rem; height: 3rem; z-index: 20;\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n </div>\n </div>\n <lfb-ngx-schema-form #uiEditor [model]=\"itemData\" (valueChange)=\"itemChanged($event)\"></lfb-ngx-schema-form>\n </ng-container>\n <ng-container *ngIf=\"editType === 'json'\">\n <lfb-item-json-editor #jsonEditor></lfb-item-json-editor>\n </ng-container>\n <hr/>\n <div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with item action buttons\">\n <div class=\"btn-group-sm\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn btn-primary\"\n [disabled]=\"!(focusNode && focusNode.parent)\"\n aria-label=\"Delete this item\"\n (click)=\"deleteItem()\">Delete this item</button>\n </div>\n <div class=\"btn-group-sm ml-2 ml-auto\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn btn-primary\"\n (click)=\"addItem($event)\"\n aria-label=\"Add new item\"\n aria-controls=\"itemContent\"\n >Add new item</button>\n </div>\n <div class=\"btn-group-sm ml-2\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn btn-primary\"\n (click)=\"addLoincItem(addItemDlg)\"\n aria-label=\"Add new item from LOINC\"\n aria-controls=\"itemContent\"\n >Add new item from LOINC</button>\n </div>\n </div>\n </mat-sidenav-content>\n</mat-sidenav-container>\n\n<ng-template #addItemDlg let-modal>\n <div class=\"modal-header btn-primary\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">Add LOINC item</h4>\n <button type=\"button\" class=\"close btn-primary\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <form>\n <div class=\"form-group\">\n <label for=\"loincTypeSelect1\" class=\"align-middle\">Select LOINC item type:</label>\n <div class=\"btn-group\" id=\"loincTypeSelect1\" name=\"radioBasic\"\n [(ngModel)]=\"loincType\" [ngModelOptions]=\"{standalone: true}\" ngbRadioGroup>\n <label *ngFor=\"let opt of loincTypeOpts\" ngbButtonLabel>\n <input ngbButton type=\"radio\" name=\"radio\" [value]=\"opt.value\"/> {{ opt.display }}\n </label>\n </div>\n <label class=\"\" for=\"acSearchBoxId\">Search for a LOINC item:</label>\n <input id=\"acSearchBoxId\" type=\"text\" class=\"form-control\"\n [(ngModel)]=\"loincItem\"\n [ngModelOptions]=\"{standalone: true}\"\n [ngbTypeahead]=\"acSearch\"\n [resultFormatter]=\"formatter\"\n [inputFormatter]=\"formatter\"\n [editable]='false' />\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.dismiss(false)\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close(loincItem)\">Add</button>\n </div>\n</ng-template>\n","/**\n * A boolean control typically to trigger hide and show of a sibling component.\n */\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\n\n@Component({\n selector: 'lfb-boolean-controlled',\n template: `\n <ng-template #controller>\n <div class=\"widget\" [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label [title]=\"label\"\n [helpMessage]=\"helpMessage\"\n [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"\n ></lfb-label>\n\n <div ngbRadioGroup class=\"form-check-inline btn-group btn-group-sm btn-group-toggle\"\n [ngModel]=\"bool\"\n (ngModelChange)=\"boolChange.emit($event)\"\n [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let option of ['No', 'Yes']\">\n <label ngbButtonLabel class=\"btn-outline-success\" [attr.id]=\"option+'_1'\">\n <input ngbButton\n [value]=\"option === 'Yes'\" type=\"radio\" [attr.disabled]=\"disabled ? '' : null\">\n {{option}}\n </label>\n </ng-container>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"controller\"></ng-container>\n `,\n styles: [`\n .radio ~ .radio {\n margin-left: 16px;\n }\n .radio {\n font-size: 0.875rem\n }\n label:hover {\n opacity: 0.5;\n }\n `]\n})\nexport class BooleanControlledComponent {\n // Properties for layout, typically to be read from layout schema file.\n @Input()\n bool: boolean;\n @Input()\n label: string;\n @Input()\n labelPosition = 'left';\n @Input()\n helpMessage: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n disabled = false;\n\n @Output()\n boolChange = new EventEmitter<boolean>();\n}\n","/**\n * Registry for custom widgets.\n *\n * The widget is identified by its id. The id is associated\n * with the field in the schema.json.\n */\nimport { DefaultWidgetRegistry } from '@lhncbc/ngx-schema-form';\nimport {RowLayoutComponent} from './widgets/row-layout/row-layout.component';\nimport {GridComponent} from './widgets/grid.component/grid.component';\nimport {TableComponent} from './widgets/table/table.component';\nimport {StringComponent} from './widgets/string/string.component';\nimport {SelectComponent} from './widgets/select/select.component';\nimport {CheckboxComponent} from './widgets/checkbox.component/checkbox.component';\nimport {IntegerComponent} from './widgets/integer/integer.component';\nimport {RadioComponent} from './widgets/radio/radio.component';\nimport { Injectable } from '@angular/core';\nimport {EnableWhenSourceComponent} from './widgets/enable-when-source/enable-when-source.component';\nimport {EnableOperatorComponent} from './widgets/enable-operator/enable-operator.component';\nimport {LeftLabelFormGroupComponent} from './widgets/left-label-form-group/left-label-form-group.component';\nimport {SideLabelCheckboxComponent} from './widgets/side-label-checkbox/side-label-checkbox.component';\nimport {EnablewhenAnswerCodingComponent} from './widgets/enablewhen-answer-coding/enablewhen-answer-coding.component';\nimport {LabelRadioComponent} from './widgets/label-radio/label-radio.component';\nimport {EnableBehaviorComponent} from './widgets/enable-behavior/enable-behavior.component';\nimport {BooleanRadioComponent} from './widgets/boolean-radio/boolean-radio.component';\nimport {UnitsComponent} from './widgets/units/units.component';\nimport {TotalScoreComponent} from './widgets/total-score/total-score.component';\nimport {AnswerOptionComponent} from './widgets/answer-option/answer-option.component';\nimport {InitialComponent} from './widgets/initial/initial.component';\nimport {HelpTextComponent} from './widgets/help-text/help-text.component';\nimport {TypeComponent} from './widgets/type/type.component';\nimport {StringWithCssComponent} from './widgets/string-with-css/string-with-css.component';\nimport {RestrictionsComponent} from './widgets/restrictions/restrictions.component';\nimport {RestrictionsOperatorComponent} from './widgets/restrictions-operator/restrictions-operator.component';\n\n\n@Injectable()\nexport class LformsWidgetRegistry extends DefaultWidgetRegistry {\n constructor() {\n super();\n this.register('row-layout', RowLayoutComponent);\n this.register('grid', GridComponent);\n this.register('table', TableComponent);\n this.register('string', StringComponent);\n this.register('select', SelectComponent);\n this.register('checkbox', CheckboxComponent);\n this.register('boolean', CheckboxComponent);\n this.register('integer', IntegerComponent);\n this.register('number', IntegerComponent);\n this.register('radio', RadioComponent);\n this.register('lb-radio', LabelRadioComponent);\n this.register('enable-when-source', EnableWhenSourceComponent);\n this.register('enable-operator', EnableOperatorComponent);\n this.register('left-label-form-group', LeftLabelFormGroupComponent);\n this.register('left-label-checkbox', SideLabelCheckboxComponent);\n this.register('enable-when-answer-choice', EnablewhenAnswerCodingComponent);\n this.register('enable-behavior', EnableBehaviorComponent);\n this.register('boolean-radio', BooleanRadioComponent);\n this.register('units', UnitsComponent);\n this.register('totalScore', TotalScoreComponent);\n this.register('type', TypeComponent);\n this.register('answer-option', AnswerOptionComponent);\n this.register('initial', InitialComponent);\n this.register('help-text', HelpTextComponent);\n this.register('string-with-css', StringWithCssComponent);\n this.register('restrictions', RestrictionsComponent);\n this.register('restrictions-operator', RestrictionsOperatorComponent);\n }\n}\n","import {Component, Input, OnInit, EventEmitter, Output} from '@angular/core';\nimport {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'lfb-loinc-notice',\n templateUrl: './loinc-notice.component.html',\n styleUrls: ['./loinc-notice.component.css']\n})\nexport class LoincNoticeComponent implements OnInit {\n\n constructor(private activeModal: NgbActiveModal) { }\n\n ngOnInit(): void {\n }\n\n close(value: boolean) {\n this.activeModal.close(value);\n }\n}\n","<div role=\"alertdialog\">\n <div class=\"modal-header bg-primary\">\n <h4 class=\"modal-title text-white\">Accept LOINC Terms of Use</h4>\n </div>\n <div class=\"modal-body bg-light\">\n <p role=\"document\">\n This LHC-Forms form builder provides access to LOINC questions and forms.\n By using this service you agree to abide by the\n <a href=\"https://loinc.org/license/\" target=\"loincWindow\">LOINC Terms of Use</a>.\n </p>\n </div>\n <div class=\"modal-footer btn-group\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"close(true)\">Accept</button>\n </div>\n</div>\n\n\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {AcceptChange} from '../lib/widgets/restrictions-operator/restrictions-operator.component';\n\n@Injectable()\nexport class RestrictionOperatorService {\n\n constructor() { }\n\n rejectChange = new EventEmitter<AcceptChange>();\n next(reject: AcceptChange) {\n this.rejectChange.next(reject);\n }\n\n subscribe(cb: (reject: AcceptChange) => void) {\n this.rejectChange.subscribe(cb);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { LoginService, UserProfile } from '../services/login.service';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n\n@Component({\n selector: 'lfb-header',\n template: `\n <mat-toolbar id=\"header\">\n <mat-icon id=\"logo\" svgIcon=\"home\" aria-label=\"Home\"></mat-icon>\n <div id=\"siteNameBox\">\n <a mat-button id=\"siteName\" href=\"/\">NLM Form Builder</a>\n </div>\n <div class=\"float-lg-right\" *ngIf=\"isFirebaseEnabled\">\n <div *ngIf=\"!isUserSignedIn\">\n <button mat-button color=\"primary\" (click)=\"showSignInDialog()\">\n <button class=\"btn border-0 m-0 p-0\" matTooltip=\"Login with OAuth authenticators\">Sign in</button>\n </button>\n </div>\n <div *ngIf=\"isUserSignedIn\">\n <span>{{userProfile.displayName}}</span>\n <button mat-button color=\"primary\" (click)=\"signOut()\">\n <button class=\"btn border-0 m-0 p-0\"\n [ngbTooltip]=\"userProfile.displayName + userProfile.email ? (' : ' + userProfile.email) : ''\">Sign out</button>\n </button>\n </div>\n <div *ngIf=\"loginError\">{{loginError.message}}</div>\n </div>\n </mat-toolbar>\n `,\n styles: [`\n #header {\n /* margin-bottom: 20px; */\n position: relative;\n /* font-size: 12px;*/\n font-family: 'Droid Sans', Arial, Helvetica, sans-serif;\n color: #202020;\n border-top: 2px solid #0BACB6;\n border-bottom: 7px solid #17b4e3;\n /*line-height: normal;*/\n height: 84px;\n background: transparent;\n align-items: center;\n }\n\n #header a {\n color: #1E4193;\n text-decoration: none;\n }\n\n #logo {\n float: left;\n width: 72px;\n height: 72px;\n margin: 0 20px 0 20px;\n }\n\n #logo {\n display: block;\n }\n\n #logo .site-name-slogan {\n font-size: 14px;\n position: relative;\n top: 10px;\n left: -2px;\n }\n\n #logo .site-name-slogan span {\n display: block;\n font-size: 24px;\n position: relative;\n left: -2px;\n }\n\n #logo .site-name-slogan .slogan {\n color: #202020;\n font-size: 12px;\n position: relative;\n left: 1px;\n }\n\n #siteNameBox {\n flex: 1 1 auto;\n }\n\n #siteName {\n font-size: 125%;\n }\n `]\n})\nexport class HeaderComponent implements OnInit {\n\n userProfile: UserProfile = {};\n isUserSignedIn = false;\n @Input()\n isFirebaseEnabled = false;\n loginError: any = null;\n\n constructor(private loginService: LoginService,\n private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer) {\n // Register our icon(s)\n this.iconRegistry.addSvgIcon('home',\n this.sanitizer.bypassSecurityTrustResourceUrl('../../assets/images/lhncbc.svg'));\n }\n\n\n /**\n * Initialize login service\n */\n ngOnInit(): void {\n this.loginService.service().subscribe((loginEvent) => {\n if (loginEvent.event === 'signedIn') {\n this.userProfile = loginEvent.userProfile;\n this.isUserSignedIn = true;\n } else if (loginEvent.event === 'signedOut') {\n this.userProfile = {};\n this.isUserSignedIn = false;\n }\n });\n }\n\n\n /**\n * Logout\n */\n signOut() {\n this.loginService.logOut(this.userProfile);\n }\n\n showSignInDialog() {\n\n }\n\n}\n","/**\n * Define auto complete options\n */\nimport {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport {HttpClient, HttpResponse} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {FormControl} from '@angular/forms';\nimport {debounceTime, distinctUntilChanged, filter, map, startWith, switchMap} from 'rxjs/operators';\nimport {FetchService} from '../../../fetch.service';\n\nexport interface Options {\n searchUrl: string;\n httpOptions: any;\n processResponse?: (response: HttpResponse<any>) => Observable<AutoCompleteResult[]>;\n}\n\nexport interface AutoCompleteResult {\n/**\n * Define result item for auto complete results\n */\n title: string;\n id: string;\n}\n@Component({\n selector: 'lfb-auto-complete',\n template: `\n <mat-form-field>\n <input type=\"text\"\n matInput\n [placeholder]=\"placeholder\"\n [formControl]=\"myControl\"\n [matAutocomplete]=\"autoGroup\">\n <mat-autocomplete autoActiveFirstOption [disableRipple]=\"true\" #autoGroup=\"matAutocomplete\" [panelWidth]=\"'100%'\"\n [displayWith]=\"displayFn\" (optionSelected)=\"selectOption($event.option.value)\">\n <mat-option *ngFor=\"let result of acResults | async\" [value]=\"result\">\n <div class=\"container-fluid\">\n <div class=\"form-row\">\n <div class=\"col-1\"><small>id: {{result.id}}</small></div><div class=\"col-11\"><small>{{result.title}}</small></div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n `,\n styles: ['.mat-form-field {width: inherit; }']\n})\nexport class AutoCompleteComponent implements OnInit {\n\n myControl = new FormControl();\n @Input()\n placeholder;\n @Input()\n options: Options;\n acResults: Observable<AutoCompleteResult[]>;\n // Selected event\n @Output()\n optionSelected = new EventEmitter<AutoCompleteResult>();\n @Input()\n searchCallback: (term: string) => Observable<AutoCompleteResult[]>;\n\n constructor(private http: HttpClient, private lformsService: FetchService) { }\n\n ngOnInit() {\n if (!this.options.httpOptions.observe) {\n this.options.httpOptions.observe = 'body' as const;\n }\n if (!this.options.httpOptions.response) {\n this.options.httpOptions.responseType = 'json' as const;\n }\n this.acResults = this.myControl.valueChanges.pipe(\n startWith(''),\n filter(value => value.length > 2), // Minimum two characters to search\n debounceTime(100), // Wait for 100 millis of typing delays\n distinctUntilChanged(), // Input should be changed\n switchMap((value) => this._search(value)) // Final search term\n );\n }\n\n /**\n * Handle user selection of a result item.\n * @param result - Selected result item.\n */\n selectOption(result: AutoCompleteResult) {\n this.optionSelected.emit(result);\n }\n\n /**\n * Format result item display\n * @param result - Result item to format\n */\n displayFn(result: AutoCompleteResult) {\n return result && result.title ? result.title : '';\n }\n\n /**\n * Search lforms service\n * @param value - Search term from the input\n * @private\n */\n _search(value): Observable<AutoCompleteResult []> {\n return this.searchCallback(value);\n // return this.lformsService.searchForms(value);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {DomSanitizer} from '@angular/platform-browser';\n\n@Component({\n selector: 'lfb-footer',\n template: `\n <div id=\"fine-print\">\n <ul class=\"horz-list\">\n <li><a title=\"NLM copyright information\"\n href=\"http://www.nlm.nih.gov/copyright.html\">Copyright</a></li>\n <li><a title=\"NLM privacy policy\"\n href=\"http://www.nlm.nih.gov/privacy.html\">Privacy</a></li>\n <li><a title=\"NLM accessibility\"\n href=\"http://www.nlm.nih.gov/accessibility.html\" >Accessibility</a></li>\n <li><a title=\"NIH Freedom of Information Act office\"\n href=\"http://www.nih.gov/icd/od/foia/index.htm\"\n >Freedom of Information Act</a></li>\n <li class=\"last-item\"><a href=\"https://lhncbc.nlm.nih.gov/contact-us\"\n >Contact Us</a></li>\n </ul>\n <ul class=\"horz-list\">\n <li><a title=\"U.S. National Library of Medicine\"\n href=\"http://www.nlm.nih.gov/\"\n >U.S. National Library of Medicine</a></li>\n <li><a title=\"U.S. National Institutes of Health\" href=\"http://www.nih.gov/\"\n >U.S. National Institutes of Health</a></li>\n <li><a title=\"U.S. Department of Health and Human\n Services\" href=\"http://www.hhs.gov/\"\n >U.S. Department of Health and Human Services</a></li>\n <li class=\"last-item\"><a title=\"USA.gov\" href=\"http://www.usa.gov/\"><mat-icon\n svgIcon=\"USAgov\" alt=\"USA.gov\" id=\"usagov\"></mat-icon></a></li>\n </ul>\n </div>\n `,\n styles: [`\n #fine-print {\n border-top: 2px solid #0BACB6;\n clear: left;\n text-align: center;\n font-size: 11px;\n padding-top: 10px;\n padding-bottom: 10px;\n }\n\n ul.horz-list {\n margin: auto;\n }\n\n #fine-print ul.horz-list li {\n list-style-type: none;\n display: inline;\n padding-left: 8px;\n padding-right: 10px;\n border-right: 1px solid #999;\n }\n\n #fine-print ul.horz-list li.last-item {\n border-right: none;\n }\n\n #usagov {\n margin-bottom: -2px;\n vertical-align: bottom;\n width: 60px;\n }\n `]\n})\nexport class FooterComponent {\n\n constructor(private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer) {\n // Initialize icon registry\n this.iconRegistry.addSvgIcon('USAgov',\n this.sanitizer.bypassSecurityTrustResourceUrl('../../assets/images/USAgov.svg'));\n }\n}\n","/**\n * A utility class\n */\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport traverse from 'traverse';\nimport {fhir} from '../fhir';\n\nexport class Util {\n static ITEM_CONTROL_EXT_URL = 'http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl';\n static helpItemTemplate = {\n text: '', // Update with value from input box.\n type: 'display',\n linkId: '', // Update at run time.\n extension: [{\n url: Util.ITEM_CONTROL_EXT_URL,\n valueCodeableConcept: {\n text: 'Help-Button',\n coding: [\n {\n code: 'help',\n display: 'Help-Button',\n system: 'http://hl7.org/fhir/questionnaire-item-control'\n }\n ]\n }\n }]\n };\n\n // Capitalize the camel case strings.\n static capitalize(str): string {\n let ret = '';\n if (str && str.length > 0) {\n ret = str.split(/(?=[A-Z])/).join(' ');\n ret = ret.charAt(0).toUpperCase() + ret.substring(1);\n }\n return ret;\n }\n\n\n /**\n * Identify if a particular widget under the group is visible.\n *\n * @param group - Group property of the widget\n * @param propertyId - It is '.' delimited property name of its descendants.\n */\n static isVisible(group: PropertyGroup, propertyId: string) {\n const path = propertyId.split('.');\n let visible = group.visible;\n for (let i = 0; i < path.length && visible; i++) {\n group = group.getProperty(path[i]);\n visible = group.visible;\n }\n return visible;\n\n }\n\n\n /**\n * Identify if an input is empty, typically intended to detect user input.\n * The definition of empty:\n * Anything null, undefined or empty string is empty.\n * Any object or an array containing all empty elements is empty.\n *\n * @param json - Input to test the emptiness.\n * @return boolean - True if empty.\n */\n static isEmpty(json: unknown): boolean {\n let ret = true;\n if (typeof json === 'number') {\n ret = false; // Any number is non-empty\n }\n else if(typeof json === 'boolean') {\n ret = false; // Any boolean is non-empty\n }\n else if(!json) {\n ret = true; // empty string, null and undefined are empty\n }\n else if (json instanceof Date) {\n ret = false; // Date is non-empty\n }\n else if(Array.isArray(json)) { // Iterate through array\n for(let i = 0; ret && i < json.length; i++) {\n ret = Util.isEmpty(json[i]);\n }\n }\n else if (typeof json === 'object') { // Iterate through object properties\n if(Object.keys(json).length === 0) {\n ret = true;\n }\n else {\n for(let i = 0, keys = Object.keys(json); ret && i < keys.length; i++) {\n if(json.hasOwnProperty(keys[i])) {\n ret = Util.isEmpty(json[keys[i]]);\n }\n }\n }\n }\n else {\n ret = false;\n }\n return ret;\n }\n\n\n /**\n * Convert lforms answers to FHIR equivalent.\n * @param lformsAnswers - Lforms answers.\n */\n static getFhirAnswerOption(lformsAnswers: any []) {\n if(!lformsAnswers) {\n return null;\n }\n const answerOption: any [] = [];\n lformsAnswers.forEach((answer) => {\n answerOption.push({code: answer.AnswerStringID, system: 'http://loinc.org', display: answer.DisplayText});\n });\n return answerOption;\n }\n\n\n /**\n * Convert lforms data type to FHIR data type\n * @param lformsType - Lforms data type.\n */\n static getFhirType(lformsType: string): string {\n let ret = 'string';\n switch (lformsType) {\n case 'INT':\n ret = 'integer';\n break;\n case 'REAL':\n ret = 'decimal';\n break;\n case 'DT':\n case 'YEAR':\n ret = 'date';\n break;\n case 'ST':\n case 'EMAIL':\n case 'PHONE':\n ret = 'string';\n break;\n case 'TITLE':\n ret = 'display';\n break;\n case 'TM':\n ret = 'time';\n break;\n case 'SECTION':\n case null: // Null type for panels.\n ret = 'group';\n break;\n case 'URL':\n ret = 'url';\n break;\n case 'QTY':\n ret = 'quantity';\n break;\n }\n return ret;\n }\n\n\n /**\n * Convert lforms units to equivalent FHIR extensions.\n * @param units - units in lforms format.\n */\n static convertUnitsToExtensions(units): any [] {\n if(!units) {\n return null;\n }\n const ret: any [] = [];\n units.forEach((unit) => {\n ret.push({\n url: 'http://hl7.org/fhir/StructureDefinition/questionnaire-unit',\n valueCoding: {\n code: unit,\n system: 'http://unitsofmeasure.org',\n display: unit\n }\n });\n });\n return ret;\n }\n\n\n /**\n * Find index of the item containing help text.\n * @param itemsArray - List of items to search for.\n */\n static findItemIndexWithHelpText(itemsArray) {\n if(!itemsArray) {\n return -1;\n }\n return itemsArray?.findIndex((item) => {\n let ret = false;\n if (item.type === 'display') {\n ret = item.extension?.some((e) => {\n return e.url === Util.ITEM_CONTROL_EXT_URL &&\n e.valueCodeableConcept?.coding?.some((coding) => coding.code === 'help');\n });\n }\n return ret;\n });\n }\n\n /**\n * Create help text item. Most of it is boiler plate structure except item.text and item.linkId.\n *\n * @param item - Item for which help text item is created, mainly to help assign linkId.\n * @param helpText - Help text, typically obtained from user input box.\n */\n static createHelpTextItem(item, helpText) {\n let helpTextItem;\n if(helpText) {\n helpTextItem = JSON.parse(JSON.stringify(Util.helpItemTemplate));\n helpTextItem.linkId = item.linkId + '_helpText';\n helpTextItem.text = helpText;\n }\n return helpTextItem;\n }\n\n\n /**\n * Prunes the questionnaire model using the following conditions:\n * . Removes 'empty' values from the object. Emptiness is defined in Util.isEmpty().\n * The following are considred empty: undefined, null, {}, [], and ''.\n * . Removes any thing with __$* keys.\n * . Removes functions.\n * . Converts __$helpText to appropriate FHIR help text item.\n * . Converts converts enableWhen[x].question object to linkId.\n *\n * @param value - Questionnaire object used in the form builder.\n */\n static convertToQuestionnaireJSON(value) {\n traverse(value).forEach(function (node) {\n this.before(function () {\n if (node?.__$helpText?.trim().length > 0) {\n const index = Util.findItemIndexWithHelpText(node.item);\n let helpTextItem;\n if (index < 0) {\n helpTextItem = Util.createHelpTextItem(node, node.__$helpText.trim());\n if (!node.item) {\n node.item = [];\n }\n node.item.push(helpTextItem);\n } else {\n helpTextItem = node.item[index];\n helpTextItem.text = node.__$helpText;\n }\n // Replace helpText with sub item\n delete node.__$helpText;\n this.update(node);\n }\n // Internally the question is target TreeNode. Change that to node's linkId.\n else if (this.key === 'question' && typeof node?.data === 'object') {\n this.update(node.data.linkId);\n }\n });\n\n this.after(function () {\n // Remove all custom fields starting with __$ and empty fields.\n if(this.key?.startsWith('__$') || typeof node === 'function' || Util.isEmpty(node)) {\n // tslint:disable-next-line:only-arrow-functions\n if (this.notRoot) {\n this.delete();\n }\n }\n });\n });\n return value;\n }\n\n\n /**\n * Remove the content of target and copy (shallow) source to target.\n * More like a clone of source, without changing target reference.\n * @param target - object to be mirrored\n * @param source - source to copy.\n */\n static mirrorObject(target, source): any {\n Object.keys(target).forEach((k) => {\n if(target.hasOwnProperty(k)) {\n delete target[k];\n }\n });\n\n return Object.assign(target, source);\n }\n\n\n /**\n * Create bare minimum form.\n */\n static createDefaultForm(): fhir.Questionnaire {\n return {\n resourceType: 'Questionnaire',\n title: 'New Form',\n status: 'draft',\n item: []\n }\n }\n\n\n /**\n * Find the extension based on a given url from an array.\n * @param extensions - Array of extensions.\n * @param url - The url of the extension to search for.\n */\n static findExtensionByUrl(extensions: fhir.Extension [], url: string) {\n const i = this.findExtensionIndexByUrl(extensions, url);\n return i >= 0 ? extensions[i] : null;\n }\n\n\n /**\n * Find the first index of the extension based on a given url.\n * @param extensions - Array of extensions.\n * @param url - The url of the extension to search for.\n */\n static findExtensionIndexByUrl(extensions: fhir.Extension [], url: string) {\n let ret = -1;\n if(extensions?.length) {\n ret = extensions.findIndex((ext) => {\n return ext.url === url;\n });\n }\n return ret;\n }\n}\n","/**\n * Customized pull down box.\n */\nimport {AfterViewInit, Component, Input, OnInit} from '@angular/core';\nimport {SelectWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n\n@Component({\n selector: 'lfb-select',\n templateUrl: './select.component.html'\n})\nexport class SelectComponent extends LfbControlWidgetComponent implements AfterViewInit {\n faInfo = faInfoCircle;\n nolabel = false;\n\n // A mapping for options display string. Typically, the display strings are from schema definition.\n // This map helps to redefine the display string.\n @Input()\n selectOptionsMap: any = {};\n\n // Options list for the pulldown\n allowedOptions: Array<{value: string, label: string}>;\n\n /**\n * Initialize component, mainly the options list.\n */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n this.selectOptionsMap = this.schema.widget.selectOptionsMap || {};\n const allowedOptions = this.schema.enum.map((e) => {\n return this.mapOption(e);\n });\n this.allowedOptions = allowedOptions.filter((e) => {\n return this.isIncluded(e.value);\n });\n }\n\n /**\n * Map any display strings.\n * @param opt\n */\n mapOption(opt: string): {value: string, label: string} {\n const ret = {value: opt, label: opt};\n if (this.selectOptionsMap.map && this.selectOptionsMap.map[opt]) {\n ret.label = this.selectOptionsMap.map[opt];\n }\n return ret;\n }\n\n /**\n * Optionally to exlude any options from the schema.\n * @param opt\n */\n isIncluded(opt: string): boolean {\n return !(this.selectOptionsMap.remove && this.selectOptionsMap.remove.indexOf(opt) >= 0);\n }\n}\n","<ng-template #baseSelect>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <select *ngIf=\"schema.type!='array'\"\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [attr.disabled]=\"schema.readOnly ? '' : null\"\n class=\"form-control {{controlWidthClass}}\">\n <ng-container *ngIf=\"schema.oneOf; else use_enum\">\n <option *ngFor=\"let option of schema.oneOf\"\n [ngValue]=\"option.enum[0]\" >{{option.description}}</option>\n </ng-container>\n <ng-template #use_enum>\n <option *ngFor=\"let option of allowedOptions\"\n [ngValue]=\"option.value\" >{{option.label}}</option>\n </ng-template>\n </select>\n\n <select *ngIf=\"schema.type==='array'\" multiple\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [attr.disabled]=\"schema.readOnly ? '' : null\"\n class=\"form-control {{controlWidthClass}}\">\n <option *ngFor=\"let option of schema.items.oneOf\"\n [ngValue]=\"option.enum[0]\"\n [attr.disabled]=\"option.readOnly ? '' : null\">{{option.description}}</option>\n </select>\n\n <input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n </div>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"baseSelect\">\n\n</ng-container>\n\n","import { Component, OnInit, Input } from '@angular/core';\nimport {WidgetChooserComponent} from '@lhncbc/ngx-schema-form';\n\n@Component({\n selector: 'lfb-element-chooser',\n template: `<div #target></div>`,\n styles: []\n})\nexport class ElementChooserComponent extends WidgetChooserComponent {\n @Input()\n nolabel = true;\n @Input()\n layout: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n}\n","/**\n * Widget to represent enableBehaviour field.\n */\nimport { Component, OnInit } from '@angular/core';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-enable-behavior',\n template: `\n <input *ngIf=\"schema.widget.id ==='hidden'; else displayTemplate\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <ng-template #displayTemplate>\n <div class=\"row\">\n <div [ngClass]=\"schema.widget.labelWidthClass\"></div>\n <div [ngClass]=\"schema.widget.controlWidthClass\">\n <lfb-label [helpMessage]=\"schema.description\" [title]=\"schema.title\"></lfb-label>\n <div [ngClass]=\"{row: schema.widget.layout === 'row'}\">\n <div *ngFor=\"let option of schema.oneOf\" class=\"radio\">\n <label class=\"horizontal control-label\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option.enum[0]\"\n value=\"{{option.enum[0]}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n </div>\n <div *ngFor=\"let option of schema.enum\" class=\"radio\" [ngClass]=\"{col: schema.widget.layout === 'row'}\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option\"\n value=\"{{option}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n <lfb-label [for]=\"id + '.' + option\" class=\"horizontal control-label ml-sm-2\" [title]=\"displayTexts[option]\"></lfb-label>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n `,\n styles: [\n ]\n})\nexport class EnableBehaviorComponent extends LfbControlWidgetComponent {\n displayTexts = {\n all: 'All conditions are true',\n any: 'Any condition is true'\n }\n}\n","/**\n * Customize the radio widget template.\n */\nimport { Component } from '@angular/core';\n\nimport { ControlWidget } from '@lhncbc/ngx-schema-form';\n\n@Component({\n selector: 'lfb-radio-widget',\n template: `<div class=\"widget form-group\">\n <lfb-title [title]=\"schema.title\" [helpMessage]=\"schema.description\"></lfb-title>\n <div class=\"container\">\n <div class=\"row\">\n <div *ngFor=\"let option of schema.oneOf\" class=\"radio\">\n <label class=\"horizontal control-label\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option.enum[0]\"\n value=\"{{option.enum[0]}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n </div>\n <div *ngFor=\"let option of schema.enum\" class=\"radio\" [ngClass]=\"{col: schema.widget.layout === 'row'}\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option\"\n value=\"{{option}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n <lfb-label [for]=\"id + '.' + option\" class=\"horizontal control-label\" [title]=\"option\"></lfb-label>\n </div>\n </div>\n </div>\n\t<input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n</div>`,\n styles: [`\n lfb-label {\n margin-left: .3rem;\n }\n `]\n})\nexport class RadioComponent extends ControlWidget {}\n","import {AfterViewInit, Component, OnInit} from '@angular/core';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-boolean-radio',\n templateUrl: 'boolean-radio.component.html',\n styles: [`\n label:hover {\n opacity: 0.5;\n }\n `]\n})\nexport class BooleanRadioComponent extends LfbControlWidgetComponent implements AfterViewInit {\n ngAfterViewInit() {\n this.labelPosition = 'left';\n super.ngAfterViewInit();\n }\n}\n","<ng-template #controller>\n <div class=\"widget\" [ngClass]=\"{'row': labelPosition === 'left', 'm-0' : true}\">\n <lfb-label *ngIf=\"!nolabel\" [title]=\"schema.title\" [helpMessage]=\"schema.description\" [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"></lfb-label>\n\n <div ngbRadioGroup\n [attr.name]=\"name\"\n [formControl]=\"control\"\n class=\"btn-group form-check-inline btn-group-sm btn-group-toggle\">\n <ng-container *ngFor=\"let option of ['No', 'Yes']\" class=\"radio\">\n <label ngbButtonLabel class=\"btn-outline-success m-0\">\n <input ngbButton [value]=\"option === 'Yes'\" type=\"radio\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n {{option}}\n </label>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"controller\"></ng-container>\n","/**\n * Form related helper functions.\n */\nimport {Injectable} from '@angular/core';\nimport {IDType, ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {TreeModel} from '@circlon/angular-tree-component';\nimport {fhir} from '../fhir';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {MessageDlgComponent, MessageType} from '../lib/widgets/message-dlg/message-dlg.component';\nimport {Observable, Subject} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {HttpClient} from '@angular/common/http';\nimport traverse from 'json-schema-traverse';\nimport jsonTraverse from 'traverse';\nimport ngxItemSchema from '../../assets/ngx-item.schema.json';\nimport fhirExtensionSchema from '../../assets/fhir-extension-schema.json';\nimport itemLayout from '../../assets/items-layout.json';\nimport ngxFlSchema from '../../assets/ngx-fl.schema.json';\nimport flLayout from '../../assets/fl-fields-layout.json';\nimport {Util} from '../lib/util';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormService {\n\n _guidingStep$: Subject<string> = new Subject<string>();\n\n localStorageError: Error = null;\n treeModel: TreeModel;\n itemSchema: any = {properties: {}};\n flSchema: any = {properties: {}};\n\n constructor(private modalService: NgbModal, private http: HttpClient) {\n ngxItemSchema.definitions.Extension = fhirExtensionSchema as any;\n this._updateExtension(ngxItemSchema);\n this.itemSchema = ngxItemSchema;\n this.itemSchema.layout = itemLayout;\n\n this.flSchema = ngxFlSchema;\n this.flSchema.layout = flLayout;\n }\n\n\n /**\n * Get item level schema\n */\n getItemSchema() {\n return this.itemSchema;\n }\n\n /**\n * Get form level schema\n */\n getFormLevelSchema() {\n return this.flSchema;\n }\n\n /**\n * Update main schema with adjusted extension schema recursively\n *\n * @param rootSchema\n */\n _updateExtension(rootSchema: any) {\n const extension = rootSchema.definitions.Extension;\n traverse(rootSchema, {}, (\n schema,\n jsonPtr,\n rootSch,\n parentJsonPtr,\n parentKeyword,\n parentSchema,\n indexOrProp) => {\n if(parentKeyword === 'items' && (parentJsonPtr.endsWith('extension') || parentJsonPtr.endsWith('modifierExtension'))) {\n // Save title and description before over writing them.\n const commonFields = {title: schema.title, description: schema.description};\n Object.assign(schema, extension);\n // title and description are overwritten. Restore them.\n if(commonFields.title) {\n schema.title = commonFields.title;\n }\n if(commonFields.description) {\n schema.description = commonFields.description;\n }\n }\n });\n }\n\n\n /**\n * Access guiding step observable.\n */\n get guidingStep$(): Observable<string> {\n return this._guidingStep$.asObservable();\n }\n\n\n /**\n * Inform the listeners of change in step.\n * @param step\n */\n setGuidingStep(step: string) {\n this._guidingStep$.next(step);\n }\n\n\n /**\n * Intended to collect source items for enable when logic\n * Get sources for focussed item.\n */\n getSourcesExcludingFocussedTree(): ITreeNode [] {\n let ret = null;\n if (this.treeModel) {\n const fNode = this.treeModel.getFocusedNode();\n ret = this.getEnableWhenSources(fNode);\n }\n return ret;\n }\n\n\n /**\n * Get sources excluding the branch of a given node.\n * @param focussedNode\n * @param treeModel?: Optional tree model to search. Default is this.treeModel.\n */\n getEnableWhenSources(focussedNode: ITreeNode, treeModel?: TreeModel): ITreeNode [] {\n if (!treeModel) {\n treeModel = this.treeModel;\n }\n let ret = null;\n if (treeModel) {\n ret = this.getEnableWhenSources_(treeModel.roots, focussedNode);\n }\n return ret;\n }\n\n\n /**\n * Get sources from a given list of nodes excluding the branch of focussed node.\n * @param nodes - List of nodes to search\n * @param focussedNode - Reference node to exclude the node and its descending branch\n * @private\n */\n private getEnableWhenSources_(nodes: ITreeNode [], focussedNode: ITreeNode): ITreeNode [] {\n const ret: ITreeNode [] = [];\n for (const node of nodes) {\n if (node !== focussedNode) {\n if (node.data.type !== 'group' && node.data.type !== 'display') {\n ret.push(node);\n }\n if (node.hasChildren) {\n ret.push.apply(ret, this.getEnableWhenSources_(node.children, focussedNode));\n }\n }\n }\n return ret;\n }\n\n\n /**\n * Setter\n * @param treeModel\n */\n setTreeModel(treeModel: TreeModel) {\n this.treeModel = treeModel;\n }\n\n\n /**\n * Get node by its id.\n * @param id\n */\n getTreeNodeById(id: IDType): ITreeNode {\n return this.treeModel.getNodeById(id);\n }\n\n\n /**\n * Get a node by linkId from entire tree.\n * @param linkId\n */\n getTreeNodeByLinkId(linkId: string): ITreeNode {\n return this.findNodeByLinkId(this.treeModel.roots, linkId);\n }\n\n\n /**\n * Get a node by linkId from a given set of tree nodes.\n * @param targetNodes - Array of tree nodes\n * @param linkId - linkId associated with item of the node.\n */\n findNodeByLinkId(targetNodes: ITreeNode [], linkId: string): ITreeNode {\n let ret: ITreeNode;\n if (!targetNodes || targetNodes.length === 0) {\n return null;\n }\n for (const node of targetNodes) {\n if (node.data.linkId === linkId) {\n ret = node;\n } else if (node.hasChildren) {\n ret = this.findNodeByLinkId(node.children, linkId);\n }\n if (ret) {\n break;\n }\n }\n return ret;\n }\n\n\n /**\n * General purpose information dialog\n *\n * @param title - Title of dialog\n * @param message - Message to display\n * @param type - INFO | WARNING | DANGER\n */\n showMessage(title: string, message: string, type: MessageType = MessageType.INFO) {\n\n const modalRef = this.modalService.open(MessageDlgComponent);\n modalRef.componentInstance.title = title;\n modalRef.componentInstance.message = message;\n modalRef.componentInstance.type = type;\n }\n\n\n /**\n * Parse input string to questionnaire.\n * @param text\n */\n parseQuestionnaire(text: string): fhir.Questionnaire {\n return this.validateFhirQuestionnaire(JSON.parse(text));\n }\n\n\n /**\n * Possible validation checks.\n *\n * @param json\n */\n validateFhirQuestionnaire(json: any): fhir.Questionnaire {\n jsonTraverse(json).forEach(function(x) {\n if (this.key === 'item') {\n let htIndex = -1;\n const index = x.findIndex((e) => {\n htIndex = Util.findItemIndexWithHelpText(e.item);\n return htIndex >= 0;\n });\n if(index >= 0) {\n const helpText = x[index].item[htIndex].text;\n x[index].item.splice(htIndex, 1);\n if(x[index].item.length === 0) {\n delete x[index].item;\n }\n jsonTraverse(x[index]).set(['__$helpText'], helpText);\n }\n }\n });\n\n return json as fhir.Questionnaire;\n }\n\n\n /**\n * Remove questionnaire from local storage.\n */\n clearAutoSavedForm() {\n localStorage.removeItem('fhirQuestionnaire');\n }\n\n\n /**\n * Save questionnaire in local storage\n * @param fhirQ - Questionnaire\n */\n autoSaveForm(fhirQ: fhir.Questionnaire) {\n this.autoSave('fhirQuestionnaire', fhirQ);\n }\n\n\n /**\n * Retrieve questionnaire from the storage.\n */\n autoLoadForm(): fhir.Questionnaire {\n return this.autoLoad('fhirQuestionnaire') as fhir.Questionnaire;\n }\n\n\n /**\n * Store key, value to local storage. Checks the availability of storage before saving.\n * @param key - Key for storage.\n * @param value - Object or string to store.\n */\n autoSave(key: string, value: any) {\n if(this._storageAvailable('localStorage')) {\n if(value) {\n if(key !== 'state' && value) {\n // Non state are objects\n localStorage.setItem(key, JSON.stringify(value));\n }\n else {\n // State is string type.\n localStorage.setItem(key, value);\n }\n }\n else {\n localStorage.removeItem(key);\n }\n }\n else {\n console.error('Local storage not available!');\n }\n }\n\n\n /**\n * Retrieve an item from local storage\n * @param key - Key of the item to retrieve\n */\n autoLoad(key: string): any {\n let ret: any = null;\n if(this._storageAvailable('localStorage')) {\n const str = localStorage.getItem(key);\n if(str) {\n if(key !== 'state') {\n ret = JSON.parse(str);\n }\n else {\n ret = str;\n }\n }\n }\n else {\n console.error('Local storage not available!');\n }\n return ret;\n }\n\n\n /**\n * Test the storage for availability\n * @param type - localStorage | sessionStorage\n * @return boolean\n */\n _storageAvailable(type): boolean {\n let storage;\n try {\n storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n this.localStorageError = null;\n return true;\n }\n catch(e) {\n this.localStorageError = e;\n return e instanceof DOMException && (\n // everything except Firefox\n e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n (storage && storage.length !== 0);\n }\n }\n\n\n /**\n * Check if a questionnaire is saved in local storage.\n */\n isAutoSaved(): boolean {\n return !!localStorage.getItem('fhirQuestionnaire');\n }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport {ITreeModel} from '@circlon/angular-tree-component/lib/defs/api';\nimport {Subject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeService {\n treeModel: ITreeModel;\n\n _nodeFocus = new Subject<any>();\n constructor() { }\n get nodeFocus (): Subject<any> {\n return this._nodeFocus;\n }\n}\n","/**\n * For layout of fields in rows. Field width could be entire 12 columns (bootstrap grid size),\n * in which case next field starts on next line.\n */\nimport { Component, OnInit } from '@angular/core';\nimport { GridComponent} from '../grid.component/grid.component';\n\n@Component({\n selector: 'lfb-row-layout',\n template: `\n <div *ngFor=\"let row of rows\">\n <div [class]=\"gridClass(field)\" class=\"lfb-row\" [ngClass]=\"{hideRow: isHidden(field)}\" *ngFor=\"let field of getShowFields(row)\">\n <lfb-form-element [formProperty]=\"getShowFieldProperty(field)\"></lfb-form-element>\n </div>\n </div>\n `,\n styles: [`\n .lfb-row {\n border-bottom: lightgrey solid 1px;\n padding: 2px 0 2px 0;\n }\n .lfb-row:hover {\n background-color: lightgoldenrodyellow;\n }\n\n .hideRow {\n border: none !important;\n padding: 0 !important;\n display: none;\n }\n `]\n})\nexport class RowLayoutComponent extends GridComponent implements OnInit {\n\n rows: any = [];\n\n /**\n * Initialize\n */\n ngOnInit() {\n // Read rows from schema layout\n this.rows = this.formProperty.schema.layout.formLayout.rows;\n }\n\n /**\n * Check to see if it is a hidden field. Intended to apply hideRow class.\n * @param field - Field id.\n */\n isHidden(field): boolean {\n return this.getWidgetId(field) === 'hidden';\n }\n}\n","/**\n * Component for editing json of questionnaire item.\n *\n */\nimport {AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport * as ace from 'ace-builds';\nimport {FetchService} from '../../../fetch.service';\nimport {SharedObjectService} from '../../../shared-object.service';\nimport {AppJsonPipe} from '../../pipes/app-json.pipe';\n\n\n@Component({\n selector: 'lfb-item-json-editor',\n template: `\n <div class=\"card-container\">\n <div class=\"app-ace-editor\" #itemJsonEditor style=\"height: 500px;\" ></div>\n </div>\n `,\n styles: [\n `\n .app-ace-editor {\n border: 2px solid #f8f9fa;\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n `,\n ],\n\n})\nexport class ItemJsonEditorComponent implements AfterViewInit {\n @ViewChild('itemJsonEditor') editorElement: ElementRef;\n val: any;\n\n constructor(private dataSrv: FetchService, private itemSrv: SharedObjectService) {}\n\n /**\n * Initialize component.\n */\n ngAfterViewInit(): void {\n\n ace.config.set('fontSize', '14px');\n ace.config.set(\n 'basePath',\n 'https://unpkg.com/ace-builds@1.4.12/src-noconflict'\n );\n const aceEditor = ace.edit(this.editorElement.nativeElement);\n aceEditor.setTheme('ace/theme/twilight');\n aceEditor.session.setMode('ace/mode/json');\n aceEditor.on('change', () => {\n const val = aceEditor.getValue();\n if (val !== this.val) {\n this.val = val;\n this.itemSrv.setObject(this.val);\n }\n });\n\n // Update this editor's content with any update to the item from outside.\n this.itemSrv.currentItem$.subscribe((item) => {\n if (item !== this.val) {\n this.val = item;\n aceEditor.setValue(new AppJsonPipe().transform(this.val));\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {AppJsonPipe} from './lib/pipes/app-json.pipe';\nimport {fhir} from './fhir';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A service to share objects across the components, mainly intended for\n * sharing changed questionnaire and questionnaire item.\n */\nexport class SharedObjectService {\n\n private questionnaireSource$ = new BehaviorSubject<fhir.Questionnaire>(null);\n private itemSource$ = new BehaviorSubject<fhir.QuestionnaireItem>(null);\n private nodeSource$: BehaviorSubject<ITreeNode> = new BehaviorSubject<ITreeNode>(null);\n node$ = this.nodeSource$.asObservable();\n private objSource$: BehaviorSubject<any> = new BehaviorSubject<any>({});\n object$ = this.objSource$.asObservable();\n objectStr$ = this.object$.pipe(map((item) => {\n return new AppJsonPipe().transform(item);\n // return JSON.stringify(item, null, 2);\n }));\n constructor() {}\n\n\n /**\n * Set an object to share it with listeners.\n *\n * @param obj - Object to share, can be a string representation.\n */\n setObject(obj: any) {\n let valid = true;\n if (typeof obj === 'string') {\n try {\n obj = JSON.parse(obj);\n } catch (e) {\n valid = false;\n }\n }\n if (valid) {\n this.objSource$.next(obj);\n }\n }\n\n /**\n * Set a tree node to share it with listeners.\n *\n * @param node - A node in the sidebar tree\n */\n /*\n setNode(node: ITreeNode): void {\n this.nodeSource$.next(node);\n }\n */\n\n set questionnaire(questionnaire: fhir.Questionnaire) {\n this.questionnaireSource$.next(questionnaire);\n }\n\n get questionnaire$(): Observable<fhir.Questionnaire> {\n return this.questionnaireSource$.asObservable();\n }\n\n set currentItem (item: fhir.QuestionnaireItem) {\n this.itemSource$.next(item);\n }\n\n get currentItem$(): Observable<fhir.QuestionnaireItem> {\n return this.itemSource$.asObservable();\n }\n\n}\n","/**\n * An input box for enableWhen's source to search eligible source items listed in the tree.\n */\nimport {Component, OnInit, ViewChild} from '@angular/core';\nimport {BehaviorSubject, merge, Observable, of, Subject} from 'rxjs';\nimport {FormService} from '../../../services/form.service';\nimport {debounceTime, distinctUntilChanged, filter, map, startWith, switchMap} from 'rxjs/operators';\nimport {ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {ControlWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {NgbTypeahead} from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'lfb-choice',\n template: `\n <ng-template #rt let-r=\"result\" let-t=\"term\">\n <ngb-highlight [result]=\"r.name\" [term]=\"t\"></ngb-highlight>\n </ng-template>\n\n <lfb-label *ngIf=\"!nolabel\" [for]=\"id\" [title]=\"schema.title\" [helpMessage]=\"schema.description\"></lfb-label>\n <input *ngIf=\"schema.type!='array'\"\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [attr.disabled]=\"schema.readOnly ? '' : null\"\n type=\"text\"\n [(ngModel)]=\"model\"\n [ngbTypeahead]=\"search\"\n [editable]=\"false\"\n [inputFormatter]=\"inputFormatter\"\n [resultFormatter]=\"resultListItemFormatter\"\n class=\"form-control\"\n (focus)=\"focus$.next($any($event).target.value)\"\n (click)=\"click$.next($any($event).target.value)\"\n (selectItem)=\"onSelect($event)\"\n #instance=\"ngbTypeahead\"\n >\n\n <input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n `,\n styles: [\n ]\n})\nexport class EnableWhenSourceComponent extends ControlWidget implements OnInit {\n // Info icon.\n faInfo = faInfoCircle;\n nolabel = false;\n model: ITreeNode;\n\n sources: ITreeNode [];\n\n @ViewChild('instance') instance: NgbTypeahead;\n\n focus$ = new Subject<string>();\n click$ = new Subject<string>();\n\n /**\n * Search through text of the source items, with input string. For empty term, show all items.\n *\n * @param input$ - Observation for input string.\n */\n search = (input$: Observable<string>): Observable<ITreeNode []> => {\n const debouncedText$ = input$.pipe(debounceTime(100), distinctUntilChanged());\n const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));\n const inputFocus$ = this.focus$;\n\n return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(\n map(term => (term === '' ? this.sources\n : this.sources.filter(el => el.data.text.toLowerCase().indexOf(term.toLowerCase()) > -1)))\n );\n };\n\n\n /**\n * Invoke super class constructor.\n *\n * @param formService - Service to help with collection of sources\n */\n constructor(private formService: FormService) {\n super();\n }\n\n\n /**\n * Initialize the component\n */\n ngOnInit(): void {\n this.sources = this.formService.getSourcesExcludingFocussedTree();\n const value = this.formProperty.value; // Source is already assigned for this item.\n if (this.sources && this.sources.length > 0 && value) {\n const source = this.sources.find((el) => el.data.linkId === value);\n if (source) {\n this.model = source;\n this.formProperty.setValue(source.data.linkId, true);\n // Set answer type input\n this.formProperty.searchProperty('__$answerType').setValue(source.data.type, true);\n }\n }\n }\n\n /**\n * Handle user selection event\n * @param $event - Source tree node object\n */\n onSelect($event): void {\n this.formProperty.setValue($event.item.data.linkId, true);\n this.formProperty.searchProperty('__$answerType').setValue($event.item.data.type, true);\n }\n\n\n /**\n * Format the input after selection\n * @param item\n */\n inputFormatter(item: ITreeNode): string {\n let ret: string;\n if (item && item.data) {\n ret = item.data.text;\n }\n return ret;\n }\n\n\n /**\n * Format item in the results popup.\n * @param item\n */\n resultListItemFormatter(item: ITreeNode): string {\n let indent = '';\n let ret: string;\n if (item && item.data) {\n for (let i = 1; i < item.level; i++) {\n indent = indent + ' ';\n }\n ret = indent + item.data.text;\n }\n return ret;\n }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FhirService, FHIRServer} from '../../../services/fhir.service';\nimport {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\nimport {BehaviorSubject} from 'rxjs';\n\n// Search related inputs on the page.\ninterface State {\n fhirServer: FHIRServer;\n}\n\nenum ExportType {\n CREATE,\n UPDATE\n}\n\n@Component({\n selector: 'lfb-fhir-export-dlg',\n templateUrl: './fhir-export-dlg.component.html',\n styleUrls: ['./fhir-export-dlg.component.css']\n})\nexport class FhirExportDlgComponent implements OnInit {\n\n private _loading$ = new BehaviorSubject<boolean>(false);\n serverResponse: any;\n error: any;\n @Input()\n questionnaire: any;\n\n // State of the component.\n private _state: State = {\n fhirServer: this.fhirService.getFhirServer()\n };\n\n constructor(public fhirService: FhirService, private activeModal: NgbActiveModal) {\n }\n\n // Getters and setters\n get loading$() { return this._loading$.asObservable(); }\n get selectedFHIRServer() {return this._state.fhirServer;}\n set selectedFHIRServer(fhirServer: FHIRServer) {\n this.fhirService.setFhirServer(fhirServer);\n this._set({fhirServer});\n }\n\n /**\n * Set partial properties of search state.\n * @param patch - Partial state fields.\n * @private\n */\n private _set(patch: Partial<State>) {\n Object.assign(this._state, patch);\n }\n\n ngOnInit(): void {\n }\n\n /**\n * Handle dialog close\n * @param value\n */\n close(value: any): void {\n this.activeModal.close(value);\n }\n\n /**\n * Get FHIR server list.\n */\n getServerList(): FHIRServer [] {\n return this.fhirService.fhirServerList;\n }\n}\n","<div class=\"modal-header bg-primary text-white\">\n <h4 class=\"modal-title\" role=\"document\">FHIR Server Reply</h4>\n <button type=\"button\" class=\"close text-white\" aria-label=\"Close\" (click)=\"close(true)\">\n <span aria-hidden=\"true\">×</span>\n </button>\n</div>\n<div class=\"modal-body bg-light\" *ngIf=\"serverResponse\"><pre class=\"fhir-response\">{{serverResponse | json }}</pre></div>\n<div class=\"modal-body bg-light\" *ngIf=\"error\"><pre class=\"fhir-response\">{{error.message}}</pre></div>\n<div class=\"modal-footer btn-group-sm\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"close(true)\">Close</button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport {NgxSchemaFormComponent} from './ngx-schema-form/ngx-schema-form.component';\n\nconst routes: Routes = [\n {path: 'ngx', component: NgxSchemaFormComponent}\n ];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import {AfterViewInit, Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {fhir} from '../../../fhir';\n\n/**\n * Define data structure for dialog\n */\nexport interface PreviewData {\n questionnaire: fhir.Questionnaire;\n lfData?: any;\n}\n\n@Component({\n selector: 'lfb-preview-dlg',\n templateUrl: './preview-dlg.component.html',\n styleUrls: ['./preview-dlg.component.css']\n})\nexport class PreviewDlgComponent {\n\n @ViewChild('lhcForm', {read: ElementRef}) wcForm: ElementRef;\n\n constructor(\n public dialogRef: MatDialogRef<PreviewDlgComponent>,\n @Inject(MAT_DIALOG_DATA) public data: PreviewData,\n ) {}\n}\n"," <h2 mat-dialog-title class=\"bg-primary text-white pb-3 pt-3 pl-2 pr-2 rounded\">Preview of Questionnaire\n <button mat-icon-button class=\"close-button\" [mat-dialog-close]=\"true\">\n <mat-icon class=\"close-icon\">close</mat-icon>\n </button>\n </h2>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"View Rendered Form\">\n <ng-template matTabContent>\n <wc-lhc-form #lhcForm [questionnaire]=\"data?.questionnaire\"></wc-lhc-form>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"View Questionnaire JSON\">\n <pre class=\"fix-pre\">{{ data?.questionnaire | json }}</pre>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-button class=\"btn-primary\" [mat-dialog-close]=\"true\">Close</button>\n </mat-dialog-actions>\n\n","import { Component, OnInit } from '@angular/core';\nimport {SelectComponent} from '../select/select.component';\n\n@Component({\n selector: 'lfb-type',\n templateUrl: '../select/select.component.html'\n})\nexport class TypeComponent extends SelectComponent implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.formProperty.valueChanges.subscribe((type) => {\n const initialProp = this.formProperty.findRoot().getProperty('initial');\n const widget = initialProp.schema.widget;\n widget.id = (type === 'choice' || type === 'open-choice') ? 'hidden' : 'initial';\n });\n }\n\n}\n","import {AfterViewInit, Component, DoCheck, OnDestroy, OnInit} from '@angular/core';\nimport {TableComponent} from '../table/table.component';\nimport {fhir} from '../../../fhir';\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport {TreeService} from '../../../services/tree.service';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'lfb-answer-option',\n templateUrl: '../table/table.component.html',\n styleUrls: ['../table/table.component.css', './answer-option.component.css']\n})\nexport class AnswerOptionComponent extends TableComponent implements AfterViewInit, OnInit, OnDestroy {\n\n static ORDINAL_URI = 'http://hl7.org/fhir/StructureDefinition/ordinalValue';\n\n subscriptions: Subscription [] = [];\n constructor(private treeService: TreeService) {\n super();\n }\n\n ngOnInit() {\n super.ngOnInit();\n const repeatProp = this.formProperty.findRoot().getProperty('repeats');\n this.setSelectionType(repeatProp.value);\n const sub = repeatProp.valueChanges.subscribe((isRepeating) => {this.setSelectionType(isRepeating);});\n this.subscriptions.push(sub);\n }\n\n\n /**\n * Set row selection type, i.e multiple selections or single selection\n * @param isRepeat - Repeat indicates multiple selections, set in 'repeat' field.\n */\n setSelectionType(isRepeat: boolean) {\n if(isRepeat) {\n this.rowSelectionType = 'checkbox';\n }\n else {\n this.rowSelectionType = 'radio';\n }\n }\n\n\n /**\n * Initialize\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n const repeatProp = this.formProperty.findRoot().getProperty('repeats');\n this.setSelectionType(repeatProp.value);\n let sub = repeatProp.valueChanges.subscribe((isRepeating) => {this.setSelectionType(isRepeating);});\n this.subscriptions.push(sub);\n const aOptions = this.formProperty.value;\n const initials = this.formProperty.findRoot().getProperty('initial').value;\n this.setDefaultSelections(initials || [], aOptions || []);\n this.setAnswerOptions(aOptions);\n sub = this.formProperty.valueChanges.subscribe((newValue) => {\n this.updateScoreExtensions(newValue);\n });\n this.subscriptions.push(sub);\n }\n\n\n /**\n * Setup answer options along with score column by reading scores form properties\n */\n setAnswerOptions(answerOptions: any []) {\n answerOptions?.forEach((option) => {\n if(option.valueCoding) {\n const scoreExt = option.extension?.find(ext => ext.url === AnswerOptionComponent.ORDINAL_URI);\n if(scoreExt) {\n option.valueCoding.__$score = scoreExt.valueDecimal;\n }\n }\n });\n if(answerOptions) {\n this.formProperty.setValue(answerOptions, true);\n }\n }\n\n\n /**\n * Compare two FHIR Coding objects.\n * Matching rules:\n * 1. When only code exists, match code\n * 2. When only display exists, match display\n * 2. When code and system exists, match both\n * 3. When code and display exists, match both\n * 4. When code, display and system exists, match all three.\n * @param coding1 - First coding object\n * @param coding2 - second coding object\n */\n isEqualCoding(coding1: fhir.Coding, coding2: fhir.Coding) {\n if(!coding1 && !coding2) {\n return true; // Match if both are undefined\n }\n\n if(!coding1 || !coding2) {\n return false; // null vs non-null;\n }\n\n let ret = false;\n if(coding1.code || coding2.code) {\n ret = coding1.code === coding2.code;\n }\n else if(coding1.display || coding2.display) {\n ret = coding1.display === coding2.display;\n }\n\n if(ret && (coding1.system || coding2.system)) {\n ret = coding1.system === coding2.system; // code/display and system are match\n }\n\n if (ret && (coding1.display || coding2.display)) {\n ret = coding1.display === coding1.display; // code and display are match\n }\n\n return ret;\n }\n\n\n /**\n * Set up defaults column reading 'initial' form properties.\n */\n setDefaultSelections(initialArray: any [], answerOptionArray: any []) {\n answerOptionArray.forEach((prop, index) => {\n const rowFromInitial = initialArray.find(initial => this.isEqualCoding(initial.valueCoding, prop.valueCoding));\n if(rowFromInitial) {\n if(this.rowSelectionType === 'radio')\n this.selectionRadio = index;\n else if(this.rowSelectionType === 'checkbox')\n this.selectionCheckbox[index] = true;\n }\n });\n this.radioSelection(null);\n }\n\n\n /**\n * Update extension form property with user input.\n *\n * @param score - Score from widget\n * @param index - Index of the row\n */\n updateScoreExtensions(options) {\n options?.forEach((option) => {\n const i = option.extension?.findIndex((ext) => ext.url === AnswerOptionComponent.ORDINAL_URI);\n const score = option.valueCoding?.__$score;\n const isAdd = score !== null && score !== undefined; // True is add, false is remove.\n if(isAdd && i < 0) {\n const scoreExt = {url: AnswerOptionComponent.ORDINAL_URI, valueDecimal: score};\n option.extension = option.extension || [];\n option.extension.push(scoreExt);\n }\n else if(isAdd && i >= 0) {\n option.extension[i].valueDecimal = score;\n }\n else if(i >= 0) {\n option.extension.splice(i, 1);\n }\n });\n }\n\n /**\n * Override method.\n * Handle user input for radio selection. Set initial form property value.\n */\n radioSelection(event) {\n super.radioSelection(event);\n if(this.rowSelectionType === 'radio') {\n if(event !== undefined && event !== null && !Number.isNaN(event)) {\n this.selectionRadio = event;\n }\n if(this.selectionRadio >= 0) {\n const initialProperty = this.formProperty.findRoot().getProperty('initial') as PropertyGroup;\n const valueCoding = JSON.parse(JSON.stringify(this.formProperty.value[this.selectionRadio].valueCoding));\n initialProperty.setValue([{valueCoding}], false);\n }\n }\n }\n\n\n /**\n * Override method.\n * Handle user input for checkboxes selection. Set initial form property value.\n */\n checkboxSelection(event) {\n super.checkboxSelection(event);\n const selectedCodings = [];\n this.selectionCheckbox.forEach((selected, index) => {\n if(selected) {\n const valueCoding = JSON.parse(JSON.stringify(this.formProperty.value[index].valueCoding));\n selectedCodings.push({valueCoding});\n }\n });\n const initialProperty = this.formProperty.searchProperty('/initial') as PropertyGroup;\n initialProperty.setValue(selectedCodings, false);\n // console.log(new AppJsonPipe().transform(this.formProperty.root.value));\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n}\n","/**\n * Customize array-widget from ngx-schema-form.\n */\nimport {AfterViewInit, Component, Input, OnInit} from '@angular/core';\nimport {ControlWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-control-widget',\n template: `\n `,\n styles: [\n ]\n})\nexport class LfbControlWidgetComponent extends ControlWidget implements AfterViewInit {\n // Info icon\n faInfo = faInfoCircle;\n\n // Properties to customize the layout, typically read from widget layout json.\n @Input()\n nolabel = false;\n @Input()\n labelPosition;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n @Input()\n booleanControlledInitial = true;\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n const widget = this.formProperty.schema.widget;\n // Input is priority followed by widget definition and default\n this.labelPosition =\n this.labelPosition\n ? this.labelPosition\n : widget.labelPosition\n ? widget.labelPosition\n : 'top';\n // Apply width classes for only left positioned labels.\n this.labelWidthClass =\n this.labelPosition === 'left'\n ? (this.labelWidthClass\n ? this.labelWidthClass\n : (widget.labelWidthClass\n ? widget.labelWidthClass\n : 'col-sm'))\n : '';\n this.controlWidthClass =\n this.labelPosition === 'left'\n ? (this.controlWidthClass\n ? this.controlWidthClass\n : (widget.controlWidthClass\n ? widget.controlWidthClass\n : 'col-sm'))\n : '';\n this.booleanControlled = this.booleanControlled ? this.booleanControlled : !!widget.booleanControlled;\n\n this.booleanControlledInitial = widget.booleanControlledInitial !== undefined ?\n widget.booleanControlledInitial : this.booleanControlledInitial; // If not defined, show the control.\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {LfbArrayWidgetComponent} from '../lfb-array-widget/lfb-array-widget.component';\nimport {TableComponent} from '../table/table.component';\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport {fhir} from '../../../fhir';\nimport {RestrictionOperatorService} from '../../../services/restriction-operator.service';\nimport {AcceptChange} from '../restrictions-operator/restrictions-operator.component';\n\n/**\n * Restrictions are based on table component.\n * Combines maxLength field which is part of standard FHIR with SDC extensions.\n */\n@Component({\n selector: 'lfb-restrictions',\n templateUrl: '../table/table.component.html',\n styleUrls: ['../table/table.component.css'],\n providers: [RestrictionOperatorService] // A service for this instance of component.\n})\nexport class RestrictionsComponent extends TableComponent implements OnInit {\n\n // Map display strings and urls to restrictions.\n static optionsDef = {\n maxLength: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/maxLength',\n display: 'Maximum length'\n },\n minLength: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/minLength',\n display: 'Minimum length'\n },\n regex: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/regex',\n display: 'Regex pattern'\n },\n minValue: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/minValue',\n display: 'Minimum value'\n },\n maxValue: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/maxValue',\n display: 'Maximum value'\n },\n maxSize: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/maxSize',\n display: 'Maximum size'\n },\n mimeType: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/mimeType',\n display: 'Mime type'\n }\n };\n\n static stringOptions = RestrictionsComponent.getOptions(['maxLength', 'minLength', 'regex']);\n static numberOptions = RestrictionsComponent.getOptions(['maxValue', 'minValue', 'maxLength', 'minLength']);\n static attachOptions = RestrictionsComponent.getOptions(['maxSize', 'mimeType']);\n\n static typeToOptions = {\n decimal: RestrictionsComponent.numberOptions,\n integer: RestrictionsComponent.numberOptions,\n date: RestrictionsComponent.numberOptions,\n dateTime: RestrictionsComponent.numberOptions,\n time: RestrictionsComponent.numberOptions,\n string: RestrictionsComponent.stringOptions,\n text: RestrictionsComponent.stringOptions,\n attachment: RestrictionsComponent.attachOptions\n };\n\n // Map extension urls to options.\n static extUrlToOptionsMap = ((): any => {\n const ret = {};\n Object.keys(RestrictionsComponent.optionsDef).forEach((k) => {\n const url = RestrictionsComponent.optionsDef[k].extUrl;\n ret[url] = k;\n })\n return ret;\n })();\n\n // maxLength = -1;\n appliedOptions = [];\n dataType: string;\n\n selectedOptions: Set<string> = new Set<string>();\n\n /**\n * Get list of optionsDef objects for list of options.\n * @param optKeys - List of keys as defined in this.optionsDef.\n */\n static getOptions(optKeys: string[]) {\n return optKeys.map((opt) => {\n return RestrictionsComponent.optionsDef[opt];\n });\n }\n\n constructor(private restrictionOperatorService: RestrictionOperatorService) {\n super();\n }\n\n\n ngOnInit(): void {\n super.ngOnInit();\n /*\n let sub = this.formProperty.root.getProperty('maxLength').valueChanges.subscribe((maxLength) => {\n this.maxLength = (maxLength > 0 || maxLength > 0) ? maxLength : -1;\n });\n this.subscriptions.push(sub);\n */\n const sub = this.formProperty.root.getProperty('type').valueChanges.subscribe((type) => {\n this.dataType = type;\n this.appliedOptions = RestrictionsComponent.typeToOptions[type];\n });\n this.subscriptions.push(sub);\n const restrictions = this.getRestrictions(this.formProperty.root, this.appliedOptions);\n this.updateSelectedOptions(restrictions); // Cache the selections.\n\n this.formProperty.setValue(restrictions, true);\n this.formProperty.valueChanges.subscribe((restrictionsArray) => {\n this.updateSelectedOptions(restrictionsArray); // Reset cache.\n const extensionProperty = this.formProperty.root.getProperty('extension');\n this.updateRelevantExtensions(extensionProperty.value, restrictionsArray);\n extensionProperty.setValue(extensionProperty.value, true);\n });\n\n // Watch changes in operator to reject unwanted selections.\n this.restrictionOperatorService.subscribe((change: AcceptChange) => {\n if(this.selectedOptions.has(change.newValue)) {\n change.reject = true;\n }\n });\n }\n\n /**\n * Reset cache of selections\n * @param restrictions - Array of restriction objects.\n */\n updateSelectedOptions(restrictions ) {\n this.selectedOptions.clear();\n restrictions?.forEach((res) => {\n this.selectedOptions.add(res.operator);\n });\n }\n\n /**\n * Get list of restrictions reading the fhir extensions and maxLength.\n * @param rootProperty - Root form property which represents an item level data.\n * @param appliedOptions - The options that are applicable to selected data type.\n */\n getRestrictions(rootProperty: PropertyGroup, appliedOptions: any []): any [] {\n const ret = [];\n this.selectedOptions.clear();\n const maxLength = rootProperty.getProperty('maxLength').value;\n if(maxLength) {\n ret.push({operator: 'maxLength', value: `${maxLength}`});\n this.selectedOptions.add('maxLength');\n }\n const extensions = rootProperty.getProperty('extension').value;\n const extensionsFound = extensions?.filter((el) => {\n return !!appliedOptions?.find((opt) => {\n return opt.extUrl === el.url;\n });\n });\n extensionsFound?.forEach((ext) => {\n const restriction = this.getRestrictionValue(ext);\n if(restriction) {\n ret.push(restriction);\n this.selectedOptions.add(restriction.operator);\n }\n });\n return ret;\n }\n\n /**\n * Return object with relevant extension url as key and extension's index in array as value\n * @param extensions - Full array of fhir extensions belonging to the item.\n */\n getRelevantExtensionIndices(extensions: fhir.Extension []): any [] {\n let ret: any = null;\n Object.keys(RestrictionsComponent.optionsDef).forEach((opt) => {\n const index = extensions?.findIndex((ext) => {\n return ext.url === RestrictionsComponent.optionsDef[opt].extUrl;\n });\n if(index >= 0) {\n if(!ret) {\n ret = {};\n }\n ret[extensions[index].url] = index;\n }\n });\n return ret;\n }\n\n /**\n * Max length is not part of extensions.\n * @param maxLength - String representation of input value.\n */\n updateMaxLength(maxLength: string) {\n const val: number = maxLength ? parseInt(maxLength, 0) : null;\n this.formProperty.root.getProperty('maxLength').setValue(val);\n }\n\n /**\n * Update item level fhir extensions array with relevant restrictions.\n * @param extensions - Array of item level extensions.\n * @param restrictions - Arary of internally defined restriction objects.\n */\n updateRelevantExtensions(extensions: fhir.Extension [], restrictions: any []) {\n const indices = this.getRelevantExtensionIndices(extensions);\n Object.keys(RestrictionsComponent.optionsDef).forEach((opt) => {\n let ext: fhir.Extension;\n const extUrl = RestrictionsComponent.optionsDef[opt].extUrl;\n const restriction = restrictions.find((r) => r.operator === opt);\n if(opt === 'maxLength') {\n this.updateMaxLength(restriction?.value || null);\n }\n else if(restriction?.value) {\n if(indices && indices[extUrl] !== undefined && indices[extUrl] !== null) {\n // Update\n ext = extensions[indices[extUrl]];\n for(const key in ext) {\n if(/^value/.test(key)) delete ext[key];\n }\n }\n else {\n // new\n ext = {url: extUrl};\n extensions.push(ext);\n }\n const fieldInfo = this.getValueFieldName(opt, this.dataType);\n ext[fieldInfo.fieldName] = this.getValue(restriction.value, fieldInfo.fieldType);\n }\n else if(indices && indices[extUrl] !== undefined && indices[extUrl] !== null) {\n // delete\n extensions.splice(indices[extUrl], 1);\n }\n });\n }\n\n /**\n * Convert to string representation of value to appropriate value\n * @param value - String representation of value.\n * @param valueType - fhir data type of the value.\n */\n getValue(value: string, valueType: string): number | string {\n let ret: number | string = value;\n switch (valueType) {\n case 'integer':\n ret = parseInt(value, 10);\n break;\n case 'decimal':\n ret = parseFloat(value);\n break;\n case 'date':\n case 'dateTime':\n case 'time':\n ret = (new Date(value)).toISOString();\n }\n return ret;\n }\n\n\n /**\n * Given a fhir extension, convert to restriction object.\n * @param ext - fhir extension representing a restriction.\n */\n getRestrictionValue(ext: fhir.Extension) {\n let ret = null;\n const operator = RestrictionsComponent.extUrlToOptionsMap[ext.url];\n const valField = this.getValueFieldName(operator, this.dataType);\n if(valField.fieldName) {\n ret = {operator, value: `${ext[valField.fieldName]}`};\n }\n return ret;\n }\n\n\n /**\n * Return value[x] field based on option and data type.\n * @param option - 'maxLength'|'minLength'|'maxSize'|'minValue'|'maxValue'|'mimeType'|'regex'\n * @param type - one of the fhir data types.\n */\n getValueFieldName(option: string, type: string): any {\n const ret = {fieldName: '', fieldType: ''};\n switch (option) {\n case 'minLength':\n case 'maxSize':\n ret.fieldName = 'valueInteger';\n ret.fieldType = 'integer';\n break;\n\n case 'regex':\n ret.fieldName = 'valueString';\n ret.fieldType = 'string';\n break;\n\n case 'mimeType':\n ret.fieldName = 'valueCode';\n ret.fieldType = 'string';\n break;\n\n case 'minValue':\n case 'maxValue':\n ret.fieldName = type ? 'value' + type.charAt(0).toUpperCase() + type.slice(1) : '';\n ret.fieldType = type;\n break;\n }\n return ret;\n }\n}\n","/**\n * General purpose message dialog box.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nexport enum MessageType {\n INFO,\n WARNING,\n DANGER\n}\n\n@Component({\n selector: 'lfb-message-dlg',\n template: `\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{title}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"activeModal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <p>{{message}}</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"activeModal.close('Close click')\">Close</button>\n </div>\n `,\n styles: [\n ]\n})\nexport class MessageDlgComponent {\n\n\n @Input()\n title: string;\n @Input()\n message: string;\n @Input()\n type?: MessageType = MessageType.INFO;\n @Input()\n options?: any;\n\n\n constructor(public activeModal: NgbActiveModal) {}\n}\n\n\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"],"sourceRoot":"webpack:///"}
|
|
1
|
+
{"version":3,"sources":["./src/app/ngx-schema-form/ngx-schema-form.component.ts","./src/app/lib/widgets/label/label.component.ts","./src/app/base-page/base-page.component.ts","./src/app/base-page/base-page.component.html","./src/app/lib/widgets/integer/integer.component.ts","./src/app/lib/widgets/enablewhen-answer-coding/enablewhen-answer-coding.component.ts","./src/app/lib/pipes/app-json.pipe.ts","./src/app/lib/widgets/fhir-search-dlg/fhir-search-dlg.component.ts","./src/app/lib/widgets/fhir-search-dlg/fhir-search-dlg.component.html","./src/app/lib/widgets/grid.component/grid.component.ts","./src/app/lib/widgets/checkbox.component/checkbox.component.ts","./src/environments/environment.ts","./src/app/lib/widgets/table/table.component.ts","./src/app/lib/widgets/table/table.component.html","./src/app/lib/widgets/initial/initial.component.ts","./src/app/sf-form-wrapper/sf-form-wrapper.component.ts","./src/app/sf-form-wrapper/sf-form-wrapper.component.html","./src/app/lib/widgets/units/units.component.ts","./src/app/services/login.service.ts","./src/app/form-fields/form-fields.component.ts","./src/app/lib/widgets/string/string.component.ts","./src/app/lib/widgets/string/string.component.html","./src/app/lib/widgets/enable-operator/enable-operator.component.ts","./src/app/lib/widgets/side-label-checkbox/side-label-checkbox.component.ts","./src/app/lib/widgets/title/title.component.ts","./src/app/lib/widgets/fhir-servers-dlg/fhir-servers-dlg.component.ts","./src/app/lib/widgets/total-score/total-score.component.ts","./src/app/lib/widgets/form-element/form-element.component.ts","./src/app/services/fhir.service.ts","./src/app/lib/widgets/lfb-array-widget/lfb-array-widget.component.ts","./src/app/lib/widgets/string-with-css/string-with-css.component.ts","./src/app/lib/widgets/string-with-css/string-with-css.component.html","./src/app/fetch.service.ts","./src/app/lib/widgets/extensions/extensions.component.ts","./src/app/lib/widgets/left-label-form-group/left-label-form-group.component.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/lib/widgets/label-radio/label-radio.component.ts","./src/app/lib/widgets/help-text/help-text.component.ts","./src/app/lib/widgets/restrictions-operator/restrictions-operator.component.ts","./src/app/lib/widgets/restrictions-operator/restrictions-operator.component.html","./src/app/app.module.ts","./src/app/item/item.component.ts","./src/app/item/item.component.html","./src/app/lib/widgets/boolean-controlled/boolean-controlled.component.ts","./src/app/lib/lforms-widget-registry.ts","./src/app/lib/widgets/loinc-notice/loinc-notice.component.ts","./src/app/lib/widgets/loinc-notice/loinc-notice.component.html","./src/app/services/restriction-operator.service.ts","./src/app/header/header.component.ts","./src/app/lib/widgets/auto-complete/auto-complete.component.ts","./src/app/footer/footer.component.ts","./src/app/lib/util.ts","./src/app/lib/widgets/select/select.component.ts","./src/app/lib/widgets/select/select.component.html","./src/app/lib/widgets/element-chooser/element-chooser.component.ts","./src/app/lib/widgets/enable-behavior/enable-behavior.component.ts","./src/app/lib/widgets/radio/radio.component.ts","./src/app/lib/widgets/boolean-radio/boolean-radio.component.ts","./src/app/lib/widgets/boolean-radio/boolean-radio.component.html","./src/app/services/form.service.ts","./src/app/services/tree.service.ts","./src/app/lib/widgets/row-layout/row-layout.component.ts","./src/app/lib/widgets/item-json-editor/item-json-editor.component.ts","./src/app/shared-object.service.ts","./src/app/lib/widgets/enable-when-source/enable-when-source.component.ts","./src/app/lib/widgets/fhir-export-dlg/fhir-export-dlg.component.ts","./src/app/lib/widgets/fhir-export-dlg/fhir-export-dlg.component.html","./src/app/app-routing.module.ts","./src/app/lib/widgets/preview-dlg/preview-dlg.component.ts","./src/app/lib/widgets/preview-dlg/preview-dlg.component.html","./src/app/lib/widgets/type/type.component.ts","./src/app/lib/widgets/answer-option/answer-option.component.ts","./src/app/lib/widgets/lfb-control-widget/lfb-control-widget.component.ts","./src/app/lib/widgets/restrictions/restrictions.component.ts","./src/app/lib/widgets/message-dlg/message-dlg.component.ts","./src/main.ts","./$_lazy_route_resource lazy namespace object"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["/**\n * Handle layout and editing of item level fields\n */\nimport {\n AfterViewInit, ChangeDetectorRef,\n Component, ComponentFactoryResolver,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild, ViewContainerRef\n} from '@angular/core';\nimport {SharedObjectService} from '../shared-object.service';\nimport {Binding, Validator} from '@lhncbc/ngx-schema-form';\nimport {LinkIdCollection} from '../item/item.component';\nimport {FormService} from '../services/form.service';\nimport {SfFormWrapperComponent} from '../sf-form-wrapper/sf-form-wrapper.component';\n\n@Component({\n selector: 'lfb-ngx-schema-form',\n template: `\n <div class=\"container\">\n <ng-container #viewContainer></ng-container>\n <!--\n <sf-form #itemForm *ngIf=\"model\" [schema]=\"mySchema\"\n [(model)]=\"model\"\n [bindings]=\"myFieldBindings\"\n ></sf-form>\n -->\n </div>\n `,\n styles: [`\n\n pre {\n padding: 02em;\n border: solid 1px black;\n background: #eee;\n }\n\n /* label */\n :host /deep/ .formHelp {\n display: block;\n font-size: 0.7em;\n }\n\n :host /deep/ sf-form-element > div {\n margin-top: 1em;\n margin-bottom: 1em;\n }\n\n :host ::ng-deep .form-control {\n height: calc(1.0em + .75rem + 2px);\n padding: 0 3px 0 3px;\n }\n\n :host /deep/ fieldset {\n border: 0;\n }\n\n .title {\n margin-top: 10px;\n font-size: 20px;\n font-weight: bold;\n }\n\n `]\n})\nexport class NgxSchemaFormComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n static ID = 0;\n _id = ++NgxSchemaFormComponent.ID;\n // @ViewChild('itemForm') itemForm: FormComponent;\n @ViewChild('viewContainer', {read: ViewContainerRef}) containerRef: ViewContainerRef;\n\n mySchema: any = {properties: {}};\n myTestSchema: any;\n @Output()\n setLinkId = new EventEmitter();\n @Input()\n model: any;\n @Output()\n modelChange = new EventEmitter<any>();\n @Output()\n valueChange = new EventEmitter<any>();\n @Input()\n linkIdCollection = new LinkIdCollection();\n\n /**\n * Setup form validators\n * TODO - link id is hidden for time being.\n */\n myValidators: { [path: string]: Validator } = {\n // Should have a value and should not exist in the form.\n '/linkId': (value, property, form) => {\n if (value.trim().length === 0 || this.linkIdCollection.hasLinkId(value)) {\n return [{\n linkId: {expectedValue: 'Unique linkId in the form'}\n }];\n }\n return null;\n }\n };\n\n /**\n * Field bindings\n */\n myFieldBindings: { [path: string]: Binding } = {\n /*\n '/linkId': {\n change: (event, formProperty: FormProperty) => {\n if (!formProperty.value && this.node) {\n formProperty.setValue(this.node.id, true);\n }\n if (formProperty.valid) {\n this.setLinkId.emit(formProperty.value);\n }\n }\n }\n */\n };\n\n constructor(private modelService: SharedObjectService, private formService: FormService,\n private cfr: ComponentFactoryResolver, private cd: ChangeDetectorRef) {\n this.mySchema = formService.getItemSchema();\n }\n\n /**\n * Merge schema and layout jsons\n */\n ngOnInit() {\n this.mySchema = this.formService.getItemSchema();\n }\n\n ngAfterViewInit() {\n // this.resetForm(this.model);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes.model) {\n this.resetForm(changes.model.currentValue);\n }\n /*\n if(changes.model.currentValue !== changes.model.previousValue) {\n if(this.itemForm) {\n this.itemForm.reset();\n this.itemForm.writeValue(changes.model.currentValue);\n }\n }\n */\n }\n\n\n /**\n * The model is changed, emit the event.\n * @param value - Event value.\n */\n updateValue(value: any) {\n this.valueChange.emit(value);\n this.modelService.currentItem = value;\n }\n\n updateModel(model: any) {\n this.modelChange.emit(model);\n this.modelService.currentItem = model;\n }\n\n /**\n * Reset ngx- form with new model\n */\n resetForm(model: any): void {\n if(!this.containerRef) {\n return;\n }\n\n const resolver = this.cfr.resolveComponentFactory(SfFormWrapperComponent);\n this.containerRef.clear();\n const componentRef = this.containerRef.createComponent(resolver);\n this.model = model;\n componentRef.instance.model = this.model;\n componentRef.instance.valueChange.subscribe((value) => {\n this.updateValue(value);\n })\n }\n\n ngOnDestroy() {\n }\n\n}\n","/**\n * A label with help icon and associated help message.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\n\n@Component({\n selector: 'lfb-label',\n template: `\n <label *ngIf=\"title\" [attr.for]=\"for\" class=\"col-form-label align-self-center p-0\"\n >{{title}} <button *ngIf=\"helpMessage\" class=\"btn border-0 p-0 b-0\" [matTooltip]=\"helpMessage\"\n [attr.aria-label]=\"'Tooltip for '+title+': '+helpMessage\" aria-hidden=\"true\"\n ><fa-icon [icon]=\"helpIcon\"></fa-icon></button\n ></label>\n `,\n styles: [`\n label {\n margin-bottom: 0;\n }\n `]\n})\nexport class LabelComponent implements OnInit {\n\n // Input properties\n @Input()\n title: string;\n @Input()\n helpMessage: string;\n @Input()\n helpIcon = faInfoCircle;\n @Input()\n for: string;\n @Input()\n labelWidthClass: string;\n constructor() { }\n\n ngOnInit() {\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output, TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {FormService} from '../services/form.service';\nimport {fhir} from '../fhir';\nimport {BehaviorSubject, from, Observable, of, Subject} from 'rxjs';\nimport {catchError, debounceTime, distinctUntilChanged, finalize, mergeMap, switchMap, takeUntil} from 'rxjs/operators';\nimport {MessageType} from '../lib/widgets/message-dlg/message-dlg.component';\nimport {NgbActiveModal, NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {AutoCompleteResult} from '../lib/widgets/auto-complete/auto-complete.component';\nimport {FetchService} from '../fetch.service';\nimport {FhirService} from '../services/fhir.service';\nimport {FhirServersDlgComponent} from '../lib/widgets/fhir-servers-dlg/fhir-servers-dlg.component';\nimport {FhirSearchDlgComponent} from '../lib/widgets/fhir-search-dlg/fhir-search-dlg.component';\nimport { PreviewDlgComponent } from '../lib/widgets/preview-dlg/preview-dlg.component';\nimport {AppJsonPipe} from '../lib/pipes/app-json.pipe';\nimport {Util} from '../lib/util';\nimport {MatTabChangeEvent} from '@angular/material/tabs';\nimport {MatDialog} from '@angular/material/dialog';\nimport {FhirExportDlgComponent} from '../lib/widgets/fhir-export-dlg/fhir-export-dlg.component';\nimport {LoincNoticeComponent} from '../lib/widgets/loinc-notice/loinc-notice.component';\nimport {SharedObjectService} from '../shared-object.service';\ndeclare var LForms: any;\n\ntype ExportType = 'CREATE' | 'UPDATE';\n\n@Component({\n selector: 'lfb-base-page',\n templateUrl: './base-page.component.html',\n styleUrls: ['./base-page.component.css'],\n providers: [NgbActiveModal]\n})\nexport class BasePageComponent implements OnDestroy {\n\n private unsubscribe = new Subject<void>()\n @Input()\n guidingStep = 'home'; // 'choose-start', 'home', 'item-editor'\n startOption = 'scratch';\n importOption = '';\n editMode = 'fresh';\n questionnaire: fhir.Questionnaire = null;\n formFields: fhir.Questionnaire = null;\n formValue: fhir.Questionnaire;\n formSubject = new Subject<fhir.Questionnaire>();\n @Output()\n state = new EventEmitter<string>();\n objectUrl: any;\n acResult: AutoCompleteResult = null;\n @ViewChild('lhcFormPreview') previewEl: ElementRef;\n @ViewChild('fileInput') fileInputEl: ElementRef;\n @ViewChild('loincSearchDlg') loincSearchDlg: TemplateRef<any>;\n selectedPreviewTab = 0;\n acceptTermsOfUse = false;\n\n\n constructor(private formService: FormService,\n private modelService: SharedObjectService,\n private modalService: NgbModal,\n private activeModal: NgbActiveModal,\n private dataSrv: FetchService,\n public fhirService: FhirService,\n private appJsonPipe: AppJsonPipe,\n private cdr: ChangeDetectorRef,\n private matDlg: MatDialog\n ) {\n const isAutoSaved = this.formService.isAutoSaved();\n if(isAutoSaved) {\n this.startOption = 'from_autosave';\n }\n\n this.acceptTermsOfUse = sessionStorage.acceptTermsOfUse === 'true';\n if(!this.acceptTermsOfUse) {\n this.modalService.open(\n LoincNoticeComponent,{size: 'lg', centered: true, keyboard: false, backdrop: 'static'}\n ).result\n .then(\n (result) => {\n this.acceptTermsOfUse = result;\n sessionStorage.acceptTermsOfUse = result;\n },\n (reason) => {\n console.error(reason);\n });\n }\n\n this.formSubject.asObservable().pipe(\n debounceTime(500),\n switchMap((fhirQ) => {\n this.formService.autoSaveForm(fhirQ);\n return of(fhirQ);\n }),\n takeUntil(this.unsubscribe)\n ).subscribe(() => {\n console.log('Saved');\n });\n\n formService.guidingStep$.subscribe((step) => {this.guidingStep = step;});\n }\n\n\n /**\n * Convert the questionnaire to lfData.\n */\n get lfData(): any {\n const q = Util.convertToQuestionnaireJSON(this.formValue);\n return LForms.Util.convertFHIRQuestionnaireToLForms(q, 'R4');\n }\n\n\n /**\n * Notify changes to form.\n * @param form - form object, a.k.a questionnaire\n */\n notifyChange(form) {\n this.formSubject.next(form);\n }\n\n\n /**\n * Handle value changes in form-fields component.\n * @param event - Emits questionnaire (Form level copy)\n */\n formFieldsChanged(event) {\n const itemList = this.formValue.item;\n Util.mirrorObject(this.formValue, Util.convertToQuestionnaireJSON(event));\n this.formValue.item = itemList;\n this.notifyChange(this.formValue);\n this.modelService.questionnaire = this.questionnaire;\n }\n\n\n /**\n * Handle value changes in item-component.\n * @param itemList - Emits item list. Form level fields should be untouched.\n */\n itemComponentChanged(itemList) {\n this.formValue.item = itemList;\n this.notifyChange(this.formValue);\n }\n\n\n /**\n * Set questionnaire.\n * Make\n * @param questionnaire - Input FHIR questionnaire\n */\n setQuestionnaire(questionnaire) {\n this.questionnaire = questionnaire;\n this.formValue = Object.assign({}, questionnaire);\n this.formFields = Object.assign({}, questionnaire);\n delete this.formFields.item;\n this.notifyChange(this.formValue);\n }\n\n\n /**\n * Switch guiding step\n * @param step - a\n */\n setStep(step: string) {\n this.formService.setGuidingStep(step);\n this.formService.autoSave('state', step);\n }\n\n /**\n * Check auto save status\n */\n isAutoSaved() {\n return this.formService.isAutoSaved();\n }\n /**\n * Handle continue button.\n */\n onContinue() {\n // TODO - Rethink the logic.\n if(this.startOption === 'from_autosave') {\n this.formService.setGuidingStep(this.formService.autoLoad('state'));\n this.setQuestionnaire(this.formService.autoLoadForm());\n }\n else if (this.startOption === 'scratch') {\n this.setStep('fl-editor');\n this.setQuestionnaire(Util.createDefaultForm());\n }\n else if (this.importOption === 'local') {\n this.fileInputEl.nativeElement.click();\n }\n else if (this.importOption === 'fhirServer') {\n this.fetchFormFromFHIRServer$().subscribe((form) => {\n if(form) {\n this.setQuestionnaire(form);\n this.setStep('fl-editor');\n }\n });\n }\n else if (this.importOption === 'loinc') {\n this.modalService.open(this.loincSearchDlg).result.then((qId)=>{\n this.dataSrv.getFormData(qId).subscribe((data) => {\n this.setQuestionnaire(data);\n this.setStep('fl-editor');\n });\n }, ()=>{});\n }\n }\n\n /**\n * Remove subscriptions before removing the component.\n */\n ngOnDestroy() {\n this.unsubscribe.next();\n }\n\n/////////////////////////////////////////\n\n /**\n * Set guiding to step to switch the page.\n */\n /*\n setGuidingStep(step: string) {\n // this.guidingStep = step;\n this.formService.autoSave('state', step);\n }\n*/\n /**\n * Select form from local file system. Copied from current form builder.\n *\n * @param event - Object having selected file from the browser file dialog.\n */\n onFileSelected(event) {\n const fileReader = new FileReader();\n const selectedFile = event.target.files[0];\n event.target.value = null; //\n fileReader.onload = () => {\n try {\n this.setQuestionnaire(this.formService.parseQuestionnaire(fileReader.result as string));\n setTimeout(() => {\n this.setStep('fl-editor');\n });\n }\n catch (e) {\n this.showError(e);\n }\n }\n fileReader.onerror = (error) => {\n this.showError('Error occurred reading file: ${selectedFile.name}');\n }\n fileReader.readAsText(selectedFile, 'UTF-8');\n }\n\n showError(error: any) {\n this.formService.showMessage('Error', error.message || error, MessageType.DANGER);\n }\n\n /**\n * View preview of lforms widget and questionnaire json\n */\n showPreviewDlg() {\n this.matDlg.open(PreviewDlgComponent, {data: {questionnaire: Util.convertToQuestionnaireJSON(this.formValue), lfData: this.lfData}, width: '80vw', height: '80vh'});\n }\n\n /**\n * Format result item for auto complete.\n * @param acResult - Result item.\n */\n formatter(acResult: any) {\n return acResult.id + ': ' + acResult.title;\n }\n\n /**\n * Save form to local file, mostly copied from current form builder.\n */\n saveToFile() {\n const content = this.toString(this.questionnaire);\n const blob = new Blob([content], {type: 'application/json;charset=utf-8'});\n const formName = this.questionnaire.title;\n const formShortName = this.questionnaire.name;\n const exportFileName = formShortName ? formShortName.replace(/\\s/g, '-') : (formName ? formName.replace(/\\s/g, '-') : 'form');\n\n // Use hidden anchor to do file download.\n // const downloadLink: HTMLAnchorElement = document.createElement('a');\n const downloadLink = document.getElementById('exportAnchor');\n const urlFactory = (window.URL || window.webkitURL);\n if(this.objectUrl != null) {\n // First release any resources on existing object url\n urlFactory.revokeObjectURL(this.objectUrl);\n this.objectUrl = null;\n }\n this.objectUrl = urlFactory.createObjectURL(blob);\n downloadLink.setAttribute('href', this.objectUrl);\n downloadLink.setAttribute('download', exportFileName + '.R4.json');\n // Avoid using downloadLink.click(), which will display down content in the browser.\n downloadLink.dispatchEvent(new MouseEvent('click'));\n }\n\n /**\n * Call back to auto complete search.\n * @param term - Search term\n */\n acSearch = (term$: Observable<string>): Observable<AutoCompleteResult []> => {\n return term$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n switchMap((term) => term.length < 2 ? [] : this.dataSrv.searchForms(term)));\n }\n\n /**\n * Get questionnaire by id\n * @param questionnaireId - Id of the questionnaire to fetch. If empty, return empty questionnaire.\n */\n getForm(questionnaireId: string) {\n if (!questionnaireId) {\n this.setQuestionnaire(Util.createDefaultForm());\n } else {\n this.dataSrv.getFormData(questionnaireId).subscribe((data) => {\n this.setQuestionnaire(data);\n this.acResult = null;\n });\n }\n }\n\n /**\n * Change button text based on context\n */\n createButtonLabel(): string {\n let ret = 'Create questions';\n if(this.questionnaire && this.questionnaire.item && this.questionnaire.item.length > 0) {\n ret = 'Edit questions'\n }\n return ret;\n }\n\n\n /**\n * Close menu handler.\n */\n newStart() {\n localStorage.clear();\n this.setQuestionnaire(Util.createDefaultForm());\n this.setStep('home');\n }\n\n /**\n * Import FHIR server menu handler.\n */\n importFromFHIRServer() {\n this.modalService.open(FhirServersDlgComponent, {size: 'lg'}).result.then((result) => {\n if(result) { // Server picked, invoke search dialog.\n this.modalService.open(FhirSearchDlgComponent, {size: 'lg', scrollable: true}).result.then((selected) => {\n if(selected !== false) { // Questionnaire picked, get the item from the server.\n this.fhirService.read(selected).subscribe((resp)=>{\n this.setQuestionnaire(resp);\n });\n }\n });\n }\n }, (reason) => {\n console.error(reason);\n });\n }\n\n /**\n * Fetch form from FHIR server invoking dialogs for server selection and search for forms.\n */\n fetchFormFromFHIRServer$(): Observable<any> {\n return from(this.modalService.open(FhirServersDlgComponent, {size: 'lg'}).result)\n .pipe(switchMap((result) => {\n if(result) {\n return from(this.modalService.open(FhirSearchDlgComponent, {size: 'lg', scrollable: true}).result);\n }\n else {\n return of(false);\n }\n }), switchMap((selected) => {\n if(selected !== false) {\n return this.fhirService.read(selected);\n }\n else {\n return of(null);\n }\n }));\n }\n\n\n /**\n * Create/Update questionnaire on the FHIR server.\n * @param type - 'CREATE' | 'UPDATE'\n */\n exportToServer(type: ExportType) {\n let observer: Observable<any>;\n if(type === 'CREATE') {\n this.modalService.open(FhirServersDlgComponent, {size: 'lg'}).result.then((result) => {\n if (result) { // Server picked, invoke search dialog.\n observer = this.fhirService.create(Util.convertToQuestionnaireJSON(this.formValue), null);\n this.handleServerResponse(observer);\n }\n }, (reason) => {\n console.error(reason);\n });\n }\n else if(type === 'UPDATE') {\n observer = this.fhirService.update(Util.convertToQuestionnaireJSON(this.formValue), null);\n this.handleServerResponse(observer);\n }\n }\n\n\n /**\n * Handle FHIR server response after create/update.\n * @param serverResponse - An observable yielding fhir resource.\n */\n handleServerResponse(serverResponse: Observable<fhir.Resource>) {\n serverResponse.pipe(\n catchError((err) => {\n console.error(err.message);\n return of(err);\n }),\n finalize(() => {\n })\n )\n .subscribe((response) => {\n const modalRef = this.modalService.open(FhirExportDlgComponent, {size: 'lg', scrollable: true});\n if(response instanceof Error) {\n modalRef.componentInstance.error = response;\n modalRef.componentInstance.serverResponse = null;\n }\n else {\n this.setQuestionnaire(response);\n modalRef.componentInstance.error = null;\n modalRef.componentInstance.serverResponse = response;\n }\n });\n }\n\n\n /**\n * Transform questionnaire model to FHIR compliant questionnaire in string format.\n *\n * The questionnaire, although mostly a FHIR questionnaire object, has some internal fields for processing.\n * Get a fully compliant FHIR questionnaire in string format.\n *\n * @param questionnaire - Questionnaire model is in the form builder.\n */\n toString(questionnaire: fhir.Questionnaire): string {\n return this.appJsonPipe.transform(questionnaire);\n }\n\n}\n","<div class=\"page-defaults container bg-white\">\n <div *ngIf=\"acceptTermsOfUse === true\">\n <lfb-header id=\"fixedTop\" [isFirebaseEnabled]=\"false\"></lfb-header>\n <div id=\"resizableMiddle\">\n\n <nav class=\"navbar navbar-light bg-light\" aria-label=\"Menu bar\" *ngIf=\"guidingStep !== 'home'\">\n <div class=\"btn-group-sm mr-2\" ngbDropdown role=\"group\" aria-label=\"Export menu\">\n <button class=\"btn btn-sm btn-secondary\" ngbDropdownToggle>\n Export\n </button>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"saveToFile()\">Export to file ...</button>\n <button ngbDropdownItem (click)=\"exportToServer('CREATE')\">Create a new questionnaire on a FHIR server...</button>\n <button ngbDropdownItem\n (click)=\"exportToServer('UPDATE')\"\n [disabled]=\"!questionnaire || !questionnaire.id\"\n >Update the questionnaire on the server ({{fhirService.getFhirServer().endpoint}})</button>\n </div>\n </div>\n <div class=\"btn-group-sm mr-2\" ngbDropdown role=\"group\" aria-label=\"Import menu\">\n <button class=\"btn btn-sm btn-secondary\" ngbDropdownToggle>\n Import\n </button>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"fileInput.click()\">Import from file...</button>\n <!-- <button ngbDropdownItem (click)=\"importLoinc()\">Import a LOINC form...</button> -->\n <button ngbDropdownItem (click)=\"importFromFHIRServer()\">Import from a FHIR server...</button>\n <div class=\"dropdown-divider\"></div>\n <form class=\"px-4 py-3\">\n <label>Import LOINC forms:</label>\n <input type=\"text\"\n placeholder=\"Search LOINC\"\n [(ngModel)]=\"acResult\"\n [ngModelOptions]=\"{standalone: true}\"\n [ngbTypeahead]=\"acSearch\"\n (selectItem)=\"getForm($event.item.id)\"\n [resultFormatter]=\"formatter\"\n [inputFormatter]=\"formatter\"\n [editable]='false' />\n </form>\n </div>\n </div>\n\n <div class=\"btn-group-sm mr-2\" role=\"group\" aria-label=\"Edit form attributes\">\n <button type=\"button\" class=\"btn btn-secondary\"\n (click)=\"setStep('fl-editor')\" [attr.disabled]=\"guidingStep === 'fl-editor' ? '' : null\">Edit form attributes</button>\n </div>\n <div class=\"btn-group-sm mr-2 ml-auto\" role=\"group\" aria-label=\"Preview\">\n <button type=\"button\" class=\"btn btn-secondary\"\n (click)=\"showPreviewDlg()\">Preview</button>\n </div>\n <div class=\"btn-group-sm mr-2\" role=\"group\" aria-label=\"Close editor\">\n <button type=\"button\" class=\"btn btn-secondary \" (click)=\"newStart()\">Close</button>\n </div>\n </nav>\n <a target=\"_self\" id=\"exportAnchor\" class=\"d-none\">Export</a>\n <input #fileInput class=\"d-none\" type=\"file\" (change)=\"onFileSelected($event)\">\n\n <ng-container *ngIf=\"guidingStep === 'home'\">\n <ng-container *ngTemplateOutlet=\"home\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"guidingStep === 'fl-editor'\">\n <ng-container *ngTemplateOutlet=\"formLevelFields\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"guidingStep === 'item-editor'\">\n <ng-container *ngTemplateOutlet=\"itemLevelFields\"></ng-container>\n </ng-container>\n </div>\n <lfb-footer id=\"fixedBottom\"></lfb-footer>\n </div>\n</div>\n\n<ng-template #home>\n <div class=\"card-body container\">\n <div>\n <p class=\"lead\">How do you want to create your form?</p>\n <ul class=\"list-unstyled ml-5\" ngbRadioGroup [(ngModel)]=\"startOption\" >\n <li *ngIf=\"isAutoSaved()\">\n <label ngbButtonLabel>\n <input ngbButton value=\"from_autosave\" type=\"radio\">\n Would you like to start from where you left off before?\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"scratch\" type=\"radio\">\n Start from scratch\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"existing\" type=\"radio\">\n Start with existing form\n </label>\n <ul *ngIf=\"startOption === 'existing'\" class=\"list-unstyled ml-5\" ngbRadioGroup [(ngModel)]=\"importOption\" >\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"local\" type=\"radio\">\n Import from local file\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"fhirServer\" type=\"radio\">\n Import from FHIR server\n </label>\n </li>\n <li>\n <label ngbButtonLabel>\n <input ngbButton value=\"loinc\" type=\"radio\">\n Import from LOINC\n </label>\n </li>\n </ul>\n </li>\n </ul>\n <hr>\n <div class=\"btn-toolbar float-right mb-2\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\n <div class=\"btn-group\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn-sm btn-primary\" (click)=\"onContinue()\">Continue</button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #formLevelFields>\n <lfb-form-fields (state)=\"setStep($event)\"\n [questionnaire]=\"formFields\"\n (questionnaireChange)=\"formFieldsChanged($event)\"\n [questionsButtonLabel]=\"createButtonLabel()\"\n ></lfb-form-fields>\n</ng-template>\n\n<ng-template #itemLevelFields>\n <button type=\"button\"\n class=\"ml-2 font-weight-bold btn btn-link\"\n (click)=\"setStep('fl-editor')\"\n >{{questionnaire.title}}</button>\n <lfb-item-component [questionnaire]=\"questionnaire\"\n (itemChange)=\"itemComponentChanged($event)\"\n ></lfb-item-component>\n</ng-template>\n\n<ng-template #previewDlg let-modal>\n <div class=\"modal-header btn-primary\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">Preview of Questionnaire</h4>\n <button type=\"button\" class=\"close btn-primary text-white\" aria-label=\"Close\" (click)=\"modal.close('Cross click')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngTemplateOutlet=\"previewDlgBody\" class=\"mt-2\"></div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close('Close click')\">Close</button>\n </div>\n</ng-template>\n\n<ng-template #previewDlgBody>\n <mat-tab-group [(selectedIndex)]=\"selectedPreviewTab\">\n <mat-tab label=\"View Rendered Form\">\n <ng-template matTabContent>\n <wc-lhc-form [lfData]=\"lfData\"></wc-lhc-form>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"View Questionnaire JSON\">\n <ng-template matTabContent>\n <pre class=\"fix-pre\">{{ formValue | json }}</pre>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</ng-template>\n\n<ng-template #loincSearchDlg let-modal>\n <div class=\"modal-header btn-primary\">\n <h4 class=\"modal-title\" id=\"loinc-search-dlg-title\">Import a LOINC Form</h4>\n <button type=\"button\" class=\"close btn-primary text-white\" aria-label=\"Close\" (click)=\"modal.dismiss()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <form class=\"px-4 py-3\">\n <label for=\"loincSearch\"><span class=\"p-1\">Search LOINC form:</span></label>\n <input type=\"text\"\n id=\"loincSearch\"\n placeholder=\"Search LOINC forms\"\n [ngbTypeahead]=\"acSearch\"\n (selectItem)=\"modal.close($event.item.id)\"\n [resultFormatter]=\"formatter\"\n [inputFormatter]=\"formatter\"\n [editable]='false' />\n </form>\n </div>\n</ng-template>\n\n","/**\n * Customize layout of integer component from ngx-schema-form.\n */\nimport { Component } from '@angular/core';\n\nimport {IntegerWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-integer-widget',\n template: `\n <input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"\n ></lfb-label>\n\t <input [attr.readonly]=\"schema.readOnly?true:null\" [attr.name]=\"name\"\n\t [attr.id]=\"id\"\n\t class=\"text-widget integer-widget form-control {{controlWidthClass}}\" [formControl]=\"control\"\n\t [attr.type]=\"'number'\" [attr.min]=\"schema.minimum\" [attr.max]=\"schema.maximum\"\n\t [attr.placeholder]=\"schema.placeholder\"\n\t [attr.maxLength]=\"schema.maxLength || null\"\n [attr.minLength]=\"schema.minLength || null\">\n </div>\n </ng-template>\n `,\n styles: [``]\n})\nexport class IntegerComponent extends LfbControlWidgetComponent {\n}\n","/**\n * Answer coding component for enableWhen. The component is used for answer type choice for\n * selecting codes to satisfy a condition.\n */\nimport {AfterViewInit, Component, OnInit} from '@angular/core';\nimport {ObjectWidget} from '@lhncbc/ngx-schema-form';\nimport {FormService} from '../../../services/form.service';\n\n@Component({\n selector: 'lfb-enablewhen-answer-coding',\n template: `\n <div class=\"widget form-group form-group-sm\">\n <select [formControl]=\"control\"\n [attr.name]=\"name\" [attr.id]=\"id\"\n class=\"form-control\"\n (change)=\"onChange($event)\"\n >\n <ng-container>\n <option *ngFor=\"let option of answerOption\" [ngValue]=\"option.valueCoding\"\n >{{option.valueCoding.display}} ({{option.valueCoding.code}})</option>\n </ng-container>\n </select>\n </div>\n `,\n styles: [\n ]\n})\nexport class EnablewhenAnswerCodingComponent extends ObjectWidget implements AfterViewInit {\n\n answerOption: any[] = [];\n\n /**\n * Invoke super constructor.\n *\n * @param formService\n */\n constructor(private formService: FormService) {\n super();\n }\n\n /**\n * Component initialization.\n */\n ngAfterViewInit(): void {\n // Setup two binding between property value and control value.\n this.control.valueChanges.subscribe((value) => {\n this.formProperty.setValue(value, false);\n });\n\n this.formProperty.valueChanges.subscribe((newValue) => {\n const currentValue = this.control.value;\n if (currentValue.display !== newValue.display || currentValue.code !== newValue.code) {\n this.control.setValue(newValue, {emitEvent: false});\n }\n });\n\n // Listen to question value changes.\n this.formProperty.searchProperty('question').valueChanges.subscribe((source) => {\n this.answerOption = [];\n if (!source || !source.data) {\n return;\n }\n const answerType = this.formProperty.searchProperty('__$answerType').value;\n\n if (answerType === 'choice' || answerType === 'open-choice') {\n const sourceNode = this.formService.getTreeNodeByLinkId(source.data.linkId);\n this.answerOption =\n (sourceNode && sourceNode.data && sourceNode.data.answerOption)\n ? sourceNode.data.answerOption : [];\n }\n });\n }\n\n\n /**\n *\n * @param event\n */\n onChange(event): void {\n console.log('answer code selected: ' + event);\n }\n}\n","/**\n * Special case pipe to convert questionnaire object to json string.\n * Ignore functions and __$* keys. __$* are local fields, which should be ignored\n * when translating to form definitions.\n * In a special case, handles enableWhen.question, which may refer to\n * ITreeNode. ITreeNode should translate to its linkId.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport {Util} from '../util';\n\n@Pipe({\n name: 'appJson'\n})\nexport class AppJsonPipe implements PipeTransform {\n\n /**\n * Filter transformation.\n *\n * @param value - JSON object\n */\n transform(value: any): string {\n return JSON.stringify(Util.convertToQuestionnaireJSON(value), null, 2);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {FhirService, FHIRServer} from '../../../services/fhir.service';\nimport {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\nimport { fhir } from 'src/app/fhir';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {delay, map, switchMap, tap} from 'rxjs/operators';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\n// Search related inputs on the page.\ninterface State {\n searchTerm: string;\n searchField: SearchField;\n fhirServer: FHIRServer;\n}\n\ninterface SearchField {\n field: string,\n display: string,\n searchFieldPlaceholder: string\n}\n@Component({\n selector: 'lfb-fhir-search-dlg',\n styles: [`\n .result-item:hover {\n background-color: lightgrey;\n }\n\n .bs-like-control {\n border-color: lightgrey;\n border-radius: .2rem;\n color: #495057;\n font-size: 0.875rem;\n }\n `\n ],\n templateUrl: 'fhir-search-dlg.component.html'\n})\nexport class FhirSearchDlgComponent implements OnInit {\n\n infoIcon = faInfoCircle;\n private _loading$ = new BehaviorSubject<boolean>(false);\n private _search$ = new Subject<void>();\n private _bundle$ = new BehaviorSubject<fhir.Bundle>(null);\n\n inputTerm = '';\n resultsOffset = 0; // To calculate serial number of the results across pages\n pageSize = 20;\n nextUrl: fhir.uri = null;\n prevUrl: fhir.uri = null;\n total: number = undefined;\n questionnaires: fhir.Questionnaire [];\n\n /**\n * Define a structure to associate fhir search field, its modifiers, display and search input field placeholder.\n */\n searchFieldList: SearchField [] = [\n {field: '_content', display: 'Any text field', searchFieldPlaceholder: 'Search any text field'},\n {field: 'code', display: 'Item code', searchFieldPlaceholder: 'Search item code'},\n {field: 'title:contains', display: 'Form title only', searchFieldPlaceholder: 'Search form title'},\n {field: 'name:contains', display: 'Form name only', searchFieldPlaceholder: 'Search form name'}\n ];\n\n /**\n * Define a structure to associate search parameters on the page.\n * @private\n */\n private _state: State = {\n searchTerm: '',\n searchField: this.searchFieldList[0],\n fhirServer: this.fhirService.getFhirServer()\n };\n\n constructor(public fhirService: FhirService, private activeModal: NgbActiveModal) {\n // Set up search pipe line\n this._search$.pipe(\n tap(() => this._loading$.next(true)),\n switchMap(() => this._search()),\n tap(() => this._loading$.next(false))\n ).subscribe((bundle) => {\n this.total = undefined; // Reset total before processing bundle\n this._bundle$.next(bundle);\n });\n\n // Set up bundle pipe line. Bundle could be invoked either by search or navigation.\n this.bundle$.pipe(map((bundle) => {\n this.questionnaires = null;\n if(!bundle) {\n return null; // Might happen when initializing _bundle$\n }\n if(bundle.total !== undefined) { // page bundles may not have total. The existing total is valid.\n this.total = bundle.total;\n }\n\n // Capture navigation urls.\n this.nextUrl = null;\n this.prevUrl = null;\n if(bundle.link && bundle.link && bundle.link.length > 0) {\n bundle.link.forEach((lnk) => {\n switch (lnk.relation) {\n case 'self':\n this.resultsOffset = this._getOffset(lnk.url);\n break;\n case 'next':\n this.nextUrl = lnk.url;\n break;\n case 'prev':\n case 'previous':\n this.prevUrl = lnk.url;\n break;\n }\n });\n }\n\n if(!bundle.entry) {\n return null;\n }\n return bundle.entry.map((e) => {\n // Trim down resource\n const res = e.resource;\n const ret = {};\n ['id', 'title', 'name', 'publisher', 'date', 'status', 'code'].forEach((f) => {\n if(res[f]) {\n ret[f] = res[f];\n }\n });\n return ret;\n });\n })\n ).subscribe((resources: fhir.Questionnaire []) => {\n this.questionnaires = resources;\n });\n }\n\n // Getters and setters\n get loading$() { return this._loading$.asObservable(); }\n get bundle$() { return this._bundle$.asObservable(); }\n get searchTerm() { return this._state.searchTerm; }\n set searchTerm(searchTerm: string) { this._set({searchTerm}); }\n get searchField() { return this._state.searchField; }\n set searchField(searchField: SearchField) { this._set({searchField});}\n get selectedFHIRServer() {return this._state.fhirServer;}\n set selectedFHIRServer(fhirServer: FHIRServer) {\n this.fhirService.setFhirServer(fhirServer);\n this._set({fhirServer});\n }\n\n /**\n * Set partial properties of search state.\n * @param patch - Partial state fields.\n * @private\n */\n private _set(patch: Partial<State>) {\n Object.assign(this._state, patch);\n // this._search$.next();\n }\n\n /**\n * Invoke search with inputs\n * @private\n */\n private _search(): Observable<fhir.Bundle> {\n return this.fhirService.search(this.searchTerm, this.searchField.field, {_count: this.pageSize});\n }\n\n ngOnInit(): void {\n }\n\n /**\n * Search button handler.\n */\n searchInput() {\n this.searchTerm = this.inputTerm;\n this._search$.next();\n }\n\n /**\n * Next page button handler\n */\n nextPage(): void {\n this.getBundleByUrl(this.nextUrl);\n }\n\n /**\n * Previous page button handler\n */\n prevPage(): void {\n this.getBundleByUrl(this.prevUrl);\n }\n\n /**\n * Get resource bundle using url, typically by navigation links.\n * @param url\n */\n getBundleByUrl(url: fhir.uri): void {\n this.fhirService.getBundleByUrl(url).subscribe((bundle) => {\n this._bundle$.next(bundle);\n });\n }\n\n /**\n * Get offset of results page. Used to calculate serial numbers on the page.\n * @param url\n */\n _getOffset(url: fhir.uri): number {\n let ret = '';\n if(url) {\n ret = new URL(url).searchParams.get('_getpagesoffset');\n }\n return ret ? parseInt(ret, 10) : 0;\n }\n\n /**\n * Handle dialog dismiss\n * @param reason\n */\n dismiss(reason: any): void {\n this.activeModal.dismiss(reason);\n }\n\n /**\n * Handle dialog close\n * @param value\n */\n close(value: any): void {\n this.activeModal.close(value);\n }\n\n /**\n * Get FHIR server list.\n */\n getServerList(): FHIRServer [] {\n return this.fhirService.fhirServerList;\n }\n}\n","<div class=\"modal-header bg-primary\">\n <h4 class=\"modal-title text-white\">Import a questionnaire</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"close(false)\">\n <span class=\"text-white\" aria-hidden=\"true\">×</span>\n </button>\n</div>\n<!--\nPut search in modal header and results in modal body.\nIt helps to keep the search visible while results are scrolling\n-->\n<div class=\"modal-header\"><ng-container *ngTemplateOutlet=\"search\"></ng-container></div>\n<ng-container *ngTemplateOutlet=\"results\"></ng-container>\n\n<!-- Search template -->\n<ng-template #search>\n <form class=\"container\">\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"input-group input-group-sm\">\n <input type=\"text\" class=\"form-control\"\n [(ngModel)]=\"inputTerm\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"searchField.searchFieldPlaceholder\"\n aria-label=\"Search term\"\n aria-describedby=\"filterHelp\">\n <button\n class=\"align-self-baseline btn btn-sm btn-primary input-group-append\"\n type=\"button\"\n id=\"button-addon2\"\n (click)=\"searchInput()\"\n [disabled]=\"loading$ | async\">\n <span *ngIf=\"loading$ | async\" class=\"spinner-border spinner-border-sm mr-2\" aria-hidden=\"true\" role=\"status\"></span>\n <span *ngIf=\"loading$ | async\">Loading...</span>\n <span *ngIf=\"(loading$ | async) === false\">Search</span>\n </button>\n <span class=\"ml-1 align-self-end\" ngbTooltip=\"Choose a search field and enter the search term. Choosing 'Any text field' implies searching '_content'. Please refer to FHIR REST API for details.\">\n <fa-icon [icon]=\"infoIcon\"></fa-icon>\n </span>\n </div>\n <!-- <small id=\"filterHelp\" class=\"form-text text-muted\">Enter a term to narrow down the result set.</small> -->\n </div>\n <div class=\"col form-group d-sm-inline-flex\">\n <label for=\"SelectFHIRServer1\" class=\"align-self-center mb-0 text-nowrap\">FHIR Server: </label>\n <select class=\"form-control form-control-sm\" id=\"SelectFHIRServer1\" [(ngModel)]=\"selectedFHIRServer\" [ngModelOptions]=\"{standalone: true}\">\n <option *ngFor=\"let server of getServerList()\" [ngValue]=\"server\">{{server.endpoint}}</option>\n </select>\n </div>\n </div>\n <div class=\"m-0 mb-2 row\">\n <label for=\"searchField1\" class=\"align-self-center mb-0 mr-2 text-nowrap\">Search by term occurring in: </label>\n <select class=\"form-control form-control-sm w-auto\" id=\"searchField1\" [(ngModel)]=\"searchField\" [ngModelOptions]=\"{standalone: true}\">\n <option *ngFor=\"let field of searchFieldList\" [ngValue]=\"field\">{{field.display}}</option>\n </select>\n </div>\n <div *ngIf=\"bundle$ | async\" class=\"row\">\n <div class=\"col\">\n <h4 *ngIf=\"total === 1\">{{ total }} resource was found.</h4>\n <h4 *ngIf=\"total > 1\">{{ total }} resources were found.</h4>\n <h4 *ngIf=\"total === 0\">No resources were found.</h4>\n <h4 *ngIf=\"total === undefined\">The following resources were found.</h4>\n </div>\n <div class=\"col-auto btn-group btn-group-sm btn-sm float-right\" role=\"group\" aria-label=\"Navigation\">\n <button type=\"button\" class=\"btn btn-outline-primary\" [disabled]=\"!prevUrl\" (click)=\"prevPage()\">Previous</button>\n <button type=\"button\" class=\"btn btn-outline-primary\" [disabled]=\"!nextUrl\" (click)=\"nextPage()\">Next</button>\n </div>\n </div>\n </form>\n</ng-template>\n\n<!-- Results template -->\n<ng-template #results>\n <ng-container *ngIf=\"questionnaires\">\n <div class=\"modal-body bg-light\">\n <div class=\"list-group list-group-flush\">\n <a href=\"#\" class=\"list-group-item list-group-item-action result-item\" *ngFor=\"let q of questionnaires; index as i\" (click)=\"close(q.id)\">\n <div class=\"row\">\n <div class=\"col-1\">{{resultsOffset + i + 1}}</div>\n <div class=\"col-11\">\n <div *ngIf=\"q.title || q.name\">{{q.title || q.name}}</div>\n <div *ngIf=\"(!q.title && !q.name)\">(No title or name assigned)</div>\n <div>ID: {{q.id}} <span *ngIf=\"q.version\">(version: {{q.version}})</span></div>\n <div *ngIf=\"q.publisher\">Publisher: {{q.publisher}}</div>\n <div *ngIf=\"q.date\">Last changed: {{q.date}}</div>\n </div>\n </div>\n </a>\n </div>\n </div>\n </ng-container>\n</ng-template>\n","import {Component} from '@angular/core';\nimport {ObjectWidget} from '@lhncbc/ngx-schema-form';\nimport {Util} from '../../util';\n\n\n/**\n *\n * A component to layout multiple fields in horizontal layout using bootstrap grid\n */\n@Component({\n selector: 'lfb-grid',\n template: `\n <div *ngFor=\"let fieldset of formProperty.schema.fieldsets\">\n <legend *ngIf=\"fieldset.title\">{{fieldset.title}}</legend>\n <span *ngIf=\"fieldset.description\" data-toggle=\"tooltip\" [title]=\"fieldset.description\" class=\"glyphicon glyphicon-info\" ></span>\n <div class=\"form-row\">\n <div [class]=\"gridClass(field)\" *ngFor=\"let field of getShowFields(fieldset)\">\n <sf-form-element [formProperty]=\"getShowFieldProperty(field)\"></sf-form-element>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .grid-border {\n border: lightgray 1px solid;\n }\n .grid-padding {\n padding: 0 5px 0 5px;\n }\n `]\n})\nexport class GridComponent extends ObjectWidget {\n\n /**\n * Get formProperty (refer to ngx-schema-form) of a showField (refer to assets/*layout.json).\n *\n * @param showField - Field object, see the assets/*-layout.json for the definition\n */\n getShowFieldProperty(showField) {\n const fieldId = typeof showField === 'string' ? showField : typeof showField === 'object' ? showField.field : null;\n const ret = this.formProperty.getProperty(fieldId);\n const schema = ret.schema;\n if (schema && !schema.title) {\n schema.title = Util.capitalize(fieldId);\n }\n return ret;\n }\n\n /**\n * Return bootstrap column class based on showField's definition.\n *\n * @param showField - Field to retrieve the class from.\n */\n gridClass(showField) {\n return showField && showField.col ? 'col-' + showField.col : 'col';\n }\n\n /**\n * Return show fields from fieldset. Fieldset and showFields are specified in layout json.\n *\n * @param fieldset - Field set can include hidden fields.\n */\n getShowFields(fieldset) {\n let ret = fieldset.showFields;\n ret = !ret ? fieldset.fields.map((e) => ({field: e})) : ret;\n ret = ret.filter((field) => {\n const propId = typeof field === 'string' ? field : typeof field === 'object' ? field.field : null;\n return Util.isVisible(this.formProperty, propId);\n });\n return ret;\n }\n\n /**\n * Get widget id.\n * @param showField - Property id or field definition in layout\n * @return widget id of the field.\n */\n getWidgetId(showField): string {\n const p = this.getShowFieldProperty(showField);\n let ret = null;\n if(p && p.schema && p.schema.widget && p.schema.widget.id) {\n ret = p.schema.widget.id;\n }\n return ret;\n }\n}\n","/**\n * Customize layout of checkbox from ngx-schema-form.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport {CheckboxWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-checkbox',\n template: `<div class=\"widget\">\n\t<div *ngIf=\"schema.type!='array'\" [attr.class]=\"'form-check '+lfbClass\">\n <input class=\"form-check-input\" [formControl]=\"control\" [attr.name]=\"name\"\n [attr.id]=\"id\" [indeterminate]=\"control.value !== false && control.value !== true ? true :null\"\n type=\"checkbox\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n <input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <label *ngIf=\"!nolabel && schema.title\" [attr.for]=\"id\" class=\"form-check-label control-label\">\n {{ schema.title }}\n <button *ngIf=\"schema.description\"\n class=\"btn border-0 m-0 p-0\"\n [attr.aria-label]=\"'Tooltip for '+schema.title+': '+schema.description\"\n aria-hidden=\"true\"\n [matTooltip]=\"schema.description\">\n <fa-icon [icon]=\"faInfo\"></fa-icon>\n </button>\n </label>\n\t</div>\n\t<ng-container *ngIf=\"schema.type==='array'\">\n\t\t<div *ngFor=\"let option of schema.items.oneOf\" class=\"checkbox\">\n\t\t\t<label class=\"horizontal control-label\">\n\t\t\t\t<input [attr.name]=\"name\"\n\t\t\t\t\tvalue=\"{{option.enum[0]}}\" type=\"checkbox\"\n\t\t\t\t\t[attr.disabled]=\"schema.readOnly ? '' : null\"\n\t\t\t\t\t(change)=\"onCheck($event.target)\"\n\t\t\t\t\t[attr.checked]=\"checked[option.enum[0]] ? true : null\"\n\t\t\t\t\t[attr.id]=\"id + '.' + option.enum[0]\"\n\t\t\t\t\t>\n\t\t\t\t{{option.description}}\n\t\t\t</label>\n\t\t</div>\n\t</ng-container>\n</div>`\n})\nexport class CheckboxComponent extends CheckboxWidget {\n @Input()\n nolabel = false;\n faInfo = faInfoCircle;\n @Input()\n lfbClass = 'text-center';\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","/**\n * Component to display array of object fields in a table format with field names at the top,\n * add button at the bottom, delete button for each row, label for the table at the left etc.\n *\n * It is optionally controlled by a boolean widget above the table.\n *\n * An optional selection column is provided to select rows with either radio buttons or checkboxes. For example,\n * It could be used as selection of rows for defaults in answer options table.\n * The checkbox selections are captured in an array of boolean values, while index of radio selection is captured\n * in an integer variable.\n */\n\nimport {AfterViewInit, Component, DoCheck, OnChanges, OnDestroy, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {ArrayWidget, FormProperty} from '@lhncbc/ngx-schema-form';\nimport {faPlusCircle} from '@fortawesome/free-solid-svg-icons';\nimport {faTrash} from '@fortawesome/free-solid-svg-icons';\nimport {faAngleDown} from '@fortawesome/free-solid-svg-icons';\nimport {faAngleRight} from '@fortawesome/free-solid-svg-icons';\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport {Util} from '../../util';\nimport {LfbArrayWidgetComponent} from '../lfb-array-widget/lfb-array-widget.component';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'lfb-table',\n templateUrl: './table.component.html', // Use separate files for possible reuse from a derived class\n styleUrls: ['./table.component.css']\n})\nexport class TableComponent extends LfbArrayWidgetComponent implements AfterViewInit, DoCheck, OnDestroy {\n\n static seqNum = 0;\n // Icons for buttons.\n faAdd = faPlusCircle;\n faRemove = faTrash;\n faRight = faAngleRight;\n faDown = faAngleDown;\n\n isCollapsed = false;\n addButtonLabel = 'Add'; // Default label\n noCollapseButton = false;\n noTableLabel = false;\n noHeader = false;\n // Flag to control hiding of add/remove buttons.\n singleItem = false;\n keyField = 'type'; // Key property of the object, based on which some fields could be hidden/shown.\n booleanControlledOption = false;\n booleanControlled = false;\n tableId = 'tableComponent'+TableComponent.seqNum++;\n\n // Row selection variables. Selections can be checkboxes or radio buttons.\n selectionRadio = -1; // Store array index of the radio button selection.\n selectionCheckbox: boolean [] = []; // Store an array of selected rows. Unselected elements are nulls or false.\n rowSelectionType = null; // 'radio' or 'checkbox'\n rowSelection = false; // If a row selection column is displayed. Default is no column.\n\n subscriptions: Subscription [] = [];\n /**\n * Make sure at least one row is present for zero length array?\n */\n ngDoCheck(): void {\n if(this.booleanControlled) {\n this.booleanControlledOption = this.booleanControlledOption || !Util.isEmpty(this.formProperty.value);\n }\n if (this.formProperty.properties.length === 0 && this.booleanControlledOption) {\n this.addItem();\n }\n /*\n // If a single radio item, change it checkbox.\n if (this.rowSelection && this.rowSelectionType === 'radio' && this.formProperty.value.length === 1) {\n this.rowSelectionType = 'checkbox';\n // If single radio was selected, transfer the selection to checkbox.\n if(this.selectionRadio === 0) {\n this.selectionCheckbox[0] = true;\n }\n }\n */\n }\n\n\n /**\n * Initialize\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n const widget = this.formProperty.schema.widget;\n this.addButtonLabel = widget && widget.addButtonLabel\n ? widget.addButtonLabel : 'Add';\n\n this.noTableLabel = !!widget.noTableLabel;\n this.noCollapseButton = !!widget.noCollapseButton;\n this.singleItem = !!widget.singleItem;\n this.booleanControlled = !!widget.booleanControlled;\n if(widget.booleanControlled) {\n this.booleanControlledOption = !!widget.booleanControlledOption;\n }\n\n this.booleanControlledOption = this.booleanControlledOption || !Util.isEmpty(this.formProperty.value);\n\n if(widget.rowSelection) {\n this.rowSelection = widget.rowSelection;\n this.rowSelectionType = widget.rowSelectionType || 'radio'; // Defaults to radio buttons.\n }\n this.selectionRadio = -1;\n this.selectionCheckbox = [];\n const singleItemEnableSource = this.formProperty.schema.widget ?\n this.formProperty.schema.widget.singleItemEnableSource : null;\n const multipleSelectionEnableSource = this.formProperty.schema.widget ?\n this.formProperty.schema.widget.multipleSelectionEnableSource : null;\n // Although intended to be source agnostic, it is mainly intended for 'repeats' field as source.\n // For example, when repeats is false, The initial field is only one row.\n // The requirement is:\n // . When source is false, hide add/remove buttons.\n // . Source if present and is true means show the buttons.\n // . Absence of source condition means the default behavior which is show the buttons.\n let prop = singleItemEnableSource ? this.formProperty.searchProperty(singleItemEnableSource) : null;\n let subsciption: Subscription;\n if (prop) {\n subsciption = prop.valueChanges.subscribe((newValue) => {\n if (newValue === false) {\n // If already has multiple items in the array, remove all items except first one.\n if (this.formProperty.properties.length > 1) {\n this.formProperty.properties = (this.formProperty.properties as FormProperty[]).slice(0, 1);\n this.formProperty.updateValueAndValidity(false, true);\n }\n }\n this.singleItem = !newValue;\n this.noCollapseButton = this.singleItem;\n if(this.rowSelection) {\n this.rowSelectionType = this.singleItem ? 'radio' : 'checkbox';\n }\n });\n this.subscriptions.push(subsciption);\n }\n\n prop = multipleSelectionEnableSource ? this.formProperty.searchProperty(multipleSelectionEnableSource) : null;\n if (prop) {\n subsciption = prop.valueChanges.subscribe((newValue) => {\n this.selectionRadio = -1;\n this.selectionCheckbox = [];\n if (newValue === false && this.rowSelection) {\n this.rowSelectionType = 'radio';\n }\n else if(newValue && this.rowSelection) {\n this.rowSelectionType = 'checkbox';\n }\n if(newValue === false && this.rowSelection && this.formProperty.properties.length === 1) {\n this.rowSelectionType = 'checkbox';\n }\n });\n this.subscriptions.push(subsciption);\n }\n\n const keyField = this.formProperty.findRoot().schema.widget.keyField;\n if (keyField) {\n this.keyField = keyField;\n }\n // Lookout for any changes to key field\n subsciption = this.formProperty.searchProperty(this.keyField).valueChanges.subscribe((newValue) => {\n const showFields = this.getShowFields();\n this.noHeader = showFields.some((f) => f.noHeader);\n });\n\n this.subscriptions.push(subsciption);\n }\n\n /**\n * Get fields to show.\n */\n getShowFields(): any [] {\n let ret: any [] = [];\n if (this.formProperty.schema.widget && this.formProperty.schema.widget.showFields) {\n const showFields = this.formProperty.schema.widget.showFields;\n ret = showFields.filter((field) => {\n return this.isVisible(field.field);\n });\n }\n return ret;\n }\n\n /**\n * Check visibility i.e. based on visibleIf of ngx-schema-form\n * @param propertyId - property id\n */\n isVisible(propertyId) {\n let ret = true;\n if (this.formProperty.properties.length > 0) {\n ret = Util.isVisible(this.formProperty.properties[0], propertyId);\n }\n return ret;\n }\n\n /**\n * Search for formProperty based on '.' delimited property ids.\n *\n * @param parentProperty -\n * @param propertyId -\n */\n getProperty(parentProperty: PropertyGroup, propertyId: string) {\n const path = propertyId.split('.');\n let p = parentProperty;\n for (const id of path) {\n p = p.getProperty(id);\n }\n return p;\n }\n\n /**\n * Get title of a field, given property id.\n * @param parentProperty -\n * @param propertyId -\n */\n getTitle(parentProperty, propertyId): string {\n const p = this.getProperty(parentProperty, propertyId);\n return p.schema && p.schema.title ? p.schema.title : Util.capitalize(propertyId);\n }\n\n\n /**\n * When clicking add button, prevent adding multiple empty rows. Alert the user with a popover message.\n * @param popoverRef - popover reference template.\n */\n addItemWithAlert(popoverRef) {\n const items = this.formProperty.properties as [];\n const lastItem = items.length ? items[items.length - 1] : null;\n if(!lastItem || !Util.isEmpty(lastItem.value)) { // If no lastItem or be not empty.\n this.addItem();\n setTimeout(() => {\n const props = this.formProperty.properties as FormProperty [];\n document.getElementById(this.getCanonicalPath(props,props.length - 1, 0)).focus();\n });\n }\n else {\n popoverRef.open();\n }\n }\n\n /**\n * Get canonical path of the control located in a cell in the table.\n *\n * @param arrayProperties - ArrayProperty of the table\n * @param row - Row index of the cell\n * @param col - Column index of the cell.\n */\n getCanonicalPath(arrayProperties, row, col) {\n return this.getPropertyFromTable(arrayProperties, row, col)?.canonicalPathNotation;\n }\n\n\n /**\n * Get form property of the control located in a table cell.\n * @param arrayProperties - ArrayProperty of the table.\n * @param row - Row index of the cell.\n * @param col - Col index of the cell.\n */\n getPropertyFromTable(arrayProperties, row, col): FormProperty {\n let prop = arrayProperties[row];\n const fieldPath = this.getShowFields()[col].field;\n fieldPath.split('.').forEach((field) => {\n prop = prop.getProperty(field);\n });\n return prop;\n }\n\n\n /**\n * Remove a given item, i.e. a row in the table.\n *\n * Before calling parent class api to remove the item, we need to do some house keeping with respect to table's\n * selection (radio/checkbox) indexes.\n *\n * @param formProperty - The row represented by its form property.\n */\n removeItem(formProperty) {\n const props = this.formProperty.properties as FormProperty [];\n\n const propIndex = props.findIndex((e) => e === formProperty);\n if(propIndex >= 0) {\n if(this.selectionCheckbox.length > 0) {\n this.selectionCheckbox.splice(propIndex, 1);\n }\n if(this.selectionRadio >= 0) {\n if(this.selectionRadio === propIndex) {\n this.selectionRadio = -1; // selected row is deleted. No selected radio button.\n }\n else if (this.selectionRadio > propIndex) {\n this.selectionRadio--;\n }\n }\n }\n super.removeItem(formProperty);\n }\n\n\n /**\n * Possible method for handling row selections for radio buttons.\n */\n radioSelection(event) {\n }\n\n\n /**\n * Possible method for handling row selections for checkboxes.\n */\n checkboxSelection(event) {\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => {\n s.unsubscribe();\n });\n }\n}\n","<ng-container *ngIf=\"booleanControlled\">\n <lfb-boolean-controlled\n [(bool)]=\"booleanControlledOption\"\n [controlWidthClass]=\"controlWidthClass\"\n [labelWidthClass]=\"labelWidthClass\"\n [label]=\"booleanLabel\"\n [labelPosition]=\"labelPosition\"\n [helpMessage]=\"schema.description\"\n ></lfb-boolean-controlled>\n</ng-container>\n\n<div *ngIf=\"!booleanControlled || booleanControlledOption\" class=\"widget form-group m-0\"\n [ngClass]=\n \"{'row': labelPosition === 'left'}\">\n <div [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\">\n <button *ngIf=\"!noCollapseButton\" href=\"#\" type=\"button\"\n [ngClass]=\"{'float-sm-right': labelPosition === 'left'}\"\n class=\"btn btn-default collapse-button\" (click)=\"isCollapsed = !isCollapsed\"\n [attr.aria-expanded]=\"!isCollapsed\" [attr.aria-controls]=\"tableId\">\n <fa-icon [icon]=\"isCollapsed ? faRight : faDown\" aria-hidden=\"true\"></fa-icon>\n </button>\n <lfb-label *ngIf=\"!noTableLabel\" [title]=\"schema.title\" [helpMessage]=\"schema.description\" [for]=\"id\"></lfb-label>\n </div>\n <div class=\"p-0 card {{controlWidthClass}}\" [attr.id]=\"tableId\">\n <table class=\"table table-borderless table-sm lfb-table\" *ngIf=\"formProperty.properties.length > 0\">\n <thead *ngIf=\"!noHeader\" class=\"thead-light\">\n <tr class=\"d-flex\">\n <th *ngFor=\"let showField of getShowFields()\" class=\"col-sm{{showField.col ? ('-'+showField.col) : ''}}\" scope=\"col\">\n <lfb-title\n [title]=\"showField.title || getTitle(formProperty.properties[0], showField.field)\"\n [helpMessage]=\"getProperty(formProperty.properties[0], showField.field).schema.description\"\n ></lfb-title>\n </th>\n <th *ngIf=\"rowSelectionType === 'radio' || rowSelectionType === 'checkbox'\" class=\"col-sm-2\">\n <lfb-title\n title=\"Default\"\n helpMessage=\"Pick a default item\"\n ></lfb-title>\n </th>\n <th *ngIf=\"!singleItem\" class=\"col-sm-1\"></th>\n </tr>\n </thead>\n <tbody [ngbCollapse]=\"isCollapsed\">\n <tr class=\"d-flex\" *ngFor=\"let itemProperty of formProperty.properties; index as ind\">\n <td *ngFor=\"let showField of getShowFields()\" class=\"col-sm{{showField.col ? ('-'+showField.col) : ''}}\">\n <lfb-form-element nolabel=\"true\" [formProperty]=\"getProperty(itemProperty, showField.field)\"></lfb-form-element>\n </td>\n <td *ngIf=\"rowSelectionType === 'radio'\" class=\"col-sm-2 text-center align-self-center\">\n <input type=\"radio\" [ngModel]=\"selectionRadio\" (ngModelChange)=\"radioSelection($event)\" [value]=\"ind\">\n </td>\n <td *ngIf=\"rowSelectionType === 'checkbox'\" class=\"col-sm-2 text-center align-self-center\">\n <input type=\"checkbox\" [(ngModel)]=\"selectionCheckbox[ind]\" (ngModelChange)=\"checkboxSelection($event)\">\n </td>\n <td [ngClass]=\"{'d-none': formProperty.properties.length === 1}\" class=\"col-sm-1 align-middle action-column\">\n <button (click)=\"removeItem(itemProperty)\" class=\"btn btn-default btn-link btn-sm array-remove-button\"\n [attr.disabled]=\"isRemoveButtonDisabled() ? '' : null\"\n *ngIf=\"!(schema.hasOwnProperty('minItems') &&\n schema.hasOwnProperty('maxItems') &&\n schema.minItems === schema.maxItems)\"\n matTooltip=\"Remove\" aria-label=\"Remove\"\n >\n <fa-icon [icon]=\"faRemove\" aria-hidden=\"true\"></fa-icon></button>\n </td>\n </tr>\n </tbody>\n </table>\n <button (click)=\"addItemWithAlert(alertPopover)\" class=\"btn-sm btn-light btn-link array-add-button\"\n [attr.disabled]=\"isAddButtonDisabled() ? '' : null\"\n *ngIf=\"!singleItem &&\n (!(schema.hasOwnProperty('minItems') && schema.hasOwnProperty('maxItems') && schema.minItems === schema.maxItems))\"\n [ngbPopover]=\"'Please fill in the above fields before adding a new item'\"\n #alertPopover=\"ngbPopover\" triggers=\"manual\" placement=\"bottom top\"\n popoverClass=\"\"\n >\n <fa-icon [icon]=\"faAdd\" aria-hidden=\"true\"></fa-icon> {{addButtonLabel}}\n </button>\n </div>\n</div>\n","/**\n * Handles FHIR initial field interaction in the item level form.\n */\nimport {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core';\nimport {TableComponent} from '../table/table.component';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'lfb-initial',\n templateUrl: './../table/table.component.html',\n styleUrls: ['./../table/table.component.css']\n})\nexport class InitialComponent extends TableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n constructor() {\n super();\n }\n}\n","import {\n AfterViewInit, ChangeDetectorRef,\n Component,\n ComponentFactoryResolver, EventEmitter, Input,\n OnChanges,\n OnDestroy,\n OnInit, Output,\n SimpleChanges, ViewChild, ViewContainerRef\n} from '@angular/core';\nimport {SharedObjectService} from '../shared-object.service';\nimport {FormService} from '../services/form.service';\nimport {LinkIdCollection} from '../item/item.component';\n\n@Component({\n selector: 'lfb-sf-form-wrapper',\n templateUrl: './sf-form-wrapper.component.html',\n styleUrls: ['./sf-form-wrapper.component.css']\n})\nexport class SfFormWrapperComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @ViewChild('itemForm', {read: ViewContainerRef}) itemForm: ViewContainerRef;\n\n mySchema: any = {properties: {}};\n myTestSchema: any;\n @Output()\n setLinkId = new EventEmitter();\n @Input()\n model: any;\n @Output()\n modelChange = new EventEmitter<any>();\n @Output()\n valueChange = new EventEmitter<any>();\n @Input()\n linkIdCollection = new LinkIdCollection();\n\n constructor(private modelService: SharedObjectService, private formService: FormService,\n private cfr: ComponentFactoryResolver, private cd: ChangeDetectorRef) {\n this.mySchema = formService.getItemSchema();\n }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit() {\n }\n\n ngOnChanges(changes: SimpleChanges) {\n console.log('sf-form-wrapper.ngOnChanges()');\n if(changes.model) {\n console.log('sf-form-wrapper.ngOnChanges(): model changed');\n this.model = changes.model.currentValue;\n }\n }\n\n updateValue(value) {\n this.valueChange.emit(value);\n this.modelChange.emit(this.model);\n }\n\n\n ngOnDestroy() {\n }\n}\n","<sf-form #itemForm *ngIf=\"model\" [schema]=\"mySchema\"\n [(model)]=\"model\" (onChange)=\"updateValue($event.value)\"\n></sf-form>\n\n","import {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core';\nimport {FormProperty} from '@lhncbc/ngx-schema-form';\nimport {fhir} from '../../../fhir';\nimport {ExtensionsComponent} from '../extensions/extensions.component';\nimport Def from 'autocomplete-lhc';\nimport {Subscription} from 'rxjs';\n\ninterface UnitExtension {\n url: string,\n valueCoding: {\n system?: string,\n code?: string,\n display?: string\n }\n}\n\n@Component({\n selector: 'lfb-units',\n template: `\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <div class=\"{{controlWidthClass}} p-0\">\n <input autocomplete=\"off\" type=\"text\" [attr.id]=\"elementId\" placeholder=\"Search for UCUM units or type your own\" class=\"form-control\" />\n </div>\n </div>\n `,\n styles: [`\n ::ng-deep .autocomp_selected {\n width: 100%;\n border: 0;\n padding: 0;\n }\n ::ng-deep .autocomp_selected ul {\n margin: 0;\n }\n `]\n})\nexport class UnitsComponent extends ExtensionsComponent implements OnInit, AfterViewInit, OnDestroy {\n\n static seqNum = 0;\n static questionUnitExtUrl = 'http://hl7.org/fhir/StructureDefinition/questionnaire-unit';\n static questionUnitOptionExtUrl = 'http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption';\n static ucumSystemUrl = 'http://unitsofmeasure.org'\n\n static unitsExtUrl = {\n quantity: UnitsComponent.questionUnitOptionExtUrl,\n decimal: UnitsComponent.questionUnitExtUrl,\n integer: UnitsComponent.questionUnitExtUrl\n }\n\n elementId: string;\n unitsSearchUrl = 'https://clinicaltables.nlm.nih.gov/api/ucum/v3/search?df=cs_code,name,guidance';\n options: any = {\n matchListValue: false,\n maxSelect: 1,\n suggestionMode: Def.Autocompleter.USE_STATISTICS,\n autocomp: true,\n tableFormat: true,\n colHeaders: [\n 'Unit',\n 'Name',\n 'Guidance'\n ],\n valueCols: [0]\n }\n\n autoComp: Def.Autocompleter;\n\n dataType = 'string';\n subscriptions: Subscription [];\n\n constructor() {\n super();\n this.elementId = 'units'+UnitsComponent.seqNum++;\n this.subscriptions = [];\n }\n\n ngAfterViewInit() {\n this.options.toolTip = this.schema.placeholder;\n // Watch item type to setup autocomplete\n let sub = this.formProperty.searchProperty('/type')\n .valueChanges.subscribe((changedValue) => {\n if(this.dataType !== changedValue) {\n if(changedValue === 'quantity') {\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.decimal);\n }\n else if(changedValue === 'decimal' || changedValue === 'integer') {\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.quantity);\n }\n else {\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.decimal);\n this.removeExtensionsByUrl(UnitsComponent.unitsExtUrl.quantity);\n }\n this.options.maxSelect = changedValue === 'quantity' ? '*' : 1;\n\n if(changedValue === 'quantity' || changedValue === 'decimal' || changedValue === 'integer') {\n this.resetAutocomplete();\n }\n this.dataType = changedValue;\n }\n });\n this.subscriptions.push(sub);\n\n sub = this.formProperty.valueChanges.subscribe(() => {\n this.resetAutocomplete();\n const initialUnits = (this.extensionsProp.properties as FormProperty[]).filter((p) => {\n return p.value.url === UnitsComponent.unitsExtUrl[this.dataType];\n });\n\n for (let i=0, len=initialUnits.length; i<len; ++i) {\n const dispVal = initialUnits[i].value.valueCoding.code || initialUnits[i].value.valueCoding.display;\n this.autoComp.storeSelectedItem(dispVal, dispVal);\n if(this.options.maxSelect === '*') {\n this.autoComp.addToSelectedArea(dispVal);\n }\n }\n });\n this.subscriptions.push(sub);\n\n // Setup selection handler\n Def.Autocompleter.Event.observeListSelections(this.elementId, (data) => {\n if(data.removed) {\n this.removeExt(UnitsComponent.unitsExtUrl[this.dataType], data.final_val); // We are displaying codes for the user.\n }\n else if(data.used_list) {\n const selectedUnit = data.list.find((unit) => {\n return unit[0] === data.item_code;\n });\n this.addExtension(this.createUnitExt(UnitsComponent.unitsExtUrl[this.dataType],\n UnitsComponent.ucumSystemUrl, data.item_code, selectedUnit[1]), 'valueCoding');\n }\n else {\n this.addExtension(this.createUnitExt(UnitsComponent.unitsExtUrl[this.dataType],\n null, data.final_val, data.final_val), 'valueCoding');\n }\n });\n\n }\n\n\n /**\n * Destroy autocomplete.\n * Make sure to reset value\n */\n destroyAutocomplete() {\n if(this.autoComp) {\n this.autoComp.setFieldVal('', false); // autoComp.destroy() does not clear the input box for single-select\n this.autoComp.destroy();\n this.autoComp = null;\n }\n }\n\n\n /**\n * Destroy and recreate autocomplete.\n */\n resetAutocomplete() {\n this.destroyAutocomplete();\n this.autoComp = new Def.Autocompleter.Search(this.elementId, this.unitsSearchUrl, this.options);\n }\n\n /**\n * Delete unit extension object from the extension array.\n * @param unit - FHIR extension represented as unit\n */\n deleteUnit(unit: fhir.Extension): any {\n this.removeExtension(unit);\n }\n\n\n /**\n * Create unit extension object\n *\n * @param unitsExtUrl - Extension uri for the associated unit.\n * @param system - System uri of the coding.\n * @param code - Code of the coding.\n * @param display - Display text of the coding.\n */\n createUnitExt(unitsExtUrl: fhir.uri, system: fhir.uri, code: string, display: string): fhir.Extension {\n const ret: UnitExtension =\n {\n url: unitsExtUrl,\n valueCoding: {code}\n };\n\n if(system) {\n ret.valueCoding.system = system;\n }\n if(display) {\n ret.valueCoding.display = display;\n }\n return ret;\n }\n\n\n /**\n * Clean up before destroy.\n * Destroy autocomplete, unsubscribe all subscriptions.\n */\n ngOnDestroy() {\n this.destroyAutocomplete();\n this.subscriptions.forEach((s) => {\n if(s) {\n s.unsubscribe();\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/**\n * Define user profile\n */\nexport interface UserProfile {\n displayName?: string;\n email?: string;\n}\n\n/**\n * Define login event\n */\nexport interface LoginEvent {\n userProfile: UserProfile;\n event: 'signedIn' | 'signedOut';\n}\n\n/**\n *\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoginService {\n\n service$ = new Subject<LoginEvent>();\n constructor() { }\n\n\n /**\n * Generate logout event.\n * @param userProfile\n */\n logOut(userProfile: UserProfile) {\n return this.service$.next(null);\n }\n\n /**\n * Let the listeners subscribe to the service.\n */\n service(): Observable<LoginEvent> {\n return this.service$.asObservable();\n }\n\n\n /**\n * Generate login event, after authentication.\n * TODO - authentication is not defined yet.\n */\n login() {\n return this.service$.next({event: 'signedIn', userProfile: {displayName: 'Test User', email: 'testUser@example.com'}});\n }\n}\n","/**\n * Handles editing of form level fields.\n */\nimport {\n Component,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {FetchService} from '../fetch.service';\nimport {AutoCompleteResult} from '../lib/widgets/auto-complete/auto-complete.component';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {FormService} from '../services/form.service';\nimport { fhir } from '../fhir';\nimport {Util} from '../lib/util';\n\n@Component({\n selector: 'lfb-form-fields',\n template: `\n <div class=\"card-body content\">\n <div *ngIf=\"true\">\n <h4 class=\"ml-2\">Form level attributes</h4>\n <p class=\"ml-4\">Enter basic information about the form.</p>\n <hr/>\n <div class=\"container\">\n <sf-form [schema]=\"qlSchema\"\n [(model)]=\"questionnaire\"\n (onChange)=\"valueChanged($event)\"\n ></sf-form>\n </div>\n <hr/>\n <div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\n <!-- <button type=\"button\" class=\"btn btn-sm btn-primary mt-4 mr-2\" (click)=\"allFields()\">Show advanced form fields</button> -->\n <button type=\"button\" class=\"btn btn-sm btn-primary mt-4 mr-2 ml-auto\" (click)=\"goToItemEditor()\">{{ questionsButtonLabel }}</button>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .content {\n padding: 0.5rem;\n }\n `]\n})\nexport class FormFieldsComponent {\n\n @Input()\n questionsButtonLabel = 'Create questions';\n @Input()\n questionnaire: fhir.Questionnaire;\n qlSchema: any = {properties: {}}; // Combines questionnaire schema with layout schema.\n notHidden = true;\n acResult: AutoCompleteResult = null;\n\n objectUrl: any;\n\n @Output()\n state = new EventEmitter<string>();\n @Output()\n questionnaireChange = new EventEmitter<fhir.Questionnaire>();\n\n constructor(\n private http: HttpClient,\n private dataSrv: FetchService,\n private modal: NgbModal,\n private formService: FormService\n ) {\n this.qlSchema = this.formService.getFormLevelSchema();\n }\n\n /**\n * Send message to base page to switch the view.\n */\n setGuidingStep(step: string) {\n this.formService.setGuidingStep(step);\n this.formService.autoSave('state', step); // Record change of state.\n }\n\n /**\n * Emit the change event.\n */\n valueChanged(event) {\n this.questionnaireChange.emit(Util.convertToQuestionnaireJSON(event.value));\n }\n\n\n /**\n * Json formatting\n * @param json - JSON object\n */\n stringify(json): string {\n return JSON.stringify(json, null, 2);\n }\n\n\n /**\n * TODO\n */\n allFields() {\n }\n\n\n /**\n * Button handler for edit questions\n */\n goToItemEditor(): void {\n this.setGuidingStep('item-editor');\n }\n}\n","/**\n * Component for general input box\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {ControlWidget, StringWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-string',\n templateUrl: './string.component.html'\n})\nexport class StringComponent extends LfbControlWidgetComponent {\n}\n","<input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n<ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <input [name]=\"name\" [readonly]=\"(schema.widget.id!=='color') && schema.readOnly\"\n class=\"textline-widget form-control {{controlWidthClass}}\"\n [attr.type]=\"!schema.widget.id || schema.widget.id === 'string' ? 'text' : schema.widget.id\"\n [attr.id]=\"id\" [formControl]=\"control\" [attr.placeholder]=\"schema.placeholder\"\n [attr.maxLength]=\"schema.maxLength || null\"\n [attr.minLength]=\"schema.minLength || null\"\n [required]=\"schema.isRequired\"\n [disabled]=\"schema.disabled\">\n </div>\n</ng-template>\n","/**\n * This component handles peculiar case of operator.\n *\n * The semantics of exists and not-exists are implied by 'exists' value in operator (this.formProperty)\n * and followed by true/false value in answerBoolean.\n *\n * The template here is not directly bound to control's form property.\n * It is updated programmatically in the class.\n */\n\nimport {Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {SelectComponent} from '../select/select.component';\n\n@Component({\n selector: 'lfb-enable-operator',\n template: `\n <select #mySelect\n [(ngModel)]=\"model\"\n (change)=\"onSelected()\"\n [attr.name]=\"name\" [attr.id]=\"id\"\n [disabled]=\"schema.readOnly\" class=\"form-control\">\n <ng-container>\n <option *ngFor=\"let option of options[answerType]\" [ngValue]=\"option.option\" >{{option.label}}</option>\n </ng-container>\n </select>\n `,\n styles: [\n ]\n})\nexport class EnableOperatorComponent extends SelectComponent implements OnInit {\n\n // All operators\n userOptions: any [] = [\n {option: 'exists', label: 'Not empty'},\n {option: 'notexists', label: 'Empty'},\n {option: '=', label: '='},\n {option: '!=', label: '!='},\n {option: '>', label: '>'},\n {option: '<', label: '<'},\n {option: '>=', label: '>='},\n {option: '<=', label: '<='}\n ];\n\n // A subset of operators for certain types\n userOptions2: any [] = this.userOptions.filter((e) => {\n return (\n e.option === 'exists' ||\n e.option === 'notexists' ||\n e.option === '=' ||\n e.option === '!='\n );\n });\n\n // Operators based on type.\n options = {\n decimal: this.userOptions,\n integer: this.userOptions,\n quantity: this.userOptions,\n date: this.userOptions,\n dateTime: this.userOptions,\n time: this.userOptions,\n string: this.userOptions,\n text: this.userOptions,\n url: this.userOptions2,\n boolean: this.userOptions2,\n choice: this.userOptions2,\n 'open-choice': this.userOptions2,\n attachment: this.userOptions2,\n reference: this.userOptions2\n };\n\n model: string;\n answerType: string;\n\n /**\n * Initialize\n */\n ngOnInit(): void {\n // this.formProperty represents operator from schema.\n const answerBool = this.formProperty.searchProperty('answerBoolean');\n answerBool.valueChanges.subscribe((val) => {\n if (val === true || val === false) {\n if (this.model === 'exists' || this.model === 'notexists') {\n this.formProperty.setValue('exists', true);\n }\n }\n });\n\n this.formProperty.valueChanges.subscribe((val) => {\n if (val === 'exists' && answerBool.value === false) {\n this.model = 'notexists';\n } else {\n this.model = val;\n }\n });\n\n this.formProperty.searchProperty('__$answerType').valueChanges.subscribe((val) => {\n this.answerType = val;\n });\n }\n\n /**\n * Update control property and its dependent answerBoolean based on user interaction with this widget.\n */\n onSelected(): void {\n if (this.model === 'exists') {\n // answerBoolean should be set to true.\n this.formProperty.searchProperty('answerBoolean').setValue(true, true);\n this.formProperty.setValue(this.model, true);\n } else if (this.model === 'notexists') {\n // There is no notexists. It is 'exists' with answerBoolean set to false\n this.formProperty.searchProperty('answerBoolean').setValue(false, true);\n this.formProperty.setValue('exists', true);\n } else {\n // All others cases\n this.formProperty.searchProperty('answerBoolean').reset(null, true);\n this.formProperty.setValue(this.model, true);\n }\n }\n}\n","/**\n * Customize checkbox\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {CheckboxWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-side-label-checkbox',\n template: `<div *ngIf=\"schema.type!='array'\" class=\"widget row m-0\">\n <label *ngIf=\"!nolabel && schema.title\" [attr.for]=\"id\" class=\"form-check-label {{labelWidthClass}}\">\n {{ schema.title }}\n <button *ngIf=\"schema.description\" class=\"btn border-0 m-0 p-0\"\n [attr.aria-label]=\"'Tooltip for '+schema.title+': '+schema.description\" aria-hidden=\"true\" [matTooltip]=\"schema.description\">\n <fa-icon [icon]=\"faInfo\"></fa-icon>\n </button>\n </label>\n <input [formControl]=\"control\" [attr.name]=\"name\"\n [attr.id]=\"id\" [indeterminate]=\"control.value !== false && control.value !== true ? true :null\"\n type=\"checkbox\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n </div>`,\n styles: [`\n input {\n margin-top: 0.5rem;\n }\n `]\n})\nexport class SideLabelCheckboxComponent extends CheckboxWidget implements OnInit {\n @Input()\n labelWidthClass: string;\n @Input()\n nolabel = false;\n faInfo = faInfoCircle;\n\n ngOnInit() {\n const widget = this.formProperty.schema.widget;\n // Input is priority followed by widget definition and default\n this.labelWidthClass =\n this.labelWidthClass\n ? this.labelWidthClass\n : (widget.labelWidthClass\n ? widget.labelWidthClass\n : 'col-sm');\n }\n\n}\n","/**\n * Component for creating a title for a control.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-title',\n template: `\n <span *ngIf=\"title\" class=\"horizontal control-label\">\n {{title}}\n <button *ngIf=\"helpMessage\" [attr.aria-label]=\"'Tooltip for '+title+': '+helpMessage\" class=\"btn border-0 m-0 p-0\" [matTooltip]=\"helpMessage\">\n <fa-icon [icon]=\"helpIcon\"></fa-icon>\n </button>\n </span>\n `\n})\nexport class TitleComponent implements OnInit {\n\n // Input properties\n @Input()\n title: string;\n @Input()\n helpMessage: string;\n @Input()\n helpIcon = faInfoCircle;\n constructor() { }\n\n ngOnInit() {\n }\n}\n","/**\n * Dialog to select FHIR server from the list of servers.\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {NgbActiveModal, NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {FhirService} from '../../../services/fhir.service';\n\n@Component({\n selector: 'lfb-fhir-servers-dlg',\n template: `\n <div class=\"modal-header bg-primary\">\n <h4 class=\"modal-title text-white\">Choose a FHIR server</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"dismiss()\">\n <span class=\"text-white\" aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\"></th>\n <th scope=\"col\">Fhir Server</th>\n <th scope=\"col\">Description</th>\n </tr>\n </thead>\n <tbody ngbRadioGroup name=\"fhirServer\" [(ngModel)]=\"selectedServer\">\n <tr *ngFor=\"let fhirServer of fhirServerList; index as i\">\n <th scope=\"row\">\n <label ngbButtonLabel><input ngbButton type=\"radio\" [value]=\"fhirServer\"></label>\n </th>\n <td>{{fhirServer.displayName}}</td>\n <td>{{ fhirServer.desc}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n <div class=\"modal-footer btn-group-sm\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"continue()\">Continue</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dismiss()\">Cancel</button>\n </div>\n `,\n styles: [\n ]\n})\nexport class FhirServersDlgComponent implements OnInit {\n\n @Input()\n fhirServerList: any [];\n selectedServer: any;\n\n constructor(private fhirService: FhirService,\n private modalService: NgbModal,\n private activeModal: NgbActiveModal) {\n this.fhirServerList = this.fhirService.fhirServerList;\n this.selectedServer = this.fhirService.getFhirServer();\n }\n\n ngOnInit(): void {\n }\n\n /**\n * Handler for continue button\n */\n continue() {\n this.fhirService.setFhirServer(this.selectedServer);\n this.activeModal.close(true);\n }\n\n /**\n * Handle dialog dismiss\n */\n dismiss() {\n this.activeModal.close(false);\n }\n}\n","/**\n * Handles total score input on the item level form\n */\nimport {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ExtensionsComponent} from '../extensions/extensions.component';\nimport {fhir} from '../../../fhir';\nimport {ArrayProperty, FormProperty} from '@lhncbc/ngx-schema-form';\nimport { RuleEditorService } from 'rule-editor';\nimport {SharedObjectService} from '../../../shared-object.service';\nimport {Subscription} from 'rxjs';\n\n\n@Component({\n selector: 'lfb-total-score',\n template: `\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0' : true, 'widget': true}\">\n <lfb-label [title]=\"schema.title\" [helpMessage]=\"schema.description\" [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"></lfb-label>\n\n <div ngbRadioGroup\n [attr.name]=\"name\"\n class=\"btn-group form-check-inline btn-group-sm btn-group-toggle\" [ngModel]=\"selected\" (ngModelChange)=\"onChange($event)\">\n <ng-container *ngFor=\"let option of ['No', 'Yes']\" class=\"radio\">\n <label ngbButtonLabel class=\"btn-outline-success m-0\">\n <input ngbButton [value]=\"option === 'Yes'\" type=\"radio\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n {{option}}\n </label>\n </ng-container>\n </div>\n </div>\n `,\n styles: [\n ]\n})\nexport class TotalScoreComponent extends ExtensionsComponent implements OnInit, OnDestroy {\n\n public static CALCULATED_EXPRESSION = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression';\n\n selected = false;\n questionnaire: fhir.Questionnaire;\n item: fhir.QuestionnaireItem;\n\n subscriptions: Subscription [] = [];\n\n constructor(private ruleEditorService: RuleEditorService, private modelService: SharedObjectService) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n const eligibleIndicator: FormProperty = this.formProperty.searchProperty('__$totalScoreItem');\n // TODO - Use rule-editor service to determine eligibility.\n const eligible = 'true';\n eligibleIndicator.setValue(eligible, true);\n let subscrption = eligibleIndicator.valueChanges.subscribe((value) => {\n if(value) {\n this.selected = this.isTotalScoreAssigned(this.extensionsProp.properties as FormProperty[]);\n }\n });\n this.subscriptions.push(subscrption);\n // Listen to changes in questionnaire and item.\n subscrption = this.modelService.currentItem$.subscribe((item) => {\n this.item = item;\n });\n this.subscriptions.push(subscrption);\n subscrption = this.modelService.questionnaire$.subscribe((q) => {\n this.questionnaire = q;\n });\n this.subscriptions.push(subscrption);\n\n }\n\n /**\n * Handle user interactions with this widget.\n *\n * @param selected - boolean from radio box.\n */\n onChange(selected) {\n if(selected) {\n this.ruleEditorService.addTotalScoreRule(this.questionnaire, this.item.linkId);\n }\n else {\n this.removeTotalScore();\n }\n }\n\n /**\n * TODO - Use rule-editor service to find if total score extension is present.\n * Check if extensions have total score included.\n * @param extensions - FHIR extension array to search for total score extension.\n * @return boolean\n */\n isTotalScoreAssigned(props: FormProperty []): boolean {\n if(!props || props.length === 0) {\n return false;\n }\n\n return props.some((p) => {\n return p.value.url === TotalScoreComponent.CALCULATED_EXPRESSION &&\n p.value.valueExpression.description.toLowerCase().isEqual('total score calculation');\n });\n }\n\n\n /**\n * Remove any existing total score extension.\n */\n removeTotalScore(): void {\n const props = this.extensionsProp.properties as FormProperty[];\n if(props && props.length > 0) {\n const i = props.findIndex((p) => {\n return p.value.url === TotalScoreComponent.CALCULATED_EXPRESSION && p.value.valueExpression.description.toLowerCase().isEqual('total score calculation')\n })\n if(i >= 0) {\n props.splice(i, 1);\n }\n }\n }\n\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => {\n s.unsubscribe();\n });\n }\n}\n","/**\n * Customize layout of form-element from ngx-schema-form\n */\nimport {Component, OnInit, OnChanges, Input, OnDestroy, SimpleChanges, DoCheck} from '@angular/core';\nimport { FormElementComponent} from '@lhncbc/ngx-schema-form';\nimport { Widget } from '@lhncbc/ngx-schema-form';\n\n\n@Component({\n selector: 'lfb-form-element',\n template: `\n <div *ngIf=\"formProperty.visible\"\n [class.has-error]=\"!formProperty.valid\"\n [class.has-success]=\"formProperty.valid\">\n <lfb-element-chooser\n [nolabel]=\"nolabel\"\n [layout]=\"layout\"\n [labelWidthClass]=\"labelWidthClass\"\n [booleanControlled]=\"booleanControlled\"\n [booleanLabel]=\"booleanLabel\"\n (widgetInstanciated)=\"onWidgetInstanciated($event)\"\n [widgetInfo]=\"formProperty.schema.widget\">\n </lfb-element-chooser>\n <sf-form-element-action *ngFor=\"let button of buttons\" [button]=\"button\" [formProperty]=\"formProperty\"></sf-form-element-action>\n </div>\n `,\n styles: []\n})\nexport class AppFormElementComponent extends FormElementComponent {\n static seqNum = 0;\n // Input properties, typically read from layout schema json.\n @Input()\n nolabel = false;\n @Input()\n layout: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n\n /*\n --- Used for debugging ----\nngOnChanges(changes: SimpleChanges): void {\n for (const prop in changes) {\n if (prop === 'formProperty') {\n console.log(\n`${prop}: ${changes[prop].previousValue ? changes[prop].previousValue.path : ''} /\n ${changes[prop].currentValue ? changes[prop].currentValue.path : ''} / ${changes[prop].firstChange}`);\n } else if (prop === 'control') {\n console.log(\n`${prop}: ${changes[prop].previousValue ? changes[prop].previousValue.valid : ''} /\n ${changes[prop].currentValue ? changes[prop].currentValue.valid : ''} / ${changes[prop].firstChange}`);\n } else {\n console.log(\n`${prop}: ${changes[prop].previousValue} / ${changes[prop].currentValue} / ${changes[prop].firstChange}`);\n }\n }\n }\n\n ngDoCheck(): void {\n console.log('Control of ' + this.formProperty.path + ': ');\n console.dir(this.control);\n }\n */\n\n /**\n * Override to add custom properties\n *\n * @param widget - Component widget\n */\n onWidgetInstanciated(widget: Widget<any>): void {\n super.onWidgetInstanciated(widget);\n this.setCanonicalId(); // Re-assign ids with canonical paths with proper indices.\n // @ts-ignore\n this.widget.nolabel = this.nolabel;\n // @ts-ignore\n this.widget.layout = this.layout;\n // @ts-ignore\n this.widget.labelWidthClass = this.labelWidthClass;\n // @ts-ignore\n this.widget.controlWidthClass = this.controlWidthClass;\n }\n\n\n /**\n * For some reason, the canonical path includes '*' for array items.\n * This method is to replace them with proper array indices. These ids are used for html element id\n */\n setCanonicalId(): void {\n // Parent path has proper index. Replace ancestral portion of the path with parent's path.\n const parentId = this.formProperty.parent?.canonicalPathNotation;\n if(parentId) {\n let id = parentId + this.formProperty.canonicalPathNotation.replace(/^.*\\./, '.');\n if (this.formProperty.root.rootName) {\n id = `${this.formProperty.root.rootName}:${id}`;\n }\n this.widget.name = id;\n this.widget.id = id;\n }\n }\n}\n","import {Injectable, Type} from '@angular/core';\nimport Client from 'fhirclient/lib/Client';\nimport * as FHIR from 'fhirclient';\nimport {defer, from, Observable} from 'rxjs';\nimport { fhir } from '../fhir';\nimport {fhirclient} from 'fhirclient/lib/types';\nimport Resource = fhirclient.FHIR.Resource;\n\nexport interface FHIRServer {\n // resultsOffset: number;\n // pageSize: number;\n id: number;\n displayName: string;\n endpoint: fhir.uri;\n desc: string;\n version: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FhirService {\n\n /*\n List of fhir servers.\n The server object definition:\n {\n id: // Helps to track the object in angular template binding\n displayName: // Name as seen by the user\n endpoint: // The url of the FHIR API endpoint to be assigned to\n // x-target-fhir-endpoint\n basicAuth: // Optional basic authentication string to be assigned to\n // x-target-fhir-server-authorization header.\n version: // FHIR version, ex: STU3, R4 ...\n }\n */\n fhirServerList: FHIRServer[] = [\n {\n id: 4,\n displayName: 'NLM HAPI FHIR Server - R4',\n endpoint: 'https://lforms-fhir.nlm.nih.gov/baseR4',\n desc: 'NLM Test Server (R4 Resources)',\n version: 'R4'\n },\n {\n id: 3,\n displayName: 'UHN HAPI Server - R4',\n endpoint: 'http://hapi.fhir.org/baseR4',\n desc: 'UHN Test Server (R4 Resources)',\n version: 'R4'\n },\n {\n id: 2,\n displayName: 'UHN HAPI Server - STU3',\n endpoint: 'http://hapi.fhir.org/baseDstu3',\n desc: 'UHN Test Server (STU3 Resources)',\n version: 'STU3'\n },\n {\n id: 1,\n displayName: 'clinFHIR R3',\n endpoint:'http://snapp.clinfhir.com:8081/baseDstu3',\n desc: 'Example Server',\n version: 'STU3'\n }\n ];\n/*\n config: any = {\n headers: {}\n };\n*/\n currentServer: FHIRServer;\n smartClient: Client;\n constructor() {\n // this.smartClient = FHIR.client(window.location.href+'fhir-api');\n this.setFhirServer(this.fhirServerList[0]);\n }\n\n /**\n * Creates a resource on the fhir server, assigning publisher field from the user profile.\n *\n * @param resource - A string representation of fhir resource or fhir resource object.\n * @param userProfile - User's login profile.\n * @returns - An http promise\n */\n create(resource: string | fhir.Resource, userProfile): Observable<fhir.Resource> {\n // There is no equivalent field to identify the author/publisher in lforms.\n // This field could be handy to retrieve user's resources from fhir server.\n // For now combine name and email to make it unique and searchable by name.\n const res = typeof resource === 'string' ? JSON.parse(resource) : resource;\n this.assignPublisher(res, userProfile);\n\n return this.promiseToObservable(this.smartClient.create(res));\n };\n\n\n /**\n * Creates a resource on the fhir server.\n *\n * @param resource - A string representation of fhir resource or fhir resource object.\n * @param userProfile - User's login profile.\n * @returns - An http promise\n */\n update(resource: string | fhir.Resource, userProfile): Observable<fhir.Resource> {\n const res = typeof resource === 'string' ? JSON.parse(resource) : resource;\n this.assignPublisher(res, userProfile);\n return this.promiseToObservable(this.smartClient.update(res));\n };\n\n\n /**\n * Read a questionnaire fhir resource.\n * @param id - Id of the resource.\n * @returns - An http promise\n */\n read(id): Observable<fhir.Resource> {\n return this.promiseToObservable(this.smartClient.request<fhir.Resource>({\n url: 'Questionnaire/'+id+'?_format=application/fhir+json',\n // headers: this.config.headers\n }));\n };\n\n\n /**\n * Delete a questionnaire fhir resource.\n *\n * @param id - Id of the resource.\n * @returns - An http promise\n */\n delete(id): Observable<any> {\n return this.promiseToObservable(this.smartClient.delete('Questionnaire/' + id));\n };\n\n\n /**\n *\n *\n * @param searchStr - A search term to search FHIR resources\n * @param searchField - Field to search, should be a valid searchable field. Refer to FHIR REST API for list of fields.\n * @param otherQueryParams? - (Optional) Any additional or overriding query parameters to send to FHIR server.\n * @returns Http promise\n */\n search(searchStr: string, searchField?: string, otherQueryParams?: any): Observable<fhir.Bundle> {\n const query = {_sort: ['-_lastUpdated'], _total: 'accurate', _format: 'application/fhir+json'};\n Object.assign(query, otherQueryParams);\n\n if(!searchField) {\n searchField = '_content';\n }\n\n if(searchStr) {\n // query[searchField+':contains'] = searchStr;\n query[searchField] = searchStr;\n }\n\n return this.promiseToObservable(this.smartClient.request<fhir.Bundle>({\n url: 'Questionnaire?' + this.queryToString(query)\n }));\n };\n\n\n /**\n * Get FHIR results using a url. The paginated results are obtained using a url in the result bundle\n * @param url - The URL referring to the resource bundle on the FHIR server.\n * @returns - FHIR resource bundle\n */\n getBundleByUrl(url: fhir.uri): Observable<fhir.Bundle> {\n return this.promiseToObservable(this.smartClient.request(url));\n };\n\n /**\n * Get FHIR pagination results using a current bundle. The paginated results are\n * obtained using a url in the current results bundle\n *\n * @param bundle - The FHIR bundle from which to extract the relation url.\n * @param relation - A string specifying the relation ('prev' | 'next')\n * @returns - FHIR resource bundle\n */\n getPage(bundle, relation): Observable<fhir.Bundle> {\n let url;\n if(relation === 'prev' || relation === 'previous') {\n url = bundle.link.prev || bundle.link.previous; // prev and previous are synonymous\n }\n else {\n url = bundle.link[relation];\n }\n\n return this.getBundleByUrl(url);\n };\n\n\n /**\n * Set fhir server headers\n *\n * @param fhirServer - fhirServer object. See dataConstants.fhirServerList for its definition.\n */\n setFhirServer(fhirServer: FHIRServer): void {\n this.currentServer = fhirServer;\n this.smartClient = FHIR.client(this.currentServer.endpoint);\n };\n\n getFhirServer(): FHIRServer {\n return this.currentServer;\n }\n\n /**\n * If publisher is specified, assign one by creating one from user profile, if exists.\n *\n * @param resource - FHIR resource object.\n * @param userProfile - User's login profile\n * @returns - a\n */\n assignPublisher(resource, userProfile): void {\n if(resource && !resource.publisher && userProfile) {\n if(userProfile.displayName) {\n let pubName = userProfile.displayName;\n if(userProfile.email) {\n pubName += '; ' + userProfile.email;\n }\n resource.publisher = pubName;\n }\n }\n }\n\n queryToString(obj: any): string {\n let ret: string = null;\n if(obj) {\n ret = Object.entries(obj).map(([k, v]) => {\n if(Array.isArray(v)) {\n v = (v as Array<string>).join(',');\n }\n return encodeURI(k)+'='+encodeURI(v as string);\n }).join('&');\n }\n return ret;\n }\n\n promiseToObservable<T>(promise: Promise<T>): Observable<T> {\n return defer(() => from(promise));\n }\n\n getSmartClient(): Client {\n return this.smartClient;\n }\n}\n","/**\n * Customize array-widget from ngx-schema-form. ArrayWidget represents a component\n * with array of objects, typically like a table of rows with columns.\n */\nimport {Component, Input, OnInit} from '@angular/core';\nimport {ArrayWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-array-widget',\n template: `\n `,\n styles: [\n ]\n})\nexport class LfbArrayWidgetComponent extends ArrayWidget implements OnInit {\n // Info icon\n faInfo = faInfoCircle;\n // Properties to customize the layout, typically read from layout schema json.\n @Input()\n nolabel = false;\n @Input()\n labelPosition: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n @Input()\n booleanControlledInitial = true;\n\n ngOnInit() {\n this.formProperty.valueChanges.subscribe((vals) => {\n this.updateWidget();\n\n });\n if(Array.isArray(this.formProperty.properties) && this.formProperty.properties.length === 0) {\n this.formProperty.addItem();\n }\n }\n\n\n updateWidget() {\n const widget = this.formProperty.schema.widget;\n // Input is priority followed by widget definition and default\n this.labelPosition = this.labelPosition || widget.labelPosition || 'top';\n\n // Apply width classes for only left positioned labels.\n this.labelWidthClass =\n this.labelPosition === 'left'\n ? (this.labelWidthClass || widget.labelWidthClass || 'col-sm')\n : '';\n\n this.controlWidthClass =\n this.labelPosition === 'left'\n ? (this.controlWidthClass || widget.controlWidthClass || 'col-sm')\n : '';\n\n this.booleanControlled = this.booleanControlled || !!widget.booleanControlled;\n this.booleanLabel = this.booleanLabel || widget.booleanLabel;\n\n this.booleanControlledInitial = widget.booleanControlledInitial !== undefined ?\n widget.booleanControlledInitial : this.booleanControlledInitial; // If not defined, show the control.\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {StringComponent} from '../string/string.component';\nimport {FormProperty} from '@lhncbc/ngx-schema-form';\nimport {fhir} from '../../../fhir';\nimport {Util} from '../../util';\n\n@Component({\n selector: 'lfb-string-with-css',\n templateUrl: './string-with-css.component.html'\n})\nexport class StringWithCssComponent extends StringComponent implements OnInit {\n\n static RENDERING_STYLE_EXT_URL = 'http://hl7.org/fhir/StructureDefinition/rendering-style';\n cssValue: string;\n name: string;\n elementTypeFieldFormProperty: FormProperty;\n elementTypeFieldValue; any;\n\n extensionTmpl: fhir.Extension = {\n url: StringWithCssComponent.RENDERING_STYLE_EXT_URL\n };\n\n\n constructor() {\n super();\n }\n\n\n /**\n * Initialize member variables.\n */\n ngOnInit() {\n this.name = this.formProperty.canonicalPathNotation;\n this.elementTypeFieldFormProperty = this.getCorrespondingFieldElementProperty();\n this.elementTypeFieldValue = this.elementTypeFieldFormProperty?.value;\n const ext = Util.findExtensionByUrl(this.elementTypeFieldValue?.extension,\n StringWithCssComponent.RENDERING_STYLE_EXT_URL);\n this.cssValue = ext?.valueString || '';\n }\n\n\n /**\n * Handle change of css input\n * @param cssString - new CSS input\n */\n cssChanged(cssString) {\n const ind = Util.findExtensionIndexByUrl(\n this.elementTypeFieldValue.extension, StringWithCssComponent.RENDERING_STYLE_EXT_URL);\n let ext;\n this.cssValue = cssString.trim();\n if(this.cssValue) {\n if(ind < 0) {\n ext = Object.assign({}, this.extensionTmpl);\n }\n else {\n ext = this.elementTypeFieldValue.extension[ind];\n }\n\n ext.valueString = this.cssValue;\n if(!this.elementTypeFieldValue.extension) {\n this.elementTypeFieldValue.extension = [];\n }\n if(this.elementTypeFieldValue.extension.length === 0) {\n this.elementTypeFieldValue.extension.push(ext);\n }\n }\n else if(ind >= 0) { // Empty value, remove any existing extension.\n this.elementTypeFieldValue.extension.splice(ind, 1);\n }\n\n this.elementTypeFieldFormProperty.reset(this.elementTypeFieldValue, false);\n }\n\n\n /**\n * Get sibling FHIR element type field of this field. Ex: _text for text, _prefix for prefix.\n */\n getCorrespondingFieldElementProperty() {\n let elName = this.formProperty?.canonicalPathNotation?.replace(/^.*\\./, '');\n elName = elName ? '_' + elName : null;\n return this.formProperty.parent.getProperty(elName);\n }\n\n /**\n * Create button label based on css content\n */\n cssButtonLabel() {\n const labelPrefix = (this.cssValue && this.cssValue.trim().length > 0) ? 'Edit' : 'Add';\n return labelPrefix + ' css styles';\n }\n}\n","<input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n<ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <div class=\"input-group {{controlWidthClass}} p-0\">\n <input [name]=\"name\" [attr.readonly]=\"(schema.widget.id!=='color') && schema.readOnly?true:null\"\n class=\"textline-widget form-control\"\n [attr.type]=\"!schema.widget.id || schema.widget.id === 'string' ? 'text' : schema.widget.id\"\n [attr.id]=\"id\" [formControl]=\"control\" [attr.placeholder]=\"schema.placeholder\"\n [attr.maxLength]=\"schema.maxLength || null\"\n [attr.minLength]=\"schema.minLength || null\"\n [attr.required]=\"schema.isRequired ? '' : null\"\n [attr.disabled]=\"schema.disabled ? '' : null\">\n <div class=\"input-group-append\">\n <div ngbDropdown class=\"d-inline-block\" #myDropdown=\"ngbDropdown\" placement=\"bottom-right\">\n <button class=\"btn btn-sm btn-outline-primary\" [attr.id]=\"id+'dropdownButton'\" ngbDropdownToggle>{{cssButtonLabel()}}</button>\n <div ngbDropdownMenu [attr.aria-labelledby]=\"id+'dropdownButton'\" style=\"{height: 200px; width: 200px}\">\n <form class=\"px-1 py-1\" [attr.id]=\"id+'dropdownForm'\">\n <div class=\"form-group\">\n <label [attr.for]=\"id+'css'\" class=\"text-nowrap\">Specify CSS Styles:</label>\n <textarea\n rows=\"4\"\n cols=\"50\"\n (change)=\"cssChanged($event.target.value)\"\n class=\"form-control\"\n [attr.id]=\"id+'css'\"\n >{{cssValue}}</textarea>\n </div>\n <button class=\"btn-sm btn-primary\" (click)=\"myDropdown.close()\">Close</button>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n","/**\n * A service to fetch data from clinical tables search service and lforms-fhir servers.\n */\nimport { Injectable } from '@angular/core';\nimport {HttpClient, HttpParams, HttpResponse} from '@angular/common/http';\nimport {Observable, of} from 'rxjs';\nimport {catchError, map, tap} from 'rxjs/operators';\nimport {TreeNode, ITreeOptions} from '@circlon/angular-tree-component/';\nimport {TREE_ACTIONS, KEYS, TreeModel} from '@circlon/angular-tree-component';\nimport {AutoCompleteResult} from './lib/widgets/auto-complete/auto-complete.component';\nimport {Util} from './lib/util';\ndeclare var LForms: any;\n\nenum JsonFormatType {\n R4 = 'R4',\n STU3 = 'STU3',\n LFORMS = 'lforms'\n}\n\nexport enum LoincItemType {\n PANEL = 'panel',\n QUESTION = 'question'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FetchService {\n static loincBaseUrl = 'https://clinicaltables.nlm.nih.gov';\n static loincSearchUrl = FetchService.loincBaseUrl + '/api/loinc_items/v3/search';\n static loincFormsUrl = FetchService.loincBaseUrl + '/loinc_form_definitions';\n static fhirUrl = 'https://lforms-fhir.nlm.nih.gov/baseR4/Questionnaire';\n treeOptions: ITreeOptions = {\n displayField: 'text',\n // isExpandedField: 'expanded',\n // idField: 'linkId',\n childrenField: 'item',\n actionMapping: {\n mouse: {\n dblClick: (tree, node, $event) => {\n if (node.hasChildren) { TREE_ACTIONS.TOGGLE_EXPANDED(tree, node, $event); }\n },\n click: TREE_ACTIONS.FOCUS,\n },\n keys: {\n [KEYS.ENTER]: TREE_ACTIONS.EXPAND\n }\n },\n nodeHeight: 23,\n allowDrag: (node) => {\n return true;\n },\n allowDrop: (node) => {\n return true;\n },\n // allowDragoverStyling: true,\n levelPadding: 10,\n useVirtualScroll: true,\n animateExpand: true,\n scrollOnActivate: true,\n animateSpeed: 30,\n animateAcceleration: 1.2,\n scrollContainer: document.documentElement // HTML\n };\n\n assetsUrl = '/assets';\n constructor(private http: HttpClient) { }\n\n /**\n * Get questionnaire by id from FHIR server.\n * @param id - Id of the questionnaire\n */\n getFormData(id: string): Observable<any> {\n return this.http.get(FetchService.fhirUrl + '/' + id, {responseType: 'json'});\n }\n\n /**\n * This is used to configure widget to edit item in json editor.\n */\n getItemEditorSchema(): Observable<any> {\n return this.http.get(this.assetsUrl + '/item-editor.schema.json', {responseType: 'json'});\n }\n\n /**\n * Options for sidebar tree\n */\n getTreeOptions() {\n return this.treeOptions;\n }\n\n\n /**\n * Search questionnaires on fhir server, intended for auto completion for importing questionnaires.\n *\n * @param term - Search term\n * @param options - http request options\n */\n searchForms(term: string, options?): Observable<AutoCompleteResult []> {\n options = options || {};\n options.observe = options.observe || 'body' as const;\n options.responseType = options.responseType || 'json' as const;\n options.params = (options.params || new HttpParams()).set('title', term).set('_elements', 'id,title');\n return this.http.get<AutoCompleteResult []>(FetchService.fhirUrl, options).pipe(\n tap((resp) => { console.log(resp); }),\n map((resp: any) => {\n return (resp.entry as Array<any>).map((e) => {\n return {title: e.resource.title, id: e.resource.id};\n });\n }),\n catchError((error) => {console.log('searching for ' + term, error); return of([]); })\n );\n }\n\n\n /**\n * Search CTSS for loinc items, intended for auto complete.\n *\n * @param term - Search term.\n * @param loincType - Panel or question.\n * @param options - http request options.\n */\n searchLoincItems(term: string, loincType?: LoincItemType, options?): Observable<AutoCompleteResult []> {\n options = options || {};\n options.observe = options.observe || 'body' as const;\n options.responseType = options.responseType || 'json' as const;\n options.params = (options.params ||\n new HttpParams());\n if(loincType === LoincItemType.PANEL) {\n options.params = options.params.set('type', 'form_and_section').set('available', true);\n }\n else {\n options.params = options.params.set('type', 'question').set('ef', 'answers,units,datatype');\n }\n options.params = options.params\n .set('terms', term)\n .set('maxList', 20);\n return this.http.get<AutoCompleteResult []>(FetchService.loincSearchUrl, options).pipe(\n // tap((resp: HttpResponse<AutoCompleteResult []>) => {console.log(resp)}),\n map((resp: any) => {\n const results: AutoCompleteResult [] = [];\n if (Array.isArray(resp)) {\n const loincNums: string[] = resp[1];\n const texts: string [] = resp[3];\n const extraFields: any = resp[2];\n loincNums.forEach((loincNum, index) => {\n const item: any = this.convertLoincQToItem(\n loincNum,\n texts[index][0],\n extraFields ? extraFields.answers[index] : null,\n extraFields ? extraFields.units[index] : null,\n extraFields ? extraFields.datatype[index] : null);\n results.push(item);\n // results.push({id: loincNum[index], title: texts[index][0]});\n });\n }\n return results;\n })\n );\n }\n\n\n /**\n * Fetch loinc panel based on loinc number.\n * @param loincNum - Loinc number\n * @param options - Any http options.\n */\n getLoincPanel(loincNum: string, options?): Observable<any> {\n options = options || {};\n options.observe = options.observe || 'body' as const;\n options.responseType = options.responseType || 'json' as const;\n options.params =\n (options.params ||\n new HttpParams())\n .set('loinc_num', loincNum);\n return this.http.get<any>(FetchService.loincFormsUrl, options).pipe(map((form: any) => {\n // We get the item (panel) in lforms form format. Convert form level fields to item level fields and pass it\n // FHIR conversion library.\n const convertedLFormsItem = {\n question: form.name,\n questionCode: form.code,\n dataType: 'SECTION',\n items: form.items\n };\n // Wrap it in LForms for conversion\n const wrapperLForm = {\n lformsVersion: form.lformsVersion,\n name: form.name,\n items: [convertedLFormsItem]\n };\n // const fhirQ = fhir.SDC.convertLFormsToQuestionnaire(wrapperLForm);\n const fhirQ = LForms.Util.getFormFHIRData('Questionnaire', 'R4', wrapperLForm);\n return fhirQ.item[0]; // It is just one item in item array.\n }));\n }\n\n /**\n * Create FHIR Questionnaire.item from loinc question info.\n *\n */\n convertLoincQToItem(loincNum: string, text: string, answers: any [], units: any[], datatype: string): any {\n const ret: any = {};\n ret.code = [\n {\n code: loincNum,\n system: 'http://loinc.org',\n display: text\n }\n ];\n ret.text = text;\n if(answers) {\n const answerOption: any[] = [];\n answers.forEach((answer) => {\n const option: any = {\n valueCoding: {\n code: answer.AnswerStringID,\n system: 'http://loinc.org',\n display: answer.displayText\n }\n }\n answerOption.push(option);\n });\n ret.answerOption = answerOption;\n }\n ret.type = Util.getFhirType(datatype);\n if(units) {\n ret.extension = Util.convertUnitsToExtensions(units);\n }\n return ret;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {LfbArrayWidgetComponent} from '../lfb-array-widget/lfb-array-widget.component';\nimport {ArrayProperty, FormProperty} from '@lhncbc/ngx-schema-form';\nimport {fhir} from '../../../fhir';\nimport uri = fhir.uri;\n\n@Component({\n selector: 'lfb-extensions',\n template: ``,\n styles: [\n ]\n})\nexport class ExtensionsComponent extends LfbArrayWidgetComponent implements OnInit {\n extensionsProp: ArrayProperty;\n _extMap: Map<fhir.uri, fhir.Extension []> = new Map();\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.extensionsProp = this.formProperty.searchProperty('extension') as ArrayProperty;\n /* this.extensionsProp.valueChanges.subscribe((val) => {}); */\n this._extMap = this.extensionsProp.value.reduce((acc: Map<uri, any>, ext: fhir.Extension, index: number) => {\n let e: fhir.Extension [] = acc.get(ext.url);\n if(!e) {\n e = [];\n acc.set(ext.url, e);\n }\n e.push(ext);\n return acc;\n }, this._extMap);\n }\n\n\n /**\n * Remove extension from the array, matching url, code and system. Code and system are optional\n * and should be used to match with increased specificity.\n * @param url\n * @param code\n * @param system\n */\n removeExt(url: fhir.uri, code?: string, system?: fhir.uri) {\n const extension: FormProperty = (this.extensionsProp.properties as FormProperty[]).find((ext) => {\n let ret = ext.value.url === url;\n ret = code ? (ret && ext.value.valueCoding && ext.value.valueCoding.code === code) : ret;\n return system ? (ret && ext.value.valueCoding.system === system) : ret;\n });\n this.extensionsProp.removeItem(extension);\n }\n\n\n /**\n * Remove extensions by extension url.\n * @param extUrl\n */\n removeExtensionsByUrl(extUrl: string) {\n const otherExts: any [] = (this.extensionsProp.properties as FormProperty[]).filter((ext) => {\n return ext.value.url !== extUrl;\n }).map(p => p.value);\n\n if(otherExts.length !== this.extensionsProp.properties.length) {\n this.extensionsProp.reset(otherExts);\n }\n }\n\n\n /**\n * Remove extension comparing the fields of given extension.\n * @param ext\n */\n removeExtension(ext: fhir.Extension): void {\n\n this.removeExt(ext.url, ext.valueCoding.code, ext.valueCoding.system);\n }\n\n\n /**\n * Add extension property.\n * Extension will include only one of several possible value[x] fields. If the value type is passed, removes all other\n * empty value[x].\n *\n * @param ext - Extension object\n * @param valueType - Key of valueType. It starts with 'value' prefix. If given,\n * all other value[x] will be deleted from the property value.\n *\n */\n addExtension(ext: fhir.Extension, valueType) {\n const extProp = this.extensionsProp.addItem(ext);\n if(valueType) {\n this.pruneUnusedValues(extProp, valueType);\n }\n return extProp;\n }\n\n\n /**\n * Remove unused value[x] fields from extension.\n *\n * @param extProperty - Extension form property\n * @param keepValueType - value[x] to keep.\n */\n pruneUnusedValues(extProperty: FormProperty, keepValueType) {\n const value = extProperty.value;\n const keys = Object.keys(value);\n for (const key of keys) {\n if(value.hasOwnProperty(key) && key.startsWith('value') && key !== keepValueType) {\n delete value[key];\n }\n }\n return extProperty;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {GridComponent} from '../grid.component/grid.component';\n\n/**\n *\n */\n@Component({\n selector: 'lfb-left-label-form-group',\n template: `\n <div class=\"form-group row\" *ngFor=\"let field of getShowFields()\">\n <div [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\">\n <lfb-label\n [for]=\"getShowFieldProperty(field).id\"\n [title]=\"getSchema(field).title\"\n [helpMessage]=\"getSchema(field).description\"\n ></lfb-label>\n </div>\n <div [class]=\"controlWidthClass\" >\n <lfb-form-element\n [nolabel]=\"true\"\n [formProperty]=\"getShowFieldProperty(field)\"\n ></lfb-form-element>\n </div>\n </div>\n `,\n styles: [`\n .form-group {\n margin: 0;\n }\n .row {\n margin: 0;\n }\n :host ::ng-deep .col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,\n .col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12\n {\n padding-right: 5px;\n padding-left: 5px;\n }\n `]\n})\nexport class LeftLabelFormGroupComponent extends GridComponent implements OnInit {\n\n labelWidthClass: string;\n controlWidthClass: string;\n label = true;\n\n ngOnInit(): void {\n const w = this.formProperty.schema.widget;\n this.labelWidthClass = w && w.labelWidth ? 'col-sm-' + w.labelWidth : 'col-sm';\n this.controlWidthClass = w && w.controlWidth ? 'col-sm-' + w.controlWidth : 'col-sm';\n this.label = w.label;\n }\n\n getShowFields(): string[] {\n return super.getShowFields(this.formProperty.schema.widget);\n }\n\n getSchema(propId: string) {\n return this.getShowFieldProperty(propId).schema;\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'lfb-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n title = 'formbuilder-lhcforms';\n}\n","<lfb-base-page></lfb-base-page>\n","/**\n * Customize ngx-schema-form radio component, mainly the layout.\n */\nimport { Component, OnInit } from '@angular/core';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-label-radio',\n template: `\n <input *ngIf=\"schema.widget.id ==='hidden'; else notHiddenFieldBlock\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <ng-template #notHiddenFieldBlock>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"\n ></lfb-label>\n <!-- <span *ngIf=\"schema.description\" class=\"formHelp\">{{schema.description}}</span> -->\n <!--\n <div class=\"{{controlWidthClass}} form-check form-check-inline m-0\" >\n <div *ngFor=\"let option of schema.oneOf\" class=\"radio\">\n <label class=\"horizontal control-label\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option.enum[0]\"\n value=\"{{option.enum[0]}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n </div>\n <div *ngFor=\"let option of schema.enum\" class=\"radio\">\n <label class=\"m-0\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option\"\n value=\"{{option}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\"><span class=\"ml-1 mr-3\">{{option}}</span></label>\n </div>\n </div>\n -->\n <div ngbRadioGroup [formControl]=\"control\" class=\"form-check-inline btn-group btn-group-sm btn-group-toggle\" >\n <label *ngFor=\"let option of schema.oneOf\" ngbButtonLabel class=\"btn-outline-success\">\n <input ngbButton [attr.id]=\"id + '.' + option.enum[0]\"\n type=\"radio\" [value]=\"option\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n <label *ngFor=\"let option of schema.enum\" ngbButtonLabel class=\"btn-outline-success\">\n <input ngbButton [attr.id]=\"id + '.' + option\"\n type=\"radio\" [value]=\"option\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\"><span class=\"ml-1 mr-3\">{{option}}</span></label>\n </div>\n </div>\n </ng-template>\n `,\n styles: [`\n lfb-label {\n /* margin-left: .3rem; */\n }\n `]\n})\nexport class LabelRadioComponent extends LfbControlWidgetComponent {\n\n}\n","import {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core';\nimport {StringComponent} from '../string/string.component';\nimport {Subscription} from 'rxjs';\nimport {ArrayProperty} from '@lhncbc/ngx-schema-form';\nimport {Util} from '../../util';\n\n@Component({\n selector: 'lfb-help-text',\n templateUrl: '../string/string.component.html',\n styleUrls: ['./help-text.component.css']\n})\nexport class HelpTextComponent extends StringComponent implements AfterViewInit, OnDestroy {\n\n\n subscriptions: Subscription [] = [];\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n /*\n let itemArray;\n const itemProp = this.formProperty.searchProperty('/item') as ArrayProperty;\n let subscription = itemProp.valueChanges.subscribe((items) => {\n itemArray = items;\n const itemIndex = Util.findItemIndexWithHelpText(items);\n // const helpTextItem = this.findItemWithHelpText(items);\n if(itemIndex >= 0) {\n this.formProperty.setValue(items[itemIndex].text, false);\n }\n });\n this.subscriptions.push(subscription);\n\n subscription = this.formProperty.valueChanges.subscribe((val) => {\n const itemIndex = Util.findItemIndexWithHelpText(itemArray);\n // let helpTextItem = this.findItemWithHelpText(itemArray);\n if(itemIndex < 0 && val) {\n // helpTextItem = this.createHelpTextItem(val);\n itemProp.addItem(this.createHelpTextItem(val));\n }\n else if(val && val.trim().length > 0) {\n itemArray[itemIndex].text = val.trim();\n }\n else if (itemIndex >= 0) { // delete for empty val\n itemArray.splice(itemIndex, 1);\n }\n });\n\n this.subscriptions.push(subscription);\n */\n }\n\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => {\n s.unsubscribe();\n });\n }\n}\n","import {Component, ElementRef, EventEmitter, OnInit, Output, ViewChild} from '@angular/core';\nimport {SelectComponent} from '../select/select.component';\nimport {RestrictionsComponent} from '../restrictions/restrictions.component';\nimport {fhir} from '../../../fhir';\nimport {RestrictionOperatorService} from '../../../services/restriction-operator.service';\n\n/**\n * Used to get acceptance from parent component. The parent should subscribe to service\n * and set reject to true to cancel the change.\n */\nexport interface AcceptChange {\n newValue: string,\n oldValue: string,\n reject: boolean\n}\n\n\n/**\n * Restriction pull down list. Operates based data type selected.\n */\n@Component({\n selector: 'lfb-restrictions-operator',\n templateUrl: './restrictions-operator.component.html',\n styleUrls: ['./restrictions-operator.component.css']\n})\nexport class RestrictionsOperatorComponent extends SelectComponent implements OnInit {\n\n options: [];\n model: string;\n disable = false;\n @Output()\n rejectChange = new EventEmitter<{reject: boolean}>();\n @ViewChild('mySelect', {static: true}) mySelect: ElementRef;\n\n constructor(private operatorService: RestrictionOperatorService) {\n super();\n }\n\n ngOnInit() {\n // Set model based on the property value.\n this.formProperty.valueChanges.subscribe((opt) => {\n this.model = opt;\n });\n\n // Select options list based on type.\n this.formProperty.root.getProperty('type').valueChanges.subscribe((type) => {\n this.options = RestrictionsComponent.typeToOptions[type];\n });\n }\n\n /**\n * Handle model change event.\n * @param event - Angular event object.\n * @param alertSelected - Popover template reference to show alert message.\n */\n modelChanged(event, alertSelected) {\n // Setup acceptance info for any controlling component.\n const rejectChange: AcceptChange = {newValue: event, oldValue: this.model, reject: false};\n this.operatorService.next(rejectChange); // Listener will change reject flag to reject.\n if(rejectChange.reject) {\n // Restore previous value and display alert.\n this.mySelect.nativeElement.value = this.model;\n alertSelected.open();\n }\n else {\n this.model = event;\n this.formProperty.setValue(this.model, false);\n }\n return this.model;\n }\n\n /**\n * Return option based on uri.\n * @param extUrl - FHIR extension uri.\n */\n getOption(extUrl: fhir.uri) {\n return RestrictionsComponent.extUrlToOptionsMap[extUrl];\n }\n}\n","<select #mySelect\n [ngModel]=\"model\"\n (ngModelChange)=\"modelChanged($event, alertSelected)\"\n [attr.name]=\"name\" [attr.id]=\"id\"\n [disabled]=\"schema.readOnly\" class=\"form-control\"\n [ngbPopover]=\"'That restriction is already selected.'\"\n #alertSelected=\"ngbPopover\" triggers=\"manual\" placement=\"bottom top\"\n>\n <ng-container>\n <option *ngFor=\"let option of options\" [ngValue]=\"getOption(option.extUrl)\" >{{option.display}}</option>\n </ng-container>\n</select>\n","import { BrowserModule } from '@angular/platform-browser';\nimport {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport { SchemaFormModule, WidgetRegistry } from '@lhncbc/ngx-schema-form';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { ItemComponent } from './item/item.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatCardModule} from '@angular/material/card';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule} from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTabsModule} from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { NgxSchemaFormComponent } from './ngx-schema-form/ngx-schema-form.component';\nimport { TreeModule } from '@circlon/angular-tree-component';\nimport { ItemJsonEditorComponent } from './lib/widgets/item-json-editor/item-json-editor.component';\nimport { GridComponent } from './lib/widgets/grid.component/grid.component';\nimport { TableComponent } from './lib/widgets/table/table.component';\nimport { LformsWidgetRegistry} from './lib/lforms-widget-registry';\nimport { StringComponent } from './lib/widgets/string/string.component';\nimport { SelectComponent } from './lib/widgets/select/select.component';\nimport { CheckboxComponent } from './lib/widgets/checkbox.component/checkbox.component';\nimport { IntegerComponent } from './lib/widgets/integer/integer.component';\nimport { FontAwesomeModule} from '@fortawesome/angular-fontawesome';\nimport { AppFormElementComponent } from './lib/widgets/form-element/form-element.component';\nimport { LabelComponent } from './lib/widgets/label/label.component';\nimport { TitleComponent } from './lib/widgets/title/title.component';\nimport { ElementChooserComponent } from './lib/widgets/element-chooser/element-chooser.component';\nimport { AutoCompleteComponent } from './lib/widgets/auto-complete/auto-complete.component';\nimport { RadioComponent } from './lib/widgets/radio/radio.component';\nimport { HeaderComponent } from './header/header.component';\nimport { FooterComponent } from './footer/footer.component';\nimport {MatSelectModule} from '@angular/material/select';\nimport { EnableWhenSourceComponent } from './lib/widgets/enable-when-source/enable-when-source.component';\nimport { EnableOperatorComponent } from './lib/widgets/enable-operator/enable-operator.component';\nimport { LeftLabelFormGroupComponent } from './lib/widgets/left-label-form-group/left-label-form-group.component';\nimport { LfbControlWidgetComponent } from './lib/widgets/lfb-control-widget/lfb-control-widget.component';\nimport { LfbArrayWidgetComponent } from './lib/widgets/lfb-array-widget/lfb-array-widget.component';\nimport { SideLabelCheckboxComponent } from './lib/widgets/side-label-checkbox/side-label-checkbox.component';\nimport { EnablewhenAnswerCodingComponent } from './lib/widgets/enablewhen-answer-coding/enablewhen-answer-coding.component';\nimport { AppJsonPipe } from './lib/pipes/app-json.pipe';\nimport { BasePageComponent } from './base-page/base-page.component';\nimport { FormFieldsComponent } from './form-fields/form-fields.component';\nimport { LabelRadioComponent } from './lib/widgets/label-radio/label-radio.component';\nimport { RowLayoutComponent } from './lib/widgets/row-layout/row-layout.component';\nimport { BooleanControlledComponent } from './lib/widgets/boolean-controlled/boolean-controlled.component';\nimport { EnableBehaviorComponent } from './lib/widgets/enable-behavior/enable-behavior.component';\nimport { MessageDlgComponent } from './lib/widgets/message-dlg/message-dlg.component';\nimport { FhirServersDlgComponent } from './lib/widgets/fhir-servers-dlg/fhir-servers-dlg.component';\nimport { FhirSearchDlgComponent } from './lib/widgets/fhir-search-dlg/fhir-search-dlg.component';\nimport { BooleanRadioComponent } from './lib/widgets/boolean-radio/boolean-radio.component';\nimport { UnitsComponent } from './lib/widgets/units/units.component';\nimport { ExtensionsComponent } from './lib/widgets/extensions/extensions.component';\nimport { TotalScoreComponent } from './lib/widgets/total-score/total-score.component';\nimport { RuleEditorModule } from 'rule-editor';\nimport { AnswerOptionComponent } from './lib/widgets/answer-option/answer-option.component';\nimport { InitialComponent } from './lib/widgets/initial/initial.component';\nimport { HelpTextComponent } from './lib/widgets/help-text/help-text.component';\nimport { SfFormWrapperComponent } from './sf-form-wrapper/sf-form-wrapper.component';\nimport { TypeComponent } from './lib/widgets/type/type.component';\nimport { PreviewDlgComponent } from './lib/widgets/preview-dlg/preview-dlg.component';\nimport { FhirExportDlgComponent } from './lib/widgets/fhir-export-dlg/fhir-export-dlg.component';\nimport { LoincNoticeComponent } from './lib/widgets/loinc-notice/loinc-notice.component';\nimport { StringWithCssComponent } from './lib/widgets/string-with-css/string-with-css.component';\nimport { RestrictionsComponent } from './lib/widgets/restrictions/restrictions.component';\nimport { RestrictionsOperatorComponent } from './lib/widgets/restrictions-operator/restrictions-operator.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n NgxSchemaFormComponent,\n ItemComponent,\n ItemJsonEditorComponent,\n GridComponent,\n TableComponent,\n StringComponent,\n SelectComponent,\n CheckboxComponent,\n IntegerComponent,\n AppFormElementComponent,\n LabelComponent,\n TitleComponent,\n ElementChooserComponent,\n AutoCompleteComponent,\n RadioComponent,\n HeaderComponent,\n FooterComponent,\n EnableWhenSourceComponent,\n EnableOperatorComponent,\n LeftLabelFormGroupComponent,\n LfbControlWidgetComponent,\n LfbArrayWidgetComponent,\n SideLabelCheckboxComponent,\n EnablewhenAnswerCodingComponent,\n AppJsonPipe,\n BasePageComponent,\n FormFieldsComponent,\n LabelRadioComponent,\n BooleanControlledComponent,\n RowLayoutComponent,\n BooleanControlledComponent,\n EnableBehaviorComponent,\n MessageDlgComponent,\n FhirServersDlgComponent,\n FhirSearchDlgComponent,\n BooleanRadioComponent,\n UnitsComponent,\n ExtensionsComponent,\n TotalScoreComponent,\n AnswerOptionComponent,\n InitialComponent,\n HelpTextComponent,\n SfFormWrapperComponent,\n TypeComponent,\n PreviewDlgComponent,\n FhirExportDlgComponent,\n LoincNoticeComponent,\n StringWithCssComponent,\n RestrictionsComponent,\n RestrictionsOperatorComponent\n ],\n imports: [\n AppRoutingModule,\n BrowserModule,\n BrowserAnimationsModule,\n FormsModule,\n FontAwesomeModule,\n HttpClientModule,\n LayoutModule,\n MatButtonModule,\n MatCardModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatRadioModule,\n MatSidenavModule,\n MatStepperModule,\n MatTabsModule,\n MatToolbarModule,\n MatTooltipModule,\n NgbModule,\n RuleEditorModule,\n SchemaFormModule.forRoot(),\n TreeModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatDialogModule,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n providers: [{provide: WidgetRegistry, useClass: LformsWidgetRegistry}, AppJsonPipe],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","/**\n * Handle side bar tree, item level fields editing in ui and editing in json\n */\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n EventEmitter,\n OnChanges,\n SimpleChanges, AfterViewChecked, NgZone\n} from '@angular/core';\nimport {ITreeOptions, TreeComponent} from '@circlon/angular-tree-component';\nimport {FetchService, LoincItemType} from '../fetch.service';\nimport {MatInput} from '@angular/material/input';\nimport {ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {FormService} from '../services/form.service';\nimport {NgxSchemaFormComponent} from '../ngx-schema-form/ngx-schema-form.component';\nimport {ItemJsonEditorComponent} from '../lib/widgets/item-json-editor/item-json-editor.component';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {BehaviorSubject, interval, Observable, of, Subject, Subscription} from 'rxjs';\nimport {MatDialog} from '@angular/material/dialog';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport {fhir} from '../fhir';\nimport {TreeService} from '../services/tree.service';\nimport {Util} from '../lib/util';\n\nexport class LinkIdCollection {\n linkIdHash = {};\n\n addLinkId(linkId, itemPath): boolean {\n let ret = false;\n if (linkId && linkId.trim().length > 0) {\n this.linkIdHash[linkId.trim()] = itemPath;\n ret = true;\n }\n\n return ret;\n }\n\n getItemPath(linkId): string {\n return this.linkIdHash[linkId];\n }\n\n hasLinkId(linkId): boolean {\n return this.linkIdHash.hasOwnProperty(linkId);\n }\n\n deleteLinkId(linkId): boolean {\n let ret = false;\n if (this.getItemPath(linkId)) {\n delete this.linkIdHash[linkId];\n ret = true;\n }\n return ret;\n }\n\n changeLinkId(oldLinkId, newLinkId): boolean {\n let ret = false;\n const itemPath = this.getItemPath(oldLinkId);\n if (itemPath) {\n this.deleteLinkId(oldLinkId);\n this.addLinkId(newLinkId, itemPath);\n ret = true;\n }\n return ret;\n }\n}\n\n@Component({\n selector: 'lfb-item-component',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.css']\n})\nexport class ItemComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n id = 1;\n @ViewChild('tree') treeComponent: TreeComponent;\n @ViewChild('jsonEditor') jsonItemEditor: ItemJsonEditorComponent;\n @ViewChild('uiEditor') uiItemEditor: NgxSchemaFormComponent;\n @ViewChild('formSearch') sInput: MatInput;\n @ViewChild('drawer', { read: ElementRef }) sidenavEl: ElementRef;\n // qItem: any;\n focusNode: ITreeNode;\n itemData: fhir.QuestionnaireItem = null;\n treeOptions: ITreeOptions;\n @Input()\n questionnaire: fhir.Questionnaire = {resourceType: 'Questionnaire', status: 'draft', item: []};\n itemList: any [];\n @Output()\n itemChange = new EventEmitter<any []>();\n isTreeExpanded = false;\n editType = 'ui';\n itemEditorSchema: any;\n editor = 'ngx';\n loincType = LoincItemType.PANEL;\n\n loincTypeOpts = [\n {\n value: LoincItemType.PANEL,\n display: 'Panel'\n },\n {\n value: LoincItemType.QUESTION,\n display: 'Question'\n }\n ];\n\n loincItem: any;\n\n linkIdCollection = new LinkIdCollection();\n itemLoading$ = new BehaviorSubject<boolean>(false);\n itemLoading = false;\n\n treeReloaded$ = new BehaviorSubject<fhir.Questionnaire>(null);\n\n subscriptions: Subscription [] = [];\n\n /**\n * A function variable to pass into ng bootstrap typeahead for call back.\n * Wait at least for two characters, 200 millis of inactivity and not the\n * same string as previously searched.\n *\n * @param term$ - User typed string\n */\n acSearch = (term$: Observable<string>): Observable<any []> => {\n return term$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n switchMap((term) => term.length < 2 ? [] : this.dataSrv.searchLoincItems(term, this.loincType)));\n };\n\n constructor(\n private zone: NgZone,\n public dialog: MatDialog,\n private modalService: NgbModal,\n private treeService: TreeService,\n private formService: FormService,\n private dataSrv: FetchService) {\n this.treeOptions = this.dataSrv.getTreeOptions();\n const subscription = this.dataSrv.getItemEditorSchema().subscribe((data) => {\n this.itemEditorSchema = data;\n });\n this.subscriptions.push(subscription);\n }\n\n ngOnInit() {\n /*\n this.zone.runOutsideAngular(() => {\n // Check very regularly to see if the pending macrotasks have all cleared\n interval(10)\n .pipe(\n startWith(0), // So that we don't initially wait\n takeUntil(this.itemLoading$),\n // Turn the interval number into the current state of the zone\n map(() => !this.zone.hasPendingMacrotasks),\n // Don't emit until the zone state actually flips from `false` to `true`\n distinctUntilChanged(),\n // Filter out unstable event. Only emit once the state is stable again\n filter(stateStable => stateStable === true),\n // Complete the observable after it emits the first result\n take(1),\n tap(stateStable => {\n // FULLY RENDERED!!!!\n this.itemLoading$.next(false);\n // Add code here to report Fully Rendered\n })\n ).subscribe();\n });\n*/\n\n const sub = this.itemLoading$.subscribe((isLoading) => {\n this.itemLoading = isLoading;\n });\n this.subscriptions.push(sub);\n }\n\n\n /**\n * Initialize component\n */\n ngAfterViewInit() {\n this.treeOptions.scrollContainer = this.sidenavEl.nativeElement;\n this.formService.setTreeModel(this.treeComponent.treeModel);\n setTimeout(() => {\n this.treeComponent.treeModel.update();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.itemList = changes.questionnaire.currentValue?.item;\n this.itemList = this.itemList || [];\n if(this.itemList.length === 0) {\n this.itemList.push({text: 'Item 0', type: 'string'});\n }\n if(this.treeComponent?.treeModel) {\n this.treeComponent?.treeModel.update();\n }\n }\n\n /**\n * Inform the change to host element.\n */\n itemChanged(item) {\n // Util.mirrorObject(this.focusNode.data, Util.convertToQuestionnaireJSON(item));\n Util.mirrorObject(this.focusNode.data, item);\n this.itemChange.emit(this.itemList);\n }\n\n /**\n * Tree initialization\n */\n onTreeInitialized() {\n const node = this.treeComponent?.treeModel?.getFirstRoot();\n if(node) {\n this.treeComponent.treeModel.setFocusedNode(node);\n this.setNode(node);\n }\n }\n\n\n /**\n * Handles tree update event\n * @param event - Event\n */\n onTreeUpdated() {\n if(!this.treeComponent.treeModel.getFocusedNode()) {\n const node = this.treeComponent.treeModel.getFirstRoot();\n this.treeComponent.treeModel.setFocusedNode(node);\n this.setNode(node);\n }\n }\n\n\n /**\n * Handle tree's on focus event\n * @param event - Focus event.\n */\n onFocus(event) {\n // this.itemLoading$.next(true);\n this.setNode(event.node);\n }\n\n /**\n * Set selected node, typically invoked when user clicks a node on the tree.\n * @param node - Selected node.\n */\n setNode(node: ITreeNode): void {\n // this.item = node && node.data || null;\n this.focusNode = node;\n this.itemData = this.focusNode.data;\n // Not sure why new item is having some fields from prev item. Nonetheless reset the form.\n // Resetting has side effects. Revisit -- TODO\n // this.uiItemEditor.resetForm(this.item);\n if(this.focusNode && this.focusNode.data && !this.focusNode.data.linkId) {\n this.focusNode.data.linkId = this.defaultLinkId(this.focusNode);\n }\n this.treeService.nodeFocus.next(node);\n }\n\n /**\n * Handle tree expansion/collapse\n */\n toggleTreeExpansion() {\n if (this.treeComponent) {\n if (this.isTreeExpanded) {\n this.treeComponent.treeModel.collapseAll();\n this.isTreeExpanded = false;\n } else {\n this.treeComponent.treeModel.expandAll();\n this.isTreeExpanded = true;\n }\n }\n }\n\n\n /**\n * Create linkId, using a random number generated by the tree.\n */\n defaultLinkId(node: ITreeNode): string {\n return '' + node.id;\n }\n\n\n /**\n * Toggle between ui and json\n */\n toggleEditType(event) {\n this.editType = this.editType === 'json' ? 'ui' : 'json';\n }\n\n\n /**\n * Compute tree hierarchy sequence numbering.\n * @param node - Target node of computation\n */\n getIndexPath(node: ITreeNode): number[] {\n const ret: number [] = [];\n if (node) {\n ret.push(node.index + 1);\n while (node?.level > 1) {\n node = node.parent;\n const index = node ? node.index : 0;\n ret.push(index + 1);\n }\n }\n return ret.reverse();\n }\n\n\n /**\n * Handle add item button\n */\n addItem(event): void {\n this.insertAnItem({text: 'New item ' + this.id++});\n }\n\n insertAnItem(item, index?: number) {\n if(this.itemList.length === 0) {\n this.itemList.push(item);\n }\n else {\n if (typeof index === 'undefined') {\n index = this.focusNode ? this.focusNode.index + 1 : 0;\n }\n this.focusNode.parent.data.item.splice(index, 0, item);\n }\n\n this.treeComponent.treeModel.update();\n this.treeComponent.treeModel.focusNextNode();\n setTimeout(() => {\n document.getElementById('text').focus();\n });\n }\n\n /**\n * Handle delete item button\n * @param index - Index of the node among its siblings.\n */\n deleteItem(index?: number) {\n if (typeof index === 'undefined') {\n index = this.focusNode.index;\n }\n this.focusNode.parent.data.item.splice(index, 1);\n this.treeComponent.treeModel.update();\n this.treeComponent.treeModel.focusNextNode();\n // this.setNode(this.treeComponent.treeModel.getFocusedNode());\n }\n\n /**\n * Invoke the dialog which returns selected lforms item from the search box.\n * @param dialogTemplateRef - Dialog template for adding loinc item.\n */\n addLoincItem(dialogTemplateRef): void {\n this.modalService.open(dialogTemplateRef, {ariaLabelledBy: 'modal-basic-title'}).result.then((autoCompResult) => {\n const subscription = this.getLoincItem(autoCompResult, this.loincType).subscribe((item) => {\n this.insertAnItem(item);\n this.loincItem = null;\n subscription.unsubscribe();\n });\n }, (reason) => {\n this.loincItem = null;\n });\n }\n\n /**\n * Get loinc item using selected auto completion result.\n * If the selected item is a panel, use its loinc number to get the panel from the server, otherwise\n * return the selected item.\n *\n * @param autoCompResult - Auto completion item selected from the search box.\n *\n * @param loincType - Loinc item type: panel or question.\n */\n getLoincItem(autoCompResult, loincType: LoincItemType): Observable<any> {\n let ret: Observable<any>;\n if(loincType === LoincItemType.PANEL) {\n ret = this.dataSrv.getLoincPanel(autoCompResult.code[0].code);\n }\n else if(loincType === LoincItemType.QUESTION) {\n ret = of(autoCompResult);\n }\n\n return ret;\n }\n\n /**\n * TODO - not sure if we need this yet.\n * @param linkId - Link id\n */\n /*\n registerLinkId(linkId) {\n this.linkIdCollection.addLinkId(linkId, this.focusNode.path.join('/'));\n }\n*/\n /**\n * Fetch loinc item by id\n * loincNum - Loinc number of the item.\n *\n */\n getItem(loincNum: string) {\n }\n\n /**\n * Auto complete result formatting used in add loinc item dialog\n * @param acResult - Selected result item.\n */\n formatter(acResult: any) {\n return acResult.code[0].code + ': ' + acResult.text;\n }\n\n\n /**\n * Unsubscribe any subscriptions.\n */\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n}\n","<mat-sidenav-container>\n <mat-sidenav #drawer mode=\"side\" opened class=\"p-1 bg-light\">\n <div class=\"sidenav-header p-1\">Questions Tree</div>\n <tree-root\n #tree\n [nodes]=\"itemList\"\n [options]=\"treeOptions\"\n (focus)=\"onFocus($event)\"\n (updateData)=\"onTreeUpdated()\"\n >\n <ng-template #treeNodeTemplate let-node let-index=\"index\">\n <div [ngClass]=\"node.nodeClass\">\n <span class=\"node-display-prefix\">{{getIndexPath(node).join('.')}}</span> <span [ngClass]=\"node.nodeClass\">{{node.displayField}}</span>\n </div>\n </ng-template>\n </tree-root>\n </mat-sidenav>\n <mat-sidenav-content>\n <div class=\"sidenav-header p-1\" aria-live=\"polite\" aria-atomic=\"true\" id=\"itemContent\">Current Item <span *ngIf=\"focusNode?.data?.text\">({{focusNode.data.text}})</span></div>\n <div class=\"mt-1\">\n <div>\n <span>Edit item (question or header)</span>\n <!--\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary float-right\" (click)=\"toggleEditType($event)\">{{ editType === 'ui' ? \"View/Edit item's JSON\" : \"Edit item in GUI\" }}</button>\n -->\n </div>\n <ul>\n <li>\n The questions are organized in hierarchical tree on the left side. Select the desired item to edit their properties here.\n </li>\n </ul>\n </div>\n <hr/>\n <ng-container *ngIf=\"editType === 'ui'\">\n <div *ngIf=\"itemLoading\" class=\"overlay\">\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border text-primary\" role=\"status\" style=\"width: 3rem; height: 3rem; z-index: 20;\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n </div>\n </div>\n <lfb-ngx-schema-form #uiEditor [model]=\"itemData\" (valueChange)=\"itemChanged($event)\"></lfb-ngx-schema-form>\n </ng-container>\n <ng-container *ngIf=\"editType === 'json'\">\n <lfb-item-json-editor #jsonEditor></lfb-item-json-editor>\n </ng-container>\n <hr/>\n <div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with item action buttons\">\n <div class=\"btn-group-sm\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn btn-primary\"\n [disabled]=\"!(focusNode && focusNode.parent)\"\n aria-label=\"Delete this item\"\n (click)=\"deleteItem()\">Delete this item</button>\n </div>\n <div class=\"btn-group-sm ml-2 ml-auto\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn btn-primary\"\n (click)=\"addItem($event)\"\n aria-label=\"Add new item\"\n aria-controls=\"itemContent\"\n >Add new item</button>\n </div>\n <div class=\"btn-group-sm ml-2\" role=\"group\" aria-label=\"Last group\">\n <button type=\"button\" class=\"btn btn-primary\"\n (click)=\"addLoincItem(addItemDlg)\"\n aria-label=\"Add new item from LOINC\"\n aria-controls=\"itemContent\"\n >Add new item from LOINC</button>\n </div>\n </div>\n </mat-sidenav-content>\n</mat-sidenav-container>\n\n<ng-template #addItemDlg let-modal>\n <div class=\"modal-header btn-primary\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">Add LOINC item</h4>\n <button type=\"button\" class=\"close btn-primary\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <form>\n <div class=\"form-group\">\n <label for=\"loincTypeSelect1\" class=\"align-middle\">Select LOINC item type:</label>\n <div class=\"btn-group\" id=\"loincTypeSelect1\" name=\"radioBasic\"\n [(ngModel)]=\"loincType\" [ngModelOptions]=\"{standalone: true}\" ngbRadioGroup>\n <label *ngFor=\"let opt of loincTypeOpts\" ngbButtonLabel>\n <input ngbButton type=\"radio\" name=\"radio\" [value]=\"opt.value\"/> {{ opt.display }}\n </label>\n </div>\n <label class=\"\" for=\"acSearchBoxId\">Search for a LOINC item:</label>\n <input id=\"acSearchBoxId\" type=\"text\" class=\"form-control\"\n [(ngModel)]=\"loincItem\"\n [ngModelOptions]=\"{standalone: true}\"\n [ngbTypeahead]=\"acSearch\"\n [resultFormatter]=\"formatter\"\n [inputFormatter]=\"formatter\"\n [editable]='false' />\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.dismiss(false)\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close(loincItem)\">Add</button>\n </div>\n</ng-template>\n","/**\n * A boolean control typically to trigger hide and show of a sibling component.\n */\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\n\n@Component({\n selector: 'lfb-boolean-controlled',\n template: `\n <ng-template #controller>\n <div class=\"widget\" [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label [title]=\"label\"\n [helpMessage]=\"helpMessage\"\n [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"\n ></lfb-label>\n\n <div ngbRadioGroup class=\"form-check-inline btn-group btn-group-sm btn-group-toggle\"\n [ngModel]=\"bool\"\n (ngModelChange)=\"boolChange.emit($event)\"\n [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let option of ['No', 'Yes']\">\n <label ngbButtonLabel class=\"btn-outline-success\" [attr.id]=\"option+'_1'\">\n <input ngbButton\n [value]=\"option === 'Yes'\" type=\"radio\" [attr.disabled]=\"disabled ? '' : null\">\n {{option}}\n </label>\n </ng-container>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"controller\"></ng-container>\n `,\n styles: [`\n .radio ~ .radio {\n margin-left: 16px;\n }\n .radio {\n font-size: 0.875rem\n }\n label:hover {\n opacity: 0.5;\n }\n `]\n})\nexport class BooleanControlledComponent {\n // Properties for layout, typically to be read from layout schema file.\n @Input()\n bool: boolean;\n @Input()\n label: string;\n @Input()\n labelPosition = 'left';\n @Input()\n helpMessage: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n disabled = false;\n\n @Output()\n boolChange = new EventEmitter<boolean>();\n}\n","/**\n * Registry for custom widgets.\n *\n * The widget is identified by its id. The id is associated\n * with the field in the schema.json.\n */\nimport { DefaultWidgetRegistry } from '@lhncbc/ngx-schema-form';\nimport {RowLayoutComponent} from './widgets/row-layout/row-layout.component';\nimport {GridComponent} from './widgets/grid.component/grid.component';\nimport {TableComponent} from './widgets/table/table.component';\nimport {StringComponent} from './widgets/string/string.component';\nimport {SelectComponent} from './widgets/select/select.component';\nimport {CheckboxComponent} from './widgets/checkbox.component/checkbox.component';\nimport {IntegerComponent} from './widgets/integer/integer.component';\nimport {RadioComponent} from './widgets/radio/radio.component';\nimport { Injectable } from '@angular/core';\nimport {EnableWhenSourceComponent} from './widgets/enable-when-source/enable-when-source.component';\nimport {EnableOperatorComponent} from './widgets/enable-operator/enable-operator.component';\nimport {LeftLabelFormGroupComponent} from './widgets/left-label-form-group/left-label-form-group.component';\nimport {SideLabelCheckboxComponent} from './widgets/side-label-checkbox/side-label-checkbox.component';\nimport {EnablewhenAnswerCodingComponent} from './widgets/enablewhen-answer-coding/enablewhen-answer-coding.component';\nimport {LabelRadioComponent} from './widgets/label-radio/label-radio.component';\nimport {EnableBehaviorComponent} from './widgets/enable-behavior/enable-behavior.component';\nimport {BooleanRadioComponent} from './widgets/boolean-radio/boolean-radio.component';\nimport {UnitsComponent} from './widgets/units/units.component';\nimport {TotalScoreComponent} from './widgets/total-score/total-score.component';\nimport {AnswerOptionComponent} from './widgets/answer-option/answer-option.component';\nimport {InitialComponent} from './widgets/initial/initial.component';\nimport {HelpTextComponent} from './widgets/help-text/help-text.component';\nimport {TypeComponent} from './widgets/type/type.component';\nimport {StringWithCssComponent} from './widgets/string-with-css/string-with-css.component';\nimport {RestrictionsComponent} from './widgets/restrictions/restrictions.component';\nimport {RestrictionsOperatorComponent} from './widgets/restrictions-operator/restrictions-operator.component';\n\n\n@Injectable()\nexport class LformsWidgetRegistry extends DefaultWidgetRegistry {\n constructor() {\n super();\n this.register('row-layout', RowLayoutComponent);\n this.register('grid', GridComponent);\n this.register('table', TableComponent);\n this.register('string', StringComponent);\n this.register('select', SelectComponent);\n this.register('checkbox', CheckboxComponent);\n this.register('boolean', CheckboxComponent);\n this.register('integer', IntegerComponent);\n this.register('number', IntegerComponent);\n this.register('radio', RadioComponent);\n this.register('lb-radio', LabelRadioComponent);\n this.register('enable-when-source', EnableWhenSourceComponent);\n this.register('enable-operator', EnableOperatorComponent);\n this.register('left-label-form-group', LeftLabelFormGroupComponent);\n this.register('left-label-checkbox', SideLabelCheckboxComponent);\n this.register('enable-when-answer-choice', EnablewhenAnswerCodingComponent);\n this.register('enable-behavior', EnableBehaviorComponent);\n this.register('boolean-radio', BooleanRadioComponent);\n this.register('units', UnitsComponent);\n this.register('totalScore', TotalScoreComponent);\n this.register('type', TypeComponent);\n this.register('answer-option', AnswerOptionComponent);\n this.register('initial', InitialComponent);\n this.register('help-text', HelpTextComponent);\n this.register('string-with-css', StringWithCssComponent);\n this.register('restrictions', RestrictionsComponent);\n this.register('restrictions-operator', RestrictionsOperatorComponent);\n }\n}\n","import {Component, Input, OnInit, EventEmitter, Output} from '@angular/core';\nimport {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'lfb-loinc-notice',\n templateUrl: './loinc-notice.component.html',\n styleUrls: ['./loinc-notice.component.css']\n})\nexport class LoincNoticeComponent implements OnInit {\n\n constructor(private activeModal: NgbActiveModal) { }\n\n ngOnInit(): void {\n }\n\n close(value: boolean) {\n this.activeModal.close(value);\n }\n}\n","<div role=\"alertdialog\">\n <div class=\"modal-header bg-primary\">\n <h4 class=\"modal-title text-white\">Accept LOINC Terms of Use</h4>\n </div>\n <div class=\"modal-body bg-light\">\n <p role=\"document\">\n This LHC-Forms form builder provides access to LOINC questions and forms.\n By using this service you agree to abide by the\n <a href=\"https://loinc.org/license/\" target=\"loincWindow\">LOINC Terms of Use</a>.\n </p>\n </div>\n <div class=\"modal-footer btn-group\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"close(true)\">Accept</button>\n </div>\n</div>\n\n\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {AcceptChange} from '../lib/widgets/restrictions-operator/restrictions-operator.component';\n\n@Injectable()\nexport class RestrictionOperatorService {\n\n constructor() { }\n\n rejectChange = new EventEmitter<AcceptChange>();\n next(reject: AcceptChange) {\n this.rejectChange.next(reject);\n }\n\n subscribe(cb: (reject: AcceptChange) => void) {\n this.rejectChange.subscribe(cb);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { LoginService, UserProfile } from '../services/login.service';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n\n@Component({\n selector: 'lfb-header',\n template: `\n <mat-toolbar id=\"header\">\n <mat-icon id=\"logo\" svgIcon=\"home\" aria-label=\"Home\"></mat-icon>\n <div id=\"siteNameBox\">\n <a mat-button id=\"siteName\" href=\"/\">NLM Form Builder</a>\n </div>\n <div class=\"float-lg-right\" *ngIf=\"isFirebaseEnabled\">\n <div *ngIf=\"!isUserSignedIn\">\n <button mat-button color=\"primary\" (click)=\"showSignInDialog()\">\n <button class=\"btn border-0 m-0 p-0\" matTooltip=\"Login with OAuth authenticators\">Sign in</button>\n </button>\n </div>\n <div *ngIf=\"isUserSignedIn\">\n <span>{{userProfile.displayName}}</span>\n <button mat-button color=\"primary\" (click)=\"signOut()\">\n <button class=\"btn border-0 m-0 p-0\"\n [ngbTooltip]=\"userProfile.displayName + userProfile.email ? (' : ' + userProfile.email) : ''\">Sign out</button>\n </button>\n </div>\n <div *ngIf=\"loginError\">{{loginError.message}}</div>\n </div>\n </mat-toolbar>\n `,\n styles: [`\n #header {\n /* margin-bottom: 20px; */\n position: relative;\n /* font-size: 12px;*/\n font-family: 'Droid Sans', Arial, Helvetica, sans-serif;\n color: #202020;\n border-top: 2px solid #0BACB6;\n border-bottom: 7px solid #17b4e3;\n /*line-height: normal;*/\n height: 84px;\n background: transparent;\n align-items: center;\n }\n\n #header a {\n color: #1E4193;\n text-decoration: none;\n }\n\n #logo {\n float: left;\n width: 72px;\n height: 72px;\n margin: 0 20px 0 20px;\n }\n\n #logo {\n display: block;\n }\n\n #logo .site-name-slogan {\n font-size: 14px;\n position: relative;\n top: 10px;\n left: -2px;\n }\n\n #logo .site-name-slogan span {\n display: block;\n font-size: 24px;\n position: relative;\n left: -2px;\n }\n\n #logo .site-name-slogan .slogan {\n color: #202020;\n font-size: 12px;\n position: relative;\n left: 1px;\n }\n\n #siteNameBox {\n flex: 1 1 auto;\n }\n\n #siteName {\n font-size: 125%;\n }\n `]\n})\nexport class HeaderComponent implements OnInit {\n\n userProfile: UserProfile = {};\n isUserSignedIn = false;\n @Input()\n isFirebaseEnabled = false;\n loginError: any = null;\n\n constructor(private loginService: LoginService,\n private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer) {\n // Register our icon(s)\n this.iconRegistry.addSvgIcon('home',\n this.sanitizer.bypassSecurityTrustResourceUrl('../../assets/images/lhncbc.svg'));\n }\n\n\n /**\n * Initialize login service\n */\n ngOnInit(): void {\n this.loginService.service().subscribe((loginEvent) => {\n if (loginEvent.event === 'signedIn') {\n this.userProfile = loginEvent.userProfile;\n this.isUserSignedIn = true;\n } else if (loginEvent.event === 'signedOut') {\n this.userProfile = {};\n this.isUserSignedIn = false;\n }\n });\n }\n\n\n /**\n * Logout\n */\n signOut() {\n this.loginService.logOut(this.userProfile);\n }\n\n showSignInDialog() {\n\n }\n\n}\n","/**\n * Define auto complete options\n */\nimport {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport {HttpClient, HttpResponse} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {FormControl} from '@angular/forms';\nimport {debounceTime, distinctUntilChanged, filter, map, startWith, switchMap} from 'rxjs/operators';\nimport {FetchService} from '../../../fetch.service';\n\nexport interface Options {\n searchUrl: string;\n httpOptions: any;\n processResponse?: (response: HttpResponse<any>) => Observable<AutoCompleteResult[]>;\n}\n\nexport interface AutoCompleteResult {\n/**\n * Define result item for auto complete results\n */\n title: string;\n id: string;\n}\n@Component({\n selector: 'lfb-auto-complete',\n template: `\n <mat-form-field>\n <input type=\"text\"\n matInput\n [placeholder]=\"placeholder\"\n [formControl]=\"myControl\"\n [matAutocomplete]=\"autoGroup\">\n <mat-autocomplete autoActiveFirstOption [disableRipple]=\"true\" #autoGroup=\"matAutocomplete\" [panelWidth]=\"'100%'\"\n [displayWith]=\"displayFn\" (optionSelected)=\"selectOption($event.option.value)\">\n <mat-option *ngFor=\"let result of acResults | async\" [value]=\"result\">\n <div class=\"container-fluid\">\n <div class=\"form-row\">\n <div class=\"col-1\"><small>id: {{result.id}}</small></div><div class=\"col-11\"><small>{{result.title}}</small></div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n `,\n styles: ['.mat-form-field {width: inherit; }']\n})\nexport class AutoCompleteComponent implements OnInit {\n\n myControl = new FormControl();\n @Input()\n placeholder;\n @Input()\n options: Options;\n acResults: Observable<AutoCompleteResult[]>;\n // Selected event\n @Output()\n optionSelected = new EventEmitter<AutoCompleteResult>();\n @Input()\n searchCallback: (term: string) => Observable<AutoCompleteResult[]>;\n\n constructor(private http: HttpClient, private lformsService: FetchService) { }\n\n ngOnInit() {\n if (!this.options.httpOptions.observe) {\n this.options.httpOptions.observe = 'body' as const;\n }\n if (!this.options.httpOptions.response) {\n this.options.httpOptions.responseType = 'json' as const;\n }\n this.acResults = this.myControl.valueChanges.pipe(\n startWith(''),\n filter(value => value.length > 2), // Minimum two characters to search\n debounceTime(100), // Wait for 100 millis of typing delays\n distinctUntilChanged(), // Input should be changed\n switchMap((value) => this._search(value)) // Final search term\n );\n }\n\n /**\n * Handle user selection of a result item.\n * @param result - Selected result item.\n */\n selectOption(result: AutoCompleteResult) {\n this.optionSelected.emit(result);\n }\n\n /**\n * Format result item display\n * @param result - Result item to format\n */\n displayFn(result: AutoCompleteResult) {\n return result && result.title ? result.title : '';\n }\n\n /**\n * Search lforms service\n * @param value - Search term from the input\n * @private\n */\n _search(value): Observable<AutoCompleteResult []> {\n return this.searchCallback(value);\n // return this.lformsService.searchForms(value);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {DomSanitizer} from '@angular/platform-browser';\n\n@Component({\n selector: 'lfb-footer',\n template: `\n <div id=\"fine-print\">\n <ul class=\"horz-list\">\n <li><a title=\"NLM copyright information\"\n href=\"http://www.nlm.nih.gov/copyright.html\">Copyright</a></li>\n <li><a title=\"NLM privacy policy\"\n href=\"http://www.nlm.nih.gov/privacy.html\">Privacy</a></li>\n <li><a title=\"NLM accessibility\"\n href=\"http://www.nlm.nih.gov/accessibility.html\" >Accessibility</a></li>\n <li><a title=\"NIH Freedom of Information Act office\"\n href=\"http://www.nih.gov/icd/od/foia/index.htm\"\n >Freedom of Information Act</a></li>\n <li class=\"last-item\"><a href=\"https://lhncbc.nlm.nih.gov/contact-us\"\n >Contact Us</a></li>\n </ul>\n <ul class=\"horz-list\">\n <li><a title=\"U.S. National Library of Medicine\"\n href=\"http://www.nlm.nih.gov/\"\n >U.S. National Library of Medicine</a></li>\n <li><a title=\"U.S. National Institutes of Health\" href=\"http://www.nih.gov/\"\n >U.S. National Institutes of Health</a></li>\n <li><a title=\"U.S. Department of Health and Human\n Services\" href=\"http://www.hhs.gov/\"\n >U.S. Department of Health and Human Services</a></li>\n <li class=\"last-item\"><a title=\"USA.gov\" href=\"http://www.usa.gov/\"><mat-icon\n svgIcon=\"USAgov\" alt=\"USA.gov\" id=\"usagov\"></mat-icon></a></li>\n </ul>\n </div>\n `,\n styles: [`\n #fine-print {\n border-top: 2px solid #0BACB6;\n clear: left;\n text-align: center;\n font-size: 11px;\n padding-top: 10px;\n padding-bottom: 10px;\n }\n\n ul.horz-list {\n margin: auto;\n }\n\n #fine-print ul.horz-list li {\n list-style-type: none;\n display: inline;\n padding-left: 8px;\n padding-right: 10px;\n border-right: 1px solid #999;\n }\n\n #fine-print ul.horz-list li.last-item {\n border-right: none;\n }\n\n #usagov {\n margin-bottom: -2px;\n vertical-align: bottom;\n width: 60px;\n }\n `]\n})\nexport class FooterComponent {\n\n constructor(private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer) {\n // Initialize icon registry\n this.iconRegistry.addSvgIcon('USAgov',\n this.sanitizer.bypassSecurityTrustResourceUrl('../../assets/images/USAgov.svg'));\n }\n}\n","/**\n * A utility class\n */\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport traverse from 'traverse';\nimport {fhir} from '../fhir';\n\nexport class Util {\n static ITEM_CONTROL_EXT_URL = 'http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl';\n static helpItemTemplate = {\n text: '', // Update with value from input box.\n type: 'display',\n linkId: '', // Update at run time.\n extension: [{\n url: Util.ITEM_CONTROL_EXT_URL,\n valueCodeableConcept: {\n text: 'Help-Button',\n coding: [\n {\n code: 'help',\n display: 'Help-Button',\n system: 'http://hl7.org/fhir/questionnaire-item-control'\n }\n ]\n }\n }]\n };\n\n // Capitalize the camel case strings.\n static capitalize(str): string {\n let ret = '';\n if (str && str.length > 0) {\n ret = str.split(/(?=[A-Z])/).join(' ');\n ret = ret.charAt(0).toUpperCase() + ret.substring(1);\n }\n return ret;\n }\n\n\n /**\n * Identify if a particular widget under the group is visible.\n *\n * @param group - Group property of the widget\n * @param propertyId - It is '.' delimited property name of its descendants.\n */\n static isVisible(group: PropertyGroup, propertyId: string) {\n const path = propertyId.split('.');\n let visible = group.visible;\n for (let i = 0; i < path.length && visible; i++) {\n group = group.getProperty(path[i]);\n visible = group.visible;\n }\n return visible;\n\n }\n\n\n /**\n * Identify if an input is empty, typically intended to detect user input.\n * The definition of empty:\n * Anything null, undefined or empty string is empty.\n * Any object or an array containing all empty elements is empty.\n *\n * @param json - Input to test the emptiness.\n * @return boolean - True if empty.\n */\n static isEmpty(json: unknown): boolean {\n let ret = true;\n if (typeof json === 'number') {\n ret = false; // Any number is non-empty\n }\n else if(typeof json === 'boolean') {\n ret = false; // Any boolean is non-empty\n }\n else if(!json) {\n ret = true; // empty string, null and undefined are empty\n }\n else if (json instanceof Date) {\n ret = false; // Date is non-empty\n }\n else if(Array.isArray(json)) { // Iterate through array\n for(let i = 0; ret && i < json.length; i++) {\n ret = Util.isEmpty(json[i]);\n }\n }\n else if (typeof json === 'object') { // Iterate through object properties\n if(Object.keys(json).length === 0) {\n ret = true;\n }\n else {\n for(let i = 0, keys = Object.keys(json); ret && i < keys.length; i++) {\n if(json.hasOwnProperty(keys[i])) {\n ret = Util.isEmpty(json[keys[i]]);\n }\n }\n }\n }\n else {\n ret = false;\n }\n return ret;\n }\n\n\n /**\n * Convert lforms answers to FHIR equivalent.\n * @param lformsAnswers - Lforms answers.\n */\n static getFhirAnswerOption(lformsAnswers: any []) {\n if(!lformsAnswers) {\n return null;\n }\n const answerOption: any [] = [];\n lformsAnswers.forEach((answer) => {\n answerOption.push({code: answer.AnswerStringID, system: 'http://loinc.org', display: answer.DisplayText});\n });\n return answerOption;\n }\n\n\n /**\n * Convert lforms data type to FHIR data type\n * @param lformsType - Lforms data type.\n */\n static getFhirType(lformsType: string): string {\n let ret = 'string';\n switch (lformsType) {\n case 'INT':\n ret = 'integer';\n break;\n case 'REAL':\n ret = 'decimal';\n break;\n case 'DT':\n case 'YEAR':\n ret = 'date';\n break;\n case 'ST':\n case 'EMAIL':\n case 'PHONE':\n ret = 'string';\n break;\n case 'TITLE':\n ret = 'display';\n break;\n case 'TM':\n ret = 'time';\n break;\n case 'SECTION':\n case null: // Null type for panels.\n ret = 'group';\n break;\n case 'URL':\n ret = 'url';\n break;\n case 'QTY':\n ret = 'quantity';\n break;\n }\n return ret;\n }\n\n\n /**\n * Convert lforms units to equivalent FHIR extensions.\n * @param units - units in lforms format.\n */\n static convertUnitsToExtensions(units): any [] {\n if(!units) {\n return null;\n }\n const ret: any [] = [];\n units.forEach((unit) => {\n ret.push({\n url: 'http://hl7.org/fhir/StructureDefinition/questionnaire-unit',\n valueCoding: {\n code: unit,\n system: 'http://unitsofmeasure.org',\n display: unit\n }\n });\n });\n return ret;\n }\n\n\n /**\n * Find index of the item containing help text.\n * @param itemsArray - List of items to search for.\n */\n static findItemIndexWithHelpText(itemsArray) {\n if(!itemsArray) {\n return -1;\n }\n return itemsArray?.findIndex((item) => {\n let ret = false;\n if (item.type === 'display') {\n ret = item.extension?.some((e) => {\n return e.url === Util.ITEM_CONTROL_EXT_URL &&\n e.valueCodeableConcept?.coding?.some((coding) => coding.code === 'help');\n });\n }\n return ret;\n });\n }\n\n /**\n * Create help text item. Most of it is boiler plate structure except item.text and item.linkId.\n *\n * @param item - Item for which help text item is created, mainly to help assign linkId.\n * @param helpText - Help text, typically obtained from user input box.\n */\n static createHelpTextItem(item, helpText) {\n let helpTextItem;\n if(helpText) {\n helpTextItem = JSON.parse(JSON.stringify(Util.helpItemTemplate));\n helpTextItem.linkId = item.linkId + '_helpText';\n helpTextItem.text = helpText;\n }\n return helpTextItem;\n }\n\n\n /**\n * Prunes the questionnaire model using the following conditions:\n * . Removes 'empty' values from the object. Emptiness is defined in Util.isEmpty().\n * The following are considred empty: undefined, null, {}, [], and ''.\n * . Removes any thing with __$* keys.\n * . Removes functions.\n * . Converts __$helpText to appropriate FHIR help text item.\n * . Converts converts enableWhen[x].question object to linkId.\n *\n * @param value - Questionnaire object used in the form builder.\n */\n static convertToQuestionnaireJSON(value) {\n traverse(value).forEach(function (node) {\n this.before(function () {\n if (node?.__$helpText?.trim().length > 0) {\n const index = Util.findItemIndexWithHelpText(node.item);\n let helpTextItem;\n if (index < 0) {\n helpTextItem = Util.createHelpTextItem(node, node.__$helpText.trim());\n if (!node.item) {\n node.item = [];\n }\n node.item.push(helpTextItem);\n } else {\n helpTextItem = node.item[index];\n helpTextItem.text = node.__$helpText;\n }\n // Replace helpText with sub item\n delete node.__$helpText;\n this.update(node);\n }\n // Internally the question is target TreeNode. Change that to node's linkId.\n else if (this.key === 'question' && typeof node?.data === 'object') {\n this.update(node.data.linkId);\n }\n });\n\n this.after(function () {\n // Remove all custom fields starting with __$ and empty fields.\n if(this.key?.startsWith('__$') || typeof node === 'function' || Util.isEmpty(node)) {\n // tslint:disable-next-line:only-arrow-functions\n if (this.notRoot) {\n this.delete();\n }\n }\n });\n });\n return value;\n }\n\n\n /**\n * Remove the content of target and copy (shallow) source to target.\n * More like a clone of source, without changing target reference.\n * @param target - object to be mirrored\n * @param source - source to copy.\n */\n static mirrorObject(target, source): any {\n Object.keys(target).forEach((k) => {\n if(target.hasOwnProperty(k)) {\n delete target[k];\n }\n });\n\n return Object.assign(target, source);\n }\n\n\n /**\n * Create bare minimum form.\n */\n static createDefaultForm(): fhir.Questionnaire {\n return {\n resourceType: 'Questionnaire',\n title: 'New Form',\n status: 'draft',\n item: []\n }\n }\n\n\n /**\n * Find the extension based on a given url from an array.\n * @param extensions - Array of extensions.\n * @param url - The url of the extension to search for.\n */\n static findExtensionByUrl(extensions: fhir.Extension [], url: string) {\n const i = this.findExtensionIndexByUrl(extensions, url);\n return i >= 0 ? extensions[i] : null;\n }\n\n\n /**\n * Find the first index of the extension based on a given url.\n * @param extensions - Array of extensions.\n * @param url - The url of the extension to search for.\n */\n static findExtensionIndexByUrl(extensions: fhir.Extension [], url: string) {\n let ret = -1;\n if(extensions?.length) {\n ret = extensions.findIndex((ext) => {\n return ext.url === url;\n });\n }\n return ret;\n }\n}\n","/**\n * Customized pull down box.\n */\nimport {AfterViewInit, Component, Input, OnInit} from '@angular/core';\nimport {SelectWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n\n@Component({\n selector: 'lfb-select',\n templateUrl: './select.component.html'\n})\nexport class SelectComponent extends LfbControlWidgetComponent implements AfterViewInit {\n faInfo = faInfoCircle;\n nolabel = false;\n\n // A mapping for options display string. Typically, the display strings are from schema definition.\n // This map helps to redefine the display string.\n @Input()\n selectOptionsMap: any = {};\n\n // Options list for the pulldown\n allowedOptions: Array<{value: string, label: string}>;\n\n /**\n * Initialize component, mainly the options list.\n */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n this.selectOptionsMap = this.schema.widget.selectOptionsMap || {};\n const allowedOptions = this.schema.enum.map((e) => {\n return this.mapOption(e);\n });\n this.allowedOptions = allowedOptions.filter((e) => {\n return this.isIncluded(e.value);\n });\n }\n\n /**\n * Map any display strings.\n * @param opt\n */\n mapOption(opt: string): {value: string, label: string} {\n const ret = {value: opt, label: opt};\n if (this.selectOptionsMap.map && this.selectOptionsMap.map[opt]) {\n ret.label = this.selectOptionsMap.map[opt];\n }\n return ret;\n }\n\n /**\n * Optionally to exlude any options from the schema.\n * @param opt\n */\n isIncluded(opt: string): boolean {\n return !(this.selectOptionsMap.remove && this.selectOptionsMap.remove.indexOf(opt) >= 0);\n }\n}\n","<ng-template #baseSelect>\n <div [ngClass]=\"{'row': labelPosition === 'left', 'm-0': true}\">\n <lfb-label *ngIf=\"!nolabel\"\n [for]=\"id\"\n [title]=\"schema.title\"\n [helpMessage]=\"schema.description\"\n [ngClass]=\"labelWidthClass+' pl-0 pr-1'\"\n ></lfb-label>\n <select *ngIf=\"schema.type!='array'\"\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [attr.disabled]=\"schema.readOnly ? '' : null\"\n class=\"form-control {{controlWidthClass}}\">\n <ng-container *ngIf=\"schema.oneOf; else use_enum\">\n <option *ngFor=\"let option of schema.oneOf\"\n [ngValue]=\"option.enum[0]\" >{{option.description}}</option>\n </ng-container>\n <ng-template #use_enum>\n <option *ngFor=\"let option of allowedOptions\"\n [ngValue]=\"option.value\" >{{option.label}}</option>\n </ng-template>\n </select>\n\n <select *ngIf=\"schema.type==='array'\" multiple\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [attr.disabled]=\"schema.readOnly ? '' : null\"\n class=\"form-control {{controlWidthClass}}\">\n <option *ngFor=\"let option of schema.items.oneOf\"\n [ngValue]=\"option.enum[0]\"\n [attr.disabled]=\"option.readOnly ? '' : null\">{{option.description}}</option>\n </select>\n\n <input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n </div>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"baseSelect\">\n\n</ng-container>\n\n","import { Component, OnInit, Input } from '@angular/core';\nimport {WidgetChooserComponent} from '@lhncbc/ngx-schema-form';\n\n@Component({\n selector: 'lfb-element-chooser',\n template: `<div #target></div>`,\n styles: []\n})\nexport class ElementChooserComponent extends WidgetChooserComponent {\n @Input()\n nolabel = true;\n @Input()\n layout: string;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n}\n","/**\n * Widget to represent enableBehaviour field.\n */\nimport { Component, OnInit } from '@angular/core';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-enable-behavior',\n template: `\n <input *ngIf=\"schema.widget.id ==='hidden'; else displayTemplate\"\n [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n <ng-template #displayTemplate>\n <div class=\"row\">\n <div [ngClass]=\"schema.widget.labelWidthClass\"></div>\n <div [ngClass]=\"schema.widget.controlWidthClass\">\n <lfb-label [helpMessage]=\"schema.description\" [title]=\"schema.title\"></lfb-label>\n <div [ngClass]=\"{row: schema.widget.layout === 'row'}\">\n <div *ngFor=\"let option of schema.oneOf\" class=\"radio\">\n <label class=\"horizontal control-label\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option.enum[0]\"\n value=\"{{option.enum[0]}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n </div>\n <div *ngFor=\"let option of schema.enum\" class=\"radio\" [ngClass]=\"{col: schema.widget.layout === 'row'}\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option\"\n value=\"{{option}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n <lfb-label [for]=\"id + '.' + option\" class=\"horizontal control-label ml-sm-2\" [title]=\"displayTexts[option]\"></lfb-label>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n `,\n styles: [\n ]\n})\nexport class EnableBehaviorComponent extends LfbControlWidgetComponent {\n displayTexts = {\n all: 'All conditions are true',\n any: 'Any condition is true'\n }\n}\n","/**\n * Customize the radio widget template.\n */\nimport { Component } from '@angular/core';\n\nimport { ControlWidget } from '@lhncbc/ngx-schema-form';\n\n@Component({\n selector: 'lfb-radio-widget',\n template: `<div class=\"widget form-group\">\n <lfb-title [title]=\"schema.title\" [helpMessage]=\"schema.description\"></lfb-title>\n <div class=\"container\">\n <div class=\"row\">\n <div *ngFor=\"let option of schema.oneOf\" class=\"radio\">\n <label class=\"horizontal control-label\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option.enum[0]\"\n value=\"{{option.enum[0]}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n {{option.description}}\n </label>\n </div>\n <div *ngFor=\"let option of schema.enum\" class=\"radio\" [ngClass]=\"{col: schema.widget.layout === 'row'}\">\n <input [formControl]=\"control\" [attr.name]=\"name\" [attr.id]=\"id + '.' + option\"\n value=\"{{option}}\" type=\"radio\" [attr.disabled]=\"(schema.readOnly || option.readOnly) ? '' : null\">\n <lfb-label [for]=\"id + '.' + option\" class=\"horizontal control-label\" [title]=\"option\"></lfb-label>\n </div>\n </div>\n </div>\n\t<input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n</div>`,\n styles: [`\n lfb-label {\n margin-left: .3rem;\n }\n `]\n})\nexport class RadioComponent extends ControlWidget {}\n","import {AfterViewInit, Component, OnInit} from '@angular/core';\nimport {LfbControlWidgetComponent} from '../lfb-control-widget/lfb-control-widget.component';\n\n@Component({\n selector: 'lfb-boolean-radio',\n templateUrl: 'boolean-radio.component.html',\n styles: [`\n label:hover {\n opacity: 0.5;\n }\n `]\n})\nexport class BooleanRadioComponent extends LfbControlWidgetComponent implements AfterViewInit {\n ngAfterViewInit() {\n this.labelPosition = 'left';\n super.ngAfterViewInit();\n }\n}\n","<ng-template #controller>\n <div class=\"widget\" [ngClass]=\"{'row': labelPosition === 'left', 'm-0' : true}\">\n <lfb-label *ngIf=\"!nolabel\" [title]=\"schema.title\" [helpMessage]=\"schema.description\" [ngClass]=\"labelWidthClass + ' pl-0 pr-1'\"></lfb-label>\n\n <div ngbRadioGroup\n [attr.name]=\"name\"\n [formControl]=\"control\"\n class=\"btn-group form-check-inline btn-group-sm btn-group-toggle\">\n <ng-container *ngFor=\"let option of ['No', 'Yes']\" class=\"radio\">\n <label ngbButtonLabel class=\"btn-outline-success m-0\">\n <input ngbButton [value]=\"option === 'Yes'\" type=\"radio\" [attr.disabled]=\"schema.readOnly ? '' : null\">\n {{option}}\n </label>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"controller\"></ng-container>\n","/**\n * Form related helper functions.\n */\nimport {Injectable} from '@angular/core';\nimport {IDType, ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {TreeModel} from '@circlon/angular-tree-component';\nimport {fhir} from '../fhir';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {MessageDlgComponent, MessageType} from '../lib/widgets/message-dlg/message-dlg.component';\nimport {Observable, Subject} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {HttpClient} from '@angular/common/http';\nimport traverse from 'json-schema-traverse';\nimport jsonTraverse from 'traverse';\nimport ngxItemSchema from '../../assets/ngx-item.schema.json';\nimport fhirExtensionSchema from '../../assets/fhir-extension-schema.json';\nimport itemLayout from '../../assets/items-layout.json';\nimport ngxFlSchema from '../../assets/ngx-fl.schema.json';\nimport flLayout from '../../assets/fl-fields-layout.json';\nimport {Util} from '../lib/util';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormService {\n\n _guidingStep$: Subject<string> = new Subject<string>();\n\n localStorageError: Error = null;\n treeModel: TreeModel;\n itemSchema: any = {properties: {}};\n flSchema: any = {properties: {}};\n\n constructor(private modalService: NgbModal, private http: HttpClient) {\n ngxItemSchema.definitions.Extension = fhirExtensionSchema as any;\n this._updateExtension(ngxItemSchema);\n this.itemSchema = ngxItemSchema;\n this.itemSchema.layout = itemLayout;\n\n this.flSchema = ngxFlSchema;\n this.flSchema.layout = flLayout;\n }\n\n\n /**\n * Get item level schema\n */\n getItemSchema() {\n return this.itemSchema;\n }\n\n /**\n * Get form level schema\n */\n getFormLevelSchema() {\n return this.flSchema;\n }\n\n /**\n * Update main schema with adjusted extension schema recursively\n *\n * @param rootSchema\n */\n _updateExtension(rootSchema: any) {\n const extension = rootSchema.definitions.Extension;\n traverse(rootSchema, {}, (\n schema,\n jsonPtr,\n rootSch,\n parentJsonPtr,\n parentKeyword,\n parentSchema,\n indexOrProp) => {\n if(parentKeyword === 'items' && (parentJsonPtr.endsWith('extension') || parentJsonPtr.endsWith('modifierExtension'))) {\n // Save title and description before over writing them.\n const commonFields = {title: schema.title, description: schema.description};\n Object.assign(schema, extension);\n // title and description are overwritten. Restore them.\n if(commonFields.title) {\n schema.title = commonFields.title;\n }\n if(commonFields.description) {\n schema.description = commonFields.description;\n }\n }\n });\n }\n\n\n /**\n * Access guiding step observable.\n */\n get guidingStep$(): Observable<string> {\n return this._guidingStep$.asObservable();\n }\n\n\n /**\n * Inform the listeners of change in step.\n * @param step\n */\n setGuidingStep(step: string) {\n this._guidingStep$.next(step);\n }\n\n\n /**\n * Intended to collect source items for enable when logic\n * Get sources for focussed item.\n */\n getSourcesExcludingFocussedTree(): ITreeNode [] {\n let ret = null;\n if (this.treeModel) {\n const fNode = this.treeModel.getFocusedNode();\n ret = this.getEnableWhenSources(fNode);\n }\n return ret;\n }\n\n\n /**\n * Get sources excluding the branch of a given node.\n * @param focussedNode\n * @param treeModel?: Optional tree model to search. Default is this.treeModel.\n */\n getEnableWhenSources(focussedNode: ITreeNode, treeModel?: TreeModel): ITreeNode [] {\n if (!treeModel) {\n treeModel = this.treeModel;\n }\n let ret = null;\n if (treeModel) {\n ret = this.getEnableWhenSources_(treeModel.roots, focussedNode);\n }\n return ret;\n }\n\n\n /**\n * Get sources from a given list of nodes excluding the branch of focussed node.\n * @param nodes - List of nodes to search\n * @param focussedNode - Reference node to exclude the node and its descending branch\n * @private\n */\n private getEnableWhenSources_(nodes: ITreeNode [], focussedNode: ITreeNode): ITreeNode [] {\n const ret: ITreeNode [] = [];\n for (const node of nodes) {\n if (node !== focussedNode) {\n if (node.data.type !== 'group' && node.data.type !== 'display') {\n ret.push(node);\n }\n if (node.hasChildren) {\n ret.push.apply(ret, this.getEnableWhenSources_(node.children, focussedNode));\n }\n }\n }\n return ret;\n }\n\n\n /**\n * Setter\n * @param treeModel\n */\n setTreeModel(treeModel: TreeModel) {\n this.treeModel = treeModel;\n }\n\n\n /**\n * Get node by its id.\n * @param id\n */\n getTreeNodeById(id: IDType): ITreeNode {\n return this.treeModel.getNodeById(id);\n }\n\n\n /**\n * Get a node by linkId from entire tree.\n * @param linkId\n */\n getTreeNodeByLinkId(linkId: string): ITreeNode {\n return this.findNodeByLinkId(this.treeModel.roots, linkId);\n }\n\n\n /**\n * Get a node by linkId from a given set of tree nodes.\n * @param targetNodes - Array of tree nodes\n * @param linkId - linkId associated with item of the node.\n */\n findNodeByLinkId(targetNodes: ITreeNode [], linkId: string): ITreeNode {\n let ret: ITreeNode;\n if (!targetNodes || targetNodes.length === 0) {\n return null;\n }\n for (const node of targetNodes) {\n if (node.data.linkId === linkId) {\n ret = node;\n } else if (node.hasChildren) {\n ret = this.findNodeByLinkId(node.children, linkId);\n }\n if (ret) {\n break;\n }\n }\n return ret;\n }\n\n\n /**\n * General purpose information dialog\n *\n * @param title - Title of dialog\n * @param message - Message to display\n * @param type - INFO | WARNING | DANGER\n */\n showMessage(title: string, message: string, type: MessageType = MessageType.INFO) {\n\n const modalRef = this.modalService.open(MessageDlgComponent);\n modalRef.componentInstance.title = title;\n modalRef.componentInstance.message = message;\n modalRef.componentInstance.type = type;\n }\n\n\n /**\n * Parse input string to questionnaire.\n * @param text\n */\n parseQuestionnaire(text: string): fhir.Questionnaire {\n return this.validateFhirQuestionnaire(JSON.parse(text));\n }\n\n\n /**\n * Possible validation checks.\n *\n * @param json\n */\n validateFhirQuestionnaire(json: any): fhir.Questionnaire {\n jsonTraverse(json).forEach(function(x) {\n if (this.key === 'item') {\n let htIndex = -1;\n const index = x.findIndex((e) => {\n htIndex = Util.findItemIndexWithHelpText(e.item);\n return htIndex >= 0;\n });\n if(index >= 0) {\n const helpText = x[index].item[htIndex].text;\n x[index].item.splice(htIndex, 1);\n if(x[index].item.length === 0) {\n delete x[index].item;\n }\n jsonTraverse(x[index]).set(['__$helpText'], helpText);\n }\n }\n });\n\n return json as fhir.Questionnaire;\n }\n\n\n /**\n * Remove questionnaire from local storage.\n */\n clearAutoSavedForm() {\n localStorage.removeItem('fhirQuestionnaire');\n }\n\n\n /**\n * Save questionnaire in local storage\n * @param fhirQ - Questionnaire\n */\n autoSaveForm(fhirQ: fhir.Questionnaire) {\n this.autoSave('fhirQuestionnaire', fhirQ);\n }\n\n\n /**\n * Retrieve questionnaire from the storage.\n */\n autoLoadForm(): fhir.Questionnaire {\n return this.autoLoad('fhirQuestionnaire') as fhir.Questionnaire;\n }\n\n\n /**\n * Store key, value to local storage. Checks the availability of storage before saving.\n * @param key - Key for storage.\n * @param value - Object or string to store.\n */\n autoSave(key: string, value: any) {\n if(this._storageAvailable('localStorage')) {\n if(value) {\n if(key !== 'state' && value) {\n // Non state are objects\n localStorage.setItem(key, JSON.stringify(value));\n }\n else {\n // State is string type.\n localStorage.setItem(key, value);\n }\n }\n else {\n localStorage.removeItem(key);\n }\n }\n else {\n console.error('Local storage not available!');\n }\n }\n\n\n /**\n * Retrieve an item from local storage\n * @param key - Key of the item to retrieve\n */\n autoLoad(key: string): any {\n let ret: any = null;\n if(this._storageAvailable('localStorage')) {\n const str = localStorage.getItem(key);\n if(str) {\n if(key !== 'state') {\n ret = JSON.parse(str);\n }\n else {\n ret = str;\n }\n }\n }\n else {\n console.error('Local storage not available!');\n }\n return ret;\n }\n\n\n /**\n * Test the storage for availability\n * @param type - localStorage | sessionStorage\n * @return boolean\n */\n _storageAvailable(type): boolean {\n let storage;\n try {\n storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n this.localStorageError = null;\n return true;\n }\n catch(e) {\n this.localStorageError = e;\n return e instanceof DOMException && (\n // everything except Firefox\n e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n (storage && storage.length !== 0);\n }\n }\n\n\n /**\n * Check if a questionnaire is saved in local storage.\n */\n isAutoSaved(): boolean {\n return !!localStorage.getItem('fhirQuestionnaire');\n }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport {ITreeModel} from '@circlon/angular-tree-component/lib/defs/api';\nimport {Subject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeService {\n treeModel: ITreeModel;\n\n _nodeFocus = new Subject<any>();\n constructor() { }\n get nodeFocus (): Subject<any> {\n return this._nodeFocus;\n }\n}\n","/**\n * For layout of fields in rows. Field width could be entire 12 columns (bootstrap grid size),\n * in which case next field starts on next line.\n */\nimport { Component, OnInit } from '@angular/core';\nimport { GridComponent} from '../grid.component/grid.component';\n\n@Component({\n selector: 'lfb-row-layout',\n template: `\n <div *ngFor=\"let row of rows\">\n <div [class]=\"gridClass(field)\" class=\"lfb-row\" [ngClass]=\"{hideRow: isHidden(field)}\" *ngFor=\"let field of getShowFields(row)\">\n <lfb-form-element [formProperty]=\"getShowFieldProperty(field)\"></lfb-form-element>\n </div>\n </div>\n `,\n styles: [`\n .lfb-row {\n border-bottom: lightgrey solid 1px;\n padding: 2px 0 2px 0;\n }\n .lfb-row:hover {\n background-color: lightgoldenrodyellow;\n }\n\n .hideRow {\n border: none !important;\n padding: 0 !important;\n display: none;\n }\n `]\n})\nexport class RowLayoutComponent extends GridComponent implements OnInit {\n\n rows: any = [];\n\n /**\n * Initialize\n */\n ngOnInit() {\n // Read rows from schema layout\n this.rows = this.formProperty.schema.layout.formLayout.rows;\n }\n\n /**\n * Check to see if it is a hidden field. Intended to apply hideRow class.\n * @param field - Field id.\n */\n isHidden(field): boolean {\n return this.getWidgetId(field) === 'hidden';\n }\n}\n","/**\n * Component for editing json of questionnaire item.\n *\n */\nimport {AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport * as ace from 'ace-builds';\nimport {FetchService} from '../../../fetch.service';\nimport {SharedObjectService} from '../../../shared-object.service';\nimport {AppJsonPipe} from '../../pipes/app-json.pipe';\n\n\n@Component({\n selector: 'lfb-item-json-editor',\n template: `\n <div class=\"card-container\">\n <div class=\"app-ace-editor\" #itemJsonEditor style=\"height: 500px;\" ></div>\n </div>\n `,\n styles: [\n `\n .app-ace-editor {\n border: 2px solid #f8f9fa;\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n `,\n ],\n\n})\nexport class ItemJsonEditorComponent implements AfterViewInit {\n @ViewChild('itemJsonEditor') editorElement: ElementRef;\n val: any;\n\n constructor(private dataSrv: FetchService, private itemSrv: SharedObjectService) {}\n\n /**\n * Initialize component.\n */\n ngAfterViewInit(): void {\n\n ace.config.set('fontSize', '14px');\n ace.config.set(\n 'basePath',\n 'https://unpkg.com/ace-builds@1.4.12/src-noconflict'\n );\n const aceEditor = ace.edit(this.editorElement.nativeElement);\n aceEditor.setTheme('ace/theme/twilight');\n aceEditor.session.setMode('ace/mode/json');\n aceEditor.on('change', () => {\n const val = aceEditor.getValue();\n if (val !== this.val) {\n this.val = val;\n this.itemSrv.setObject(this.val);\n }\n });\n\n // Update this editor's content with any update to the item from outside.\n this.itemSrv.currentItem$.subscribe((item) => {\n if (item !== this.val) {\n this.val = item;\n aceEditor.setValue(new AppJsonPipe().transform(this.val));\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {AppJsonPipe} from './lib/pipes/app-json.pipe';\nimport {fhir} from './fhir';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A service to share objects across the components, mainly intended for\n * sharing changed questionnaire and questionnaire item.\n */\nexport class SharedObjectService {\n\n private questionnaireSource$ = new BehaviorSubject<fhir.Questionnaire>(null);\n private itemSource$ = new BehaviorSubject<fhir.QuestionnaireItem>(null);\n private nodeSource$: BehaviorSubject<ITreeNode> = new BehaviorSubject<ITreeNode>(null);\n node$ = this.nodeSource$.asObservable();\n private objSource$: BehaviorSubject<any> = new BehaviorSubject<any>({});\n object$ = this.objSource$.asObservable();\n objectStr$ = this.object$.pipe(map((item) => {\n return new AppJsonPipe().transform(item);\n // return JSON.stringify(item, null, 2);\n }));\n constructor() {}\n\n\n /**\n * Set an object to share it with listeners.\n *\n * @param obj - Object to share, can be a string representation.\n */\n setObject(obj: any) {\n let valid = true;\n if (typeof obj === 'string') {\n try {\n obj = JSON.parse(obj);\n } catch (e) {\n valid = false;\n }\n }\n if (valid) {\n this.objSource$.next(obj);\n }\n }\n\n /**\n * Set a tree node to share it with listeners.\n *\n * @param node - A node in the sidebar tree\n */\n /*\n setNode(node: ITreeNode): void {\n this.nodeSource$.next(node);\n }\n */\n\n set questionnaire(questionnaire: fhir.Questionnaire) {\n this.questionnaireSource$.next(questionnaire);\n }\n\n get questionnaire$(): Observable<fhir.Questionnaire> {\n return this.questionnaireSource$.asObservable();\n }\n\n set currentItem (item: fhir.QuestionnaireItem) {\n this.itemSource$.next(item);\n }\n\n get currentItem$(): Observable<fhir.QuestionnaireItem> {\n return this.itemSource$.asObservable();\n }\n\n}\n","/**\n * An input box for enableWhen's source to search eligible source items listed in the tree.\n */\nimport {Component, OnInit, ViewChild} from '@angular/core';\nimport {BehaviorSubject, merge, Observable, of, Subject} from 'rxjs';\nimport {FormService} from '../../../services/form.service';\nimport {debounceTime, distinctUntilChanged, filter, map, startWith, switchMap} from 'rxjs/operators';\nimport {ITreeNode} from '@circlon/angular-tree-component/lib/defs/api';\nimport {ControlWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {NgbTypeahead} from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'lfb-choice',\n template: `\n <ng-template #rt let-r=\"result\" let-t=\"term\">\n <ngb-highlight [result]=\"r.name\" [term]=\"t\"></ngb-highlight>\n </ng-template>\n\n <lfb-label *ngIf=\"!nolabel\" [for]=\"id\" [title]=\"schema.title\" [helpMessage]=\"schema.description\"></lfb-label>\n <input *ngIf=\"schema.type!='array'\"\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [attr.disabled]=\"schema.readOnly ? '' : null\"\n type=\"text\"\n [(ngModel)]=\"model\"\n [ngbTypeahead]=\"search\"\n [editable]=\"false\"\n [inputFormatter]=\"inputFormatter\"\n [resultFormatter]=\"resultListItemFormatter\"\n class=\"form-control\"\n (focus)=\"focus$.next($any($event).target.value)\"\n (click)=\"click$.next($any($event).target.value)\"\n (selectItem)=\"onSelect($event)\"\n #instance=\"ngbTypeahead\"\n >\n\n <input *ngIf=\"schema.readOnly\" [attr.name]=\"name\" type=\"hidden\" [formControl]=\"control\">\n `,\n styles: [\n ]\n})\nexport class EnableWhenSourceComponent extends ControlWidget implements OnInit {\n // Info icon.\n faInfo = faInfoCircle;\n nolabel = false;\n model: ITreeNode;\n\n sources: ITreeNode [];\n\n @ViewChild('instance') instance: NgbTypeahead;\n\n focus$ = new Subject<string>();\n click$ = new Subject<string>();\n\n /**\n * Search through text of the source items, with input string. For empty term, show all items.\n *\n * @param input$ - Observation for input string.\n */\n search = (input$: Observable<string>): Observable<ITreeNode []> => {\n const debouncedText$ = input$.pipe(debounceTime(100), distinctUntilChanged());\n const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));\n const inputFocus$ = this.focus$;\n\n return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(\n map(term => (term === '' ? this.sources\n : this.sources.filter(el => el.data.text.toLowerCase().indexOf(term.toLowerCase()) > -1)))\n );\n };\n\n\n /**\n * Invoke super class constructor.\n *\n * @param formService - Service to help with collection of sources\n */\n constructor(private formService: FormService) {\n super();\n }\n\n\n /**\n * Initialize the component\n */\n ngOnInit(): void {\n this.sources = this.formService.getSourcesExcludingFocussedTree();\n const value = this.formProperty.value; // Source is already assigned for this item.\n if (this.sources && this.sources.length > 0 && value) {\n const source = this.sources.find((el) => el.data.linkId === value);\n if (source) {\n this.model = source;\n this.formProperty.setValue(source.data.linkId, true);\n // Set answer type input\n this.formProperty.searchProperty('__$answerType').setValue(source.data.type, true);\n }\n }\n }\n\n /**\n * Handle user selection event\n * @param $event - Source tree node object\n */\n onSelect($event): void {\n this.formProperty.setValue($event.item.data.linkId, true);\n this.formProperty.searchProperty('__$answerType').setValue($event.item.data.type, true);\n }\n\n\n /**\n * Format the input after selection\n * @param item\n */\n inputFormatter(item: ITreeNode): string {\n let ret: string;\n if (item && item.data) {\n ret = item.data.text;\n }\n return ret;\n }\n\n\n /**\n * Format item in the results popup.\n * @param item\n */\n resultListItemFormatter(item: ITreeNode): string {\n let indent = '';\n let ret: string;\n if (item && item.data) {\n for (let i = 1; i < item.level; i++) {\n indent = indent + ' ';\n }\n ret = indent + item.data.text;\n }\n return ret;\n }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FhirService, FHIRServer} from '../../../services/fhir.service';\nimport {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\nimport {BehaviorSubject} from 'rxjs';\n\n// Search related inputs on the page.\ninterface State {\n fhirServer: FHIRServer;\n}\n\nenum ExportType {\n CREATE,\n UPDATE\n}\n\n@Component({\n selector: 'lfb-fhir-export-dlg',\n templateUrl: './fhir-export-dlg.component.html',\n styleUrls: ['./fhir-export-dlg.component.css']\n})\nexport class FhirExportDlgComponent implements OnInit {\n\n private _loading$ = new BehaviorSubject<boolean>(false);\n serverResponse: any;\n error: any;\n @Input()\n questionnaire: any;\n\n // State of the component.\n private _state: State = {\n fhirServer: this.fhirService.getFhirServer()\n };\n\n constructor(public fhirService: FhirService, private activeModal: NgbActiveModal) {\n }\n\n // Getters and setters\n get loading$() { return this._loading$.asObservable(); }\n get selectedFHIRServer() {return this._state.fhirServer;}\n set selectedFHIRServer(fhirServer: FHIRServer) {\n this.fhirService.setFhirServer(fhirServer);\n this._set({fhirServer});\n }\n\n /**\n * Set partial properties of search state.\n * @param patch - Partial state fields.\n * @private\n */\n private _set(patch: Partial<State>) {\n Object.assign(this._state, patch);\n }\n\n ngOnInit(): void {\n }\n\n /**\n * Handle dialog close\n * @param value\n */\n close(value: any): void {\n this.activeModal.close(value);\n }\n\n /**\n * Get FHIR server list.\n */\n getServerList(): FHIRServer [] {\n return this.fhirService.fhirServerList;\n }\n}\n","<div class=\"modal-header bg-primary text-white\">\n <h4 class=\"modal-title\" role=\"document\">FHIR Server Reply</h4>\n <button type=\"button\" class=\"close text-white\" aria-label=\"Close\" (click)=\"close(true)\">\n <span aria-hidden=\"true\">×</span>\n </button>\n</div>\n<div class=\"modal-body bg-light\" *ngIf=\"serverResponse\"><pre class=\"fhir-response\">{{serverResponse | json }}</pre></div>\n<div class=\"modal-body bg-light\" *ngIf=\"error\"><pre class=\"fhir-response\">{{error.message}}</pre></div>\n<div class=\"modal-footer btn-group-sm\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"close(true)\">Close</button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport {NgxSchemaFormComponent} from './ngx-schema-form/ngx-schema-form.component';\n\nconst routes: Routes = [\n {path: 'ngx', component: NgxSchemaFormComponent}\n ];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import {AfterViewInit, Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {fhir} from '../../../fhir';\nimport {FhirService} from '../../../services/fhir.service';\ndeclare var LForms: any;\n\n/**\n * Define data structure for dialog\n */\nexport interface PreviewData {\n questionnaire: fhir.Questionnaire;\n lfData?: any;\n}\n\n@Component({\n selector: 'lfb-preview-dlg',\n templateUrl: './preview-dlg.component.html',\n styleUrls: ['./preview-dlg.component.css']\n})\nexport class PreviewDlgComponent {\n\n @ViewChild('lhcForm', {read: ElementRef}) wcForm: ElementRef;\n\n constructor(\n private fhirService: FhirService,\n public dialogRef: MatDialogRef<PreviewDlgComponent>,\n @Inject(MAT_DIALOG_DATA) public data: PreviewData,\n ) {\n LForms.Util.setFHIRContext(this.fhirService.getSmartClient());\n }\n}\n"," <h2 mat-dialog-title class=\"bg-primary text-white pb-3 pt-3 pl-2 pr-2 rounded\">Preview of Questionnaire\n <button mat-icon-button class=\"close-button\" [mat-dialog-close]=\"true\">\n <mat-icon class=\"close-icon\">close</mat-icon>\n </button>\n </h2>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"View Rendered Form\">\n <ng-template matTabContent>\n <wc-lhc-form #lhcForm [questionnaire]=\"data?.questionnaire\"></wc-lhc-form>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"View Questionnaire JSON\">\n <pre class=\"fix-pre\">{{ data?.questionnaire | json }}</pre>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-button class=\"btn-primary\" [mat-dialog-close]=\"true\">Close</button>\n </mat-dialog-actions>\n\n","import { Component, OnInit } from '@angular/core';\nimport {SelectComponent} from '../select/select.component';\n\n@Component({\n selector: 'lfb-type',\n templateUrl: '../select/select.component.html'\n})\nexport class TypeComponent extends SelectComponent implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.formProperty.valueChanges.subscribe((type) => {\n const initialProp = this.formProperty.findRoot().getProperty('initial');\n const widget = initialProp.schema.widget;\n widget.id = (type === 'choice' || type === 'open-choice') ? 'hidden' : 'initial';\n });\n }\n\n}\n","import {AfterViewInit, Component, DoCheck, OnDestroy, OnInit} from '@angular/core';\nimport {TableComponent} from '../table/table.component';\nimport {fhir} from '../../../fhir';\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport {TreeService} from '../../../services/tree.service';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'lfb-answer-option',\n templateUrl: '../table/table.component.html',\n styleUrls: ['../table/table.component.css', './answer-option.component.css']\n})\nexport class AnswerOptionComponent extends TableComponent implements AfterViewInit, OnInit, OnDestroy {\n\n static ORDINAL_URI = 'http://hl7.org/fhir/StructureDefinition/ordinalValue';\n\n subscriptions: Subscription [] = [];\n constructor(private treeService: TreeService) {\n super();\n }\n\n ngOnInit() {\n super.ngOnInit();\n const repeatProp = this.formProperty.findRoot().getProperty('repeats');\n this.setSelectionType(repeatProp.value);\n const sub = repeatProp.valueChanges.subscribe((isRepeating) => {this.setSelectionType(isRepeating);});\n this.subscriptions.push(sub);\n }\n\n\n /**\n * Set row selection type, i.e multiple selections or single selection\n * @param isRepeat - Repeat indicates multiple selections, set in 'repeat' field.\n */\n setSelectionType(isRepeat: boolean) {\n if(isRepeat) {\n this.rowSelectionType = 'checkbox';\n }\n else {\n this.rowSelectionType = 'radio';\n }\n }\n\n\n /**\n * Initialize\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n const repeatProp = this.formProperty.findRoot().getProperty('repeats');\n this.setSelectionType(repeatProp.value);\n let sub = repeatProp.valueChanges.subscribe((isRepeating) => {this.setSelectionType(isRepeating);});\n this.subscriptions.push(sub);\n const aOptions = this.formProperty.value;\n const initials = this.formProperty.findRoot().getProperty('initial').value;\n this.setDefaultSelections(initials || [], aOptions || []);\n this.setAnswerOptions(aOptions);\n sub = this.formProperty.valueChanges.subscribe((newValue) => {\n this.updateScoreExtensions(newValue);\n });\n this.subscriptions.push(sub);\n }\n\n\n /**\n * Setup answer options along with score column by reading scores form properties\n */\n setAnswerOptions(answerOptions: any []) {\n answerOptions?.forEach((option) => {\n if(option.valueCoding) {\n const scoreExt = option.extension?.find(ext => ext.url === AnswerOptionComponent.ORDINAL_URI);\n if(scoreExt) {\n option.valueCoding.__$score = scoreExt.valueDecimal;\n }\n }\n });\n if(answerOptions) {\n this.formProperty.setValue(answerOptions, true);\n }\n }\n\n\n /**\n * Compare two FHIR Coding objects.\n * Matching rules:\n * 1. When only code exists, match code\n * 2. When only display exists, match display\n * 2. When code and system exists, match both\n * 3. When code and display exists, match both\n * 4. When code, display and system exists, match all three.\n * @param coding1 - First coding object\n * @param coding2 - second coding object\n */\n isEqualCoding(coding1: fhir.Coding, coding2: fhir.Coding) {\n if(!coding1 && !coding2) {\n return true; // Match if both are undefined\n }\n\n if(!coding1 || !coding2) {\n return false; // null vs non-null;\n }\n\n let ret = false;\n if(coding1.code || coding2.code) {\n ret = coding1.code === coding2.code;\n }\n else if(coding1.display || coding2.display) {\n ret = coding1.display === coding2.display;\n }\n\n if(ret && (coding1.system || coding2.system)) {\n ret = coding1.system === coding2.system; // code/display and system are match\n }\n\n if (ret && (coding1.display || coding2.display)) {\n ret = coding1.display === coding1.display; // code and display are match\n }\n\n return ret;\n }\n\n\n /**\n * Set up defaults column reading 'initial' form properties.\n */\n setDefaultSelections(initialArray: any [], answerOptionArray: any []) {\n answerOptionArray.forEach((prop, index) => {\n const rowFromInitial = initialArray.find(initial => this.isEqualCoding(initial.valueCoding, prop.valueCoding));\n if(rowFromInitial) {\n if(this.rowSelectionType === 'radio')\n this.selectionRadio = index;\n else if(this.rowSelectionType === 'checkbox')\n this.selectionCheckbox[index] = true;\n }\n });\n this.radioSelection(null);\n }\n\n\n /**\n * Update extension form property with user input.\n *\n * @param score - Score from widget\n * @param index - Index of the row\n */\n updateScoreExtensions(options) {\n options?.forEach((option) => {\n const i = option.extension?.findIndex((ext) => ext.url === AnswerOptionComponent.ORDINAL_URI);\n const score = option.valueCoding?.__$score;\n const isAdd = score !== null && score !== undefined; // True is add, false is remove.\n if(isAdd && i < 0) {\n const scoreExt = {url: AnswerOptionComponent.ORDINAL_URI, valueDecimal: score};\n option.extension = option.extension || [];\n option.extension.push(scoreExt);\n }\n else if(isAdd && i >= 0) {\n option.extension[i].valueDecimal = score;\n }\n else if(i >= 0) {\n option.extension.splice(i, 1);\n }\n });\n }\n\n /**\n * Override method.\n * Handle user input for radio selection. Set initial form property value.\n */\n radioSelection(event) {\n super.radioSelection(event);\n if(this.rowSelectionType === 'radio') {\n if(event !== undefined && event !== null && !Number.isNaN(event)) {\n this.selectionRadio = event;\n }\n if(this.selectionRadio >= 0) {\n const initialProperty = this.formProperty.findRoot().getProperty('initial') as PropertyGroup;\n const valueCoding = JSON.parse(JSON.stringify(this.formProperty.value[this.selectionRadio].valueCoding));\n initialProperty.setValue([{valueCoding}], false);\n }\n }\n }\n\n\n /**\n * Override method.\n * Handle user input for checkboxes selection. Set initial form property value.\n */\n checkboxSelection(event) {\n super.checkboxSelection(event);\n const selectedCodings = [];\n this.selectionCheckbox.forEach((selected, index) => {\n if(selected) {\n const valueCoding = JSON.parse(JSON.stringify(this.formProperty.value[index].valueCoding));\n selectedCodings.push({valueCoding});\n }\n });\n const initialProperty = this.formProperty.searchProperty('/initial') as PropertyGroup;\n initialProperty.setValue(selectedCodings, false);\n // console.log(new AppJsonPipe().transform(this.formProperty.root.value));\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n}\n","/**\n * Customize array-widget from ngx-schema-form.\n */\nimport {AfterViewInit, Component, Input, OnInit} from '@angular/core';\nimport {ControlWidget} from '@lhncbc/ngx-schema-form';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'lfb-control-widget',\n template: `\n `,\n styles: [\n ]\n})\nexport class LfbControlWidgetComponent extends ControlWidget implements AfterViewInit {\n // Info icon\n faInfo = faInfoCircle;\n\n // Properties to customize the layout, typically read from widget layout json.\n @Input()\n nolabel = false;\n @Input()\n labelPosition;\n @Input()\n labelWidthClass: string;\n @Input()\n controlWidthClass: string;\n @Input()\n booleanControlled = false;\n @Input()\n booleanLabel: string;\n @Input()\n booleanControlledInitial = true;\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n const widget = this.formProperty.schema.widget;\n // Input is priority followed by widget definition and default\n this.labelPosition =\n this.labelPosition\n ? this.labelPosition\n : widget.labelPosition\n ? widget.labelPosition\n : 'top';\n // Apply width classes for only left positioned labels.\n this.labelWidthClass =\n this.labelPosition === 'left'\n ? (this.labelWidthClass\n ? this.labelWidthClass\n : (widget.labelWidthClass\n ? widget.labelWidthClass\n : 'col-sm'))\n : '';\n this.controlWidthClass =\n this.labelPosition === 'left'\n ? (this.controlWidthClass\n ? this.controlWidthClass\n : (widget.controlWidthClass\n ? widget.controlWidthClass\n : 'col-sm'))\n : '';\n this.booleanControlled = this.booleanControlled ? this.booleanControlled : !!widget.booleanControlled;\n\n this.booleanControlledInitial = widget.booleanControlledInitial !== undefined ?\n widget.booleanControlledInitial : this.booleanControlledInitial; // If not defined, show the control.\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport {LfbArrayWidgetComponent} from '../lfb-array-widget/lfb-array-widget.component';\nimport {TableComponent} from '../table/table.component';\nimport {PropertyGroup} from '@lhncbc/ngx-schema-form/lib/model';\nimport {fhir} from '../../../fhir';\nimport {RestrictionOperatorService} from '../../../services/restriction-operator.service';\nimport {AcceptChange} from '../restrictions-operator/restrictions-operator.component';\n\n/**\n * Restrictions are based on table component.\n * Combines maxLength field which is part of standard FHIR with SDC extensions.\n */\n@Component({\n selector: 'lfb-restrictions',\n templateUrl: '../table/table.component.html',\n styleUrls: ['../table/table.component.css'],\n providers: [RestrictionOperatorService] // A service for this instance of component.\n})\nexport class RestrictionsComponent extends TableComponent implements OnInit {\n\n // Map display strings and urls to restrictions.\n static optionsDef = {\n maxLength: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/maxLength',\n display: 'Maximum length'\n },\n minLength: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/minLength',\n display: 'Minimum length'\n },\n regex: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/regex',\n display: 'Regex pattern'\n },\n minValue: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/minValue',\n display: 'Minimum value'\n },\n maxValue: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/maxValue',\n display: 'Maximum value'\n },\n maxSize: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/maxSize',\n display: 'Maximum size'\n },\n mimeType: {\n extUrl: 'http://hl7.org/fhir/StructureDefinition/mimeType',\n display: 'Mime type'\n }\n };\n\n static stringOptions = RestrictionsComponent.getOptions(['maxLength', 'minLength', 'regex']);\n static numberOptions = RestrictionsComponent.getOptions(['maxValue', 'minValue', 'maxLength', 'minLength']);\n static attachOptions = RestrictionsComponent.getOptions(['maxSize', 'mimeType']);\n\n static typeToOptions = {\n decimal: RestrictionsComponent.numberOptions,\n integer: RestrictionsComponent.numberOptions,\n date: RestrictionsComponent.numberOptions,\n dateTime: RestrictionsComponent.numberOptions,\n time: RestrictionsComponent.numberOptions,\n string: RestrictionsComponent.stringOptions,\n text: RestrictionsComponent.stringOptions,\n attachment: RestrictionsComponent.attachOptions\n };\n\n // Map extension urls to options.\n static extUrlToOptionsMap = ((): any => {\n const ret = {};\n Object.keys(RestrictionsComponent.optionsDef).forEach((k) => {\n const url = RestrictionsComponent.optionsDef[k].extUrl;\n ret[url] = k;\n })\n return ret;\n })();\n\n // maxLength = -1;\n appliedOptions = [];\n dataType: string;\n\n selectedOptions: Set<string> = new Set<string>();\n\n /**\n * Get list of optionsDef objects for list of options.\n * @param optKeys - List of keys as defined in this.optionsDef.\n */\n static getOptions(optKeys: string[]) {\n return optKeys.map((opt) => {\n return RestrictionsComponent.optionsDef[opt];\n });\n }\n\n constructor(private restrictionOperatorService: RestrictionOperatorService) {\n super();\n }\n\n\n ngOnInit(): void {\n super.ngOnInit();\n /*\n let sub = this.formProperty.root.getProperty('maxLength').valueChanges.subscribe((maxLength) => {\n this.maxLength = (maxLength > 0 || maxLength > 0) ? maxLength : -1;\n });\n this.subscriptions.push(sub);\n */\n const sub = this.formProperty.root.getProperty('type').valueChanges.subscribe((type) => {\n this.dataType = type;\n this.appliedOptions = RestrictionsComponent.typeToOptions[type];\n });\n this.subscriptions.push(sub);\n const restrictions = this.getRestrictions(this.formProperty.root, this.appliedOptions);\n this.updateSelectedOptions(restrictions); // Cache the selections.\n\n this.formProperty.setValue(restrictions, true);\n this.formProperty.valueChanges.subscribe((restrictionsArray) => {\n this.updateSelectedOptions(restrictionsArray); // Reset cache.\n const extensionProperty = this.formProperty.root.getProperty('extension');\n this.updateRelevantExtensions(extensionProperty.value, restrictionsArray);\n extensionProperty.setValue(extensionProperty.value, true);\n });\n\n // Watch changes in operator to reject unwanted selections.\n this.restrictionOperatorService.subscribe((change: AcceptChange) => {\n if(this.selectedOptions.has(change.newValue)) {\n change.reject = true;\n }\n });\n }\n\n /**\n * Reset cache of selections\n * @param restrictions - Array of restriction objects.\n */\n updateSelectedOptions(restrictions ) {\n this.selectedOptions.clear();\n restrictions?.forEach((res) => {\n this.selectedOptions.add(res.operator);\n });\n }\n\n /**\n * Get list of restrictions reading the fhir extensions and maxLength.\n * @param rootProperty - Root form property which represents an item level data.\n * @param appliedOptions - The options that are applicable to selected data type.\n */\n getRestrictions(rootProperty: PropertyGroup, appliedOptions: any []): any [] {\n const ret = [];\n this.selectedOptions.clear();\n const maxLength = rootProperty.getProperty('maxLength').value;\n if(maxLength) {\n ret.push({operator: 'maxLength', value: `${maxLength}`});\n this.selectedOptions.add('maxLength');\n }\n const extensions = rootProperty.getProperty('extension').value;\n const extensionsFound = extensions?.filter((el) => {\n return !!appliedOptions?.find((opt) => {\n return opt.extUrl === el.url;\n });\n });\n extensionsFound?.forEach((ext) => {\n const restriction = this.getRestrictionValue(ext);\n if(restriction) {\n ret.push(restriction);\n this.selectedOptions.add(restriction.operator);\n }\n });\n return ret;\n }\n\n /**\n * Return object with relevant extension url as key and extension's index in array as value\n * @param extensions - Full array of fhir extensions belonging to the item.\n */\n getRelevantExtensionIndices(extensions: fhir.Extension []): any [] {\n let ret: any = null;\n Object.keys(RestrictionsComponent.optionsDef).forEach((opt) => {\n const index = extensions?.findIndex((ext) => {\n return ext.url === RestrictionsComponent.optionsDef[opt].extUrl;\n });\n if(index >= 0) {\n if(!ret) {\n ret = {};\n }\n ret[extensions[index].url] = index;\n }\n });\n return ret;\n }\n\n /**\n * Max length is not part of extensions.\n * @param maxLength - String representation of input value.\n */\n updateMaxLength(maxLength: string) {\n const val: number = maxLength ? parseInt(maxLength, 0) : null;\n this.formProperty.root.getProperty('maxLength').setValue(val);\n }\n\n /**\n * Update item level fhir extensions array with relevant restrictions.\n * @param extensions - Array of item level extensions.\n * @param restrictions - Arary of internally defined restriction objects.\n */\n updateRelevantExtensions(extensions: fhir.Extension [], restrictions: any []) {\n const indices = this.getRelevantExtensionIndices(extensions);\n Object.keys(RestrictionsComponent.optionsDef).forEach((opt) => {\n let ext: fhir.Extension;\n const extUrl = RestrictionsComponent.optionsDef[opt].extUrl;\n const restriction = restrictions.find((r) => r.operator === opt);\n if(opt === 'maxLength') {\n this.updateMaxLength(restriction?.value || null);\n }\n else if(restriction?.value) {\n if(indices && indices[extUrl] !== undefined && indices[extUrl] !== null) {\n // Update\n ext = extensions[indices[extUrl]];\n for(const key in ext) {\n if(/^value/.test(key)) delete ext[key];\n }\n }\n else {\n // new\n ext = {url: extUrl};\n extensions.push(ext);\n }\n const fieldInfo = this.getValueFieldName(opt, this.dataType);\n ext[fieldInfo.fieldName] = this.getValue(restriction.value, fieldInfo.fieldType);\n }\n else if(indices && indices[extUrl] !== undefined && indices[extUrl] !== null) {\n // delete\n extensions.splice(indices[extUrl], 1);\n }\n });\n }\n\n /**\n * Convert to string representation of value to appropriate value\n * @param value - String representation of value.\n * @param valueType - fhir data type of the value.\n */\n getValue(value: string, valueType: string): number | string {\n let ret: number | string = value;\n switch (valueType) {\n case 'integer':\n ret = parseInt(value, 10);\n break;\n case 'decimal':\n ret = parseFloat(value);\n break;\n case 'date':\n case 'dateTime':\n case 'time':\n ret = (new Date(value)).toISOString();\n }\n return ret;\n }\n\n\n /**\n * Given a fhir extension, convert to restriction object.\n * @param ext - fhir extension representing a restriction.\n */\n getRestrictionValue(ext: fhir.Extension) {\n let ret = null;\n const operator = RestrictionsComponent.extUrlToOptionsMap[ext.url];\n const valField = this.getValueFieldName(operator, this.dataType);\n if(valField.fieldName) {\n ret = {operator, value: `${ext[valField.fieldName]}`};\n }\n return ret;\n }\n\n\n /**\n * Return value[x] field based on option and data type.\n * @param option - 'maxLength'|'minLength'|'maxSize'|'minValue'|'maxValue'|'mimeType'|'regex'\n * @param type - one of the fhir data types.\n */\n getValueFieldName(option: string, type: string): any {\n const ret = {fieldName: '', fieldType: ''};\n switch (option) {\n case 'minLength':\n case 'maxSize':\n ret.fieldName = 'valueInteger';\n ret.fieldType = 'integer';\n break;\n\n case 'regex':\n ret.fieldName = 'valueString';\n ret.fieldType = 'string';\n break;\n\n case 'mimeType':\n ret.fieldName = 'valueCode';\n ret.fieldType = 'string';\n break;\n\n case 'minValue':\n case 'maxValue':\n ret.fieldName = type ? 'value' + type.charAt(0).toUpperCase() + type.slice(1) : '';\n ret.fieldType = type;\n break;\n }\n return ret;\n }\n}\n","/**\n * General purpose message dialog box.\n */\nimport { Component, OnInit, Input } from '@angular/core';\nimport { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nexport enum MessageType {\n INFO,\n WARNING,\n DANGER\n}\n\n@Component({\n selector: 'lfb-message-dlg',\n template: `\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{title}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"activeModal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <p>{{message}}</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"activeModal.close('Close click')\">Close</button>\n </div>\n `,\n styles: [\n ]\n})\nexport class MessageDlgComponent {\n\n\n @Input()\n title: string;\n @Input()\n message: string;\n @Input()\n type?: MessageType = MessageType.INFO;\n @Input()\n options?: any;\n\n\n constructor(public activeModal: NgbActiveModal) {}\n}\n\n\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"],"sourceRoot":"webpack:///"}
|