adding support for terminiology server.

This commit is contained in:
Jason Kulatunga 2023-03-06 07:59:28 -08:00
parent f5b0fb59d7
commit 0fa4e78e06
No known key found for this signature in database
3 changed files with 46 additions and 5 deletions

View File

@ -21,6 +21,7 @@ export enum NlmSearchType {
Procedure = 'Procedure',
Vaccine = 'Vaccine',
Countries = 'Countries',
PrePopulated = 'PrePopulated'
}
@ -44,8 +45,10 @@ export enum NlmSearchType {
})
export class NlmTypeaheadComponent implements ControlValueAccessor {
@Input() searchType: NlmSearchType = NlmSearchType.Condition;
@Input() debugMode: Boolean = false;
@Input() openOnFocus: Boolean = false;
@Input() debugMode: Boolean = false; //if true, will show the debug panel
@Input() openOnFocus: Boolean = false; //if true, will display results on focus
@Input() idResult: Boolean = false; //if true, will return the id of the result instead of an object, implies editable = false
@Input() editable: Boolean = true; //if true, will allow the user to enter values not in the list
@Input() prePopulatedOptions: NlmSearchResults[] = []
@ViewChild('instance', { static: true }) instance: NgbTypeahead;
@ -79,6 +82,11 @@ export class NlmTypeaheadComponent implements ControlValueAccessor {
case NlmSearchType.Condition:
searchOpFn = this.nlmClinicalTableSearchService.searchCondition
break
case NlmSearchType.Countries:
searchOpFn = this.nlmClinicalTableSearchService.searchCountries
this.idResult = true
this.editable = false
break
case NlmSearchType.MedicalContactIndividualProfession:
searchOpFn = this.nlmClinicalTableSearchService.searchMedicalContactIndividualProfession
this.openOnFocus = true
@ -151,15 +159,25 @@ export class NlmTypeaheadComponent implements ControlValueAccessor {
this.markAsTouched()
console.log("bubbling modelChange event", event)
if(typeof event === 'string'){
if(this.idResult){
this.onChange(null);
return
}
if (event.length === 0) {
this.onChange(null);
} else {
this.onChange({text: event});
}
} else{
if(this.idResult){
this.onChange(event.id);
return
}
else {
this.onChange(event);
}
}
}
// If `openOnFocus` is true, we want to show dropdown/typeahead when the field is clicked or in focus, even if there is no text entered.
//See:https://ng-bootstrap.github.io/#/components/typeahead/examples#focus

View File

@ -457,7 +457,7 @@
</div><!-- col -->
<div class="col-6 mg-t-10 mg-lg-t-0">
<p class="mg-b-10">Country</p>
<input formControlName="country" class="form-control" placeholder="Country" type="text">
<app-nlm-typeahead formControlName="country" searchType="Countries" [debugMode]="debugMode"></app-nlm-typeahead>
</div><!-- col -->
</ng-container>
</ng-container>
@ -531,7 +531,7 @@
</div><!-- col -->
<div class="col-6 mg-t-10 mg-lg-t-0">
<p class="mg-b-10">Country</p>
<input formControlName="country" class="form-control" placeholder="Country" type="text">
<app-nlm-typeahead formControlName="country" searchType="Countries" [debugMode]="debugMode"></app-nlm-typeahead>
</div><!-- col -->
</ng-container>
</ng-container>

View File

@ -1200,6 +1200,29 @@ export class NlmClinicalTableSearchService {
return of(result)
}
searchCountries(searchTerm: string): Observable<NlmSearchResults[]> {
//https://tx.fhir.org/r4/ValueSet/$expand?_format=json&filter=Canada&url=http://hl7.org/fhir/ValueSet/iso3166-1-2
let queryParams = {
'_format': 'json',
'filter':searchTerm,
'url': 'http://hl7.org/fhir/ValueSet/iso3166-1-2'
}
return this._httpClient.get<any>(`https://tx.fhir.org/r4/ValueSet/$expand`, {params: queryParams})
.pipe(
map((response) => {
return (response.expansion.contains || []).map((valueSetItem):NlmSearchResults => {
return {
id: valueSetItem.code,
identifier: [valueSetItem],
text: valueSetItem.display,
}
})
})
)
}
searchWikipediaType(searchTerm: string): Observable<NlmSearchResults[]> {
let queryParams = {