Skip to content

Commit

Permalink
Merge pull request #16 from jy95/new-features
Browse files Browse the repository at this point in the history
feat: New features
  • Loading branch information
jy95 authored Apr 2, 2024
2 parents d5d9b82 + a1526ee commit 8ca473b
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 4 deletions.
26 changes: 26 additions & 0 deletions __tests__/api.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@ describe("API scenarios", () => {
},
};

let language1 = dosagesEn.getLanguage();
let language2 = dosagesFr.getLanguage();

let result1 = dosagesEn.fromDosageToText(dosage);
let result2 = dosagesFr.fromDosageToText(dosage);
expect(language1).not.toBe(language2);
expect(result1).not.toBe(result2);
});

Expand All @@ -48,9 +52,12 @@ describe("API scenarios", () => {
text: "Test string",
};

let order1 = dosagesEn.getDisplayOrder();
let result1 = dosagesEn.fromDosageToText(dosage);
dosagesEn.changeDisplayOrder(["text"]);
let order2 = dosagesEn.getDisplayOrder();
let result2 = dosagesEn.fromDosageToText(dosage);
expect(order1).not.toBe(order2);
expect(result1).not.toBe(result2);
});

Expand All @@ -70,4 +77,23 @@ describe("API scenarios", () => {
let result2 = dosagesEn.fromDosageToText(dosage);
expect(result1).not.toBe(result2);
});

test("changeDisplaySeparator must be applied", async () => {
let sep1 = dosagesEn.getDisplaySeparator();
dosagesEn.changeDisplaySeparator(" | ");
let sep2 = dosagesEn.getDisplaySeparator();
expect(sep1).not.toBe(sep2);
});

test("changeDateTimeFormatOptions must be applied", async () => {
let opts1 = dosagesEn.getDateTimeFormatOptions();
dosagesEn.changeDateTimeFormatOptions({
day: "2-digit",
hour: "numeric",
minute: "numeric",
second: "2-digit",
});
let opts2 = dosagesEn.getDateTimeFormatOptions();
expect(opts1).not.toBe(opts2);
});
});
14 changes: 14 additions & 0 deletions __tests__/corner_cases.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,18 @@ describe("Corner cases", () => {
let result = dosageUtils.fromDosageToText(dosage);
expect(result).toBe("at a rate of 3 pills per ");
});

test("maxDosePerPeriod - no denominator", () => {
const dosage: Dosage = {
maxDosePerPeriod: {
numerator: {
value: 3,
unit: "pills",
},
},
};

let result = dosageUtils.fromDosageToText(dosage);
expect(result).toBe("up to a maximum of 3 pills per ");
});
});
65 changes: 61 additions & 4 deletions src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,22 +117,70 @@ export class FhirDosageUtils {
return this.i18nInstance.changeLanguage(lng);
}

/**
* Get current language
*/
getLanguage() {
return this.config.language;
}

/**
* To change display order
*/
changeDisplayOrder(order: DisplayOrder[]): void {
changeDisplayOrder(order: DisplayOrder[]) {
this.config = {
...this.config,
displayOrder: order,
};
}

/**
* Turn a FHIR Dosage object into text
* Get display order
*/
fromDosageToText(dos: Dosage): string {
getDisplayOrder() {
return this.config.displayOrder;
}

/**
* Get display separator
*/
getDisplaySeparator() {
return this.config.displaySeparator;
}

/**
* Set display separator
*/
changeDisplaySeparator(sep: string) {
this.config = {
...this.config,
displaySeparator: sep,
};
}

/**
* Get date time format options
*/
getDateTimeFormatOptions() {
return this.config.dateTimeFormatOptions;
}

/**
* Set date time format options
*/
changeDateTimeFormatOptions(opts: Intl.DateTimeFormatOptions) {
this.config = {
...this.config,
dateTimeFormatOptions: opts,
};
}

/**
* From a single dosage, extract specific field(s) requested by user.
* Some use cases could request to split part of the object for given needs (quantity and timing separately)
*/
getFields(dos: Dosage, ...order: DisplayOrder[]): string {
// iterate on each key and generate a string from each part
let order = this.config.displayOrder;
let parts = order
.map((entry) =>
fromDisplayOrderToResult({
Expand All @@ -148,6 +196,15 @@ export class FhirDosageUtils {
return parts.join(this.config.displaySeparator);
}

/**
* Turn a FHIR Dosage object into text
*/
fromDosageToText(dos: Dosage): string {
// iterate on each key and generate a string from each part
let order = this.config.displayOrder;
return this.getFields(dos, ...order);
}

/**
* Turn multiple FHIR Dosage object into text
*/
Expand Down

0 comments on commit 8ca473b

Please sign in to comment.