Skip to content

Commit 6dd6e53

Browse files
committed
add preservation of definition attribute when getResponse() is called
1 parent 01c1cf4 commit 6dd6e53

4 files changed

Lines changed: 87 additions & 0 deletions

File tree

packages/smart-forms-renderer/src/test/manageForm.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ describe('manageForm utils', () => {
366366
});
367367

368368
describe('getResponse', () => {
369+
369370
it('should get response and clean internal IDs', () => {
370371
const mockSourceQuestionnaire = {
371372
resourceType: 'Questionnaire' as const,
@@ -394,6 +395,7 @@ describe('manageForm utils', () => {
394395

395396
mockUpdateQuestionnaireResponse.mockReturnValue(mockCleanResponse);
396397

398+
debugger;
397399
const result = getResponse();
398400

399401
expect(mockUpdateQuestionnaireResponse).toHaveBeenCalledWith(

packages/smart-forms-renderer/src/test/removeRepeatId.test.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,89 @@ describe('removeRepeatId', () => {
7878
expect(result.text).toBe('Test item text');
7979
});
8080

81+
it('should preserve definition from qItem when present', () => {
82+
const qItem: QuestionnaireItem = {
83+
linkId: 'test-item',
84+
type: 'boolean',
85+
text: 'Has triple negative breast cancer',
86+
definition:
87+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
88+
};
89+
90+
const qrItem: QuestionnaireResponseItem = {
91+
linkId: 'test-item',
92+
definition:
93+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]',
94+
text: 'Has triple negative breast cancer',
95+
answer: [{ valueBoolean: true }]
96+
};
97+
98+
const result = removeInternalRepeatIdsRecursive(qItem, qrItem) as QuestionnaireResponseItem;
99+
100+
expect(result.definition).toBe(
101+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
102+
);
103+
});
104+
105+
it('should preserve definition on nested group and child items', () => {
106+
const qItem: QuestionnaireItem = {
107+
linkId: '1',
108+
type: 'group',
109+
text: 'IsTNBCFeature',
110+
definition: 'http://example.org/fhir/StructureDefinition/IsTNBCFeature',
111+
item: [
112+
{
113+
linkId: '1.1',
114+
type: 'boolean',
115+
text: 'Has triple negative breast cancer',
116+
definition:
117+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
118+
}
119+
]
120+
};
121+
122+
const qrItem: QuestionnaireResponseItem = {
123+
linkId: '1',
124+
definition: 'http://example.org/fhir/StructureDefinition/IsTNBCFeature',
125+
text: 'IsTNBCFeature',
126+
item: [
127+
{
128+
linkId: '1.1',
129+
definition:
130+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]',
131+
text: 'Has triple negative breast cancer',
132+
answer: [{ valueBoolean: true }]
133+
}
134+
]
135+
};
136+
137+
const result = removeInternalRepeatIdsRecursive(qItem, qrItem) as QuestionnaireResponseItem;
138+
139+
expect(result.definition).toBe(
140+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature'
141+
);
142+
expect(result.item![0].definition).toBe(
143+
'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
144+
);
145+
});
146+
147+
it('should not include definition property when qItem has none', () => {
148+
const qItem: QuestionnaireItem = {
149+
linkId: 'test-item',
150+
type: 'string',
151+
text: 'No definition here'
152+
};
153+
154+
const qrItem: QuestionnaireResponseItem = {
155+
linkId: 'test-item',
156+
answer: [{ valueString: 'answer' }]
157+
};
158+
159+
const result = removeInternalRepeatIdsRecursive(qItem, qrItem) as QuestionnaireResponseItem;
160+
161+
expect(result).not.toHaveProperty('definition');
162+
});
163+
81164
it('should handle empty answers correctly', () => {
82165
const qItem: QuestionnaireItem = {
83166
linkId: 'test-item',

packages/smart-forms-renderer/src/utils/manageForm.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ export async function initialiseFhirClient(fhirClient: Client): Promise<void> {
239239
* @author Sean Fong
240240
*/
241241
export function getResponse(): QuestionnaireResponse {
242+
debugger;
242243
const cleanResponse = removeInternalIdsFromResponse(
243244
questionnaireStore.getState().sourceQuestionnaire,
244245
questionnaireResponseStore.getState().updatableResponse

packages/smart-forms-renderer/src/utils/removeRepeatId.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ function removeInternalRepeatIdsFromItem(
106106

107107
return {
108108
linkId: qItem.linkId,
109+
...(qItem.definition && { definition: qItem.definition }),
109110
...(qItem.text && { text: qItem.text }),
110111
...(childQrItems.length > 0 && { item: childQrItems }),
111112
...(updatedAnswers.length > 0 && { answer: updatedAnswers })

0 commit comments

Comments
 (0)