@nyaruka/temba-components 0.29.0 → 0.30.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.
Files changed (170) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.yarnrc +1 -1
  3. package/.yarnrc.yml +1 -0
  4. package/CHANGELOG.md +105 -57
  5. package/dist/{64e63814.js → dd72d92e.js} +305 -148
  6. package/dist/index.js +305 -148
  7. package/dist/static/icons/symbol-defs.svg +10 -20
  8. package/dist/sw.js +1 -1
  9. package/dist/sw.js.map +1 -1
  10. package/dist/templates/components-body.html +1 -1
  11. package/dist/templates/components-head.html +1 -1
  12. package/dist/workbox-80efdfd1.js.map +1 -1
  13. package/out-tsc/src/contacts/ContactBadges.js +2 -9
  14. package/out-tsc/src/contacts/ContactBadges.js.map +1 -1
  15. package/out-tsc/src/contacts/ContactChat.js +3 -0
  16. package/out-tsc/src/contacts/ContactChat.js.map +1 -1
  17. package/out-tsc/src/contacts/ContactName.js +19 -16
  18. package/out-tsc/src/contacts/ContactName.js.map +1 -1
  19. package/out-tsc/src/contacts/ContactNameFetch.js +36 -0
  20. package/out-tsc/src/contacts/ContactNameFetch.js.map +1 -0
  21. package/out-tsc/src/contacts/ContactStoreElement.js +9 -2
  22. package/out-tsc/src/contacts/ContactStoreElement.js.map +1 -1
  23. package/out-tsc/src/contacts/ContactUrn.js +12 -1
  24. package/out-tsc/src/contacts/ContactUrn.js.map +1 -1
  25. package/out-tsc/src/contacts/events.js +0 -3
  26. package/out-tsc/src/contacts/events.js.map +1 -1
  27. package/out-tsc/src/flow/FlowStoreElement.js +43 -0
  28. package/out-tsc/src/flow/FlowStoreElement.js.map +1 -0
  29. package/out-tsc/src/interfaces.js.map +1 -1
  30. package/out-tsc/src/label/Label.js +29 -42
  31. package/out-tsc/src/label/Label.js.map +1 -1
  32. package/out-tsc/src/list/RunList.js +317 -0
  33. package/out-tsc/src/list/RunList.js.map +1 -0
  34. package/out-tsc/src/list/TembaList.js +38 -14
  35. package/out-tsc/src/list/TembaList.js.map +1 -1
  36. package/out-tsc/src/options/Options.js +18 -2
  37. package/out-tsc/src/options/Options.js.map +1 -1
  38. package/out-tsc/src/slider/TembaSlider.js +9 -1
  39. package/out-tsc/src/slider/TembaSlider.js.map +1 -1
  40. package/out-tsc/src/sms/gsmvalidator.js +9 -138
  41. package/out-tsc/src/sms/gsmvalidator.js.map +1 -1
  42. package/out-tsc/src/store/Store.js +13 -3
  43. package/out-tsc/src/store/Store.js.map +1 -1
  44. package/out-tsc/src/tabpane/TabPane.js +3 -1
  45. package/out-tsc/src/tabpane/TabPane.js.map +1 -1
  46. package/out-tsc/src/utils/index.js +1 -0
  47. package/out-tsc/src/utils/index.js.map +1 -1
  48. package/out-tsc/src/vectoricon/VectorIcon.js +6 -11
  49. package/out-tsc/src/vectoricon/VectorIcon.js.map +1 -1
  50. package/out-tsc/temba-components.js +1 -2
  51. package/out-tsc/temba-components.js.map +1 -1
  52. package/out-tsc/temba-modules.js +7 -1
  53. package/out-tsc/temba-modules.js.map +1 -1
  54. package/out-tsc/test/MouseHelper.js +47 -0
  55. package/out-tsc/test/MouseHelper.js.map +1 -0
  56. package/out-tsc/test/temba-contact-badges.test.js +23 -0
  57. package/out-tsc/test/temba-contact-badges.test.js.map +1 -0
  58. package/out-tsc/test/temba-contact-chat.test.js +111 -7
  59. package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
  60. package/out-tsc/test/temba-contact-history.test.js +6 -6
  61. package/out-tsc/test/temba-contact-history.test.js.map +1 -1
  62. package/out-tsc/test/temba-dialog.test.js +1 -1
  63. package/out-tsc/test/temba-dialog.test.js.map +1 -1
  64. package/out-tsc/test/temba-label.test.js +66 -0
  65. package/out-tsc/test/temba-label.test.js.map +1 -0
  66. package/out-tsc/test/temba-list.test.js +1 -1
  67. package/out-tsc/test/temba-list.test.js.map +1 -1
  68. package/out-tsc/test/temba-menu.test.js +1 -1
  69. package/out-tsc/test/temba-menu.test.js.map +1 -1
  70. package/out-tsc/test/temba-select.test.js +1 -6
  71. package/out-tsc/test/temba-select.test.js.map +1 -1
  72. package/out-tsc/test/temba-slider.test.js +151 -8
  73. package/out-tsc/test/temba-slider.test.js.map +1 -1
  74. package/out-tsc/test/temba-textinput.test.js +3 -4
  75. package/out-tsc/test/temba-textinput.test.js.map +1 -1
  76. package/out-tsc/test/temba-tip.test.js +1 -1
  77. package/out-tsc/test/temba-tip.test.js.map +1 -1
  78. package/out-tsc/test/utils.test.js +26 -14
  79. package/out-tsc/test/utils.test.js.map +1 -1
  80. package/package.json +5 -4
  81. package/screenshots/truth/contacts/badges.png +0 -0
  82. package/screenshots/truth/contacts/contact-active-default.png +0 -0
  83. package/screenshots/truth/contacts/contact-active-show-chat-history.png +0 -0
  84. package/screenshots/truth/contacts/contact-active-show-chat-msg.png +0 -0
  85. package/screenshots/truth/contacts/contact-archived-hide-chat-msg.png +0 -0
  86. package/screenshots/truth/contacts/contact-archived-show-chat-history.png +0 -0
  87. package/screenshots/truth/contacts/contact-blocked-hide-chat-msg.png +0 -0
  88. package/screenshots/truth/contacts/contact-blocked-show-chat-history.png +0 -0
  89. package/screenshots/truth/contacts/contact-stopped-hide-chat-msg.png +0 -0
  90. package/screenshots/truth/contacts/contact-stopped-show-chat-history.png +0 -0
  91. package/screenshots/truth/contacts/history-expanded.png +0 -0
  92. package/screenshots/truth/contacts/history.png +0 -0
  93. package/screenshots/truth/label/custom.png +0 -0
  94. package/screenshots/truth/label/danger.png +0 -0
  95. package/screenshots/truth/label/dark.png +0 -0
  96. package/screenshots/truth/label/default-icon.png +0 -0
  97. package/screenshots/truth/label/no-icon.png +0 -0
  98. package/screenshots/truth/label/primary.png +0 -0
  99. package/screenshots/truth/label/secondary.png +0 -0
  100. package/screenshots/truth/label/shadow.png +0 -0
  101. package/screenshots/truth/label/tertiary.png +0 -0
  102. package/screenshots/truth/slider/custom-min-custom-max-valid-value.png +0 -0
  103. package/screenshots/truth/slider/custom-min-default-max-no-value.png +0 -0
  104. package/screenshots/truth/slider/default-min-custom-max-no-value.png +0 -0
  105. package/screenshots/truth/slider/default-min-default-max-invalid-value.png +0 -0
  106. package/screenshots/truth/slider/default-min-default-max-valid-value.png +0 -0
  107. package/screenshots/truth/slider/default.png +0 -0
  108. package/screenshots/truth/slider/no-visible-range-invalid-value.png +0 -0
  109. package/screenshots/truth/slider/no-visible-range-no-value.png +0 -0
  110. package/screenshots/truth/slider/no-visible-range-valid-value.png +0 -0
  111. package/screenshots/truth/slider/update-slider-on-circle-dragged.png +0 -0
  112. package/screenshots/truth/slider/update-slider-on-track-clicked.png +0 -0
  113. package/screenshots/truth/slider/update-slider-on-value-change.png +0 -0
  114. package/src/contacts/ContactBadges.ts +2 -9
  115. package/src/contacts/ContactChat.ts +3 -0
  116. package/src/contacts/ContactName.ts +19 -17
  117. package/src/contacts/ContactNameFetch.ts +32 -0
  118. package/src/contacts/ContactStoreElement.ts +5 -2
  119. package/src/contacts/ContactUrn.ts +12 -1
  120. package/src/contacts/events.ts +0 -3
  121. package/src/flow/FlowStoreElement.ts +42 -0
  122. package/src/interfaces.ts +19 -0
  123. package/src/label/Label.ts +31 -43
  124. package/src/list/RunList.ts +353 -0
  125. package/src/list/TembaList.ts +50 -14
  126. package/src/options/Options.ts +17 -2
  127. package/src/slider/TembaSlider.ts +8 -1
  128. package/src/sms/gsmvalidator.ts +9 -138
  129. package/src/store/Store.ts +20 -3
  130. package/src/tabpane/TabPane.ts +3 -1
  131. package/src/untyped.d.ts +3 -0
  132. package/src/utils/index.ts +3 -0
  133. package/src/vectoricon/VectorIcon.ts +5 -10
  134. package/static/css/temba-components.css +4 -9
  135. package/static/icons/Read Me.txt +15 -15
  136. package/static/icons/SVG/credits.svg +5 -0
  137. package/static/icons/SVG/hourglass.svg +5 -0
  138. package/static/icons/demo-external-svg.html +142 -157
  139. package/static/icons/demo-files/demo.css +4 -4
  140. package/static/icons/demo.html +152 -177
  141. package/static/icons/selection.json +396 -339
  142. package/static/icons/style.css +0 -4
  143. package/static/icons/symbol-defs.svg +10 -20
  144. package/temba-components.ts +1 -2
  145. package/temba-modules.ts +7 -1
  146. package/test/MouseHelper.ts +47 -0
  147. package/test/temba-contact-badges.test.ts +33 -0
  148. package/test/temba-contact-chat.test.ts +202 -6
  149. package/test/temba-contact-history.test.ts +6 -6
  150. package/test/temba-dialog.test.ts +1 -1
  151. package/test/temba-label.test.ts +75 -0
  152. package/test/temba-list.test.ts +1 -1
  153. package/test/temba-menu.test.ts +1 -0
  154. package/test/temba-select.test.ts +6 -10
  155. package/test/temba-slider.test.ts +204 -8
  156. package/test/temba-textinput.test.ts +3 -4
  157. package/test/temba-tip.test.ts +1 -1
  158. package/test/utils.test.ts +34 -16
  159. package/test-assets/contacts/contact-barak-archived +40 -0
  160. package/test-assets/contacts/contact-dave-active +52 -0
  161. package/test-assets/contacts/contact-michelle-blocked +40 -0
  162. package/test-assets/contacts/contact-tim-stopped +52 -0
  163. package/test-assets/store/groups.json +29 -0
  164. package/test-assets/store/languages.json +290 -0
  165. package/test-assets/style.css +2 -0
  166. package/web-test-runner.config.mjs +16 -0
  167. package/.yarn/releases/yarn-1.22.10.cjs +0 -147392
  168. package/out-tsc/src/contacts/ContactGroups.js +0 -40
  169. package/out-tsc/src/contacts/ContactGroups.js.map +0 -1
  170. package/src/contacts/ContactGroups.ts +0 -42
