pr360-questionnaire 2.1.5 → 2.1.7

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.
@@ -17311,14 +17311,6 @@ meter::-webkit-meter-optimum-value {
17311
17311
  this.visitedNodes = [];
17312
17312
  this.hubspotId = "40834387";
17313
17313
  }
17314
- get providers() {
17315
- return this.getAttribute("providers")?.split(",") || [];
17316
- }
17317
- set providers(value) {
17318
- if (value !== null && value !== void 0) {
17319
- this.setAttribute("providers", value.join(","));
17320
- }
17321
- }
17322
17314
  get topic() {
17323
17315
  return `questionnaires:${this.siteId}`;
17324
17316
  }
@@ -17390,19 +17382,27 @@ meter::-webkit-meter-optimum-value {
17390
17382
  </div>
17391
17383
  <div>
17392
17384
  <label for="email">Email</label>
17393
- <input type="email" id="email" name="email" required/>
17385
+ <input type="email" id="email" name="email" required />
17394
17386
  </div>
17395
17387
  <div>
17396
17388
  <label for="phone">Phone</label>
17397
- <input type="tel" id="phone" name="phone" required/>
17389
+ <input type="tel" id="phone" name="phone" required
17390
+ pattern="^[0-9]{6,11}$"
17391
+ title="Please enter a valid phone number (6-11 digits)"/>
17398
17392
  </div>
17399
17393
  <div>
17400
17394
  <label for="zip_code">Zip Code</label>
17401
- <input type="text" id="zip_code" name="zip_code" required/>
17395
+ <input type="text" id="zip_code" name="zip_code" required
17396
+ pattern="^[0-9]{5,6}$"
17397
+ title="Please enter a valid zip code (5 or 6 digits)"/>
17402
17398
  </div>
17403
17399
  <div>
17404
17400
  <label for="insurance_provider">Insurance Provider</label>
17405
- <input type="text" id="insurance_provider" name="insurance_provider"/>
17401
+ <select id="insurance_provider" name="insurance_provider">
17402
+ ${this.providers.map((provider) => x`
17403
+ <option value="${provider}">${provider}</option>
17404
+ `)}
17405
+ </select>
17406
17406
  </div>
17407
17407
  </div>
17408
17408
  <div class="footer u-text-center">
@@ -17492,8 +17492,8 @@ meter::-webkit-meter-optimum-value {
17492
17492
  first_name: this.firstNameInput.value,
17493
17493
  last_name: this.lastNameInput.value,
17494
17494
  email,
17495
- zip_code: this.zipCodeInput.value,
17496
- phone_number: this.phoneInput.value,
17495
+ zip_code: this.zipCodeInput?.value,
17496
+ phone_number: this.phoneInput?.value,
17497
17497
  insurance_provider: this.insuranceProviderSelect.value
17498
17498
  }
17499
17499
  }));
@@ -17531,7 +17531,7 @@ meter::-webkit-meter-optimum-value {
17531
17531
  ], QuestionnaireElement.prototype, "phoneNumber", 2);
