@clickview/streamable-learning 0.48.0-rc.1 → 0.48.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 (115) hide show
  1. package/dist/.vite/manifest.json +605 -605
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{CN8PeBwg.chunk.js → BIisq8ZO.chunk.js} +2 -2
  5. package/dist/scripts/{CN8PeBwg.chunk.js.map → BIisq8ZO.chunk.js.map} +1 -1
  6. package/dist/scripts/{BaMNOAYj2.chunk.js → BWU6_pPN2.chunk.js} +2 -2
  7. package/dist/scripts/{BaMNOAYj2.chunk.js.map → BWU6_pPN2.chunk.js.map} +1 -1
  8. package/dist/scripts/{BvJXPFoz2.chunk.js → BcZFo9Vw2.chunk.js} +2 -2
  9. package/dist/scripts/{BvJXPFoz2.chunk.js.map → BcZFo9Vw2.chunk.js.map} +1 -1
  10. package/dist/scripts/Bd2bbHru.chunk.js +1 -0
  11. package/dist/scripts/{CkYqp83j.chunk.js → BfNy0Hvk.chunk.js} +2 -2
  12. package/dist/scripts/{CkYqp83j.chunk.js.map → BfNy0Hvk.chunk.js.map} +1 -1
  13. package/dist/scripts/{D0SYGnyF.chunk.js → BivP7X20.chunk.js} +2 -2
  14. package/dist/scripts/{D0SYGnyF.chunk.js.map → BivP7X20.chunk.js.map} +1 -1
  15. package/dist/scripts/{BihZ4r0z2.chunk.js → BjbY4Fbp2.chunk.js} +3 -3
  16. package/dist/scripts/{BihZ4r0z2.chunk.js.map → BjbY4Fbp2.chunk.js.map} +1 -1
  17. package/dist/scripts/{DO8_mR5i2.chunk.js → BmxcE73n2.chunk.js} +2 -2
  18. package/dist/scripts/{DO8_mR5i2.chunk.js.map → BmxcE73n2.chunk.js.map} +1 -1
  19. package/dist/scripts/{bycmewy72.chunk.js → BnEMhkEE2.chunk.js} +2 -2
  20. package/dist/scripts/{bycmewy72.chunk.js.map → BnEMhkEE2.chunk.js.map} +1 -1
  21. package/dist/scripts/{jWpq99N3.chunk.js → Buc8GegC.chunk.js} +2 -2
  22. package/dist/scripts/{jWpq99N3.chunk.js.map → Buc8GegC.chunk.js.map} +1 -1
  23. package/dist/scripts/{CrCAJmt6.chunk.js → Byczy1lS.chunk.js} +2 -2
  24. package/dist/scripts/{CrCAJmt6.chunk.js.map → Byczy1lS.chunk.js.map} +1 -1
  25. package/dist/scripts/{BZOcEcTA2.chunk.js → C2itEpvc2.chunk.js} +2 -2
  26. package/dist/scripts/{BZOcEcTA2.chunk.js.map → C2itEpvc2.chunk.js.map} +1 -1
  27. package/dist/scripts/{smdLElLq.chunk.js → CEFKXxac.chunk.js} +2 -2
  28. package/dist/scripts/{smdLElLq.chunk.js.map → CEFKXxac.chunk.js.map} +1 -1
  29. package/dist/scripts/{B-qOny0I2.chunk.js → CEYjJAp52.chunk.js} +2 -2
  30. package/dist/scripts/{B-qOny0I2.chunk.js.map → CEYjJAp52.chunk.js.map} +1 -1
  31. package/dist/scripts/{CNJrD44-2.chunk.js → CJSc4YDq2.chunk.js} +2 -2
  32. package/dist/scripts/{CNJrD44-2.chunk.js.map → CJSc4YDq2.chunk.js.map} +1 -1
  33. package/dist/scripts/{Br0Uc4GG.chunk.js → CKUA5J3R.chunk.js} +2 -2
  34. package/dist/scripts/{Br0Uc4GG.chunk.js.map → CKUA5J3R.chunk.js.map} +1 -1
  35. package/dist/scripts/{CWFInhB82.chunk.js → CYrzupmS2.chunk.js} +2 -2
  36. package/dist/scripts/{CWFInhB82.chunk.js.map → CYrzupmS2.chunk.js.map} +1 -1
  37. package/dist/scripts/{Llxar-VU.chunk.js → CcGYZb9f.chunk.js} +2 -2
  38. package/dist/scripts/{Llxar-VU.chunk.js.map → CcGYZb9f.chunk.js.map} +1 -1
  39. package/dist/scripts/{BTYwcYPL2.chunk.js → CeQGaFi-2.chunk.js} +2 -2
  40. package/dist/scripts/{BTYwcYPL2.chunk.js.map → CeQGaFi-2.chunk.js.map} +1 -1
  41. package/dist/scripts/{D7tastET2.chunk.js → Cr3Blj6H2.chunk.js} +2 -2
  42. package/dist/scripts/{D7tastET2.chunk.js.map → Cr3Blj6H2.chunk.js.map} +1 -1
  43. package/dist/scripts/{Dr1flAez.chunk.js → CxCkwLio.chunk.js} +2 -2
  44. package/dist/scripts/{Dr1flAez.chunk.js.map → CxCkwLio.chunk.js.map} +1 -1
  45. package/dist/scripts/{DyT1OGvP2.chunk.js → Cxj75Dqe2.chunk.js} +2 -2
  46. package/dist/scripts/{DyT1OGvP2.chunk.js.map → Cxj75Dqe2.chunk.js.map} +1 -1
  47. package/dist/scripts/{CsC3VVvE2.chunk.js → D-VNmhoM2.chunk.js} +2 -2
  48. package/dist/scripts/{CsC3VVvE2.chunk.js.map → D-VNmhoM2.chunk.js.map} +1 -1
  49. package/dist/scripts/{CKdklY2o2.chunk.js → D2FqnK9m2.chunk.js} +2 -2
  50. package/dist/scripts/{CKdklY2o2.chunk.js.map → D2FqnK9m2.chunk.js.map} +1 -1
  51. package/dist/scripts/{qcrBN1zR2.chunk.js → D3sdyN2Q2.chunk.js} +2 -2
  52. package/dist/scripts/{qcrBN1zR2.chunk.js.map → D3sdyN2Q2.chunk.js.map} +1 -1
  53. package/dist/scripts/{Ce1TZZdV2.chunk.js → D6IzS-bj2.chunk.js} +2 -2
  54. package/dist/scripts/{Ce1TZZdV2.chunk.js.map → D6IzS-bj2.chunk.js.map} +1 -1
  55. package/dist/scripts/{B703cBe72.chunk.js → D8g6nOG92.chunk.js} +2 -2
  56. package/dist/scripts/{B703cBe72.chunk.js.map → D8g6nOG92.chunk.js.map} +1 -1
  57. package/dist/scripts/{CCoZQmgX.chunk.js → DCKKwz9L.chunk.js} +2 -2
  58. package/dist/scripts/{CCoZQmgX.chunk.js.map → DCKKwz9L.chunk.js.map} +1 -1
  59. package/dist/scripts/{DIavEegC.chunk.js → DL4UFxRK.chunk.js} +2 -2
  60. package/dist/scripts/{DIavEegC.chunk.js.map → DL4UFxRK.chunk.js.map} +1 -1
  61. package/dist/scripts/{C5i1HsPp2.chunk.js → DLofRa642.chunk.js} +2 -2
  62. package/dist/scripts/{C5i1HsPp2.chunk.js.map → DLofRa642.chunk.js.map} +1 -1
  63. package/dist/scripts/{B5jBIPaP.chunk.js → DMZ--ok1.chunk.js} +2 -2
  64. package/dist/scripts/{B5jBIPaP.chunk.js.map → DMZ--ok1.chunk.js.map} +1 -1
  65. package/dist/scripts/{CUUUI6pl.chunk.js → DQFcbMMk.chunk.js} +2 -2
  66. package/dist/scripts/{CUUUI6pl.chunk.js.map → DQFcbMMk.chunk.js.map} +1 -1
  67. package/dist/scripts/{Dj4AeYQQ2.chunk.js → DVeqPzBe2.chunk.js} +2 -2
  68. package/dist/scripts/{Dj4AeYQQ2.chunk.js.map → DVeqPzBe2.chunk.js.map} +1 -1
  69. package/dist/scripts/{CGxa1Jzq.chunk.js → DWerltCT.chunk.js} +2 -2
  70. package/dist/scripts/{CGxa1Jzq.chunk.js.map → DWerltCT.chunk.js.map} +1 -1
  71. package/dist/scripts/{CbLL7dIz2.chunk.js → DatscYpA2.chunk.js} +2 -2
  72. package/dist/scripts/{CbLL7dIz2.chunk.js.map → DatscYpA2.chunk.js.map} +1 -1
  73. package/dist/scripts/{DwzBzBlI2.chunk.js → DkaGC5IU2.chunk.js} +2 -2
  74. package/dist/scripts/{DwzBzBlI2.chunk.js.map → DkaGC5IU2.chunk.js.map} +1 -1
  75. package/dist/scripts/{BLrjbrp8.chunk.js → DqZWSPDJ.chunk.js} +2 -2
  76. package/dist/scripts/{BLrjbrp8.chunk.js.map → DqZWSPDJ.chunk.js.map} +1 -1
  77. package/dist/scripts/{BKnxYKDu2.chunk.js → Dql-1E6g2.chunk.js} +2 -2
  78. package/dist/scripts/{BKnxYKDu2.chunk.js.map → Dql-1E6g2.chunk.js.map} +1 -1
  79. package/dist/scripts/{B7iwtSij.chunk.js → DuBHin02.chunk.js} +2 -2
  80. package/dist/scripts/{B7iwtSij.chunk.js.map → DuBHin02.chunk.js.map} +1 -1
  81. package/dist/scripts/{BpgHKWR52.chunk.js → QMuFwiiF2.chunk.js} +2 -2
  82. package/dist/scripts/{BpgHKWR52.chunk.js.map → QMuFwiiF2.chunk.js.map} +1 -1
  83. package/dist/scripts/{Ces-KTwe.chunk.js → U_sIlzAD.chunk.js} +2 -2
  84. package/dist/scripts/{Ces-KTwe.chunk.js.map → U_sIlzAD.chunk.js.map} +1 -1
  85. package/dist/scripts/{ACTQklJQ.chunk.js → WLyOm9Lj.chunk.js} +2 -2
  86. package/dist/scripts/{ACTQklJQ.chunk.js.map → WLyOm9Lj.chunk.js.map} +1 -1
  87. package/dist/scripts/{DR80oZtZ.chunk.js → Ymq7JLkU.chunk.js} +2 -2
  88. package/dist/scripts/{DR80oZtZ.chunk.js.map → Ymq7JLkU.chunk.js.map} +1 -1
  89. package/dist/scripts/{app-BIigh9wv.js → app-gjHxcZG3.js} +4 -4
  90. package/dist/scripts/app-gjHxcZG3.js.map +1 -0
  91. package/dist/scripts/{CNmmq34f.chunk.js → djRnI462.chunk.js} +2 -2
  92. package/dist/scripts/{CNmmq34f.chunk.js.map → djRnI462.chunk.js.map} +1 -1
  93. package/dist/scripts/{oTYyWWB-.chunk.js → e2K2YU7z.chunk.js} +2 -2
  94. package/dist/scripts/{oTYyWWB-.chunk.js.map → e2K2YU7z.chunk.js.map} +1 -1
  95. package/dist/scripts/{BxypZGPK.chunk.js → fnfhCa1P.chunk.js} +2 -2
  96. package/dist/scripts/{BxypZGPK.chunk.js.map → fnfhCa1P.chunk.js.map} +1 -1
  97. package/dist/scripts/{BsAo7Lri2.chunk.js → iyIL3kim2.chunk.js} +2 -2
  98. package/dist/scripts/{BsAo7Lri2.chunk.js.map → iyIL3kim2.chunk.js.map} +1 -1
  99. package/dist/scripts/{DK3xia1t.chunk.js → kfFYr9dc.chunk.js} +2 -2
  100. package/dist/scripts/{DK3xia1t.chunk.js.map → kfFYr9dc.chunk.js.map} +1 -1
  101. package/dist/scripts/{BXJetawx2.chunk.js → kts5xiiM2.chunk.js} +2 -2
  102. package/dist/scripts/{BXJetawx2.chunk.js.map → kts5xiiM2.chunk.js.map} +1 -1
  103. package/dist/scripts/{tYi-sUb22.chunk.js → lLAYbgAy2.chunk.js} +2 -2
  104. package/dist/scripts/{tYi-sUb22.chunk.js.map → lLAYbgAy2.chunk.js.map} +1 -1
  105. package/dist/scripts/{BCBfXCYM2.chunk.js → p9ukva5a2.chunk.js} +2 -2
  106. package/dist/scripts/{BCBfXCYM2.chunk.js.map → p9ukva5a2.chunk.js.map} +1 -1
  107. package/dist/scripts/{DKnZ8BaN.chunk.js → wOeN2ls0.chunk.js} +2 -2
  108. package/dist/scripts/{DKnZ8BaN.chunk.js.map → wOeN2ls0.chunk.js.map} +1 -1
  109. package/dist/scripts/{DU1SE31v2.chunk.js → zp2BHOp82.chunk.js} +2 -2
  110. package/dist/scripts/{DU1SE31v2.chunk.js.map → zp2BHOp82.chunk.js.map} +1 -1
  111. package/dist/scripts/{DnSy_Myx.chunk.js → zyVwH8JF.chunk.js} +2 -2
  112. package/dist/scripts/{DnSy_Myx.chunk.js.map → zyVwH8JF.chunk.js.map} +1 -1
  113. package/package.json +1 -1
  114. package/dist/scripts/C4MLxDS-.chunk.js +0 -1
  115. package/dist/scripts/app-BIigh9wv.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"B703cBe72.chunk.js","names":[],"sources":["../../../../../node_modules/spark-md5/spark-md5.js","../../../../libs/shared/src/apps/sign-up/helpers/BrazeHelper.ts","../../../../libs/shared/src/flight-requests/BrazeRequests.ts","../../../../libs/shared/src/hooks/UseProfileApiClient.ts","../../src/shared/enums/BrazeConversion.ts","../../src/shared/enums/BrazeSource.ts","../../../../libs/shared/src/hooks/useBrazeClientService.ts","../../src/shared/hooks/useStreamableBrazeClientService.ts","../../../../libs/shared/src/apps/sign-up/utils/getJobTitles.ts","../../../../libs/shared/src/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput.tsx","../../../../libs/shared/src/images/components/CloseIcon.tsx","../../../../libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.module.scss","../../../../libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","../../../../../node_modules/@googlemaps/js-api-loader/dist/index.esm.js","../../../../libs/shared/src/apps/sign-up/hooks/useGoogleApi.tsx","../../../../libs/shared/src/apps/sign-up/hooks/useAutoCompleteService.ts","../../../../libs/shared/src/apps/sign-up/hooks/useCountryPlaceholder.tsx","../../../../libs/shared/src/apps/sign-up/hooks/useDropdownEvents.tsx","../../../../libs/shared/src/apps/sign-up/helpers/PlaceHelper.ts","../../../../libs/shared/src/apps/sign-up/hooks/useGeocoder.tsx","../../../../libs/shared/src/apps/sign-up/hooks/useLocalitySearch.tsx","../../../../libs/shared/src/images/components/CrosshairIcon.tsx","../../../../libs/shared/src/apps/sign-up/components/steps/search-school-step-item/search-school-step-item.module.scss","../../../../libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput.tsx","../../../../libs/shared/src/apps/sign-up/errors/ApiError.ts","../../../../libs/shared/src/apps/sign-up/helpers/UrlHelper.ts","../../../../libs/shared/src/apps/sign-up/helpers/FetchHelper.ts","../../../../libs/shared/src/apps/sign-up/fetch-requests/ProspectRequests.ts","../../../../libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput.tsx"],"sourcesContent":["(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} [raw] True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n","import SparkMD5 from 'spark-md5';\n\nimport type { HashObject } from 'libs/analytics/interfaces';\n\ninterface SchoolTypeInfo {\n label: string;\n isTertiary: boolean;\n}\n\nconst SCHOOL_TYPE_MAP: Record<string, SchoolTypeInfo> = {\n 'secondary': {\n label: 'Secondary',\n isTertiary: false\n },\n 'primary & secondary': {\n label: 'Primary & Secondary',\n isTertiary: false\n },\n 'k12': {\n label: 'Primary & Secondary',\n isTertiary: false\n },\n 'primary': {\n label: 'Primary',\n isTertiary: false\n },\n 'special': {\n label: 'Special',\n isTertiary: false\n },\n 'university': {\n label: 'University',\n isTertiary: true\n },\n 'middle': {\n label: 'Middle',\n isTertiary: false\n },\n 'fe college': {\n label: 'FE College',\n isTertiary: true\n },\n 'high school': {\n label: 'Secondary',\n isTertiary: false\n },\n 'elementary': {\n label: 'Primary',\n isTertiary: false\n },\n 'middle school': {\n label: 'Middle',\n isTertiary: false\n },\n 'tafe': {\n label: 'TAFE',\n isTertiary: true\n },\n 'college': {\n label: 'FE College',\n isTertiary: true\n },\n 'sixth form college': {\n label: 'Sixth Form College',\n isTertiary: true\n }\n};\n\nconst PROVINCE_ISO_MAP: HashObject<string> = {\n 'england': 'ENG',\n 'scotland': 'SCT',\n 'wales': 'WLS',\n 'northern ireland': 'NIR'\n};\n\nexport interface BrazeCheckEmailResponse {\n invalidUserIds: string[];\n message: string;\n users: HashObject[];\n}\n\nexport const BrazeHelper = {\n\n hashedEmail(email: string) {\n const normalizedEmail = email.trim().toLowerCase();\n return SparkMD5.hash(normalizedEmail);\n },\n\n removeEmptyKeys(object: HashObject<any>): HashObject<any> {\n if (Array.isArray(object))\n return object;\n\n const payload = { ...object };\n return Object.entries(payload)\n .filter(([ , v ]) => {\n if (v === undefined || v === null) {\n return false;\n }\n if (typeof v === 'string' && !v.length) {\n return false;\n }\n return true;\n })\n .reduce(\n (acc, [ k, v ]) => ({ ...acc, [k]: v === Object(v) ? BrazeHelper.removeEmptyKeys(v) : v }),\n {}\n );\n },\n\n Conversions: {\n TRIAL_UPGRADE_REQUEST: 'Request - Trial Upgrade',\n FREE_TRIAL_REQUEST: 'Request - Free Trial',\n OLYMPICS_SPECIAL_OFFER_REQUEST: 'Request - Olympics Special Offer'\n },\n\n Sources: {\n CV_PRODUCT_TRIAL_REQUESTED: 'cv_product_trial_requested',\n CV_PRODUCT_BDM_TRIAL_REQUESTED: 'cv_product_bdm_trial_requested',\n CV_PRODUCT_TRIAL_UPGRADE_REQUESTED: 'cv_product_trial_upgrade_requested'\n },\n\n getSchoolType(schoolType: string): string {\n if (!schoolType) return;\n\n const prospectType = schoolType.toLowerCase();\n\n if ([ 'unknown', 'other' ].includes(prospectType)) return;\n \n const mappedSchoolType = SCHOOL_TYPE_MAP[prospectType]?.label;\n if (mappedSchoolType)\n return mappedSchoolType;\n \n return schoolType;\n },\n\n isTertiarySchool(schoolType: string): boolean {\n return SCHOOL_TYPE_MAP[schoolType?.toLowerCase()]?.isTertiary || false;\n },\n\n parseProvince(province?: string): string {\n if (!province.length) return '';\n\n const mappedProvince = PROVINCE_ISO_MAP[province.toLowerCase()];\n return mappedProvince || province;\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nexport const BrazeRequests = {\n checkEmail(email: string): Flight.Request {\n return {\n url: '/api/braze/check-email',\n key: `braze:check:email:${email}`,\n type: HttpVerbs.POST,\n data: {\n email\n }\n };\n },\n\n prospectLookups(prospectId: string): Flight.Request {\n return {\n url: `{gateway}/v1/prospects/${prospectId}/lookups`,\n key: `prospect:lookup:${prospectId}`\n };\n }\n};\n","import { useInstance } from 'libs/common/react/hooks/UseInstance';\n\nimport { ProfileApiClient } from 'libs/analytics/clients/ProfileApiClient';\nimport { Services } from 'libs/analytics/constants/Services';\n\nexport function useProfileApiClient() {\n const profileApiClient = useInstance<ProfileApiClient>(Services.ProfileApiClient);\n\n return {\n createOrUpdateProfile: profileApiClient.createOrUpdate\n };\n}\n","export enum BrazeConversion {\n ContactUs = 'Contact - Contact Us',\n LivestreamBooking = 'Submit - Livestream Booking'\n}\n","export enum BrazeSource {\n LivestreamBooking = 'sl_product_livestream',\n ContactUs = 'sl_marketing_form_contact_us'\n}\n","import { type BrazeUser, type FormEventType } from '@clickview/braze-client';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { BrazeClientService } from 'libs/shared/services/BrazeClientService';\n\ninterface HydrateUserDataOptions {\n conversion: string;\n source: string;\n}\n\nfunction hydrateUserData(user: BrazeUser, data: HydrateUserDataOptions): BrazeUser {\n return {\n ...user,\n custom: {\n ...user?.custom,\n source: data.source\n },\n event: {\n ...user?.event,\n conversion: data.conversion\n }\n };\n}\n\nexport interface LogFormSubmissionOptions<TConversion extends string, TSource extends string> {\n conversion: TConversion;\n source: TSource;\n eventType: FormEventType;\n user: BrazeUser;\n productType: 'cv' | 'sl';\n additionalData?: Record<string, any>;\n callback?: (success: boolean) => void;\n}\n\nexport function useBrazeClientService<TConversion extends string, TSource extends string>() {\n const braze = useInstanceSafe<BrazeClientService>(SharedServices.BrazeClient);\n\n function logFormSubmission({\n user,\n additionalData,\n source,\n eventType,\n conversion,\n productType,\n callback\n }: LogFormSubmissionOptions<TConversion, TSource>) {\n const brazeUser = hydrateUserData(user, {\n source,\n conversion\n });\n\n braze.setUserInit(brazeUser);\n \n braze.logFormEvent({\n eventType,\n additionalData,\n callback,\n internalOptions: {\n subscriptionGroups: productType\n }\n });\n }\n\n return {\n client: braze,\n logFormSubmission\n };\n}\n","import { useBrazeClientService } from 'libs/shared/hooks/useBrazeClientService';\n\nimport { BrazeConversion } from 'shared/enums/BrazeConversion';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\n\nexport function useStreamableBrazeClientService() {\n const braze = useBrazeClientService<BrazeConversion, BrazeSource>();\n\n return braze;\n}\n","import { AuK12JobTitles, AuTertiaryJobTitles, CaK12JobTitles, JobTitles, NzK12JobTitles, UkK12JobTitles, UkTertiaryJobTitles, UsK12JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst AU_K12_JOB_TITLES: AuK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Curriculum Coordinator',\n 'Digital Technology Coordinator',\n 'SSO / SLSO',\n 'IT',\n 'Head of Department',\n 'Head of Subject',\n 'Assistant Principal',\n 'Deputy Principal',\n 'Principal',\n 'Business Manager'\n];\n\nconst UK_K12_JOB_TITLES: UkK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'IT/LRC',\n 'e-Learning/ICT Coordinator',\n 'Head of Key Stage',\n 'Head of Department',\n 'Subject Lead',\n 'Assistant Head Teacher',\n 'Deputy Head Teacher',\n 'Head Teacher'\n];\n\nconst US_K12_JOB_TITLES: UsK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Head of Department',\n 'Instructional Technology Specialist',\n 'Curriculum Coordinator',\n 'School Leadership',\n 'District Leadership',\n 'Academic Coach',\n 'Principal',\n 'IT / IT Specialist'\n];\n\nconst NZ_K12_JOB_TITLES: NzK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Curriculum Leader',\n 'e-Learning Coordinator',\n 'IT',\n 'Head of Department',\n 'Head of Faculty',\n 'Learning Support',\n 'Learning Assistant',\n 'Deputy Principal',\n 'Assistant Principal',\n 'Principal'\n];\n\nconst CA_K12_JOB_TITLES: CaK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Educational Assistant (EA)',\n 'Learning Support Teacher / Resource Teacher',\n 'Department Head / Manager',\n 'Curriculum Coordinator / Consultant',\n 'School Counsellor / Guidance Counsellor',\n 'Vice-Principal',\n 'Principal',\n 'Superintendent',\n 'Director of Education'\n];\n\nconst AU_TERTIARY_JOB_TITLES: AuTertiaryJobTitles[] = [\n 'Professor',\n 'Lecturer',\n 'Course Coordinator / Administrator',\n 'Digital Learning Manager',\n 'Tutor',\n 'Teaching Fellow',\n 'Librarian',\n 'Learning Technologist',\n 'Teaching Assistant',\n 'Researcher',\n 'IT'\n];\n\nconst UK_TERTIARY_JOB_TITLES: UkTertiaryJobTitles[] = [\n 'Professor',\n 'Lecturer',\n 'Course Coordinator / Administrator',\n 'Digital Learning Manager',\n 'Tutor',\n 'Teaching Fellow',\n 'Librarian',\n 'Learning Technologist',\n 'Teacher',\n 'Teaching Assistant',\n 'Researcher',\n 'IT'\n];\n\nconst K12_JOB_TITLES: Record<string, JobTitles[]> = {\n [CountryCode.AU]: AU_K12_JOB_TITLES,\n [CountryCode.NZ]: NZ_K12_JOB_TITLES,\n [CountryCode.UK]: UK_K12_JOB_TITLES,\n [CountryCode.US]: US_K12_JOB_TITLES,\n [CountryCode.CA]: CA_K12_JOB_TITLES\n};\n\nconst TERTIARY_JOB_TITLES: Record<string, JobTitles[]> = {\n [CountryCode.AU]: AU_TERTIARY_JOB_TITLES,\n [CountryCode.UK]: UK_TERTIARY_JOB_TITLES\n};\n\ntype Options = {\n countryCode: CountryCode,\n isTertiary: boolean\n};\n\nexport function getJobTitles(options: Options): JobTitles[] {\n const key = options.countryCode?.toLowerCase();\n\n if (options.isTertiary)\n return TERTIARY_JOB_TITLES[key] || AU_TERTIARY_JOB_TITLES; // Default to AU Tertiary if not found\n\n return K12_JOB_TITLES[key] || US_K12_JOB_TITLES; // Default to US K12 if not found\n}\n\nexport function isLearnerJobTitle(jobTitle: string): boolean {\n return jobTitle?.toLowerCase().includes('student') ||\n jobTitle?.toLowerCase().includes('parent');\n}\n","import React from 'react';\n\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { getJobTitles } from 'libs/shared/apps/sign-up/utils/getJobTitles';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst OTHER_VALUE = 'OTHER';\n\nfunction getInitialSelection(initialValue: JobTitles | string, jobTitles: JobTitles[]): JobTitles | '' | typeof OTHER_VALUE {\n if (jobTitles.includes(initialValue as JobTitles))\n return initialValue as JobTitles;\n\n if (initialValue)\n return OTHER_VALUE;\n\n return '';\n}\n\ninterface JobTitleInputProps {\n id: string;\n error: string;\n onChange: (jobTitle: JobTitles | '') => void;\n countryCode: CountryCode;\n placeholder?: string;\n initialValue?: JobTitles | string;\n size?: 'lg';\n labelClassName?: string;\n required?: boolean;\n isTertiary: boolean;\n}\n\nexport function JobTitleInput(props: JobTitleInputProps): JSX.Element {\n const {\n error,\n onChange,\n countryCode,\n isTertiary\n } = props;\n\n const jobTitles = getJobTitles({ countryCode, isTertiary });\n\n const initialSelection = getInitialSelection(props.initialValue, jobTitles);\n\n const [ selection, setSelection ] = React.useState<JobTitles | '' | typeof OTHER_VALUE>(initialSelection);\n const [ other, setOther ] = React.useState(initialSelection === OTHER_VALUE ? props.initialValue : '');\n\n React.useEffect(() => {\n setSelection(getInitialSelection(props.initialValue, jobTitles));\n }, [props.initialValue]);\n\n function onChangeSelection(event: React.ChangeEvent<HTMLSelectElement>): void {\n setSelection(event.target.value as JobTitles);\n setOther('');\n onChange(event.target.value === OTHER_VALUE ? '' : event.target.value as JobTitles);\n }\n\n function onChangeOther(event: React.ChangeEvent<HTMLInputElement>): void {\n setOther(event.target.value);\n onChange(event.target.value as JobTitles);\n }\n\n const showOther = selection === OTHER_VALUE;\n\n return (\n <div className='form-group'>\n <label htmlFor={props.id} className={props.labelClassName}>\n Job title\n {props.required && <span className='text-danger'>*</span>}\n </label>\n <div className='mb-2'>\n <select\n id={props.id}\n name={props.id}\n className={`form-select ${props.size === 'lg' ? 'form-select-lg' : ''} ${selection.length ? 'text-dark' : 'text-secondary'} ${!!error && 'is-invalid'}`}\n value={selection}\n placeholder='Role'\n onChange={onChangeSelection}\n >\n <option value='' disabled className='text-secondary'>\n {props.placeholder ? props.placeholder : <>What do you do?</>}\n </option>\n {jobTitles.map((title, key) => <option value={title} className='text-dark' key={key}>{title}</option>)}\n <option value={OTHER_VALUE} className='text-dark'>Other</option>\n </select>\n {!!error && !showOther && <FormFeedback name={props.id}>{error}</FormFeedback>}\n </div>\n {showOther &&\n <div className='mb-3'>\n <input\n className={`form-control ${props.size === 'lg' ? 'form-select-lg' : ''} ${!!error && 'is-invalid'}`}\n type='text'\n value={other}\n placeholder='What do you do?'\n autoFocus\n onChange={onChangeOther}\n />\n {!!error && <FormFeedback name={props.id}>{error}</FormFeedback>}\n </div>\n }\n </div>\n );\n}\n","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}\n",":local {\n .clearInput {\n top: 50%;\n right: $cv-svg-size-md * 0.5;\n width: $cv-svg-size-md;\n height: $cv-svg-size-md;\n margin-top: -$cv-svg-size-md * 0.5;\n }\n\n .clearableInput {\n padding-right: $input-padding-x-lg + $cv-svg-size-md;\n }\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.module.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n clearClassName?: string;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, clearClassName, ...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 ${clearClassName || ''}`}\n role='button'\n onClick={onClickClear}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClickClear()}\n tabIndex={0}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\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}\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}\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 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}\n","import React from 'react';\n\ninterface UseDropdownEventsOptions {\n onSelected: (index: number) => void;\n itemCount: number;\n hideOnBlur: boolean;\n hideInitially?: boolean;\n hideOnEnter?: boolean;\n}\n\nexport function useDropdownEvents(options: UseDropdownEventsOptions) {\n const [ selectedIndex, setSelectedIndex ] = React.useState<number>(0);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [ hide, setHide ] = React.useState(!!options.hideInitially);\n\n // eslint-disable-next-line rulesdir/require-view-title\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 (options.hideOnEnter)\n setHide(false);\n\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\n if (options.hideOnEnter)\n setHide(true);\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}\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};\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}\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}\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}\n",":local {\n .baseText {\n font-size: 1rem;\n }\n\n .dropdown {\n margin-top: 10px;\n }\n\n .suggestionContainer {\n border: $input-border-width solid $input-border-color;\n border-radius: $input-border-radius;\n overflow: hidden;\n background: $white;\n }\n\n .suggestionContainerInner {\n max-height: 16rem; // (256px)\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .suggestionItem, .suggestionLoading, .noSuggestion {\n padding: $input-padding-y $input-padding-x;\n font-size: $input-font-size;\n }\n\n .large {\n .suggestionItem, .suggestionLoading, .noSuggestion {\n padding: $input-padding-y-lg $input-padding-x-lg;\n font-size: $input-font-size-lg;\n }\n\n .suggestionContainer {\n border-radius: $input-border-radius-lg;\n }\n }\n\n .suggestionItem {\n transition: all 0.3s;\n\n &:hover, &:focus, &.selected {\n background-color: $gray-100;\n cursor: pointer;\n }\n }\n\n .useMyLocation {\n margin-top: 1px;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\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.module.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>(null);\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 ?? 0) + extraItem, 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 return baseClass;\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 ZIP code or city\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}>\n <div className={styles.suggestionContainerInner} ref={containerRef}>\n <LocalityPredicitions\n predictions={localityPredicitions}\n getPlaceInfo={handleGetPlaceInfo}\n selectedIndex={selectedIndex}\n />\n {window.navigator.geolocation && props.useGeoLocationApi &&\n <DivButton\n className={classNames(\n styles.suggestionItem,\n 'px-1',\n (selectedIndex - 1 === localityPredicitions.length) ? styles.selected : ''\n )}\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 </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}\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}\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","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};\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};\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.module.scss';\n\n/**\n * Prospect API returns a maximum of 50 results.\n * If exactly 50 schools are found, we display a message suggesting users refine their search,\n * as more results may be available. - Sha\n */\nconst PROSPECT_SEARCH_LIMIT = 50;\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\n className={`info-link ${styles.suggestionItem} ${styles.noSuggestion} ${props.selected ? styles.selected : ''}`}\n onKeyDown={e => e.key === 'Enter' && props.handleNoSuggestion()}\n onMouseDown={props.handleNoSuggestion}\n onClick={props.handleNoSuggestion}\n >\n Can't find your school?\n </div>\n );\n}\n\nexport function SearchSchoolInput(props: SearchSchoolInputProps): JSX.Element {\n const inputRef = React.useRef<HTMLInputElement>(null);\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 ?? 0) + 1, 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 < PROSPECT_SEARCH_LIMIT;\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 const showSuggestionsContainer = (showSuggestions || isLoading || showCantFindSchool) && !props.disabled && !hide;\n\n const showNarrowResults = !isLoading && !showCantFindSchool && schoolsList?.length >= PROSPECT_SEARCH_LIMIT;\n\n let inputClassName = 'form-control';\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 || 'Search for your school'}\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' : ''}`}>\n <div className={styles.suggestionContainerInner} 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 {showNarrowResults && (\n <>\n <hr className='my-0' />\n <div className={`${styles.suggestionItem} ${styles.noSuggestion} text-secondary text-center`}>\n <small>Can't find your school? <br /> Try searching to narrow the results</small>\n </div>\n </>\n )}\n {\n !isLoading && showCantFindSchool && (\n <CantFindSchool\n selected={selectedIndex === schoolsList.length + 1}\n handleNoSuggestion={() => {\n props.onClickNoSuggestions(name);\n }}\n />\n )\n }\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"x_google_ignoreList":[0,13],"mappings":"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"}
1
+ {"version":3,"file":"D8g6nOG92.chunk.js","names":[],"sources":["../../../../../node_modules/spark-md5/spark-md5.js","../../../../libs/shared/src/apps/sign-up/helpers/BrazeHelper.ts","../../../../libs/shared/src/flight-requests/BrazeRequests.ts","../../../../libs/shared/src/hooks/UseProfileApiClient.ts","../../src/shared/enums/BrazeConversion.ts","../../src/shared/enums/BrazeSource.ts","../../../../libs/shared/src/hooks/useBrazeClientService.ts","../../src/shared/hooks/useStreamableBrazeClientService.ts","../../../../libs/shared/src/apps/sign-up/utils/getJobTitles.ts","../../../../libs/shared/src/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput.tsx","../../../../libs/shared/src/images/components/CloseIcon.tsx","../../../../libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.module.scss","../../../../libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","../../../../../node_modules/@googlemaps/js-api-loader/dist/index.esm.js","../../../../libs/shared/src/apps/sign-up/hooks/useGoogleApi.tsx","../../../../libs/shared/src/apps/sign-up/hooks/useAutoCompleteService.ts","../../../../libs/shared/src/apps/sign-up/hooks/useCountryPlaceholder.tsx","../../../../libs/shared/src/apps/sign-up/hooks/useDropdownEvents.tsx","../../../../libs/shared/src/apps/sign-up/helpers/PlaceHelper.ts","../../../../libs/shared/src/apps/sign-up/hooks/useGeocoder.tsx","../../../../libs/shared/src/apps/sign-up/hooks/useLocalitySearch.tsx","../../../../libs/shared/src/images/components/CrosshairIcon.tsx","../../../../libs/shared/src/apps/sign-up/components/steps/search-school-step-item/search-school-step-item.module.scss","../../../../libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput.tsx","../../../../libs/shared/src/apps/sign-up/errors/ApiError.ts","../../../../libs/shared/src/apps/sign-up/helpers/UrlHelper.ts","../../../../libs/shared/src/apps/sign-up/helpers/FetchHelper.ts","../../../../libs/shared/src/apps/sign-up/fetch-requests/ProspectRequests.ts","../../../../libs/shared/src/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput.tsx"],"sourcesContent":["(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} [raw] True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n","import SparkMD5 from 'spark-md5';\n\nimport type { HashObject } from 'libs/analytics/interfaces';\n\ninterface SchoolTypeInfo {\n label: string;\n isTertiary: boolean;\n}\n\nconst SCHOOL_TYPE_MAP: Record<string, SchoolTypeInfo> = {\n 'secondary': {\n label: 'Secondary',\n isTertiary: false\n },\n 'primary & secondary': {\n label: 'Primary & Secondary',\n isTertiary: false\n },\n 'k12': {\n label: 'Primary & Secondary',\n isTertiary: false\n },\n 'primary': {\n label: 'Primary',\n isTertiary: false\n },\n 'special': {\n label: 'Special',\n isTertiary: false\n },\n 'university': {\n label: 'University',\n isTertiary: true\n },\n 'middle': {\n label: 'Middle',\n isTertiary: false\n },\n 'fe college': {\n label: 'FE College',\n isTertiary: true\n },\n 'high school': {\n label: 'Secondary',\n isTertiary: false\n },\n 'elementary': {\n label: 'Primary',\n isTertiary: false\n },\n 'middle school': {\n label: 'Middle',\n isTertiary: false\n },\n 'tafe': {\n label: 'TAFE',\n isTertiary: true\n },\n 'college': {\n label: 'FE College',\n isTertiary: true\n },\n 'sixth form college': {\n label: 'Sixth Form College',\n isTertiary: true\n }\n};\n\nconst PROVINCE_ISO_MAP: HashObject<string> = {\n 'england': 'ENG',\n 'scotland': 'SCT',\n 'wales': 'WLS',\n 'northern ireland': 'NIR'\n};\n\nexport interface BrazeCheckEmailResponse {\n invalidUserIds: string[];\n message: string;\n users: HashObject[];\n}\n\nexport const BrazeHelper = {\n\n hashedEmail(email: string) {\n const normalizedEmail = email.trim().toLowerCase();\n return SparkMD5.hash(normalizedEmail);\n },\n\n removeEmptyKeys(object: HashObject<any>): HashObject<any> {\n if (Array.isArray(object))\n return object;\n\n const payload = { ...object };\n return Object.entries(payload)\n .filter(([ , v ]) => {\n if (v === undefined || v === null) {\n return false;\n }\n if (typeof v === 'string' && !v.length) {\n return false;\n }\n return true;\n })\n .reduce(\n (acc, [ k, v ]) => ({ ...acc, [k]: v === Object(v) ? BrazeHelper.removeEmptyKeys(v) : v }),\n {}\n );\n },\n\n Conversions: {\n TRIAL_UPGRADE_REQUEST: 'Request - Trial Upgrade',\n FREE_TRIAL_REQUEST: 'Request - Free Trial',\n OLYMPICS_SPECIAL_OFFER_REQUEST: 'Request - Olympics Special Offer'\n },\n\n Sources: {\n CV_PRODUCT_TRIAL_REQUESTED: 'cv_product_trial_requested',\n CV_PRODUCT_BDM_TRIAL_REQUESTED: 'cv_product_bdm_trial_requested',\n CV_PRODUCT_TRIAL_UPGRADE_REQUESTED: 'cv_product_trial_upgrade_requested'\n },\n\n getSchoolType(schoolType: string): string {\n if (!schoolType) return;\n\n const prospectType = schoolType.toLowerCase();\n\n if ([ 'unknown', 'other' ].includes(prospectType)) return;\n \n const mappedSchoolType = SCHOOL_TYPE_MAP[prospectType]?.label;\n if (mappedSchoolType)\n return mappedSchoolType;\n \n return schoolType;\n },\n\n isTertiarySchool(schoolType: string): boolean {\n return SCHOOL_TYPE_MAP[schoolType?.toLowerCase()]?.isTertiary || false;\n },\n\n parseProvince(province?: string): string {\n if (!province.length) return '';\n\n const mappedProvince = PROVINCE_ISO_MAP[province.toLowerCase()];\n return mappedProvince || province;\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nexport const BrazeRequests = {\n checkEmail(email: string): Flight.Request {\n return {\n url: '/api/braze/check-email',\n key: `braze:check:email:${email}`,\n type: HttpVerbs.POST,\n data: {\n email\n }\n };\n },\n\n prospectLookups(prospectId: string): Flight.Request {\n return {\n url: `{gateway}/v1/prospects/${prospectId}/lookups`,\n key: `prospect:lookup:${prospectId}`\n };\n }\n};\n","import { useInstance } from 'libs/common/react/hooks/UseInstance';\n\nimport { ProfileApiClient } from 'libs/analytics/clients/ProfileApiClient';\nimport { Services } from 'libs/analytics/constants/Services';\n\nexport function useProfileApiClient() {\n const profileApiClient = useInstance<ProfileApiClient>(Services.ProfileApiClient);\n\n return {\n createOrUpdateProfile: profileApiClient.createOrUpdate\n };\n}\n","export enum BrazeConversion {\n ContactUs = 'Contact - Contact Us',\n LivestreamBooking = 'Submit - Livestream Booking'\n}\n","export enum BrazeSource {\n LivestreamBooking = 'sl_product_livestream',\n ContactUs = 'sl_marketing_form_contact_us'\n}\n","import { type BrazeUser, type FormEventType } from '@clickview/braze-client';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { BrazeClientService } from 'libs/shared/services/BrazeClientService';\n\ninterface HydrateUserDataOptions {\n conversion: string;\n source: string;\n}\n\nfunction hydrateUserData(user: BrazeUser, data: HydrateUserDataOptions): BrazeUser {\n return {\n ...user,\n custom: {\n ...user?.custom,\n source: data.source\n },\n event: {\n ...user?.event,\n conversion: data.conversion\n }\n };\n}\n\nexport interface LogFormSubmissionOptions<TConversion extends string, TSource extends string> {\n conversion: TConversion;\n source: TSource;\n eventType: FormEventType;\n user: BrazeUser;\n productType: 'cv' | 'sl';\n additionalData?: Record<string, any>;\n callback?: (success: boolean) => void;\n}\n\nexport function useBrazeClientService<TConversion extends string, TSource extends string>() {\n const braze = useInstanceSafe<BrazeClientService>(SharedServices.BrazeClient);\n\n function logFormSubmission({\n user,\n additionalData,\n source,\n eventType,\n conversion,\n productType,\n callback\n }: LogFormSubmissionOptions<TConversion, TSource>) {\n const brazeUser = hydrateUserData(user, {\n source,\n conversion\n });\n\n braze.setUserInit(brazeUser);\n \n braze.logFormEvent({\n eventType,\n additionalData,\n callback,\n internalOptions: {\n subscriptionGroups: productType\n }\n });\n }\n\n return {\n client: braze,\n logFormSubmission\n };\n}\n","import { useBrazeClientService } from 'libs/shared/hooks/useBrazeClientService';\n\nimport { BrazeConversion } from 'shared/enums/BrazeConversion';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\n\nexport function useStreamableBrazeClientService() {\n const braze = useBrazeClientService<BrazeConversion, BrazeSource>();\n\n return braze;\n}\n","import { AuK12JobTitles, AuTertiaryJobTitles, CaK12JobTitles, JobTitles, NzK12JobTitles, UkK12JobTitles, UkTertiaryJobTitles, UsK12JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst AU_K12_JOB_TITLES: AuK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Curriculum Coordinator',\n 'Digital Technology Coordinator',\n 'SSO / SLSO',\n 'IT',\n 'Head of Department',\n 'Head of Subject',\n 'Assistant Principal',\n 'Deputy Principal',\n 'Principal',\n 'Business Manager'\n];\n\nconst UK_K12_JOB_TITLES: UkK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'IT/LRC',\n 'e-Learning/ICT Coordinator',\n 'Head of Key Stage',\n 'Head of Department',\n 'Subject Lead',\n 'Assistant Head Teacher',\n 'Deputy Head Teacher',\n 'Head Teacher'\n];\n\nconst US_K12_JOB_TITLES: UsK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Head of Department',\n 'Instructional Technology Specialist',\n 'Curriculum Coordinator',\n 'School Leadership',\n 'District Leadership',\n 'Academic Coach',\n 'Principal',\n 'IT / IT Specialist'\n];\n\nconst NZ_K12_JOB_TITLES: NzK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Curriculum Leader',\n 'e-Learning Coordinator',\n 'IT',\n 'Head of Department',\n 'Head of Faculty',\n 'Learning Support',\n 'Learning Assistant',\n 'Deputy Principal',\n 'Assistant Principal',\n 'Principal'\n];\n\nconst CA_K12_JOB_TITLES: CaK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Educational Assistant (EA)',\n 'Learning Support Teacher / Resource Teacher',\n 'Department Head / Manager',\n 'Curriculum Coordinator / Consultant',\n 'School Counsellor / Guidance Counsellor',\n 'Vice-Principal',\n 'Principal',\n 'Superintendent',\n 'Director of Education'\n];\n\nconst AU_TERTIARY_JOB_TITLES: AuTertiaryJobTitles[] = [\n 'Professor',\n 'Lecturer',\n 'Course Coordinator / Administrator',\n 'Digital Learning Manager',\n 'Tutor',\n 'Teaching Fellow',\n 'Librarian',\n 'Learning Technologist',\n 'Teaching Assistant',\n 'Researcher',\n 'IT'\n];\n\nconst UK_TERTIARY_JOB_TITLES: UkTertiaryJobTitles[] = [\n 'Professor',\n 'Lecturer',\n 'Course Coordinator / Administrator',\n 'Digital Learning Manager',\n 'Tutor',\n 'Teaching Fellow',\n 'Librarian',\n 'Learning Technologist',\n 'Teacher',\n 'Teaching Assistant',\n 'Researcher',\n 'IT'\n];\n\nconst K12_JOB_TITLES: Record<string, JobTitles[]> = {\n [CountryCode.AU]: AU_K12_JOB_TITLES,\n [CountryCode.NZ]: NZ_K12_JOB_TITLES,\n [CountryCode.UK]: UK_K12_JOB_TITLES,\n [CountryCode.US]: US_K12_JOB_TITLES,\n [CountryCode.CA]: CA_K12_JOB_TITLES\n};\n\nconst TERTIARY_JOB_TITLES: Record<string, JobTitles[]> = {\n [CountryCode.AU]: AU_TERTIARY_JOB_TITLES,\n [CountryCode.UK]: UK_TERTIARY_JOB_TITLES\n};\n\ntype Options = {\n countryCode: CountryCode,\n isTertiary: boolean\n};\n\nexport function getJobTitles(options: Options): JobTitles[] {\n const key = options.countryCode?.toLowerCase();\n\n if (options.isTertiary)\n return TERTIARY_JOB_TITLES[key] || AU_TERTIARY_JOB_TITLES; // Default to AU Tertiary if not found\n\n return K12_JOB_TITLES[key] || US_K12_JOB_TITLES; // Default to US K12 if not found\n}\n\nexport function isLearnerJobTitle(jobTitle: string): boolean {\n return jobTitle?.toLowerCase().includes('student') ||\n jobTitle?.toLowerCase().includes('parent');\n}\n","import React from 'react';\n\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { getJobTitles } from 'libs/shared/apps/sign-up/utils/getJobTitles';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst OTHER_VALUE = 'OTHER';\n\nfunction getInitialSelection(initialValue: JobTitles | string, jobTitles: JobTitles[]): JobTitles | '' | typeof OTHER_VALUE {\n if (jobTitles.includes(initialValue as JobTitles))\n return initialValue as JobTitles;\n\n if (initialValue)\n return OTHER_VALUE;\n\n return '';\n}\n\ninterface JobTitleInputProps {\n id: string;\n error: string;\n onChange: (jobTitle: JobTitles | '') => void;\n countryCode: CountryCode;\n placeholder?: string;\n initialValue?: JobTitles | string;\n size?: 'lg';\n labelClassName?: string;\n required?: boolean;\n isTertiary: boolean;\n}\n\nexport function JobTitleInput(props: JobTitleInputProps): JSX.Element {\n const {\n error,\n onChange,\n countryCode,\n isTertiary\n } = props;\n\n const jobTitles = getJobTitles({ countryCode, isTertiary });\n\n const initialSelection = getInitialSelection(props.initialValue, jobTitles);\n\n const [ selection, setSelection ] = React.useState<JobTitles | '' | typeof OTHER_VALUE>(initialSelection);\n const [ other, setOther ] = React.useState(initialSelection === OTHER_VALUE ? props.initialValue : '');\n\n React.useEffect(() => {\n setSelection(getInitialSelection(props.initialValue, jobTitles));\n }, [props.initialValue]);\n\n function onChangeSelection(event: React.ChangeEvent<HTMLSelectElement>): void {\n setSelection(event.target.value as JobTitles);\n setOther('');\n onChange(event.target.value === OTHER_VALUE ? '' : event.target.value as JobTitles);\n }\n\n function onChangeOther(event: React.ChangeEvent<HTMLInputElement>): void {\n setOther(event.target.value);\n onChange(event.target.value as JobTitles);\n }\n\n const showOther = selection === OTHER_VALUE;\n\n return (\n <div className='form-group'>\n <label htmlFor={props.id} className={props.labelClassName}>\n Job title\n {props.required && <span className='text-danger'>*</span>}\n </label>\n <div className='mb-2'>\n <select\n id={props.id}\n name={props.id}\n className={`form-select ${props.size === 'lg' ? 'form-select-lg' : ''} ${selection.length ? 'text-dark' : 'text-secondary'} ${!!error && 'is-invalid'}`}\n value={selection}\n placeholder='Role'\n onChange={onChangeSelection}\n >\n <option value='' disabled className='text-secondary'>\n {props.placeholder ? props.placeholder : <>What do you do?</>}\n </option>\n {jobTitles.map((title, key) => <option value={title} className='text-dark' key={key}>{title}</option>)}\n <option value={OTHER_VALUE} className='text-dark'>Other</option>\n </select>\n {!!error && !showOther && <FormFeedback name={props.id}>{error}</FormFeedback>}\n </div>\n {showOther &&\n <div className='mb-3'>\n <input\n className={`form-control ${props.size === 'lg' ? 'form-select-lg' : ''} ${!!error && 'is-invalid'}`}\n type='text'\n value={other}\n placeholder='What do you do?'\n autoFocus\n onChange={onChangeOther}\n />\n {!!error && <FormFeedback name={props.id}>{error}</FormFeedback>}\n </div>\n }\n </div>\n );\n}\n","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}\n",":local {\n .clearInput {\n top: 50%;\n right: $cv-svg-size-md * 0.5;\n width: $cv-svg-size-md;\n height: $cv-svg-size-md;\n margin-top: -$cv-svg-size-md * 0.5;\n }\n\n .clearableInput {\n padding-right: $input-padding-x-lg + $cv-svg-size-md;\n }\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.module.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n clearClassName?: string;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, clearClassName, ...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 ${clearClassName || ''}`}\n role='button'\n onClick={onClickClear}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClickClear()}\n tabIndex={0}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\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}\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}\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 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}\n","import React from 'react';\n\ninterface UseDropdownEventsOptions {\n onSelected: (index: number) => void;\n itemCount: number;\n hideOnBlur: boolean;\n hideInitially?: boolean;\n hideOnEnter?: boolean;\n}\n\nexport function useDropdownEvents(options: UseDropdownEventsOptions) {\n const [ selectedIndex, setSelectedIndex ] = React.useState<number>(0);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [ hide, setHide ] = React.useState(!!options.hideInitially);\n\n // eslint-disable-next-line rulesdir/require-view-title\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 (options.hideOnEnter)\n setHide(false);\n\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\n if (options.hideOnEnter)\n setHide(true);\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}\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};\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}\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}\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}\n",":local {\n .baseText {\n font-size: 1rem;\n }\n\n .dropdown {\n margin-top: 10px;\n }\n\n .suggestionContainer {\n border: $input-border-width solid $input-border-color;\n border-radius: $input-border-radius;\n overflow: hidden;\n background: $white;\n }\n\n .suggestionContainerInner {\n max-height: 16rem; // (256px)\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .suggestionItem, .suggestionLoading, .noSuggestion {\n padding: $input-padding-y $input-padding-x;\n font-size: $input-font-size;\n }\n\n .large {\n .suggestionItem, .suggestionLoading, .noSuggestion {\n padding: $input-padding-y-lg $input-padding-x-lg;\n font-size: $input-font-size-lg;\n }\n\n .suggestionContainer {\n border-radius: $input-border-radius-lg;\n }\n }\n\n .suggestionItem {\n transition: all 0.3s;\n\n &:hover, &:focus, &.selected {\n background-color: $gray-100;\n cursor: pointer;\n }\n }\n\n .useMyLocation {\n margin-top: 1px;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\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.module.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>(null);\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 ?? 0) + extraItem, 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 return baseClass;\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 ZIP code or city\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}>\n <div className={styles.suggestionContainerInner} ref={containerRef}>\n <LocalityPredicitions\n predictions={localityPredicitions}\n getPlaceInfo={handleGetPlaceInfo}\n selectedIndex={selectedIndex}\n />\n {window.navigator.geolocation && props.useGeoLocationApi &&\n <DivButton\n className={classNames(\n styles.suggestionItem,\n 'px-1',\n (selectedIndex - 1 === localityPredicitions.length) ? styles.selected : ''\n )}\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 </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}\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}\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","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};\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};\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.module.scss';\n\n/**\n * Prospect API returns a maximum of 50 results.\n * If exactly 50 schools are found, we display a message suggesting users refine their search,\n * as more results may be available. - Sha\n */\nconst PROSPECT_SEARCH_LIMIT = 50;\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\n className={`info-link ${styles.suggestionItem} ${styles.noSuggestion} ${props.selected ? styles.selected : ''}`}\n onKeyDown={e => e.key === 'Enter' && props.handleNoSuggestion()}\n onMouseDown={props.handleNoSuggestion}\n onClick={props.handleNoSuggestion}\n >\n Can't find your school?\n </div>\n );\n}\n\nexport function SearchSchoolInput(props: SearchSchoolInputProps): JSX.Element {\n const inputRef = React.useRef<HTMLInputElement>(null);\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 ?? 0) + 1, 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 < PROSPECT_SEARCH_LIMIT;\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 const showSuggestionsContainer = (showSuggestions || isLoading || showCantFindSchool) && !props.disabled && !hide;\n\n const showNarrowResults = !isLoading && !showCantFindSchool && schoolsList?.length >= PROSPECT_SEARCH_LIMIT;\n\n let inputClassName = 'form-control';\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 || 'Search for your school'}\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' : ''}`}>\n <div className={styles.suggestionContainerInner} 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 {showNarrowResults && (\n <>\n <hr className='my-0' />\n <div className={`${styles.suggestionItem} ${styles.noSuggestion} text-secondary text-center`}>\n <small>Can't find your school? <br /> Try searching to narrow the results</small>\n </div>\n </>\n )}\n {\n !isLoading && showCantFindSchool && (\n <CantFindSchool\n selected={selectedIndex === schoolsList.length + 1}\n handleNoSuggestion={() => {\n props.onClickNoSuggestions(name);\n }}\n />\n )\n }\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"x_google_ignoreList":[0,13],"mappings":"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"}