@@ -1,11 +1,207 @@
1
- // import { html, fixture, expect } from '@open-wc/testing';
2
- // import { TembaSlider } from '../src/slider/TembaSlider';
3
- // import { assertScreenshot, getClip } from './utils.test';
1
+ import { html, fixture, expect } from '@open-wc/testing';
2
+ import { TemplateResult } from 'lit';
3
+ import { TembaSlider } from '../src/slider/TembaSlider';
4
+ import { assertScreenshot, getClip, showMouse } from './utils.test';
5
+
6
+ const createSlider = async (def: TemplateResult) => {
7
+ const parentNode = document.createElement('div');
8
+ parentNode.setAttribute('style', 'width: 200px;');
9
+ return (await fixture(def, { parentNode })) as TembaSlider;
10
+ };
4
11
 
5
12
  describe('temba-slider', () => {
6
- // it('renders default slider', async () => {});
7
- // it('renders a slider with visible ranges', async () => {});
8
- // it('updates slider position on element value change', async () => {});
9
- // it('updates slider position on when track clicked', async () => {});
10
- // it('updates slider position on circle drag', async () => {});
13
+ it('renders default slider', async () => {
14
+ const slider: TembaSlider = await createSlider(html`
15
+ <temba-slider label="My Slider"></temba-slider>
16
+ `);
17
+
18
+ expect(slider.label).to.equal('My Slider');
19
+ await assertScreenshot('slider/default', getClip(slider));
20
+ });
21
+
22
+ it('renders a slider with visible range - custom min default max no value', async () => {
23
+ const slider: TembaSlider = await createSlider(html`
24
+ <temba-slider label="My Slider" min="5" range></temba-slider>
25
+ `);
26
+ expect(slider.range).to.equal(true);
27
+ expect(slider.min).to.equal(5);
28
+ expect(slider.max).to.equal(100);
29
+ expect(slider.value).to.equal('5');
30
+ await assertScreenshot(
31
+ 'slider/custom-min-default-max-no-value',
32
+ getClip(slider)
33
+ );
34
+ });
35
+
36
+ it('renders a slider with visible range - default min custom max no value', async () => {
37
+ const slider: TembaSlider = await createSlider(html`
38
+ <temba-slider label="My Slider" max="105" range></temba-slider>
39
+ `);
40
+ expect(slider.range).to.equal(true);
41
+ expect(slider.min).to.equal(0);
42
+ expect(slider.max).to.equal(105);
43
+ expect(slider.value).to.equal('0');
44
+ await assertScreenshot(
45
+ 'slider/default-min-custom-max-no-value',
46
+ getClip(slider)
47
+ );
48
+ });
49
+
50
+ it('renders a slider with visible range - custom min custom max no value', async () => {
51
+ const slider: TembaSlider = await createSlider(html`
52
+ <temba-slider label="My Slider" min="5" max="105" range></temba-slider>
53
+ `);
54
+ expect(slider.range).to.equal(true);
55
+ expect(slider.min).to.equal(5);
56
+ expect(slider.max).to.equal(105);
57
+ expect(slider.value).to.equal('5');
58
+ await assertScreenshot(
59
+ 'slider/default-min-default-max-valid-value',
60
+ getClip(slider)
61
+ );
62
+ });
63
+
64
+ it('renders a slider with visible range - custom min custom max valid value', async () => {
65
+ const slider: TembaSlider = await createSlider(html`
66
+ <temba-slider
67
+ label="My Slider"
68
+ min="5"
69
+ max="105"
70
+ value="55"
71
+ range
72
+ ></temba-slider>
73
+ `);
74
+ expect(slider.range).to.equal(true);
75
+ expect(slider.min).to.equal(5);
76
+ expect(slider.max).to.equal(105);
77
+ expect(slider.value).to.equal('55');
78
+ await assertScreenshot(
79
+ 'slider/custom-min-custom-max-valid-value',
80
+ getClip(slider)
81
+ );
82
+ });
83
+
84
+ it('renders a slider with visible range - custom min custom max invalid value', async () => {
85
+ const slider: TembaSlider = await createSlider(html`
86
+ <temba-slider
87
+ label="My Slider"
88
+ min="5"
89
+ max="105"
90
+ value="150"
91
+ range
92
+ ></temba-slider>
93
+ `);
94
+ expect(slider.range).to.equal(true);
95
+ expect(slider.min).to.equal(5);
96
+ expect(slider.max).to.equal(105);
97
+ expect(slider.value).to.equal('105');
98
+ await assertScreenshot(
99
+ 'slider/default-min-default-max-invalid-value',
100
+ getClip(slider)
101
+ );
102
+ });
103
+
104
+ it('renders a slider without visible range - default min default max no value', async () => {
105
+ const slider: TembaSlider = await createSlider(html`
106
+ <temba-slider label="My Slider"></temba-slider>
107
+ `);
108
+ expect(slider.range).to.equal(false);
109
+ expect(slider.min).to.equal(0);
110
+ expect(slider.max).to.equal(100);
111
+ expect(slider.value).to.equal('0');
112
+ await assertScreenshot('slider/no-visible-range-no-value', getClip(slider));
113
+ });
114
+
115
+ it('renders a slider without visible range - default min default max valid value', async () => {
116
+ const slider: TembaSlider = await createSlider(html`
117
+ <temba-slider label="My Slider" value="50"></temba-slider>
118
+ `);
119
+ expect(slider.range).to.equal(false);
120
+ expect(slider.min).to.equal(0);
121
+ expect(slider.max).to.equal(100);
122
+ expect(slider.value).to.equal('50');
123
+ await assertScreenshot(
124
+ 'slider/no-visible-range-valid-value',
125
+ getClip(slider)
126
+ );
127
+ });
128
+
129
+ it('renders a slider without visible range - default min default max invalid value', async () => {
130
+ const slider: TembaSlider = await createSlider(html`
131
+ <temba-slider label="My Slider" value="150"></temba-slider>
132
+ `);
133
+ expect(slider.range).to.equal(false);
134
+ expect(slider.min).to.equal(0);
135
+ expect(slider.max).to.equal(100);
136
+ expect(slider.value).to.equal('100');
137
+ await assertScreenshot(
138
+ 'slider/no-visible-range-invalid-value',
139
+ getClip(slider)
140
+ );
141
+ });
142
+
143
+ it('updates slider position on element value change', async () => {
144
+ const slider: TembaSlider = await createSlider(html`
145
+ <temba-slider
146
+ label="My Slider"
147
+ min="0"
148
+ max="100"
149
+ value="50"
150
+ range
151
+ ></temba-slider>
152
+ `);
153
+ slider.value = '75';
154
+ expect(slider.value).to.equal('75');
155
+ await assertScreenshot(
156
+ 'slider/update-slider-on-value-change',
157
+ getClip(slider)
158
+ );
159
+ });
160
+
161
+ it('updates slider position on when track clicked', async () => {
162
+ showMouse();
163
+
164
+ const slider: TembaSlider = await createSlider(html`
165
+ <temba-slider label="My Slider" value="50"></temba-slider>
166
+ `);
167
+ const clip = slider.getBoundingClientRect();
168
+
169
+ const y = clip.top + clip.height / 2;
170
+ const x75 = clip.left + (clip.width / 4) * 3;
171
+
172
+ // click track at three quarters
173
+ await moveMouse(x75, y);
174
+ await mouseDown();
175
+ await mouseUp();
176
+
177
+ expect(slider.value).to.equal('75');
178
+ await assertScreenshot(
179
+ 'slider/update-slider-on-track-clicked',
180
+ getClip(slider)
181
+ );
182
+ });
183
+
184
+ it('updates slider position on circle drag', async () => {
185
+ showMouse();
186
+
187
+ const slider: TembaSlider = await createSlider(html`
188
+ <temba-slider label="My Slider" value="0"></temba-slider>
189
+ `);
190
+ const clip = slider.getBoundingClientRect();
191
+
192
+ // hover over the circle at 0, mouse down, then drag to 80
193
+ const y = clip.top + clip.height / 2;
194
+ const x80 = clip.left + (clip.width / 5) * 4;
195
+
196
+ await moveMouse(clip.left, y);
197
+ await mouseDown();
198
+ await moveMouse(x80, y);
199
+ await mouseUp();
200
+
201
+ expect(slider.value).to.equal('80');
202
+ await assertScreenshot(
203
+ 'slider/update-slider-on-circle-dragged',
204
+ getClip(slider)
205
+ );
206
+ });
11
207
  });
