formbuilder-lhcforms 10.0.2 → 10.0.4

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.
@@ -0,0 +1,117 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Title</title>
6
+ </head>
7
+ <body>
8
+ <div class="bg-body p-2" xmlns="http://www.w3.org/1999/html">
9
+ <button id="openWinDefault" class="btn btn-primary m-2" onClick="openFormBuilder()">Open form builder (Default)</button>
10
+ <button id="openWinSTU3" class="btn btn-primary m-2" onClick="openFormBuilder('STU3')">Open form builder (STU3)</button>
11
+ <button id="openWinR4" class="btn btn-primary m-2" onClick="openFormBuilder('R4')">Open form builder (R4)</button>
12
+ <button id="openWinR5" class="btn btn-primary m-2" onClick="openFormBuilder('R5')">Open form builder (R5)</button>
13
+ <button id="sendQ" class="btn btn-primary m-2" onClick="sendQuestionnaire()">Post questionnaire</button>
14
+ <button id="clear" class="btn btn-primary m-2" onClick="clearMessages()">Clear messages</button>
15
+ <p class="m-1" id="url"></p>
16
+ <h6 id="initH">initialized</h6>
17
+ <pre class="m-1" id="initW"></pre>
18
+ <h6 id="updateH">updateQuestionnaire</h6>
19
+ <pre class="m-1" id="updateQ"></pre>
20
+ <h6 id="closedH">closed</h6>
21
+ <pre class="m-1" id="closedQ"></pre>
22
+ <h6 id="canceledH">canceled</h6>
23
+ <pre class="m-1" id="canceledQ"></pre>
24
+ </div>
25
+
26
+ <script>
27
+ // Sample questionnaire to be edited in form builder.
28
+ const initialQ = {resourceType: 'Questionnaire', title: 'Form loaded from window-open-test.html', status: 'draft', item: [{text: 'q one', linkId: 'q-1'}]};
29
+
30
+ let fbWindow = null;
31
+ // Open the form builder window running on separate origin
32
+ let fbUrl = 'http://localhost:9032';
33
+
34
+ let initHeader = document.getElementById('initH');
35
+ let updateHeader = document.getElementById('updateH');
36
+ let closedHeader = document.getElementById('closedH');
37
+ let canceledHeader = document.getElementById('canceledH')
38
+ let initEl = document.getElementById('initW');
39
+ let updateEl = document.getElementById('updateQ');
40
+ let closedEl = document.getElementById('closedQ');
41
+ let canceledEl = document.getElementById('canceledQ');
42
+
43
+ let urlEl = document.getElementById('url');
44
+ window.addEventListener('message', handleMessage, true);
45
+
46
+
47
+ /**
48
+ * Listen to messages from form builder.
49
+ */
50
+ function handleMessage(event) {
51
+ const messageFromOpenedWindow = JSON.stringify(event.data, null, 2);
52
+ if (!fbUrl.startsWith(event.origin)) {
53
+ return;
54
+ }
55
+ switch (event.data?.type) {
56
+ case 'initialized':
57
+ // Wait for the child window to be ready, before sending initial questionnaire.
58
+ initHeader.innerHTML = `${event.data?.type}: New window initialized (${new Date().toISOString()})`;
59
+ initEl.innerHTML = `${messageFromOpenedWindow}`;
60
+ sendQuestionnaire(); // Send initial questionnaire.
61
+ break;
62
+ case 'updateQuestionnaire':
63
+ // Use this to get continuous updates. Wiil be triggered by every edit in
64
+ // the form builder with about 0.5 second debounce.
65
+ updateHeader.innerHTML = `${event.data?.type}: Updated questionnaire from opened window (${new Date().toISOString()})`;
66
+ updateEl.innerHTML = `${messageFromOpenedWindow}`
67
+ break;
68
+ case 'closed':
69
+ // Triggered when the window is closed. Use this to get last updated questionnaire
70
+ closedHeader.innerHTML = `${event.data?.type}: Final questionnaire from opened window after it is closed (${new Date().toISOString()})`;
71
+ closedEl.innerHTML = `${messageFromOpenedWindow}`;
72
+ break;
73
+ case 'canceled':
74
+ // Triggered when the window is canceled.
75
+ canceledHeader.innerHTML = `${event.data?.type}: Received canceled event. (${new Date().toISOString()})`;
76
+ canceledEl.innerHTML = `${messageFromOpenedWindow}`;
77
+ break;
78
+ default:
79
+ console.log(`Unknown message type ${event.data?.type} received from ${event.origin}`);
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Open a child window to load form builder app.
85
+ */
86
+ function openFormBuilder(fhirVersion) {
87
+ const referrerParam = 'referrer='+encodeURIComponent(window.location.href);
88
+ let versionParam = '';
89
+ if(fhirVersion) {
90
+ versionParam = '&fhirVersion='+encodeURIComponent(fhirVersion);
91
+ }
92
+ const reqUrl = fbUrl+'/window-open?'+referrerParam+versionParam;
93
+ fbWindow = window.open(reqUrl, 'formbuilder_window');
94
+ fbWindow.focus();
95
+ urlEl.innerHTML = 'Opened url: ' + reqUrl;
96
+ }
97
+
98
+ /**
99
+ * Send questionnaire to form builder using window.postMessage()
100
+ */
101
+ function sendQuestionnaire() {
102
+ if(fbWindow && !fbWindow.closed) {
103
+ fbWindow?.postMessage({type: 'initialQuestionnaire', questionnaire: initialQ}, fbUrl);
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Clear messages, typically to read fresh messages.
109
+ */
110
+ function clearMessages() {
111
+ initEl.innerHTML = '';
112
+ updateEl.innerHTML = '';
113
+ closedEl.innerHTML = '';
114
+ }
115
+ </script>
116
+ </body>
117
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formbuilder-lhcforms",
3
- "version": "10.0.2",
3
+ "version": "10.0.4",
4
4
  "description": "Build LHC-Forms and FHIR Questionnaires",
5
5
  "homepage": "https://github.com/lhncbc/formbuilder-lhcforms",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -44,17 +44,17 @@
44
44
  ],
45
45
  "dependencies": {
46
46
  "@angular-builders/custom-webpack": "^19.0.0",
47
- "@angular/animations": "~19.1.4",
48
- "@angular/cdk": "~19.1.2",
49
- "@angular/common": "~19.1.4",
50
- "@angular/compiler": "~19.1.4",
51
- "@angular/core": "~19.1.4",
52
- "@angular/forms": "~19.1.4",
53
- "@angular/localize": "~19.1.4",
54
- "@angular/material": "~19.1.2",
55
- "@angular/platform-browser": "~19.1.4",
56
- "@angular/platform-browser-dynamic": "~19.1.4",
57
- "@angular/router": "~19.1.4",
47
+ "@angular/animations": "~19.1.8",
48
+ "@angular/cdk": "~19.1.5",
49
+ "@angular/common": "~19.1.8",
50
+ "@angular/compiler": "~19.1.8",
51
+ "@angular/core": "~19.1.8",
52
+ "@angular/forms": "~19.1.8",
53
+ "@angular/localize": "~19.1.8",
54
+ "@angular/material": "~19.1.5",
55
+ "@angular/platform-browser": "~19.1.8",
56
+ "@angular/platform-browser-dynamic": "~19.1.8",
57
+ "@angular/router": "~19.1.8",
58
58
  "@bugsplat/angular-tree-component": "^13.0.1",
59
59
  "@ctrl/ngx-codemirror": "^7.0.0",
60
60
  "@fortawesome/angular-fontawesome": "^1.0.0",
@@ -62,9 +62,11 @@
62
62
  "@fortawesome/free-regular-svg-icons": "^6.7.2",
63
63
  "@fortawesome/free-solid-svg-icons": "^6.7.2",
64
64
  "@fullcalendar/core": "^6.1.15",
65
+ "@lhncbc/expression-editor": "^3.2.1",
65
66
  "@lhncbc/ngx-schema-form": "2.13.1-forked",
66
67
  "@ng-bootstrap/ng-bootstrap": "^18.0.0",
67
68
  "@types/fhir": "^0.0.36",
69
+ "autocomplete-lhc": "^18.6.3",
68
70
  "bootstrap": "^5.3.3",
69
71
  "codemirror": "^5.65.18",
70
72
  "date-fns": "^2.30.0",
@@ -93,8 +95,8 @@
93
95
  "@angular-eslint/schematics": "~19.1.0",
94
96
  "@angular-eslint/template-parser": "~19.1.0",
95
97
  "@angular/cli": "~19.1.5",
96
- "@angular/compiler-cli": "~19.1.4",
97
- "@angular/language-service": "~19.1.4",
98
+ "@angular/compiler-cli": "~19.1.8",
99
+ "@angular/language-service": "~19.1.8",
98
100
  "@cypress/schematic": "^2.5.1",
99
101
  "@playwright/test": "^1.42.1",
100
102
  "@types/hapi": "18.0.8",
@@ -108,6 +110,7 @@
108
110
  "cypress": "^13.6.4",
109
111
  "cypress-fail-on-console-error": "^4.0.2",
110
112
  "cypress-real-events": "^1.13.0",
113
+ "cypress-terminal-report": "^7.1.0",
111
114
  "eslint": "^8.57.0",
112
115
  "jasmine-core": "^4.6.0",
113
116
  "jasmine-spec-reporter": "~7.0.0",
@@ -136,6 +139,13 @@
136
139
  },
137
140
  "@angular-eslint/schematics": {
138
141
  "@angular-devkit/schematics": "~19.1.0"
142
+ },
143
+ "@lhncbc/expression-editor": {
144
+ "@angular/animations": "~19.1.0",
145
+ "@angular/cdk": "~19.1.0",
146
+ "@angular/common": "~19.1.0",
147
+ "@angular/core": "~19.1.0",
148
+ "@angular/material": "~19.1.0"
139
149
  }
140
150
  }
141
151
  }