oro-sdk 6.0.2 → 6.2.0
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.
- package/dist/helpers/workflow.d.ts +8 -0
- package/dist/oro-sdk.cjs.development.js +84 -34
- package/dist/oro-sdk.cjs.development.js.map +1 -1
- package/dist/oro-sdk.cjs.production.min.js +1 -1
- package/dist/oro-sdk.cjs.production.min.js.map +1 -1
- package/dist/oro-sdk.esm.js +84 -35
- package/dist/oro-sdk.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/helpers/patient-registration.ts +12 -8
- package/src/helpers/workflow.ts +52 -7
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"version": "6.0
|
2
|
+
"version": "6.2.0",
|
3
3
|
"main": "dist/index.js",
|
4
4
|
"typings": "dist/index.d.ts",
|
5
5
|
"files": [
|
@@ -55,7 +55,7 @@
|
|
55
55
|
"form-data": "^4.0.0",
|
56
56
|
"formdata-node": "^4.3.1",
|
57
57
|
"idb-keyval": "^5.0.6",
|
58
|
-
"oro-sdk-apis": "~6.0
|
58
|
+
"oro-sdk-apis": "~6.1.0",
|
59
59
|
"oro-toolbox": "0.0.6",
|
60
60
|
"uuid": "^8.3.2"
|
61
61
|
}
|
@@ -21,6 +21,7 @@ import {
|
|
21
21
|
WorkflowData,
|
22
22
|
} from 'oro-sdk-apis'
|
23
23
|
import {
|
24
|
+
detectChangesInWorkflowAnswers,
|
24
25
|
filterTriggeredAnsweredWithKind,
|
25
26
|
getImagesFromIndexDb,
|
26
27
|
getWorkflowDataByCategory,
|
@@ -81,6 +82,9 @@ export async function registerPatient(
|
|
81
82
|
const stepsTotalNum = 9
|
82
83
|
let currentStep: number
|
83
84
|
|
85
|
+
// toggle all changed statuses if this workflow has previous/revision data
|
86
|
+
workflow = detectChangesInWorkflowAnswers(workflow)
|
87
|
+
|
84
88
|
for (; retry > 0; retry--) {
|
85
89
|
try {
|
86
90
|
currentStep = 0
|
@@ -168,10 +172,10 @@ export async function registerPatient(
|
|
168
172
|
oroClient,
|
169
173
|
onProgress
|
170
174
|
? {
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
+
onProgress,
|
176
|
+
currentStep,
|
177
|
+
stepsTotalNum,
|
178
|
+
}
|
175
179
|
: undefined
|
176
180
|
).catch((err) => {
|
177
181
|
console.error('[SDK: registration] Some errors happened during image upload', err)
|
@@ -246,9 +250,9 @@ export async function registerPatient(
|
|
246
250
|
|
247
251
|
if (errorsThrown.length > 0) throw errorsThrown
|
248
252
|
|
249
|
-
if(
|
253
|
+
if (consult.statusMedical === MedicalStatus.Assigning) {
|
250
254
|
//hopefully svelte query received all updates
|
251
|
-
console.warn(
|
255
|
+
console.warn('Consult assignation took too much time, moving to new anyway')
|
252
256
|
}
|
253
257
|
// Deem the consultation as ready
|
254
258
|
await oroClient.consultClient.updateConsultByUUID(consult.uuid, {
|
@@ -443,11 +447,11 @@ async function storeImageAliases(
|
|
443
447
|
Math.round(
|
444
448
|
((progress.currentStep + 1) / progress.stepsTotalNum -
|
445
449
|
progress.currentStep / progress.stepsTotalNum) *
|
446
|
-
|
450
|
+
100
|
447
451
|
) / 100
|
448
452
|
progress.onProgress(
|
449
453
|
progress.currentStep / progress.stepsTotalNum +
|
450
|
-
|
454
|
+
progressStepValue * (storedImagesNum / totalImagesNum),
|
451
455
|
'store_images',
|
452
456
|
{
|
453
457
|
storedImagesNum,
|
package/src/helpers/workflow.ts
CHANGED
@@ -4,6 +4,7 @@ import {
|
|
4
4
|
MetadataCategory,
|
5
5
|
PopulatedWorkflowData,
|
6
6
|
PopulatedWorkflowField,
|
7
|
+
PreviousAnswerData,
|
7
8
|
QuestionData,
|
8
9
|
SelectedAnswerData,
|
9
10
|
SelectedAnswersData,
|
@@ -85,14 +86,30 @@ export async function getWorkflowDataByCategory(
|
|
85
86
|
|
86
87
|
const fields: Record<string, PopulatedWorkflowField> = {}
|
87
88
|
|
89
|
+
let answersPerPage = (workflowData.selectedAnswers ?? [])
|
90
|
+
.map((pageAnswers, _) =>
|
91
|
+
Object.entries(pageAnswers)
|
92
|
+
.map(([k, v]) => [k, v, undefined]) as [string, SelectedAnswerData, PreviousAnswerData | undefined][])
|
93
|
+
|
94
|
+
if (workflowData.previousAnswers) {
|
95
|
+
// Since the selectedAnswers and previousAnswers should be a 1-1, we can map them together
|
96
|
+
answersPerPage = answersPerPage
|
97
|
+
.map((pageAnswers, pageIndex) => pageAnswers
|
98
|
+
.map(([questionId, v]): [string, SelectedAnswerData, PreviousAnswerData | undefined] => {
|
99
|
+
if (workflowData.previousAnswers && workflowData.previousAnswers[pageIndex][questionId])
|
100
|
+
return [questionId, v, workflowData.previousAnswers[pageIndex][questionId]]
|
101
|
+
return [questionId, v, undefined]
|
102
|
+
}
|
103
|
+
))
|
104
|
+
}
|
105
|
+
|
88
106
|
// Generates the answers of the specified category and adds the appropriate values if any are missing
|
89
107
|
return Promise.all(
|
90
|
-
|
91
|
-
.
|
92
|
-
.
|
93
|
-
.
|
94
|
-
|
95
|
-
return populateWorkflowField(triggeredQuestions[k], v).then((populatedValue) => {
|
108
|
+
answersPerPage
|
109
|
+
.flat(1) // remove the pages, we want the answers all together
|
110
|
+
.filter(([k]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)
|
111
|
+
.map(([k, v, p]) => {
|
112
|
+
return populateWorkflowField(triggeredQuestions[k], v, p).then((populatedValue) => {
|
96
113
|
fields[k] = populatedValue
|
97
114
|
})
|
98
115
|
})
|
@@ -127,7 +144,8 @@ export async function getImagesFromIndexDb(answer: SelectedAnswerData): Promise<
|
|
127
144
|
*/
|
128
145
|
async function populateWorkflowField(
|
129
146
|
question: QuestionData,
|
130
|
-
answerValue: SelectedAnswerData
|
147
|
+
answerValue: SelectedAnswerData,
|
148
|
+
previousAnswer?: PreviousAnswerData
|
131
149
|
): Promise<PopulatedWorkflowField> {
|
132
150
|
let answer: any
|
133
151
|
let displayedAnswer: string | string[] | undefined = undefined
|
@@ -175,6 +193,7 @@ async function populateWorkflowField(
|
|
175
193
|
return Promise.resolve({
|
176
194
|
answer,
|
177
195
|
displayedAnswer,
|
196
|
+
previousAnswer,
|
178
197
|
kind: question.kind,
|
179
198
|
})
|
180
199
|
}
|
@@ -297,3 +316,29 @@ export function fillWorkflowFromPopulatedWorkflow(workflow: WorkflowData, popula
|
|
297
316
|
|
298
317
|
return filledWorkflow
|
299
318
|
}
|
319
|
+
|
320
|
+
/**
|
321
|
+
* Checks and toggles the changed status for every answer in the workflow
|
322
|
+
* by comparing the previous answer with the selected answer of the same question
|
323
|
+
*
|
324
|
+
* @param workflow
|
325
|
+
* @returns the workflow with the updated `changed` statuses
|
326
|
+
*/
|
327
|
+
export function detectChangesInWorkflowAnswers(workflow: WorkflowData): WorkflowData {
|
328
|
+
return {
|
329
|
+
...workflow,
|
330
|
+
previousAnswers: workflow.previousAnswers ?
|
331
|
+
workflow.previousAnswers
|
332
|
+
.map((pageAnswers, pageId) => Object.fromEntries(Object.entries(pageAnswers).map(([question, answer]) => {
|
333
|
+
let selectedAnswer = undefined
|
334
|
+
if (workflow.selectedAnswers && workflow.selectedAnswers[pageId][question])
|
335
|
+
selectedAnswer = workflow.selectedAnswers[pageId][question]
|
336
|
+
let changed = !!selectedAnswer && !equalsAnswer(selectedAnswer, answer.previousAnswer)
|
337
|
+
return [question, { ...answer, changed }]
|
338
|
+
}))) : undefined
|
339
|
+
}
|
340
|
+
}
|
341
|
+
|
342
|
+
function equalsAnswer<T = SelectedAnswerData | WorkflowUploadedImage[]>(answer1: T, answer2: T): boolean {
|
343
|
+
return JSON.stringify(answer1) === JSON.stringify(answer2)
|
344
|
+
}
|