@@ -176,7 +176,6 @@ describe('temba-textinput', () => {
176
176
  name: 'message',
177
177
  value: 'hello world',
178
178
  label: 'Your Message',
179
- // eslint-disable-next-line @typescript-eslint/camelcase
180
179
  help_text: 'Enter your message here',
181
180
  })
182
181
  );
@@ -206,7 +205,6 @@ describe('temba-textinput', () => {
206
205
  label: 'Your Date',
207
206
  datepicker: true,
208
207
  placeholder: 'Select a date',
209
- // eslint-disable-next-line @typescript-eslint/camelcase
210
208
  help_text: 'Dates can be helpful',
211
209
  })
212
210
  );
@@ -218,7 +216,8 @@ describe('temba-textinput', () => {
218
216
  await assertScreenshot('textinput/date-form', getClip(input));
219
217
  });
220
218
 
221
- it('shows initialized date', async () => {
219
+ // This test has intermittent failures, commenting for now
220
+ xit('shows initialized date', async () => {
222
221
  const input: TextInput = await createInput(
223
222
  getInputHTML({
224
223
  datepicker: true,
@@ -245,7 +244,7 @@ describe('temba-textinput', () => {
245
244
  await assertScreenshot('textinput/date-initialized', clip);
246
245
  });
247
246
 
248
- it('updates on date selection', async () => {
247
+ xit('updates on date selection', async () => {
249
248
  const input: TextInput = await createInput(
250
249
  getInputHTML({
251
250
  datepicker: true,
@@ -12,7 +12,7 @@ const getTip = async (
12
12
  attrs: { text?: string; position?: string; visible?: boolean } = {},
13
13
  slot = getTarget()
14
14
  ) => {
15
- return (await getComponent(TAG, attrs, slot, 20, 'margin:200px;')) as Tip;
15
+ return (await getComponent(TAG, attrs, slot, 20, 0, 'margin:200px;')) as Tip;
16
16
  };
17
17
 
18
18
  const getRightClip = (ele: HTMLElement) => {
@@ -8,7 +8,9 @@ interface Clip {
8
8
  }
9
9
 
10
10
  import { stub } from 'sinon';
11
- import { expect, fixture } from '@open-wc/testing';
11
+ import { expect, fixture, html, assert } from '@open-wc/testing';
12
+ import MouseHelper from './MouseHelper';
13
+ import { Store } from '../src/store/Store';
12
14
 
13
15
  export interface CodeMock {
14
16
  endpoint: RegExp;
@@ -20,6 +22,11 @@ const gets: CodeMock[] = [];
20
22
  const posts: CodeMock[] = [];
21
23
  let normalFetch;
22
24
 
25
+ export const showMouse = async () => {
26
+ const mouse = await fixture(html`<mouse-helper />`);
27
+ assert.instanceOf(mouse, MouseHelper);
28
+ };
29
+
23
30
  export const getAttributes = (attrs: any = {}) => {
24
31
  return `${Object.keys(attrs)
25
32
  .map((name: string) => {
@@ -36,21 +43,19 @@ export const getComponent = async (
36
43
  attrs: any = {},
37
44
  slot = '',
38
45
  width = 250,
46
+ height = 0,
39
47
  style = ''
40
48
  ) => {
41
49
  const spec = `<${tag} ${getAttributes(attrs)}>${slot}</${tag}>`;
42
-
43
- if (width > 0 || style) {
44
- const parentNode = document.createElement('div');
45
- if (width > 0) {
46
- parentNode.setAttribute('style', `width: ${width}px;${style}`);
47
- } else {
48
- parentNode.setAttribute('style', `${style}`);
49
- }
50
- return await fixture(spec, { parentNode });
51
- }
52
-
53
- return await fixture(spec);
50
+ const parentNode = document.createElement('div');
51
+ const styleAttribute = `
52
+ ${width > 0 ? `width:${width}px;` : ``}
53
+ ${height > 0 ? `height:${height}px;` : ``}
54
+ ${style ? style : ``}
55
+ `;
56
+
57
+ parentNode.setAttribute('style', styleAttribute);
58
+ return await fixture(spec, { parentNode });
54
59
  };
55
60
 
56
61
  const createResponse = mocked => {
@@ -109,11 +114,11 @@ after(() => {
109
114
  (window.fetch as any).restore();
110
115
  });
111
116
 
112
- export const mockGET = (endpoint: RegExp, body: any, headers: {} = {}) => {
117
+ export const mockGET = (endpoint: RegExp, body: any, headers: any = {}) => {
113
118
  gets.push({ endpoint, body, headers });
114
119
  };
115
120
 
116
- export const mockPOST = (endpoint: RegExp, body: any, headers: {} = {}) => {
121
+ export const mockPOST = (endpoint: RegExp, body: any, headers: any = {}) => {
117
122
  posts.push({ endpoint, body, headers });
118
123
  };
119
124
 
@@ -140,7 +145,7 @@ export const assertScreenshot = async (
140
145
  // (option: string) => option === '--screenshots'
141
146
  // );
142
147
 
143
- // await (window as any).waitFor(300);
148
+ await (window as any).waitFor(200);
144
149
 
145
150
  // console.log((window as any).watched);
146
151
  if ((window as any).watched) {
@@ -208,3 +213,16 @@ export const getHTMLAttrs = (attrs: any = {}) => {
208
213
  export const getHTML = (tag: string, attrs: any = {}) => {
209
214
  return `<${tag} ${getHTMLAttrs(attrs)}></${tag}>`;
210
215
  };
216
+
217
+ export const loadStore = async () => {
218
+ const store: Store = await fixture(
219
+ `<temba-store
220
+ completion='/test-assets/store/editor.json'
221
+ groups='/test-assets/store/groups.json'
222
+ languages='/test-assets/store/languages.json'
223
+ />`
224
+ );
225
+ await store.httpComplete;
226
+ await store.httpComplete;
227
+ return store;
228
+ };
@@ -0,0 +1,40 @@
1
+ {
2
+ "next": null,
3
+ "previous": null,
4
+ "results": [
5
+ {
6
+ "uuid": "contact-barak-archived",
7
+ "name": "Barack Obama",
8
+ "status": "archived",
9
+ "language": "fra",
10
+ "urns": [
11
+ "telegram:25028613#bobama"
12
+ ],
13
+ "groups": [
14
+ {
15
+ "uuid": "3da236a9-9eed-4db3-a18e-cfb58030c249",
16
+ "name": "Completed"
17
+ }
18
+ ],
19
+ "fields": {
20
+ "checkindate": "2008-01-20T00:00:00.000000Z",
21
+ "student_id": "B1322CVAF",
22
+ "joined": "2022-07-08T03:04:51.568443+01:00",
23
+ "last_message": "2022-06-16T00:16:00.000000Z",
24
+ "team": "All Stars",
25
+ "checkintime": "1:00pm",
26
+ "wantsresources": "No",
27
+ "age": "70",
28
+ "rating": "A+",
29
+ "businessloan_amount": "0 USD",
30
+ "unhcr_number": "14560212"
31
+ },
32
+ "flow": null,
33
+ "created_on": "2021-06-15T19:16:49.377501Z",
34
+ "modified_on": "2022-08-11T02:01:09.120952Z",
35
+ "last_seen_on": "2022-07-08T02:04:51.567474Z",
36
+ "blocked": false,
37
+ "stopped": false
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "next": null,
3
+ "previous": null,
4
+ "results": [
5
+ {
6
+ "uuid": "contact-dave-active",
7
+ "name": "Dave Matthews",
8
+ "status": "active",
9
+ "language": "eng",
10
+ "urns": [
11
+ "telegram:24028613#dmb4ever",
12
+ "facebook:123123",
13
+ "instagram:123232",
14
+ "line:12322",
15
+ "whatsapp:2342334422",
16
+ "tel:+12065553567"
17
+ ],
18
+ "groups": [
19
+ {
20
+ "uuid": "3da236a9-9eed-4db3-a18e-cfb58030c249",
21
+ "name": "Completed"
22
+ },
23
+ {
24
+ "uuid": "12e583b3-46f5-4d9d-85ca-15fb6153c1a0",
25
+ "name": "Open Tickets"
26
+ }
27
+ ],
28
+ "fields": {
29
+ "checkindate": "2022-04-21T00:20:00.000000Z",
30
+ "student_id": "A2342CVAF",
31
+ "joined": "2022-07-08T03:04:51.568443+01:00",
32
+ "last_message": "2022-06-16T00:16:00.000000Z",
33
+ "team": "Performers",
34
+ "checkintime": "3:00pm",
35
+ "wantsresources": "Yes",
36
+ "age": "30",
37
+ "rating": "A+",
38
+ "businessloan_amount": "24,300 RWF",
39
+ "unhcr_number": "34560212"
40
+ },
41
+ "flow": {
42
+ "uuid": "d6946f76-dbcd-4c3f-b0e4-2dfe2f04d5fd",
43
+ "name": "Daily Flow"
44
+ },
45
+ "created_on": "2021-06-15T19:16:49.377501Z",
46
+ "modified_on": "2022-08-11T02:01:09.120952Z",
47
+ "last_seen_on": "2022-07-08T02:04:51.567474Z",
48
+ "blocked": false,
49
+ "stopped": false
50
+ }
51
+ ]
52
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "next": null,
3
+ "previous": null,
4
+ "results": [
5
+ {
6
+ "uuid": "contact-barak-archived",
7
+ "name": "Michelle Obama",
8
+ "status": "blocked",
9
+ "language": "fra",
10
+ "urns": [
11
+ "telegram:25028613#bobama"
12
+ ],
13
+ "groups": [
14
+ {
15
+ "uuid": "3da236a9-9eed-4db3-a18e-cfb58030c249",
16
+ "name": "Completed"
17
+ }
18
+ ],
19
+ "fields": {
20
+ "checkindate": "2008-01-20T00:00:00.000000Z",
21
+ "student_id": "B1322CVAF",
22
+ "joined": "2022-07-08T03:04:51.568443+01:00",
23
+ "last_message": "2022-06-16T00:16:00.000000Z",
24
+ "team": "All Stars",
25
+ "checkintime": "1:00pm",
26
+ "wantsresources": "No",
27
+ "age": "70",
28
+ "rating": "A+",
29
+ "businessloan_amount": "0 USD",
30
+ "unhcr_number": "14560212"
31
+ },
32
+ "flow": null,
33
+ "created_on": "2021-06-15T19:16:49.377501Z",
34
+ "modified_on": "2022-08-11T02:01:09.120952Z",
35
+ "last_seen_on": "2022-07-08T02:04:51.567474Z",
36
+ "blocked": true,
37
+ "stopped": false
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "next": null,
3
+ "previous": null,
4
+ "results": [
5
+ {
6
+ "uuid": "contact-dave-active",
7
+ "name": "Tim Reynolds",
8
+ "status": "stopped",
9
+ "language": "eng",
10
+ "urns": [
11
+ "telegram:24028613#dmb4ever",
12
+ "facebook:123123",
13
+ "instagram:123232",
14
+ "line:12322",
15
+ "whatsapp:2342334422",
16
+ "tel:+12065553567"
17
+ ],
18
+ "groups": [
19
+ {
20
+ "uuid": "3da236a9-9eed-4db3-a18e-cfb58030c249",
21
+ "name": "Completed"
22
+ },
23
+ {
24
+ "uuid": "12e583b3-46f5-4d9d-85ca-15fb6153c1a0",
25
+ "name": "Open Tickets"
26
+ }
27
+ ],
28
+ "fields": {
29
+ "checkindate": "2022-04-21T00:20:00.000000Z",
30
+ "student_id": "A2342CVAF",
31
+ "joined": "2022-07-08T03:04:51.568443+01:00",
32
+ "last_message": "2022-06-16T00:16:00.000000Z",
33
+ "team": "Performers",
34
+ "checkintime": "3:00pm",
35
+ "wantsresources": "Yes",
36
+ "age": "30",
37
+ "rating": "A+",
38
+ "businessloan_amount": "24,300 RWF",
39
+ "unhcr_number": "34560212"
40
+ },
41
+ "flow": {
42
+ "uuid": "d6946f76-dbcd-4c3f-b0e4-2dfe2f04d5fd",
43
+ "name": "Daily Flow"
44
+ },
45
+ "created_on": "2021-06-15T19:16:49.377501Z",
46
+ "modified_on": "2022-08-11T02:01:09.120952Z",
47
+ "last_seen_on": "2022-07-08T02:04:51.567474Z",
48
+ "blocked": false,
49
+ "stopped": true
50
+ }
51
+ ]
52
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "next": null,
3
+ "previous": null,
4
+ "results": [
5
+ {
6
+ "uuid": "512e36c1-9101-4ca2-aceb-e638c520bf0c",
7
+ "name": "Reminders",
8
+ "query": null,
9
+ "status": "ready",
10
+ "system": false,
11
+ "count": 0
12
+ },
13
+ {
14
+ "uuid": "12e583b3-46f5-4d9d-85ca-15fb6153c1a0",
15
+ "name": "Open Tickets",
16
+ "query": "tickets > 0",
17
+ "status": "ready",
18
+ "system": true,
19
+ "count": 2
20
+ },
21
+ {
22
+ "uuid": "3da236a9-9eed-4db3-a18e-cfb58030c249",
23
+ "name": "Farmers",
24
+ "status": "ready",
25
+ "system": false,
26
+ "count": 1107
27
+ }
28
+ ]
29
+ }