17532
17532
  __decorateClass([
17533
17533
  t3()
17534
- ], QuestionnaireElement.prototype, "insuranceProvider", 2);
17534
+ ], QuestionnaireElement.prototype, "providers", 2);
17535
17535
  __decorateClass([
17536
17536
  n5(),
17537
17537
  liveStateConfig("url")
@@ -17545,10 +17545,6 @@ meter::-webkit-meter-optimum-value {
17545
17545
  __decorateClass([
17546
17546
  n5({ type: Boolean })
17547
17547
  ], QuestionnaireElement.prototype, "open", 2);
17548
- __decorateClass([
17549
- n5({ type: Array }),
17550
- liveStateConfig("providers")
17551
- ], QuestionnaireElement.prototype, "providers", 1);
17552
17548
  __decorateClass([
17553
17549
  i4("#question-modal")
17554
17550
  ], QuestionnaireElement.prototype, "modal", 2);
@@ -17579,7 +17575,7 @@ meter::-webkit-meter-optimum-value {
17579
17575
  QuestionnaireElement = __decorateClass([
17580
17576
  e4("pr360-questionnaire"),
17581
17577
  liveStateDecorator_default({
17582
- properties: ["currentStep", "visitedNodes", "phoneNumber", "links", "accountActive", "questionnaireDepth"],
17578
+ properties: ["currentStep", "visitedNodes", "phoneNumber", "links", "accountActive", "questionnaireDepth", "providers"],
17583
17579
  events: {
17584
17580
  send: ["answerQuestion", "submitContactInfo", "goBack"]
17585
17581
  },
package/css/app.scss CHANGED
@@ -16,6 +16,7 @@
16
16
  @import './components/forms';
17
17
  @import './components/grid';
18
18
  @import './components/questionnaire';
19
+ @import './components/site-rules';
19
20
 
20
21
  // Imported last to take precedence in the cascade
21
22
  @import './base/utilities';
@@ -25,6 +25,7 @@ $gray: hsl(46, 3%, 58%);
25
25
  $gray-dark: hsl(46, 3%, 35%);
26
26
  $gray-darkest: hsl(46, 3%, 25%);
27
27
  $black: #1d1d1d;
28
+ $danger: #f02e2e;
28
29
 
29
30
 
30
31
  // SPACING
@@ -0,0 +1,189 @@
1
+
2
+ #move-rules-modal {
3
+ .mr-4 {
4
+ margin-right: 16px ;
5
+ }
6
+ .mt-5 {
7
+ margin-top: 20px;
8
+ }
9
+
10
+ .mb-2 {
11
+ margin-bottom: 8px;
12
+ }
13
+ .text-5 {
14
+ font-size: 20px
15
+ }
16
+ .text-6 {
17
+ font-size: 24px
18
+ }
19
+
20
+ .title-alignment {
21
+ display: flex;
22
+ align-items: center;
23
+ }
24
+
25
+ .rules-header {
26
+ display: flex;
27
+ justify-content: space-between;
28
+ align-items: center;
29
+
30
+ h2 {
31
+ font-weight: bolder;
32
+ }
33
+ }
34
+
35
+ .rules-list {
36
+ max-height: 400px;
37
+ overflow-y: scroll;
38
+ margin-bottom: 8px;
39
+ border: 1px solid #bebebe;
40
+ border-radius: 5px;
41
+ padding: 12px 10px;
42
+ }
43
+
44
+ .modal-title {
45
+ margin-top: 20px;
46
+ margin-bottom: 8px;
47
+ font-weight: bolder;
48
+ }
49
+
50
+ .empty-list {
51
+ text-align: center;
52
+ margin-top: 24px;
53
+ font-weight: lighter;
54
+ }
55
+
56
+ .row-container:not(:last-child) {
57
+ margin-bottom: 12px;
58
+ padding-bottom: 6px;
59
+ border-bottom: 1px solid #d8d8d8;
60
+ }
61
+
62
+ .row-container {
63
+ display: flex;
64
+ justify-content: space-between;
65
+ align-items: center;
66
+ }
67
+
68
+ .row {
69
+ display: flex;
70
+ justify-content: space-between;
71
+ align-items: center;
72
+ font-size: 18px;
73
+ }
74
+
75
+ .drag-icon {
76
+ font-size: 20px;
77
+ font-weight: bold;
78
+ margin-right: 12px;
79
+ }
80
+
81
+ .position-text {
82
+ margin-right: 4px;
83
+ }
84
+
85
+ .text-container {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: 6px
89
+ }
90
+
91
+ .quick-actions {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: 16px;
95
+
96
+ }
97
+
98
+ .icon-btn {
99
+ background: transparent;
100
+ padding: 0;
101
+ cursor: pointer;
102
+
103
+ }
104
+
105
+ .site-pill {
106
+ font-size: 12px;
107
+ display: inline;
108
+ font-weight: bold;
109
+ border-radius: 10px;
110
+ background: gray;
111
+ padding: 4px 9px;
112
+ color: white;
113
+ }
114
+
115
+ .rule-form-row {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 6px;
119
+ padding-top: 10px;
120
+
121
+ textarea {
122
+ resize: both;
123
+ overflow: auto;
124
+ max-width: 786px;
125
+ max-height: 120px;
126
+ width: 100%;
127
+ height: 100%;
128
+ }
129
+ }
130
+
131
+ .rule-form-actions {
132
+ margin-top: 24px;
133
+ }
134
+
135
+ .zip-list-modal{
136
+ border: 1px solid #a3a3a3;
137
+ border-radius: 5px;
138
+ padding: 12px 10px;
139
+ }
140
+
141
+ .zip-list-box{
142
+ overflow-y: scroll;
143
+ border: 1px solid #e2dada;
144
+ border-radius: 5px;
145
+ padding: 6px 5px;
146
+ }
147
+
148
+ .close-btn{
149
+ margin-top: 5px;
150
+ }
151
+
152
+ .alert_error{
153
+ background-color: #ff2424;
154
+ padding: 10px 5px;
155
+ border: 1px solid #0c0909;
156
+ border-radius: 5px;
157
+ width: 786px;
158
+
159
+ h3 {
160
+ display: flex;
161
+ justify-content: space-between;
162
+ align-items: center;
163
+ color: #150f0f;
164
+ }
165
+ }
166
+
167
+
168
+
169
+
170
+ .modal--container{
171
+ background: $white;
172
+ width: 850px;
173
+ position: absolute;
174
+ top: 20%;
175
+ left: 43%;
176
+ margin-left: -330px;
177
+ padding: $space-md;
178
+ -webkit-box-shadow: 3px 3px 15px 3px #ACACAC;
179
+ box-shadow: 3px 3px 15px 3px #ACACAC;
180
+
181
+ @media screen and (max-width: $screen-tablet) {
182
+ left: 56%;
183
+ }
184
+ }
185
+
186
+ .rule-form-modal Select {
187
+ max-width: 150px;
188
+ }
189
+ }
@@ -668,4 +668,7 @@ table.prospects-table {
668
668
  margin: 4px 0;
669
669
  border-color: rgba(255, 255, 255, 0.2);
670
670
  }
671
+ }
672
+ .field-div{
673
+ margin-top: 10px;
671
674
  }
package/dist/index.js CHANGED
@@ -7500,14 +7500,6 @@ meter::-webkit-meter-optimum-value {
7500
7500
  this.visitedNodes = [];
7501
7501
  this.hubspotId = "40834387";
7502
7502
  }
7503
- get providers() {
7504
- return this.getAttribute("providers")?.split(",") || [];
7505
- }
7506
- set providers(value) {
7507
- if (value !== null && value !== void 0) {
7508
- this.setAttribute("providers", value.join(","));
7509
- }
7510
- }
7511
7503
  get topic() {
7512
7504
  return `questionnaires:${this.siteId}`;
7513
7505
  }
@@ -7579,19 +7571,27 @@ meter::-webkit-meter-optimum-value {
7579
7571
  </div>
7580
7572
  <div>
7581
7573
  <label for="email">Email</label>
7582
- <input type="email" id="email" name="email" required/>
7574
+ <input type="email" id="email" name="email" required />
7583
7575
  </div>
7584
7576
  <div>
7585
7577
  <label for="phone">Phone</label>
7586
- <input type="tel" id="phone" name="phone" required/>
7578
+ <input type="tel" id="phone" name="phone" required
7579
+ pattern="^[0-9]{6,11}$"
7580
+ title="Please enter a valid phone number (6-11 digits)"/>
7587
7581
  </div>
7588
7582
  <div>
7589
7583
  <label for="zip_code">Zip Code</label>
7590
- <input type="text" id="zip_code" name="zip_code" required/>
7584
+ <input type="text" id="zip_code" name="zip_code" required
7585
+ pattern="^[0-9]{5,6}$"
7586
+ title="Please enter a valid zip code (5 or 6 digits)"/>
7591
7587
  </div>
7592
7588
  <div>
7593
7589
  <label for="insurance_provider">Insurance Provider</label>
7594
- <input type="text" id="insurance_provider" name="insurance_provider"/>
7590
+ <select id="insurance_provider" name="insurance_provider">
7591
+ ${this.providers.map((provider) => x`
7592
+ <option value="${provider}">${provider}</option>
7593
+ `)}
7594
+ </select>
7595
7595
  </div>
7596
7596
  </div>
7597
7597
  <div class="footer u-text-center">
@@ -7681,8 +7681,8 @@ meter::-webkit-meter-optimum-value {
7681
7681
  first_name: this.firstNameInput.value,
7682
7682
  last_name: this.lastNameInput.value,
7683
7683
  email,
7684
- zip_code: this.zipCodeInput.value,
7685
- phone_number: this.phoneInput.value,
7684
+ zip_code: this.zipCodeInput?.value,
7685
+ phone_number: this.phoneInput?.value,
7686
7686
  insurance_provider: this.insuranceProviderSelect.value
7687
7687
  }
7688
7688
  }));
@@ -7720,7 +7720,7 @@ meter::-webkit-meter-optimum-value {
7720
7720
  ], QuestionnaireElement.prototype, "phoneNumber", 2);
7721
7721
  __decorateClass([
7722
7722
  t3()
7723
- ], QuestionnaireElement.prototype, "insuranceProvider", 2);
7723
+ ], QuestionnaireElement.prototype, "providers", 2);
7724
7724
  __decorateClass([
7725
7725
  n5(),
7726
7726
  liveStateConfig("url")
@@ -7734,10 +7734,6 @@ meter::-webkit-meter-optimum-value {
7734
7734
  __decorateClass([
7735
7735
  n5({ type: Boolean })
7736
7736
  ], QuestionnaireElement.prototype, "open", 2);
7737
- __decorateClass([
7738
- n5({ type: Array }),
7739
- liveStateConfig("providers")
7740
- ], QuestionnaireElement.prototype, "providers", 1);
7741
7737
  __decorateClass([
7742
7738
  i4("#question-modal")
7743
7739
  ], QuestionnaireElement.prototype, "modal", 2);
@@ -7768,7 +7764,7 @@ meter::-webkit-meter-optimum-value {
7768
7764
  QuestionnaireElement = __decorateClass([
7769
7765
  e4("pr360-questionnaire"),
7770
7766
  liveStateDecorator_default({
7771
- properties: ["currentStep", "visitedNodes", "phoneNumber", "links", "accountActive", "questionnaireDepth"],
7767
+ properties: ["currentStep", "visitedNodes", "phoneNumber", "links", "accountActive", "questionnaireDepth", "providers"],
7772
7768
  events: {
7773
7769
  send: ["answerQuestion", "submitContactInfo", "goBack"]
7774
7770
  },
package/js/app.js CHANGED
@@ -42,8 +42,16 @@ const SortableHook = {
42
42
  ghostClass: "drag-ghost",
43
43
  forceFallback: true,
44
44
  onEnd: e => {
45
- let params = {old: e.oldIndex, new: e.newIndex, ...e.item.dataset}
46
- this.pushEventTo(this.el, "reposition", params)
45
+ // Custom logic for rules list
46
+ if (this.el.id === "rules-sortable-list") {
47
+ // Collect the new order of rule positions (or ids)
48
+ const newOrder = Array.from(this.el.querySelectorAll(".row-container")).map(div => div.dataset.id);
49
+ this.pushEventTo(this.el, "reorder_rules", {order: newOrder});
50
+ } else {
51
+ // Default behavior for other sortable lists
52
+ let params = {old: e.oldIndex, new: e.newIndex, ...e.item.dataset}
53
+ this.pushEventTo(this.el, "reposition", params)
54
+ }
47
55
  }
48
56
  })
49
57
  }
@@ -66,4 +74,4 @@ liveSocket.connect()
66
74
  // >> liveSocket.disableLatencySim()
67
75
  window.liveSocket = liveSocket
68
76
 
69
- import './questionnaire.ts';
77
+ import './questionnaire.ts';
@@ -36,7 +36,7 @@ export type Answer = {
36
36
 
37
37
  @customElement('pr360-questionnaire')
38
38
  @liveState({
39
- properties: ['currentStep', 'visitedNodes', 'phoneNumber', 'links', 'accountActive', 'questionnaireDepth'],
39
+ properties: ['currentStep', 'visitedNodes', 'phoneNumber', 'links', 'accountActive', 'questionnaireDepth', 'providers'],
40
40
  events: {
41
41
  send: ['answerQuestion', 'submitContactInfo', 'goBack']
42
42
  },
@@ -66,7 +66,7 @@ export class QuestionnaireElement extends LitElement {
66
66
  phoneNumber: string;
67
67
 
68
68
  @state()
69
- insuranceProvider: string;
69
+ providers: string[];
70
70
 
71
71
  @property()
72
72
  @liveStateConfig('url')
@@ -81,18 +81,6 @@ export class QuestionnaireElement extends LitElement {
81
81
  @property({ type: Boolean })
82
82
  open: boolean;
83
83
 
84
- @property({ type: Array })
85
- @liveStateConfig('providers')
86
- get providers(): string[] {
87
- return this.getAttribute('providers')?.split(',') || [];
88
- }
89
-
90
- set providers(value: string[]) {
91
- if (value !== null && value !== undefined) {
92
- this.setAttribute('providers', value.join(','));
93
- }
94
- }
95
-
96
84
  @query('#question-modal')
97
85
  modal: HTMLDialogElement | undefined;
98
86
 
@@ -190,19 +178,27 @@ export class QuestionnaireElement extends LitElement {
190
178
  </div>
191
179
  <div>
192
180
  <label for="email">Email</label>
193
- <input type="email" id="email" name="email" required/>
181
+ <input type="email" id="email" name="email" required />
194
182
  </div>
195
183
  <div>
196
184
  <label for="phone">Phone</label>
197
- <input type="tel" id="phone" name="phone" required/>
185
+ <input type="tel" id="phone" name="phone" required
186
+ pattern="^[0-9]{6,11}$"
187
+ title="Please enter a valid phone number (6-11 digits)"/>
198
188
  </div>
199
189
  <div>
200
190
  <label for="zip_code">Zip Code</label>
201
- <input type="text" id="zip_code" name="zip_code" required/>
191
+ <input type="text" id="zip_code" name="zip_code" required
192
+ pattern="^[0-9]{5,6}$"
193
+ title="Please enter a valid zip code (5 or 6 digits)"/>
202
194
  </div>
203
195
  <div>
204
196
  <label for="insurance_provider">Insurance Provider</label>
205
- <input type="text" id="insurance_provider" name="insurance_provider"/>
197
+ <select id="insurance_provider" name="insurance_provider">
198
+ ${this.providers.map(provider => html`
199
+ <option value="${provider}">${provider}</option>
200
+ `)}
201
+ </select>
206
202
  </div>
207
203
  </div>
208
204
  <div class="footer u-text-center">
@@ -289,8 +285,10 @@ export class QuestionnaireElement extends LitElement {
289
285
  submitContactInfo(event: Event) {
290
286
  event.stopPropagation();
291
287
  event.preventDefault();
288
+
292
289
  if (this.contactInfoForm?.checkValidity()) {
293
290
  const email = this.emailInput?.value;
291
+
294
292
  const hsq = window['_hsq'] = window['_hsq'] || [];
295
293
  hsq.push(['identify', { email: email }]);
296
294
  hsq.push(['setPath', '/submit-contact-info']);
@@ -302,8 +300,8 @@ export class QuestionnaireElement extends LitElement {
302
300
  first_name: this.firstNameInput.value,
303
301
  last_name: this.lastNameInput.value,
304
302
  email: email,
305
- zip_code: this.zipCodeInput.value,
306
- phone_number: this.phoneInput.value,
303
+ zip_code: this.zipCodeInput?.value,
304
+ phone_number: this.phoneInput?.value,
307
305
  insurance_provider: this.insuranceProviderSelect.value
308
306
  }
309
307
  }));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pr360-questionnaire",
3
3
  "description": "An element to render a questionnaire for PatientReach 360.",
4
- "version": "2.1.5",
4
+ "version": "2.1.7",
5
5
  "main": "dist/index.js",
6
6
  "author": {
7
7
  "email": "chris@launchscout.com",