11import { dataDefs } from './common-data-defs.js' ;
22import { CookieUtils } from './CookieUtils.js' ;
3- import { connectAPIEndpoint } from "./common-lib.js"
3+ import { connectAPIEndpoint , hdsModel } from "./common-lib.js"
44
55
66export const patientLib = {
77 handleFormSubmit,
88 getFormTitle,
9- getFormContent,
9+ getFormPermanentContent,
10+ getFormHistorical,
1011 getHistoricalContent,
1112 connect,
1213 navSetData,
1314 navGetData,
14- getForms,
1515 navGetPages
1616}
1717
@@ -53,7 +53,7 @@ async function navGetPages(questionaryId) {
5353 label : 'Home' ,
5454 formKey : null
5555 } ] ;
56- const forms = await patientLib . getForms ( questionaryId ) ;
56+ const forms = await getForms ( questionaryId ) ;
5757 for ( const [ formKey , form ] of Object . entries ( forms ) ) {
5858 pages . push ( {
5959 type : form . type ,
@@ -69,41 +69,29 @@ async function navGetPages(questionaryId) {
6969// ---------------- form content ---------------- //
7070
7171function getFormTitle ( questionaryId ) {
72- return dataDefs . questionnaires [ questionaryId ] . title ;
72+ return dataDefs . v2questionnaires [ questionaryId ] . title ;
7373}
7474
7575async function getForms ( questionaryId ) {
76- return dataDefs . questionnaires [ questionaryId ] . forms ;
76+ return dataDefs . v2questionnaires [ questionaryId ] . forms ;
7777}
7878
79- /**
80- * Get Form content
81- * @param {string } questionaryId
82- * @param {string } formKey
83- * @param {Date } [date] - If editing content from existing date
84- * @returns
85- */
86- async function getFormContent ( questionaryId , formKey , date ) {
87- const form = dataDefs . questionnaires [ questionaryId ] . forms [ formKey ] ;
88- console . log ( '## getFormContent' , form , questionaryId , formKey ) ;
89- if ( form . type === 'permanent' ) {
90- return getFormExistingContent ( form ) ;
91- }
92- if ( form . type === 'recurring' ) {
93- return getFormRecurringContent ( form , date ) ;
94- }
95- return [ ] ;
96- }
9779
98- async function getFormRecurringContent ( form , date ) {
99- const formReccuringData = structuredClone ( form . content ) ;
100-
101- for ( let i = 0 ; i < formReccuringData . length ; i ++ ) {
102- const field = formReccuringData [ i ] ;
103- field . id = field . streamId + ':' + field . eventType ;
104- }
105- return formReccuringData ;
106-
80+ async function getFormHistorical ( questionaryId , formKey ) {
81+ const form = dataDefs . v2questionnaires [ questionaryId ] . forms [ formKey ] ;
82+ const formFields = form . itemKeys . map ( ( itemKey ) => {
83+ const itemDef = ( hdsModel ( ) . itemDefForKey ( itemKey ) ) ;
84+
85+ return {
86+ id : itemDef . key ,
87+ label : itemDef . data . label . en ,
88+ type : itemDef . data . type ,
89+ options : itemDef . data . options ,
90+ streamId : itemDef . data . streamId ,
91+ eventType : itemDef . eventTypes [ 0 ] // take first type by default for now
92+ }
93+ } ) ;
94+ return formFields ;
10795}
10896
10997// local copy of formProfileContent + actual values
@@ -112,77 +100,89 @@ async function getFormRecurringContent (form, date) {
112100 * @param {* } date
113101 * @returns
114102 */
115- async function getFormExistingContent ( form , date ) {
116- const formData = structuredClone ( form . content ) ;
117-
103+ async function getFormPermanentContent ( questionaryId , formKey ) {
104+ const form = dataDefs . v2questionnaires [ questionaryId ] . forms [ formKey ] ;
105+ // get formItems
106+ const formItemDefs = form . itemKeys . map ( ( itemKey ) => ( hdsModel ( ) . itemDefForKey ( itemKey ) ) ) ;
118107 // get the values from the API
119- const apiCalls = formData . map ( field => ( {
108+ const apiCalls = formItemDefs . map ( itemDef => ( {
120109 method : 'events.get' ,
121110 params : {
122- streams : [ field . streamId ] ,
123- types : [ field . eventType ] ,
111+ streams : [ itemDef . data . streamId ] ,
112+ types : itemDef . eventTypes ,
124113 limit : 1 ,
125114 }
126115 } ) ) ;
127116
117+ const formContent = [ ] ;
128118 const res = await connection . api ( apiCalls ) ;
129119 for ( let i = 0 ; i < res . length ; i ++ ) {
130120 const e = res [ i ] ;
131- const field = formData [ i ] ;
132- field . id = field . streamId + ':' + field . eventType ;
133- console . log ( '## getFormContent ' + i , e ) ;
121+ const itemDef = formItemDefs [ i ] ;
122+ const content = {
123+ id : itemDef . key ,
124+ type : itemDef . data . type ,
125+ label : itemDef . data . label . en ,
126+ options : itemDef . data . options ,
127+ itemDef,
128+ }
134129 if ( e . events && e . events . length > 0 ) {
135130 const event = e . events [ 0 ] ;
136- const valueAndTxt = valueAndTxtForField ( event . content , field ) ;
137- field . value = valueAndTxt . value ;
138- field . valueTxt = valueAndTxt . txt ;
139- field . eventId = event . id ; // will allow t track if the event is to be updated
131+ const valueAndTxt = valueAndTxtForField ( event , itemDef ) ;
132+ content . value = valueAndTxt . value ;
133+ content . valueTxt = valueAndTxt . txt ;
134+ content . eventId = event . id ; // will allow t track if the event is to be updated
140135 }
136+ formContent . push ( content ) ;
141137 }
142- return formData ;
138+ return formContent ;
143139} ;
144140
145141
146142async function getHistoricalContent ( questionaryId , formKey ) {
147- const formFields = dataDefs . questionnaires [ questionaryId ] . forms [ formKey ] . content ;
148- const tableHeaders = formFields . map ( field => ( {
149- fieldId : field . streamId + ':' + field . eventType ,
150- label : field . label ,
151- type : field . type
143+ const form = dataDefs . v2questionnaires [ questionaryId ] . forms [ formKey ] ;
144+ const itemDefs = form . itemKeys . map ( ( itemKey ) => ( hdsModel ( ) . itemDefForKey ( itemKey ) ) ) ;
145+ const tableHeaders = itemDefs . map ( itemDef => ( {
146+ fieldId : itemDef . key ,
147+ label : itemDef . data . label . en ,
148+ type : itemDef . data . type
152149 } ) ) ;
153150
154151 const valuesByDateStr = { } ;
155- function addEntry ( field , time , event ) {
156- const dateStr = ( new Date ( time * 1000 ) ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
152+ function addEntry ( event ) {
153+ const itemDef = hdsModel ( ) . itemDefForEvent ( event , false ) ;
154+ if ( itemDef == null ) {
155+ console . log ( 'Historical content -- unkown event' , event ) ;
156+ return ;
157+ }
158+ const dateStr = ( new Date ( event . time * 1000 ) ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
157159 if ( valuesByDateStr [ dateStr ] == null ) valuesByDateStr [ dateStr ] = {
158- dateNum : ( new Date ( dateStr ) ) . getTime ( ) / 100 ,
160+ dateNum : ( new Date ( dateStr ) ) . getTime ( ) / 1000 ,
159161 dateStr,
160162 } ;
161- const fieldId = field . streamId + ':' + field . eventType ;
162- const valueAndTxt = valueAndTxtForField ( event . content , field ) ;
163- valuesByDateStr [ dateStr ] [ fieldId ] = {
163+ const valueAndTxt = valueAndTxtForField ( event , itemDef ) ;
164+ valuesByDateStr [ dateStr ] [ itemDef . key ] = {
164165 value : valueAndTxt . value ,
165166 valueTxt : valueAndTxt . txt ,
166167 eventId : event . id
167168 }
168169 }
169170
170171 // get the values from the API
171- const apiCalls = formFields . map ( field => ( {
172+ const apiCalls = itemDefs . map ( itemDef => ( {
172173 method : 'events.get' ,
173174 params : {
174- streams : [ field . streamId ] ,
175- types : [ field . eventType ] ,
176- limit : 20 , // last 20 is enough for a demo
175+ streams : [ itemDef . data . streamId ] ,
176+ types : itemDef . eventTypes ,
177+ limit : 20 , // last 20 of each item is enough for a demo
177178 }
178179 } ) ) ;
179180 const res = await connection . api ( apiCalls ) ;
180181 for ( let i = 0 ; i < res . length ; i ++ ) {
181182 const e = res [ i ] ;
182- const field = formFields [ i ] ;
183183 if ( e . events ) {
184184 for ( const event of e . events ) {
185- addEntry ( field , event . time , event ) ;
185+ addEntry ( event ) ;
186186 }
187187 }
188188 }
@@ -192,37 +192,37 @@ async function getHistoricalContent(questionaryId, formKey) {
192192 return { tableHeaders, valuesByDate } ;
193193}
194194
195- function valueAndTxtForField ( eventContent , field ) {
196- if ( field . eventType === 'activity/plain' ) {
195+ function valueAndTxtForField ( event , itemDef ) {
196+ if ( event . type === 'activity/plain' ) {
197197 return { value : 'x' , txt : 'X' } ;
198198 }
199- if ( field . type === 'date' && eventContent != null ) {
199+ if ( itemDef . data . type === 'date' && event . content != null ) {
200200 // convert the date to a Date object
201- const date = new Date ( eventContent ) ;
201+ const date = new Date ( event . content ) ;
202202 if ( ! isNaN ( date ) ) {
203203 const dayStr = date . toISOString ( ) . split ( 'T' ) [ 0 ] ;
204204 return { value : dayStr , txt : dayStr } ; // format YYYY-MM-DD
205205 }
206- console . error ( '## Error parsing date' , eventContent ) ;
206+ console . error ( '## Error parsing date' , event . content ) ;
207207 return { value : '' , txt : 'Error parsing date' } ;
208208 }
209- if ( field . type === 'select' ) {
210- let value = eventContent ;
209+ if ( itemDef . data . type === 'select' ) {
210+ let value = event . content ;
211211 let txt = value ;
212- if ( field . eventType === 'ratio/generic' ) {
213- value = eventContent . value ;
212+ if ( event . type === 'ratio/generic' ) {
213+ value = event . content . value ;
214214 }
215-
216- const selected = field . options . find ( ( o ) => ( o . value === value ) ) ;
215+ console . log ( { value , event } )
216+ const selected = itemDef . data . options . find ( ( o ) => ( o . value === value ) ) ;
217217 if ( selected ) {
218- txt = selected ?. label ;
218+ txt = selected ?. label . en ;
219219 }
220220 return { value, txt } ;
221+ }
222+ if ( event . type === 'ratio/generic' && event . content != null ) {
223+ return { value : event . content . value , txt : event . content . value } ;
221224 }
222- if ( field . eventType === 'ratio/generic' && eventContent != null ) {
223- return { value : eventContent . value , txt : eventContent . value } ;
224- }
225- return { value : eventContent , txt : eventContent } ;
225+ return { value : event . content , txt : event . content } ;
226226}
227227
228228// ---------------- create / update data ---------------- //
0 commit comments