Skip to content

Commit 3c01d3c

Browse files
committed
formKeys
1 parent 4df0ab4 commit 3c01d3c

7 files changed

Lines changed: 64 additions & 33 deletions

patient-history-controler.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { patientLib } from './patient-lib.js';
2+
import { navControler } from './patient-nav-controler.js'
23
/**
34
* UI management code.
45
* Relies on patientLib for API calls and data management
@@ -7,18 +8,14 @@ import { patientLib } from './patient-lib.js';
78
*/
89

910
window.onload = async (event) => {
10-
const navData = patientLib.navGetData();
11+
const navData = await navControler.setNavComponents();
1112
console.log('## navData', navData);
1213
const { patientApiEndpoint, questionaryId } = navData;
1314
console.log('## patientApiEndpoint:', patientApiEndpoint);
1415
await patientLib.connect(patientApiEndpoint, questionaryId);
1516
// - form title
1617
const formTitle = document.getElementById('card-questionnary-details-title');
1718
formTitle.innerHTML = patientLib.getFormTitle(questionaryId);
18-
// -- navigation
19-
document.getElementById('nav-profile').onclick = () => {
20-
document.location.href = 'patient-profile.html';
21-
};
2219

2320
// -- connection
2421
updateFormContent(questionaryId, 'history');

patient-history.html

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@
2020
<h1>Demo Form - Patient's page</h1>
2121
<div class="card">
2222
<div class="card-header">
23-
<table>
24-
<tr>
25-
<td><A HREF="patient.html" class="btn btn-primary">Home</A></td>
26-
<td>&nbsp;</td>
27-
<td><button id="nav-profile" class="btn btn-primary">Profile</button></td>
28-
</tr>
29-
</table>
23+
<div id="card-nav"></div>
3024
</div>
3125
</div>
3226
<div class="card" id="card-content" >

patient-home-controler.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,11 @@ async function showFormDetails(formInfo) {
113113

114114
if (formDetails.status === 'accepted') {
115115
buttonOpen.innerHTML = 'Open';
116+
const nextPage = (await patientLib.navGetPages(formInfo.questionaryId))[1].url;
116117
buttonOpen.onclick = async function () {
117118
// -- hack publish access anyway (this should be done just once)
118119
await patientHomeLib.publishAccess(formDetails);
119-
document.location.href = 'patient-profile.html';
120+
document.location.href = nextPage;
120121
};
121122
buttonRevoke.innerHTML = 'Revoke';
122123
buttonRevoke.onclick = async function () {
@@ -129,7 +130,7 @@ async function showFormDetails(formInfo) {
129130
buttonOpen.innerHTML = 'Grant access and Open';
130131
buttonOpen.onclick = async function () {
131132
await patientHomeLib.grantAccess(formInfo, formDetails);
132-
document.location.href = 'patient-profile.html';
133+
document.location.href = nextPage;
133134
};
134135
buttonRevoke.innerHTML = 'Refuse';
135136
buttonRevoke.onclick = async function () {

patient-lib.js

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import { dataDefs } from './common-data-defs.js';
22
import { CookieUtils } from './CookieUtils.js';
33

4+
5+
46
export const patientLib = {
57
handleFormSubmit,
68
getFormTitle,
79
getFormContent,
810
connect,
9-
getNavigationQueryParams,
1011
navSetData,
11-
navGetData
12+
navGetData,
13+
getForms,
14+
navGetPages
1215
}
1316

1417

@@ -22,10 +25,6 @@ async function connect (apiEndpoint, questionaryId) {
2225
return accessInfo;
2326
}
2427

25-
function getNavigationQueryParams() {
26-
return `?patientApiEndpoint=${connection.apiEndpoint}&questionaryId=${_questionaryId}`
27-
}
28-
2928
// --------------- navigation - to be replaced if built-in framework ------- //
3029

3130
const COOKIE_KEY = 'hds-' + dataDefs.appId;
@@ -35,7 +34,34 @@ function navSetData(data) {
3534
}
3635

3736
function navGetData() {
38-
return CookieUtils.get(COOKIE_KEY);
37+
const cookieContent = CookieUtils.get(COOKIE_KEY);
38+
const formKey = (new URLSearchParams(window.location.search)).get('formKey');
39+
return Object.assign({ formKey }, cookieContent);
40+
}
41+
42+
const pagesByTypes = {
43+
home: 'patient.html',
44+
permanent: 'patient-profile.html',
45+
recurring: 'patient-history.html'
46+
};
47+
48+
async function navGetPages(questionaryId) {
49+
const pages = [{
50+
type: 'home',
51+
url: pagesByTypes.home,
52+
label: 'Home',
53+
formKey: null
54+
}];
55+
const forms = await patientLib.getForms(questionaryId);
56+
for (const [formKey, form] of Object.entries(forms)) {
57+
pages.push({
58+
type: form.type,
59+
label: form.name,
60+
url: pagesByTypes[form.type] + '?formKey=' + formKey,
61+
formKey
62+
});
63+
}
64+
return pages;
3965
}
4066

4167

@@ -45,6 +71,11 @@ function getFormTitle (questionaryId) {
4571
return dataDefs.questionnaires[questionaryId].title;
4672
}
4773

74+
async function getForms (questionaryId) {
75+
return dataDefs.questionnaires[questionaryId].forms;
76+
}
77+
78+
4879
async function getFormContent (questionaryId, formKey) {
4980
const form = dataDefs.questionnaires[questionaryId].forms[formKey];
5081
console.log('## getFormContent', form, questionaryId, formKey);

patient-nav-controler.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { patientLib } from './patient-lib.js';
2+
3+
export const navControler = {
4+
setNavComponents
5+
}
6+
7+
async function setNavComponents() {
8+
const navData = patientLib.navGetData();
9+
const {questionaryId, formKey} = navData;
10+
const navTable = document.getElementById('card-nav');
11+
navTable.innerHTML = '';
12+
for (const page of await patientLib.navGetPages(questionaryId)) {
13+
if (page.formKey === formKey) continue;
14+
navTable.innerHTML += `&nbsp;<A HREF="${page.url}" class="btn btn-primary">${page.label}</A>` ;
15+
}
16+
return navData;
17+
}

patient-profile-controler.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { patientLib } from './patient-lib.js';
2+
import { navControler } from './patient-nav-controler.js'
23
/**
34
* UI management code.
45
* Relies on patientLib for API calls and data management
@@ -7,18 +8,14 @@ import { patientLib } from './patient-lib.js';
78
*/
89

910
window.onload = async (event) => {
10-
const navData = patientLib.navGetData();
11+
const navData = await navControler.setNavComponents();
1112
console.log('## navData', navData);
1213
const { patientApiEndpoint, questionaryId } = navData;
1314
console.log('## patientApiEndpoint:', patientApiEndpoint);
1415
await patientLib.connect(patientApiEndpoint, questionaryId);
1516
// - form title
1617
const formTitle = document.getElementById('card-questionnary-details-title');
1718
formTitle.innerHTML = patientLib.getFormTitle(questionaryId);
18-
// -- navigation
19-
document.getElementById('nav-history').onclick = () => {
20-
document.location.href = 'patient-history.html';
21-
};
2219
// -- content
2320
updateFormContent(questionaryId, 'profile');
2421
document.getElementById('submit-button-profile').addEventListener("click", function () {

patient-profile.html

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@
2020
<h1>Demo Form - Patient's page</h1>
2121
<div class="card">
2222
<div class="card-header">
23-
<table>
24-
<tr>
25-
<td><A HREF="patient.html" class="btn btn-primary">Home</A></td>
26-
<td>&nbsp;</td>
27-
<td><button id="nav-history" class="btn btn-primary">History</button></td>
28-
</tr>
29-
</table>
23+
<div id="card-nav"></div>
3024
</div>
3125
</div>
3226
<div class="card" id="card-content">

0 commit comments

Comments
 (0)