@clickview/lite 0.52.0 → 0.52.2-dev.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 (354) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1329-lite-ec64553644.chunk.css → 1329-lite-55772b1036.chunk.css} +2 -2
  3. package/dist/css/{986-lite-6bdd43b250.chunk.css → 3532-lite-a3c7435ba4.chunk.css} +1 -1
  4. package/dist/css/{3969-lite-cb4c4824f6.chunk.css → 3969-lite-94ca677007.chunk.css} +1 -1
  5. package/dist/css/{4489-lite-e971ca8ab6.chunk.css → 4489-lite-49c28410f9.chunk.css} +1 -1
  6. package/dist/css/4690-lite-e1f88a6b47.chunk.css +4 -0
  7. package/dist/css/{537-lite-53bb989a96.chunk.css → 537-lite-390b70028c.chunk.css} +1 -1
  8. package/dist/css/{6489-lite-5ffcd32447.chunk.css → 6489-lite-a917e953c8.chunk.css} +1 -1
  9. package/dist/css/{8192-lite-cf3253f7b8.chunk.css → 8192-lite-282a716c03.chunk.css} +1 -1
  10. package/dist/css/{841-lite-93cc5f2469.chunk.css → 841-lite-4a007cd7be.chunk.css} +1 -1
  11. package/dist/css/{1820-lite-eaf5a9db1c.chunk.css → 999-lite-02c517e917.chunk.css} +1 -1
  12. package/dist/languages/en.json +1 -1
  13. package/dist/scripts/{1080-5b00242a31-lite.chunk.js → 1080-d24c9657ec-lite.chunk.js} +2 -2
  14. package/dist/scripts/{1080-5b00242a31-lite.chunk.js.map → 1080-d24c9657ec-lite.chunk.js.map} +1 -1
  15. package/dist/scripts/{9173-2392d447a6-lite.chunk.js → 1104-f057c6dea1-lite.chunk.js} +3 -3
  16. package/dist/scripts/{9173-2392d447a6-lite.chunk.js.map → 1104-f057c6dea1-lite.chunk.js.map} +1 -1
  17. package/dist/scripts/{1125-aac132b88f-lite.chunk.js → 1125-55dc0a4586-lite.chunk.js} +2 -2
  18. package/dist/scripts/1125-55dc0a4586-lite.chunk.js.map +1 -0
  19. package/dist/scripts/1169-3de585be6a-lite.chunk.js +2 -0
  20. package/dist/scripts/1169-3de585be6a-lite.chunk.js.map +1 -0
  21. package/dist/scripts/1329-850346e6e6-lite.chunk.js +3 -0
  22. package/dist/scripts/1329-850346e6e6-lite.chunk.js.map +1 -0
  23. package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-976d20185f-lite.chunk.js} +3 -3
  24. package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-976d20185f-lite.chunk.js.map} +1 -1
  25. package/dist/scripts/1672-60a3ab42f5-lite.chunk.js +3 -0
  26. package/dist/scripts/1672-60a3ab42f5-lite.chunk.js.map +1 -0
  27. package/dist/scripts/1725-1e864ba78a-lite.chunk.js +2 -0
  28. package/dist/scripts/1725-1e864ba78a-lite.chunk.js.map +1 -0
  29. package/dist/scripts/1891-109e674486-lite.chunk.js +2 -0
  30. package/dist/scripts/1891-109e674486-lite.chunk.js.map +1 -0
  31. package/dist/scripts/193-797b89797a-lite.chunk.js +2 -0
  32. package/dist/scripts/193-797b89797a-lite.chunk.js.map +1 -0
  33. package/dist/scripts/2004-7d1bf8b246-lite.chunk.js +3 -0
  34. package/dist/scripts/2004-7d1bf8b246-lite.chunk.js.map +1 -0
  35. package/dist/scripts/209-d2e6b93965-lite.chunk.js +2 -0
  36. package/dist/scripts/209-d2e6b93965-lite.chunk.js.map +1 -0
  37. package/dist/scripts/2134-b9145f8ce8-lite.chunk.js +2 -0
  38. package/dist/scripts/2134-b9145f8ce8-lite.chunk.js.map +1 -0
  39. package/dist/scripts/2952-6a32a90314-lite.chunk.js +2 -0
  40. package/dist/scripts/2952-6a32a90314-lite.chunk.js.map +1 -0
  41. package/dist/scripts/3003-7685240aed-lite.chunk.js +2 -0
  42. package/dist/scripts/3003-7685240aed-lite.chunk.js.map +1 -0
  43. package/dist/scripts/3020-6c9c7d2176-lite.chunk.js +2 -0
  44. package/dist/scripts/3020-6c9c7d2176-lite.chunk.js.map +1 -0
  45. package/dist/scripts/338-e21a3cd6fe-lite.chunk.js +3 -0
  46. package/dist/scripts/338-e21a3cd6fe-lite.chunk.js.map +1 -0
  47. package/dist/scripts/3532-2fed0eb7a4-lite.chunk.js +3 -0
  48. package/dist/scripts/3532-2fed0eb7a4-lite.chunk.js.map +1 -0
  49. package/dist/scripts/3633-025f418c19-lite.chunk.js +2 -0
  50. package/dist/scripts/3633-025f418c19-lite.chunk.js.map +1 -0
  51. package/dist/scripts/3640-694d1d6d2a-lite.chunk.js +2 -0
  52. package/dist/scripts/3640-694d1d6d2a-lite.chunk.js.map +1 -0
  53. package/dist/scripts/3728-2c71d3021e-lite.chunk.js +2 -0
  54. package/dist/scripts/3728-2c71d3021e-lite.chunk.js.map +1 -0
  55. package/dist/scripts/3966-0e3c4f329e-lite.chunk.js +2 -0
  56. package/dist/scripts/3966-0e3c4f329e-lite.chunk.js.map +1 -0
  57. package/dist/scripts/{3969-6d5f2f272f-lite.chunk.js → 3969-e36f1922eb-lite.chunk.js} +1 -1
  58. package/dist/scripts/{3969-6d5f2f272f-lite.chunk.js.map → 3969-e36f1922eb-lite.chunk.js.map} +1 -1
  59. package/dist/scripts/4063-5fa157657f-lite.chunk.js +2 -0
  60. package/dist/scripts/4063-5fa157657f-lite.chunk.js.map +1 -0
  61. package/dist/scripts/4182-7ae9edf4a5-lite.chunk.js +2 -0
  62. package/dist/scripts/4182-7ae9edf4a5-lite.chunk.js.map +1 -0
  63. package/dist/scripts/4395-37537617e2-lite.chunk.js +2 -0
  64. package/dist/scripts/4395-37537617e2-lite.chunk.js.map +1 -0
  65. package/dist/scripts/4502-83e4017e54-lite.chunk.js +2 -0
  66. package/dist/scripts/4502-83e4017e54-lite.chunk.js.map +1 -0
  67. package/dist/scripts/4690-d64efe8020-lite.chunk.js +2 -0
  68. package/dist/scripts/4690-d64efe8020-lite.chunk.js.map +1 -0
  69. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js +2 -0
  70. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js.map +1 -0
  71. package/dist/scripts/5143-d46f032e9e-lite.chunk.js +2 -0
  72. package/dist/scripts/5143-d46f032e9e-lite.chunk.js.map +1 -0
  73. package/dist/scripts/5157-855821ccce-lite.chunk.js +2 -0
  74. package/dist/scripts/5157-855821ccce-lite.chunk.js.map +1 -0
  75. package/dist/scripts/537-f63ad5863e-lite.chunk.js +3 -0
  76. package/dist/scripts/537-f63ad5863e-lite.chunk.js.map +1 -0
  77. package/dist/scripts/5549-bb01b24470-lite.chunk.js +2 -0
  78. package/dist/scripts/5549-bb01b24470-lite.chunk.js.map +1 -0
  79. package/dist/scripts/5573-304fea77a6-lite.chunk.js +2 -0
  80. package/dist/scripts/5573-304fea77a6-lite.chunk.js.map +1 -0
  81. package/dist/scripts/5595-842c05064c-lite.chunk.js +2 -0
  82. package/dist/scripts/5595-842c05064c-lite.chunk.js.map +1 -0
  83. package/dist/scripts/5606-680582b817-lite.chunk.js +2 -0
  84. package/dist/scripts/5606-680582b817-lite.chunk.js.map +1 -0
  85. package/dist/scripts/5877-e75dcce0ef-lite.chunk.js +2 -0
  86. package/dist/scripts/5877-e75dcce0ef-lite.chunk.js.map +1 -0
  87. package/dist/scripts/5936-b509535ec7-lite.chunk.js +2 -0
  88. package/dist/scripts/5936-b509535ec7-lite.chunk.js.map +1 -0
  89. package/dist/scripts/6054-1e9b86d631-lite.chunk.js +2 -0
  90. package/dist/scripts/6054-1e9b86d631-lite.chunk.js.map +1 -0
  91. package/dist/scripts/6094-6c1e95073a-lite.chunk.js +2 -0
  92. package/dist/scripts/6094-6c1e95073a-lite.chunk.js.map +1 -0
  93. package/dist/scripts/{6102-ce44fd00aa-lite.chunk.js → 6102-3ddcebe8a1-lite.chunk.js} +3 -3
  94. package/dist/scripts/{6102-ce44fd00aa-lite.chunk.js.map → 6102-3ddcebe8a1-lite.chunk.js.map} +1 -1
  95. package/dist/scripts/6138-5791b93cc1-lite.chunk.js +2 -0
  96. package/dist/scripts/6138-5791b93cc1-lite.chunk.js.map +1 -0
  97. package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-bf0ff6257f-lite.chunk.js} +3 -3
  98. package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-bf0ff6257f-lite.chunk.js.map} +1 -1
  99. package/dist/scripts/6263-cfd4ebfe8b-lite.chunk.js +2 -0
  100. package/dist/scripts/6263-cfd4ebfe8b-lite.chunk.js.map +1 -0
  101. package/dist/scripts/6290-eb223883fe-lite.chunk.js +2 -0
  102. package/dist/scripts/6290-eb223883fe-lite.chunk.js.map +1 -0
  103. package/dist/scripts/6470-1012a7889c-lite.chunk.js +2 -0
  104. package/dist/scripts/6470-1012a7889c-lite.chunk.js.map +1 -0
  105. package/dist/scripts/6481-39b72a58ef-lite.chunk.js +2 -0
  106. package/dist/scripts/6481-39b72a58ef-lite.chunk.js.map +1 -0
  107. package/dist/scripts/6489-9287613d14-lite.chunk.js +3 -0
  108. package/dist/scripts/6489-9287613d14-lite.chunk.js.map +1 -0
  109. package/dist/scripts/6532-9edab80cc6-lite.chunk.js +2 -0
  110. package/dist/scripts/6532-9edab80cc6-lite.chunk.js.map +1 -0
  111. package/dist/scripts/6604-2353daa8c0-lite.chunk.js +2 -0
  112. package/dist/scripts/6604-2353daa8c0-lite.chunk.js.map +1 -0
  113. package/dist/scripts/6741-572db2d1e9-lite.chunk.js +3 -0
  114. package/dist/scripts/6741-572db2d1e9-lite.chunk.js.map +1 -0
  115. package/dist/scripts/6746-72d35335ba-lite.chunk.js +2 -0
  116. package/dist/scripts/6746-72d35335ba-lite.chunk.js.map +1 -0
  117. package/dist/scripts/6852-f49f6f19d3-lite.chunk.js +2 -0
  118. package/dist/scripts/6852-f49f6f19d3-lite.chunk.js.map +1 -0
  119. package/dist/scripts/714-67adeb44da-lite.chunk.js +2 -0
  120. package/dist/scripts/714-67adeb44da-lite.chunk.js.map +1 -0
  121. package/dist/scripts/7163-8b5ab059b6-lite.chunk.js +2 -0
  122. package/dist/scripts/7163-8b5ab059b6-lite.chunk.js.map +1 -0
  123. package/dist/scripts/7178-4b9c33a63e-lite.chunk.js +2 -0
  124. package/dist/scripts/7178-4b9c33a63e-lite.chunk.js.map +1 -0
  125. package/dist/scripts/7223-e2f8a43b89-lite.chunk.js +2 -0
  126. package/dist/scripts/7223-e2f8a43b89-lite.chunk.js.map +1 -0
  127. package/dist/scripts/7234-595d44446f-lite.chunk.js +2 -0
  128. package/dist/scripts/7234-595d44446f-lite.chunk.js.map +1 -0
  129. package/dist/scripts/7267-dac72aeb98-lite.chunk.js +2 -0
  130. package/dist/scripts/7267-dac72aeb98-lite.chunk.js.map +1 -0
  131. package/dist/scripts/{7293-687e60dba2-lite.chunk.js → 7293-1ad518e385-lite.chunk.js} +2 -2
  132. package/dist/scripts/7293-1ad518e385-lite.chunk.js.map +1 -0
  133. package/dist/scripts/7679-f43777e02e-lite.chunk.js +2 -0
  134. package/dist/scripts/7679-f43777e02e-lite.chunk.js.map +1 -0
  135. package/dist/scripts/7757-2785d666ad-lite.chunk.js +2 -0
  136. package/dist/scripts/7757-2785d666ad-lite.chunk.js.map +1 -0
  137. package/dist/scripts/7795-b641104969-lite.chunk.js +2 -0
  138. package/dist/scripts/7795-b641104969-lite.chunk.js.map +1 -0
  139. package/dist/scripts/7818-cff0f2276c-lite.chunk.js +2 -0
  140. package/dist/scripts/7818-cff0f2276c-lite.chunk.js.map +1 -0
  141. package/dist/scripts/{8192-f26370c5a6-lite.chunk.js → 8192-ea5cee15d7-lite.chunk.js} +1 -1
  142. package/dist/scripts/{8192-f26370c5a6-lite.chunk.js.map → 8192-ea5cee15d7-lite.chunk.js.map} +1 -1
  143. package/dist/scripts/8200-1e4518c5d8-lite.chunk.js +3 -0
  144. package/dist/scripts/8200-1e4518c5d8-lite.chunk.js.map +1 -0
  145. package/dist/scripts/8323-fb330a8f47-lite.chunk.js +3 -0
  146. package/dist/scripts/8323-fb330a8f47-lite.chunk.js.map +1 -0
  147. package/dist/scripts/841-d69c7f4b4d-lite.chunk.js +3 -0
  148. package/dist/scripts/841-d69c7f4b4d-lite.chunk.js.map +1 -0
  149. package/dist/scripts/8709-f360baa021-lite.chunk.js +2 -0
  150. package/dist/scripts/8709-f360baa021-lite.chunk.js.map +1 -0
  151. package/dist/scripts/8722-00d7443d09-lite.chunk.js +2 -0
  152. package/dist/scripts/8722-00d7443d09-lite.chunk.js.map +1 -0
  153. package/dist/scripts/8982-6848480133-lite.chunk.js +2 -0
  154. package/dist/scripts/8982-6848480133-lite.chunk.js.map +1 -0
  155. package/dist/scripts/9016-e17da8b633-lite.chunk.js +3 -0
  156. package/dist/scripts/9016-e17da8b633-lite.chunk.js.map +1 -0
  157. package/dist/scripts/9173-a0c6c7be25-lite.chunk.js +2 -0
  158. package/dist/scripts/9173-a0c6c7be25-lite.chunk.js.map +1 -0
  159. package/dist/scripts/9226-a7c61f9129-lite.chunk.js +2 -0
  160. package/dist/scripts/9226-a7c61f9129-lite.chunk.js.map +1 -0
  161. package/dist/scripts/9230-537f1fcc38-lite.chunk.js +3 -0
  162. package/dist/scripts/9230-537f1fcc38-lite.chunk.js.map +1 -0
  163. package/dist/scripts/9359-deb452cb10-lite.chunk.js +2 -0
  164. package/dist/scripts/9359-deb452cb10-lite.chunk.js.map +1 -0
  165. package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-e9b5cdbdce-lite.chunk.js} +3 -3
  166. package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-e9b5cdbdce-lite.chunk.js.map} +1 -1
  167. package/dist/scripts/9399-721a368168-lite.chunk.js +2 -0
  168. package/dist/scripts/9399-721a368168-lite.chunk.js.map +1 -0
  169. package/dist/scripts/{9478-99486906b9-lite.chunk.js → 9478-abfa7ed3cc-lite.chunk.js} +3 -3
  170. package/dist/scripts/{9478-99486906b9-lite.chunk.js.map → 9478-abfa7ed3cc-lite.chunk.js.map} +1 -1
  171. package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-bf3d621a33-lite.chunk.js} +3 -3
  172. package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-bf3d621a33-lite.chunk.js.map} +1 -1
  173. package/dist/scripts/9719-ed1956607c-lite.chunk.js +3 -0
  174. package/dist/scripts/9719-ed1956607c-lite.chunk.js.map +1 -0
  175. package/dist/scripts/999-d7e93dac12-lite.chunk.js +2 -0
  176. package/dist/scripts/999-d7e93dac12-lite.chunk.js.map +1 -0
  177. package/dist/scripts/bundle-9a72d04e7d.min.js +3 -0
  178. package/dist/scripts/bundle-9a72d04e7d.min.js.map +1 -0
  179. package/package.json +1 -2
  180. package/dist/css/4690-lite-a4fdd7e61e.chunk.css +0 -4
  181. package/dist/scripts/1125-aac132b88f-lite.chunk.js.map +0 -1
  182. package/dist/scripts/1169-5a0d974a94-lite.chunk.js +0 -2
  183. package/dist/scripts/1169-5a0d974a94-lite.chunk.js.map +0 -1
  184. package/dist/scripts/1329-7064e95200-lite.chunk.js +0 -3
  185. package/dist/scripts/1329-7064e95200-lite.chunk.js.map +0 -1
  186. package/dist/scripts/1466-735d7dad48-lite.chunk.js +0 -3
  187. package/dist/scripts/1466-735d7dad48-lite.chunk.js.map +0 -1
  188. package/dist/scripts/1672-672f298d82-lite.chunk.js +0 -3
  189. package/dist/scripts/1672-672f298d82-lite.chunk.js.map +0 -1
  190. package/dist/scripts/1725-075015497e-lite.chunk.js +0 -2
  191. package/dist/scripts/1725-075015497e-lite.chunk.js.map +0 -1
  192. package/dist/scripts/1818-4949c9b748-lite.chunk.js +0 -2
  193. package/dist/scripts/1818-4949c9b748-lite.chunk.js.map +0 -1
  194. package/dist/scripts/1820-345bf53a3c-lite.chunk.js +0 -2
  195. package/dist/scripts/1820-345bf53a3c-lite.chunk.js.map +0 -1
  196. package/dist/scripts/1867-6f801de383-lite.chunk.js +0 -2
  197. package/dist/scripts/1867-6f801de383-lite.chunk.js.map +0 -1
  198. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js +0 -2
  199. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js.map +0 -1
  200. package/dist/scripts/193-f08b054631-lite.chunk.js +0 -2
  201. package/dist/scripts/193-f08b054631-lite.chunk.js.map +0 -1
  202. package/dist/scripts/2004-d891104ed4-lite.chunk.js +0 -3
  203. package/dist/scripts/2004-d891104ed4-lite.chunk.js.map +0 -1
  204. package/dist/scripts/209-57b05f6c83-lite.chunk.js +0 -2
  205. package/dist/scripts/209-57b05f6c83-lite.chunk.js.map +0 -1
  206. package/dist/scripts/2134-bca2f4697e-lite.chunk.js +0 -2
  207. package/dist/scripts/2134-bca2f4697e-lite.chunk.js.map +0 -1
  208. package/dist/scripts/2703-591ccf069c-lite.chunk.js +0 -2
  209. package/dist/scripts/2703-591ccf069c-lite.chunk.js.map +0 -1
  210. package/dist/scripts/3020-dbc723b098-lite.chunk.js +0 -2
  211. package/dist/scripts/3020-dbc723b098-lite.chunk.js.map +0 -1
  212. package/dist/scripts/3633-66d28be6f8-lite.chunk.js +0 -2
  213. package/dist/scripts/3633-66d28be6f8-lite.chunk.js.map +0 -1
  214. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js +0 -2
  215. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js.map +0 -1
  216. package/dist/scripts/3966-a3bb0e0161-lite.chunk.js +0 -2
  217. package/dist/scripts/3966-a3bb0e0161-lite.chunk.js.map +0 -1
  218. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js +0 -2
  219. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js.map +0 -1
  220. package/dist/scripts/4395-64da004753-lite.chunk.js +0 -2
  221. package/dist/scripts/4395-64da004753-lite.chunk.js.map +0 -1
  222. package/dist/scripts/4502-2e30d86385-lite.chunk.js +0 -2
  223. package/dist/scripts/4502-2e30d86385-lite.chunk.js.map +0 -1
  224. package/dist/scripts/4690-03372d68ac-lite.chunk.js +0 -2
  225. package/dist/scripts/4690-03372d68ac-lite.chunk.js.map +0 -1
  226. package/dist/scripts/5143-b6896dad98-lite.chunk.js +0 -2
  227. package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +0 -1
  228. package/dist/scripts/5157-54aeb51bdf-lite.chunk.js +0 -2
  229. package/dist/scripts/5157-54aeb51bdf-lite.chunk.js.map +0 -1
  230. package/dist/scripts/537-536e52ef91-lite.chunk.js +0 -3
  231. package/dist/scripts/537-536e52ef91-lite.chunk.js.map +0 -1
  232. package/dist/scripts/5562-e011962a62-lite.chunk.js +0 -3
  233. package/dist/scripts/5562-e011962a62-lite.chunk.js.map +0 -1
  234. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js +0 -2
  235. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js.map +0 -1
  236. package/dist/scripts/5595-96a0649af0-lite.chunk.js +0 -2
  237. package/dist/scripts/5595-96a0649af0-lite.chunk.js.map +0 -1
  238. package/dist/scripts/5606-6c25caedc4-lite.chunk.js +0 -2
  239. package/dist/scripts/5606-6c25caedc4-lite.chunk.js.map +0 -1
  240. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js +0 -2
  241. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js.map +0 -1
  242. package/dist/scripts/5936-f0177219db-lite.chunk.js +0 -2
  243. package/dist/scripts/5936-f0177219db-lite.chunk.js.map +0 -1
  244. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js +0 -2
  245. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js.map +0 -1
  246. package/dist/scripts/6094-7ec9341357-lite.chunk.js +0 -2
  247. package/dist/scripts/6094-7ec9341357-lite.chunk.js.map +0 -1
  248. package/dist/scripts/6138-d419f62f77-lite.chunk.js +0 -2
  249. package/dist/scripts/6138-d419f62f77-lite.chunk.js.map +0 -1
  250. package/dist/scripts/6263-af99de5a35-lite.chunk.js +0 -2
  251. package/dist/scripts/6263-af99de5a35-lite.chunk.js.map +0 -1
  252. package/dist/scripts/6290-56412c6663-lite.chunk.js +0 -2
  253. package/dist/scripts/6290-56412c6663-lite.chunk.js.map +0 -1
  254. package/dist/scripts/6415-8b354a10c7-lite.chunk.js +0 -2
  255. package/dist/scripts/6415-8b354a10c7-lite.chunk.js.map +0 -1
  256. package/dist/scripts/6470-6216086d63-lite.chunk.js +0 -2
  257. package/dist/scripts/6470-6216086d63-lite.chunk.js.map +0 -1
  258. package/dist/scripts/6481-03a4f1082e-lite.chunk.js +0 -2
  259. package/dist/scripts/6481-03a4f1082e-lite.chunk.js.map +0 -1
  260. package/dist/scripts/6489-953bb87f64-lite.chunk.js +0 -3
  261. package/dist/scripts/6489-953bb87f64-lite.chunk.js.map +0 -1
  262. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js +0 -2
  263. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js.map +0 -1
  264. package/dist/scripts/6546-bc3a8099ba-lite.chunk.js +0 -2
  265. package/dist/scripts/6546-bc3a8099ba-lite.chunk.js.map +0 -1
  266. package/dist/scripts/6587-23e7b1d196-lite.chunk.js +0 -2
  267. package/dist/scripts/6587-23e7b1d196-lite.chunk.js.map +0 -1
  268. package/dist/scripts/6604-92193d6d68-lite.chunk.js +0 -2
  269. package/dist/scripts/6604-92193d6d68-lite.chunk.js.map +0 -1
  270. package/dist/scripts/6741-ff3e4a33a5-lite.chunk.js +0 -3
  271. package/dist/scripts/6741-ff3e4a33a5-lite.chunk.js.map +0 -1
  272. package/dist/scripts/6746-b5b2739944-lite.chunk.js +0 -2
  273. package/dist/scripts/6746-b5b2739944-lite.chunk.js.map +0 -1
  274. package/dist/scripts/679-92bb80f478-lite.chunk.js +0 -2
  275. package/dist/scripts/679-92bb80f478-lite.chunk.js.map +0 -1
  276. package/dist/scripts/714-432082f4fa-lite.chunk.js +0 -2
  277. package/dist/scripts/714-432082f4fa-lite.chunk.js.map +0 -1
  278. package/dist/scripts/7178-e603ea6b58-lite.chunk.js +0 -2
  279. package/dist/scripts/7178-e603ea6b58-lite.chunk.js.map +0 -1
  280. package/dist/scripts/7223-135cc7d675-lite.chunk.js +0 -2
  281. package/dist/scripts/7223-135cc7d675-lite.chunk.js.map +0 -1
  282. package/dist/scripts/729-c704d587d3-lite.chunk.js +0 -2
  283. package/dist/scripts/729-c704d587d3-lite.chunk.js.map +0 -1
  284. package/dist/scripts/7293-687e60dba2-lite.chunk.js.map +0 -1
  285. package/dist/scripts/7679-81c2a40df4-lite.chunk.js +0 -2
  286. package/dist/scripts/7679-81c2a40df4-lite.chunk.js.map +0 -1
  287. package/dist/scripts/7757-b149c4c215-lite.chunk.js +0 -2
  288. package/dist/scripts/7757-b149c4c215-lite.chunk.js.map +0 -1
  289. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js +0 -2
  290. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js.map +0 -1
  291. package/dist/scripts/7818-2eafc5f812-lite.chunk.js +0 -2
  292. package/dist/scripts/7818-2eafc5f812-lite.chunk.js.map +0 -1
  293. package/dist/scripts/8200-8a55f1631f-lite.chunk.js +0 -3
  294. package/dist/scripts/8200-8a55f1631f-lite.chunk.js.map +0 -1
  295. package/dist/scripts/8323-99cb03891e-lite.chunk.js +0 -3
  296. package/dist/scripts/8323-99cb03891e-lite.chunk.js.map +0 -1
  297. package/dist/scripts/841-0c50273ad2-lite.chunk.js +0 -3
  298. package/dist/scripts/841-0c50273ad2-lite.chunk.js.map +0 -1
  299. package/dist/scripts/8722-c5f95553f2-lite.chunk.js +0 -2
  300. package/dist/scripts/8722-c5f95553f2-lite.chunk.js.map +0 -1
  301. package/dist/scripts/8766-9605550480-lite.chunk.js +0 -2
  302. package/dist/scripts/8766-9605550480-lite.chunk.js.map +0 -1
  303. package/dist/scripts/8800-c88fefeace-lite.chunk.js +0 -2
  304. package/dist/scripts/8800-c88fefeace-lite.chunk.js.map +0 -1
  305. package/dist/scripts/8982-63c31685bf-lite.chunk.js +0 -2
  306. package/dist/scripts/8982-63c31685bf-lite.chunk.js.map +0 -1
  307. package/dist/scripts/9016-0c078a39cb-lite.chunk.js +0 -3
  308. package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +0 -1
  309. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js +0 -2
  310. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +0 -1
  311. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +0 -3
  312. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +0 -1
  313. package/dist/scripts/9359-fa72fcdedc-lite.chunk.js +0 -2
  314. package/dist/scripts/9359-fa72fcdedc-lite.chunk.js.map +0 -1
  315. package/dist/scripts/9399-b724e4fb06-lite.chunk.js +0 -2
  316. package/dist/scripts/9399-b724e4fb06-lite.chunk.js.map +0 -1
  317. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js +0 -3
  318. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js.map +0 -1
  319. package/dist/scripts/986-e9379d557d-lite.chunk.js +0 -3
  320. package/dist/scripts/986-e9379d557d-lite.chunk.js.LICENSE.txt +0 -1
  321. package/dist/scripts/986-e9379d557d-lite.chunk.js.map +0 -1
  322. package/dist/scripts/bundle-1e1730f25e.min.js +0 -3
  323. package/dist/scripts/bundle-1e1730f25e.min.js.map +0 -1
  324. /package/dist/css/{9173-lite-b361d438f6.chunk.css → 1104-lite-b361d438f6.chunk.css} +0 -0
  325. /package/dist/css/{679-lite-00eb7dadb2.chunk.css → 2952-lite-00eb7dadb2.chunk.css} +0 -0
  326. /package/dist/css/{1867-lite-ae7bb51ed6.chunk.css → 3640-lite-ae7bb51ed6.chunk.css} +0 -0
  327. /package/dist/css/{4860-lite-93d7fad455.chunk.css → 4063-lite-93d7fad455.chunk.css} +0 -0
  328. /package/dist/css/{729-lite-93d7fad455.chunk.css → 4850-lite-93d7fad455.chunk.css} +0 -0
  329. /package/dist/css/{6546-lite-ae7bb51ed6.chunk.css → 5549-lite-ae7bb51ed6.chunk.css} +0 -0
  330. /package/dist/css/{8766-lite-8c5d7658ec.chunk.css → 7163-lite-8c5d7658ec.chunk.css} +0 -0
  331. /package/dist/css/{1818-lite-5ef1706d69.chunk.css → 7234-lite-5ef1706d69.chunk.css} +0 -0
  332. /package/dist/css/{6415-lite-707657102b.chunk.css → 9173-lite-707657102b.chunk.css} +0 -0
  333. /package/dist/scripts/{1329-7064e95200-lite.chunk.js.LICENSE.txt → 1104-f057c6dea1-lite.chunk.js.LICENSE.txt} +0 -0
  334. /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1329-850346e6e6-lite.chunk.js.LICENSE.txt} +0 -0
  335. /package/dist/scripts/{1466-735d7dad48-lite.chunk.js.LICENSE.txt → 1379-976d20185f-lite.chunk.js.LICENSE.txt} +0 -0
  336. /package/dist/scripts/{1672-672f298d82-lite.chunk.js.LICENSE.txt → 1672-60a3ab42f5-lite.chunk.js.LICENSE.txt} +0 -0
  337. /package/dist/scripts/{2004-d891104ed4-lite.chunk.js.LICENSE.txt → 2004-7d1bf8b246-lite.chunk.js.LICENSE.txt} +0 -0
  338. /package/dist/scripts/{537-536e52ef91-lite.chunk.js.LICENSE.txt → 338-e21a3cd6fe-lite.chunk.js.LICENSE.txt} +0 -0
  339. /package/dist/scripts/{5562-e011962a62-lite.chunk.js.LICENSE.txt → 3532-2fed0eb7a4-lite.chunk.js.LICENSE.txt} +0 -0
  340. /package/dist/scripts/{6102-ce44fd00aa-lite.chunk.js.LICENSE.txt → 537-f63ad5863e-lite.chunk.js.LICENSE.txt} +0 -0
  341. /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 6102-3ddcebe8a1-lite.chunk.js.LICENSE.txt} +0 -0
  342. /package/dist/scripts/{6489-953bb87f64-lite.chunk.js.LICENSE.txt → 624-bf0ff6257f-lite.chunk.js.LICENSE.txt} +0 -0
  343. /package/dist/scripts/{6741-ff3e4a33a5-lite.chunk.js.LICENSE.txt → 6489-9287613d14-lite.chunk.js.LICENSE.txt} +0 -0
  344. /package/dist/scripts/{8200-8a55f1631f-lite.chunk.js.LICENSE.txt → 6741-572db2d1e9-lite.chunk.js.LICENSE.txt} +0 -0
  345. /package/dist/scripts/{8323-99cb03891e-lite.chunk.js.LICENSE.txt → 8200-1e4518c5d8-lite.chunk.js.LICENSE.txt} +0 -0
  346. /package/dist/scripts/{841-0c50273ad2-lite.chunk.js.LICENSE.txt → 8323-fb330a8f47-lite.chunk.js.LICENSE.txt} +0 -0
  347. /package/dist/scripts/{9173-2392d447a6-lite.chunk.js.LICENSE.txt → 841-d69c7f4b4d-lite.chunk.js.LICENSE.txt} +0 -0
  348. /package/dist/scripts/{9016-0c078a39cb-lite.chunk.js.LICENSE.txt → 9016-e17da8b633-lite.chunk.js.LICENSE.txt} +0 -0
  349. /package/dist/scripts/{9230-6dee40b1fb-lite.chunk.js.LICENSE.txt → 9230-537f1fcc38-lite.chunk.js.LICENSE.txt} +0 -0
  350. /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-e9b5cdbdce-lite.chunk.js.LICENSE.txt} +0 -0
  351. /package/dist/scripts/{9478-99486906b9-lite.chunk.js.LICENSE.txt → 9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt} +0 -0
  352. /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-bf3d621a33-lite.chunk.js.LICENSE.txt} +0 -0
  353. /package/dist/scripts/{9719-cf7d4172b6-lite.chunk.js.LICENSE.txt → 9719-ed1956607c-lite.chunk.js.LICENSE.txt} +0 -0
  354. /package/dist/scripts/{bundle-1e1730f25e.min.js.LICENSE.txt → bundle-9a72d04e7d.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5562-e011962a62-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/images/components/CloseIcon.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/existing-account-sign-in/ExistingAccountSignIn.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/global-idps.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/GlobalIdps.tsx","file:///app/packages/libs/shared/src/apps/sign-up/enums/TrialStatus.ts","file:///app/packages/libs/shared/src/apps/sign-up/enums/UserType.ts","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/add-to-braze-step-item/AddToBrazeForm.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/add-to-braze-step-item/AddToBrazeStepItem.tsx","file:///app/node_modules/@googlemaps/js-api-loader/dist/index.esm.js","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useGoogleApi.tsx","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useAutoCompleteService.ts","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useCountryPlaceholder.tsx","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useDropdownEvents.tsx","file:///app/packages/libs/shared/src/apps/sign-up/helpers/PlaceHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useGeocoder.tsx","file:///app/packages/libs/shared/src/images/components/CrosshairIcon.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/search-school-step-item/search-school-step-item.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useLocalitySearch.tsx","file:///app/packages/libs/shared/src/apps/sign-up/errors/ApiError.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/FetchHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/UrlHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/enums/AccessPolicy.ts","file:///app/packages/libs/shared/src/apps/sign-up/fetch-requests/ProspectRequests.ts","file:///app/packages/libs/shared/src/apps/sign-up/fetch-requests/UserRequests.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/AccessPolicyHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/BrazeEventHelper.ts","file:///app/packages/libs/shared/src/enums/ProspectStatus.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/SchoolTypeHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/components/general/completed.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusImage.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/existing-customer/ExistingCustomer.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusMessage.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/verify-account/VerifyAccount.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/expired-trial/ExpiredTrial.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/trial-not-available/TrialNotAvailable.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/unsupported/Unsupported.tsx","file:///app/packages/libs/shared/src/apps/sign-up/constants/YoungStudentStorageKey.ts","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/CompletedStepItem.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/trial-status-completion/TrialStatusCompletion.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/added-to-braze/AddedToBraze.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/young-student/YoungStudent.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/completed-step-item/requested-access/RequestedAccess.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/enter-age-step-item/EnterAgeStepItem.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/enter-email-step-item/EnterEmailStepItem.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/request-access/getJoinRequestError.ts","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/select-user-type-step-item/user-type-option.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/select-user-type-step-item/UserTypeOptions.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/multi-step-form/ActiveStep.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/select-user-type-step-item/SelectUserTypeStepItem.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchSchoolStepItem.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/search-school-step-item/requestTrial.ts","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/cant-find-school-step-item/CantFindSchoolStepItem.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/enter-age-step-item/enter-age-step-item.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/steps/request-access/RequestAccess.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/multi-step-form/form-debugger/form-debugger.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/multi-step-form/form-debugger/FormDebugger.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/dot-crumbs/dot-crumbs.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/dot-crumbs/DotCrumbs.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/terms-and-conditions/TermsAndConditions.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/multi-step-form/MultiStepBackButton.tsx","file:///app/packages/libs/shared/src/apps/sign-up/layouts/full-page-layout/FullPageLayout.tsx","file:///app/packages/libs/shared/src/apps/sign-up/layouts/full-page-layout/full-page-layout.scss","file:///app/packages/libs/shared/src/apps/sign-up/layouts/popup-layout/PopupLayout.tsx","file:///app/packages/libs/shared/src/apps/sign-up/helpers/LayoutHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useSignUpSteps/reducers/NextStepReducer.ts","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useSignUpSteps/reducers/SignUpReducer.ts","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useSignUpSteps/reducers/BackReducer.ts","file:///app/packages/libs/shared/src/apps/sign-up/hooks/useSignUpSteps/useSignUpSteps.ts","file:///app/packages/libs/shared/src/apps/sign-up/components/multi-step-form/MultiStepForm.tsx","file:///app/packages/libs/shared/src/apps/sign-up/enums/MultiStepFormTypes.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/DataHelper.ts","file:///app/packages/libs/shared/src/apps/sign-up/helpers/ExternalLinkHelper.ts","file:///app/packages/libs/shared/src/hooks/useGeoLocation.ts","file:///app/packages/projects/lite/src/apps/sign-up/helpers/SignUpImages.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useGetSignUpAjaxUrls.ts","file:///app/packages/libs/shared/src/apps/sign-up/layouts/popup-layout/popup-layout.scss"],"sourcesContent":["import React from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg viewBox='0 0 24 24'>\n <path d='M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z'/>\n </svg>\n );\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, ...inputProps } = props;\n\n return (\n <div className='position-relative'>\n <input\n {...inputProps}\n ref={ref}\n className={`${props.className} ${styles.clearableInput}`}\n />\n {(!!props.value || showClearButton) &&\n <span\n className={`${styles.clearInput} position-absolute cursor-pointer text-secondary`}\n role='button'\n onClick={onClickClear}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"clearInput\":\"ygMgF\",\"clearableInput\":\"aYpO7\"};","import React from 'react';\n\ninterface ExistingAccountSignInProps {\n onClick: (e: React.MouseEvent<Element, MouseEvent>) => void;\n link: string;\n}\n\nexport function ExistingAccountSignIn(props: ExistingAccountSignInProps): JSX.Element {\n return (\n <>\n Have a ClickView account already?\n <a href={props.link} className='info-link ms-1' onClick={props.onClick}>\n Sign in\n </a>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"idpButton\":\"FDoJA\",\"idpImage\":\"bjN_j\",\"divider\":\"FfyN0\"};","import React from 'react';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { IdentityProvider } from 'libs/shared/apps/sign-up/interfaces/IdentityProvider';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport styles from './global-idps.scss';\n\nconst US_ONLY_IDPS: IdentityProvider[] = [\n {\n name: 'ClassLink',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/ZA2ew5',\n url: '/login?idp=classlink'\n },\n {\n name: 'Clever',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/LqlKgd',\n url: '/login?idp=clever'\n },\n {\n name: 'Google',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/l5x0jL',\n url: '/login?idp=google'\n },\n {\n name: 'Microsoft',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/xAxGPP',\n url: '/login?idp=microsoft'\n }\n];\n\nconst GLOBAL_IDPS: IdentityProvider[] = [];\n\ninterface GlobalIdpButtonProps {\n idp: IdentityProvider;\n /**\n * Because rendering globalIdps is conditional. We have a \"Don't have an account\" link at the bottom\n * which uses margin top. So the last item in this view must not have a margin bottom. - Sha\n */\n last?: boolean;\n onClick?: (idp: IdentityProvider) => void;\n attribution: string;\n}\n\nfunction GlobalIdpButton(props: GlobalIdpButtonProps): React.ReactElement {\n const {\n idp,\n last\n } = props;\n\n function onClick(): void {\n if (props.onClick) {\n props.onClick(idp);\n return;\n }\n\n const currentPathAndQuery = window.location.pathname + window.location.search;\n\n /**\n * Intentionally not using LocationUtils as to not bring a large number of dependencies into Auth - Sha\n */\n window.location.href = idp.url\n + '&redirectUrl=' + encodeURIComponent(currentPathAndQuery)\n + '&attribution=' + encodeURIComponent(props.attribution);\n }\n\n return (\n <button\n className={`btn btn-lg btn-outline-dark w-100 ${last ? '' : 'mb-3'} ${styles.idpButton}`}\n onClick={onClick}\n >\n {idp.logoUrl && <img src={idp.logoUrl} className={styles.idpImage} />}\n Continue with {idp.name}\n </button>\n );\n}\n\ninterface AuthIdpProps {\n idps: IdentityProvider[];\n onClick: (idp: IdentityProvider) => void;\n className?: string;\n}\n\ninterface LiteIdpProps {\n geoLocation: GeoLocation;\n className?: string;\n attribution: string;\n}\n\ntype GlobalIdpsProps = AuthIdpProps | LiteIdpProps\n\nexport function GlobalIdps(props: GlobalIdpsProps): JSX.Element {\n let idps = 'idps' in props ? props.idps : null;\n\n if (!idps?.length && 'geoLocation' in props) {\n idps = [...GLOBAL_IDPS];\n\n if (LocalityHelper.isCountryCodeUS(props.geoLocation?.countryCode))\n idps.unshift(...US_ONLY_IDPS);\n }\n\n if (!idps.length)\n return <></>;\n\n return (\n <div className={`${props.className ? props.className : ''}`}>\n <div className={`my-3 border-bottom position-relative ${styles.divider}`}></div>\n {idps.map((p, i) => (\n <GlobalIdpButton\n key={i}\n idp={p}\n onClick={'onClick' in props ? props.onClick : null}\n attribution={'attribution' in props ? props.attribution : null}\n />\n ))}\n </div>\n );\n}","/**\n * User Trial status states.\n * @readonly\n * @enum {string}\n */\nexport enum TrialStatus {\n /** @member {string} */\n /** The user does not qualify for a trial */\n Unavailable = 'unavailable',\n\n /** @member {string} */\n /** The user's trial expired */\n Expired = 'expired',\n\n /** @member {string} */\n /** The user is currently trialling - add the user to the active trial school */\n Active = 'active',\n\n /** @member {string} */\n /** The user already has full access */\n NotRequired = 'not-required',\n\n /** @member {string} */\n /** The user qualifies for a trial */\n Available = 'available',\n\n /** @member {string} */\n /** The prospects region is not supported */\n Unsupported = 'unsupported',\n\n /** @member {string} */\n /** The prospect has full access and allows user to auto join */\n UserAutoJoinAllowed = 'user-auto-join-allowed',\n\n /** @member {string} */\n /** The prospect has full access and allows user to request for join */\n UserJoinApprovalRequired = 'user-join-approval-required'\n}\n\n/**\n * When checking trial status of a user \n * they can have this extra status in the response\n */\nexport enum UserTrialStatus {\n /** @member {string} */\n /** The user does not qualify for a trial */\n InvalidEmail = 'invalid-email',\n}","export enum UserType {\n Staff = 'staff',\n Learner = 'learner'\n}","import React from 'react';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { AddToBrazeFormData, AddToBrazeFormErrors } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/AddToBrazeStepItem';\nimport { JobTitleInput } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput';\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ninterface AddToBrazeFormProps {\n country: string;\n loading: boolean;\n geoLocation: GeoLocation;\n\n handleSubmitForm: (data: AddToBrazeFormData) => void;\n removeErrorForKey: (key: keyof AddToBrazeFormErrors) => void;\n logUserAction(data: HashObject | HashObject[], analyticsOptions: AnalyticsOptions): void;\n\n errors?: AddToBrazeFormErrors;\n}\n\nexport function AddToBrazeForm(props: AddToBrazeFormProps): JSX.Element {\n const [ data, setData ] = React.useState<AddToBrazeFormData>({\n fullname: '',\n jobTitle: '',\n phone: ''\n });\n\n function onSubmitForm(event: React.FormEvent): void {\n event.preventDefault();\n props.handleSubmitForm(data);\n }\n\n function handleOnChangeFullName(event: React.ChangeEvent<HTMLInputElement>): void {\n event.preventDefault();\n setDataForKey('fullname', event.target.value);\n props.removeErrorForKey('fullname');\n props.removeErrorForKey('submission');\n }\n\n function handleOnChangePhone(event: React.ChangeEvent<HTMLInputElement>): void {\n event.preventDefault();\n setDataForKey('phone', event.target.value.trim());\n props.removeErrorForKey('phone');\n props.removeErrorForKey('submission');\n }\n \n function handleOnChangeRole(value: string): void {\n setDataForKey('jobTitle', value);\n props.removeErrorForKey('jobTitle');\n props.removeErrorForKey('submission');\n }\n\n function clearFullNameInput(): void {\n setDataForKey('fullname', '');\n props.removeErrorForKey('fullname');\n props.removeErrorForKey('submission');\n }\n\n function clearPhoneInput(): void {\n setDataForKey('phone', '');\n props.removeErrorForKey('phone');\n props.removeErrorForKey('submission');\n }\n\n function setDataForKey<X extends keyof AddToBrazeFormData>(key: X, value: AddToBrazeFormData[X]) {\n setData(data => ({\n ...data,\n [key]: value\n }));\n }\n\n function canRequestTrial(): boolean {\n const { fullname, jobTitle, phone } = data;\n if (!fullname.length || !jobTitle.length || !phone.length) return false;\n \n if (Object.keys(props.errors).length) return false;\n \n return true;\n }\n\n return (\n <div className='text-center'>\n <h1 className='text-center h4'>\n A little more about you\n </h1>\n <p>\n Please enter your details.\n </p>\n <form onSubmit={onSubmitForm}>\n <div className='form-group text-start'>\n <label\n className='d-block fw-bold mb-1'\n htmlFor='fullname-input'\n >\n Full name\n </label>\n <ClearableInput\n value={data.fullname}\n onChange={handleOnChangeFullName}\n name='fullname-input'\n id='fullname-input'\n type='text'\n className={`form-control form-control-lg ${props.errors.fullname?.length ? 'is-invalid' : ''}`}\n placeholder='Enter your name'\n onClickClear={clearFullNameInput}\n autoFocus\n />\n {props.errors.fullname &&\n <div className='invalid-feedback d-block'>{props.errors.fullname}</div>\n }\n </div>\n <div className='form-group text-start'>\n <label\n className='d-block fw-bold mb-1'\n htmlFor='phone-input'\n >\n Contact number\n </label>\n <ClearableInput\n value={data.phone}\n onChange={handleOnChangePhone}\n name='phone-input'\n id='phone-input'\n type='tel'\n className={`form-control form-control-lg ${props.errors.phone?.length ? 'is-invalid' : ''}`}\n placeholder='Enter your phone number'\n onClickClear={clearPhoneInput}\n />\n {props.errors.phone &&\n <div className='invalid-feedback d-block'>{props.errors.phone}</div>\n }\n </div>\n <div className='form-group text-start'>\n <label\n className='d-block fw-bold mb-1'\n htmlFor='jobTitle-select'\n >\n Job title\n </label>\n <JobTitleInput\n id='jobTitle-select'\n countryCode={LocalityHelper.getCountryCode(props.country)}\n onChange={handleOnChangeRole}\n error={props.errors?.jobTitle}\n size='lg'\n labelClassName='d-none'\n />\n </div>\n {!!props.errors?.submission &&\n <div className='form-group invalid-feedback d-block'>\n {props.errors.submission}\n </div>\n }\n <div className='form-group mb-1'>\n <SpinnerButton\n className='btn-lg w-100'\n variant='dark'\n onClick={() => props.handleSubmitForm(data)}\n showSpinner={props.loading}\n disabled={props.loading || !canRequestTrial()}\n >\n Submit\n </SpinnerButton>\n </div>\n </form>\n </div>\n );\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces/AnalyticsTypes';\nimport { HashObject } from 'libs/analytics/interfaces/HashObject';\n\nimport { AddToBrazeForm } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/AddToBrazeForm';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nconst MAX_STRING_LENGTH = 255;\n\nconst INVALID_STRING_REGEX = /\\$+[\\w\\s]?/;\nconst PHONE_REGEX = /^\\+?\\d{4,255}$/;\n\ninterface AddToBrazeStepItemProps extends BaseStepItemProps {\n email: string;\n trialStatus: TrialStatus;\n trialCreated: boolean;\n userType: UserType;\n\n prospectId?: string;\n schoolName?: string;\n schoolType?: string;\n schoolPostCode?: string;\n province?: string;\n country?: string;\n}\n\nexport interface AddToBrazeFormData {\n fullname: string;\n jobTitle: string;\n phone: string;\n}\n\nexport interface AddToBrazeFormErrors {\n fullname?: string;\n jobTitle?: string;\n phone?: string;\n submission?: string;\n}\n\nfunction splitName(fullName: string) {\n if (!fullName)\n return { firstName: '', surname: '' };\n\n const name = fullName.split(' ').filter(x => x.length);\n return {\n firstName: name.shift(),\n surname: name.join(' ')\n };\n}\n\nexport function AddToBrazeStepItem(props: AddToBrazeStepItemProps): JSX.Element {\n const [ loading, setLoading ] = React.useState(false);\n const [ errors, setErrors ] = React.useState<AddToBrazeFormErrors>({});\n\n React.useEffect(() => {\n if (props.userType !== UserType.Learner)\n return;\n \n props.complete({\n completionStep: 'trial-status',\n trialCreated: false,\n trialStatus: TrialStatus.Unsupported\n });\n }, []);\n\n function handleSubmitForm(data: AddToBrazeFormData): void {\n if (!validate(data)) return;\n \n const excludeFromBraze = data.jobTitle?.toLowerCase().includes('student') ||\n data.jobTitle?.toLowerCase().includes('parent');\n\n if (excludeFromBraze) {\n onComplete();\n return;\n }\n\n addToBraze(data);\n }\n\n function getPayload(data: AddToBrazeFormData): HashObject<string|boolean> {\n const { firstName, surname } = splitName(data.fullname);\n\n const payload: HashObject<string|boolean> = {\n prospect_id: props?.prospectId,\n email: props?.email,\n organisation_sub_type: BrazeHelper.getSchoolType(props?.schoolType),\n account_name: props?.schoolName,\n account_post_code: props?.schoolPostCode,\n account_country: props?.country,\n province: props?.province,\n first_name: firstName,\n last_name: surname,\n job_title: data.jobTitle,\n sync_to_crm: true,\n event_topic: BrazeHelper.getEventTopic()\n };\n\n return BrazeHelper.removeEmptyKeys(payload);\n }\n\n async function addToBraze(data: AddToBrazeFormData) {\n if (loading) return;\n\n if (props.userType === UserType.Learner) {\n setErrors({\n ...errors,\n submission: 'Something went wrong! Please try again later.'\n });\n return;\n }\n\n props.logUserAction({}, {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Next,\n descriptor: SignUpDescriptors.AddToBraze\n });\n\n setLoading(true);\n\n const payload = getPayload(data);\n /**\n * If the geolocation is a fallback (in staging usually)\n * This will switch it to users current geolocation's country or their selected schools country\n * - Nish\n */\n const geoLocation = props.geoLocation.isFallback ?\n { countryCode: props.country || props.geoLocation.countryCode } : props.geoLocation;\n\n const client = await BrazeHelper.getClient({\n brazeConfig: props.brazeConfig,\n geoLocation: geoLocation,\n productName: props.productName,\n version: props.version\n });\n const { firstName, surname } = splitName(data.fullname);\n\n let userAttributes: HashObject<string|boolean|Record<string, string>> = {\n prospect_id: props?.prospectId,\n organisation_sub_type: BrazeHelper.getSchoolType(props?.schoolType),\n account_name: props?.schoolName,\n account_address: {\n country_code: props?.country,\n province: BrazeHelper.parseProvince(props?.province || '')\n },\n job_title: data.jobTitle,\n sync_to_crm: true\n };\n userAttributes = BrazeHelper.removeEmptyKeys(userAttributes);\n\n try {\n client.setUser(BrazeHelper.hashedEmail(props?.email));\n client.setUserFirstName(firstName);\n client.setUserLastName(surname);\n client.setUserPhone(data.phone);\n client.setUserEmail(props?.email);\n client.openSession();\n client.bulkSetCustomUserAttributes(userAttributes);\n client.logEvent({\n type: BrazeHelper.getCustomEventType(),\n data: payload\n });\n client.sendData((success: boolean) => {\n if (!success) {\n setErrors({\n ...errors,\n submission: 'Something went wrong! Please try again later.'\n });\n } else {\n setErrors({});\n }\n setLoading(false);\n });\n } catch {\n setErrors({\n ...errors,\n submission: 'Something went wrong! Please try again later.'\n });\n }\n\n if (!Object.keys(errors).length) {\n onComplete();\n }\n }\n\n\n function onComplete(): void {\n props.complete({\n completionStep: 'added-to-braze',\n trialCreated: false,\n trialStatus: null\n });\n }\n \n function removeErrorForKey(key: keyof AddToBrazeFormErrors) {\n if (!Object.keys(errors).length) return;\n\n if (!errors[key]) return;\n\n const errorObject = { ...errors };\n\n delete errorObject[key];\n\n setErrors(errorObject);\n }\n\n\n function validate(data: AddToBrazeFormData): boolean {\n const { fullname, jobTitle, phone } = data;\n const { firstName, surname } = splitName(fullname);\n\n const errorObject: AddToBrazeFormErrors = {};\n\n \n if (!firstName || !surname)\n errorObject.fullname = 'Please enter your full name.';\n \n if (INVALID_STRING_REGEX.test(firstName) || INVALID_STRING_REGEX.test(surname))\n errorObject.fullname = 'Please enter your full name.';\n \n if (fullname.length > MAX_STRING_LENGTH)\n errorObject.fullname = `Full name cannot exceed max length of ${MAX_STRING_LENGTH} characters.`;\n\n if (!jobTitle?.length)\n errorObject.jobTitle = 'Please enter your job title.';\n\n if (INVALID_STRING_REGEX.test(jobTitle))\n errorObject.jobTitle = 'Please enter a valid job title.';\n\n if (jobTitle.length > MAX_STRING_LENGTH)\n errorObject.jobTitle = `Job Title cannot exceed max length of ${MAX_STRING_LENGTH} characters.`;\n\n if (!phone?.length)\n errorObject.phone = 'Please enter your phone number.';\n\n if (INVALID_STRING_REGEX.test(phone) || !PHONE_REGEX.test(phone))\n errorObject.phone = 'Please enter a valid phone number.';\n\n setErrors(errorObject);\n\n return !Object.keys(errorObject).length;\n }\n\n return (\n <AddToBrazeForm\n errors={errors}\n loading={loading}\n geoLocation={props.geoLocation}\n country={props.country || props.geoLocation?.countryCode}\n logUserAction={props.logUserAction}\n handleSubmitForm={handleSubmitForm}\n removeErrorForKey={removeErrorForKey}\n />\n );\n}","// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.CALLBACK = \"__googleMapsCallback\";\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!fastDeepEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n */\n createUrl() {\n let url = this.url;\n url += `?callback=${this.CALLBACK}`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `&region=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const url = this.createUrl();\n const script = document.createElement(\"script\");\n script.id = this.id;\n script.type = \"text/javascript\";\n script.src = url;\n script.onerror = this.loadErrorCallback.bind(this);\n script.defer = true;\n script.async = true;\n if (this.nonce) {\n script.nonce = this.nonce;\n }\n document.head.appendChild(script);\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.log(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n setCallback() {\n window.__googleMapsCallback = this.callback.bind(this);\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setCallback();\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.esm.js.map\n","import React from 'react';\nimport { Loader } from '@googlemaps/js-api-loader';\n\ntype LibrariesType = 'drawing' | 'geometry' | 'places' | 'visualization';\n\ninterface UseGoogleApiOptions {\n libraries?: LibrariesType[];\n apiKey: string;\n}\n\nfunction setupLoader(config: UseGoogleApiOptions) {\n return new Loader({\n apiKey: config.apiKey,\n version: 'weekly',\n libraries: config.libraries,\n retries: 3\n });\n}\n\nexport function useGoogleApi(options: UseGoogleApiOptions) {\n const config = {\n apiKey: options.apiKey,\n libraries: options.libraries || ['places']\n };\n\n const [ loaded, setLoaded ] = React.useState(false);\n const [ loader, setLoader ] = React.useState<Loader>(setupLoader(config));\n\n React.useEffect(() => {\n loaderCallback();\n }, []);\n\n function loaderCallback(onLoad?: () => void, onError?: (error: ErrorEvent) => void): void {\n if (!loader) {\n setLoader(setupLoader(config));\n return;\n }\n \n loader.loadCallback(error => {\n if (error) {\n setLoaded(false);\n onError && onError(error);\n return;\n }\n\n setLoaded(true);\n onLoad && onLoad();\n });\n }\n\n return {\n loader,\n scriptLoaded: loaded,\n onGoogleApiReady: loaderCallback\n };\n}","import React from 'react';\n\nimport { useGoogleApi } from 'libs/shared/apps/sign-up/hooks/useGoogleApi';\n\ninterface AutoCompleteServiceOptions {\n googleApiKey: string;\n}\n\nexport function useAutoCompleteService(options: AutoCompleteServiceOptions) {\n const { scriptLoaded } = useGoogleApi({ apiKey: options.googleApiKey });\n const [ autoCompleteService, setAutocompleteService ] = React.useState<google.maps.places.AutocompleteService>();\n\n React.useEffect(() => {\n if (!scriptLoaded)\n return;\n\n setAutocompleteService(new google.maps.places.AutocompleteService());\n }, [scriptLoaded]);\n\n return autoCompleteService;\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { useAutoCompleteService } from 'libs/shared/apps/sign-up/hooks/useAutoCompleteService';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nconst DEFAULT_COUNTRY_CODE = 'us';\nconst STORAGE_KEY = 'country:placeholder:text';\n\ninterface CountryPlaceholderParams {\n geoLocation: GeoLocation;\n apiKey: string;\n makeRequest?: boolean;\n template?: string;\n templateKey?: string;\n}\n\nfunction getCachedPlaceholder(geoLocation: GeoLocation): string {\n const supportedPlaceholder = LocalityHelper.getLocalizedLocalityPlaceholderText(geoLocation?.countryCode);\n if (supportedPlaceholder)\n return supportedPlaceholder;\n\n const cachedPlaceholder: string = LocalStorageHelper.cacheGet(`${STORAGE_KEY}:${geoLocation?.countryCode}`);\n if (cachedPlaceholder)\n return cachedPlaceholder;\n\n return undefined;\n}\n\nfunction getRandomLowerCaseLetter() {\n return String.fromCharCode(96 + RandomHelper.getRandomInt(26));\n}\n\nexport function useCountryPlaceholder({\n apiKey,\n geoLocation,\n makeRequest = true,\n template = 'E.g. [placeholder]',\n templateKey = '[placeholder]'\n}: CountryPlaceholderParams) {\n const autoCompleteService = useAutoCompleteService({ googleApiKey: apiKey });\n const [ placeholder, setPlaceholder ] = React.useState<string>(() => getCachedPlaceholder(geoLocation));\n\n\n React.useEffect(() => {\n if (placeholder || !autoCompleteService || !makeRequest)\n return;\n\n const countryCode = geoLocation?.countryCode || DEFAULT_COUNTRY_CODE;\n\n const searchInput = getRandomLowerCaseLetter();\n\n const request: google.maps.places.AutocompletionRequest = {\n input: searchInput,\n types: ['(cities)'],\n region: countryCode,\n componentRestrictions: { country: countryCode }\n };\n\n autoCompleteService.getPlacePredictions(\n request,\n (result, status) => getRandomLocality(result, status, countryCode)\n );\n }, [ placeholder, autoCompleteService, geoLocation, makeRequest ]);\n\n function setCachedPlaceholder(placeholder: string, countryCode: string) {\n LocalStorageHelper.cacheSet(`${STORAGE_KEY}:${countryCode}`, placeholder, 86400); // 24 hour\n setPlaceholder(placeholder);\n }\n\n function getRandomLocality(\n results: google.maps.places.AutocompletePrediction[],\n status: google.maps.places.PlacesServiceStatus,\n countryCode: string\n ) {\n if (status !== google.maps.places.PlacesServiceStatus.OK || !results) {\n setCachedPlaceholder(LocalityHelper.getLocalizedLocalityPlaceholderText(DEFAULT_COUNTRY_CODE), countryCode);\n return;\n }\n\n const randomIndex = RandomHelper.getRandomInt(results.length);\n const randomCity = results[randomIndex].description;\n\n setCachedPlaceholder(template.replace(templateKey, randomCity), countryCode);\n }\n\n return placeholder;\n}","import React from 'react';\n\ninterface UseDropdownEventsOptions {\n onSelected: (index: number) => void;\n itemCount: number;\n hideOnBlur: boolean;\n}\n\nexport function useDropdownEvents(options: UseDropdownEventsOptions) {\n const [ selectedIndex, setSelectedIndex ] = React.useState<number>(0);\n const containerRef = React.useRef<HTMLDivElement>();\n const [ hide, setHide ] = React.useState(false);\n\n function scrollIntoView(): void {\n if (!containerRef.current)\n return;\n\n containerRef.current.children[selectedIndex - 1]?.scrollIntoView({ block: 'center' });\n }\n\n function onKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (event.code === 'ArrowDown') {\n event.stopPropagation();\n event.preventDefault();\n\n let newIndex = selectedIndex + 1;\n if (newIndex > options.itemCount)\n newIndex = 1;\n\n setSelectedIndex(newIndex);\n scrollIntoView();\n return;\n }\n\n if (event.code === 'ArrowUp') {\n event.stopPropagation();\n event.preventDefault();\n\n let newIndex = selectedIndex - 1;\n if (newIndex <= 0)\n newIndex = options.itemCount;\n\n setSelectedIndex(newIndex);\n scrollIntoView();\n return;\n }\n\n if (event.code === 'Enter' && selectedIndex > 0) {\n event.stopPropagation();\n event.preventDefault();\n\n options.onSelected(selectedIndex - 1);\n return;\n }\n\n setSelectedIndex(0);\n }\n \n function onFocus() {\n if (!options.hideOnBlur)\n return;\n\n setHide(false);\n }\n\n function onBlur() {\n if (!options.hideOnBlur)\n return;\n \n setHide(true);\n }\n\n return {\n selectedIndex,\n onKeyDown,\n containerRef,\n hide,\n onFocus,\n onBlur\n };\n}","export interface PlaceDetailsType {\n locality?: string;\n country?: string;\n city?: string;\n province?: string;\n postalCode?: string;\n longitude?: number;\n latitude?: number;\n}\n\nexport const PlaceHelper = {\n getPlaceDetails(result: google.maps.GeocoderResult | google.maps.places.PlaceResult): PlaceDetailsType {\n let city: string;\n let province: string;\n let country: string;\n let postalCode: string;\n\n const locality = result.formatted_address;\n \n for (const component of result.address_components) {\n for (const type of component.types) {\n /**\n * @todo if we cant find any of these type we will return an empty value so we need to look for more types (eg for. Austin Township, IL)\n */\n\n if (type === 'locality') {\n // locality = component.short_name;\n city = component.short_name;\n }\n\n if (type === 'administrative_area_level_1') {\n // locality += ', ' + component.short_name;\n province = component.short_name;\n }\n\n if (type === 'postal_code') {\n // locality += ', ' + component.short_name;\n postalCode = component.short_name;\n }\n\n if (type === 'country')\n country = component.short_name;\n }\n }\n return { locality, country, postalCode, city, province };\n }\n};","import React from 'react';\n\nimport { PlaceDetailsType, PlaceHelper } from 'libs/shared/apps/sign-up/helpers/PlaceHelper';\nimport { useGoogleApi } from 'libs/shared/apps/sign-up/hooks/useGoogleApi';\n\n/**\n * @note\n * In version 4.1.x the types have been changed to:\n * PositionError = GeolocationPositionError\n * Position = GeolocationPosition\n */\n\nconst ErrorPhraseMap: {[key: number]: string} = {\n 1: 'geocoderPermissionDenied',\n 2: 'geocoderUnavailable',\n 3: 'geocoderTimeout'\n};\n\ninterface UseGeocoderOptions {\n apiKey: string;\n onPositionError: (error: string) => void;\n}\n\nexport function useGeocoder(options: UseGeocoderOptions) {\n const [ details, setDetails ] = React.useState<PlaceDetailsType>({});\n\n const { onGoogleApiReady } = useGoogleApi(options);\n\n function onClickGetCurrentLocation() {\n onGoogleApiReady(() => {\n window.navigator.geolocation.getCurrentPosition(\n onPositionSuccess,\n onPositionError\n );\n });\n }\n\n function onPositionSuccess(position: GeolocationPosition) {\n const { latitude, longitude } = position.coords;\n \n const location = new google.maps.LatLng(latitude, longitude);\n const geocoder = new google.maps.Geocoder();\n\n geocoder.geocode(\n { location },\n (result, status) => {\n /**\n * @todo Handle state when status is other than OK\n */\n if (status !== google.maps.GeocoderStatus.OK)\n return;\n\n /**\n * @todo Handle state if this returns undefined\n */\n const place = result.find(item => {\n return item.types.includes('locality') || item.types.includes('administrative_area_level_2');\n });\n \n const details = PlaceHelper.getPlaceDetails(place);\n setDetails({\n ...details,\n longitude: longitude,\n latitude: latitude\n });\n }\n );\n }\n\n function onPositionError(error: GeolocationPositionError): void {\n let errorMessagePhrase = ErrorPhraseMap[error.code];\n if (!errorMessagePhrase) {\n errorMessagePhrase = 'geocoderUnknown';\n }\n options.onPositionError('We are unable to access your location. Please try again later.');\n }\n\n return {\n placeDetails: details,\n onClickGetCurrentLocation\n };\n}","import React from 'react';\n\nexport function CrosshairIcon(): JSX.Element {\n return (\n <svg viewBox='0 0 24 24'>\n <path d='m12.00559,20.40189c4.60881,0 8.37242,-3.78424 8.37242,-8.40189c0,-4.61764 -3.76361,-8.40187 -8.37242,-8.40187c-4.62002,0 -8.38365,3.78422 -8.38365,8.40187c0,4.61765 3.76364,8.40189 8.38365,8.40189zm0,-1.65557c-3.75235,0 -6.67085,-2.96208 -6.67085,-6.74632c0,-3.7842 2.91851,-6.74625 6.67085,-6.74625c3.74105,0 6.67084,2.96206 6.67084,6.74625c0,3.78424 -2.92978,6.74632 -6.67084,6.74632zm-10.14151,-6.02552l6.01731,0c0.40566,0 0.72118,-0.31536 0.72118,-0.7208c0,-0.40544 -0.31552,-0.7208 -0.72118,-0.7208l-6.01731,0c-0.40566,0 -0.72117,0.31536 -0.72117,0.7208c0,0.40544 0.31551,0.7208 0.72118,0.7208l-0.00001,0zm14.25442,0l6.0174,0c0.40565,0 0.72118,-0.31536 0.72118,-0.7208c0,-0.40544 -0.31553,-0.7208 -0.72118,-0.7208l-6.0174,0c-0.40565,0 -0.72118,0.31536 -0.72118,0.7208c0,0.40544 0.31553,0.7208 0.72118,0.7208zm-4.12417,-4.1221c0.40566,0 0.72118,-0.31534 0.72118,-0.70952l0,-6.02547c0,-0.40544 -0.31552,-0.7208 -0.72118,-0.7208c-0.3944,0 -0.7099,0.31536 -0.7099,0.7208l0,6.02547c0,0.39418 0.31551,0.70952 0.7099,0.70952zm0,14.25838c0.40566,0 0.72118,-0.3154 0.72118,-0.72077l0,-6.02541c0,-0.39425 -0.31552,-0.70965 -0.72118,-0.70965c-0.3944,0 -0.7099,0.3154 -0.7099,0.70965l0,6.02541c0,0.40538 0.31551,0.72077 0.7099,0.72077z'/>\n </svg>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"baseText\":\"KL3Q_\",\"inputFocused\":\"I6wQy\",\"dropdown\":\"oI3z7\",\"suggestionContainer\":\"Y78ea\",\"suggestionItem\":\"magL7\",\"suggestionLoading\":\"W7rH_\",\"noSuggestion\":\"XXSnS\",\"large\":\"b0Mz9\",\"input\":\"ChY5L\",\"selected\":\"snnHR\",\"useMyLocation\":\"dwmvC\"};","import React from 'react';\n\nimport { AnalyticsOptions, HashObject, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { PlaceDetailsType } from 'libs/shared/apps/sign-up/helpers/PlaceHelper';\nimport { useCountryPlaceholder } from 'libs/shared/apps/sign-up/hooks/useCountryPlaceholder';\nimport { useDropdownEvents } from 'libs/shared/apps/sign-up/hooks/useDropdownEvents';\nimport { useGeocoder } from 'libs/shared/apps/sign-up/hooks/useGeocoder';\nimport { useLocalitySearch } from 'libs/shared/apps/sign-up/hooks/useLocalitySearch';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { CrosshairIcon } from 'libs/shared/images/components/CrosshairIcon';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport styles from './search-school-step-item.scss';\n\ninterface SearchLocalityInputProps {\n data: SearchSchoolData;\n disabled?: boolean;\n geoLocation: GeoLocation;\n googleMapsApiKey: string;\n \n setData: (placeData: SearchSchoolData) => void;\n clearData: () => void;\n logUserAction?: (data: HashObject | HashObject[], analyticsOptions: AnalyticsOptions) => void;\n\n labelClassName?: string;\n required?: boolean\n autoFocus?: boolean;\n size?: 'lg'\n useGeoLocationApi?: boolean;\n hideOnBlur?: boolean;\n}\n\ninterface LocalityPredictionsProps {\n predictions: google.maps.places.QueryAutocompletePrediction[];\n getPlaceInfo: (predicition: google.maps.places.QueryAutocompletePrediction) => void;\n selectedIndex: number;\n}\n\nfunction LocalityPredicitions(props: LocalityPredictionsProps): JSX.Element {\n const { predictions, getPlaceInfo, selectedIndex } = props;\n return (\n <>\n {predictions.map((predicition, index) => (\n <DivButton\n className={`${styles.suggestionItem} ${selectedIndex - 1 === index ? styles.selected : ''}`}\n key={predicition.place_id}\n onKeyDown={e => e.key === 'Enter' && getPlaceInfo(predicition)}\n onMouseDown={() => getPlaceInfo(predicition)}\n onClick={() => getPlaceInfo(predicition)}\n >\n {predicition.description}\n </DivButton>\n ))}\n </>\n );\n}\n\nexport function SearchLocalityInput(props: SearchLocalityInputProps): JSX.Element {\n const inputRef = React.useRef<HTMLInputElement>();\n const [ locality, setLocality ] = React.useState<string>(props.data?.schoolLocality || '');\n const [ makePredicition, setMakePredicition ] = React.useState(false);\n const countryPlaceholderText = useCountryPlaceholder({\n apiKey: props.googleMapsApiKey,\n geoLocation: props.geoLocation\n });\n const { localityPredicitions, getPlaceInfo } = useLocalitySearch({\n search: locality,\n makePredicition,\n geoLocation: props.geoLocation,\n apiKey: props.googleMapsApiKey\n });\n const { placeDetails, onClickGetCurrentLocation } = useGeocoder({\n apiKey: props.googleMapsApiKey,\n onPositionError\n });\n const extraItem = window.navigator.geolocation ? 1 : 0;\n const { selectedIndex, onKeyDown, containerRef, hide, onBlur, onFocus } = useDropdownEvents({\n onSelected, itemCount: localityPredicitions?.length + extraItem ?? 0, hideOnBlur: props.hideOnBlur\n });\n const [ geocoderError, setGeocoderError ] = React.useState<string>();\n\n React.useEffect(() => {\n setData(placeDetails);\n }, [placeDetails]);\n\n function onPositionError(error: string) {\n setMakePredicition(true);\n setGeocoderError(error);\n }\n\n function onSetLocality(localityValue: string): void {\n if (geocoderError) {\n setGeocoderError(undefined);\n }\n \n if (!makePredicition) {\n setMakePredicition(true);\n }\n if (props.data?.longitude || props.data?.latitude || props.data?.schoolLocality) {\n props.clearData();\n }\n setLocality(localityValue);\n }\n\n function onClickClearLocality(): void {\n onSetLocality('');\n inputRef.current.focus();\n }\n\n function onSelected(index: number): void {\n if (!localityPredicitions)\n return;\n\n if (index === localityPredicitions.length) {\n handleOnClickGetCurrentLocation();\n return;\n }\n\n const selected = localityPredicitions[index];\n\n if (selected)\n handleGetPlaceInfo(selected);\n }\n\n function setData(placeData: PlaceDetailsType) {\n props.setData({\n schoolLocality: placeData.locality,\n country: placeData.country,\n province: placeData.province,\n schoolPostCode: placeData.postalCode,\n longitude: placeData.longitude,\n latitude: placeData.latitude\n });\n placeData.locality && setLocality(placeData.locality);\n }\n\n function handleGetPlaceInfo(predicition: google.maps.places.QueryAutocompletePrediction) {\n if (makePredicition) setMakePredicition(false);\n\n getPlaceInfo(\n predicition,\n inputRef,\n setData\n );\n }\n\n function handleOnClickGetCurrentLocation(event?: React.MouseEvent) {\n event?.preventDefault();\n setMakePredicition(false);\n onClickGetCurrentLocation();\n\n props.logUserAction?.({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.UseMyLocation\n });\n }\n\n function getInputClass() {\n let baseClass = 'form-control';\n\n if (props.size === 'lg')\n baseClass += ' form-control-lg';\n\n if (!isInputFocused || hide) {\n return `${baseClass} ${styles.input}`;\n }\n\n return `${baseClass} ${styles.inputFocused}`;\n }\n\n const isInputFocused = localityPredicitions?.length && !props.data?.schoolLocality?.length;\n const geoLocationEnabled = window.navigator.geolocation && !props.data?.schoolLocality?.length;\n\n const labelClassName = props.labelClassName || `d-block text-center mb-3 fw-normal ${styles.baseText}`;\n let className = 'form-group position-relative';\n\n if (props.size === 'lg')\n className += ` ${styles.large}`;\n\n return (\n <div className={className}>\n <label\n className={labelClassName}\n htmlFor='locality-input'\n >\n Postcode or suburb:\n {props.required && <span className='text-danger'>*</span>}\n </label>\n <ClearableInput\n type='text'\n value={locality}\n onChange={e => onSetLocality(e.currentTarget.value)}\n id='locality-input'\n className={getInputClass()}\n ref={inputRef}\n autoComplete='off'\n placeholder={countryPlaceholderText || 'Loading...'}\n disabled={props.disabled || !countryPlaceholderText}\n autoFocus={props?.autoFocus}\n onClickClear={onClickClearLocality}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n <div className={`position-absolute z-1 w-100 ${styles.dropdown} ${hide ? 'd-none' : ''}`}>\n {!!isInputFocused &&\n <div className={styles.suggestionContainer} ref={containerRef}>\n <LocalityPredicitions\n predictions={localityPredicitions}\n getPlaceInfo={handleGetPlaceInfo}\n selectedIndex={selectedIndex}\n />\n {window.navigator.geolocation && props.useGeoLocationApi &&\n <DivButton\n className={`${styles.suggestionItem} px-1 ${selectedIndex - 1 === localityPredicitions.length ? styles.selected : ''}`}\n onClick={handleOnClickGetCurrentLocation}\n >\n <div className='btn btn-link info-link btn-with-icon bg-transparent py-0 pe-1'>\n <CrosshairIcon />\n Use my current location\n </div>\n </DivButton>\n }\n </div>\n }\n {geoLocationEnabled && !isInputFocused && props.useGeoLocationApi &&\n <div className={`d-flex ${styles.useMyLocation}`}>\n <button onClick={handleOnClickGetCurrentLocation} className='btn btn-link info-link bg-white btn-with-icon'>\n <CrosshairIcon />\n Use my current location\n </button>\n </div>\n }\n {!!geocoderError && (\n <div className='text-danger p-2'>\n {geocoderError}\n </div>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { PlaceDetailsType, PlaceHelper } from 'libs/shared/apps/sign-up/helpers/PlaceHelper';\nimport { useAutoCompleteService } from 'libs/shared/apps/sign-up/hooks/useAutoCompleteService';\nimport { useDebounce } from 'libs/shared/hooks/UseDebounce';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ninterface LocalitySearchParams {\n search: string;\n makePredicition: boolean;\n geoLocation: GeoLocation;\n apiKey: string;\n}\n\nexport function useLocalitySearch({\n search,\n makePredicition,\n geoLocation,\n apiKey\n}: LocalitySearchParams) {\n const autoCompleteService = useAutoCompleteService({ googleApiKey: apiKey });\n const debouncedSearch: string = useDebounce(search, 300);\n const [ localityPredicitions, setLocalityPredicitions ] =\n React.useState<google.maps.places.QueryAutocompletePrediction[]>();\n\n React.useEffect(() => {\n if (!autoCompleteService)\n return;\n\n if (debouncedSearch?.length === 0 || !makePredicition) {\n setLocalityPredicitions(undefined);\n return;\n }\n\n const countryCode = geoLocation?.countryCode || 'us';\n autoCompleteService.getPlacePredictions({\n input: debouncedSearch,\n componentRestrictions: geoLocation?.isFallback ? undefined : {\n country: countryCode\n },\n region: countryCode,\n types: [ 'locality', 'sublocality', 'postal_code' ]\n }, getLocalityPredictions);\n }, [ debouncedSearch, makePredicition, autoCompleteService ]);\n\n function getLocalityPredictions(\n predicitions: google.maps.places.QueryAutocompletePrediction[] | null,\n status: google.maps.places.PlacesServiceStatus\n ) {\n /**\n * @todo Handle state when status is other than OK\n */\n if (status !== google.maps.places.PlacesServiceStatus.OK || !predicitions) {\n setLocalityPredicitions(undefined);\n return;\n }\n setLocalityPredicitions(predicitions);\n }\n\n function getPlaceInfo(\n predicition: google.maps.places.QueryAutocompletePrediction,\n inputRef: React.MutableRefObject<HTMLInputElement>,\n callback: (placeData: PlaceDetailsType) => void\n ) {\n const placeService = new google.maps.places.PlacesService(inputRef.current);\n placeService.getDetails({\n placeId: predicition.place_id,\n fields: [ 'geometry', 'address_components', 'formatted_address' ],\n region: geoLocation.countryCode\n }, (place, status) => {\n if (status !== google.maps.places.PlacesServiceStatus.OK) return;\n const longitude = place.geometry.location.lng();\n const latitude = place.geometry.location.lat();\n const { locality, country, postalCode, city, province } = PlaceHelper.getPlaceDetails(place);\n callback({ longitude, latitude, locality, country, city, postalCode, province });\n });\n }\n\n return { localityPredicitions, getPlaceInfo };\n}","export class ApiError<T> extends Error {\n public body: T;\n \n constructor(body: T, message: string = 'Error') {\n super(message);\n this.body = body;\n }\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { ApiError } from 'libs/shared/apps/sign-up/errors/ApiError';\nimport { UrlHelper } from 'libs/shared/apps/sign-up/helpers/UrlHelper';\n\ninterface FetchOptions<T, X> {\n url: string;\n method?: HttpVerbs;\n data?: HashObject;\n init?: RequestInit;\n success?: (data: T) => void;\n error?: (data?: X) => void;\n always?: () => void;\n}\n\nfunction prepareRequest<T, X = any>(options: FetchOptions<T, X>) {\n let init: RequestInit = {\n method: HttpVerbs.GET,\n headers: {\n 'Content-type': 'application/json'\n }\n };\n\n if (options.method) {\n init = { ...init, method: options.method };\n }\n\n if (options.init) {\n init = { ...init, ...options.init };\n }\n\n let url = options.url;\n\n if (init.method === HttpVerbs.GET && options.data) {\n url = UrlHelper.prepareQuery(url, options.data);\n } else if (options.data) {\n init = {\n ...init,\n body: JSON.stringify(options.data)\n };\n }\n return {\n init,\n url\n };\n}\n\nexport const FetchHelper = {\n async asyncFetch<T, X = any>(options: FetchOptions<T, X>) {\n const request = prepareRequest<T, X>(options);\n const response = await fetch(request.url, request.init);\n\n if (!response.ok) {\n const json: X = await response.json();\n throw new ApiError<X>(json);\n }\n // No content response\n if (response.status === 204) {\n return;\n }\n \n return await response.json() as T;\n },\n\n async asyncFetchPlain<T, X>(options: FetchOptions<T, X>) {\n const request = prepareRequest<T, X>(options);\n const response = await fetch(request.url, request.init);\n\n if (!response.ok) {\n return;\n }\n return await response.text();\n },\n\n fetch<T, X = any>(options: FetchOptions<T, X>): Promise<T> {\n const request = prepareRequest<T, X>(options);\n \n return fetch(request.url, request.init)\n .then<T>(response => {\n if (response.status === 204) {\n return;\n }\n return response.json();\n })\n .then<T>((data: T) => {\n if (options.success)\n options.success(data);\n\n return data;\n })\n .catch<T>((reason: any) => {\n if (options.error)\n options.error();\n\n return reason;\n })\n .finally(() => {\n if (options.always)\n options.always();\n });\n }\n};","import { HashObject } from 'libs/analytics/interfaces';\n\nexport const UrlHelper = {\n prepareQuery(baseUrl: string, requestData: HashObject): string {\n let finalUrl = baseUrl;\n Object.keys(requestData).forEach((key: string, index: number) => {\n if (requestData[key]) {\n if (index === 0) {\n finalUrl += '?';\n } else {\n finalUrl += '&';\n }\n finalUrl += `${key}=${encodeURIComponent(requestData[key])}`;\n }\n });\n\n return finalUrl;\n }\n};","/**\n * Trial access policies.\n * @readonly\n * @enum {string}\n */\nexport enum AccessPolicy {\n /** @member {string} */\n /** Access clickview for 14 days */\n // FourteenDays = 'trial_14_v1', // deprecated\n TwentyOneDays = 'trial_21_v1',\n Freemium = 'freemium_v1'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { ProspectLookup } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { FetchHelper } from 'libs/shared/apps/sign-up/helpers/FetchHelper';\nimport { CreateProspectRequest } from 'libs/shared/apps/sign-up/interfaces/requests/CreateProspectRequest';\nimport { SearchProspectRequest } from 'libs/shared/apps/sign-up/interfaces/requests/SearchProspectRequest';\nimport { CreateProspectErrorResponse, CreateProspectSuccessResponse } from 'libs/shared/apps/sign-up/interfaces/response/CreateProspectResponse';\nimport { SearchProspectResponseItem } from 'libs/shared/apps/sign-up/interfaces/response/SearchProspectResponse';\nimport { SignUpAjaxUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpAjaxUrls';\n\nexport const ProspectRequests = {\n search(\n url: string,\n data: SearchProspectRequest,\n success?: (data: SearchProspectResponseItem[]) => void,\n error?: () => void,\n always?: () => void\n ) {\n const requestData: HashObject = {\n longitude: data.longitude,\n latitude: data.latitude\n };\n\n if (data.query) {\n requestData.query = data.query;\n }\n \n FetchHelper.fetch<SearchProspectResponseItem[]>({\n url: url,\n data: requestData,\n success,\n error,\n always\n });\n },\n async create(\n urls: SignUpAjaxUrls,\n data: CreateProspectRequest\n ) {\n return FetchHelper.asyncFetch<CreateProspectSuccessResponse, CreateProspectErrorResponse>({\n url: urls.createProspect,\n method: HttpVerbs.POST,\n data: data\n });\n },\n getLookups(urls: SignUpAjaxUrls, prospectId: string) {\n return FetchHelper.asyncFetch<ProspectLookup[]>({\n url: urls.prospectLookups(prospectId)\n });\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { FetchHelper } from 'libs/shared/apps/sign-up/helpers/FetchHelper';\nimport { AutoJoinRequest } from 'libs/shared/apps/sign-up/interfaces/requests/AutoJoinRequest';\nimport { CheckProspectTrialStatusRequest } from 'libs/shared/apps/sign-up/interfaces/requests/CheckProspectTrialStatusRequest';\nimport { CheckTrialStatusRequest } from 'libs/shared/apps/sign-up/interfaces/requests/CheckTrialStatusRequest';\nimport { CreateTrialRequest } from 'libs/shared/apps/sign-up/interfaces/requests/CreateTrialRequest';\nimport { JoinRequest } from 'libs/shared/apps/sign-up/interfaces/requests/JoinRequest';\nimport { ResendTrialEmailRequest } from 'libs/shared/apps/sign-up/interfaces/requests/ResendTrialEmailRequest';\nimport { CheckTrialStatusResponse } from 'libs/shared/apps/sign-up/interfaces/response/CheckTrialStatusResponse';\nimport { CreateTrialErrorResponse, CreateTrialSuccessResponse } from 'libs/shared/apps/sign-up/interfaces/response/CreateTrialResponse';\nimport { SignUpAjaxUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpAjaxUrls';\n\nexport const UserRequests = {\n checkTrialStatus(\n urls: SignUpAjaxUrls,\n data: CheckTrialStatusRequest\n ) {\n if (urls.productName !== SignUpProduct.Lite)\n return Promise.reject();\n\n const requestData: HashObject = {\n email: data.email\n };\n\n return FetchHelper.asyncFetch<CheckTrialStatusResponse>({\n url: urls.userStatus,\n data: requestData\n });\n },\n\n checkProspectTrialStatus(\n urls: SignUpAjaxUrls,\n data: CheckProspectTrialStatusRequest,\n success?: (data: CheckTrialStatusResponse) => void,\n error?: () => void,\n always?: () => void\n ) {\n let fetchUrl = urls.prospectStatus(data.prospectId);\n fetchUrl = UrlHelper.urlBuilder(fetchUrl, { email: data.email });\n FetchHelper.fetch<CheckTrialStatusResponse>({\n url: fetchUrl,\n success,\n error,\n always\n });\n },\n \n createTrial(\n urls: SignUpAjaxUrls,\n data: CreateTrialRequest\n ) {\n const requestData: HashObject = {\n prospectId: data.prospectId,\n firstName: 'Trial',\n surname: 'User',\n email: data.email,\n userType: data.userType,\n accessPolicy: data.accessPolicy,\n appLink: data?.appLink,\n attribution: data?.attribution\n };\n\n return FetchHelper.asyncFetch<CreateTrialSuccessResponse, CreateTrialErrorResponse>({\n url: urls.createTrial,\n method: HttpVerbs.POST,\n data: requestData\n });\n },\n\n resendTrialEmail(\n urls: SignUpAjaxUrls,\n userId: string,\n data: ResendTrialEmailRequest\n ) {\n if (urls.productName !== SignUpProduct.Lite)\n return Promise.reject();\n\n const requestData: HashObject = {\n email: data.email,\n appLink: data?.appLink\n };\n\n // The success response is just an empty 204\n return FetchHelper.asyncFetch<never, any>({\n url: urls.resendTrialEmail(userId),\n method: HttpVerbs.POST,\n data: requestData\n });\n },\n\n createJoinRequest(\n urls: SignUpAjaxUrls,\n request: JoinRequest\n ) {\n const url = urls.productName === SignUpProduct.Auth ?\n urls.joinRequest :\n urls.joinRequest(request.customerId);\n\n const data = urls.productName === SignUpProduct.Auth ?\n request :\n { email: request.email };\n\n return FetchHelper.asyncFetch({\n url,\n method: HttpVerbs.POST,\n data\n });\n },\n\n createAutoJoinRequest(\n urls: SignUpAjaxUrls,\n request: AutoJoinRequest\n ) {\n if (urls.productName !== SignUpProduct.Lite)\n return Promise.reject();\n\n return FetchHelper.asyncFetch({\n url: urls.autoJoin,\n method: HttpVerbs.POST,\n data: request\n });\n }\n};","import { AccessPolicy } from 'libs/shared/apps/sign-up/enums/AccessPolicy';\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\n\nexport const AccessPolicyHelper = {\n getPolicy(countryCode: string): AccessPolicy {\n if (LocalityHelper.isCountryCodeUS(countryCode) || LocalityHelper.isCountryCodeUK(countryCode)) {\n return AccessPolicy.Freemium;\n }\n\n // 21 day trial for every country other than US & UK\n return AccessPolicy.TwentyOneDays;\n }\n};","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper, UtmParameters } from 'libs/analytics/utils/UtmHelper';\n\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { SignUpBrazeConfig } from 'libs/shared/apps/sign-up/interfaces/SignUpBrazeConfig';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ntype BrazeFormSubmissionEventType = 'trial-sign-up';\n\ntype BrazeOptions = {\n brazeConfig: SignUpBrazeConfig;\n version: string;\n productName: SignUpProduct;\n geoLocation: GeoLocation;\n}\n\nfunction getPayload(data: HashObject<any>): HashObject<string|boolean> {\n const utms = UtmHelper.getUtmParameters();\n const attributionData = AttributionHelper.getDecodedAttributionData();\n\n const payload: HashObject<string|boolean|UtmParameters> = {\n prospect_id: data?.prospectId,\n email: data?.email,\n organisation_sub_type: BrazeHelper.getSchoolType(data?.schoolType),\n account_name: data?.schoolName,\n account_post_code: data?.schoolPostCode,\n account_country: data?.country,\n province: data?.province,\n sync_to_crm: true,\n form_type: data?.form_type,\n original_referrer: attributionData?.originalReferrer,\n internal_referrer: attributionData?.internalReferrer,\n utms\n };\n\n return BrazeHelper.removeEmptyKeys(payload);\n}\n\nexport const BrazeEventHelper = {\n async submitFormEvent(\n options: BrazeOptions,\n type: BrazeFormSubmissionEventType,\n data: HashObject<any>,\n callback?: (success: boolean) => void\n ) {\n const braze = await BrazeHelper.getClient({\n brazeConfig: options.brazeConfig,\n productName: options.productName,\n geoLocation: options.geoLocation,\n version: options.version\n });\n\n const payload = getPayload({\n ...data,\n form_type: type\n });\n\n braze.openSession();\n braze.setUser(BrazeHelper.hashedEmail(data?.email));\n braze.logEvent({\n type: BrazeHelper.getProductFormEventType(),\n data: payload\n });\n\n braze.sendData(callback);\n }\n};","export enum ProspectStatus {\n Published = 'Published',\n Draft = 'Draft'\n}","import { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst AU_SCHOOL_TYPES = [\n 'Primary',\n 'Secondary',\n 'K12',\n 'Special',\n 'TAFE',\n 'University'\n];\n\nconst UK_SCHOOL_TYPES = [\n 'Primary',\n 'Secondary',\n 'Primary & Secondary',\n 'Special',\n 'Sixth Form College',\n 'FE College',\n 'University',\n 'Other'\n];\n\nconst US_SCHOOL_TYPES = [\n 'Elementary',\n 'Middle School',\n 'High School',\n 'College',\n 'Other'\n];\n\nconst SCHOOL_TYPES: {[key in CountryCode]: string[]} = {\n au: AU_SCHOOL_TYPES,\n nz: AU_SCHOOL_TYPES,\n uk: UK_SCHOOL_TYPES,\n us: US_SCHOOL_TYPES\n};\n\nexport function getSchoolTypesByGeoLocation(geoLocation: string): string[] {\n const countryCode = LocalityHelper.getCountryCode(geoLocation);\n const schoolTypes = SCHOOL_TYPES[countryCode];\n\n // default to US school types\n if (!schoolTypes)\n return US_SCHOOL_TYPES;\n\n return schoolTypes;\n}","import React from 'react';\n\ninterface CompletedProps {\n className?: string;\n}\n\nfunction getClassName(baseClass: string, className: string): string {\n return className ? `${baseClass} ${className}` : baseClass;\n}\n\nfunction Heading(props: React.PropsWithChildren<CompletedProps>): JSX.Element {\n const baseClass = 'text-center mb-2 h4';\n return (\n <h1 className={getClassName(baseClass, props.className)}>\n {props.children}\n </h1>\n );\n}\n\nfunction Body(props: React.PropsWithChildren<CompletedProps>): JSX.Element {\n const baseClass = 'text-center text-sm px-2 px-lg-4';\n return (\n <div className={getClassName(baseClass, props.className)}>\n {props.children}\n </div>\n );\n}\n\nfunction Message(props: React.PropsWithChildren<CompletedProps>): JSX.Element {\n const baseClass = '';\n return (\n <p className={getClassName(baseClass, props.className)}>\n {props.children}\n </p>\n );\n}\n\nexport const Completed = {\n Heading,\n Body,\n Message\n};\n","import React from 'react';\n\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\n\ninterface StatusImageProps {\n trialStatus: TrialStatus;\n imageUrls: SignUpImageUrls;\n}\n\nexport function StatusImage(props: StatusImageProps): JSX.Element {\n const StatusImageMap = {\n [TrialStatus.Available]: props.imageUrls.statusImages.available,\n [TrialStatus.Active]: props.imageUrls.statusImages.active,\n [TrialStatus.Expired]: props.imageUrls.statusImages.expired,\n [TrialStatus.NotRequired]: props.imageUrls.statusImages.notRequired,\n [TrialStatus.Unavailable]: props.imageUrls.statusImages.unavailable,\n [TrialStatus.Unsupported]: props.imageUrls.statusImages.unsupported,\n [TrialStatus.UserAutoJoinAllowed]: props.imageUrls.statusImages.notRequired,\n [TrialStatus.UserJoinApprovalRequired]: props.imageUrls.statusImages.notRequired\n };\n\n return (\n <div className='d-flex justify-content-center my-4 px-2 px-lg-4'>\n <img src={StatusImageMap[props.trialStatus]} className='w-100 h-auto' />\n </div>\n );\n}","import React from 'react';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\ninterface ExistingCustomerProps extends BaseStepItemProps {\n email: string;\n schoolName: string;\n customerId: string;\n}\n\nexport function ExistingCustomer(props: ExistingCustomerProps): JSX.Element {\n const isLastStepFindSchool = props?.previousStepIds && props.previousStepIds[props.previousStepIds.length - 1] === 'find-school';\n const schoolName = props?.schoolName || 'Your school';\n\n return (\n <Completed.Body className='mb-3'>\n {(() => {\n if (isLastStepFindSchool) {\n return (\n <>\n <Completed.Heading>\n {schoolName}<br/>already has ClickView 🎉\n </Completed.Heading>\n <Completed.Message className='mt-3'>\n If your school has SSO&nbsp;\n <a\n href={ExternalLinkHelper.getLoginLink({ email: props.email, customerId: props.customerId })}\n className='info-link'\n >\n click here to sign in.\n </a>\n </Completed.Message>\n <Completed.Message>\n Otherwise please contact your school admin for access.\n </Completed.Message>\n </>\n );\n }\n\n return (\n <>\n <Completed.Heading>\n Good News!\n </Completed.Heading>\n <Completed.Message>\n An account already exists for:<br /> <strong>{props.email}</strong>\n </Completed.Message>\n <Completed.Message>\n <a href={ExternalLinkHelper.getLoginLink({ email: props.email })} className='btn btn-dark btn-lg w-100'>\n Sign into ClickView\n </a>\n </Completed.Message>\n </>\n );\n })()}\n \n <Completed.Message>\n Need Help?&nbsp;\n <a href={ExternalLinkHelper.getSupportUrlForGeoLocation(props.geoLocation)} className='info-link' target='_blank'>\n Contact our Help Centre.\n </a>\n </Completed.Message>\n\n </Completed.Body>\n );\n}","import React from 'react';\n\nimport { ExistingCustomer } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/existing-customer/ExistingCustomer';\nimport { ExpiredTrial } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/expired-trial/ExpiredTrial';\nimport { TrialNotAvailable } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-not-available/TrialNotAvailable';\nimport { Unsupported } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/unsupported/Unsupported';\nimport { VerifyAccount } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/verify-account/VerifyAccount';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\ninterface StatusMessageProps extends BaseStepItemProps {\n email: string;\n userId: string;\n customerId: string;\n prospectId: string;\n schoolName: string;\n\n userType: UserType;\n trialStatus: TrialStatus;\n}\n\nconst StatusMessageMap = {\n [TrialStatus.Available]: VerifyAccount,\n [TrialStatus.Active]: ExistingCustomer,\n [TrialStatus.Expired]: ExpiredTrial,\n [TrialStatus.NotRequired]: ExistingCustomer,\n [TrialStatus.Unavailable]: TrialNotAvailable,\n [TrialStatus.Unsupported]: Unsupported,\n [TrialStatus.UserAutoJoinAllowed]: ExistingCustomer,\n [TrialStatus.UserJoinApprovalRequired]: ExistingCustomer\n};\n\nexport function StatusMessage(props: StatusMessageProps): JSX.Element {\n const Message = StatusMessageMap[props.trialStatus];\n\n return <Message {...props} />;\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { UserRequests } from 'libs/shared/apps/sign-up/fetch-requests/UserRequests';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nconst MAX_EMAIL_RESEND_COUNT = 1;\n\ninterface VerifyAccountProps extends BaseStepItemProps {\n userId: string;\n email: string;\n}\n\nexport function VerifyAccount(props: VerifyAccountProps): JSX.Element {\n const [ resendEmailCount, setResendEmailCount ] = React.useState<number>(0);\n const [ hasResendError, setHasResendError ] = React.useState<boolean>(false);\n \n async function onClickResend(event?: React.MouseEvent): Promise<void> {\n event?.preventDefault();\n\n try {\n await UserRequests.resendTrialEmail(\n props.ajaxUrls,\n props.userId,\n {\n email: props.email,\n appLink: props.pageAppLinkString\n }\n );\n setResendEmailCount(resendEmailCount + 1);\n } catch (e) {\n setHasResendError(true);\n }\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.ResendEmail\n });\n }\n\n function onClickWrongEmail(event?: React.MouseEvent): void {\n event?.preventDefault();\n\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.WrongEmail\n });\n\n props.nextStep({\n step: 'enter-email',\n userType: UserType.Staff\n });\n }\n\n if (!props?.email) return;\n\n return (\n <Completed.Body>\n\n <Completed.Heading>\n Check your inbox!\n </Completed.Heading>\n\n <Completed.Message>\n An email has been sent to <strong>{props.email}</strong>.\n </Completed.Message>\n\n {!!props.userId &&\n <>\n {resendEmailCount < MAX_EMAIL_RESEND_COUNT ? (\n <button onClick={onClickResend} className='btn btn-outline-dark btn-lg mb-3'>\n Resend verification email\n </button>\n ) : (\n <Completed.Message>\n ✅ Email has been resent!\n </Completed.Message>\n )}\n\n <Completed.Message>\n Wrong email?&nbsp;\n <button onClick={onClickWrongEmail} className='btn info-link p-0'>\n Update email address\n </button>\n </Completed.Message>\n\n {hasResendError &&\n <Completed.Message className='mb-0 text-danger'>\n ❌ There was a problem resending the email. Please try again later or contact our\n &nbsp;\n <a href={ExternalLinkHelper.getSupportUrlForGeoLocation(props.geoLocation)} className='info-link'>\n support\n </a>\n </Completed.Message>\n }\n </>\n }\n \n \n </Completed.Body>\n );\n}","import React from 'react';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\ninterface ExpiredTrialProps extends BaseStepItemProps {\n schoolName: string;\n}\n\nexport function ExpiredTrial(props: ExpiredTrialProps): JSX.Element {\n const salesContactLink = ExternalLinkHelper.getMarketingSalesContactForGeoLocation(props.geoLocation);\n const isLastStepFindSchool = props?.previousStepIds && props.previousStepIds[props.previousStepIds.length - 1] === 'find-school';\n const schoolName = props?.schoolName || 'Your school';\n\n return (\n <Completed.Body>\n\n <Completed.Heading>\n {\n isLastStepFindSchool ?\n `${schoolName} trial has expired`\n :\n 'Your trial has expired'\n }\n </Completed.Heading>\n \n <Completed.Message>\n Please contact our&nbsp;\n <a href={salesContactLink} className='info-link' target='_blank'>\n ClickView Sales Team\n </a>\n </Completed.Message>\n \n </Completed.Body>\n );\n}","import React from 'react';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\ninterface TrialNotAvailableProps extends BaseStepItemProps {\n schoolName: string;\n}\n\nexport function TrialNotAvailable(props: TrialNotAvailableProps): JSX.Element {\n const salesContactLink = ExternalLinkHelper.getMarketingSalesContactForGeoLocation(props.geoLocation);\n\n return (\n <Completed.Body>\n <Completed.Heading>\n Your school no longer<br /> has access to ClickView\n </Completed.Heading>\n\n <Completed.Message>\n Please contact our <a href={salesContactLink} className='info-link'>ClickView Sales Team</a> for more information.\n </Completed.Message>\n </Completed.Body>\n );\n}","import React from 'react';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\n\nexport function Unsupported(): JSX.Element {\n return (\n <Completed.Body>\n\n <Completed.Heading className='px-2 px-lg-4'>\n ClickView isn't currently <br/> available for your school\n </Completed.Heading>\n\n <Completed.Message>\n We're working hard to get ClickView ready for more people.\n </Completed.Message>\n </Completed.Body>\n );\n}","export const YOUNG_STUDENT_STORAGE_KEY = 'young-student';","import React from 'react';\n\nimport { AddedToBraze } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/added-to-braze/AddedToBraze';\nimport { RequestedAccess } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/requested-access/RequestedAccess';\nimport { TrialStatusCompletion } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/TrialStatusCompletion';\nimport { YoungStudent } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/young-student/YoungStudent';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { BaseStepItemProps, CompletionStepIds } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nconst CompletedStepMap: {[key in CompletionStepIds]: (props: BaseStepItemProps) => JSX.Element} = {\n 'trial-status': TrialStatusCompletion,\n 'added-to-braze': AddedToBraze,\n 'young-student': YoungStudent,\n 'requested-access': RequestedAccess\n};\n\ninterface CompletedStepItemProps extends BaseStepItemProps {\n email: string;\n userType: UserType;\n trialStatus: TrialStatus;\n trialCreated: boolean;\n \n userId: number;\n customerId: string;\n prospectId: string;\n schoolName: string;\n schoolType: string;\n schoolPostCode: string;\n country: string;\n completionStep: CompletionStepIds;\n}\n\nexport function CompletedStepItem(props: CompletedStepItemProps): JSX.Element {\n const Step = CompletedStepMap[props.completionStep];\n\n return (\n <div className='d-flex justify-content-center flex-column mx-auto px-2'>\n <Step {...props} />\n </div>\n );\n}","import React from 'react';\n\nimport { AnalyticsOptions, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { StatusImage } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusImage';\nimport { StatusMessage } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusMessage';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\n\ninterface TrialStatusCompletionProps extends BaseStepItemProps {\n email: string;\n userId: string;\n customerId: string;\n prospectId: string;\n schoolName: string;\n userType: UserType;\n trialStatus: TrialStatus;\n trialCreated: boolean;\n imageUrls: SignUpImageUrls;\n}\n\nexport function TrialStatusCompletion(props: TrialStatusCompletionProps): JSX.Element {\n React.useEffect(() => {\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Create,\n descriptor: SignUpDescriptors.DeadEnd,\n workflowPhase: WorkflowPhase.Discard\n };\n\n if (props.trialCreated) {\n analyticsOptions.descriptor = SignUpDescriptors.TrialCreated;\n analyticsOptions.workflowPhase = WorkflowPhase.Complete;\n }\n\n props.logUserAction({}, analyticsOptions);\n }, []);\n\n return (\n <>\n <StatusImage trialStatus={props.trialStatus} imageUrls={props.imageUrls} />\n <StatusMessage {...props} />\n </>\n );\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { StatusImage } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusImage';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nexport function AddedToBraze(props: BaseStepItemProps): JSX.Element {\n React.useEffect(() => {\n props.logUserAction({}, {\n actionType: UserAction.Create,\n descriptor: SignUpDescriptors.TrialRequested,\n workflowPhase: WorkflowPhase.Complete\n });\n }, []);\n \n return (\n <>\n <StatusImage trialStatus={TrialStatus.Available} imageUrls={props.imageUrls} />\n <Completed.Body className='mb-3'>\n \n <Completed.Heading>\n Submitted!\n </Completed.Heading>\n \n <Completed.Message>\n Thank you for your interest in trialing ClickView. We will be in touch with you as soon as possible.\n </Completed.Message>\n \n </Completed.Body>\n </>\n );\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { StatusImage } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusImage';\nimport { YOUNG_STUDENT_STORAGE_KEY } from 'libs/shared/apps/sign-up/constants/YoungStudentStorageKey';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ninterface YoungStudentProps {\n geoLocation: GeoLocation;\n imageUrls: SignUpImageUrls;\n}\n\nexport function YoungStudent(props: YoungStudentProps): JSX.Element {\n const link = ExternalLinkHelper.getFreeResourcesForGeoLocation(props.geoLocation);\n\n /**\n * This value is set here and read in by the `<MultiStepform />`\n * essentially locking out the student from signing up. - Sha\n */\n React.useEffect(() => {\n LocalStorageHelper.set(YOUNG_STUDENT_STORAGE_KEY, true);\n }, []);\n\n return (\n <>\n <StatusImage trialStatus={TrialStatus.Active} imageUrls={props.imageUrls} />\n <Completed.Body className='mb-3'>\n <Completed.Heading>\n Discover our free content\n </Completed.Heading>\n <Completed.Message>\n Click the button below to explore our videos\n </Completed.Message>\n\n <a href={link} className='btn btn-lg btn-dark w-100' target='_blank'>\n Start watching now\n </a>\n </Completed.Body>\n </>\n );\n}","import React from 'react';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { StatusImage } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusImage';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nexport function RequestedAccess(props: BaseStepItemProps): JSX.Element {\n return (\n <>\n <StatusImage trialStatus={TrialStatus.Available} imageUrls={props.imageUrls} />\n <Completed.Body className='mb-3'>\n <Completed.Heading>\n You've requested access!\n </Completed.Heading>\n <Completed.Message>\n We've sent a request to your ClickView admin.\n Once your account is ready, you'll receive an email notification\n with instructions on how to get started with ClickView.\n </Completed.Message>\n </Completed.Body>\n </>\n );\n}","import React from 'react';\n\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nimport styles from './enter-age-step-item.scss';\n\nconst MAX_AGE = 120;\nconst AGE_CUT_OFF = 13;\n\n/**\n * Poor mans moment().isValid();\n */\nfunction isDateValid(year: string, month: string, day: string): boolean {\n const date = new Date(getDateString(year, month, day));\n return !isNaN(+date);\n}\n\nfunction getDateString(year: string, month: string, day: string): string {\n return `${year.padStart(4, '0')}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n}\n\ninterface EnterAgeStepItemProps extends BaseStepItemProps {\n userType: UserType;\n}\n\nexport function EnterAgeStepItem(props: EnterAgeStepItemProps): JSX.Element {\n const [ day, setDay ] = React.useState<string>('');\n const [ month, setMonth ] = React.useState<string>('');\n const [ year, setYear ] = React.useState<string>('');\n const [ error, setError ] = React.useState<string>(null);\n\n function onChangeDay(event: React.ChangeEvent<HTMLInputElement>): void {\n setDay(event.target.value);\n setError(null);\n }\n\n function onChangeMonth(event: React.ChangeEvent<HTMLInputElement>): void {\n setMonth(event.target.value);\n setError(null);\n }\n\n function onChangeYear(event: React.ChangeEvent<HTMLInputElement>): void {\n setYear(event.target.value);\n setError(null);\n }\n\n function validate(): boolean {\n if (!day || !month || !year) {\n setError('Please enter your date of birth');\n return false;\n }\n\n if (!isDateValid(year, month, day)) {\n setError('Please enter a valid date');\n return false;\n }\n\n if (+year > currentYear) {\n setError('Please enter a date in the past');\n return false;\n }\n\n if (+year < currentYear - MAX_AGE) {\n setError('Please enter a realistic date of birth');\n return false;\n }\n\n return true;\n }\n\n function onSubmit(event: React.FormEvent): void {\n event.preventDefault();\n\n if (!validate())\n return;\n\n const dateOfBith = new Date(getDateString(year, month, day));\n const cutOffYear = currentYear - AGE_CUT_OFF;\n const cutOff = new Date();\n cutOff.setFullYear(cutOffYear);\n\n if (dateOfBith > cutOff) {\n props.complete({\n completionStep: 'young-student',\n trialCreated: false,\n trialStatus: null\n });\n return;\n }\n \n props.nextStep({\n step: 'enter-email',\n userType: props.userType\n });\n }\n\n const currentYear = new Date().getFullYear();\n const containerClassName = 'mx-2 d-inline-block text-start';\n const inputClassName = `form-control form-control-lg ${error ? 'is-invalid' : ''}`;\n\n let dayOrder = 'order-0';\n let monthOrder = 'order-3';\n\n const isUs = LocalityHelper.isCountryCodeUS(props.geoLocation.countryCode);\n if (isUs) {\n dayOrder = 'order-3';\n monthOrder = 'order-0';\n }\n\n return (\n <form className='text-center' onSubmit={onSubmit} noValidate>\n <h1 className='h4'>\n Tell us a little about yourself\n </h1>\n <p>\n Please enter your date of birth\n </p>\n\n <div className='my-4'>\n <div className='d-flex justify-content-center'>\n <div className={`${containerClassName} ${dayOrder}`}>\n <label className='mb-0' htmlFor='day'>\n Day\n </label>\n <input\n id='day'\n type='number'\n className={`${inputClassName} ${styles.day}`}\n min='1'\n max='31'\n placeholder='DD'\n value={day}\n onChange={onChangeDay}\n autoFocus={!isUs}\n tabIndex={isUs ? 2 : 1}\n />\n </div>\n\n <span className={`h1 fw-normal mt-3 mb-0 order-1 ${error ? 'text-danger' : ''}`}>/</span>\n\n <div className={`${containerClassName} ${monthOrder}`}>\n <label className='mb-0' htmlFor='month'>\n Month\n </label>\n <input\n id='month'\n type='number'\n className={`${inputClassName} ${styles.month}`}\n min='1'\n max='12'\n placeholder='MM'\n value={month}\n onChange={onChangeMonth}\n autoFocus={isUs}\n tabIndex={isUs ? 1 : 2}\n />\n </div>\n \n <span className={`h1 fw-normal mt-3 mb-0 order-4 ${error ? 'text-danger' : ''}`}>/</span>\n\n <div className={`${containerClassName} order-5`}>\n <label className='mb-0' htmlFor='year'>\n Year\n </label>\n <input\n id='year'\n type='number'\n className={`${inputClassName} ${styles.year}`}\n min={currentYear - 120}\n max={currentYear}\n placeholder='YYYY'\n value={year}\n onChange={onChangeYear}\n tabIndex={3}\n />\n </div>\n </div>\n {!!error && <div className='invalid-feedback d-block'>{error}</div>}\n </div>\n\n <button type='submit' className='btn btn-lg btn-dark w-100'>\n Continue\n </button>\n </form>\n );\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { ExistingAccountSignIn } from 'libs/shared/apps/sign-up/components/general/existing-account-sign-in/ExistingAccountSignIn';\nimport { GlobalIdps } from 'libs/shared/apps/sign-up/components/general/global-idps/GlobalIdps';\nimport { TrialStatus, UserTrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { UserRequests } from 'libs/shared/apps/sign-up/fetch-requests/UserRequests';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { CheckTrialStatusResponse } from 'libs/shared/apps/sign-up/interfaces/response/CheckTrialStatusResponse';\nimport { getLiteAttributionForAuth } from 'libs/shared/apps/sign-up/utils/getLiteAttributionForAuth';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ninterface EnterEmailStepItemProps extends BaseStepItemProps {\n email?: string;\n userType: UserType;\n}\n\nconst emailRegex = new RegExp(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/);\n\nconst EMAIL_PLACEHOLDERS: {[key: string]: string} = {\n [CountryCode.AU]: 'valerie.frizzle@school.edu.au',\n [CountryCode.UK]: 'valerie.frizzle@school.gov.uk',\n [CountryCode.US]: 'valerie.frizzle@school.gov',\n [CountryCode.NZ]: 'valerie.frizzle@school.nz'\n};\n\nconst marketingContactTechnicalPathname: {[key in CountryCode]: string} = {\n [CountryCode.AU]: '/contact-us/support',\n [CountryCode.US]: '/contact-us/support',\n [CountryCode.NZ]: '/contact-us/',\n // @todo update after new UK website is released\n [CountryCode.UK]: '/contact-us/technical/'\n};\n\nfunction getContactLink(geoLocation: GeoLocation): string {\n const baseLink = ExternalLinkHelper.getMarketingUrlForGeoLocation(geoLocation);\n const countryCode = LocalityHelper.getCountryCode(geoLocation?.countryCode);\n const pathname = marketingContactTechnicalPathname[countryCode];\n\n return `${baseLink}${pathname}`;\n}\n\nfunction getPlaceholderText(geoLocation: GeoLocation): string {\n const placeholder = EMAIL_PLACEHOLDERS[LocalityHelper.getCountryCode(geoLocation.countryCode)];\n\n if (placeholder)\n return placeholder;\n\n return EMAIL_PLACEHOLDERS.us;\n}\n\nconst completionStatuses = [\n TrialStatus.Expired,\n TrialStatus.NotRequired,\n TrialStatus.Unavailable,\n TrialStatus.Unsupported,\n TrialStatus.Active\n];\n\nexport function EnterEmailStepItem(props: EnterEmailStepItemProps): JSX.Element {\n const [ loading, setLoading ] = React.useState(false);\n const [ email, setEmail ] = React.useState<string>(props?.email || '');\n const [ error, setError ] = React.useState<string>();\n\n const contactLink = getContactLink(props.geoLocation);\n\n async function handleSubmitForm() {\n if (!validateEmail()) return;\n\n setLoading(true);\n setError('');\n \n let userEmail: CheckTrialStatusResponse;\n try {\n userEmail = await UserRequests.checkTrialStatus(props.ajaxUrls, { email });\n } catch (e) {\n setError('Something went wrong! Please try again later.');\n return;\n }\n\n setLoading(false);\n\n if (userEmail.status === UserTrialStatus.InvalidEmail as string) {\n setError('Please use your school email address.');\n return;\n }\n\n props.logUserAction({}, {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Next,\n descriptor: SignUpDescriptors.EnterEmail\n });\n \n if (completionStatuses.includes(userEmail.status)) {\n props.complete({\n completionStep: 'trial-status',\n email,\n trialStatus: userEmail.status,\n trialCreated: false\n });\n return;\n }\n\n props.nextStep({\n step: 'find-school',\n email\n });\n }\n\n function onClickContactUs(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.ContactUs\n });\n }\n\n function validateEmail(): boolean {\n if (!email.length) {\n setError('Please enter your school email address.');\n return false;\n }\n\n if (!emailRegex.test(email)) {\n setError('Please use your school email address.');\n return false;\n }\n\n return true;\n }\n\n function onClickSignIn(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.SignIn\n });\n }\n\n function handleOnChangeEmail(e: React.ChangeEvent<HTMLInputElement>) {\n e.preventDefault();\n setEmail(e.target.value);\n setError('');\n }\n\n function onFormSubmit(event?: React.FormEvent): void {\n event?.preventDefault();\n handleSubmitForm();\n }\n\n return (\n <>\n <div className='text-center'>\n <h1 className='h4'>\n Let's set up your account\n </h1>\n <p>\n Enter your school email address\n </p>\n </div>\n \n <form onSubmit={onFormSubmit} noValidate>\n <div className='form-group mb-3'>\n <ClearableInput\n value={email}\n onChange={handleOnChangeEmail}\n name='email-input'\n id='email-input'\n type='email'\n className={`form-control form-control-lg ${error ? 'is-invalid' : ''}`}\n placeholder={getPlaceholderText(props.geoLocation)}\n autoComplete='false'\n autoCorrect='false'\n autoFocus\n onClickClear={() => setEmail('')}\n />\n {error &&\n <>\n <div className='invalid-feedback d-block'>{error}</div>\n <small>\n Having an issue with your email?\n <a href={contactLink} className='info-link ps-1' target='_blank' onClick={onClickContactUs}>\n Contact our team\n </a>\n </small>\n </>\n }\n </div>\n <SpinnerButton showSpinner={loading} variant='dark' className='btn-lg mb-3 w-100' disabled={loading} onClick={onFormSubmit}>\n Continue\n </SpinnerButton>\n </form>\n {props.userType === UserType.Staff &&\n <GlobalIdps geoLocation={props.geoLocation} className='mt-n3' attribution={getLiteAttributionForAuth()} />\n }\n <div className='text-center'>\n <ExistingAccountSignIn\n link={ExternalLinkHelper.getLoginLink()}\n onClick={onClickSignIn}\n />\n </div>\n </>\n );\n}","import { ApiError } from 'libs/shared/apps/sign-up/errors/ApiError';\n\nexport interface JoinRequestError {\n type: string;\n}\n\nexport function getJoinRequestError(error: ApiError<JoinRequestError>): string {\n switch (error?.body?.type) {\n case 'user-type-not-supported':\n return 'Students may not request to join schools.';\n case 'join-request-already-pending':\n return 'Your request is awaiting administrator approval.';\n case 'join-request-already-denied':\n return 'Your request has been denied by an administrator.';\n\n /**\n * Technically the UI should't allow any of these\n * but adding them here for completeness if we want to add\n * custom errors messages for them in future - Sha.\n */\n case 'join-request-not-allowed':\n case 'user-email-domain-not-approved':\n case 'user-email-invalid':\n case 'create-join-request-failed':\n case 'join-not-required':\n default:\n return 'Something went wrong.';\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { ProspectRequests } from 'libs/shared/apps/sign-up/fetch-requests/ProspectRequests';\nimport { useDropdownEvents } from 'libs/shared/apps/sign-up/hooks/useDropdownEvents';\nimport { SearchProspectRequest } from 'libs/shared/apps/sign-up/interfaces/requests/SearchProspectRequest';\nimport { SearchProspectResponseItem } from 'libs/shared/apps/sign-up/interfaces/response/SearchProspectResponse';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useDebounce } from 'libs/shared/hooks/UseDebounce';\n\nimport styles from './search-school-step-item.scss';\n\ninterface SearchSchoolInputProps {\n disabled: boolean;\n data: SearchSchoolData,\n setData: (data: SearchSchoolData) => void;\n\n clearData: () => void;\n searchUrl: string;\n onClickNoSuggestions: (name: string) => void;\n size?: 'lg';\n labelClassName?: string;\n required?: boolean;\n placeholder?: string;\n hideOnBlur?: boolean;\n}\n\ninterface SchoolSuggestionsProps {\n filteredSchoolsList: SearchProspectResponseItem[];\n getSchoolName: (item: SearchProspectResponseItem) => string;\n onSchoolSuggestionClick: (item: SearchProspectResponseItem) => void;\n selectedIndex: number;\n}\n\ninterface CantFindSchoolProps {\n selected: boolean;\n handleNoSuggestion: () => void;\n}\n\n/**\n * Unfortunately our cities in prospect db are a mix\n * of title case and full caps, here I just make everything title case - Sha\n */\nfunction decapitalise(city: string): string {\n return city\n .toLowerCase()\n .split(' ')\n .map(c => c.charAt(0).toUpperCase() + c.slice(1))\n .join(' ');\n}\n\nfunction getDisplayLocation(item: SearchProspectResponseItem): string {\n const displayItems: string[] = [];\n\n if (item.city)\n displayItems.push(decapitalise(item.city));\n\n if (item.province)\n displayItems.push(item.province);\n\n if (item.postCode)\n displayItems.push(item.postCode);\n\n return displayItems.join(' ');\n}\n\nfunction SchoolSuggestions(props: SchoolSuggestionsProps): JSX.Element {\n const { filteredSchoolsList, getSchoolName, onSchoolSuggestionClick, selectedIndex } = props;\n\n return (\n <>\n {filteredSchoolsList.map((item, index) => {\n return (\n <DivButton\n className={`${styles.suggestionItem} ${selectedIndex - 1 === index ? styles.selected : ''}`}\n key={item.id}\n onKeyDown={e => e.key === 'Enter' && onSchoolSuggestionClick(item)}\n onMouseDown={() => onSchoolSuggestionClick(item)}\n onClick={() => onSchoolSuggestionClick(item)}\n >\n {getSchoolName(item)} <br />\n <small className='text-secondary'>{getDisplayLocation(item)}</small>\n </DivButton>\n );\n })}\n </>\n );\n}\n\nfunction CantFindSchool(props: CantFindSchoolProps): JSX.Element {\n return (\n <div className={`info-link ${styles.suggestionItem} ${styles.noSuggestion} ${props.selected ? styles.selected : ''}`} onClick={props.handleNoSuggestion}>\n Can't find your school?\n </div>\n );\n}\n\nexport function SearchSchoolInput(props: SearchSchoolInputProps): JSX.Element {\n const inputRef = React.useRef<HTMLInputElement>();\n const [ loading, setLoading ] = React.useState(true);\n const [ name, setName ] = React.useState<string>(\n (props.data.schoolName && props.data.schoolPostCode)\n ? props.data.schoolName + ', ' + props.data.schoolPostCode\n : props.data.schoolName ? props.data.schoolName : ''\n );\n const [ schoolsList, setSchoolsList ] = React.useState<SearchProspectResponseItem[]>();\n const debouncedName = useDebounce(name, 250);\n const { selectedIndex, onKeyDown, containerRef, hide, onBlur, onFocus } = useDropdownEvents({\n onSelected, itemCount: schoolsList?.length + 1 ?? 0, hideOnBlur: props.hideOnBlur\n });\n\n function onSelected(index: number): void {\n if (!schoolsList && !index)\n return;\n\n if (index === schoolsList.length) {\n props.onClickNoSuggestions(name);\n return;\n }\n\n const selected = schoolsList[index];\n\n if (selected)\n onSchoolSuggestionClick(selected);\n }\n\n const schoolSelected = !!props.data?.prospectId;\n const isLoading = loading && !schoolSelected;\n const showCantFindSchool = !loading && !schoolSelected && schoolsList?.length < 5;\n const showSuggestions = schoolsList?.length && !schoolSelected;\n \n React.useEffect(() => {\n if (schoolSelected) return;\n\n if (!debouncedName.length) {\n fetchSchools();\n return;\n }\n /* \n * (debouncedName === name) makes sure that we do not send extra fetch request for the same query\n * Without this when we select a school and delete all text, it will send a request for stale\n */\n if (!schoolSelected && debouncedName.length > 1 && debouncedName === name) {\n fetchSchools(debouncedName);\n return;\n }\n }, [ debouncedName, schoolSelected ]);\n\n function onSetSchoolName(schoolNameValue: string): void {\n if (props.data.schoolName || props.data.prospectId) {\n props.clearData();\n }\n \n if (schoolNameValue !== name) {\n setName(schoolNameValue);\n }\n }\n\n function onClickClearSchoolName(): void {\n onSetSchoolName('');\n inputRef.current.focus();\n }\n\n function fetchSchools(query?: string) {\n if (!props.data.latitude && !props.data.longitude) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n const request: SearchProspectRequest = {\n latitude: props.data.latitude,\n longitude: props.data.longitude\n };\n if (query && query.length) {\n request.query = query;\n }\n\n ProspectRequests.search(\n props.searchUrl,\n request,\n data => setSchoolsList(data),\n null,\n () => setLoading(false)\n );\n }\n\n function onSchoolSuggestionClick(item: SearchProspectResponseItem): void {\n setName(getSchoolName(item));\n props.setData({\n prospectId: item.id,\n schoolName: item.name,\n schoolPostCode: item.postCode,\n schoolType: item.prospectType,\n province: item.province,\n city: item.city,\n country: item.countryCode\n });\n }\n\n function getSchoolName(item: SearchProspectResponseItem): string {\n const schoolText = item.name;\n // if (item.postCode.length) {\n // schoolText += ', ' + item.postCode;\n // }\n return schoolText;\n }\n\n \n const showSuggestionsContainer = (showSuggestions || isLoading || showCantFindSchool) && !props.disabled && !hide;\n\n let inputClassName = `form-control ${showSuggestionsContainer ? styles.inputFocused : styles.input}`;\n let className = 'form-group position-relative';\n\n if (props.size === 'lg') {\n inputClassName += ' form-control-lg';\n className += ` ${styles.large}`;\n }\n\n return (\n <div className={className}>\n <label\n className={props.labelClassName}\n htmlFor='school-input'\n >\n School:\n {props.required && <span className='text-danger'>*</span>}\n </label>\n <ClearableInput\n id='school-input'\n value={name}\n onChange={e => onSetSchoolName(e.currentTarget.value)}\n ref={inputRef}\n className={inputClassName}\n type='text'\n autoComplete='off'\n placeholder={props.placeholder || 'Select your school below'}\n disabled={props.disabled}\n autoFocus\n onClickClear={onClickClearSchoolName}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n <div className={`position-absolute z-1 w-100 ${styles.dropdown} ${hide ? 'd-none' : ''}`}>\n <div className={`${styles.suggestionContainer} ${!showSuggestionsContainer ? 'd-none' : ''}`} ref={containerRef}>\n {showSuggestions ?\n <SchoolSuggestions\n filteredSchoolsList={schoolsList}\n onSchoolSuggestionClick={onSchoolSuggestionClick}\n getSchoolName={getSchoolName}\n selectedIndex={selectedIndex}\n /> :\n isLoading && (\n <div className={`${styles.suggestionLoading} py-4 d-flex justify-content-center`}>\n <Spinner animation='border' />\n </div>\n )\n }\n {\n !isLoading && showCantFindSchool && (\n <CantFindSchool\n selected={selectedIndex === schoolsList.length + 1}\n handleNoSuggestion={() => props.onClickNoSuggestions(name)}\n />\n )\n }\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"userTypeOption\":\"R8ZPi\",\"selected\":\"SNEmW\",\"mobileButtons\":\"BSfO7\"};","import React from 'react';\n\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './user-type-option.scss';\n\ninterface UserTypeOptionProps {\n type: UserType;\n imageSrc: string;\n buttonText: string;\n onClick: (type: UserType) => void;\n selected: boolean;\n}\n\nexport function UserTypeOption(props: UserTypeOptionProps): JSX.Element {\n return (\n <>\n <DivButton\n className={`\n d-flex\n flex-column\n justify-content-between\n h-100\n p-3\n border\n rounded\n rounded-3\n mx-auto\n d-sm-block\n d-none\n ${styles.userTypeOption} ${props.selected ? styles.selected : ''}`\n }\n onClick={() => props.onClick(props.type)}\n >\n <img\n src={props.imageSrc}\n className='rounded-top mx-auto pb-2'\n />\n <div className='py-2'>\n <span className='h4'>{props.buttonText}</span>\n </div>\n </DivButton>\n <DivButton\n className={`btn btn-lg btn-outline-dark w-100 d-sm-none d-block mx-auto ${styles.mobileButtons}`}\n onClick={() => props.onClick(props.type)}\n >\n {props.buttonText}\n </DivButton>\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { AddToBrazeStepItem } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/AddToBrazeStepItem';\nimport { CantFindSchoolStepItem } from 'libs/shared/apps/sign-up/components/steps/cant-find-school-step-item/CantFindSchoolStepItem';\nimport { CompletedStepItem } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/CompletedStepItem';\nimport { EnterAgeStepItem } from 'libs/shared/apps/sign-up/components/steps/enter-age-step-item/EnterAgeStepItem';\nimport { EnterEmailStepItem } from 'libs/shared/apps/sign-up/components/steps/enter-email-step-item/EnterEmailStepItem';\nimport { RequestAccess } from 'libs/shared/apps/sign-up/components/steps/request-access/RequestAccess';\nimport { SearchSchoolStepItem } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchSchoolStepItem';\nimport { SelectUserTypeStepItem } from 'libs/shared/apps/sign-up/components/steps/select-user-type-step-item/SelectUserTypeStepItem';\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { StepActions } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/actions/StepActions';\nimport { SignUpState, SignUpStepsDataState } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\nimport { LayoutMappingType } from 'libs/shared/apps/sign-up/interfaces/Layout';\nimport { BaseStepItemProps, StepIds } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { SignUpAjaxUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpAjaxUrls';\nimport { SignUpBrazeConfig } from 'libs/shared/apps/sign-up/interfaces/SignUpBrazeConfig';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nexport interface ActiveStepProps {\n state: SignUpState;\n layoutMapping?: LayoutMappingType;\n googleMapsApiKey: string;\n geoLocation: GeoLocation;\n\n back: () => void;\n nextStep: (action: StepActions) => void;\n complete: (data: SignUpStepsDataState) => void;\n hasPreviousStep: boolean;\n logUserAction: (data: HashObject | HashObject[], analyticsOptions: AnalyticsOptions) => void;\n\n showBreadCrumbs?: boolean;\n pageAppLinkString?: string;\n close?: () => void;\n imageUrls: SignUpImageUrls;\n ajaxUrls: SignUpAjaxUrls;\n brazeConfig: SignUpBrazeConfig;\n version: string;\n productName: SignUpProduct;\n}\n\nconst stepsMapping: {[key in StepIds]: (props: BaseStepItemProps) => JSX.Element} = {\n 'select-type': SelectUserTypeStepItem,\n 'enter-email': EnterEmailStepItem,\n 'find-school': SearchSchoolStepItem,\n 'cant-find-school': CantFindSchoolStepItem,\n 'completed': CompletedStepItem,\n 'add-to-braze': AddToBrazeStepItem,\n 'enter-age': EnterAgeStepItem,\n 'request-access': RequestAccess\n};\n\nexport function ActiveStep(props: React.PropsWithChildren<ActiveStepProps>): JSX.Element {\n const {\n state,\n geoLocation,\n layoutMapping,\n hasPreviousStep,\n googleMapsApiKey,\n pageAppLinkString,\n back,\n nextStep,\n complete,\n logUserAction,\n imageUrls,\n ajaxUrls,\n brazeConfig,\n version,\n productName\n } = props;\n \n const CurrentStep = stepsMapping[state.currentStepId];\n\n const stepProps = {\n ...state,\n geoLocation,\n googleMapsApiKey,\n pageAppLinkString,\n back,\n nextStep,\n complete,\n logUserAction,\n imageUrls,\n ajaxUrls,\n brazeConfig,\n version,\n productName\n };\n\n const Layout = layoutMapping?.[state.currentStepId];\n\n // If the step doesnot have a layout mapping\n if (!Layout) {\n return <CurrentStep {...stepProps} />;\n }\n \n return (\n <Layout\n geoLocation={props.geoLocation}\n currentStep={state.currentStepId}\n\n previousStep={back}\n closeApp={props.close}\n logUserAction={logUserAction}\n hasPreviousStep={hasPreviousStep}\n imageUrls={props.imageUrls}\n >\n <CurrentStep {...stepProps} />\n </Layout>\n );\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserTypeOption } from 'libs/shared/apps/sign-up/components/steps/select-user-type-step-item/UserTypeOptions';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\n\ninterface SelectUserTypeStepItemProps extends BaseStepItemProps {\n userType?: UserType;\n imageUrls: SignUpImageUrls;\n}\n\nexport function SelectUserTypeStepItem(props: SelectUserTypeStepItemProps): JSX.Element {\n function selectAndNextStep(userType: UserType): void {\n props.logUserAction({ userType }, {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Next,\n descriptor: userType === UserType.Staff ?\n SignUpDescriptors.Educator :\n SignUpDescriptors.Student\n });\n\n if (userType === UserType.Staff) {\n props.nextStep({\n step: 'enter-email',\n userType\n });\n return;\n }\n\n props.nextStep({\n step: 'enter-age',\n userType\n });\n }\n \n return (\n <div className='text-center'>\n <h1 className='h4'>\n Access educational videos at your fingertips\n </h1>\n <p className='mb-3'>\n Let's get you set up so you can access ClickView.\n </p>\n\n <div className='row'>\n <div className='col-lg-6 mb-3'>\n <UserTypeOption\n type={UserType.Staff}\n buttonText={'I\\'m an educator'}\n imageSrc={props.imageUrls.educator}\n onClick={selectAndNextStep}\n selected={props.userType === UserType.Staff}\n />\n </div>\n <div className='col-lg-6 mb-3'>\n <UserTypeOption\n type={UserType.Learner}\n buttonText={'I\\'m a student'}\n imageSrc={props.imageUrls.student}\n onClick={selectAndNextStep}\n selected={props.userType === UserType.Learner}\n />\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { AnalyticsOptions, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { getRequestTrial } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/requestTrial';\nimport { SearchLocalityInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput';\nimport { SearchSchoolInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { UserRequests } from 'libs/shared/apps/sign-up/fetch-requests/UserRequests';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\n\nfunction getLocalisedPrompt(countryCode: string) {\n if (countryCode?.toLowerCase() === 'au')\n return 'Enter your school postcode or suburb';\n\n if (countryCode?.toLowerCase() === 'us')\n return 'Enter your school zipcode or city';\n\n return 'Enter your school postcode or city';\n}\n\ninterface SearchSchoolStepItemProps extends BaseStepItemProps {\n email: string;\n userType: UserType;\n\n prospectId?: string;\n schoolLocality?: string;\n country?: string;\n longitude?: number;\n latitude?: number;\n city?: string;\n province?: string;\n schoolName?: string;\n schoolType?: string;\n schoolPostCode?: string;\n trialStatus?: TrialStatus;\n}\n\nexport function SearchSchoolStepItem(props: SearchSchoolStepItemProps): JSX.Element {\n const { email, userType } = props;\n\n const [ data, setData ] = React.useState<SearchSchoolData>({\n schoolLocality: props.schoolLocality,\n country: props.country,\n longitude: props.longitude,\n latitude: props.latitude,\n city: props.city,\n province: props.province,\n prospectId: props.prospectId,\n schoolName: props.schoolName,\n schoolType: props.schoolType,\n schoolPostCode: props.schoolPostCode\n });\n\n const [ prospectStatus, setProspectStatus ] = React.useState<TrialStatus>(props.trialStatus);\n const [ submissionError, setSubmissionError ] = React.useState<string>();\n \n const [ loading, setLoading ] = React.useState(false);\n const [ disableLocality, setDisableLocality ] = React.useState(false);\n const [ disableSchoolSearch, setDisableSchoolSearch ] = React.useState(false);\n\n const requestTrial = getRequestTrial({\n // Props\n ...props,\n\n // Local State\n prospectStatus,\n loading,\n data,\n\n // Functions\n canSubmitForm,\n setSubmissionError,\n logStepEvent,\n setLoadingState,\n setProperty\n });\n\n function canSearchSchool(): boolean {\n return !!(data && data.schoolLocality && data.longitude && data.latitude);\n }\n\n function canSubmitForm(): boolean {\n if (!data || !email || !userType) {\n return false;\n }\n \n const { prospectId } = data;\n \n return !!(\n email &&\n userType &&\n prospectId\n );\n }\n\n function logStepEvent() {\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.FindSchool,\n workflowPhase: WorkflowPhase.Next\n };\n\n props.logUserAction(data || {}, analyticsOptions);\n }\n\n function setLoadingState(value: boolean): void {\n setDisableLocality(value);\n setDisableSchoolSearch(value);\n setLoading(value);\n }\n\n function setProperty<X extends keyof SearchSchoolData>(key: X, value: SearchSchoolData[X]) {\n if (key === 'prospectId' && value) {\n setLoading(true);\n UserRequests.checkProspectTrialStatus(props.ajaxUrls, {\n prospectId: value.toString(),\n email: props.email\n }, data => {\n setProspectStatus(data.status);\n }, () => {\n console.log('error');\n }, () => {\n setLoading(false);\n });\n }\n\n setData(data => ({\n ...data,\n [key]: value\n }));\n }\n\n function clearStepGroupData(): void {\n setProperty('schoolLocality', undefined);\n setProperty('longitude', undefined);\n setProperty('latitude', undefined);\n setProperty('city', undefined);\n setProperty('province', undefined);\n setProperty('country', undefined);\n clearSchoolStepItemData();\n }\n\n function clearSchoolStepItemData(): void {\n setProperty('prospectId', undefined);\n setProperty('schoolName', '');\n setProperty('schoolPostCode', undefined);\n setSubmissionError(undefined);\n }\n\n function onClickNoSuggestions(name: string): void {\n props.nextStep({\n step: 'cant-find-school',\n prospectId: data.prospectId,\n schoolName: name,\n schoolLocality: data.schoolLocality,\n longitude: data.longitude,\n latitude: data.latitude,\n country: data.country,\n city: data.city,\n province: data.province\n });\n\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.CantFindSchool,\n workflowPhase: WorkflowPhase.Next\n });\n }\n\n function setSchoolData(schoolData: SearchSchoolData): void {\n setProperty('prospectId', schoolData.prospectId);\n setProperty('schoolName', schoolData.schoolName);\n setProperty('schoolPostCode', schoolData.schoolPostCode);\n setProperty('schoolType', schoolData.schoolType);\n setProperty('province', schoolData.province);\n setProperty('city', schoolData.city);\n setProperty('country', schoolData.country);\n }\n\n function setLocalityData(localityData: SearchSchoolData): void {\n const {\n longitude,\n latitude,\n schoolLocality,\n country,\n city,\n province\n } = localityData;\n longitude && setProperty('longitude', longitude);\n latitude && setProperty('latitude', latitude);\n country && setProperty('country', country);\n city && setProperty('city', city);\n province && setProperty('province', province);\n schoolLocality && setProperty('schoolLocality', schoolLocality);\n }\n\n return (\n <>\n <div className='text-center'>\n <h1 className='h4'>\n Next, let's find your school\n </h1>\n <p>\n {getLocalisedPrompt(props.geoLocation?.countryCode)}\n </p>\n </div>\n <SearchLocalityInput\n data={data}\n setData={setLocalityData}\n clearData={clearStepGroupData}\n disabled={disableLocality}\n geoLocation={props.geoLocation}\n labelClassName='d-none'\n logUserAction={props.logUserAction}\n googleMapsApiKey={props.googleMapsApiKey}\n autoFocus\n size='lg'\n useGeoLocationApi\n />\n {canSearchSchool() &&\n <SearchSchoolInput\n data={data}\n setData={setSchoolData}\n clearData={clearSchoolStepItemData}\n disabled={disableSchoolSearch}\n searchUrl={props.ajaxUrls.searchProspect}\n onClickNoSuggestions={onClickNoSuggestions}\n size='lg'\n labelClassName='d-none'\n />\n }\n {submissionError &&\n <p className='text-danger mb-2'>{submissionError}</p>\n }\n {canSubmitForm() &&\n <SpinnerButton\n className='btn-lg w-100'\n variant='dark'\n onClick={requestTrial}\n showSpinner={disableLocality || disableSchoolSearch || loading}\n disabled={disableLocality || disableSchoolSearch || loading}\n >\n Get started\n </SpinnerButton>\n }\n </>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper } from 'libs/analytics/utils/UtmHelper';\n\nimport { ProspectLookupType } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { ProspectRequests } from 'libs/shared/apps/sign-up/fetch-requests/ProspectRequests';\nimport { UserRequests } from 'libs/shared/apps/sign-up/fetch-requests/UserRequests';\nimport { AccessPolicyHelper } from 'libs/shared/apps/sign-up/helpers/AccessPolicyHelper';\nimport { BrazeEventHelper } from 'libs/shared/apps/sign-up/helpers/BrazeEventHelper';\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { StepActions } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/actions/StepActions';\nimport { CompletionData } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\nimport { CreateTrialSuccessResponse } from 'libs/shared/apps/sign-up/interfaces/response/CreateTrialResponse';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { SignUpAjaxUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpAjaxUrls';\nimport { SignUpBrazeConfig } from 'libs/shared/apps/sign-up/interfaces/SignUpBrazeConfig';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n/**\n * Yes currying over this many variables is gross,\n * but this was the quickest and easiest way to make \n * SearchSchoolStepItem somewhat manageable - Sha\n */\ninterface GetRequestTrialOptions {\n // SearchSchoolStepItem props\n email: string;\n pageAppLinkString?: string;\n userType: UserType;\n nextStep: (action: StepActions) => void;\n complete: (data: CompletionData) => void;\n productName: SignUpProduct;\n ajaxUrls: SignUpAjaxUrls;\n brazeConfig: SignUpBrazeConfig;\n geoLocation: GeoLocation;\n version: string;\n \n // Local state\n loading: boolean;\n prospectStatus: TrialStatus;\n data: SearchSchoolData;\n \n // SearchSchoolStepItem local functions \n logStepEvent: () => void;\n logUserAction: (data: HashObject | HashObject[], analyticsOptions: AnalyticsOptions) => void;\n setLoadingState: (loading: boolean) => void;\n canSubmitForm: () => boolean;\n setSubmissionError: (error: string) => void;\n setProperty<X extends keyof SearchSchoolData>(key: X, value: SearchSchoolData[X]): void;\n}\n\nexport function getRequestTrial(options: GetRequestTrialOptions): () => Promise<void> {\n const {\n loading,\n canSubmitForm,\n setSubmissionError,\n prospectStatus,\n userType,\n logStepEvent,\n logUserAction,\n nextStep,\n data,\n productName,\n ajaxUrls,\n complete,\n setLoadingState,\n email,\n pageAppLinkString,\n setProperty,\n brazeConfig,\n geoLocation,\n version\n } = options;\n\n function addToBraze(): void {\n nextStep({\n step: 'add-to-braze',\n trialStatus: prospectStatus,\n ...data\n });\n logStepEvent();\n }\n\n function requestAccess(): void {\n nextStep({\n step: 'request-access',\n ...data\n });\n logStepEvent();\n }\n\n async function autoJoinLite(): Promise<void> {\n try {\n await UserRequests.createAutoJoinRequest(ajaxUrls, {\n prospectId: data.prospectId,\n email\n });\n\n logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.AutoJoin\n });\n\n complete({\n completionStep: 'trial-status',\n trialCreated: true,\n trialStatus: TrialStatus.Available,\n ...data\n });\n } catch {\n setSubmissionError('Something went wrong! Please try again later.');\n setLoadingState(false);\n return;\n }\n }\n\n async function trialStatus(): Promise<void> {\n let customerId: string = undefined;\n\n if (data?.prospectId && prospectStatus === TrialStatus.NotRequired) {\n const lookups = await ProspectRequests.getLookups(ajaxUrls, data.prospectId);\n customerId = lookups.find(p => p.type === ProspectLookupType.MasterId)?.externalId;\n }\n\n complete({\n completionStep: 'trial-status',\n trialStatus: prospectStatus,\n trialCreated: false,\n customerId,\n ...data\n });\n logStepEvent();\n }\n\n function canRequestTrial(): boolean {\n if (prospectStatus === TrialStatus.Active)\n return true;\n\n if (prospectStatus === TrialStatus.Available)\n return true;\n\n if (prospectStatus === TrialStatus.UserAutoJoinAllowed) {\n return productName === SignUpProduct.Auth;\n }\n\n return false;\n }\n\n async function brazeFormSubmissionEvent(): Promise<void> {\n await BrazeEventHelper.submitFormEvent(\n {\n brazeConfig,\n productName,\n geoLocation,\n version\n },\n 'trial-sign-up',\n {\n ...data,\n email: email,\n province: BrazeHelper.parseProvince(data.province)\n }\n );\n }\n\n async function requestTrial(): Promise<void> {\n setLoadingState(true);\n\n let response: CreateTrialSuccessResponse;\n try {\n response = await UserRequests.createTrial(ajaxUrls, {\n userType,\n email,\n prospectId: data?.prospectId,\n appLink: pageAppLinkString,\n accessPolicy: AccessPolicyHelper.getPolicy(data.country),\n attribution: {\n ...AttributionHelper.getDecodedAttributionData(),\n utms: UtmHelper.getUtmParameters()\n }\n });\n } catch (error) {\n setSubmissionError('Something went wrong! Please try again later.');\n setLoadingState(false);\n return;\n }\n\n if (prospectStatus === TrialStatus.UserAutoJoinAllowed) {\n logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.AutoJoin\n });\n }\n \n setProperty('userId', response.id);\n complete({\n completionStep: 'trial-status',\n userId: response.id,\n trialCreated: true,\n trialStatus: TrialStatus.Available,\n customerId: (response as any).data?.customerId,\n ...data\n });\n\n brazeFormSubmissionEvent();\n\n logStepEvent();\n }\n\n return async function(): Promise<void> {\n if (loading) return;\n\n if (!canSubmitForm()) {\n setSubmissionError('Something went wrong! Please try again later.');\n return;\n }\n\n if (userType === UserType.Staff) {\n if (prospectStatus === TrialStatus.Unsupported)\n return addToBraze();\n\n if (prospectStatus === TrialStatus.UserJoinApprovalRequired)\n return requestAccess();\n\n if (prospectStatus === TrialStatus.UserAutoJoinAllowed && productName === SignUpProduct.Lite)\n return await autoJoinLite();\n }\n\n if (!canRequestTrial())\n return await trialStatus();\n\n return await requestTrial();\n };\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper } from 'libs/analytics/utils/UtmHelper';\n\nimport { SearchLocalityInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { UserType } from 'libs/shared/apps/sign-up/enums/UserType';\nimport { ApiError } from 'libs/shared/apps/sign-up/errors/ApiError';\nimport { ProspectRequests } from 'libs/shared/apps/sign-up/fetch-requests/ProspectRequests';\nimport { UserRequests } from 'libs/shared/apps/sign-up/fetch-requests/UserRequests';\nimport { AccessPolicyHelper } from 'libs/shared/apps/sign-up/helpers/AccessPolicyHelper';\nimport { BrazeEventHelper } from 'libs/shared/apps/sign-up/helpers/BrazeEventHelper';\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { getSchoolTypesByGeoLocation } from 'libs/shared/apps/sign-up/helpers/SchoolTypeHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { CreateTrialRequest } from 'libs/shared/apps/sign-up/interfaces/requests/CreateTrialRequest';\nimport { CreateProspectSuccessResponse } from 'libs/shared/apps/sign-up/interfaces/response/CreateProspectResponse';\nimport { CreateTrialErrorResponse } from 'libs/shared/apps/sign-up/interfaces/response/CreateTrialResponse';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ProspectStatus } from 'libs/shared/enums/ProspectStatus';\n\ninterface CantFindSchoolStepItemProps extends BaseStepItemProps {\n prospectId?: string;\n email?: string;\n userType?: UserType;\n schoolName?: string;\n schoolType?: string;\n schoolLocality?: string;\n city?: string;\n province?: string;\n country?: string;\n longitude?: number;\n latitude?: number;\n trialStatus?: TrialStatus;\n}\n\nexport function CantFindSchoolStepItem(props: CantFindSchoolStepItemProps): JSX.Element {\n const [ data, setData ] = React.useState<SearchSchoolData>({\n prospectId: props.prospectId,\n schoolName: props.schoolName,\n schoolType: props.schoolType,\n schoolLocality: props.schoolLocality,\n country: props.country,\n province: props.province,\n city: props.city,\n longitude: props.longitude,\n latitude: props.latitude\n });\n const [ submissionError, setSubmissionError ] = React.useState<string>();\n const [ loading, setLoading ] = React.useState(false);\n\n const schoolTypes = getSchoolTypesByGeoLocation(data.country || props.geoLocation?.countryCode);\n\n function canCreateSchool(): boolean {\n const { schoolName, schoolType, country } = data;\n\n return !!(\n schoolName &&\n schoolType &&\n country\n );\n }\n\n function setProperty<X extends keyof SearchSchoolData>(key: X, value: SearchSchoolData[X]) {\n setData(data => ({\n ...data,\n [key]: value\n }));\n }\n\n function setLocalityData(localityData: SearchSchoolData): void {\n const {\n longitude,\n latitude,\n schoolLocality,\n country,\n city,\n province\n } = localityData;\n longitude && setProperty('longitude', longitude);\n latitude && setProperty('latitude', latitude);\n country && setProperty('country', country);\n city && setProperty('city', city);\n province && setProperty('province', province);\n schoolLocality && setProperty('schoolLocality', schoolLocality);\n }\n\n function clearLocalityData(): void {\n setProperty('schoolLocality', undefined);\n setProperty('longitude', undefined);\n setProperty('latitude', undefined);\n setProperty('city', undefined);\n setProperty('province', undefined);\n setProperty('country', undefined);\n setSubmissionError('');\n }\n\n\n function handleSchoolTypeChange(event: React.ChangeEvent<HTMLSelectElement>) {\n const type = event.target.value;\n setProperty('schoolType', type);\n }\n\n function handleSchoolNameChange(event: React.ChangeEvent<HTMLInputElement>) {\n setProperty('schoolName', event.target.value);\n }\n\n async function brazeFormSubmissionEvent(callback?: (success: boolean) => void): Promise<void> {\n const { email, brazeConfig, productName, geoLocation, version } = props;\n return await BrazeEventHelper.submitFormEvent(\n {\n brazeConfig,\n productName,\n geoLocation,\n version\n },\n 'trial-sign-up',\n {\n ...data,\n email: email\n },\n callback\n );\n }\n\n async function handleSubmission(event?: React.FormEvent): Promise<void> {\n event.preventDefault();\n\n if (!canCreateSchool()) return;\n\n props.logUserAction(data, {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Next,\n descriptor: SignUpDescriptors.CantFindSchool\n });\n \n setLoading(true);\n // Create a prospect first\n let prospectResponse: CreateProspectSuccessResponse;\n try {\n prospectResponse = await ProspectRequests.create(\n props.ajaxUrls,\n {\n name: data.schoolName,\n status: ProspectStatus.Draft,\n countryCode: data.country,\n prospectType: data.schoolType,\n city: data.city,\n postCode: data.schoolPostCode,\n province: BrazeHelper.parseProvince(data.province)\n }\n );\n\n if (!prospectResponse.id) {\n setLoading(false);\n setSubmissionError('Error. Something went wrong.');\n return;\n }\n } catch (e) {\n setLoading(false);\n setSubmissionError('Error. Something went wrong.');\n return;\n }\n\n // Create a trial for the newly created prospect if possible\n try {\n const trialRequest: CreateTrialRequest = {\n prospectId: prospectResponse.id,\n email: props.email,\n userType: props.userType,\n accessPolicy: AccessPolicyHelper.getPolicy(data.country),\n appLink: props.pageAppLinkString,\n attribution: {\n ...AttributionHelper.getDecodedAttributionData(),\n utms: UtmHelper.getUtmParameters()\n }\n };\n\n const trialResponse = await UserRequests.createTrial(\n props.ajaxUrls,\n trialRequest\n );\n\n /**\n * We immediately flush the braze data and complete \n * the step. If the flush fails, we'll continue exectution\n * and not block the user.\n */\n await brazeFormSubmissionEvent((flushSuccess: boolean) => {\n if (!flushSuccess)\n console.error('Failed to submit create trial data to braze.');\n\n props.complete({\n completionStep: 'trial-status',\n email: props.email,\n userId: trialResponse.id,\n prospectId: prospectResponse.id,\n schoolName: data.schoolName,\n schoolLocality: data.schoolLocality,\n country: data.country,\n schoolType: data.schoolType,\n city: data.city,\n schoolPostCode: data.schoolPostCode,\n latitude: data.latitude,\n longitude: data.longitude,\n province: data.province,\n trialStatus: TrialStatus.Available,\n trialCreated: true,\n customerId: (trialResponse as any).data?.customerId\n });\n });\n } catch (e) {\n if (!e.body) {\n setLoading(false);\n setSubmissionError('Error. Something went wrong.');\n return;\n }\n \n const error = e as ApiError<CreateTrialErrorResponse>;\n if (error.body.status === 400 && error.body.type === 'trial-not-available') {\n props.nextStep({\n step: 'add-to-braze',\n ...data,\n prospectId: prospectResponse.id,\n trialStatus: TrialStatus.Unavailable\n });\n return;\n }\n }\n }\n\n return (\n <>\n <div className='text-center'>\n <h1 className='h4'>\n Tell us more about your school\n </h1>\n <p>\n Please enter your school details.\n </p>\n </div>\n <div className='form-group'>\n <label\n className='d-block'\n htmlFor='school-name-input'\n >\n Name of school\n </label>\n <input\n type='text'\n value={data?.schoolName || ''}\n onChange={handleSchoolNameChange}\n id='school-name-input'\n className='form-control form-control-lg'\n autoComplete='off'\n placeholder='Enter name of school'\n autoFocus\n />\n </div>\n <div className='form-group'>\n <label\n className='d-block'\n htmlFor='school-type-select'\n >\n Type of school\n </label>\n <select id='school-type-select' className={`form-select form-select-lg ${!data.schoolType ? 'text-secondary' : ''}`} autoComplete='off' value={data.schoolType || 'none'} onChange={handleSchoolTypeChange}>\n <option value='none' className='text-secondary' disabled>Select type of school</option>\n {schoolTypes.map(item => {\n return <option value={item} key={item} className='text-dark'>{item}</option>;\n })}\n </select>\n </div>\n <SearchLocalityInput\n data={data}\n setData={setLocalityData}\n clearData={clearLocalityData}\n disabled={false}\n labelClassName='d-block'\n geoLocation={props.geoLocation}\n logUserAction={props.logUserAction}\n googleMapsApiKey={props.googleMapsApiKey}\n autoFocus={false}\n size='lg'\n useGeoLocationApi\n />\n {submissionError &&\n <div className='text-danger mb-3'>\n {submissionError}\n </div>\n }\n {canCreateSchool() &&\n <SpinnerButton\n className='btn-lg w-100'\n variant='dark'\n onClick={handleSubmission}\n showSpinner={loading}\n disabled={loading}\n >\n Get started\n </SpinnerButton>\n }\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"day\":\"e0Dbj\",\"month\":\"zLcQr\",\"year\":\"XiXPP\"};","import React from 'react';\n\nimport { SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { Completed } from 'libs/shared/apps/sign-up/components/general/completed';\nimport { StatusImage } from 'libs/shared/apps/sign-up/components/steps/completed-step-item/trial-status-completion/StatusImage';\nimport { getJoinRequestError } from 'libs/shared/apps/sign-up/components/steps/request-access/getJoinRequestError';\nimport { ProspectLookupType } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { TrialStatus } from 'libs/shared/apps/sign-up/enums/TrialStatus';\nimport { ProspectRequests } from 'libs/shared/apps/sign-up/fetch-requests/ProspectRequests';\nimport { UserRequests } from 'libs/shared/apps/sign-up/fetch-requests/UserRequests';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { BaseStepItemProps } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\n\ninterface RequestAccessProps extends BaseStepItemProps {\n imageUrls: SignUpImageUrls;\n schoolName: string;\n prospectId: string;\n email: string;\n}\n\nexport function RequestAccess(props: RequestAccessProps): JSX.Element {\n const [ error, setError ] = React.useState<string>(null);\n\n async function onClickRequestAccess(): Promise<void> {\n try {\n const lookups = await ProspectRequests.getLookups(props.ajaxUrls, props.prospectId);\n const customerId = lookups.find(p => p.type === ProspectLookupType.MasterId)?.externalId;\n\n if (!customerId) {\n setError('Something went wrong.');\n return;\n }\n\n await UserRequests.createJoinRequest(props.ajaxUrls, {\n customerId,\n email: props.email\n });\n\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.RequestAccess\n });\n\n props.complete({\n completionStep: 'requested-access',\n trialCreated: false,\n trialStatus: TrialStatus.UserJoinApprovalRequired\n });\n } catch (err) {\n setError(getJoinRequestError(err));\n }\n }\n\n return (\n <>\n <StatusImage trialStatus={TrialStatus.UserJoinApprovalRequired} imageUrls={props.imageUrls} />\n <Completed.Body className='mb-3'>\n <Completed.Heading>\n {props.schoolName}<br/>already has ClickView 🎉\n </Completed.Heading>\n </Completed.Body>\n <button className='btn btn-lg btn-dark w-100 mb-3' onClick={onClickRequestAccess}>\n Request access\n </button>\n {error && <p className='text-danger text-center mb-2'>{error}</p>}\n <Completed.Message className='text-center'>\n Need Help?&nbsp;\n <a href={ExternalLinkHelper.getSupportUrlForGeoLocation(props.geoLocation)} className='info-link' target='_blank'>\n Contact our Help Centre.\n </a>\n </Completed.Message>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"izZtA\",\"dataContainer\":\"OgBv5\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport styles from './form-debugger.scss';\n\ninterface FormDebuggerProps {\n developmentEnv: boolean;\n objects: object;\n}\n\ninterface DebuggerItemProps {\n label: string;\n item: any;\n}\n\nfunction flattenObject(objects: any) {\n const flattened: HashObject = {};\n\n Object.keys(objects).forEach(key => {\n const value = objects[key];\n\n if (ObjectHelper.isObject(value) && value !== null && !Array.isArray(value)) {\n Object.assign(flattened, flattenObject(value));\n } else {\n flattened[key] = value;\n }\n });\n\n return flattened;\n}\n\nfunction DebuggerItem({ label, item }: DebuggerItemProps): JSX.Element {\n let content = item;\n \n if (Array.isArray(item)) {\n content = content.join(' -> ');\n }\n\n if (typeof content === 'boolean') {\n content = content ? 'true' : 'false';\n }\n\n return <div className='pb-1'>{label}: <b className='text-white'>{content}</b></div>;\n}\n\nexport function FormDebugger(props: FormDebuggerProps): JSX.Element {\n const {\n developmentEnv,\n objects\n } = props;\n\n const [ show, setShow ] = React.useState(true);\n\n const flatObject = React.useMemo<HashObject>(() => flattenObject(objects), [objects]);\n \n return (\n developmentEnv &&\n <>\n\n <div className={`position-fixed p-4 ${styles.buttonContainer}`}>\n <button onClick={() => { setShow(!show); }} className='btn btn-dark px-2 py-1'>{show ? 'Hide' : 'Show'} debugger</button>\n </div>\n\n {show &&\n <div className={`fixed-bottom mb-4 ms-4 bg-dark rounded ${styles.dataContainer}`}>\n <code className='d-block p-4'>\n <div className='fw-bold pb-2'>{`{ Debug: Form Data }`}</div>\n {Object.keys(flatObject).map(key => {\n return <DebuggerItem key={key} label={key} item={flatObject[key]} />;\n })}\n </code>\n </div>}\n\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"crumb\":\"Btmx2\"};","import React from 'react';\n\nimport { StepIds } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\n\nimport styles from './dot-crumbs.scss';\n\ninterface DotCrumbsProps {\n crumbs: StepIds[];\n currentStep: StepIds;\n}\n\nfunction getClass(currentStep: StepIds, item: StepIds): string {\n const baseClass = 'rounded-circle mx-2 d-inline-block ' + styles.crumb;\n const colorClass = currentStep === item ? 'bg-blue' : 'bg-light';\n\n return `${baseClass} ${colorClass}`;\n}\n\nexport function DotCrumbs(props: DotCrumbsProps): JSX.Element {\n return (\n <div className='text-center'>\n {\n props.crumbs.map(item => {\n return <div className={getClass(props.currentStep, item)} key={item} />;\n })\n }\n </div>\n );\n}","import React from 'react';\n\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { ExternalLink } from 'libs/shared/components/external-link/ExternalLink';\n\ninterface TermsAndConditionsProps {\n onClickTermsAndConditions: () => void;\n onClickPrivacyPolicy: () => void;\n}\n\nexport function TermsAndConditions(props: TermsAndConditionsProps): JSX.Element {\n const termsAndConditionsLink = ExternalLinkHelper.getTermsAndConditionsLink();\n const privacyPolicyLink = ExternalLinkHelper.getPrivacyPolicyLink();\n\n return (\n <span\n className='text-center text-md mt-2 text-normal small'\n >\n By signing up you agree to the\n <br />\n <ExternalLink href={termsAndConditionsLink} onClick={props.onClickTermsAndConditions} className='info-link' newTab>\n Terms and Conditions\n </ExternalLink>\n &nbsp;\n and\n &nbsp;\n <ExternalLink href={privacyPolicyLink} onClick={props.onClickPrivacyPolicy} className='info-link' newTab>\n Privacy Policy\n </ExternalLink>\n </span>\n );\n}","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface MultiStepBackButtonProps {\n onClick: (event: React.MouseEvent) => void;\n}\n\nexport function MultiStepBackButton(props: React.PropsWithChildren<MultiStepBackButtonProps>): JSX.Element {\n return (\n <button onClick={props.onClick} className='btn p-0 cursor-pointer d-inline-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n {props.children}\n </button>\n );\n}","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DotCrumbs } from 'libs/shared/apps/sign-up/components/general/dot-crumbs/DotCrumbs';\nimport { ExistingAccountSignIn } from 'libs/shared/apps/sign-up/components/general/existing-account-sign-in/ExistingAccountSignIn';\nimport { TermsAndConditions } from 'libs/shared/apps/sign-up/components/general/terms-and-conditions/TermsAndConditions';\nimport { MultiStepBackButton } from 'libs/shared/apps/sign-up/components/multi-step-form/MultiStepBackButton';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { LayoutProps } from 'libs/shared/apps/sign-up/interfaces/Layout';\nimport { StepIds } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\n\nimport styles from './full-page-layout.scss';\n\nFullPageLayout.defaultProps = {\n showBackButton: true\n};\n\nconst crumbsSteps: StepIds[] = [ 'select-type', 'enter-email', 'find-school' ];\n\nexport function FullPageLayout(props: React.PropsWithChildren<LayoutProps>): JSX.Element {\n const {\n currentStep,\n previousStep,\n hasPreviousStep,\n showBackButton,\n children\n } = props;\n\n function showSignInText() {\n return currentStep === 'select-type';\n }\n\n function showTermsAndConditions() {\n return [ 'enter-email', 'find-school', 'add-to-braze' ].includes(currentStep);\n }\n\n function shouldShowBackButton() {\n return [ 'enter-email', 'find-school', 'cant-find-school', 'add-to-braze', 'enter-age', 'request-access' ].includes(currentStep);\n }\n\n function getMaxWidthClass(): string {\n if (currentStep === 'select-type')\n return styles.maxWidth42rem;\n\n if ([ 'enter-email', 'find-school', 'cant-find-school', 'add-to-braze', 'enter-age' ].includes(currentStep))\n return styles.maxWidth23rem;\n\n return styles.maxWidth30rem;\n }\n\n function onClickBackButtons(): void {\n previousStep();\n\n props.logUserAction({\n step: currentStep\n }, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.Back,\n workflowPhase: WorkflowPhase.Back\n });\n }\n\n function onClickTermsAndConditions(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.TermsAndConditions\n });\n }\n\n function onClickPrivacyPolicy(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.PrivacyPolicy\n });\n }\n\n function onClickSignIn(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.SignIn\n });\n }\n \n return (\n <div className={`d-flex flex-column justify-content-between px-4 py-0 ${styles.fullPageLayout}`}>\n <div className='mt-3 mb-2'>\n {crumbsSteps.includes(currentStep) &&\n <DotCrumbs\n crumbs={crumbsSteps}\n currentStep={currentStep}\n />\n }\n </div>\n <div className={`position-relative mx-auto w-100 ${getMaxWidthClass()}`}>\n <div className='d-flex flex-row justify-content-center align-items-center mt-2 mb-3'>\n {hasPreviousStep && showBackButton && shouldShowBackButton() &&\n <MultiStepBackButton onClick={onClickBackButtons} />\n }\n <div className={`d-flex justify-content-center align-items-center px-2 ${styles.logo}`}>\n <ClickViewLogo />\n </div>\n </div>\n {children}\n </div>\n <div className='position-relative mb-4 mt-3 text-center'>\n {showSignInText() &&\n <ExistingAccountSignIn link={ExternalLinkHelper.getLoginLink()} onClick={onClickSignIn} />\n }\n {showTermsAndConditions() &&\n <TermsAndConditions\n onClickTermsAndConditions={onClickTermsAndConditions}\n onClickPrivacyPolicy={onClickPrivacyPolicy}\n />\n }\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"fullPageLayout\":\"jZ_Wp\",\"logo\":\"J97w_\",\"maxWidth42rem\":\"Ye154\",\"maxWidth23rem\":\"m2kAT\",\"maxWidth30rem\":\"ollkc\"};","import React from 'react';\n\nimport { SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DotCrumbs } from 'libs/shared/apps/sign-up/components/general/dot-crumbs/DotCrumbs';\nimport { ExistingAccountSignIn } from 'libs/shared/apps/sign-up/components/general/existing-account-sign-in/ExistingAccountSignIn';\nimport { TermsAndConditions } from 'libs/shared/apps/sign-up/components/general/terms-and-conditions/TermsAndConditions';\nimport { MultiStepBackButton } from 'libs/shared/apps/sign-up/components/multi-step-form/MultiStepBackButton';\nimport { ExternalLinkHelper } from 'libs/shared/apps/sign-up/helpers/ExternalLinkHelper';\nimport { LayoutProps } from 'libs/shared/apps/sign-up/interfaces/Layout';\nimport { StepIds } from 'libs/shared/apps/sign-up/interfaces/MultiStepForm';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClickViewLogo, ClickViewLogoInverted } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './popup-layout.scss';\n\nPopupLayout.defaultProps = {\n showBackButton: true\n};\n\nconst crumbsSteps: StepIds[] = [ 'enter-email', 'find-school' ];\n// steps that have the left half as image and content on the right\nconst halfLayoutSteps: StepIds[] = [\n 'enter-email',\n 'find-school',\n 'cant-find-school',\n 'add-to-braze',\n 'enter-age',\n 'request-access'\n];\n\nexport function PopupLayout(props: React.PropsWithChildren<LayoutProps>): JSX.Element {\n const {\n currentStep,\n previousStep,\n hasPreviousStep,\n showBackButton,\n closeApp,\n children\n } = props;\n\n function showSignInText() {\n return currentStep === 'select-type';\n }\n \n function showTermsAndConditions() {\n return [ 'enter-email', 'add-to-braze' ].includes(currentStep);\n }\n function shouldShowBackButton() {\n return [ 'enter-email', 'find-school', 'cant-find-school', 'add-to-braze', 'enter-age' ].includes(currentStep);\n }\n\n function onClickBackButtons(): void {\n previousStep();\n\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.Back,\n workflowPhase: WorkflowPhase.Back\n });\n }\n\n function onClickTermsAndConditions(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.TermsAndConditions\n });\n }\n\n function onClickPrivacyPolicy(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.PrivacyPolicy\n });\n }\n\n function onClickSignIn(): void {\n props.logUserAction({}, {\n actionType: UserAction.Click,\n descriptor: SignUpDescriptors.SignIn\n });\n }\n\n const hasLeftHalfBg = halfLayoutSteps.includes(props.currentStep);\n const layoutClass = hasLeftHalfBg ? `${styles.leftHalfLayout} ${styles.withBg}` : styles.leftHalfLayout;\n \n return (\n <div className={layoutClass}>\n <div className='row mx-0 p-3'>\n <div className={`col px-0 d-lg-none ${styles.popupButton}`}>\n {hasPreviousStep && shouldShowBackButton() && showBackButton &&\n <MultiStepBackButton onClick={onClickBackButtons}></MultiStepBackButton>\n }\n </div>\n <div className='col col-lg-6 px-0'>\n <div className={styles.logo}>\n <div className='d-none d-lg-block'>\n {hasLeftHalfBg ?\n <ClickViewLogoInverted /> :\n <ClickViewLogo />\n }\n </div>\n <div className='d-block d-lg-none mt-1'>\n <ClickViewLogo />\n {crumbsSteps.includes(props.currentStep) &&\n <div className='mt-3'>\n <DotCrumbs\n crumbs={crumbsSteps}\n currentStep={currentStep}\n />\n </div>\n }\n </div>\n </div>\n </div>\n <div className='col col-lg-6 d-flex flex-row justify-content-between px-0'>\n <div className='px-3'>\n <div className={`d-none d-lg-block ${styles.popupButton}`}>\n {hasPreviousStep && shouldShowBackButton() && showBackButton &&\n <MultiStepBackButton onClick={onClickBackButtons}></MultiStepBackButton>\n }\n </div>\n </div>\n {crumbsSteps.includes(props.currentStep) &&\n <div className='d-none d-lg-block align-self-center'>\n <DotCrumbs\n crumbs={crumbsSteps}\n currentStep={currentStep}\n />\n </div>\n }\n <DivButton onClick={closeApp} className={styles.popupButton}>\n <SvgContainer svgName={cvSvgLibrary.Close} size={SvgContainerSize.Medium} />\n </DivButton>\n </div>\n </div>\n <div className='row mx-0 flex-grow-1'>\n {hasLeftHalfBg &&\n <div className='col-6 px-0 d-none d-lg-block'>\n <div className='h-100 d-flex align-items-center justify-content-center'>\n <img src={props.imageUrls.popupDashboard} className={`w-100 p-4 pb-5 ${styles.leftImage}`} />\n </div>\n </div>\n }\n <div className={`px-4 pt-0 pb-4 ${hasLeftHalfBg ? 'col-12 col-lg-6' : 'col-12'}`}>\n <div className='d-flex flex-column h-100'>\n <div className='flex-grow-1'>\n {children}\n </div>\n <div className='text-center mt-3'>\n {showSignInText() &&\n <ExistingAccountSignIn\n link={ExternalLinkHelper.getLoginLink()}\n onClick={onClickSignIn}\n />\n }\n {showTermsAndConditions() &&\n <TermsAndConditions\n onClickTermsAndConditions={onClickTermsAndConditions}\n onClickPrivacyPolicy={onClickPrivacyPolicy}\n />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}","import { MultiStepFormTypes } from 'libs/shared/apps/sign-up/enums/MultiStepFormTypes';\nimport { LayoutMappingType } from 'libs/shared/apps/sign-up/interfaces/Layout';\nimport { FullPageLayout } from 'libs/shared/apps/sign-up/layouts/full-page-layout/FullPageLayout';\nimport { PopupLayout } from 'libs/shared/apps/sign-up/layouts/popup-layout/PopupLayout';\n\nexport const PopupLayoutMappings: LayoutMappingType = {\n 'cant-find-school': PopupLayout,\n 'enter-email': PopupLayout,\n 'find-school': PopupLayout,\n 'select-type': PopupLayout,\n 'completed': PopupLayout,\n 'add-to-braze': PopupLayout,\n 'enter-age': PopupLayout,\n 'request-access': PopupLayout\n};\n\nexport const FullPageLayoutMappings: LayoutMappingType = {\n 'cant-find-school': FullPageLayout,\n 'enter-email': FullPageLayout,\n 'find-school': FullPageLayout,\n 'select-type': FullPageLayout,\n 'completed': FullPageLayout,\n 'add-to-braze': FullPageLayout,\n 'enter-age': FullPageLayout,\n 'request-access': FullPageLayout\n};\n\nconst LayoutMappings: {[key in MultiStepFormTypes]: LayoutMappingType} = {\n [MultiStepFormTypes.FullPage]: FullPageLayoutMappings,\n [MultiStepFormTypes.Popup]: PopupLayoutMappings\n};\n\nexport const LayoutHelper = {\n getLayouts(type: MultiStepFormTypes): LayoutMappingType {\n return LayoutMappings[type];\n }\n};","import { NextStepAction } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/actions/FormActions';\nimport { SignUpState } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\n\nfunction removeEmptyKeys(obj: any): any {\n return Object.entries(obj)\n .filter(([ , v ]) => v !== null)\n .reduce((acc, [ k, v ]) => ({ ...acc, [k]: v }), {});\n}\n\nexport function nextStepReducer(state: SignUpState, action: NextStepAction): SignUpState {\n const newState: SignUpState = {\n ...state,\n previousStepIds: [ ...state.previousStepIds, state.currentStepId ],\n currentStepId: action.step\n };\n\n if (action.step === 'select-type') {\n return {\n ...newState\n };\n }\n\n if (action.step === 'enter-email' || action.step === 'enter-age') {\n return {\n ...newState,\n userType: action.userType\n };\n }\n\n if (action.step === 'find-school') {\n return {\n ...newState,\n email: action.email\n };\n }\n\n if (action.step === 'cant-find-school') {\n return {\n ...newState,\n prospectId: action.prospectId,\n schoolName: action.schoolName,\n schoolLocality: action.schoolLocality,\n country: action.country,\n longitude: action.longitude,\n latitude: action.latitude,\n city: action.city,\n province: action.province\n };\n }\n\n if (action.step === 'add-to-braze' || action.step === 'completed' || action.step === 'request-access') {\n let stepData = { ...action };\n\n delete stepData.type;\n delete stepData.step;\n\n stepData = removeEmptyKeys(stepData);\n return {\n ...newState,\n ...stepData\n };\n }\n}","import { FormActions } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/actions/FormActions';\nimport { SignUpState } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\nimport { backReducer } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/reducers/BackReducer';\nimport { nextStepReducer } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/reducers/NextStepReducer';\n\nexport function signUpReducer(state: SignUpState, action: FormActions): SignUpState {\n switch (action.type) {\n case 'nextStep':\n return nextStepReducer(state, action);\n case 'back':\n return backReducer(state);\n }\n}","import { SignUpState } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\n\nexport function backReducer(state: SignUpState): SignUpState {\n const updatedPreviousSteps = [...state.previousStepIds];\n const lastStepId = updatedPreviousSteps.pop();\n return {\n ...state,\n previousStepIds: updatedPreviousSteps,\n currentStepId: lastStepId\n };\n}","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, LocationContext } from 'libs/analytics/interfaces/AnalyticsTypes';\nimport { HashObject } from 'libs/analytics/interfaces/HashObject';\n\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { DataHelper } from 'libs/shared/apps/sign-up/helpers/DataHelper';\nimport { StepActions } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/actions/StepActions';\nimport { CompletionData, SignUpState, SignUpStepsDataState } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\nimport { signUpReducer } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/reducers/SignUpReducer';\n\ntype SignUpLocation = LocationContext.SignUpPopup\n| LocationContext.SignUpPage\n| LocationContext.AuthProspectSelect;\n\ninterface SignUpStepsParams {\n location: SignUpLocation;\n\n initialValues?: SignUpStepsDataState;\n onStepUpdate?: (data: SignUpState) => void;\n externalLogUserAction: (data: HashObject | HashObject[], analyticsOptions: AnalyticsOptions) => void;\n}\n\nexport const useSignUpSteps = ({\n location,\n initialValues,\n onStepUpdate,\n externalLogUserAction\n}: SignUpStepsParams) => {\n const init = BrazeHelper.removeEmptyKeys(initialValues);\n \n const initialState: SignUpState = {\n currentStepId: 'select-type',\n previousStepIds: [],\n ...init\n };\n\n const [ state, dispatch ] = React.useReducer(signUpReducer, initialState);\n\n React.useEffect(() => {\n onStepUpdate?.(state);\n }, [state.currentStepId]);\n\n function back(): void {\n dispatch({\n type: 'back'\n });\n }\n\n function nextStep(action: StepActions): void {\n dispatch({\n type: 'nextStep',\n ...action\n });\n }\n\n function complete(data: CompletionData): void {\n dispatch({\n type: 'nextStep',\n step: 'completed',\n ...data\n });\n }\n\n function logUserAction(data: HashObject | HashObject[], analyticsOptions: AnalyticsOptions): void {\n const combinedData = {\n ...state,\n ...data\n };\n const dataWithoutPII = DataHelper.filterBlacklistedKeys(combinedData);\n const enrichedData = {\n currentStepId: state.currentStepId,\n ...dataWithoutPII\n };\n const filteredEnrichedData = Object.entries(enrichedData)\n .filter(([ , value ]) => value !== undefined)\n .reduce((obj, [ key, value ]) => ({ ...obj, [key]: value }), {});\n\n externalLogUserAction(filteredEnrichedData, {\n entity: EntityType.SignUp,\n location,\n ...analyticsOptions\n });\n }\n\n return {\n state,\n back,\n nextStep,\n complete,\n hasPreviousStep: !!state.previousStepIds.length,\n logUserAction\n };\n};","\nimport React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ActiveStep } from 'libs/shared/apps/sign-up/components/multi-step-form/ActiveStep';\nimport { FormDebugger } from 'libs/shared/apps/sign-up/components/multi-step-form/form-debugger/FormDebugger';\nimport { YOUNG_STUDENT_STORAGE_KEY } from 'libs/shared/apps/sign-up/constants/YoungStudentStorageKey';\nimport { MultiStepFormTypes } from 'libs/shared/apps/sign-up/enums/MultiStepFormTypes';\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { LayoutHelper } from 'libs/shared/apps/sign-up/helpers/LayoutHelper';\nimport { SignUpState, SignUpStepsDataState } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/interfaces/SignUpState';\nimport { useSignUpSteps } from 'libs/shared/apps/sign-up/hooks/useSignUpSteps/useSignUpSteps';\nimport { SignUpAjaxUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpAjaxUrls';\nimport { SignUpBrazeConfig } from 'libs/shared/apps/sign-up/interfaces/SignUpBrazeConfig';\nimport { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ntype MultiStepFormInitialValues = Pick<SignUpStepsDataState, 'email'>;\n\ninterface MultiStepFormProps {\n type: MultiStepFormTypes;\n location: LocationContext.SignUpPopup | LocationContext.SignUpPage;\n googleMapsApiKey: string;\n geoLocation: GeoLocation;\n\n initialValues?: MultiStepFormInitialValues;\n pageAppLinkString?: string;\n onStepUpdate?: (data: SignUpState) => void;\n close?: () => void;\n imageUrls: SignUpImageUrls;\n ajaxUrls: SignUpAjaxUrls;\n brazeConfig: SignUpBrazeConfig;\n version: string;\n productName: SignUpProduct;\n}\n\nexport function MultiStepForm(props: React.PropsWithChildren<MultiStepFormProps>): JSX.Element {\n const layoutMapping = LayoutHelper.getLayouts(props.type);\n const {\n location,\n initialValues,\n geoLocation,\n googleMapsApiKey,\n pageAppLinkString,\n onStepUpdate,\n imageUrls,\n ajaxUrls,\n brazeConfig,\n version,\n productName,\n close\n } = props;\n const { back, nextStep, complete, hasPreviousStep, state, logUserAction } = useSignUpSteps({\n location,\n initialValues,\n onStepUpdate,\n externalLogUserAction: AnalyticsHelper.logUserAction\n });\n\n const stepProps = {\n state,\n geoLocation,\n layoutMapping,\n hasPreviousStep,\n googleMapsApiKey,\n pageAppLinkString,\n back,\n close,\n nextStep,\n complete,\n logUserAction,\n imageUrls,\n ajaxUrls,\n brazeConfig,\n version,\n productName\n };\n\n React.useEffect(() => {\n const youngStudent = LocalStorageHelper.get(YOUNG_STUDENT_STORAGE_KEY);\n\n if (!youngStudent) return;\n\n complete({\n completionStep: 'young-student',\n trialCreated: false,\n trialStatus: null\n });\n }, []);\n \n return (\n <>\n <ActiveStep {...stepProps} />\n <FormDebugger\n developmentEnv={process.env.NODE_ENV === 'development'}\n objects={{\n ...state,\n pageAppLinkString,\n ...geoLocation\n }}\n />\n </>\n );\n}","export enum MultiStepFormTypes {\n Popup = 'popup-form',\n FullPage = 'full-page-form'\n}","import { HashObject } from 'libs/analytics/interfaces';\n\nconst BLACKLISTED_KEYS: string[] = [\n 'email',\n 'longitude',\n 'latitude',\n 'trialCreated'\n];\n\nexport const DataHelper = {\n filterBlacklistedKeys(data: HashObject) {\n const newObj = { ...data };\n\n BLACKLISTED_KEYS.forEach(prop => delete newObj[prop]);\n\n return newObj;\n }\n};","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\ntype ExternalLinkType = {\n [key: string]: {\n [key in CountryCode]: string\n }\n}\n\ninterface LoginLinkOptions {\n email?: string;\n customerId?: string;\n}\n\nexport const ExternalLink: ExternalLinkType = {\n Marketing: {\n au: 'https://www.clickvieweducation.com/en-au',\n us: 'https://www.clickvieweducation.com',\n nz: 'https://www.clickview.co.nz',\n // @todo update after new UK website is released\n uk: 'https://www.clickview.co.uk'\n },\n Support: {\n au: 'https://www.clickviewsupport.com/hc/en-au',\n uk: 'https://www.clickviewsupport.com/hc/en-au#gb',\n nz: 'https://www.clickviewsupport.com/hc/en-au#nz',\n us: 'https://www.clickviewsupport.com/hc/en-au#us'\n }\n};\n\nconst marketingSalesPathname: {[key in CountryCode]: string} = {\n [CountryCode.AU]: '/contact-us/sales',\n [CountryCode.US]: '/contact-us/sales',\n [CountryCode.NZ]: '/contact-us/',\n // @todo update after new UK website is released\n [CountryCode.UK]: '/contact-us/trial'\n};\n\nconst marketingFreeResourcesPathname: {[key in CountryCode]: string} = {\n [CountryCode.AU]: '/resources/free-student-resources',\n [CountryCode.US]: '/resources/free-student-resources',\n [CountryCode.NZ]: '/free-student-resources/',\n // @todo update after new UK website is released\n [CountryCode.UK]: '/free-student-resources/'\n};\n\nexport const ExternalLinkHelper = {\n \n getMarketingUrlForGeoLocation(geoLocation: GeoLocation): string {\n const countryCode = LocalityHelper.getCountryCode(geoLocation?.countryCode);\n const url = ExternalLink.Marketing[countryCode];\n\n if (!url)\n return ExternalLink.Marketing.us;\n\n return url;\n },\n\n getMarketingSalesContactForGeoLocation(geoLocation: GeoLocation): string {\n const countryCode = LocalityHelper.getCountryCode(geoLocation?.countryCode);\n const baseUrl = ExternalLinkHelper.getMarketingUrlForGeoLocation(geoLocation);\n const pathname = marketingSalesPathname[countryCode];\n\n return `${baseUrl}${pathname}`;\n },\n\n getFreeResourcesForGeoLocation(geoLocation: GeoLocation): string {\n const countryCode = LocalityHelper.getCountryCode(geoLocation?.countryCode);\n\n const baseUrl = this.getMarketingUrlForGeoLocation({ countryCode });\n const pathname = marketingFreeResourcesPathname[countryCode];\n\n return `${baseUrl}${pathname}`;\n },\n\n getTermsAndConditionsLink(): string {\n const baseUrl = this.getMarketingUrlForGeoLocation(CountryCode.US);\n return baseUrl + '/terms-and-conditions/';\n },\n\n getPrivacyPolicyLink(): string {\n const baseUrl = this.getMarketingUrlForGeoLocation(CountryCode.US);\n return baseUrl + '/privacy-policy/';\n },\n\n getSupportUrlForGeoLocation(geoLocation: GeoLocation): string {\n const countryCode = LocalityHelper.getCountryCode(geoLocation?.countryCode);\n const url = ExternalLink.Support[countryCode];\n\n if (!url)\n return ExternalLink.Support.us;\n\n return url;\n },\n\n getLoginLink(options: LoginLinkOptions = {}): string {\n const { email, customerId } = options;\n\n const params: HashObject = {\n redirectUrl: window.location.pathname + window.location.search\n };\n\n if (email)\n params.email = email;\n\n if (customerId)\n params.customerId = customerId;\n\n return UrlHelper.urlBuilder('/login', params);\n }\n};","import { LocationUtils } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nconst FALLBACK_COUNTRY: GeoLocation = {\n countryCode: 'us',\n isFallback: true\n};\n\nexport function useGeoLocation(): GeoLocation {\n const geoLocation = Flight.useBasicFetch<GeoLocation>(ConfigRequests.geoLocation());\n\n const countryCode = LocationUtils.GetQuery()?.countryCode?.toLowerCase();\n \n if (countryCode)\n return { countryCode };\n\n if (geoLocation.hasCompleted && !geoLocation.data)\n return FALLBACK_COUNTRY;\n\n return geoLocation.data;\n}","import { SignUpImageUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpImageUrls';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nexport const SignUpImages: SignUpImageUrls = {\n popupDashboard: ImageUrls.SignUp.POPUP_DASHBOARD,\n educator: ImageUrls.SignUp.EDUCATOR,\n student: ImageUrls.SignUp.STUDENT,\n\n statusImages: {\n available: ImageUrls.SignUp.VERIFY_ACCOUNT,\n active: ImageUrls.SignUp.EXISTING_CUSTOMER,\n expired: ImageUrls.SignUp.EXPIRED_TRIAL,\n notRequired: ImageUrls.SignUp.EXISTING_CUSTOMER,\n unavailable: ImageUrls.SignUp.NOT_AVAILABLE,\n unsupported: ImageUrls.SignUp.NOT_AVAILABLE,\n autoJoin: ImageUrls.SignUp.EXISTING_CUSTOMER,\n requestAccess: ImageUrls.SignUp.EXISTING_CUSTOMER\n }\n};","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { SignUpAjaxUrls } from 'libs/shared/apps/sign-up/interfaces/SignUpAjaxUrls';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\n\nexport function useGetSignUpAjaxUrls(): SignUpAjaxUrls {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n if (!config.hasCompleted)\n return null;\n\n const gateway = config.data.gatewayApiUrl;\n\n return {\n productName: SignUpProduct.Lite,\n userStatus: UrlHelper.safeUrlConcat(gateway, '/v1/users/trial-status'),\n prospectStatus: prospectId => UrlHelper.safeUrlConcat(gateway, `/v1/prospects/${prospectId}/trial-status`),\n createTrial: '/api/user/trials',\n resendTrialEmail: userId => `/api/user/trials/users/${userId}/send-activation-email`,\n searchProspect: UrlHelper.safeUrlConcat(gateway, '/v1/search/prospects'),\n createProspect: '/api/prospects',\n prospectLookups: prospectId => UrlHelper.safeUrlConcat(gateway, `/v1/prospects/${prospectId}/lookups`),\n autoJoin: '/api/user/trials/auto-join',\n joinRequest: customerId => `/api/user/customers/${customerId}/join-requests`\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"Kh4Dd\",\"modalBody\":\"V9nIN\",\"popupButton\":\"hS60U\",\"leftImage\":\"kDU8y\",\"leftHalfLayout\":\"aQ1K8\",\"withBg\":\"zALxE\"};"],"names":["CloseIcon","viewBox","d","ClearableInput","props","ref","onClickClear","showClearButton","inputProps","className","value","role","onClick","ExistingAccountSignIn","href","link","US_ONLY_IDPS","name","logoUrl","url","GLOBAL_IDPS","GlobalIdpButton","idp","last","currentPathAndQuery","window","location","pathname","search","encodeURIComponent","attribution","src","GlobalIdps","idps","length","LocalityHelper","geoLocation","countryCode","unshift","map","p","i","key","TrialStatus","UserTrialStatus","UserType","AddToBrazeForm","fullname","jobTitle","phone","data","setData","setDataForKey","onSubmit","event","preventDefault","handleSubmitForm","htmlFor","onChange","target","removeErrorForKey","id","type","errors","placeholder","autoFocus","trim","JobTitleInput","country","error","size","labelClassName","submission","SpinnerButton","variant","showSpinner","loading","disabled","Object","keys","MAX_STRING_LENGTH","INVALID_STRING_REGEX","PHONE_REGEX","splitName","fullName","firstName","surname","split","filter","x","shift","join","fastDeepEqual","equal","a","b","constructor","Array","isArray","RegExp","source","flags","valueOf","prototype","toString","hasOwnProperty","call","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","language","libraries","mapIds","nonce","region","retries","version","this","CALLBACK","callbacks","done","instance","options","Error","JSON","stringify","status","FAILURE","SUCCESS","LOADING","INITIALIZED","failed","createUrl","deleteScript","script","document","getElementById","remove","load","loadPromise","Promise","resolve","reject","loadCallback","err","google","fn","push","execute","setScript","callback","createElement","onerror","loadErrorCallback","bind","defer","async","head","appendChild","reset","onerrorEvent","resetIfRetryingFailed","e","delay","Math","pow","console","log","setTimeout","setCallback","__googleMapsCallback","forEach","cb","maps","warn","setupLoader","config","useGoogleApi","loaded","setLoaded","loader","setLoader","loaderCallback","onLoad","onError","scriptLoaded","onGoogleApiReady","useAutoCompleteService","googleApiKey","autoCompleteService","setAutocompleteService","places","AutocompleteService","DEFAULT_COUNTRY_CODE","STORAGE_KEY","useCountryPlaceholder","makeRequest","template","templateKey","supportedPlaceholder","LocalStorageHelper","getCachedPlaceholder","setPlaceholder","setCachedPlaceholder","request","input","String","fromCharCode","RandomHelper","types","componentRestrictions","getPlacePredictions","result","results","PlacesServiceStatus","OK","randomCity","description","replace","getRandomLocality","useDropdownEvents","selectedIndex","setSelectedIndex","containerRef","hide","setHide","scrollIntoView","current","children","block","onKeyDown","code","stopPropagation","newIndex","itemCount","onSelected","onFocus","hideOnBlur","onBlur","PlaceHelper","city","province","postalCode","locality","formatted_address","address_components","component","short_name","ErrorPhraseMap","CrosshairIcon","LocalityPredicitions","predictions","getPlaceInfo","predicition","index","DivButton","place_id","onMouseDown","SearchLocalityInput","inputRef","schoolLocality","setLocality","makePredicition","setMakePredicition","countryPlaceholderText","googleMapsApiKey","debouncedSearch","localityPredicitions","setLocalityPredicitions","getLocalityPredictions","predicitions","undefined","isFallback","PlacesService","getDetails","placeId","fields","place","longitude","geometry","lng","latitude","lat","useLocalitySearch","details","setDetails","onPositionSuccess","position","coords","LatLng","Geocoder","geocode","GeocoderStatus","find","item","includes","onPositionError","errorMessagePhrase","placeDetails","onClickGetCurrentLocation","navigator","geolocation","getCurrentPosition","useGeocoder","setGeocoderError","extraItem","selected","handleGetPlaceInfo","handleOnClickGetCurrentLocation","geocoderError","onSetLocality","localityValue","clearData","placeData","schoolPostCode","logUserAction","actionType","descriptor","baseClass","isInputFocused","geoLocationEnabled","required","currentTarget","autoComplete","focus","useGeoLocationApi","ApiError","body","message","prepareRequest","init","method","HttpVerbs","headers","baseUrl","requestData","finalUrl","FetchHelper","asyncFetch","fetch","response","ok","json","asyncFetchPlain","text","then","success","reason","always","AccessPolicy","ProspectRequests","query","create","urls","createProspect","getLookups","prospectId","prospectLookups","UserRequests","productName","SignUpProduct","email","userStatus","fetchUrl","prospectStatus","userType","accessPolicy","appLink","createTrial","userId","resendTrialEmail","joinRequest","customerId","autoJoin","AccessPolicyHelper","Freemium","TwentyOneDays","getPayload","utms","UtmHelper","attributionData","AttributionHelper","payload","prospect_id","organisation_sub_type","BrazeHelper","schoolType","account_name","schoolName","account_post_code","account_country","sync_to_crm","form_type","original_referrer","originalReferrer","internal_referrer","internalReferrer","ProspectStatus","BrazeEventHelper","submitFormEvent","brazeConfig","braze","openSession","setUser","logEvent","sendData","AU_SCHOOL_TYPES","US_SCHOOL_TYPES","SCHOOL_TYPES","au","nz","uk","us","getClassName","Completed","StatusImage","StatusImageMap","Available","imageUrls","statusImages","available","Active","active","Expired","expired","NotRequired","notRequired","Unavailable","unavailable","Unsupported","unsupported","UserAutoJoinAllowed","UserJoinApprovalRequired","trialStatus","ExistingCustomer","isLastStepFindSchool","previousStepIds","ExternalLinkHelper","StatusMessageMap","resendEmailCount","setResendEmailCount","hasResendError","setHasResendError","ajaxUrls","pageAppLinkString","nextStep","step","Staff","salesContactLink","StatusMessage","Message","YOUNG_STUDENT_STORAGE_KEY","CompletedStepMap","analyticsOptions","workflowPhase","trialCreated","getDateString","year","month","day","padStart","emailRegex","EMAIL_PLACEHOLDERS","CountryCode","C","marketingContactTechnicalPathname","getPlaceholderText","completionStatuses","getJoinRequestError","SchoolSuggestions","filteredSchoolsList","getSchoolName","onSchoolSuggestionClick","displayItems","toLowerCase","c","charAt","toUpperCase","slice","postCode","getDisplayLocation","CantFindSchool","handleNoSuggestion","SearchSchoolInput","setLoading","setName","schoolsList","setSchoolsList","debouncedName","onClickNoSuggestions","schoolSelected","isLoading","showCantFindSchool","showSuggestions","onSetSchoolName","schoolNameValue","fetchSchools","searchUrl","prospectType","showSuggestionsContainer","inputClassName","Spinner","animation","UserTypeOption","imageSrc","buttonText","stepsMapping","selectAndNextStep","educator","Learner","student","baseLink","setEmail","setError","contactLink","onFormSubmit","test","userEmail","InvalidEmail","complete","completionStep","noValidate","autoCorrect","getLiteAttributionForAuth","setProspectStatus","submissionError","setSubmissionError","disableLocality","setDisableLocality","disableSchoolSearch","setDisableSchoolSearch","requestTrial","canSubmitForm","logStepEvent","setLoadingState","setProperty","autoJoinLite","lookups","ProspectLookup","externalId","brazeFormSubmissionEvent","getRequestTrial","clearSchoolStepItemData","localityData","schoolData","searchProspect","schoolTypes","canCreateSchool","Draft","prospectResponse","trialRequest","trialResponse","flushSuccess","Step","setErrors","first_name","last_name","job_title","event_topic","onComplete","errorObject","validate","userAttributes","account_address","country_code","setUserFirstName","setUserLastName","setUserPhone","setUserEmail","bulkSetCustomUserAttributes","addToBraze","setDay","setMonth","setYear","currentYear","Date","getFullYear","containerClassName","dayOrder","monthOrder","isUs","date","isNaN","isDateValid","dateOfBith","cutOffYear","cutOff","setFullYear","min","max","tabIndex","ActiveStep","state","layoutMapping","hasPreviousStep","back","CurrentStep","currentStepId","stepProps","Layout","currentStep","previousStep","closeApp","close","flattenObject","objects","flattened","ObjectHelper","assign","DebuggerItem","label","content","FormDebugger","developmentEnv","show","setShow","flatObject","getClass","colorClass","DotCrumbs","crumbs","TermsAndConditions","termsAndConditionsLink","privacyPolicyLink","ExternalLink","onClickTermsAndConditions","newTab","onClickPrivacyPolicy","MultiStepBackButton","SvgContainer","svgName","S","FullPageLayout","defaultProps","showBackButton","crumbsSteps","ClickViewLogo","PopupLayout","halfLayoutSteps","shouldShowBackButton","onClickBackButtons","hasLeftHalfBg","layoutClass","popupDashboard","PopupLayoutMappings","FullPageLayoutMappings","LayoutMappings","MultiStepFormTypes","LayoutHelper","getLayouts","nextStepReducer","action","obj","newState","stepData","entries","reduce","acc","k","v","signUpReducer","updatedPreviousSteps","lastStepId","pop","backReducer","useSignUpSteps","initialValues","onStepUpdate","externalLogUserAction","initialState","dispatch","combinedData","dataWithoutPII","DataHelper","enrichedData","filteredEnrichedData","entity","MultiStepForm","AnalyticsHelper","BLACKLISTED_KEYS","filterBlacklistedKeys","newObj","prop","Marketing","Support","marketingSalesPathname","marketingFreeResourcesPathname","getMarketingUrlForGeoLocation","getMarketingSalesContactForGeoLocation","getFreeResourcesForGeoLocation","getTermsAndConditionsLink","getPrivacyPolicyLink","getSupportUrlForGeoLocation","getLoginLink","params","redirectUrl","FALLBACK_COUNTRY","useGeoLocation","hasCompleted","SignUpImages","requestAccess","useGetSignUpAjaxUrls","gateway","gatewayApiUrl"],"sourceRoot":""}