diff --git a/src/api/types.ts b/src/api/types.ts index 93e8fdf3..8cb2f8e6 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -254,3 +254,15 @@ export interface DataSource { */ toUuidAndDisplay(item: T): OpenmrsResource; } + +export interface Drug { + uuid: string; + display: string; + name: string; + retired?: boolean; + concept?: { + uuid: string; + display: string; + links: any[]; + }; +} diff --git a/src/datasources/drug-data-source.ts b/src/datasources/drug-data-source.ts new file mode 100644 index 00000000..555c853a --- /dev/null +++ b/src/datasources/drug-data-source.ts @@ -0,0 +1,19 @@ +import { openmrsFetch, OpenmrsResource } from '@openmrs/esm-framework'; +import { DataSource, Drug } from '../api/types'; + +export class DrugDataSource implements DataSource { + private readonly url = '/ws/rest/v1/drug?v=custom:(uuid,display)'; + + fetchData(searchTerm: string): Promise { + return openmrsFetch(searchTerm ? `${this.url}&q=${searchTerm}` : this.url).then(({ data }) => { + return data.results; + }); + } + + toUuidAndDisplay(drug: any): OpenmrsResource { + return { + uuid: drug.uuid, + display: drug.display, + }; + } +} diff --git a/src/registry/registry.ts b/src/registry/registry.ts index ba8fbf06..fa3ec5f7 100644 --- a/src/registry/registry.ts +++ b/src/registry/registry.ts @@ -22,7 +22,7 @@ import { OHRIFormsStore } from '../constants'; import OHRIExtensionParcel from '../components/extension/ohri-extension-parcel.component'; import { EncounterDatetimeHandler } from '../submission-handlers/encounterDatetimeHandler'; import { UISelectExtended } from '../components/inputs/ui-select-extended/ui-select-extended'; - +import { DrugDataSource } from '../datasources/drug-data-source'; export interface RegistryItem { id: string; component: any; @@ -198,7 +198,12 @@ const fieldValidators: Array = [ }, ]; -const dataSources: Array = []; +const dataSources: Array = [ + { + id: 'drug', + component: new DrugDataSource(), + }, +]; export const getFieldComponent = renderType => { let lazy = baseFieldComponents.find(item => item.type == renderType || item?.alias == renderType)?.loadControl;