@abcagency/hc-ui-components 1.0.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 (102) hide show
  1. package/dist/globals.css +3 -0
  2. package/dist/index.js +4644 -0
  3. package/dist/output.css +784 -0
  4. package/dist/services/globals.css +3 -0
  5. package/dist/services/listingService.js +606 -0
  6. package/package.json +38 -0
  7. package/postcss.config.js +15 -0
  8. package/rollup.config.js +67 -0
  9. package/src/apis/hcApi.js +68 -0
  10. package/src/clientToken.js +9 -0
  11. package/src/components/layout/footer.js +34 -0
  12. package/src/components/layout/header.js +23 -0
  13. package/src/components/layout/layout.js +36 -0
  14. package/src/components/modules/accordions/MapAccordionItem.js +69 -0
  15. package/src/components/modules/accordions/default.js +173 -0
  16. package/src/components/modules/accordions/filterItem.js +53 -0
  17. package/src/components/modules/accordions/filters.js +44 -0
  18. package/src/components/modules/animations/slidein.js +41 -0
  19. package/src/components/modules/buttons/button-group-apply.js +75 -0
  20. package/src/components/modules/buttons/commute-pill.js +21 -0
  21. package/src/components/modules/buttons/default.js +196 -0
  22. package/src/components/modules/buttons/items-pill.js +31 -0
  23. package/src/components/modules/buttons/pill-wrapper.js +26 -0
  24. package/src/components/modules/buttons/show-all-button.js +20 -0
  25. package/src/components/modules/cards/default.js +168 -0
  26. package/src/components/modules/cards/filter.js +55 -0
  27. package/src/components/modules/dialogs/apply-dialog.js +47 -0
  28. package/src/components/modules/filter/commute.js +149 -0
  29. package/src/components/modules/filter/index.js +86 -0
  30. package/src/components/modules/filter/item.js +77 -0
  31. package/src/components/modules/filter/location.js +69 -0
  32. package/src/components/modules/filter/points-of-interest.js +43 -0
  33. package/src/components/modules/filter/radio-item.js +51 -0
  34. package/src/components/modules/filter/search.js +89 -0
  35. package/src/components/modules/filter/search.js.rej +9 -0
  36. package/src/components/modules/filter/sort.js +83 -0
  37. package/src/components/modules/form.js +362 -0
  38. package/src/components/modules/grid.js +75 -0
  39. package/src/components/modules/icon.js +33 -0
  40. package/src/components/modules/jobListing/listing-details.js +87 -0
  41. package/src/components/modules/jumbotron.js +81 -0
  42. package/src/components/modules/maps/info-window-card.js +17 -0
  43. package/src/components/modules/maps/info-window-content.js +60 -0
  44. package/src/components/modules/maps/list/field-mapper.js +113 -0
  45. package/src/components/modules/maps/list/header-item.js +90 -0
  46. package/src/components/modules/maps/list/header.js +46 -0
  47. package/src/components/modules/maps/list/index.js +104 -0
  48. package/src/components/modules/maps/list/item-expand-card/index.js +21 -0
  49. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +48 -0
  50. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +67 -0
  51. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -0
  52. package/src/components/modules/maps/list/list-item/index.js +133 -0
  53. package/src/components/modules/maps/map-list.js +73 -0
  54. package/src/components/modules/maps/map-marker.js +84 -0
  55. package/src/components/modules/maps/map.js +218 -0
  56. package/src/components/modules/maps/place-marker.js +41 -0
  57. package/src/components/modules/maps/tabs.js +79 -0
  58. package/src/components/modules/navigation/nav-link.js +65 -0
  59. package/src/components/modules/navigation/navbar.js +109 -0
  60. package/src/components/modules/navigation/skip-link.js +21 -0
  61. package/src/components/modules/navigation/social.js +29 -0
  62. package/src/components/modules/sections/default.js +59 -0
  63. package/src/components/modules/sections/sectionContext.js +4 -0
  64. package/src/components/modules/video-player.js +126 -0
  65. package/src/constants/placeTypes.js +8 -0
  66. package/src/contexts/mapContext.js +116 -0
  67. package/src/contexts/mapListContext.js +212 -0
  68. package/src/contexts/placesContext.js +98 -0
  69. package/src/hooks/useClickOutside.js +16 -0
  70. package/src/hooks/useEventListener.js +25 -0
  71. package/src/hooks/useEventTracker.js +19 -0
  72. package/src/hooks/useList.js +102 -0
  73. package/src/hooks/useRefScrollProgress.js +24 -0
  74. package/src/hooks/useScript.js +63 -0
  75. package/src/hooks/useScrollDirection.js +39 -0
  76. package/src/hooks/useSectionTracker.js +95 -0
  77. package/src/hooks/useUserAgent.js +43 -0
  78. package/src/hooks/useWindowSize.js +28 -0
  79. package/src/index.css +25 -0
  80. package/src/index.js +116 -0
  81. package/src/services/configService.js +16 -0
  82. package/src/services/googlePlacesNearbyService.js +33 -0
  83. package/src/services/listingAggregatorService.js +42 -0
  84. package/src/services/listingEntityService.js +14 -0
  85. package/src/services/listingService.js +28 -0
  86. package/src/services/recruiterService.js +17 -0
  87. package/src/styles/fonts.js +0 -0
  88. package/src/styles/globals.css +25 -0
  89. package/src/tailwind/preset.default.js +15 -0
  90. package/src/tailwind/tailwind.config.js +126 -0
  91. package/src/util/arrayUtil.js +3 -0
  92. package/src/util/fieldMapper.js +19 -0
  93. package/src/util/filterUtil.js +195 -0
  94. package/src/util/loading.js +17 -0
  95. package/src/util/localStorageUtil.js +27 -0
  96. package/src/util/mapIconUtil.js +179 -0
  97. package/src/util/mapUtil.js +91 -0
  98. package/src/util/page-head.js +62 -0
  99. package/src/util/provider.js +12 -0
  100. package/src/util/sortUtil.js +33 -0
  101. package/src/util/stringUtils.js +6 -0
  102. package/src/util/urlFilterUtil.js +91 -0
package/dist/index.js ADDED
@@ -0,0 +1,4644 @@
1
+ import React, { useContext, useState, useEffect, createContext, useRef, forwardRef, memo, Fragment } from 'react';
2
+ import { useLocation, useNavigate, Link, BrowserRouter } from 'react-router-dom';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import { useScroll, useTransform, useSpring, motion } from 'framer-motion';
5
+ import { Icon } from '@iconify/react';
6
+ import * as RadixAccordion from '@radix-ui/react-accordion';
7
+ import { Combobox, Transition } from '@headlessui/react';
8
+ import usePlacesAutocomplete, { getLatLng, getGeocode } from 'use-places-autocomplete';
9
+ import * as Select from '@radix-ui/react-select';
10
+ import * as Dialog from '@radix-ui/react-dialog';
11
+ import { MarkerF, InfoWindow, Marker, InfoWindowF, GoogleMap, MarkerClustererF, useLoadScript } from '@react-google-maps/api';
12
+ import * as Tabs from '@radix-ui/react-tabs';
13
+ import { Provider as Provider$1 } from 'react-wrap-balancer';
14
+
15
+ function _iterableToArrayLimit(r, l) {
16
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
17
+ if (null != t) {
18
+ var e,
19
+ n,
20
+ i,
21
+ u,
22
+ a = [],
23
+ f = !0,
24
+ o = !1;
25
+ try {
26
+ if (i = (t = t.call(r)).next, 0 === l) {
27
+ if (Object(t) !== t) return;
28
+ f = !1;
29
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
30
+ } catch (r) {
31
+ o = !0, n = r;
32
+ } finally {
33
+ try {
34
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
35
+ } finally {
36
+ if (o) throw n;
37
+ }
38
+ }
39
+ return a;
40
+ }
41
+ }
42
+ function ownKeys(e, r) {
43
+ var t = Object.keys(e);
44
+ if (Object.getOwnPropertySymbols) {
45
+ var o = Object.getOwnPropertySymbols(e);
46
+ r && (o = o.filter(function (r) {
47
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
48
+ })), t.push.apply(t, o);
49
+ }
50
+ return t;
51
+ }
52
+ function _objectSpread2(e) {
53
+ for (var r = 1; r < arguments.length; r++) {
54
+ var t = null != arguments[r] ? arguments[r] : {};
55
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
56
+ _defineProperty(e, r, t[r]);
57
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
58
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
59
+ });
60
+ }
61
+ return e;
62
+ }
63
+ function _regeneratorRuntime() {
64
+ _regeneratorRuntime = function () {
65
+ return e;
66
+ };
67
+ var t,
68
+ e = {},
69
+ r = Object.prototype,
70
+ n = r.hasOwnProperty,
71
+ o = Object.defineProperty || function (t, e, r) {
72
+ t[e] = r.value;
73
+ },
74
+ i = "function" == typeof Symbol ? Symbol : {},
75
+ a = i.iterator || "@@iterator",
76
+ c = i.asyncIterator || "@@asyncIterator",
77
+ u = i.toStringTag || "@@toStringTag";
78
+ function define(t, e, r) {
79
+ return Object.defineProperty(t, e, {
80
+ value: r,
81
+ enumerable: !0,
82
+ configurable: !0,
83
+ writable: !0
84
+ }), t[e];
85
+ }
86
+ try {
87
+ define({}, "");
88
+ } catch (t) {
89
+ define = function (t, e, r) {
90
+ return t[e] = r;
91
+ };
92
+ }
93
+ function wrap(t, e, r, n) {
94
+ var i = e && e.prototype instanceof Generator ? e : Generator,
95
+ a = Object.create(i.prototype),
96
+ c = new Context(n || []);
97
+ return o(a, "_invoke", {
98
+ value: makeInvokeMethod(t, r, c)
99
+ }), a;
100
+ }
101
+ function tryCatch(t, e, r) {
102
+ try {
103
+ return {
104
+ type: "normal",
105
+ arg: t.call(e, r)
106
+ };
107
+ } catch (t) {
108
+ return {
109
+ type: "throw",
110
+ arg: t
111
+ };
112
+ }
113
+ }
114
+ e.wrap = wrap;
115
+ var h = "suspendedStart",
116
+ l = "suspendedYield",
117
+ f = "executing",
118
+ s = "completed",
119
+ y = {};
120
+ function Generator() {}
121
+ function GeneratorFunction() {}
122
+ function GeneratorFunctionPrototype() {}
123
+ var p = {};
124
+ define(p, a, function () {
125
+ return this;
126
+ });
127
+ var d = Object.getPrototypeOf,
128
+ v = d && d(d(values([])));
129
+ v && v !== r && n.call(v, a) && (p = v);
130
+ var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
131
+ function defineIteratorMethods(t) {
132
+ ["next", "throw", "return"].forEach(function (e) {
133
+ define(t, e, function (t) {
134
+ return this._invoke(e, t);
135
+ });
136
+ });
137
+ }
138
+ function AsyncIterator(t, e) {
139
+ function invoke(r, o, i, a) {
140
+ var c = tryCatch(t[r], t, o);
141
+ if ("throw" !== c.type) {
142
+ var u = c.arg,
143
+ h = u.value;
144
+ return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
145
+ invoke("next", t, i, a);
146
+ }, function (t) {
147
+ invoke("throw", t, i, a);
148
+ }) : e.resolve(h).then(function (t) {
149
+ u.value = t, i(u);
150
+ }, function (t) {
151
+ return invoke("throw", t, i, a);
152
+ });
153
+ }
154
+ a(c.arg);
155
+ }
156
+ var r;
157
+ o(this, "_invoke", {
158
+ value: function (t, n) {
159
+ function callInvokeWithMethodAndArg() {
160
+ return new e(function (e, r) {
161
+ invoke(t, n, e, r);
162
+ });
163
+ }
164
+ return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
165
+ }
166
+ });
167
+ }
168
+ function makeInvokeMethod(e, r, n) {
169
+ var o = h;
170
+ return function (i, a) {
171
+ if (o === f) throw Error("Generator is already running");
172
+ if (o === s) {
173
+ if ("throw" === i) throw a;
174
+ return {
175
+ value: t,
176
+ done: !0
177
+ };
178
+ }
179
+ for (n.method = i, n.arg = a;;) {
180
+ var c = n.delegate;
181
+ if (c) {
182
+ var u = maybeInvokeDelegate(c, n);
183
+ if (u) {
184
+ if (u === y) continue;
185
+ return u;
186
+ }
187
+ }
188
+ if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
189
+ if (o === h) throw o = s, n.arg;
190
+ n.dispatchException(n.arg);
191
+ } else "return" === n.method && n.abrupt("return", n.arg);
192
+ o = f;
193
+ var p = tryCatch(e, r, n);
194
+ if ("normal" === p.type) {
195
+ if (o = n.done ? s : l, p.arg === y) continue;
196
+ return {
197
+ value: p.arg,
198
+ done: n.done
199
+ };
200
+ }
201
+ "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
202
+ }
203
+ };
204
+ }
205
+ function maybeInvokeDelegate(e, r) {
206
+ var n = r.method,
207
+ o = e.iterator[n];
208
+ if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
209
+ var i = tryCatch(o, e.iterator, r.arg);
210
+ if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
211
+ var a = i.arg;
212
+ return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
213
+ }
214
+ function pushTryEntry(t) {
215
+ var e = {
216
+ tryLoc: t[0]
217
+ };
218
+ 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
219
+ }
220
+ function resetTryEntry(t) {
221
+ var e = t.completion || {};
222
+ e.type = "normal", delete e.arg, t.completion = e;
223
+ }
224
+ function Context(t) {
225
+ this.tryEntries = [{
226
+ tryLoc: "root"
227
+ }], t.forEach(pushTryEntry, this), this.reset(!0);
228
+ }
229
+ function values(e) {
230
+ if (e || "" === e) {
231
+ var r = e[a];
232
+ if (r) return r.call(e);
233
+ if ("function" == typeof e.next) return e;
234
+ if (!isNaN(e.length)) {
235
+ var o = -1,
236
+ i = function next() {
237
+ for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
238
+ return next.value = t, next.done = !0, next;
239
+ };
240
+ return i.next = i;
241
+ }
242
+ }
243
+ throw new TypeError(typeof e + " is not iterable");
244
+ }
245
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
246
+ value: GeneratorFunctionPrototype,
247
+ configurable: !0
248
+ }), o(GeneratorFunctionPrototype, "constructor", {
249
+ value: GeneratorFunction,
250
+ configurable: !0
251
+ }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
252
+ var e = "function" == typeof t && t.constructor;
253
+ return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
254
+ }, e.mark = function (t) {
255
+ return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
256
+ }, e.awrap = function (t) {
257
+ return {
258
+ __await: t
259
+ };
260
+ }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
261
+ return this;
262
+ }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
263
+ void 0 === i && (i = Promise);
264
+ var a = new AsyncIterator(wrap(t, r, n, o), i);
265
+ return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
266
+ return t.done ? t.value : a.next();
267
+ });
268
+ }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
269
+ return this;
270
+ }), define(g, "toString", function () {
271
+ return "[object Generator]";
272
+ }), e.keys = function (t) {
273
+ var e = Object(t),
274
+ r = [];
275
+ for (var n in e) r.push(n);
276
+ return r.reverse(), function next() {
277
+ for (; r.length;) {
278
+ var t = r.pop();
279
+ if (t in e) return next.value = t, next.done = !1, next;
280
+ }
281
+ return next.done = !0, next;
282
+ };
283
+ }, e.values = values, Context.prototype = {
284
+ constructor: Context,
285
+ reset: function (e) {
286
+ if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
287
+ },
288
+ stop: function () {
289
+ this.done = !0;
290
+ var t = this.tryEntries[0].completion;
291
+ if ("throw" === t.type) throw t.arg;
292
+ return this.rval;
293
+ },
294
+ dispatchException: function (e) {
295
+ if (this.done) throw e;
296
+ var r = this;
297
+ function handle(n, o) {
298
+ return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
299
+ }
300
+ for (var o = this.tryEntries.length - 1; o >= 0; --o) {
301
+ var i = this.tryEntries[o],
302
+ a = i.completion;
303
+ if ("root" === i.tryLoc) return handle("end");
304
+ if (i.tryLoc <= this.prev) {
305
+ var c = n.call(i, "catchLoc"),
306
+ u = n.call(i, "finallyLoc");
307
+ if (c && u) {
308
+ if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
309
+ if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
310
+ } else if (c) {
311
+ if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
312
+ } else {
313
+ if (!u) throw Error("try statement without catch or finally");
314
+ if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
315
+ }
316
+ }
317
+ }
318
+ },
319
+ abrupt: function (t, e) {
320
+ for (var r = this.tryEntries.length - 1; r >= 0; --r) {
321
+ var o = this.tryEntries[r];
322
+ if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
323
+ var i = o;
324
+ break;
325
+ }
326
+ }
327
+ i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
328
+ var a = i ? i.completion : {};
329
+ return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
330
+ },
331
+ complete: function (t, e) {
332
+ if ("throw" === t.type) throw t.arg;
333
+ return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
334
+ },
335
+ finish: function (t) {
336
+ for (var e = this.tryEntries.length - 1; e >= 0; --e) {
337
+ var r = this.tryEntries[e];
338
+ if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
339
+ }
340
+ },
341
+ catch: function (t) {
342
+ for (var e = this.tryEntries.length - 1; e >= 0; --e) {
343
+ var r = this.tryEntries[e];
344
+ if (r.tryLoc === t) {
345
+ var n = r.completion;
346
+ if ("throw" === n.type) {
347
+ var o = n.arg;
348
+ resetTryEntry(r);
349
+ }
350
+ return o;
351
+ }
352
+ }
353
+ throw Error("illegal catch attempt");
354
+ },
355
+ delegateYield: function (e, r, n) {
356
+ return this.delegate = {
357
+ iterator: values(e),
358
+ resultName: r,
359
+ nextLoc: n
360
+ }, "next" === this.method && (this.arg = t), y;
361
+ }
362
+ }, e;
363
+ }
364
+ function _toPrimitive(t, r) {
365
+ if ("object" != typeof t || !t) return t;
366
+ var e = t[Symbol.toPrimitive];
367
+ if (void 0 !== e) {
368
+ var i = e.call(t, r || "default");
369
+ if ("object" != typeof i) return i;
370
+ throw new TypeError("@@toPrimitive must return a primitive value.");
371
+ }
372
+ return ("string" === r ? String : Number)(t);
373
+ }
374
+ function _toPropertyKey(t) {
375
+ var i = _toPrimitive(t, "string");
376
+ return "symbol" == typeof i ? i : i + "";
377
+ }
378
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
379
+ try {
380
+ var info = gen[key](arg);
381
+ var value = info.value;
382
+ } catch (error) {
383
+ reject(error);
384
+ return;
385
+ }
386
+ if (info.done) {
387
+ resolve(value);
388
+ } else {
389
+ Promise.resolve(value).then(_next, _throw);
390
+ }
391
+ }
392
+ function _asyncToGenerator(fn) {
393
+ return function () {
394
+ var self = this,
395
+ args = arguments;
396
+ return new Promise(function (resolve, reject) {
397
+ var gen = fn.apply(self, args);
398
+ function _next(value) {
399
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
400
+ }
401
+ function _throw(err) {
402
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
403
+ }
404
+ _next(undefined);
405
+ });
406
+ };
407
+ }
408
+ function _defineProperty(obj, key, value) {
409
+ key = _toPropertyKey(key);
410
+ if (key in obj) {
411
+ Object.defineProperty(obj, key, {
412
+ value: value,
413
+ enumerable: true,
414
+ configurable: true,
415
+ writable: true
416
+ });
417
+ } else {
418
+ obj[key] = value;
419
+ }
420
+ return obj;
421
+ }
422
+ function _extends() {
423
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
424
+ for (var i = 1; i < arguments.length; i++) {
425
+ var source = arguments[i];
426
+ for (var key in source) {
427
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
428
+ target[key] = source[key];
429
+ }
430
+ }
431
+ }
432
+ return target;
433
+ };
434
+ return _extends.apply(this, arguments);
435
+ }
436
+ function _objectWithoutPropertiesLoose(source, excluded) {
437
+ if (source == null) return {};
438
+ var target = {};
439
+ for (var key in source) {
440
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
441
+ if (excluded.indexOf(key) >= 0) continue;
442
+ target[key] = source[key];
443
+ }
444
+ }
445
+ return target;
446
+ }
447
+ function _objectWithoutProperties(source, excluded) {
448
+ if (source == null) return {};
449
+ var target = _objectWithoutPropertiesLoose(source, excluded);
450
+ var key, i;
451
+ if (Object.getOwnPropertySymbols) {
452
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
453
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
454
+ key = sourceSymbolKeys[i];
455
+ if (excluded.indexOf(key) >= 0) continue;
456
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
457
+ target[key] = source[key];
458
+ }
459
+ }
460
+ return target;
461
+ }
462
+ function _taggedTemplateLiteral(strings, raw) {
463
+ if (!raw) {
464
+ raw = strings.slice(0);
465
+ }
466
+ return Object.freeze(Object.defineProperties(strings, {
467
+ raw: {
468
+ value: Object.freeze(raw)
469
+ }
470
+ }));
471
+ }
472
+ function _slicedToArray(arr, i) {
473
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
474
+ }
475
+ function _toConsumableArray(arr) {
476
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
477
+ }
478
+ function _arrayWithoutHoles(arr) {
479
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
480
+ }
481
+ function _arrayWithHoles(arr) {
482
+ if (Array.isArray(arr)) return arr;
483
+ }
484
+ function _iterableToArray(iter) {
485
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
486
+ }
487
+ function _unsupportedIterableToArray(o, minLen) {
488
+ if (!o) return;
489
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
490
+ var n = Object.prototype.toString.call(o).slice(8, -1);
491
+ if (n === "Object" && o.constructor) n = o.constructor.name;
492
+ if (n === "Map" || n === "Set") return Array.from(o);
493
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
494
+ }
495
+ function _arrayLikeToArray(arr, len) {
496
+ if (len == null || len > arr.length) len = arr.length;
497
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
498
+ return arr2;
499
+ }
500
+ function _nonIterableSpread() {
501
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
502
+ }
503
+ function _nonIterableRest() {
504
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
505
+ }
506
+ function _createForOfIteratorHelper(o, allowArrayLike) {
507
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
508
+ if (!it) {
509
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike ) {
510
+ if (it) o = it;
511
+ var i = 0;
512
+ var F = function () {};
513
+ return {
514
+ s: F,
515
+ n: function () {
516
+ if (i >= o.length) return {
517
+ done: true
518
+ };
519
+ return {
520
+ done: false,
521
+ value: o[i++]
522
+ };
523
+ },
524
+ e: function (e) {
525
+ throw e;
526
+ },
527
+ f: F
528
+ };
529
+ }
530
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
531
+ }
532
+ var normalCompletion = true,
533
+ didErr = false,
534
+ err;
535
+ return {
536
+ s: function () {
537
+ it = it.call(o);
538
+ },
539
+ n: function () {
540
+ var step = it.next();
541
+ normalCompletion = step.done;
542
+ return step;
543
+ },
544
+ e: function (e) {
545
+ didErr = true;
546
+ err = e;
547
+ },
548
+ f: function () {
549
+ try {
550
+ if (!normalCompletion && it.return != null) it.return();
551
+ } finally {
552
+ if (didErr) throw err;
553
+ }
554
+ }
555
+ };
556
+ }
557
+
558
+ var clientAuthKey = null;
559
+ var setClientAuthKey = function setClientAuthKey(key) {
560
+ clientAuthKey = key;
561
+ };
562
+ var getClientAuthKey = function getClientAuthKey() {
563
+ return clientAuthKey;
564
+ };
565
+
566
+ var baseURL = "https://https://api.myhirecontrol.com";
567
+ var login = /*#__PURE__*/function () {
568
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
569
+ var clientAuthKey, response, data;
570
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
571
+ while (1) switch (_context.prev = _context.next) {
572
+ case 0:
573
+ clientAuthKey = getClientAuthKey();
574
+ _context.prev = 1;
575
+ _context.next = 4;
576
+ return fetch("".concat(baseURL, "/auth/login"), {
577
+ method: 'POST',
578
+ headers: {
579
+ 'Content-Type': 'application/json'
580
+ },
581
+ body: JSON.stringify({
582
+ clientAuthKey: clientAuthKey
583
+ })
584
+ });
585
+ case 4:
586
+ response = _context.sent;
587
+ _context.next = 7;
588
+ return response.json();
589
+ case 7:
590
+ data = _context.sent;
591
+ if (!(data.token && data.expiration)) {
592
+ _context.next = 12;
593
+ break;
594
+ }
595
+ sessionStorage.setItem('authToken', data.token);
596
+ sessionStorage.setItem('tokenExpiration', data.expiration);
597
+ return _context.abrupt("return", {
598
+ token: data.token,
599
+ expiration: data.expiration
600
+ });
601
+ case 12:
602
+ _context.next = 18;
603
+ break;
604
+ case 14:
605
+ _context.prev = 14;
606
+ _context.t0 = _context["catch"](1);
607
+ console.error('Login failed:', _context.t0);
608
+ throw _context.t0;
609
+ case 18:
610
+ case "end":
611
+ return _context.stop();
612
+ }
613
+ }, _callee, null, [[1, 14]]);
614
+ }));
615
+ return function login() {
616
+ return _ref.apply(this, arguments);
617
+ };
618
+ }();
619
+ var fetchWithAuth = /*#__PURE__*/function () {
620
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url) {
621
+ var options,
622
+ token,
623
+ expirationDateTime,
624
+ currentTime,
625
+ authResponse,
626
+ headers,
627
+ finalOptions,
628
+ response,
629
+ _args2 = arguments;
630
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
631
+ while (1) switch (_context2.prev = _context2.next) {
632
+ case 0:
633
+ options = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
634
+ token = sessionStorage.getItem('authToken');
635
+ expirationDateTime = sessionStorage.getItem('tokenExpiration');
636
+ currentTime = new Date();
637
+ if (!(!token || !expirationDateTime || new Date(expirationDateTime) <= currentTime)) {
638
+ _context2.next = 9;
639
+ break;
640
+ }
641
+ _context2.next = 7;
642
+ return login();
643
+ case 7:
644
+ authResponse = _context2.sent;
645
+ token = authResponse.token;
646
+ case 9:
647
+ headers = new Headers(options.headers || {});
648
+ headers.append('Authorization', "Bearer ".concat(token));
649
+ finalOptions = _objectSpread2(_objectSpread2({}, options), {}, {
650
+ headers: headers
651
+ });
652
+ _context2.next = 14;
653
+ return fetch("".concat(baseURL).concat(url), finalOptions);
654
+ case 14:
655
+ response = _context2.sent;
656
+ if (response.ok) {
657
+ _context2.next = 17;
658
+ break;
659
+ }
660
+ throw new Error('Network response was not ok.');
661
+ case 17:
662
+ return _context2.abrupt("return", response);
663
+ case 18:
664
+ case "end":
665
+ return _context2.stop();
666
+ }
667
+ }, _callee2);
668
+ }));
669
+ return function fetchWithAuth(_x) {
670
+ return _ref2.apply(this, arguments);
671
+ };
672
+ }();
673
+ var api = {
674
+ get: function () {
675
+ var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(url) {
676
+ var response;
677
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
678
+ while (1) switch (_context3.prev = _context3.next) {
679
+ case 0:
680
+ _context3.next = 2;
681
+ return fetchWithAuth(url);
682
+ case 2:
683
+ response = _context3.sent;
684
+ return _context3.abrupt("return", response.json());
685
+ case 4:
686
+ case "end":
687
+ return _context3.stop();
688
+ }
689
+ }, _callee3);
690
+ }));
691
+ function get(_x2) {
692
+ return _get.apply(this, arguments);
693
+ }
694
+ return get;
695
+ }(),
696
+ post: function () {
697
+ var _post = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(url, data) {
698
+ var response;
699
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
700
+ while (1) switch (_context4.prev = _context4.next) {
701
+ case 0:
702
+ _context4.next = 2;
703
+ return fetchWithAuth(url, {
704
+ method: 'POST',
705
+ headers: {
706
+ 'Content-Type': 'application/json'
707
+ },
708
+ body: JSON.stringify(data)
709
+ });
710
+ case 2:
711
+ response = _context4.sent;
712
+ return _context4.abrupt("return", response.json());
713
+ case 4:
714
+ case "end":
715
+ return _context4.stop();
716
+ }
717
+ }, _callee4);
718
+ }));
719
+ function post(_x3, _x4) {
720
+ return _post.apply(this, arguments);
721
+ }
722
+ return post;
723
+ }()
724
+ };
725
+
726
+ var getListings = /*#__PURE__*/function () {
727
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(companyId) {
728
+ var response;
729
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
730
+ while (1) switch (_context.prev = _context.next) {
731
+ case 0:
732
+ _context.prev = 0;
733
+ _context.next = 4;
734
+ return api.get("/Listings");
735
+ case 4:
736
+ response = _context.sent;
737
+ return _context.abrupt("return", response);
738
+ case 8:
739
+ _context.prev = 8;
740
+ _context.t0 = _context["catch"](0);
741
+ console.error(_context.t0);
742
+ throw _context.t0;
743
+ case 12:
744
+ case "end":
745
+ return _context.stop();
746
+ }
747
+ }, _callee, null, [[0, 8]]);
748
+ }));
749
+ return function getListings(_x) {
750
+ return _ref.apply(this, arguments);
751
+ };
752
+ }();
753
+
754
+ var getRecruiters = /*#__PURE__*/function () {
755
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(recruiterIds) {
756
+ var params, response;
757
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
758
+ while (1) switch (_context.prev = _context.next) {
759
+ case 0:
760
+ _context.prev = 0;
761
+ params = recruiterIds.map(function (id) {
762
+ return "recruiterIds=".concat(id);
763
+ }).join("&");
764
+ _context.next = 4;
765
+ return api.get("/Recruiters?".concat(params));
766
+ case 4:
767
+ response = _context.sent;
768
+ return _context.abrupt("return", response.data);
769
+ case 8:
770
+ _context.prev = 8;
771
+ _context.t0 = _context["catch"](0);
772
+ console.error("Error fetching recruiters:", _context.t0);
773
+ throw _context.t0;
774
+ case 12:
775
+ case "end":
776
+ return _context.stop();
777
+ }
778
+ }, _callee, null, [[0, 8]]);
779
+ }));
780
+ return function getRecruiters(_x) {
781
+ return _ref.apply(this, arguments);
782
+ };
783
+ }();
784
+
785
+ var getListingEntities = /*#__PURE__*/function () {
786
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(entityIds) {
787
+ var origin,
788
+ response,
789
+ _args = arguments;
790
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
791
+ while (1) switch (_context.prev = _context.next) {
792
+ case 0:
793
+ origin = _args.length > 1 && _args[1] !== undefined ? _args[1] : '';
794
+ _context.prev = 1;
795
+ _context.next = 4;
796
+ return api.post("/ListingEntities?origin=".concat(origin), entityIds);
797
+ case 4:
798
+ response = _context.sent;
799
+ return _context.abrupt("return", response);
800
+ case 8:
801
+ _context.prev = 8;
802
+ _context.t0 = _context["catch"](1);
803
+ console.error("Error fetching listing entities:", _context.t0);
804
+ throw _context.t0;
805
+ case 12:
806
+ case "end":
807
+ return _context.stop();
808
+ }
809
+ }, _callee, null, [[1, 8]]);
810
+ }));
811
+ return function getListingEntities(_x) {
812
+ return _ref.apply(this, arguments);
813
+ };
814
+ }();
815
+
816
+ var getDistinctItemsByProximity = function getDistinctItemsByProximity(items, listingEntitiesDetails) {
817
+ var clusters = {};
818
+ if (!listingEntitiesDetails) return [];
819
+ var closeItemPairs = findCloseItems(listingEntitiesDetails);
820
+ if (closeItemPairs.length > 0) {
821
+ listingEntitiesDetails = adjustItemPositions(listingEntitiesDetails, closeItemPairs);
822
+ }
823
+ items === null || items === void 0 || items.forEach(function (item) {
824
+ if (item.entityId !== -1) {
825
+ var entityDetails = listingEntitiesDetails[item.entityId];
826
+ if (!entityDetails) {
827
+ console.error("Details not found for entityId: ".concat(item.entityId));
828
+ return;
829
+ }
830
+ item.mapDetails = entityDetails;
831
+ if (!clusters[item.entityId]) {
832
+ clusters[item.entityId] = _objectSpread2(_objectSpread2({}, item.mapDetails), {}, {
833
+ items: _defineProperty({}, item.id, item)
834
+ });
835
+ } else {
836
+ clusters[item.entityId].items[item.id] = item;
837
+ }
838
+ }
839
+ });
840
+ return Object.values(clusters);
841
+ };
842
+ var findCloseItems = function findCloseItems(itemsObj) {
843
+ var closeItems = [];
844
+ var items = Object.values(itemsObj); // Convert object to array for iteration
845
+ var proximityThreshold = 0.0001;
846
+ for (var i = 0; i < items.length; i++) {
847
+ for (var j = i + 1; j < items.length; j++) {
848
+ var distanceLat = Math.abs(items[i].latitude - items[j].latitude);
849
+ var distanceLng = Math.abs(items[i].longitude - items[j].longitude);
850
+ if (distanceLat < proximityThreshold && distanceLng < proximityThreshold) {
851
+ closeItems.push({
852
+ item1: items[i],
853
+ item2: items[j]
854
+ });
855
+ }
856
+ }
857
+ }
858
+ return closeItems;
859
+ };
860
+ var adjustItemPositions = function adjustItemPositions(itemsObj, closeItemPairs) {
861
+ var adjustmentValue = 0.0001;
862
+ var adjustedItems = _objectSpread2({}, itemsObj); // Create a shallow copy of the object
863
+
864
+ closeItemPairs.forEach(function (pair) {
865
+ if (adjustedItems[pair.item1.id] && adjustedItems[pair.item2.id]) {
866
+ adjustedItems[pair.item2.id].latitude += adjustmentValue;
867
+ adjustedItems[pair.item2.id].longitude += adjustmentValue;
868
+ }
869
+ });
870
+ return adjustedItems;
871
+ };
872
+ var clusterOptions = function clusterOptions(clusterGridSize, fillColor) {
873
+ return {
874
+ gridSize: clusterGridSize,
875
+ styles: [{
876
+ url: createSvgDataUri(fillColor),
877
+ textColor: 'white',
878
+ height: 40,
879
+ width: 40
880
+ }]
881
+ };
882
+ };
883
+ function createSvgDataUri(fillColor) {
884
+ var svg = "<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n\t <circle cx=\"25\" cy=\"25\" r=\"20\" fill=\"".concat(fillColor, "\" />\n\t</svg>");
885
+ return "data:image/svg+xml;base64,".concat(btoa(svg));
886
+ }
887
+
888
+ var fetchListings = /*#__PURE__*/function () {
889
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(query, siteConfig) {
890
+ var listingsResult, recruiterIds, fetchedRecruiters, distinctEntityIds, fetchedEntities, distinctItems;
891
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
892
+ while (1) switch (_context.prev = _context.next) {
893
+ case 0:
894
+ _context.prev = 0;
895
+ _context.next = 3;
896
+ return getListings(siteConfig.companyId, 5000, 1, query);
897
+ case 3:
898
+ listingsResult = _context.sent;
899
+ recruiterIds = _toConsumableArray(new Set(listingsResult.map(function (listing) {
900
+ return listing.recruiterId;
901
+ })));
902
+ _context.next = 7;
903
+ return getRecruiters(recruiterIds);
904
+ case 7:
905
+ fetchedRecruiters = _context.sent;
906
+ distinctEntityIds = _toConsumableArray(new Set(listingsResult.map(function (listing) {
907
+ return listing.entityId;
908
+ })));
909
+ _context.next = 11;
910
+ return getListingEntities(distinctEntityIds);
911
+ case 11:
912
+ fetchedEntities = _context.sent;
913
+ distinctItems = getDistinctItemsByProximity(listingsResult, fetchedEntities);
914
+ return _context.abrupt("return", {
915
+ listingsResult: listingsResult,
916
+ fetchedRecruiters: fetchedRecruiters,
917
+ fetchedEntities: fetchedEntities,
918
+ distinctItems: distinctItems
919
+ });
920
+ case 16:
921
+ _context.prev = 16;
922
+ _context.t0 = _context["catch"](0);
923
+ console.error("Error fetching listings:", _context.t0);
924
+ throw _context.t0;
925
+ case 20:
926
+ case "end":
927
+ return _context.stop();
928
+ }
929
+ }, _callee, null, [[0, 16]]);
930
+ }));
931
+ return function fetchListings(_x, _x2) {
932
+ return _ref.apply(this, arguments);
933
+ };
934
+ }();
935
+
936
+ var getFilterOptions = function getFilterOptions(listings, filteredListings, field) {
937
+ var excludeZeroCount = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
938
+ var options = new Set();
939
+ listings.forEach(function (listing) {
940
+ if (listing.fields[field]) {
941
+ options.add(listing.fields[field]);
942
+ }
943
+ });
944
+ var optionCounts = {};
945
+ options.forEach(function (option) {
946
+ optionCounts[option] = 0;
947
+ });
948
+ filteredListings.forEach(function (listing) {
949
+ var value = listing.fields[field];
950
+ if (value && optionCounts.hasOwnProperty(value)) {
951
+ optionCounts[value] += 1;
952
+ }
953
+ });
954
+ return Array.from(options).sort().map(function (option) {
955
+ return {
956
+ name: option,
957
+ count: optionCounts[option] || 0
958
+ };
959
+ }).filter(function (option) {
960
+ return !(excludeZeroCount === true && option.count === 0);
961
+ });
962
+ };
963
+ var getSpecialFeatureOptions = function getSpecialFeatureOptions(listings, filteredListings, siteConfig, favorites) {
964
+ var specialFeatures = siteConfig.specialFeatures;
965
+ var featureCounts = Object.keys(specialFeatures).sort().reduce(function (acc, key) {
966
+ acc[specialFeatures[key]] = 0;
967
+ return acc;
968
+ }, {});
969
+ filteredListings.forEach(function (listing) {
970
+ Object.entries(specialFeatures).forEach(function (_ref) {
971
+ var _ref2 = _slicedToArray(_ref, 2),
972
+ featureKey = _ref2[0],
973
+ featureName = _ref2[1];
974
+ if (listing.fields[featureKey] === 1) {
975
+ featureCounts[featureName] += 1;
976
+ }
977
+ });
978
+ });
979
+ var specialFeatureOptions = Object.entries(featureCounts).map(function (_ref3) {
980
+ var _ref4 = _slicedToArray(_ref3, 2),
981
+ name = _ref4[0],
982
+ count = _ref4[1];
983
+ return {
984
+ name: name,
985
+ count: count
986
+ };
987
+ });
988
+ var _iterator = _createForOfIteratorHelper(specialFeatureOptions),
989
+ _step;
990
+ try {
991
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
992
+ var option = _step.value;
993
+ if (option.name === 'Favorite') {
994
+ option.count = filteredListings.filter(function (x) {
995
+ return favorites.includes(x.id);
996
+ }).length;
997
+ }
998
+ }
999
+ } catch (err) {
1000
+ _iterator.e(err);
1001
+ } finally {
1002
+ _iterator.f();
1003
+ }
1004
+ return specialFeatureOptions;
1005
+ };
1006
+ var getPointsOfInterestOptions = function getPointsOfInterestOptions(pointsOfInterestNames) {
1007
+ return Object.entries(pointsOfInterestNames).sort().map(function (_ref5) {
1008
+ var _ref6 = _slicedToArray(_ref5, 2),
1009
+ key = _ref6[0],
1010
+ name = _ref6[1];
1011
+ return {
1012
+ key: key,
1013
+ name: name
1014
+ };
1015
+ });
1016
+ };
1017
+ var generateFilterOptions = function generateFilterOptions(filteredListings, allListings, siteConfig, filterOptions) {
1018
+ var parentField = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
1019
+ var favorites = arguments.length > 5 ? arguments[5] : undefined;
1020
+ if (allListings.length > 0) {
1021
+ var dynamicFilters = siteConfig.fieldFiltersShown.map(function (fieldName) {
1022
+ if (fieldName === parentField && filterOptions !== null && filterOptions !== void 0 && filterOptions.filters) {
1023
+ return filterOptions.filters.find(function (filter) {
1024
+ return filter.id === fieldName;
1025
+ });
1026
+ }
1027
+ if (fieldName == "specialFeatures") {
1028
+ return {
1029
+ id: fieldName,
1030
+ title: siteConfig.fieldNames[fieldName],
1031
+ items: getSpecialFeatureOptions(allListings, filteredListings, siteConfig, favorites).sort()
1032
+ };
1033
+ }
1034
+ return {
1035
+ id: fieldName,
1036
+ title: siteConfig.fieldNames[fieldName],
1037
+ items: getFilterOptions(allListings, filteredListings, fieldName)
1038
+ };
1039
+ });
1040
+ var locations = siteConfig.locationFiltersShown.map(function (fieldName, index) {
1041
+ if (index === 0 && filterOptions !== null && filterOptions !== void 0 && filterOptions.locations) {
1042
+ return filterOptions.locations.find(function (filter) {
1043
+ return filter.id === fieldName;
1044
+ });
1045
+ }
1046
+ return {
1047
+ id: fieldName,
1048
+ title: siteConfig.fieldNames[fieldName],
1049
+ items: getFilterOptions(allListings, filteredListings, fieldName, true)
1050
+ };
1051
+ });
1052
+ var pointsOfInterest = {
1053
+ id: "pointsOfInterest",
1054
+ title: siteConfig.pointsOfInterestConfig.title,
1055
+ items: getPointsOfInterestOptions(siteConfig.pointsOfInterestConfig.pointsOfInterestNames)
1056
+ };
1057
+ return {
1058
+ filters: dynamicFilters,
1059
+ locations: locations,
1060
+ pointsOfInterest: pointsOfInterest
1061
+ };
1062
+ }
1063
+ return null;
1064
+ };
1065
+ var applyFilters = function applyFilters(allListings, selectedFilters, query, listingEntities, favorites, siteConfig) {
1066
+ var results = allListings;
1067
+ var invertedSpecialFeaturesMap;
1068
+ if (siteConfig.specialFeatures) {
1069
+ invertedSpecialFeaturesMap = Object.entries(siteConfig.specialFeatures).reduce(function (acc, _ref7) {
1070
+ var _ref8 = _slicedToArray(_ref7, 2),
1071
+ key = _ref8[0],
1072
+ value = _ref8[1];
1073
+ acc[value] = key;
1074
+ return acc;
1075
+ }, {});
1076
+ }
1077
+ var hasFavorite = !!selectedFilters.specialFeatures && !!selectedFilters.specialFeatures.Favorite;
1078
+ if (hasFavorite && selectedFilters.specialFeatures.Favorite == true) {
1079
+ results = results.filter(function (x) {
1080
+ return favorites.includes(x.id);
1081
+ });
1082
+ }
1083
+ var favorite;
1084
+ if (hasFavorite) {
1085
+ favorite = selectedFilters.specialFeatures.Favorite;
1086
+ delete selectedFilters.specialFeatures.Favorite;
1087
+ }
1088
+ var _loop = function _loop() {
1089
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
1090
+ field = _Object$entries$_i[0],
1091
+ filterItems = _Object$entries$_i[1];
1092
+ var formattedField = field;
1093
+ if (field === "pointsOfInterest") return 1; // continue
1094
+ if (field === "specialFeatures" && invertedSpecialFeaturesMap && Object.keys(filterItems).length > 0) {
1095
+ results = results.filter(function (listing) {
1096
+ return Object.entries(filterItems).some(function (_ref9) {
1097
+ var _ref10 = _slicedToArray(_ref9, 2),
1098
+ filterName = _ref10[0],
1099
+ filterValue = _ref10[1];
1100
+ var listingFieldName = invertedSpecialFeaturesMap[filterName];
1101
+ return filterValue && listing.fields[listingFieldName] === 1;
1102
+ });
1103
+ });
1104
+ } else if (Object.keys(filterItems).length > 0) {
1105
+ results = results.filter(function (listing) {
1106
+ return filterItems.hasOwnProperty(listing.fields[formattedField]);
1107
+ });
1108
+ }
1109
+ };
1110
+ for (var _i = 0, _Object$entries = Object.entries(selectedFilters); _i < _Object$entries.length; _i++) {
1111
+ if (_loop()) continue;
1112
+ }
1113
+ if (query) {
1114
+ results = results.filter(function (listing) {
1115
+ var _Object$values;
1116
+ return (_Object$values = Object.values(listing.fields)) === null || _Object$values === void 0 ? void 0 : _Object$values.some(function (value) {
1117
+ return value === null || value === void 0 ? void 0 : value.toString().toLowerCase().includes(query.toLowerCase());
1118
+ });
1119
+ });
1120
+ }
1121
+ var distinctItems = getDistinctItemsByProximity(results, listingEntities);
1122
+ if (hasFavorite) {
1123
+ selectedFilters.specialFeatures.Favorite = favorite;
1124
+ }
1125
+ return {
1126
+ filteredListings: results,
1127
+ mapItems: distinctItems
1128
+ };
1129
+ };
1130
+ var filterListingsByLocation = function filterListingsByLocation(allListings, selectedLocation, listingEntities) {
1131
+ var results = allListings;
1132
+ if (selectedLocation !== null) {
1133
+ results = results.filter(function (item) {
1134
+ return selectedLocation.items.hasOwnProperty(item.id);
1135
+ });
1136
+ }
1137
+ var mapItems = getDistinctItemsByProximity(results, listingEntities);
1138
+ return {
1139
+ filteredListings: results,
1140
+ mapItems: mapItems
1141
+ };
1142
+ };
1143
+
1144
+ var getStorageObject = function getStorageObject(item) {
1145
+ var _JSON$parse;
1146
+ var defaultItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1147
+ if (typeof window == 'undefined') return defaultItem;
1148
+ if (localStorage.getItem(item) == null) return defaultItem;
1149
+ if (localStorage.getItem(item) == 'undefined') {
1150
+ localStorage.removeItem(item);
1151
+ }
1152
+ return (_JSON$parse = JSON.parse(localStorage.getItem(item))) !== null && _JSON$parse !== void 0 ? _JSON$parse : defaultItem;
1153
+ };
1154
+ var getStorageItem = function getStorageItem(item) {
1155
+ var _localStorage$getItem;
1156
+ var defaultItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1157
+ if (typeof window == 'undefined') return defaultItem;
1158
+ if (localStorage.getItem(item) == null) return defaultItem;
1159
+ if (localStorage.getItem(item) == 'undefined') {
1160
+ localStorage.removeItem(item);
1161
+ }
1162
+ return (_localStorage$getItem = localStorage.getItem(item)) !== null && _localStorage$getItem !== void 0 ? _localStorage$getItem : defaultItem;
1163
+ };
1164
+ var setStorageObject = function setStorageObject(key, item) {
1165
+ if (typeof window == 'undefined') return;
1166
+ if (item == undefined) return;
1167
+ try {
1168
+ localStorage.setItem(key, JSON.stringify(item));
1169
+ } catch (err) {
1170
+ console.log(err);
1171
+ }
1172
+ };
1173
+
1174
+ var updateURLWithFilters = function updateURLWithFilters(filters, location, navigate, query) {
1175
+ console.log("attempting to update url");
1176
+ console.log(filters);
1177
+ console.log(location);
1178
+ console.log(navigate);
1179
+ console.log(query);
1180
+ var searchParams = new URLSearchParams();
1181
+
1182
+ // Add the new filters to search params
1183
+ Object.keys(filters).forEach(function (category) {
1184
+ Object.keys(filters[category]).forEach(function (filter) {
1185
+ if (filters[category][filter]) {
1186
+ var key = "".concat(category, ".").concat(filter);
1187
+ searchParams.set(key, 'true');
1188
+ }
1189
+ });
1190
+ });
1191
+
1192
+ // Add the query to search params if it exists
1193
+ if (query) {
1194
+ searchParams.set('query', query);
1195
+ }
1196
+ navigate({
1197
+ search: searchParams.toString()
1198
+ }, {
1199
+ replace: true
1200
+ });
1201
+ notifyParentOfUrlChange();
1202
+ };
1203
+ function notifyParentOfUrlChange() {
1204
+ setTimeout(function () {
1205
+ var message = {
1206
+ type: 'URL_CHANGE',
1207
+ url: window.location.href
1208
+ };
1209
+ window.parent.postMessage(message, "*");
1210
+ }, 500);
1211
+ }
1212
+ var parseQueryParams = function parseQueryParams(search) {
1213
+ var queryParams = {};
1214
+ if (!search) return queryParams;
1215
+ var queryString = search.split('?')[1];
1216
+ if (!queryString) {
1217
+ return queryParams;
1218
+ }
1219
+ queryString = queryString.replaceAll('+', ' ');
1220
+ queryString.split('&').forEach(function (param) {
1221
+ var _param$split = param.split('='),
1222
+ _param$split2 = _slicedToArray(_param$split, 2),
1223
+ key = _param$split2[0],
1224
+ value = _param$split2[1];
1225
+ queryParams[decodeURIComponent(key)] = decodeURIComponent(value);
1226
+ });
1227
+ return queryParams;
1228
+ };
1229
+ var filtersFromURL = function filtersFromURL(location) {
1230
+ if (!location || !location.search) return;
1231
+ var filters = {};
1232
+ var queryParam = null;
1233
+ var queryParams = parseQueryParams(location.search);
1234
+ if (!queryParams) return;
1235
+ Object.keys(queryParams).forEach(function (key) {
1236
+ if (key && key.includes('.')) {
1237
+ var _key$split = key.split('.'),
1238
+ _key$split2 = _slicedToArray(_key$split, 2),
1239
+ category = _key$split2[0],
1240
+ filter = _key$split2[1];
1241
+ if (!filters[category]) {
1242
+ filters[category] = {};
1243
+ }
1244
+ filters[category][filter] = queryParams[key] === 'true';
1245
+ } else if (key === 'query') {
1246
+ queryParam = queryParams[key];
1247
+ }
1248
+ });
1249
+ return {
1250
+ filters: filters,
1251
+ query: queryParam
1252
+ };
1253
+ };
1254
+ var hasFiltersInURL = function hasFiltersInURL(location) {
1255
+ if (!location || !location.search) return;
1256
+ var queryParams = parseQueryParams(location.search);
1257
+ if (!queryParams) return;
1258
+ return Object.keys(queryParams).some(function (key) {
1259
+ return key.includes('.');
1260
+ });
1261
+ };
1262
+ var hasQueryInUrl = function hasQueryInUrl(location) {
1263
+ console.log(location);
1264
+ if (!location || !location.search) return;
1265
+ var queryParams = parseQueryParams(location.search);
1266
+ if (!queryParams) return;
1267
+ return Object.keys(queryParams).includes('query');
1268
+ };
1269
+
1270
+ var MapListContext = /*#__PURE__*/createContext();
1271
+ var useMapList = function useMapList() {
1272
+ return useContext(MapListContext);
1273
+ };
1274
+ var getQuery = function getQuery(location) {
1275
+ var query;
1276
+ if (!hasQueryInUrl(location)) {
1277
+ query = typeof window !== 'undefined' ? localStorage.getItem('query') : '';
1278
+ } else {
1279
+ query = filtersFromURL(location).query;
1280
+ }
1281
+ return query;
1282
+ };
1283
+ var MapListProvider = function MapListProvider(_ref) {
1284
+ var children = _ref.children,
1285
+ siteConfig = _ref.siteConfig,
1286
+ resetFilters = _ref.resetFilters;
1287
+ var location = useLocation();
1288
+ var navigate = useNavigate();
1289
+ var _useState = useState(getStorageObject("listings", [])),
1290
+ _useState2 = _slicedToArray(_useState, 2),
1291
+ allListings = _useState2[0],
1292
+ setAllListings = _useState2[1];
1293
+ var _useState3 = useState([]),
1294
+ _useState4 = _slicedToArray(_useState3, 2),
1295
+ filteredListings = _useState4[0],
1296
+ setFilteredListings = _useState4[1];
1297
+ var _useState5 = useState(false),
1298
+ _useState6 = _slicedToArray(_useState5, 2),
1299
+ loading = _useState6[0],
1300
+ setLoading = _useState6[1];
1301
+ var _useState7 = useState(getStorageObject('mapItems', [])),
1302
+ _useState8 = _slicedToArray(_useState7, 2),
1303
+ mapItems = _useState8[0],
1304
+ setMapItems = _useState8[1];
1305
+ var _useState9 = useState(function () {
1306
+ return resetFilters ? null : getQuery(location);
1307
+ }),
1308
+ _useState10 = _slicedToArray(_useState9, 2),
1309
+ query = _useState10[0],
1310
+ setQuery = _useState10[1];
1311
+ var _useState11 = useState(getStorageObject("listingEntities", null)),
1312
+ _useState12 = _slicedToArray(_useState11, 2),
1313
+ listingEntities = _useState12[0],
1314
+ setListingEntities = _useState12[1];
1315
+ var _useState13 = useState(true),
1316
+ _useState14 = _slicedToArray(_useState13, 2),
1317
+ firstLoad = _useState14[0],
1318
+ setFirstLoad = _useState14[1];
1319
+ var _useState15 = useState(null),
1320
+ _useState16 = _slicedToArray(_useState15, 2),
1321
+ commuteLocation = _useState16[0],
1322
+ setCommuteLocation = _useState16[1];
1323
+ var _useState17 = useState(function () {
1324
+ return resetFilters ? {} : hasFiltersInURL(location) ? filtersFromURL(location).filters : getStorageObject('selectedFilters', {});
1325
+ }),
1326
+ _useState18 = _slicedToArray(_useState17, 2),
1327
+ selectedFilters = _useState18[0],
1328
+ setSelectedFilters = _useState18[1];
1329
+ var _useState19 = useState(),
1330
+ _useState20 = _slicedToArray(_useState19, 2),
1331
+ filterOptions = _useState20[0],
1332
+ setFilterOptions = _useState20[1];
1333
+ var _useState21 = useState(getStorageObject("recruiters", {})),
1334
+ _useState22 = _slicedToArray(_useState21, 2),
1335
+ recruiters = _useState22[0],
1336
+ setRecruiters = _useState22[1];
1337
+ var _useState23 = useState(false),
1338
+ _useState24 = _slicedToArray(_useState23, 2),
1339
+ filterDialogIsOpen = _useState24[0],
1340
+ setFilterDialogIsOpen = _useState24[1];
1341
+ var _useState25 = useState("listTab"),
1342
+ _useState26 = _slicedToArray(_useState25, 2),
1343
+ mobileTab = _useState26[0],
1344
+ setMobileTab = _useState26[1];
1345
+ var _useState27 = useState([]),
1346
+ _useState28 = _slicedToArray(_useState27, 2),
1347
+ favorites = _useState28[0],
1348
+ setFavorites = _useState28[1];
1349
+ var _useState29 = useState(false),
1350
+ _useState30 = _slicedToArray(_useState29, 2),
1351
+ filterByFavorites = _useState30[0],
1352
+ setFilterByFavorites = _useState30[1];
1353
+ useEffect(function () {
1354
+ var loadedFavorites = JSON.parse(localStorage.getItem('favorites')) || [];
1355
+ setFavorites(loadedFavorites);
1356
+ }, []);
1357
+ useEffect(function () {
1358
+ if (commuteLocation === null || commuteLocation === '') return;
1359
+ function fetchEntities() {
1360
+ return _fetchEntities.apply(this, arguments);
1361
+ }
1362
+ function _fetchEntities() {
1363
+ _fetchEntities = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
1364
+ var distinctEntityIds, fetchedEntities, newFilteredListings, i;
1365
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
1366
+ while (1) switch (_context.prev = _context.next) {
1367
+ case 0:
1368
+ distinctEntityIds = _toConsumableArray(new Set(allListings.map(function (listing) {
1369
+ return listing.entityId;
1370
+ })));
1371
+ _context.prev = 1;
1372
+ _context.next = 4;
1373
+ return getListingEntities(distinctEntityIds, "".concat(commuteLocation.lat, ", ").concat(commuteLocation.lng));
1374
+ case 4:
1375
+ fetchedEntities = _context.sent;
1376
+ setListingEntities(fetchedEntities);
1377
+ newFilteredListings = filteredListings;
1378
+ for (i = 0; i < allListings.length; i++) {
1379
+ if (newFilteredListings[i].entityId != -1) {
1380
+ newFilteredListings[i].fields.travelTime = fetchedEntities[newFilteredListings[i].entityId].travelTime;
1381
+ }
1382
+ }
1383
+ for (i = 0; i < newFilteredListings.length; i++) {
1384
+ if (newFilteredListings[i].entityId != -1) {
1385
+ newFilteredListings[i].fields.travelTime = fetchedEntities[newFilteredListings[i].entityId].travelTime;
1386
+ }
1387
+ }
1388
+ setFilteredListings(newFilteredListings);
1389
+ _context.next = 15;
1390
+ break;
1391
+ case 12:
1392
+ _context.prev = 12;
1393
+ _context.t0 = _context["catch"](1);
1394
+ console.error("Failed to fetch listing entities:", _context.t0);
1395
+ case 15:
1396
+ case "end":
1397
+ return _context.stop();
1398
+ }
1399
+ }, _callee, null, [[1, 12]]);
1400
+ }));
1401
+ return _fetchEntities.apply(this, arguments);
1402
+ }
1403
+ fetchEntities();
1404
+ }, [commuteLocation, allListings, siteConfig.companyId]);
1405
+ useEffect(function () {
1406
+ var handleFetchListings = /*#__PURE__*/function () {
1407
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
1408
+ var _yield$fetchListings, listingsResult, fetchedRecruiters, fetchedEntities, distinctItems;
1409
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
1410
+ while (1) switch (_context2.prev = _context2.next) {
1411
+ case 0:
1412
+ if (!getStorageObject('listings', []).length > 0) {
1413
+ setLoading(true);
1414
+ }
1415
+ _context2.prev = 1;
1416
+ _context2.next = 4;
1417
+ return fetchListings(query, siteConfig);
1418
+ case 4:
1419
+ _yield$fetchListings = _context2.sent;
1420
+ listingsResult = _yield$fetchListings.listingsResult;
1421
+ fetchedRecruiters = _yield$fetchListings.fetchedRecruiters;
1422
+ fetchedEntities = _yield$fetchListings.fetchedEntities;
1423
+ distinctItems = _yield$fetchListings.distinctItems;
1424
+ setAllListings(listingsResult);
1425
+ setRecruiters(fetchedRecruiters);
1426
+ setListingEntities(fetchedEntities);
1427
+ setMapItems(distinctItems);
1428
+ setStorageObject("mapItems", distinctItems);
1429
+ setStorageObject("listingEntities", fetchedEntities);
1430
+ setStorageObject("recruiters", fetchedRecruiters);
1431
+ setStorageObject("listings", listingsResult);
1432
+ _context2.next = 22;
1433
+ break;
1434
+ case 19:
1435
+ _context2.prev = 19;
1436
+ _context2.t0 = _context2["catch"](1);
1437
+ console.log(_context2.t0);
1438
+ case 22:
1439
+ setLoading(false);
1440
+ case 23:
1441
+ case "end":
1442
+ return _context2.stop();
1443
+ }
1444
+ }, _callee2, null, [[1, 19]]);
1445
+ }));
1446
+ return function handleFetchListings() {
1447
+ return _ref2.apply(this, arguments);
1448
+ };
1449
+ }();
1450
+ handleFetchListings();
1451
+ }, [query, siteConfig]);
1452
+ useEffect(function () {
1453
+ var processListings = function processListings() {
1454
+ var _applyFilters = applyFilters(allListings, selectedFilters, query, listingEntities, favorites, siteConfig),
1455
+ filteredListings = _applyFilters.filteredListings,
1456
+ mapItems = _applyFilters.mapItems;
1457
+ if (filterByFavorites) {
1458
+ filteredListings = filteredListings.filter(function (x) {
1459
+ return favorites.includes(x.id);
1460
+ });
1461
+ }
1462
+ setFilteredListings(filteredListings);
1463
+ if (firstLoad && hasFiltersInURL(location)) {
1464
+ var _filtersFromURL = filtersFromURL(location),
1465
+ filters = _filtersFromURL.filters;
1466
+ setSelectedFilters(filters);
1467
+ }
1468
+ if (firstLoad && selectedFilters) {
1469
+ updateURLWithFilters(selectedFilters, location, navigate, query);
1470
+ } else if (Object.keys(selectedFilters).length === 0 && !firstLoad) {
1471
+ localStorage.removeItem('selectedFilters');
1472
+ updateURLWithFilters(selectedFilters, location, navigate, query);
1473
+ } else if (!firstLoad) {
1474
+ setStorageObject('selectedFilters', selectedFilters);
1475
+ updateURLWithFilters(selectedFilters, location, navigate, query);
1476
+ }
1477
+ query != null ? localStorage.setItem('query', query) : localStorage.removeItem('query');
1478
+ setMapItems(mapItems);
1479
+ if (selectedFilters) {
1480
+ var keys = Object.keys(selectedFilters);
1481
+ var lastKey = keys[keys.length - 1];
1482
+ var options = generateFilterOptions(firstLoad ? allListings : filteredListings, allListings, siteConfig, filterOptions, lastKey, favorites);
1483
+ if (options) {
1484
+ setFilterOptions(options);
1485
+ if (firstLoad) setFirstLoad(false);
1486
+ }
1487
+ }
1488
+ };
1489
+ processListings();
1490
+ }, [selectedFilters, query, listingEntities, filterByFavorites, favorites]);
1491
+ var handleFilterListingsByLocation = function handleFilterListingsByLocation(selectedLocation) {
1492
+ var _filterListingsByLoca = filterListingsByLocation(allListings, selectedLocation, listingEntities),
1493
+ filteredListings = _filterListingsByLoca.filteredListings;
1494
+ setFilteredListings(filteredListings);
1495
+ //setMapItems(mapItems);
1496
+ };
1497
+ var handleSettingFavorites = function handleSettingFavorites(newFavorites) {
1498
+ if (newFavorites == null) {
1499
+ localStorage.removeItem('favorites');
1500
+ } else {
1501
+ setFavorites(newFavorites);
1502
+ localStorage.setItem('favorites', JSON.stringify(newFavorites));
1503
+ }
1504
+ };
1505
+ return /*#__PURE__*/React.createElement(MapListContext.Provider, {
1506
+ value: {
1507
+ loading: loading,
1508
+ allListings: allListings,
1509
+ filteredListings: filteredListings,
1510
+ mapItems: mapItems,
1511
+ query: query,
1512
+ setFilteredListings: setFilteredListings,
1513
+ setQuery: setQuery,
1514
+ listingEntities: listingEntities,
1515
+ selectedFilters: selectedFilters,
1516
+ setSelectedFilters: setSelectedFilters,
1517
+ filterOptions: filterOptions,
1518
+ recruiters: recruiters,
1519
+ handleFilterListingsByLocation: handleFilterListingsByLocation,
1520
+ filterDialogIsOpen: filterDialogIsOpen,
1521
+ setFilterDialogIsOpen: setFilterDialogIsOpen,
1522
+ setMobileTab: setMobileTab,
1523
+ mobileTab: mobileTab,
1524
+ siteConfig: siteConfig,
1525
+ favorites: favorites,
1526
+ handleSettingFavorites: handleSettingFavorites,
1527
+ setFilterByFavorites: setFilterByFavorites,
1528
+ filterByFavorites: filterByFavorites,
1529
+ commuteLocation: commuteLocation,
1530
+ setCommuteLocation: setCommuteLocation
1531
+ }
1532
+ }, children);
1533
+ };
1534
+
1535
+ var PageHead = function PageHead(_ref) {
1536
+ var _siteConfig$colors$ma, _siteConfig$colors;
1537
+ var description = _ref.description,
1538
+ keywords = _ref.keywords,
1539
+ title = _ref.title;
1540
+ var _useMapList = useMapList(),
1541
+ siteConfig = _useMapList.siteConfig;
1542
+ //const router = useRouter();
1543
+ var defaultTitle = siteConfig.title;
1544
+ var pageTitle = title || defaultTitle;
1545
+ var metaDescription = description || siteConfig.description;
1546
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("title", null, title ? "".concat(title, " | ").concat(defaultTitle) : defaultTitle), /*#__PURE__*/React.createElement("meta", {
1547
+ name: "description",
1548
+ content: metaDescription
1549
+ }), (keywords === null || keywords === void 0 ? void 0 : keywords.length) > 0 ? /*#__PURE__*/React.createElement("meta", {
1550
+ name: "keywords",
1551
+ content: "".concat(keywords.join(', '))
1552
+ }) : null, /*#__PURE__*/React.createElement("meta", {
1553
+ property: "og:title",
1554
+ content: pageTitle
1555
+ }), /*#__PURE__*/React.createElement("meta", {
1556
+ property: "og:description",
1557
+ content: metaDescription
1558
+ }), (siteConfig === null || siteConfig === void 0 ? void 0 : siteConfig.shareImage) && /*#__PURE__*/React.createElement("meta", {
1559
+ property: "og:image",
1560
+ content: "/".concat(siteConfig.shareImage)
1561
+ }), /*#__PURE__*/React.createElement("meta", {
1562
+ property: "og:type",
1563
+ content: "website"
1564
+ }), /*#__PURE__*/React.createElement("meta", {
1565
+ name: "twitter:card",
1566
+ content: "summary"
1567
+ }), /*#__PURE__*/React.createElement("meta", {
1568
+ name: "twitter:creator",
1569
+ content: siteConfig === null || siteConfig === void 0 ? void 0 : siteConfig.author
1570
+ }), /*#__PURE__*/React.createElement("meta", {
1571
+ name: "twitter:title",
1572
+ content: pageTitle
1573
+ }), /*#__PURE__*/React.createElement("meta", {
1574
+ name: "twitter:description",
1575
+ content: metaDescription
1576
+ }), /*#__PURE__*/React.createElement("script", {
1577
+ type: "application/ld+json"
1578
+ }, "\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\"@type\": \"WebPage\",\n\t\t\t\t\t\t\t\"url\": \"pathame\",\n\t\t\t\t\t\t\t\"legalName\": \"".concat(defaultTitle, "\",\n\t\t\t\t\t\t\t\"name\": \"").concat(pageTitle, "\",\n\t\t\t\t\t\t\t\"about\": \"").concat(metaDescription, "\",\n\t\t\t\t\t\t\t\"brand\": \"").concat(defaultTitle, "\"\n\t\t\t\t\t\t}\n\t\t\t\t")), /*#__PURE__*/React.createElement("link", {
1579
+ rel: "icon",
1580
+ href: "/favicon.svg",
1581
+ type: "image/svg+xml"
1582
+ }), /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("link", {
1583
+ rel: "icon",
1584
+ href: "/favicon.ico",
1585
+ sizes: "any"
1586
+ }), /*#__PURE__*/React.createElement("link", {
1587
+ rel: "apple-touch-icon",
1588
+ href: "/apple-touch-icon.png"
1589
+ }), /*#__PURE__*/React.createElement("link", {
1590
+ rel: "manifest",
1591
+ href: "/manifest.webmanifest"
1592
+ }), /*#__PURE__*/React.createElement("meta", {
1593
+ name: "msapplication-TileColor",
1594
+ content: (_siteConfig$colors$ma = siteConfig === null || siteConfig === void 0 || (_siteConfig$colors = siteConfig.colors) === null || _siteConfig$colors === void 0 || (_siteConfig$colors = _siteConfig$colors.manifest) === null || _siteConfig$colors === void 0 ? void 0 : _siteConfig$colors.tileColor) !== null && _siteConfig$colors$ma !== void 0 ? _siteConfig$colors$ma : '#000'
1595
+ })));
1596
+ };
1597
+
1598
+ var _excluded$f = ["as", "children", "delay", "opacity", "scale", "y"];
1599
+ var SlideIn = function SlideIn(_ref) {
1600
+ _ref.as;
1601
+ var children = _ref.children;
1602
+ _ref.delay;
1603
+ _ref.opacity;
1604
+ var _ref$scale = _ref.scale,
1605
+ scale = _ref$scale === void 0 ? 0.95 : _ref$scale;
1606
+ _ref.y;
1607
+ var rest = _objectWithoutProperties(_ref, _excluded$f);
1608
+ var ref = useRef();
1609
+ var _useScroll = useScroll({
1610
+ target: ref,
1611
+ offset: ["start end", "start 0.85"]
1612
+ }),
1613
+ scrollYProgress = _useScroll.scrollYProgress;
1614
+ var scaleContained = useTransform(scrollYProgress, [0, 1], [scale, 1]);
1615
+ var scaleSpring = useSpring(scaleContained, {
1616
+ damping: 100,
1617
+ stiffness: 1000
1618
+ });
1619
+ return /*#__PURE__*/React.createElement(motion.div, _extends({
1620
+ ref: ref,
1621
+ className: "h-full",
1622
+ style: {
1623
+ scale: scaleSpring
1624
+ }
1625
+ }, rest), children);
1626
+ };
1627
+
1628
+ var _excluded$e = ["as", "isAnimated", "children", "className", "autoRows", "columns", "gap"];
1629
+ var Grid = /*#__PURE__*/forwardRef(function (props, ref) {
1630
+ var _props$as = props.as,
1631
+ as = _props$as === void 0 ? 'div' : _props$as,
1632
+ _props$isAnimated = props.isAnimated,
1633
+ isAnimated = _props$isAnimated === void 0 ? true : _props$isAnimated,
1634
+ children = props.children,
1635
+ className = props.className,
1636
+ _props$autoRows = props.autoRows,
1637
+ autoRows = _props$autoRows === void 0 ? true : _props$autoRows,
1638
+ _props$columns = props.columns,
1639
+ columns = _props$columns === void 0 ? 'md:grid-cols-2' : _props$columns,
1640
+ _props$gap = props.gap,
1641
+ gap = _props$gap === void 0 ? 'gap-12 lg:gap-16' : _props$gap,
1642
+ rest = _objectWithoutProperties(props, _excluded$e);
1643
+ var Container = as;
1644
+ return isAnimated ? /*#__PURE__*/React.createElement(SlideIn, null, /*#__PURE__*/React.createElement(Container, _extends({
1645
+ ref: ref,
1646
+ className: twMerge('grid', gap, autoRows ? 'auto-rows-min' : '', 'grid-cols-1', columns, className !== null && className !== void 0 ? className : '')
1647
+ }, rest), children)) : /*#__PURE__*/React.createElement(Container, _extends({
1648
+ ref: ref,
1649
+ className: twMerge('grid', gap, autoRows ? 'auto-rows-min' : '', 'grid-cols-1', columns, className !== null && className !== void 0 ? className : '')
1650
+ }, rest), children);
1651
+ });
1652
+ var GridItem = function GridItem(_ref) {
1653
+ var _ref$as = _ref.as,
1654
+ as = _ref$as === void 0 ? 'div' : _ref$as,
1655
+ children = _ref.children,
1656
+ className = _ref.className;
1657
+ var Container = as;
1658
+ return /*#__PURE__*/React.createElement(Container, {
1659
+ className: className !== null && className !== void 0 ? className : ''
1660
+ }, children);
1661
+ };
1662
+ Grid.Item = GridItem;
1663
+ Grid.displayName = 'Grid';
1664
+
1665
+ var _excluded$d = ["className", "size", "icon", "iconClasses", "title"];
1666
+ var IconContained = function IconContained(_ref) {
1667
+ var className = _ref.className,
1668
+ size = _ref.size,
1669
+ icon = _ref.icon,
1670
+ iconClasses = _ref.iconClasses,
1671
+ title = _ref.title,
1672
+ iconProps = _objectWithoutProperties(_ref, _excluded$d);
1673
+ return /*#__PURE__*/React.createElement("span", {
1674
+ title: title,
1675
+ className: "\n\t\t\t\tinline-block align-middle\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : '', "\n\t\t\t\t").concat(size !== null && size !== void 0 ? size : '', "\n\t\t\t")
1676
+ }, /*#__PURE__*/React.createElement(Icon, _extends({
1677
+ icon: icon,
1678
+ className: "\n\t\t\t\t\t".concat(iconClasses !== null && iconClasses !== void 0 ? iconClasses : '', "\n\t\t\t\t\t").concat(size !== null && size !== void 0 ? size : '', "\n\t\t\t\t")
1679
+ }, iconProps)));
1680
+ };
1681
+
1682
+ var _excluded$c = ["children", "href", "className", "size", "variant", "isBlock", "hasUnderline", "target"],
1683
+ _excluded2$3 = ["children", "href", "className", "activeClassName", "partiallyActive", "size", "variant", "isBlock", "hasUnderline"],
1684
+ _excluded3$2 = ["children", "href", "className", "size", "variant", "isBlock", "hasUnderline"],
1685
+ _excluded4$2 = ["children", "type", "className", "size", "variant", "isBlock", "hasUnderline"];
1686
+ var linkDefaultClasses = "normal-case text-inherit !font-[inherit] [font-weight:inherit] !p-0 rounded-none";
1687
+ var underlineClasses = "!underline decoration-1 underline-offset-2 hover:!no-underline focus:!no-underline";
1688
+ var ButtonVariant = {
1689
+ none: '',
1690
+ primary: 'bg-primary border border-primary text-white hover:bg-opacity-70 focus:bg-opacity-70',
1691
+ secondary: 'bg-secondary border border-secondary text-white hover:bg-opacity-70 focus:bg-opacity-70',
1692
+ outline: 'bg-transparent border border-primary text-primary hover:bg-primaryDark hover:border-primaryDark hover:text-white focus:bg-primaryDark focus:border-primaryDark focus:text-white',
1693
+ link: "".concat(linkDefaultClasses, " text-primary hover:text-uiText focus:text-uiText"),
1694
+ icon: 'opacity-100 hover:opacity-70 focus:opacity-70'
1695
+ };
1696
+ var ButtonSize = {
1697
+ none: '',
1698
+ "default": 'py-2 px-6 text-base',
1699
+ sq: 'p-2.5',
1700
+ sqsm: 'p-1',
1701
+ xs: 'py-1.5 px-3 text-xs',
1702
+ sm: 'py-1.5 px-4 text-sm',
1703
+ lg: 'py-4 px-10 text-lg'
1704
+ };
1705
+ var ButtonDefaults = {
1706
+ style: 'group font-medium uppercase text-center rounded transition',
1707
+ size: ButtonSize["default"],
1708
+ variant: ButtonVariant.primary,
1709
+ block: 'block w-full'
1710
+ };
1711
+ var linkVariants = function linkVariants(variant) {
1712
+ return variant === 'link';
1713
+ };
1714
+ var buttonClasses = function buttonClasses(variant, size, isBlock, hasUnderline, className) {
1715
+ return twMerge(isBlock ? ButtonDefaults.block : linkVariants(variant) ? 'inline' : 'inline-block', ButtonDefaults.style, variant ? ButtonVariant[variant] : ButtonDefaults.variant, size ? ButtonSize[size] : ButtonDefaults.size, hasUnderline ? underlineClasses : '', className !== null && className !== void 0 ? className : '');
1716
+ };
1717
+ var Button = function Button(_ref) {
1718
+ var children = _ref.children;
1719
+ return {
1720
+ children: children
1721
+ };
1722
+ };
1723
+ var Anchor = function Anchor(_ref2) {
1724
+ var children = _ref2.children,
1725
+ href = _ref2.href,
1726
+ className = _ref2.className,
1727
+ size = _ref2.size,
1728
+ variant = _ref2.variant,
1729
+ isBlock = _ref2.isBlock,
1730
+ hasUnderline = _ref2.hasUnderline,
1731
+ _ref2$target = _ref2.target,
1732
+ target = _ref2$target === void 0 ? '_blank' : _ref2$target,
1733
+ rest = _objectWithoutProperties(_ref2, _excluded$c);
1734
+ return /*#__PURE__*/React.createElement("a", _extends({
1735
+ href: href,
1736
+ target: target,
1737
+ className: buttonClasses(variant, size, isBlock, hasUnderline, className),
1738
+ onClick: href === '#' ? function (e) {
1739
+ e.preventDefault();
1740
+ } : null
1741
+ }, rest), children);
1742
+ };
1743
+ var AnchorLink = function AnchorLink(_ref3) {
1744
+ var children = _ref3.children,
1745
+ href = _ref3.href,
1746
+ className = _ref3.className,
1747
+ activeClassName = _ref3.activeClassName,
1748
+ _ref3$partiallyActive = _ref3.partiallyActive,
1749
+ partiallyActive = _ref3$partiallyActive === void 0 ? false : _ref3$partiallyActive,
1750
+ size = _ref3.size,
1751
+ variant = _ref3.variant,
1752
+ isBlock = _ref3.isBlock,
1753
+ hasUnderline = _ref3.hasUnderline,
1754
+ rest = _objectWithoutProperties(_ref3, _excluded2$3);
1755
+ var router = useRouter();
1756
+ return /*#__PURE__*/React.createElement(Link, _extends({
1757
+ href: href,
1758
+ className: "\n\t\t\t\t".concat(buttonClasses(variant, size, isBlock, hasUnderline, className), "\n\t\t\t\t").concat(activeClassName && router.pathname === href || router.pathname.startsWith(href) && partiallyActive ? activeClassName : '', "\n\t\t\t")
1759
+ }, rest), children);
1760
+ };
1761
+ var ScrollAnchor = /*#__PURE__*/forwardRef(function (props, ref) {
1762
+ var children = props.children,
1763
+ href = props.href,
1764
+ className = props.className,
1765
+ size = props.size,
1766
+ variant = props.variant,
1767
+ isBlock = props.isBlock,
1768
+ hasUnderline = props.hasUnderline,
1769
+ rest = _objectWithoutProperties(props, _excluded3$2);
1770
+ return /*#__PURE__*/React.createElement(Link, _extends({
1771
+ ref: ref,
1772
+ href: "#".concat(href),
1773
+ scroll: false,
1774
+ className: buttonClasses(variant, size, isBlock, hasUnderline, className)
1775
+ }, rest), children);
1776
+ });
1777
+ var Btn = /*#__PURE__*/forwardRef(function (props, ref) {
1778
+ var children = props.children,
1779
+ _props$type = props.type,
1780
+ type = _props$type === void 0 ? 'button' : _props$type,
1781
+ className = props.className,
1782
+ size = props.size,
1783
+ variant = props.variant,
1784
+ isBlock = props.isBlock,
1785
+ hasUnderline = props.hasUnderline,
1786
+ rest = _objectWithoutProperties(props, _excluded4$2);
1787
+ return /*#__PURE__*/React.createElement("button", _extends({
1788
+ ref: ref,
1789
+ type: type,
1790
+ className: buttonClasses(variant, size, isBlock, hasUnderline, className)
1791
+ }, rest), children);
1792
+ });
1793
+ var ButtonBody = function ButtonBody(_ref4) {
1794
+ var children = _ref4.children,
1795
+ className = _ref4.className;
1796
+ return /*#__PURE__*/React.createElement("span", {
1797
+ className: twMerge('inline-flex w-full items-center justify-between gap-1.5', className !== null && className !== void 0 ? className : '')
1798
+ }, children);
1799
+ };
1800
+ var ButtonIcon = function ButtonIcon(_ref5) {
1801
+ var icon = _ref5.icon,
1802
+ _ref5$size = _ref5.size,
1803
+ size = _ref5$size === void 0 ? 'w-4 h-4' : _ref5$size,
1804
+ className = _ref5.className;
1805
+ return /*#__PURE__*/React.createElement(IconContained, {
1806
+ icon: icon,
1807
+ size: size,
1808
+ className: className !== null && className !== void 0 ? className : ''
1809
+ });
1810
+ };
1811
+ Button.Anchor = Anchor;
1812
+ Button.Link = AnchorLink;
1813
+ Button.Scroll = ScrollAnchor;
1814
+ Button.Btn = Btn;
1815
+ Button.Body = ButtonBody;
1816
+ Button.Icon = ButtonIcon;
1817
+ Btn.displayName = 'Button:Button';
1818
+ ScrollAnchor.displayName = 'Button:ScrollAnchor';
1819
+
1820
+ var _excluded$b = ["as", "className", "hasShadow", "image", "body", "children", "footer"],
1821
+ _excluded2$2 = ["as", "href", "className", "hasShadow", "image", "body", "children", "footer"],
1822
+ _excluded3$1 = ["image", "alt", "className", "imageClassName"],
1823
+ _excluded4$1 = ["as", "children", "className"];
1824
+ var cardClasses = function cardClasses(className, hasShadow) {
1825
+ return twMerge('relative flex flex-wrap flex-col bg-clip-border break-words bg-white border border-gray-100', hasShadow ? 'shadow-lg' : '', className !== null && className !== void 0 ? className : '');
1826
+ };
1827
+ var Card = function Card(_ref) {
1828
+ var children = _ref.children;
1829
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
1830
+ };
1831
+ var CardDefault = /*#__PURE__*/forwardRef(function (_ref2, ref) {
1832
+ var _ref2$as = _ref2.as,
1833
+ as = _ref2$as === void 0 ? 'div' : _ref2$as,
1834
+ className = _ref2.className,
1835
+ _ref2$hasShadow = _ref2.hasShadow,
1836
+ hasShadow = _ref2$hasShadow === void 0 ? false : _ref2$hasShadow,
1837
+ image = _ref2.image,
1838
+ body = _ref2.body,
1839
+ children = _ref2.children,
1840
+ footer = _ref2.footer,
1841
+ rest = _objectWithoutProperties(_ref2, _excluded$b);
1842
+ var Container = as;
1843
+ return /*#__PURE__*/React.createElement(Container, _extends({
1844
+ ref: ref,
1845
+ className: cardClasses(className, hasShadow)
1846
+ }, rest), image, children, body, footer);
1847
+ });
1848
+ var CardLink = function CardLink(_ref3) {
1849
+ var _ref3$as = _ref3.as,
1850
+ as = _ref3$as === void 0 ? 'link' : _ref3$as,
1851
+ href = _ref3.href,
1852
+ className = _ref3.className,
1853
+ _ref3$hasShadow = _ref3.hasShadow,
1854
+ hasShadow = _ref3$hasShadow === void 0 ? false : _ref3$hasShadow,
1855
+ image = _ref3.image,
1856
+ body = _ref3.body,
1857
+ children = _ref3.children,
1858
+ footer = _ref3.footer,
1859
+ rest = _objectWithoutProperties(_ref3, _excluded2$2);
1860
+ var Container = as === 'link' ? Link : as;
1861
+ return /*#__PURE__*/React.createElement(Container, _extends({
1862
+ to: href,
1863
+ className: twMerge(cardClasses(className, hasShadow), 'group transition hover:shadow-xl hover:border-indigo-300 focus:shadow-xl focus:border-indigo-300')
1864
+ }, rest), image && image, children, body && body, footer && footer);
1865
+ };
1866
+ var CardImage = function CardImage(_ref4) {
1867
+ var image = _ref4.image,
1868
+ alt = _ref4.alt,
1869
+ className = _ref4.className,
1870
+ imageClassName = _ref4.imageClassName,
1871
+ rest = _objectWithoutProperties(_ref4, _excluded3$1);
1872
+ return /*#__PURE__*/React.createElement("div", {
1873
+ className: twMerge('w-full', className !== null && className !== void 0 ? className : '')
1874
+ }, /*#__PURE__*/React.createElement("img", _extends({
1875
+ src: typeof image === 'string' ? image : image.src,
1876
+ width: image.width ? image.width : null,
1877
+ height: image.height ? image.height : null,
1878
+ alt: alt !== null && alt !== void 0 ? alt : '',
1879
+ className: twMerge('w-full h-auto', imageClassName !== null && imageClassName !== void 0 ? imageClassName : '')
1880
+ }, rest)));
1881
+ };
1882
+ var CardBody = function CardBody(_ref5) {
1883
+ var children = _ref5.children,
1884
+ className = _ref5.className;
1885
+ return /*#__PURE__*/React.createElement("div", {
1886
+ className: twMerge('flex-auto p-4 md:px-6 lg:px-8', className !== null && className !== void 0 ? className : '')
1887
+ }, children);
1888
+ };
1889
+ var CardTitle$1 = function CardTitle(_ref6) {
1890
+ var _ref6$as = _ref6.as,
1891
+ as = _ref6$as === void 0 ? 'h3' : _ref6$as,
1892
+ children = _ref6.children,
1893
+ className = _ref6.className,
1894
+ rest = _objectWithoutProperties(_ref6, _excluded4$1);
1895
+ var Title = as;
1896
+ return /*#__PURE__*/React.createElement(Title, _extends({
1897
+ className: twMerge('text-2xl font-bold', className !== null && className !== void 0 ? className : '')
1898
+ }, rest), children);
1899
+ };
1900
+ var CardFooter = function CardFooter(_ref7) {
1901
+ var children = _ref7.children,
1902
+ className = _ref7.className;
1903
+ return /*#__PURE__*/React.createElement("div", {
1904
+ className: twMerge('py-2 px-4 md:px-6 lg:px-8 bg-gray-100', className !== null && className !== void 0 ? className : '')
1905
+ }, children);
1906
+ };
1907
+ Card.Default = CardDefault;
1908
+ Card.Link = CardLink;
1909
+ Card.Image = CardImage;
1910
+ Card.Body = CardBody;
1911
+ Card.Title = CardTitle$1;
1912
+ Card.Footer = CardFooter;
1913
+ CardDefault.displayName = 'Card:Default';
1914
+
1915
+ var _excluded$a = ["as", "className", "children"],
1916
+ _excluded2$1 = ["as", "children", "icon", "className"];
1917
+ var CardFilter = function CardFilter(_ref) {
1918
+ var as = _ref.as,
1919
+ className = _ref.className,
1920
+ children = _ref.children,
1921
+ rest = _objectWithoutProperties(_ref, _excluded$a);
1922
+ return /*#__PURE__*/React.createElement(Card.Default, _extends({
1923
+ as: as,
1924
+ className: "\n\t\t\t\tbg-uiAccent/5 border border-uiAccent/20 rounded\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : '', "\n\t\t\t")
1925
+ }, rest), /*#__PURE__*/React.createElement(Card.Body, {
1926
+ className: "!p-3"
1927
+ }, children));
1928
+ };
1929
+ var CardTitle = function CardTitle(_ref2) {
1930
+ var as = _ref2.as,
1931
+ children = _ref2.children,
1932
+ icon = _ref2.icon,
1933
+ className = _ref2.className,
1934
+ rest = _objectWithoutProperties(_ref2, _excluded2$1);
1935
+ return /*#__PURE__*/React.createElement(Card.Title, _extends({
1936
+ as: as,
1937
+ className: "\n\t\t\t\tflex items-center gap-2 mb-2 text-xs uppercase font-bold text-uiText\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : '', "\n\t\t\t")
1938
+ }, rest), /*#__PURE__*/React.createElement(IconContained, {
1939
+ icon: icon,
1940
+ size: "w-5 h-5",
1941
+ className: "text-uiAccent/30"
1942
+ }), children);
1943
+ };
1944
+ CardFilter.Title = CardTitle;
1945
+
1946
+ var Search = function Search(_ref) {
1947
+ var _ref$inputPlaceholder = _ref.inputPlaceholder,
1948
+ inputPlaceholder = _ref$inputPlaceholder === void 0 ? "Keywords" : _ref$inputPlaceholder,
1949
+ _ref$showSearchIcon = _ref.showSearchIcon,
1950
+ showSearchIcon = _ref$showSearchIcon === void 0 ? false : _ref$showSearchIcon,
1951
+ className = _ref.className,
1952
+ labelClassName = _ref.labelClassName;
1953
+ var _useState = useState(query != null ? query : ""),
1954
+ _useState2 = _slicedToArray(_useState, 2),
1955
+ inputValue = _useState2[0],
1956
+ setInputValue = _useState2[1];
1957
+ var debounceTimer = useRef(null);
1958
+ var _useMapList = useMapList(),
1959
+ query = _useMapList.query,
1960
+ setQuery = _useMapList.setQuery,
1961
+ siteConfig = _useMapList.siteConfig;
1962
+ var handleInputChange = function handleInputChange(e) {
1963
+ setInputValue(e.target.value);
1964
+ if (debounceTimer.current) {
1965
+ clearTimeout(debounceTimer.current);
1966
+ }
1967
+ debounceTimer.current = setTimeout(function () {
1968
+ setQuery(e.target.value);
1969
+ }, 500);
1970
+ };
1971
+ var handleReset = function handleReset() {
1972
+ setInputValue("");
1973
+ setQuery("");
1974
+ };
1975
+ useEffect(function () {
1976
+ if (query == null) {
1977
+ setInputValue("");
1978
+ }
1979
+ }, [query]);
1980
+ inputPlaceholder = siteConfig.searchConfig.placeholder;
1981
+ return /*#__PURE__*/React.createElement(CardFilter, {
1982
+ as: "form",
1983
+ className: className !== null && className !== void 0 ? className : ""
1984
+ }, /*#__PURE__*/React.createElement(CardFilter.Title, {
1985
+ as: "label",
1986
+ icon: "fluent:search-12-filled",
1987
+ className: labelClassName !== null && labelClassName !== void 0 ? labelClassName : ""
1988
+ }, /*#__PURE__*/React.createElement("span", null, siteConfig.searchConfig.label)), /*#__PURE__*/React.createElement("div", {
1989
+ className: "relative flex items-center px-2 rounded bg-white border border-uiAccent/20 focus-within:ring-1 focus-within:ring-uiAccent"
1990
+ }, showSearchIcon && /*#__PURE__*/React.createElement(IconContained, {
1991
+ icon: "fluent:search-12-filled",
1992
+ size: "w-4 h-4",
1993
+ className: "mr-2 text-uiAccent/50"
1994
+ }), /*#__PURE__*/React.createElement("input", {
1995
+ type: "text",
1996
+ name: "search",
1997
+ onKeyDown: function onKeyDown(e) {
1998
+ if (e.key === 'Enter') {
1999
+ e.preventDefault();
2000
+ }
2001
+ },
2002
+ placeholder: inputPlaceholder,
2003
+ value: inputValue,
2004
+ className: "w-full px-0 py-2 text-sm border-0 transition-colors placeholder:text-uiText/50 focus:ring-0 focus:outline-none",
2005
+ onChange: handleInputChange
2006
+ }), /*#__PURE__*/React.createElement(Button.Btn, {
2007
+ type: "reset",
2008
+ variant: "icon",
2009
+ size: "sqsm",
2010
+ className: "transition-opacity ".concat(inputValue ? "opacity-100" : "opacity-0 pointer-events-none"),
2011
+ onClick: handleReset
2012
+ }, /*#__PURE__*/React.createElement("span", {
2013
+ className: "sr-only"
2014
+ }, "Clear"), /*#__PURE__*/React.createElement(Button.Icon, {
2015
+ icon: "uil:times",
2016
+ className: "text-uiAccent"
2017
+ }))));
2018
+ };
2019
+
2020
+ var isBrowser = typeof window !== 'undefined';
2021
+ if (isBrowser) {
2022
+ window.dataLayer = window.dataLayer || [];
2023
+ }
2024
+ var trackEvent = function trackEvent(category, action, label, value) {
2025
+ if (isBrowser && window.dataLayer) {
2026
+ window.dataLayer.push({
2027
+ 'event': 'eventTracking',
2028
+ 'category': category,
2029
+ 'action': action,
2030
+ 'label': label,
2031
+ 'value': value
2032
+ });
2033
+ }
2034
+ };
2035
+
2036
+ var _excluded$9 = ["id", "children", "className"],
2037
+ _excluded2 = ["children", "className"],
2038
+ _excluded3 = ["header", "headerClassName", "iconClassName", "children", "className"],
2039
+ _excluded4 = ["children", "className"],
2040
+ _excluded5 = ["children", "className", "bodyClassName"];
2041
+ var Accordion = function Accordion(_ref) {
2042
+ var className = _ref.className,
2043
+ _ref$type = _ref.type,
2044
+ type = _ref$type === void 0 ? 'single' : _ref$type,
2045
+ defaultValue = _ref.defaultValue,
2046
+ _ref$collapsible = _ref.collapsible,
2047
+ collapsible = _ref$collapsible === void 0 ? true : _ref$collapsible,
2048
+ children = _ref.children;
2049
+ return /*#__PURE__*/React.createElement(RadixAccordion.Root, {
2050
+ type: type,
2051
+ value: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null,
2052
+ collapsible: collapsible,
2053
+ className: className !== null && className !== void 0 ? className : '',
2054
+ onValueChange: function onValueChange(value) {
2055
+ return trackEvent('Engagement', 'Open Accordion', value);
2056
+ }
2057
+ }, children);
2058
+ };
2059
+ var AccordionItem = /*#__PURE__*/forwardRef(function (_ref2, forwardedRef) {
2060
+ var id = _ref2.id,
2061
+ children = _ref2.children,
2062
+ className = _ref2.className,
2063
+ props = _objectWithoutProperties(_ref2, _excluded$9);
2064
+ return /*#__PURE__*/React.createElement(RadixAccordion.Item, _extends({
2065
+ ref: forwardedRef,
2066
+ value: id,
2067
+ className: className !== null && className !== void 0 ? className : ''
2068
+ }, props), children);
2069
+ });
2070
+ var AccordionTrigger = /*#__PURE__*/forwardRef(function (_ref3, forwardedRef) {
2071
+ var children = _ref3.children,
2072
+ className = _ref3.className,
2073
+ props = _objectWithoutProperties(_ref3, _excluded2);
2074
+ return /*#__PURE__*/React.createElement(RadixAccordion.Header, {
2075
+ asChild: true
2076
+ }, /*#__PURE__*/React.createElement(RadixAccordion.Trigger, _extends({
2077
+ ref: forwardedRef,
2078
+ className: twMerge('group flex justify-between w-full p-4 font-bold text-left text-uiText focus:outline-none focus-visible:ring focus-visible:ring-uiAccent focus-visible:ring-opacity-75 hover:text-primary focus:text-primary transition data-[state=open]:text-primary', className !== null && className !== void 0 ? className : '')
2079
+ }, props), children, /*#__PURE__*/React.createElement(IconContained, {
2080
+ icon: "uil:angle-down",
2081
+ size: "w-5 h-5",
2082
+ className: "transition-transform group-data-[state=open]:!rotate-180",
2083
+ "aria-hidden": "true"
2084
+ })));
2085
+ });
2086
+ var AccordionTriggerHasHeader = /*#__PURE__*/forwardRef(function (_ref4, forwardedRef) {
2087
+ var header = _ref4.header,
2088
+ headerClassName = _ref4.headerClassName,
2089
+ iconClassName = _ref4.iconClassName,
2090
+ children = _ref4.children,
2091
+ className = _ref4.className,
2092
+ props = _objectWithoutProperties(_ref4, _excluded3);
2093
+ return /*#__PURE__*/React.createElement(RadixAccordion.Header, {
2094
+ className: twMerge('group flex items-start justify-between w-full p-4 pr-3 font-bold text-left text-uiText focus:outline-none focus-visible:ring focus-visible:ring-uiAccent focus-visible:ring-opacity-75 hover:text-primary focus:text-primary transition data-[state=open]:text-primary', headerClassName !== null && headerClassName !== void 0 ? headerClassName : '')
2095
+ }, /*#__PURE__*/React.createElement(RadixAccordion.Trigger, _extends({
2096
+ ref: forwardedRef,
2097
+ className: twMerge('flex items-center justify-between w-full', className !== null && className !== void 0 ? className : '')
2098
+ }, props), children, /*#__PURE__*/React.createElement(IconContained, {
2099
+ icon: "uil:angle-down",
2100
+ size: "w-5 h-5",
2101
+ className: twMerge('transition-transform group-data-[state=open]:!rotate-180', iconClassName !== null && iconClassName !== void 0 ? iconClassName : ''),
2102
+ "aria-hidden": "true"
2103
+ }), header));
2104
+ });
2105
+ var AccordionTriggerBlank = /*#__PURE__*/forwardRef(function (_ref5, forwardedRef) {
2106
+ var children = _ref5.children;
2107
+ _ref5.className;
2108
+ var props = _objectWithoutProperties(_ref5, _excluded4);
2109
+ return /*#__PURE__*/React.createElement(RadixAccordion.Header, {
2110
+ asChild: true
2111
+ }, /*#__PURE__*/React.createElement(RadixAccordion.Trigger, _extends({
2112
+ asChild: true,
2113
+ ref: forwardedRef
2114
+ }, props), children));
2115
+ });
2116
+ var AccordionContent = /*#__PURE__*/forwardRef(function (_ref6, forwardedRef) {
2117
+ var children = _ref6.children,
2118
+ className = _ref6.className,
2119
+ bodyClassName = _ref6.bodyClassName,
2120
+ props = _objectWithoutProperties(_ref6, _excluded5);
2121
+ return /*#__PURE__*/React.createElement(RadixAccordion.Content, _extends({
2122
+ ref: forwardedRef,
2123
+ className: twMerge('data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp overflow-hidden', className !== null && className !== void 0 ? className : '')
2124
+ }, props), /*#__PURE__*/React.createElement("div", {
2125
+ className: twMerge('p-4 pt-0.5', bodyClassName !== null && bodyClassName !== void 0 ? bodyClassName : '')
2126
+ }, children));
2127
+ });
2128
+ Accordion.Item = AccordionItem;
2129
+ Accordion.Trigger = AccordionTrigger;
2130
+ Accordion.Trigger.Blank = AccordionTriggerBlank;
2131
+ Accordion.Trigger.HasHeader = AccordionTriggerHasHeader;
2132
+ Accordion.Content = AccordionContent;
2133
+ AccordionItem.displayName = 'AccordionItem';
2134
+ AccordionTrigger.displayName = 'AccordionTrigger';
2135
+ AccordionTriggerBlank.displayName = 'AccordionTriggerBlank';
2136
+ AccordionTriggerHasHeader.displayName = 'AccordionTriggerHasHeader';
2137
+ AccordionContent.displayName = 'AccordionContent';
2138
+
2139
+ var _excluded$8 = ["className", "item", "type", "itemKey", "hasCount", "field", "selectedFilters", "setSelectedFilters"];
2140
+ var FilterItem = function FilterItem(_ref) {
2141
+ var _selectedFilters$fiel;
2142
+ var className = _ref.className,
2143
+ item = _ref.item,
2144
+ _ref$type = _ref.type,
2145
+ type = _ref$type === void 0 ? 'checkbox' : _ref$type,
2146
+ _ref$itemKey = _ref.itemKey,
2147
+ itemKey = _ref$itemKey === void 0 ? null : _ref$itemKey,
2148
+ _ref$hasCount = _ref.hasCount,
2149
+ hasCount = _ref$hasCount === void 0 ? true : _ref$hasCount,
2150
+ field = _ref.field,
2151
+ selectedFilters = _ref.selectedFilters,
2152
+ setSelectedFilters = _ref.setSelectedFilters,
2153
+ rest = _objectWithoutProperties(_ref, _excluded$8);
2154
+ var itemName = item.name ? item.name : item;
2155
+ itemKey = itemKey === null ? itemName : itemKey;
2156
+ var isActive = selectedFilters != undefined && !!((_selectedFilters$fiel = selectedFilters[field]) !== null && _selectedFilters$fiel !== void 0 && _selectedFilters$fiel[itemKey]);
2157
+ var changeHandler = function changeHandler() {
2158
+ setSelectedFilters(function (prevFilters) {
2159
+ var updatedFilters = _objectSpread2({}, prevFilters);
2160
+ if (!isActive) {
2161
+ if (!updatedFilters[field]) {
2162
+ updatedFilters[field] = {};
2163
+ }
2164
+ updatedFilters[field][itemKey] = true;
2165
+ return updatedFilters;
2166
+ }
2167
+ delete updatedFilters[field][itemKey];
2168
+ if (Object.keys(updatedFilters[field]).length === 0) {
2169
+ delete updatedFilters[field];
2170
+ }
2171
+ return updatedFilters;
2172
+ });
2173
+ };
2174
+ var _useState = useState(isActive),
2175
+ _useState2 = _slicedToArray(_useState, 2),
2176
+ activeItem = _useState2[0],
2177
+ setActiveItem = _useState2[1];
2178
+ useEffect(function () {
2179
+ var _Object$keys;
2180
+ if (selectedFilters && selectedFilters[field] && ((_Object$keys = Object.keys(selectedFilters[field])) === null || _Object$keys === void 0 ? void 0 : _Object$keys.length) > 0) return;else if (activeItem === true) {
2181
+ setActiveItem(false);
2182
+ }
2183
+ }, [selectedFilters]);
2184
+ return /*#__PURE__*/React.createElement("label", _extends({
2185
+ className: "\n flex items-start gap-2 px-2 py-1.5 rounded-sm text-sm cursor-pointer transition hover:bg-uiAccent/5\n ".concat(className !== null && className !== void 0 ? className : "", "\n ")
2186
+ }, rest), /*#__PURE__*/React.createElement("input", {
2187
+ id: itemKey,
2188
+ name: field,
2189
+ disabled: item.count == 0,
2190
+ value: itemName,
2191
+ type: type,
2192
+ className: "h-4 w-4 mt-px text-primary border-uiAccent/30 transition-colors rounded-sm",
2193
+ checked: activeItem,
2194
+ onChange: function onChange() {
2195
+ setActiveItem(!activeItem);
2196
+ changeHandler();
2197
+ }
2198
+ }), /*#__PURE__*/React.createElement("span", {
2199
+ className: "font-medium"
2200
+ }, itemName), hasCount && /*#__PURE__*/React.createElement("span", {
2201
+ className: "inline-block mt-1 ml-auto text-xs leading-none text-primary"
2202
+ }, "(", item.count, ")"));
2203
+ };
2204
+
2205
+ var _excluded$7 = ["className", "activeItemsCount"];
2206
+ var ButtonItemsPill = /*#__PURE__*/forwardRef(function (_ref, ref) {
2207
+ _ref.className;
2208
+ var activeItemsCount = _ref.activeItemsCount,
2209
+ props = _objectWithoutProperties(_ref, _excluded$7);
2210
+ return /*#__PURE__*/React.createElement(Button.Btn, _extends({
2211
+ ref: ref,
2212
+ size: "none",
2213
+ variant: "none",
2214
+ className: "relative z-[2] group inline-flex items-center gap-px ml-auto mr-1.5 pl-1.5 pr-1 py-0.5 rounded bg-primary/10 text-xs font-bold text-primary ring-1 ring-inset ring-primary/20"
2215
+ }, props), activeItemsCount > 9 ? '9+' : activeItemsCount, /*#__PURE__*/React.createElement(Button.Icon, {
2216
+ icon: "uil:times",
2217
+ size: "w-3.5 h-3.5"
2218
+ }));
2219
+ });
2220
+ ButtonItemsPill.displayName = 'ButtonItemsPill';
2221
+
2222
+ var AccordionFilterItem = /*#__PURE__*/memo(function (_ref) {
2223
+ var filter = _ref.filter,
2224
+ setDefaultValue = _ref.setDefaultValue,
2225
+ setSelectedFilters = _ref.setSelectedFilters,
2226
+ selectedFilters = _ref.selectedFilters;
2227
+ var fieldKey = filter.id;
2228
+ var activeItemsCount = selectedFilters != null && selectedFilters[fieldKey] ? Object.keys(selectedFilters[fieldKey]).length : 0;
2229
+ var handleClearFilters = function handleClearFilters() {
2230
+ setSelectedFilters(function (prevFilters) {
2231
+ var updatedFilters = _objectSpread2({}, prevFilters);
2232
+ delete updatedFilters[fieldKey];
2233
+ return updatedFilters;
2234
+ });
2235
+ };
2236
+ return /*#__PURE__*/React.createElement(Accordion.Item, {
2237
+ key: filter.id,
2238
+ id: filter.id
2239
+ }, /*#__PURE__*/React.createElement(Accordion.Trigger.HasHeader, {
2240
+ onClick: function onClick() {
2241
+ return setDefaultValue(filter.id);
2242
+ },
2243
+ className: "stretched-link text-left",
2244
+ iconClassName: "order-last",
2245
+ headerClassName: "relative py-2 rounded border border-uiAccent/20 bg-white text-sm transition data-[state=open]:border-b-transparent data-[state=open]:rounded-b-none",
2246
+ header: activeItemsCount > 0 && /*#__PURE__*/React.createElement(ButtonItemsPill, {
2247
+ activeItemsCount: activeItemsCount,
2248
+ onClick: handleClearFilters
2249
+ })
2250
+ }, filter.title), /*#__PURE__*/React.createElement(Accordion.Content, {
2251
+ bodyClassName: "px-2 py-1 bg-white rounded-b border border-uiAccent/20 border-t-0 max-h-[20vh] md:max-h-[25vh] overflow-auto"
2252
+ }, filter.items.sort().map(function (item) {
2253
+ return /*#__PURE__*/React.createElement(FilterItem, {
2254
+ key: item.name,
2255
+ item: item,
2256
+ field: filter.id,
2257
+ selectedFilters: selectedFilters,
2258
+ setSelectedFilters: setSelectedFilters
2259
+ });
2260
+ })));
2261
+ });
2262
+ AccordionFilterItem.displayName = 'AccordionItem';
2263
+
2264
+ var Loading = function Loading(_ref) {
2265
+ _ref.color;
2266
+ return /*#__PURE__*/React.createElement("div", {
2267
+ className: "flex items-center justify-center w-full h-full"
2268
+ }, /*#__PURE__*/React.createElement(IconContained, {
2269
+ icon: "ph:spinner",
2270
+ className: "animate-spin text-gray-300",
2271
+ width: "40",
2272
+ height: "40"
2273
+ }));
2274
+ };
2275
+
2276
+ var AccordionFilters = function AccordionFilters(_ref) {
2277
+ var className = _ref.className,
2278
+ defaultValue = _ref.defaultValue,
2279
+ setDefaultValue = _ref.setDefaultValue,
2280
+ setLocation = _ref.setLocation,
2281
+ setSelectedListItem = _ref.setSelectedListItem;
2282
+ var _useMapList = useMapList(),
2283
+ filterOptions = _useMapList.filterOptions,
2284
+ selectedFilters = _useMapList.selectedFilters,
2285
+ _setSelectedFilters = _useMapList.setSelectedFilters;
2286
+ _useMapList.favorites;
2287
+ _useMapList.filterByFavorites;
2288
+ _useMapList.setFilterByFavorites;
2289
+ return /*#__PURE__*/React.createElement(CardFilter, {
2290
+ className: className !== null && className !== void 0 ? className : ""
2291
+ }, /*#__PURE__*/React.createElement(CardFilter.Title, {
2292
+ icon: "fa-solid:sliders-h"
2293
+ }, /*#__PURE__*/React.createElement("span", null, "Filter ", /*#__PURE__*/React.createElement("span", {
2294
+ className: "md:hidden lg:inline"
2295
+ }, "your search"))), /*#__PURE__*/React.createElement(Accordion, {
2296
+ defaultValue: defaultValue,
2297
+ className: "space-y-4"
2298
+ }, !(filterOptions !== null && filterOptions !== void 0 && filterOptions.filters) && /*#__PURE__*/React.createElement(Accordion.Item, null, /*#__PURE__*/React.createElement(Loading, null)), (filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.filters) && (filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.filters.map(function (filter) {
2299
+ return /*#__PURE__*/React.createElement(AccordionFilterItem, {
2300
+ key: filter.id,
2301
+ filter: filter,
2302
+ setDefaultValue: setDefaultValue,
2303
+ selectedFilters: selectedFilters,
2304
+ setSelectedFilters: function setSelectedFilters(prevFilters) {
2305
+ _setSelectedFilters(prevFilters);
2306
+ setLocation(null);
2307
+ setSelectedListItem(null);
2308
+ }
2309
+ });
2310
+ }))));
2311
+ };
2312
+
2313
+ var MapContext = /*#__PURE__*/createContext();
2314
+ var useMap = function useMap() {
2315
+ var context = useContext(MapContext);
2316
+ if (!context) {
2317
+ throw new Error("useMap must be used within a MapProvider");
2318
+ }
2319
+ return context;
2320
+ };
2321
+ var MapProvider = function MapProvider(_ref) {
2322
+ var _getStorageObject;
2323
+ var children = _ref.children,
2324
+ resetFilters = _ref.resetFilters;
2325
+ var _useState = useState(getStorageObject('selectedListItem')),
2326
+ _useState2 = _slicedToArray(_useState, 2),
2327
+ selectedListItem = _useState2[0],
2328
+ setSelectedListItem = _useState2[1];
2329
+ var _useState3 = useState(getStorageObject('location')),
2330
+ _useState4 = _slicedToArray(_useState3, 2),
2331
+ location = _useState4[0],
2332
+ setLocation = _useState4[1];
2333
+ var _useState5 = useState(getStorageObject("center", {
2334
+ lat: 39.8283,
2335
+ lng: -98.5795
2336
+ })),
2337
+ _useState6 = _slicedToArray(_useState5, 2),
2338
+ center = _useState6[0],
2339
+ setCenter = _useState6[1];
2340
+ var _useState7 = useState(getStorageObject("zoom", 10)),
2341
+ _useState8 = _slicedToArray(_useState7, 2),
2342
+ zoom = _useState8[0],
2343
+ setZoom = _useState8[1];
2344
+ var _useState9 = useState(getStorageObject('commuteLocation')),
2345
+ _useState10 = _slicedToArray(_useState9, 2),
2346
+ commuteLocation = _useState10[0],
2347
+ setCommuteLocation = _useState10[1];
2348
+ var _useState11 = useState([]),
2349
+ _useState12 = _slicedToArray(_useState11, 2),
2350
+ selectedPlaces = _useState12[0],
2351
+ setSelectedPlaces = _useState12[1];
2352
+ var _useState13 = useState(false),
2353
+ _useState14 = _slicedToArray(_useState13, 2),
2354
+ mapInteracted = _useState14[0],
2355
+ setMapInteracted = _useState14[1];
2356
+ var _useState15 = useState((_getStorageObject = getStorageObject('selectedListItem')) !== null && _getStorageObject !== void 0 ? _getStorageObject : {
2357
+ id: "defaultId"
2358
+ }),
2359
+ _useState16 = _slicedToArray(_useState15, 1),
2360
+ firstLoadListItem = _useState16[0];
2361
+ var _useState17 = useState(null),
2362
+ _useState18 = _slicedToArray(_useState17, 2),
2363
+ travelTime = _useState18[0],
2364
+ setTravelTime = _useState18[1];
2365
+ var userSetZoom = useRef(true);
2366
+ useEffect(function () {
2367
+ setStorageObject("commuteLocation", commuteLocation);
2368
+ if (!commuteLocation) {
2369
+ setTravelTime(null);
2370
+ }
2371
+ }, [commuteLocation]);
2372
+ useEffect(function () {
2373
+ setStorageObject("selectedListItem", selectedListItem);
2374
+ }, [selectedListItem]);
2375
+ useEffect(function () {
2376
+ localStorage.setItem("zoom", zoom);
2377
+ }, [zoom]);
2378
+ useEffect(function () {
2379
+ if (location == null) {
2380
+ localStorage.removeItem("location");
2381
+ } else {
2382
+ setStorageObject("location", location);
2383
+ }
2384
+ }, [location]);
2385
+ useEffect(function () {
2386
+ setStorageObject("center", center);
2387
+ }, [center]);
2388
+ var selectItem = function selectItem(item, itemLocation, zoom, center) {
2389
+ setSelectedListItem(item);
2390
+ if (mapInteracted === false && itemLocation != null) {
2391
+ setLocation(itemLocation);
2392
+ }
2393
+ if (mapInteracted === false || itemLocation != null) {
2394
+ setLocation(itemLocation);
2395
+ setCenter(center);
2396
+ }
2397
+ if (mapInteracted === false) {
2398
+ setZoom(zoom);
2399
+ }
2400
+ };
2401
+ var filterReset = function filterReset() {
2402
+ setSelectedPlaces({});
2403
+ setSelectedListItem(null);
2404
+ setLocation(null);
2405
+ setZoom(8);
2406
+ setMapInteracted(false);
2407
+ };
2408
+ if (resetFilters === true) {
2409
+ filterReset();
2410
+ }
2411
+ var selectLocationEntity = function selectLocationEntity(location) {
2412
+ localStorage.removeItem("selectedListItem");
2413
+ setTimeout(function () {
2414
+ return setLocation(location);
2415
+ }, 200);
2416
+ setSelectedListItem(null);
2417
+ };
2418
+ return /*#__PURE__*/React.createElement(MapContext.Provider, {
2419
+ value: _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
2420
+ selectedListItem: selectedListItem,
2421
+ setSelectedListItem: setSelectedListItem,
2422
+ location: location,
2423
+ center: center,
2424
+ zoom: zoom,
2425
+ setZoom: setZoom,
2426
+ selectItem: selectItem,
2427
+ commuteLocation: commuteLocation,
2428
+ setCommuteLocation: setCommuteLocation,
2429
+ setSelectedPlaces: setSelectedPlaces,
2430
+ selectedPlaces: selectedPlaces,
2431
+ selectLocationEntity: selectLocationEntity,
2432
+ setLocation: setLocation,
2433
+ setMapInteracted: setMapInteracted,
2434
+ mapInteracted: mapInteracted,
2435
+ userSetZoom: userSetZoom
2436
+ }, "setLocation", setLocation), "location", location), "firstLoadListItem", firstLoadListItem), "travelTime", travelTime), "setTravelTime", setTravelTime), "filterReset", filterReset)
2437
+ }, children);
2438
+ };
2439
+
2440
+ var FilterCommute = function FilterCommute(_ref) {
2441
+ var className = _ref.className;
2442
+ var _usePlacesAutocomplet = usePlacesAutocomplete(),
2443
+ ready = _usePlacesAutocomplet.ready;
2444
+ _usePlacesAutocomplet.value;
2445
+ var _usePlacesAutocomplet2 = _usePlacesAutocomplet.suggestions,
2446
+ status = _usePlacesAutocomplet2.status,
2447
+ data = _usePlacesAutocomplet2.data,
2448
+ setValue = _usePlacesAutocomplet.setValue,
2449
+ clearSuggestions = _usePlacesAutocomplet.clearSuggestions;
2450
+ var _useState = useState(getStorageItem('selectedCommute', '')),
2451
+ _useState2 = _slicedToArray(_useState, 2),
2452
+ selected = _useState2[0],
2453
+ setSelected = _useState2[1];
2454
+ var inputRef = useRef(null);
2455
+ var _useMapList = useMapList(),
2456
+ setCommuteLocation = _useMapList.setCommuteLocation,
2457
+ commuteLocation = _useMapList.commuteLocation;
2458
+ var _useState3 = useState(getStorageItem('isCurrentLocation', false)),
2459
+ _useState4 = _slicedToArray(_useState3, 2),
2460
+ isCurrentLocation = _useState4[0],
2461
+ setIsCurrentLocation = _useState4[1];
2462
+ useEffect(function () {
2463
+ if (commuteLocation !== null && commuteLocation != '') return;
2464
+ setIsCurrentLocation(false);
2465
+ localStorage.removeItem('isCurrentLocation');
2466
+ localStorage.removeItem('selectedCommute');
2467
+ setSelected("");
2468
+ }, [commuteLocation]);
2469
+ var handleSelect = /*#__PURE__*/function () {
2470
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(val) {
2471
+ var isCurrLocation,
2472
+ results,
2473
+ _yield$getLatLng,
2474
+ lat,
2475
+ lng,
2476
+ _args = arguments;
2477
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
2478
+ while (1) switch (_context.prev = _context.next) {
2479
+ case 0:
2480
+ isCurrLocation = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
2481
+ setValue(val, false);
2482
+ setSelected(val);
2483
+ localStorage.setItem('selectedCommute', val);
2484
+ clearSuggestions();
2485
+ if (!isCurrLocation) {
2486
+ _context.next = 7;
2487
+ break;
2488
+ }
2489
+ return _context.abrupt("return");
2490
+ case 7:
2491
+ _context.prev = 7;
2492
+ _context.next = 10;
2493
+ return getGeocode({
2494
+ address: val
2495
+ });
2496
+ case 10:
2497
+ results = _context.sent;
2498
+ _context.next = 13;
2499
+ return getLatLng(results[0]);
2500
+ case 13:
2501
+ _yield$getLatLng = _context.sent;
2502
+ lat = _yield$getLatLng.lat;
2503
+ lng = _yield$getLatLng.lng;
2504
+ setCommuteLocation({
2505
+ lat: lat,
2506
+ lng: lng
2507
+ });
2508
+ _context.next = 21;
2509
+ break;
2510
+ case 19:
2511
+ _context.prev = 19;
2512
+ _context.t0 = _context["catch"](7);
2513
+ case 21:
2514
+ case "end":
2515
+ return _context.stop();
2516
+ }
2517
+ }, _callee, null, [[7, 19]]);
2518
+ }));
2519
+ return function handleSelect(_x) {
2520
+ return _ref2.apply(this, arguments);
2521
+ };
2522
+ }();
2523
+ var fetchLocation = function fetchLocation() {
2524
+ if (!navigator.geolocation) {
2525
+ console.error("Geolocation is not supported by this browser.");
2526
+ return;
2527
+ }
2528
+ navigator.geolocation.getCurrentPosition(function (position) {
2529
+ setCommuteLocation({
2530
+ lat: position.coords.latitude,
2531
+ lng: position.coords.longitude
2532
+ });
2533
+ handleSelect("Current Location");
2534
+ }, function (error) {
2535
+ console.error("Error fetching location", error);
2536
+ });
2537
+ };
2538
+ return /*#__PURE__*/React.createElement("div", {
2539
+ className: "relative ".concat(className !== null && className !== void 0 ? className : "")
2540
+ }, /*#__PURE__*/React.createElement("label", {
2541
+ htmlFor: "commute",
2542
+ className: "flex items-center gap-2 mb-2 text-xs uppercase font-bold text-uiText"
2543
+ }, /*#__PURE__*/React.createElement(IconContained, {
2544
+ icon: "ri:pin-distance-fill",
2545
+ size: "w-5 h-5",
2546
+ className: "text-uiAccent/30"
2547
+ }), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("span", {
2548
+ className: "md:hidden lg:inline"
2549
+ }, "Calculate your"), " commute")), /*#__PURE__*/React.createElement(Combobox, {
2550
+ value: selected,
2551
+ onChange: handleSelect
2552
+ }, /*#__PURE__*/React.createElement("div", {
2553
+ className: "relative mt-1"
2554
+ }, /*#__PURE__*/React.createElement("div", {
2555
+ className: "relative flex items-center w-full pr-2 cursor-default overflow-hidden rounded bg-white text-left border border-uiAccent/20 focus-within:ring-1 focus-within:ring-uiAccent focus:outline-none"
2556
+ }, /*#__PURE__*/React.createElement(Combobox.Input, {
2557
+ className: "w-full border-none py-2 pl-4 pr-1 text-sm leading-5 text-gray-900 focus:ring-0 placeholder:text-gray-400",
2558
+ onChange: function onChange(e) {
2559
+ setValue(e.target.value);
2560
+ setSelected(e.target.value);
2561
+ },
2562
+ value: selected,
2563
+ disabled: !ready,
2564
+ placeholder: "Starting point",
2565
+ ref: inputRef
2566
+ }), /*#__PURE__*/React.createElement(Button.Btn, {
2567
+ variant: "icon",
2568
+ size: "sqsm",
2569
+ onClick: function onClick() {
2570
+ setIsCurrentLocation(!isCurrentLocation);
2571
+ localStorage.setItem('isCurrentLocation', !isCurrentLocation);
2572
+ if (isCurrentLocation || commuteLocation) {
2573
+ setCommuteLocation("");
2574
+ setSelected("");
2575
+ } else if (!commuteLocation) {
2576
+ fetchLocation();
2577
+ }
2578
+ },
2579
+ className: ""
2580
+ }, /*#__PURE__*/React.createElement("span", {
2581
+ className: " sr-only"
2582
+ }, "Use your location"), commuteLocation ? /*#__PURE__*/React.createElement(IconContained, {
2583
+ icon: "mdi:times"
2584
+ }) : /*#__PURE__*/React.createElement(Button.Icon, {
2585
+ className: isCurrentLocation ? 'text-blue-500' : 'text-current',
2586
+ icon: "mdi:my-location"
2587
+ }))), /*#__PURE__*/React.createElement(Transition, {
2588
+ as: Fragment,
2589
+ leave: "transition ease-in duration-100",
2590
+ leaveFrom: "opacity-100",
2591
+ leaveTo: "opacity-0",
2592
+ afterLeave: clearSuggestions
2593
+ }, /*#__PURE__*/React.createElement(Combobox.Options, {
2594
+ className: "absolute z-20 mt-1 max-h-60 w-full overflow-auto rounded bg-white py-1 text-base shadow ring-1 ring-uiAccent/10 focus:outline-none sm:text-sm"
2595
+ }, status === "OK" && data.map(function (data) {
2596
+ return /*#__PURE__*/React.createElement(Combobox.Option, {
2597
+ key: data.place_id,
2598
+ value: data.description,
2599
+ className: function className(_ref3) {
2600
+ var active = _ref3.active;
2601
+ return "relative cursor-default select-none px-4 py-2 ".concat(active ? "bg-primary text-white" : "text-uiText");
2602
+ }
2603
+ }, function (_ref4) {
2604
+ var selected = _ref4.selected;
2605
+ _ref4.active;
2606
+ return /*#__PURE__*/React.createElement("span", {
2607
+ className: "block truncate ".concat(selected ? "font-bold" : "font-medium")
2608
+ }, data.description);
2609
+ });
2610
+ }))))));
2611
+ };
2612
+
2613
+ var _excluded$6 = ["className", "item", "field"];
2614
+ var RadioItem = function RadioItem(_ref) {
2615
+ var className = _ref.className,
2616
+ item = _ref.item,
2617
+ field = _ref.field,
2618
+ rest = _objectWithoutProperties(_ref, _excluded$6);
2619
+ var _useMap = useMap(),
2620
+ selectedPlaces = _useMap.selectedPlaces,
2621
+ setSelectedPlaces = _useMap.setSelectedPlaces;
2622
+ var chosenPlace = item.key.toLowerCase();
2623
+ var isActive = selectedPlaces.includes(chosenPlace);
2624
+ var changeHandler = function changeHandler() {
2625
+ setSelectedPlaces([isActive ? '' : chosenPlace]);
2626
+ };
2627
+ return /*#__PURE__*/React.createElement("label", _extends({
2628
+ key: item.key,
2629
+ className: "\n flex items-start gap-2 px-2 py-1.5 rounded-sm text-sm cursor-pointer transition hover:bg-uiAccent/5\n\t\t\t\t".concat(item.count === 0 ? 'text-uiDisabled cursor-not-allowed' : 'hover:bg-uiAccent/5', "\n ").concat(className !== null && className !== void 0 ? className : "", "\n ")
2630
+ }, rest), /*#__PURE__*/React.createElement("input", {
2631
+ key: item.key,
2632
+ id: item.Key,
2633
+ name: field,
2634
+ value: item.key,
2635
+ type: "radio",
2636
+ className: "h-4 w-4 mt-px text-primary border-uiAccent/30 transition-colors rounded-full",
2637
+ checked: isActive,
2638
+ onClick: function onClick() {
2639
+ changeHandler();
2640
+ },
2641
+ onChange: function onChange() {}
2642
+ }), /*#__PURE__*/React.createElement("span", {
2643
+ className: "font-medium"
2644
+ }, item.key), isActive && /*#__PURE__*/React.createElement("div", {
2645
+ className: " w-full unselect-div"
2646
+ }, /*#__PURE__*/React.createElement(IconContained, {
2647
+ className: "float-right",
2648
+ icon: "mdi:times"
2649
+ })));
2650
+ };
2651
+
2652
+ var FilterPointsOfInterest = function FilterPointsOfInterest(_ref) {
2653
+ var _ref$title = _ref.title,
2654
+ title = _ref$title === void 0 ? "Points of interest" : _ref$title,
2655
+ pointsOfInterest = _ref.pointsOfInterest,
2656
+ setDefaultValue = _ref.setDefaultValue,
2657
+ className = _ref.className,
2658
+ defaultValue = _ref.defaultValue;
2659
+ return /*#__PURE__*/React.createElement("div", {
2660
+ className: "\n\t\t\t\trelative\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : "", "\n\t\t\t")
2661
+ }, /*#__PURE__*/React.createElement(Accordion, {
2662
+ defaultValue: defaultValue,
2663
+ className: "space-y-4"
2664
+ }, /*#__PURE__*/React.createElement(Accordion.Item, {
2665
+ id: "points-of-interest"
2666
+ }, /*#__PURE__*/React.createElement(Accordion.Trigger.HasHeader, {
2667
+ onClick: function onClick() {
2668
+ return setDefaultValue("points-of-interest");
2669
+ },
2670
+ className: "stretched-link text-left",
2671
+ iconClassName: "order-last",
2672
+ headerClassName: "relative py-2 rounded border border-uiAccent/20 bg-white text-sm transition data-[state=open]:border-b-transparent data-[state=open]:rounded-b-none"
2673
+ }, title), /*#__PURE__*/React.createElement(Accordion.Content, {
2674
+ bodyClassName: "px-2 py-1 bg-white rounded-b border border-uiAccent/20 border-t-0 max-h-[20vh] md:max-h-[25vh] overflow-auto"
2675
+ }, pointsOfInterest.items.map(function (item, index) {
2676
+ return /*#__PURE__*/React.createElement(RadioItem, {
2677
+ key: item.key + index,
2678
+ item: item,
2679
+ field: item.id
2680
+ });
2681
+ })))));
2682
+ };
2683
+
2684
+ var FilterLocation = function FilterLocation(_ref) {
2685
+ var className = _ref.className,
2686
+ defaultValue = _ref.defaultValue,
2687
+ setDefaultValue = _ref.setDefaultValue,
2688
+ _ref$showMap = _ref.showMap,
2689
+ showMap = _ref$showMap === void 0 ? false : _ref$showMap,
2690
+ setLocation = _ref.setLocation,
2691
+ setSelectedListItem = _ref.setSelectedListItem;
2692
+ var _useMapList = useMapList(),
2693
+ _setSelectedFilters = _useMapList.setSelectedFilters,
2694
+ selectedFilters = _useMapList.selectedFilters,
2695
+ filterOptions = _useMapList.filterOptions;
2696
+ selectedFilters != null && selectedFilters["cityState"] ? Object.keys(selectedFilters["cityState"]).length : 0;
2697
+ var locations = filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.locations;
2698
+ var pointsOfInterest = filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.pointsOfInterest;
2699
+ return /*#__PURE__*/React.createElement(CardFilter, {
2700
+ className: className !== null && className !== void 0 ? className : ""
2701
+ }, /*#__PURE__*/React.createElement(CardFilter.Title, {
2702
+ icon: "fluent:location-16-filled"
2703
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("span", {
2704
+ className: "hidden lg:inline"
2705
+ }, "Job"), " location")), !locations && /*#__PURE__*/React.createElement(Loading, null), locations && /*#__PURE__*/React.createElement(Accordion, {
2706
+ defaultValue: defaultValue,
2707
+ className: "space-y-4"
2708
+ }, locations === null || locations === void 0 ? void 0 : locations.map(function (filter) {
2709
+ return /*#__PURE__*/React.createElement(AccordionFilterItem, {
2710
+ key: filter.id,
2711
+ filter: filter,
2712
+ setDefaultValue: setDefaultValue,
2713
+ selectedFilters: selectedFilters,
2714
+ setSelectedFilters: function setSelectedFilters(prevFilters) {
2715
+ _setSelectedFilters(prevFilters);
2716
+ setLocation(null);
2717
+ setSelectedListItem(null);
2718
+ }
2719
+ });
2720
+ }), showMap && /*#__PURE__*/React.createElement(FilterCommute, {
2721
+ className: "mt-6"
2722
+ }), showMap && /*#__PURE__*/React.createElement(FilterPointsOfInterest, {
2723
+ className: "mt-4",
2724
+ pointsOfInterest: pointsOfInterest,
2725
+ setDefaultValue: setDefaultValue,
2726
+ defaultValue: defaultValue
2727
+ })));
2728
+ };
2729
+
2730
+ var Filter = function Filter(_ref) {
2731
+ var className = _ref.className,
2732
+ showMap = _ref.showMap;
2733
+ var _useState = useState(false),
2734
+ _useState2 = _slicedToArray(_useState, 2),
2735
+ hasActiveFilters = _useState2[0],
2736
+ setHasActiveFilters = _useState2[1];
2737
+ var _useState3 = useState(null),
2738
+ _useState4 = _slicedToArray(_useState3, 2),
2739
+ defaultValue = _useState4[0],
2740
+ _setDefaultValue = _useState4[1];
2741
+ var _useMap = useMap(),
2742
+ setSelectedListItem = _useMap.setSelectedListItem,
2743
+ setLocation = _useMap.setLocation,
2744
+ filterReset = _useMap.filterReset;
2745
+ var _useMapList = useMapList(),
2746
+ filteredListings = _useMapList.filteredListings,
2747
+ selectedFilters = _useMapList.selectedFilters,
2748
+ setSelectedFilters = _useMapList.setSelectedFilters,
2749
+ setMobileTab = _useMapList.setMobileTab,
2750
+ handleSettingFavorites = _useMapList.handleSettingFavorites,
2751
+ setQuery = _useMapList.setQuery,
2752
+ siteConfig = _useMapList.siteConfig;
2753
+ return /*#__PURE__*/React.createElement("div", {
2754
+ className: "\n\t\t\t\trelative max-h-[95vh] md:max-h-screen overflow-y-auto overflow-x-auto\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : "", "\n\t\t\t")
2755
+ }, /*#__PURE__*/React.createElement("div", {
2756
+ className: "px-4 md:pt-4 space-y-4"
2757
+ }, /*#__PURE__*/React.createElement(AccordionFilters, {
2758
+ setHasActiveFilters: setHasActiveFilters,
2759
+ defaultValue: defaultValue,
2760
+ setDefaultValue: function setDefaultValue(value) {
2761
+ _setDefaultValue(value == defaultValue ? "" : value);
2762
+ },
2763
+ setLocation: setLocation,
2764
+ setSelectedListItem: setSelectedListItem
2765
+ }), /*#__PURE__*/React.createElement(Search, null), siteConfig.hideLocations !== true && /*#__PURE__*/React.createElement(FilterLocation, {
2766
+ setHasActiveFilters: setHasActiveFilters,
2767
+ defaultValue: defaultValue,
2768
+ showMap: showMap,
2769
+ setDefaultValue: function setDefaultValue(value) {
2770
+ _setDefaultValue(value == defaultValue ? "" : value);
2771
+ },
2772
+ setLocation: setLocation,
2773
+ setSelectedListItem: setSelectedListItem
2774
+ })), /*#__PURE__*/React.createElement("div", {
2775
+ className: "sticky bottom-0 inset-x-0 flex items-center justify-between gap-2 py-2 px-4 mt-2 bg-white md:bg-gray-100"
2776
+ }, /*#__PURE__*/React.createElement(Button.Btn, {
2777
+ onClick: function onClick() {
2778
+ filterReset();
2779
+ setSelectedFilters({});
2780
+ setQuery(null);
2781
+ handleSettingFavorites(null);
2782
+ },
2783
+ variant: "outline",
2784
+ size: "sm"
2785
+ }, "Reset"), selectedFilters && Object.keys(selectedFilters).length > 0 && /*#__PURE__*/React.createElement(Button.Btn, {
2786
+ onClick: function onClick() {
2787
+ return setMobileTab("listTab");
2788
+ },
2789
+ variant: "primary",
2790
+ size: "sm",
2791
+ className: "\n\t\t\t\t\t\tmd:hidden\n\t\t\t\t\t\t".concat(hasActiveFilters ? "opacity-0 pointer-events-none" : "opacity-100", "\n\t\t\t\t\t")
2792
+ }, /*#__PURE__*/React.createElement(Button.Body, null, /*#__PURE__*/React.createElement(Button.Icon, {
2793
+ icon: "fluent:search-12-filled",
2794
+ size: "w-3.5 h-3.5"
2795
+ }), "Show ", filteredListings.length, " Jobs"))));
2796
+ };
2797
+
2798
+ var _excluded$5 = ["className", "children", "field", "setSortSetting", "sortSetting", "isSortable"];
2799
+ var SORT_STATE = {
2800
+ notSorted: "not-sorted",
2801
+ sortedAsc: "sorted-asc",
2802
+ sortedDesc: "sorted-desc"
2803
+ };
2804
+ var HeaderItem = function HeaderItem(_ref) {
2805
+ var className = _ref.className,
2806
+ children = _ref.children,
2807
+ field = _ref.field,
2808
+ setSortSetting = _ref.setSortSetting,
2809
+ sortSetting = _ref.sortSetting,
2810
+ isSortable = _ref.isSortable,
2811
+ rest = _objectWithoutProperties(_ref, _excluded$5);
2812
+ var _useState = useState(SORT_STATE.notSorted),
2813
+ _useState2 = _slicedToArray(_useState, 2),
2814
+ isSorted = _useState2[0],
2815
+ setIsSorted = _useState2[1];
2816
+ var handleChange = function handleChange(field) {
2817
+ if (isSortable === false) return;
2818
+ var setting = {
2819
+ field: field,
2820
+ type: isSorted === SORT_STATE.sortedAsc ? "desc" : "asc"
2821
+ };
2822
+ setSortSetting(setting);
2823
+ isSorted === SORT_STATE.notSorted ? setIsSorted(SORT_STATE.sortedAsc) : isSorted === SORT_STATE.sortedAsc ? setIsSorted(SORT_STATE.sortedDesc) : setIsSorted(SORT_STATE.sortedAsc);
2824
+ };
2825
+ useEffect(function () {
2826
+ if ((sortSetting === null || sortSetting === void 0 ? void 0 : sortSetting.field) != null && sortSetting.field != field) {
2827
+ setIsSorted(SORT_STATE.notSorted);
2828
+ } else if ((sortSetting === null || sortSetting === void 0 ? void 0 : sortSetting.field) != null && isSorted == SORT_STATE.notSorted && sortSetting.field == field) {
2829
+ setIsSorted(sortSetting.type == "asc" ? SORT_STATE.sortedAsc : SORT_STATE.sortedDesc);
2830
+ }
2831
+ }, [sortSetting, isSorted, field]);
2832
+ return /*#__PURE__*/React.createElement(Button.Btn, _extends({
2833
+ onClick: function onClick() {
2834
+ return handleChange(field);
2835
+ },
2836
+ variant: "none",
2837
+ className: "\n\t\t\t\tp-2 rounded-none text-left normal-case font-bold hover:bg-uiAccent/5 focus:bg-uiAccent/5\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : "", "\n\t\t\t")
2838
+ }, rest), /*#__PURE__*/React.createElement(Button.Body, null, children, isSortable && /*#__PURE__*/React.createElement("div", {
2839
+ className: "flex flex-col pr-2"
2840
+ }, /*#__PURE__*/React.createElement(Button.Icon, {
2841
+ icon: "bi:caret-up-fill",
2842
+ size: "w-2.5 h-2.5",
2843
+ className: "\n\t\t\t\t\t\t\t\ttransition-opacity\n\t\t\t\t\t\t\t\t".concat(isSorted === "sorted-asc" ? "opacity-100 text-primary" : "opacity-30", "\n\t\t\t\t\t\t\t")
2844
+ }), /*#__PURE__*/React.createElement(Button.Icon, {
2845
+ icon: "bi:caret-down-fill",
2846
+ size: "w-2.5 h-2.5",
2847
+ className: "\n\t\t\t\t\t\t\t\ttransition-opacity\n\t\t\t\t\t\t\t\t".concat(isSorted === "sorted-desc" ? "opacity-100" : "opacity-30", "\n\t\t\t\t\t\t\t")
2848
+ }))));
2849
+ };
2850
+
2851
+ var _templateObject$2;
2852
+ var ListHeader = function ListHeader(_ref) {
2853
+ var className = _ref.className,
2854
+ fieldsShown = _ref.fieldsShown,
2855
+ fieldNames = _ref.fieldNames,
2856
+ _ref$fieldIsSortable = _ref.fieldIsSortable,
2857
+ fieldIsSortable = _ref$fieldIsSortable === void 0 ? true : _ref$fieldIsSortable,
2858
+ setSortSetting = _ref.setSortSetting,
2859
+ sortSetting = _ref.sortSetting;
2860
+ return /*#__PURE__*/React.createElement(Grid, {
2861
+ columns: "grid-flow-col auto-cols-fr",
2862
+ gap: "gap-0",
2863
+ isAnimated: false,
2864
+ className: twMerge(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n\t\t\t\tpl-6 pr-8 hidden md:grid flex-auto bg-uiAccent/10 border-b border-uiAccent/10 sticky top-0 z-10 padding-bottom:20px\n\t\t\t\t", "\n\t\t\t"])), className !== null && className !== void 0 ? className : "")
2865
+ }, fieldsShown.map(function (field) {
2866
+ return /*#__PURE__*/React.createElement(HeaderItem, {
2867
+ key: field,
2868
+ isSortable: fieldIsSortable,
2869
+ sortSetting: sortSetting,
2870
+ field: field,
2871
+ setSortSetting: setSortSetting
2872
+ }, fieldNames[field]);
2873
+ }), /*#__PURE__*/React.createElement(HeaderItem, {
2874
+ key: "favorite",
2875
+ isSortable: false,
2876
+ field: "favorite"
2877
+ }, "Favorite"));
2878
+ };
2879
+
2880
+ var capitalize = function capitalize(str) {
2881
+ if (str && typeof str === "string") {
2882
+ return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
2883
+ }
2884
+ return str;
2885
+ };
2886
+
2887
+ var _excluded$4 = ["className", "children"];
2888
+ var PillWrapper = /*#__PURE__*/forwardRef(function (_ref, ref) {
2889
+ var className = _ref.className,
2890
+ children = _ref.children,
2891
+ props = _objectWithoutProperties(_ref, _excluded$4);
2892
+ return /*#__PURE__*/React.createElement(Button.Btn, _extends({
2893
+ ref: ref,
2894
+ size: "none",
2895
+ variant: "none",
2896
+ className: "relative group inline-flex items-center gap-px ml-auto mr-1.5 pl-1.5 pr-1 py-0.5 rounded bg-primary/10 text-xs font-bold text-primary ring-1 ring-inset ring-primary/20 ".concat(className)
2897
+ }, props), children);
2898
+ });
2899
+ PillWrapper.displayName = 'PillWrapper';
2900
+
2901
+ var CommutePill = function CommutePill(_ref) {
2902
+ var travelTime = _ref.travelTime;
2903
+ if (!travelTime) return;
2904
+ return /*#__PURE__*/React.createElement("div", {
2905
+ className: "pt-2"
2906
+ }, /*#__PURE__*/React.createElement(PillWrapper, null, /*#__PURE__*/React.createElement(IconContained, {
2907
+ icon: "ri:pin-distance-fill",
2908
+ size: "w-5 h-5",
2909
+ className: "text-uiAccent/30"
2910
+ }), "commute time = ", travelTime));
2911
+ };
2912
+
2913
+ var FieldMapper = function FieldMapper(_ref) {
2914
+ var item = _ref.item,
2915
+ fieldsShown = _ref.fieldsShown,
2916
+ specialFeatures = _ref.specialFeatures,
2917
+ handleFavouriteClick = _ref.handleFavouriteClick,
2918
+ isFavorite = _ref.isFavorite;
2919
+ var orderedFields = fieldsShown.filter(function (field) {
2920
+ return field in item.fields;
2921
+ });
2922
+ var specialFeaturePills = function specialFeaturePills(field) {
2923
+ return field === 'position' && specialFeatures && Object.entries(specialFeatures).map(function (_ref2) {
2924
+ var _ref3 = _slicedToArray(_ref2, 2),
2925
+ featureKey = _ref3[0],
2926
+ featureLabel = _ref3[1];
2927
+ return item.fields[featureKey] === 1 && /*#__PURE__*/React.createElement(PillWrapper, {
2928
+ key: featureKey
2929
+ }, featureLabel);
2930
+ });
2931
+ };
2932
+ return /*#__PURE__*/React.createElement(React.Fragment, null, orderedFields.map(function (field) {
2933
+ var value = item.fields[field];
2934
+ return /*#__PURE__*/React.createElement(Grid.Item, {
2935
+ key: field,
2936
+ className: "hidden md:block"
2937
+ }, /*#__PURE__*/React.createElement("span", {
2938
+ className: "sr-only"
2939
+ }, capitalize(field)), value, /*#__PURE__*/React.createElement("br", null), specialFeaturePills(field));
2940
+ }), /*#__PURE__*/React.createElement(Grid.Item, {
2941
+ className: "md:hidden"
2942
+ }, fieldsShown.includes("position") && /*#__PURE__*/React.createElement(React.Fragment, null, " ", /*#__PURE__*/React.createElement("div", {
2943
+ className: "flex items-start"
2944
+ }, /*#__PURE__*/React.createElement("div", {
2945
+ className: "flex justify-between items-center min-w-[100%]"
2946
+ }, " ", /*#__PURE__*/React.createElement("h3", {
2947
+ className: "font-bold mb-3 flex-1"
2948
+ }, item.fields.position), /*#__PURE__*/React.createElement("div", {
2949
+ className: "flex justify-end pb-2"
2950
+ }, /*#__PURE__*/React.createElement(IconContained, {
2951
+ icon: isFavorite ? "mdi:heart" : "mdi:heart-outline",
2952
+ size: "w-3.5 h-3.5",
2953
+ iconClasses: isFavorite ? "text-primary" : "",
2954
+ className: "transition-opacity duration-300 cursor-pointer\n\t\t\t\t\t\t\t\t\t".concat(isFavorite ? "opacity-100" : "text-uiText/60 group-hover:opacity-100", "\n\t\t\t\t\t\t\t\t\t"),
2955
+ onClick: function onClick(e) {
2956
+ return handleFavouriteClick(e);
2957
+ }
2958
+ })))), specialFeatures && /*#__PURE__*/React.createElement("div", {
2959
+ className: "pb-4"
2960
+ }, specialFeaturePills("position"), " ")), /*#__PURE__*/React.createElement("ul", {
2961
+ className: "space-y-2 text-xs"
2962
+ }, [{
2963
+ field: "category",
2964
+ name: "Category",
2965
+ icon: "icon-park-solid:tree-list"
2966
+ }, {
2967
+ field: "schedule",
2968
+ name: "Schedule",
2969
+ icon: "gravity-ui:clock-fill"
2970
+ }, {
2971
+ field: "cityState",
2972
+ name: "Location",
2973
+ icon: "fluent:location-16-filled"
2974
+ }, {
2975
+ field: "travelTime",
2976
+ name: "Commute",
2977
+ icon: "ri:pin-distance-fill"
2978
+ }].map(function (listItem) {
2979
+ return fieldsShown.includes(listItem.field) && item.fields[listItem.field] && /*#__PURE__*/React.createElement("li", {
2980
+ key: listItem.field,
2981
+ className: "flex gap-2"
2982
+ }, /*#__PURE__*/React.createElement(IconContained, {
2983
+ icon: listItem.icon,
2984
+ size: "w-3.5 h-3.5",
2985
+ className: "text-uiAccent/30"
2986
+ }), /*#__PURE__*/React.createElement("span", {
2987
+ className: "sr-only"
2988
+ }, listItem.name), item.fields[listItem.field]);
2989
+ }))));
2990
+ };
2991
+
2992
+ var _excluded$3 = ["isActive", "bodyClassName", "className", "item", "fieldsShown", "specialFeatures", "onItemSelected", "showMap", "setMobileTab", "favorites", "setFavorites"];
2993
+ var ListItem = /*#__PURE__*/forwardRef(function (_ref, ref) {
2994
+ var _item$mapDetails, _item$mapDetails2, _item$mapDetails3, _item$mapDetails4;
2995
+ var isActive = _ref.isActive,
2996
+ bodyClassName = _ref.bodyClassName,
2997
+ className = _ref.className,
2998
+ item = _ref.item,
2999
+ fieldsShown = _ref.fieldsShown,
3000
+ specialFeatures = _ref.specialFeatures,
3001
+ onItemSelected = _ref.onItemSelected,
3002
+ showMap = _ref.showMap,
3003
+ setMobileTab = _ref.setMobileTab,
3004
+ favorites = _ref.favorites,
3005
+ setFavorites = _ref.setFavorites,
3006
+ props = _objectWithoutProperties(_ref, _excluded$3);
3007
+ var _useMapList = useMapList(),
3008
+ siteConfig = _useMapList.siteConfig;
3009
+ var mapPinColor = siteConfig.colors.primary.replace("#", "");
3010
+ var handleClick = function handleClick() {
3011
+ if (onItemSelected) {
3012
+ onItemSelected(item);
3013
+ }
3014
+ };
3015
+ var isFavorite = favorites.includes(item.id);
3016
+ var handleFavouriteClick = function handleFavouriteClick(event) {
3017
+ event.stopPropagation();
3018
+ var updatedFavorites;
3019
+ if (isFavorite) {
3020
+ updatedFavorites = favorites.filter(function (fav) {
3021
+ return fav !== item.id;
3022
+ });
3023
+ } else {
3024
+ updatedFavorites = [].concat(_toConsumableArray(favorites), [item.id]);
3025
+ }
3026
+ isFavorite = !isFavorite;
3027
+ setFavorites(updatedFavorites);
3028
+ };
3029
+ return /*#__PURE__*/React.createElement("button", _extends({
3030
+ ref: ref,
3031
+ onClick: handleClick,
3032
+ className: "\n group relative flex md:flex-col w-full md:pl-4 text-left bg-clip-border border border-transparent break-words overflow-hidden cursor-pointer transition-colors hover:bg-uiAccent/5 focus:hover:bg-uiAccent/5\n\t\t\t\t\t".concat(isActive ? "bg-uiAccent/5 border-secondary border" : "text-uiText bg-white", "\n\t\t\t\t\t").concat(className !== null && className !== void 0 ? className : "", "\n ")
3033
+ }, props), /*#__PURE__*/React.createElement(Grid, {
3034
+ columns: "grid-flow-col auto-cols-fr",
3035
+ gap: "gap-2",
3036
+ isAnimated: false,
3037
+ className: "\n block md:grid flex-auto p-2 ps-4 w-full grow leading-tight text-sm md:text-xs lg:text-sm\n ".concat(bodyClassName !== null && bodyClassName !== void 0 ? bodyClassName : "", "\n ")
3038
+ }, /*#__PURE__*/React.createElement(Grid.Item, {
3039
+ className: "hidden md:block md:absolute md:left-1.5 top-1.5"
3040
+ }, /*#__PURE__*/React.createElement("span", {
3041
+ className: "sr-only"
3042
+ }, "Expand row"), /*#__PURE__*/React.createElement(IconContained, {
3043
+ icon: "fluent-emoji-high-contrast:plus",
3044
+ size: "w-2.5 h-2.5",
3045
+ className: "\n\t\t\t\t\t\t\t\topacity-0 text-uiText/60 transition group-hover:opacity-100 group-active:opacity-100\n\t\t\t\t\t\t\t\t".concat(isActive ? "opacity-100 rotate-45" : "", "\n\t\t\t\t\t\t\t")
3046
+ })), /*#__PURE__*/React.createElement(FieldMapper, {
3047
+ item: item,
3048
+ fieldsShown: fieldsShown,
3049
+ specialFeatures: specialFeatures,
3050
+ isFavorite: isFavorite,
3051
+ handleFavouriteClick: handleFavouriteClick
3052
+ }), /*#__PURE__*/React.createElement(Grid.Item, {
3053
+ key: "favorites",
3054
+ className: "hidden md:block"
3055
+ }, /*#__PURE__*/React.createElement(IconContained, {
3056
+ icon: isFavorite ? "mdi:heart" : "mdi:heart-outline",
3057
+ size: "w-3.5 h-3.5",
3058
+ iconClasses: isFavorite ? "text-primary" : "",
3059
+ title: !isFavorite ? 'Add job to favorites' : 'Remove job from favorites',
3060
+ className: "\n\t\t\t\t\t\t\tpr-2 transition-opacity duration-300 cursor-pointer opacity-100\"\n\t\t\t\t\t\t",
3061
+ onClick: function onClick(e) {
3062
+ return handleFavouriteClick(e);
3063
+ }
3064
+ }))), showMap && /*#__PURE__*/React.createElement("div", {
3065
+ onClick: function onClick() {
3066
+ setMobileTab("mapTab");
3067
+ handleClick();
3068
+ },
3069
+ className: "md:hidden w-2/5 sm:w-1/3 p-1.5 my-1 bg-uiAccent/5 border border-uiAccent/10 rounded-sm"
3070
+ }, /*#__PURE__*/React.createElement("img", {
3071
+ src: "https://maps.googleapis.com/maps/api/staticmap?scale=2&center=".concat((_item$mapDetails = item.mapDetails) === null || _item$mapDetails === void 0 ? void 0 : _item$mapDetails.latitude, ",").concat((_item$mapDetails2 = item.mapDetails) === null || _item$mapDetails2 === void 0 ? void 0 : _item$mapDetails2.longitude, "&zoom=10&size=240x180&maptype=roadmap&markers=color:0x").concat(mapPinColor, "%7Clabel:\u2022%7C").concat((_item$mapDetails3 = item.mapDetails) === null || _item$mapDetails3 === void 0 ? void 0 : _item$mapDetails3.latitude, ",").concat((_item$mapDetails4 = item.mapDetails) === null || _item$mapDetails4 === void 0 ? void 0 : _item$mapDetails4.longitude, "&key=ToDo"),
3072
+ alt: "Map of location for ".concat(item.fields.position),
3073
+ className: "w-full h-full object-cover"
3074
+ })));
3075
+ });
3076
+ ListItem.displayName = "ListItem";
3077
+ var ListItem$1 = /*#__PURE__*/React.memo(ListItem, function (prevProps, nextProps) {
3078
+ return (prevProps.isActive === nextProps.isActive || prevProps.isActive !== nextProps.isActive) && prevProps.bodyClassName === nextProps.bodyClassName && prevProps.className === nextProps.className && prevProps.fieldsShown === nextProps.fieldsShown && prevProps.item.id === nextProps.item.id;
3079
+ });
3080
+
3081
+ var _excluded$2 = ["className", "content"];
3082
+ var CardItemExpand = function CardItemExpand(_ref) {
3083
+ var className = _ref.className,
3084
+ content = _ref.content,
3085
+ props = _objectWithoutProperties(_ref, _excluded$2);
3086
+ return /*#__PURE__*/React.createElement("div", _extends({
3087
+ className: twMerge('flex flex-col lg:flex-row flex-wrap items-stretch gap-x-4 w-full lg:pt-2 border-t border-uiAccent/20', className !== null && className !== void 0 ? className : '')
3088
+ }, props), content);
3089
+ };
3090
+
3091
+ var MapAccordionItem = function MapAccordionItem(_ref) {
3092
+ var item = _ref.item,
3093
+ itemRefs = _ref.itemRefs,
3094
+ itemExpandedContent = _ref.itemExpandedContent,
3095
+ fieldsShown = _ref.fieldsShown,
3096
+ showMap = _ref.showMap,
3097
+ hasListItemSelected = _ref.hasListItemSelected,
3098
+ specialFeatures = _ref.specialFeatures,
3099
+ isActive = _ref.isActive;
3100
+ var _useMapList = useMapList(),
3101
+ mapItems = _useMapList.mapItems,
3102
+ recruiters = _useMapList.recruiters,
3103
+ setMobileTab = _useMapList.setMobileTab,
3104
+ favorites = _useMapList.favorites,
3105
+ handleSettingFavorites = _useMapList.handleSettingFavorites;
3106
+ var _useMap = useMap(),
3107
+ selectItem = _useMap.selectItem;
3108
+ var setSelectedItemAndZoomMap = function setSelectedItemAndZoomMap(item) {
3109
+ if (isActive) {
3110
+ localStorage.removeItem("selectedListItem");
3111
+ mapItems.find(function (x) {
3112
+ return x.items.hasOwnProperty(item.id);
3113
+ }) || null;
3114
+ selectItem(null, null, 9, {
3115
+ lat: 39.8283,
3116
+ lng: -98.5795
3117
+ });
3118
+ } else {
3119
+ setStorageObject("selectedListItem", item);
3120
+ var location = mapItems.find(function (x) {
3121
+ return x.items.hasOwnProperty(item.id);
3122
+ }) || null;
3123
+ selectItem(item, location, 12, {
3124
+ lat: location === null || location === void 0 ? void 0 : location.latitude,
3125
+ lng: location === null || location === void 0 ? void 0 : location.longitude
3126
+ });
3127
+ }
3128
+ };
3129
+ return /*#__PURE__*/React.createElement(Accordion.Item, {
3130
+ key: item.id,
3131
+ id: item.id
3132
+ }, /*#__PURE__*/React.createElement(Accordion.Trigger.Blank, null, /*#__PURE__*/React.createElement(ListItem$1, {
3133
+ ref: function ref(el) {
3134
+ return itemRefs.current[item.id] = el;
3135
+ },
3136
+ id: item.id,
3137
+ key: item.id,
3138
+ item: item,
3139
+ fieldsShown: fieldsShown,
3140
+ onClick: function onClick() {
3141
+ return setSelectedItemAndZoomMap(item);
3142
+ },
3143
+ showMap: showMap,
3144
+ isActive: isActive,
3145
+ setMobileTab: setMobileTab,
3146
+ specialFeatures: specialFeatures,
3147
+ className: hasListItemSelected ? isActive ? "!border-secondary border border-b-0" : "opacity-85" : "",
3148
+ favorites: favorites,
3149
+ setFavorites: handleSettingFavorites
3150
+ })), isActive && /*#__PURE__*/React.createElement(Accordion.Content, {
3151
+ bodyClassName: "px-2 py-2 pt-0 bg-uiAccent/5 border-secondary border border-t-0"
3152
+ }, /*#__PURE__*/React.createElement(CardItemExpand, {
3153
+ content: itemExpandedContent(item, recruiters)
3154
+ })));
3155
+ };
3156
+
3157
+ var dynamicSort = function dynamicSort(items, fieldName) {
3158
+ var order = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "asc";
3159
+ if (!items || !items.length) {
3160
+ return [];
3161
+ }
3162
+ var inferType = function inferType(value) {
3163
+ if (!isNaN(Date.parse(value)) && isNaN(value)) {
3164
+ return "date";
3165
+ } else if (!isNaN(parseFloat(value)) && isFinite(value)) {
3166
+ return "number";
3167
+ } else {
3168
+ return "string";
3169
+ }
3170
+ };
3171
+ var dataType = inferType(items[0].fields[fieldName]);
3172
+ return items.sort(function (a, b) {
3173
+ var valA = a.fields[fieldName];
3174
+ var valB = b.fields[fieldName];
3175
+ if (!valA || !valB) return;
3176
+ var comparison = 0;
3177
+ if (dataType === "string") {
3178
+ comparison = valA.localeCompare(valB);
3179
+ } else if (dataType === "number") {
3180
+ comparison = valA - valB;
3181
+ } else if (dataType === "date") {
3182
+ comparison = new Date(valA) - new Date(valB);
3183
+ }
3184
+ return order === "desc" ? comparison * -1 : comparison;
3185
+ });
3186
+ };
3187
+
3188
+ var getDefaultItemId = function getDefaultItemId() {
3189
+ var item = getStorageObject("selectedListItem");
3190
+ if ((item === null || item === void 0 ? void 0 : item.expanded) == true) {
3191
+ return item.id;
3192
+ } else {
3193
+ return null;
3194
+ }
3195
+ };
3196
+ var useListLogic = function useListLogic() {
3197
+ var _useState = useState(100),
3198
+ _useState2 = _slicedToArray(_useState, 2),
3199
+ itemLimit = _useState2[0],
3200
+ setItemLimit = _useState2[1];
3201
+ var _useState3 = useState(getDefaultItemId()),
3202
+ _useState4 = _slicedToArray(_useState3, 1),
3203
+ expandedId = _useState4[0];
3204
+ var _useState5 = useState(getStorageObject('sortSetting', null)),
3205
+ _useState6 = _slicedToArray(_useState5, 2),
3206
+ sortSetting = _useState6[0],
3207
+ setSortSetting = _useState6[1];
3208
+ var _useState7 = useState(getStorageObject('scrollPosition', 0)),
3209
+ _useState8 = _slicedToArray(_useState7, 2),
3210
+ scrollPosition = _useState8[0],
3211
+ setScrollPosition = _useState8[1];
3212
+ var loader = useRef(null);
3213
+ var scrollContainerRef = useRef(null);
3214
+ var itemRefs = useRef({});
3215
+ var observer = useRef(null);
3216
+ var _useMapList = useMapList(),
3217
+ filteredListings = _useMapList.filteredListings,
3218
+ setFilteredListings = _useMapList.setFilteredListings;
3219
+ useEffect(function () {
3220
+ if (!sortSetting) return;
3221
+ localStorage.setItem('sortSetting', JSON.stringify(sortSetting));
3222
+ var listingFiltered = dynamicSort(filteredListings, sortSetting.field, sortSetting.type);
3223
+ setFilteredListings(listingFiltered);
3224
+ }, [sortSetting]);
3225
+ useEffect(function () {
3226
+ observer.current = new IntersectionObserver(handleObserver, {
3227
+ root: scrollContainerRef.current,
3228
+ rootMargin: "100px 0px",
3229
+ threshold: 0.5
3230
+ });
3231
+ if (loader.current) {
3232
+ observer.current.observe(loader.current);
3233
+ }
3234
+ return function () {
3235
+ if (observer.current && loader.current) {
3236
+ observer.current.unobserve(loader.current);
3237
+ }
3238
+ };
3239
+ }, [loader.current, itemLimit, filteredListings.length]);
3240
+ useEffect(function () {
3241
+ localStorage.setItem('scrollPosition', scrollPosition.toString());
3242
+ }, [scrollPosition]);
3243
+ useEffect(function () {
3244
+ var savedScrollPosition = scrollPosition;
3245
+ if (parseInt(savedScrollPosition) > 3000) {
3246
+ setItemLimit(savedScrollPosition / 10);
3247
+ }
3248
+ if (savedScrollPosition && scrollPosition != null && scrollContainerRef.current) {
3249
+ scrollContainerRef.current;
3250
+ setTimeout(function () {
3251
+ }, 300);
3252
+ }
3253
+ }, []);
3254
+ useEffect(function () {
3255
+ var scrollContainer = scrollContainerRef.current;
3256
+ if (scrollContainer) {
3257
+ scrollContainer.addEventListener('scroll', handleScroll);
3258
+ }
3259
+ return function () {
3260
+ if (scrollContainer) {
3261
+ scrollContainer.removeEventListener('scroll', handleScroll);
3262
+ }
3263
+ };
3264
+ }, [scrollContainerRef.current]);
3265
+ var handleObserver = function handleObserver(entities) {
3266
+ var target = entities[0];
3267
+ if (!target.isIntersecting) return;
3268
+ if (filteredListings.length > itemLimit) {
3269
+ setItemLimit(function (prevLimit) {
3270
+ return prevLimit + 100;
3271
+ });
3272
+ } else if (observer.current) {
3273
+ observer.current.disconnect();
3274
+ }
3275
+ };
3276
+ if (sortSetting) {
3277
+ dynamicSort(filteredListings, sortSetting.field, sortSetting.type);
3278
+ }
3279
+ var handleScroll = function handleScroll() {
3280
+ if (scrollContainerRef.current) {
3281
+ setScrollPosition(scrollContainerRef.current.scrollTop);
3282
+ }
3283
+ };
3284
+ return {
3285
+ itemLimit: itemLimit,
3286
+ expandedId: expandedId,
3287
+ sortSetting: sortSetting,
3288
+ scrollPosition: scrollPosition,
3289
+ loader: loader,
3290
+ scrollContainerRef: scrollContainerRef,
3291
+ itemRefs: itemRefs,
3292
+ setSortSetting: setSortSetting,
3293
+ setScrollPosition: setScrollPosition,
3294
+ dynamicSort: dynamicSort,
3295
+ filteredListings: filteredListings
3296
+ };
3297
+ };
3298
+
3299
+ var _excluded$1 = ["children", "className"];
3300
+ var FilterSort = function FilterSort(_ref) {
3301
+ var className = _ref.className,
3302
+ fields = _ref.fields,
3303
+ setSortSetting = _ref.setSortSetting,
3304
+ fieldNames = _ref.fieldNames;
3305
+ var handleSortChange = function handleSortChange(value) {
3306
+ var _value$split = value.split("-"),
3307
+ _value$split2 = _slicedToArray(_value$split, 2),
3308
+ field = _value$split2[0],
3309
+ direction = _value$split2[1];
3310
+ setSortSetting({
3311
+ field: field,
3312
+ type: direction
3313
+ });
3314
+ };
3315
+ return /*#__PURE__*/React.createElement("div", {
3316
+ className: className !== null && className !== void 0 ? className : ""
3317
+ }, /*#__PURE__*/React.createElement(Select.Root, {
3318
+ onValueChange: handleSortChange
3319
+ }, /*#__PURE__*/React.createElement(Select.Trigger, {
3320
+ asChild: true,
3321
+ "aria-label": "Sort"
3322
+ }, /*#__PURE__*/React.createElement(Button.Btn, {
3323
+ variant: "outline",
3324
+ size: "sm",
3325
+ className: "normal-case"
3326
+ }, /*#__PURE__*/React.createElement(Button.Body, {
3327
+ className: "justify-center"
3328
+ }, /*#__PURE__*/React.createElement(Select.Value, {
3329
+ placeholder: /*#__PURE__*/React.createElement("span", {
3330
+ className: "flex items-center gap-2"
3331
+ }, "Sort", /*#__PURE__*/React.createElement(IconContained, {
3332
+ icon: "mdi:sort"
3333
+ }))
3334
+ }), /*#__PURE__*/React.createElement(Select.Icon, null, /*#__PURE__*/React.createElement(Button.Icon, {
3335
+ icon: "mdi:chevron-down"
3336
+ }))))), /*#__PURE__*/React.createElement(Select.Portal, null, /*#__PURE__*/React.createElement(Select.Content, {
3337
+ className: "relative z-[200] overflow-hidden bg-white rounded-md "
3338
+ }, /*#__PURE__*/React.createElement(Select.ScrollUpButton, {
3339
+ className: "flex items-center justify-center h-5 bg-white text-primary cursor-default"
3340
+ }, /*#__PURE__*/React.createElement(IconContained, {
3341
+ icon: "mdi:chevron-up"
3342
+ })), /*#__PURE__*/React.createElement(Select.Viewport, {
3343
+ className: "p-1"
3344
+ }, fields.map(function (field) {
3345
+ var _fieldNames$field, _fieldNames$field2;
3346
+ return /*#__PURE__*/React.createElement(Select.Group, {
3347
+ key: field
3348
+ }, /*#__PURE__*/React.createElement(SelectItem, {
3349
+ value: "".concat(field, "-asc")
3350
+ }, /*#__PURE__*/React.createElement("span", {
3351
+ className: "flex items-center justify-between gap-2 w-full"
3352
+ }, (_fieldNames$field = fieldNames[field]) !== null && _fieldNames$field !== void 0 ? _fieldNames$field : field, /*#__PURE__*/React.createElement(IconContained, {
3353
+ icon: "mdi:sort-ascending"
3354
+ }))), /*#__PURE__*/React.createElement(SelectItem, {
3355
+ value: "".concat(field, "-desc")
3356
+ }, /*#__PURE__*/React.createElement("span", {
3357
+ className: "flex items-center justify-between gap-2 w-full"
3358
+ }, (_fieldNames$field2 = fieldNames[field]) !== null && _fieldNames$field2 !== void 0 ? _fieldNames$field2 : field, /*#__PURE__*/React.createElement(IconContained, {
3359
+ icon: "mdi:sort-descending"
3360
+ }))));
3361
+ })), /*#__PURE__*/React.createElement(Select.ScrollDownButton, {
3362
+ className: "flex items-center justify-center h-5 bg-white text-primary cursor-default"
3363
+ }, /*#__PURE__*/React.createElement(IconContained, {
3364
+ icon: "mdi:chevron-down"
3365
+ }))))));
3366
+ };
3367
+ var SelectItem = /*#__PURE__*/forwardRef(function (_ref2, forwardedRef) {
3368
+ var children = _ref2.children,
3369
+ className = _ref2.className,
3370
+ props = _objectWithoutProperties(_ref2, _excluded$1);
3371
+ return /*#__PURE__*/React.createElement(Select.Item, _extends({
3372
+ className: twMerge("text-sm leading-none rounded-sm flex items-center w-full py-1.5 pr-4 pl-7 relative select-none cursor-pointer data-[disabled]:text-gray-500 data-[disabled]:pointer-events-none data-[highlighted]:outline-none data-[highlighted]:bg-primary data-[highlighted]:text-white", className)
3373
+ }, props, {
3374
+ ref: forwardedRef
3375
+ }), /*#__PURE__*/React.createElement(Select.ItemText, null, children), /*#__PURE__*/React.createElement(Select.ItemIndicator, {
3376
+ className: "absolute left-0 w-8 inline-flex items-center justify-center"
3377
+ }, /*#__PURE__*/React.createElement(IconContained, {
3378
+ icon: "mdi:check"
3379
+ })));
3380
+ });
3381
+ SelectItem.displayName = "SelectItem";
3382
+
3383
+ var RecruiterHeadshot = function RecruiterHeadshot(_ref) {
3384
+ var image = _ref.image,
3385
+ alt = _ref.alt,
3386
+ className = _ref.className,
3387
+ imageClassName = _ref.imageClassName;
3388
+ return /*#__PURE__*/React.createElement("div", {
3389
+ className: className !== null && className !== void 0 ? className : ''
3390
+ }, /*#__PURE__*/React.createElement("img", {
3391
+ src: image,
3392
+ width: "96",
3393
+ height: "96",
3394
+ alt: alt,
3395
+ className: imageClassName !== null && imageClassName !== void 0 ? imageClassName : ''
3396
+ }));
3397
+ };
3398
+
3399
+ var _templateObject$1, _templateObject2, _templateObject3;
3400
+ var RecruiterDetails = function RecruiterDetails(_ref) {
3401
+ var contactNav = _ref.contactNav,
3402
+ className = _ref.className,
3403
+ children = _ref.children;
3404
+ return /*#__PURE__*/React.createElement("div", {
3405
+ className: twMerge(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n\t\t\t\tgrow\n\t\t\t\t", "\n\t\t\t"])), className !== null && className !== void 0 ? className : '')
3406
+ }, children, contactNav && /*#__PURE__*/React.createElement("div", {
3407
+ className: "inline-flex"
3408
+ }, contactNav));
3409
+ };
3410
+ var Title = function Title(_ref2) {
3411
+ var _ref2$as = _ref2.as,
3412
+ as = _ref2$as === void 0 ? 'h4' : _ref2$as,
3413
+ className = _ref2.className,
3414
+ children = _ref2.children;
3415
+ var Container = as;
3416
+ return /*#__PURE__*/React.createElement(Container, {
3417
+ className: twMerge(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n\t\t\t\ttext-base font-medium\n\t\t\t\t", "\n\t\t\t"])), className !== null && className !== void 0 ? className : '')
3418
+ }, children);
3419
+ };
3420
+ var Text = function Text(_ref3) {
3421
+ var _ref3$as = _ref3.as,
3422
+ as = _ref3$as === void 0 ? 'p' : _ref3$as,
3423
+ className = _ref3.className,
3424
+ children = _ref3.children;
3425
+ var Container = as;
3426
+ return /*#__PURE__*/React.createElement(Container, {
3427
+ className: twMerge(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n\t\t\t\ttext-sm text-uiText/60\n\t\t\t\t", "\n\t\t\t"])), className !== null && className !== void 0 ? className : '')
3428
+ }, children);
3429
+ };
3430
+ RecruiterDetails.Title = Title;
3431
+ RecruiterDetails.Text = Text;
3432
+
3433
+ var ApplyDialog = function ApplyDialog(_ref) {
3434
+ var children = _ref.children,
3435
+ applyUrl = _ref.applyUrl,
3436
+ internalApplyLink = _ref.internalApplyLink,
3437
+ companyName = _ref.companyName;
3438
+ return /*#__PURE__*/React.createElement(Dialog.Root, null, /*#__PURE__*/React.createElement(Dialog.Trigger, {
3439
+ asChild: true
3440
+ }, children), /*#__PURE__*/React.createElement(Dialog.Portal, null, /*#__PURE__*/React.createElement(Dialog.Overlay, {
3441
+ className: "bg-blackA6 fixed inset-0 animate-overlayShow"
3442
+ }), /*#__PURE__*/React.createElement(Dialog.Content, {
3443
+ className: "fit-content animate-contentShow fixed inset-0 m-auto max-h-[85vh] w-[90vw] max-w-[450px] rounded-[6px] bg-white p-[25px] shadow-lg focus:outline-none flex flex-col items-center text-center"
3444
+ }, /*#__PURE__*/React.createElement(Dialog.Title, {
3445
+ className: "text-[17px] font-medium w-full"
3446
+ }, "Career Opportunities"), /*#__PURE__*/React.createElement(Dialog.Description, {
3447
+ className: "mt-4 mb-5 text-[15px] leading-normal w-full"
3448
+ }, "Are you currently a ", companyName, " employee?"), /*#__PURE__*/React.createElement("div", {
3449
+ className: "flex justify-center space-x-4 w-full"
3450
+ }, /*#__PURE__*/React.createElement(Dialog.Close, {
3451
+ asChild: true
3452
+ }, /*#__PURE__*/React.createElement(Button.Anchor, {
3453
+ variant: "outline",
3454
+ href: internalApplyLink
3455
+ }, "Yes")), /*#__PURE__*/React.createElement(Dialog.Close, {
3456
+ asChild: true
3457
+ }, /*#__PURE__*/React.createElement(Button.Anchor, {
3458
+ variant: "primary",
3459
+ href: applyUrl
3460
+ }, "No"))), /*#__PURE__*/React.createElement(Dialog.Close, {
3461
+ asChild: true
3462
+ }, /*#__PURE__*/React.createElement(Button.Anchor, {
3463
+ className: "absolute top-[10px] right-[10px] inline-flex h-[25px] w-[25px] items-center justify-center rounded-full focus:outline-none",
3464
+ variant: "ghost",
3465
+ "aria-label": "Close"
3466
+ }, /*#__PURE__*/React.createElement(IconContained, {
3467
+ icon: "mdi:times",
3468
+ className: "cursor-pointer text-black hover:text-gray-500 hover:opacity-75"
3469
+ }))))));
3470
+ };
3471
+
3472
+ var _templateObject;
3473
+ var ButtonGroupApply = function ButtonGroupApply(_ref) {
3474
+ var applyUrl = _ref.applyUrl,
3475
+ useDetailsPostMessage = _ref.useDetailsPostMessage,
3476
+ _ref$applyText = _ref.applyText,
3477
+ applyText = _ref$applyText === void 0 ? 'Apply Now' : _ref$applyText,
3478
+ detailsUrl = _ref.detailsUrl,
3479
+ _ref$detailsText = _ref.detailsText,
3480
+ detailsText = _ref$detailsText === void 0 ? 'View Details' : _ref$detailsText,
3481
+ className = _ref.className,
3482
+ _ref$buttonSize = _ref.buttonSize,
3483
+ buttonSize = _ref$buttonSize === void 0 ? 'default' : _ref$buttonSize,
3484
+ _ref$applyButtonVaria = _ref.applyButtonVariant,
3485
+ applyButtonVariant = _ref$applyButtonVaria === void 0 ? 'primary' : _ref$applyButtonVaria,
3486
+ _ref$detailsButtonVar = _ref.detailsButtonVariant,
3487
+ detailsButtonVariant = _ref$detailsButtonVar === void 0 ? 'outline' : _ref$detailsButtonVar,
3488
+ _ref$includeDialog = _ref.includeDialog,
3489
+ includeDialog = _ref$includeDialog === void 0 ? false : _ref$includeDialog,
3490
+ internalApplyLink = _ref.internalApplyLink,
3491
+ itemId = _ref.itemId,
3492
+ companyName = _ref.companyName;
3493
+ var applyButton = function applyButton() {
3494
+ return /*#__PURE__*/React.createElement(Button.Anchor, {
3495
+ variant: applyButtonVariant,
3496
+ size: buttonSize
3497
+ }, applyText);
3498
+ };
3499
+ return /*#__PURE__*/React.createElement("nav", {
3500
+ className: twMerge(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n\t\t\t\tflex flex-row justify-between gap-2 w-full\n\t\t\t\t", "\n\t\t\t"])), className !== null && className !== void 0 ? className : '')
3501
+ }, detailsUrl && useDetailsPostMessage !== true && /*#__PURE__*/React.createElement(Button.Anchor, {
3502
+ href: detailsUrl,
3503
+ variant: detailsButtonVariant,
3504
+ size: buttonSize
3505
+ }, detailsText), useDetailsPostMessage === true && /*#__PURE__*/React.createElement(Button.Btn, {
3506
+ onClick: function onClick() {
3507
+ window.parent.postMessage({
3508
+ itemId: itemId,
3509
+ type: 'LISTING_ID'
3510
+ }, '*');
3511
+ },
3512
+ variant: detailsButtonVariant,
3513
+ size: buttonSize
3514
+ }, detailsText), applyUrl && !includeDialog && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button.Anchor, {
3515
+ href: applyUrl,
3516
+ variant: applyButtonVariant,
3517
+ size: buttonSize
3518
+ }, applyText)), applyUrl && includeDialog && /*#__PURE__*/React.createElement(ApplyDialog, {
3519
+ applyUrl: applyUrl,
3520
+ internalApplyLink: internalApplyLink,
3521
+ companyName: companyName
3522
+ }, applyButton()));
3523
+ };
3524
+
3525
+ var _excluded = ["className", "href", "target", "title", "icon"];
3526
+ var RecruiterContactNav = function RecruiterContactNav(_ref) {
3527
+ var children = _ref.children,
3528
+ className = _ref.className;
3529
+ return /*#__PURE__*/React.createElement("nav", {
3530
+ className: "\n\t\t\t\tinline-flex items-center justify-between gap-2 mt-2\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : '', "\n\t\t\t")
3531
+ }, children);
3532
+ };
3533
+ var NavButton = function NavButton(_ref2) {
3534
+ var className = _ref2.className,
3535
+ href = _ref2.href,
3536
+ _ref2$target = _ref2.target,
3537
+ target = _ref2$target === void 0 ? '_self' : _ref2$target,
3538
+ title = _ref2.title,
3539
+ icon = _ref2.icon,
3540
+ props = _objectWithoutProperties(_ref2, _excluded);
3541
+ return /*#__PURE__*/React.createElement(Button.Anchor, _extends({
3542
+ href: href,
3543
+ variant: "icon",
3544
+ size: "sq",
3545
+ target: target,
3546
+ title: title,
3547
+ className: className !== null && className !== void 0 ? className : ''
3548
+ }, props), /*#__PURE__*/React.createElement("span", {
3549
+ className: "sr-only"
3550
+ }, title), /*#__PURE__*/React.createElement(Button.Icon, {
3551
+ icon: icon,
3552
+ size: "w-8 h-8"
3553
+ }));
3554
+ };
3555
+ RecruiterContactNav.Button = NavButton;
3556
+
3557
+ var ListingDetails = function ListingDetails(_ref) {
3558
+ var _item$details;
3559
+ var item = _ref.item,
3560
+ recruiters = _ref.recruiters;
3561
+ var _useMap = useMap(),
3562
+ travelTime = _useMap.travelTime;
3563
+ var _useMapList = useMapList(),
3564
+ siteConfig = _useMapList.siteConfig;
3565
+ if (!item) {
3566
+ return null;
3567
+ }
3568
+ var matchingRecruiter = !recruiters ? null : recruiters[item === null || item === void 0 ? void 0 : item.recruiterId];
3569
+ return /*#__PURE__*/React.createElement("div", {
3570
+ className: "w-full"
3571
+ }, /*#__PURE__*/React.createElement("div", {
3572
+ className: "grow flex flex-wrap items-center gap-4"
3573
+ }, (matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.headshot) && /*#__PURE__*/React.createElement(RecruiterHeadshot, {
3574
+ image: "https:".concat(matchingRecruiter.headshot),
3575
+ alt: matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.firstName,
3576
+ className: "bg-gray-300"
3577
+ }), matchingRecruiter && /*#__PURE__*/React.createElement(RecruiterDetails, {
3578
+ contactNav: /*#__PURE__*/React.createElement(RecruiterContactNav, null, (matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.mobilePhone) && /*#__PURE__*/React.createElement(RecruiterContactNav.Button, {
3579
+ href: "tel:".concat(matchingRecruiter.mobilePhone),
3580
+ title: "Call ".concat(matchingRecruiter.mobilePhone),
3581
+ icon: "fluent:phone-32-regular"
3582
+ }), (matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.email) && /*#__PURE__*/React.createElement(RecruiterContactNav.Button, {
3583
+ href: "mailto:".concat(matchingRecruiter.email),
3584
+ title: "email ".concat(matchingRecruiter.email),
3585
+ icon: "bi:envelope-at"
3586
+ }), (matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.linkedIn) && /*#__PURE__*/React.createElement(RecruiterContactNav.Button, {
3587
+ href: matchingRecruiter.linkedIn,
3588
+ title: "LinkedIn",
3589
+ icon: "ant-design:linkedin-outlined"
3590
+ }))
3591
+ }, (matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.firstName) && (matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.lastName) && /*#__PURE__*/React.createElement(RecruiterDetails.Title, null, "".concat(matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.firstName, " ").concat(matchingRecruiter === null || matchingRecruiter === void 0 ? void 0 : matchingRecruiter.lastName)), ((_item$details = item.details) === null || _item$details === void 0 || (_item$details = _item$details.recruiter) === null || _item$details === void 0 ? void 0 : _item$details.title) && /*#__PURE__*/React.createElement(RecruiterDetails.Text, null, item.details.recruiter.title)), /*#__PURE__*/React.createElement(ButtonGroupApply, {
3592
+ useDetailsPostMessage: siteConfig.useDetailsPostMessage,
3593
+ includeDialog: siteConfig.useApplyDialog,
3594
+ internalApplyLink: siteConfig.internalApplyLink,
3595
+ companyName: siteConfig.companyName,
3596
+ applyUrl: item === null || item === void 0 ? void 0 : item.applyUrl,
3597
+ itemId: item.id,
3598
+ detailsUrl: item.useClientJobUrl ? item === null || item === void 0 ? void 0 : item.detailsUrl : "".concat(siteConfig.jobsDomain).concat(item.id),
3599
+ className: "\n\t\t\t\t\tlg:flex-col lg:w-auto order-first lg:order-last md:self-center py-2 lg:p-0 lg:mb-0 border-b lg:border-none border-uiAccent/20\n\t\t\t\t\t".concat(matchingRecruiter ? "lg:flex-col lg:w-auto" : "lg:flex-row", "\n ")
3600
+ })), /*#__PURE__*/React.createElement("div", {
3601
+ className: "w-full"
3602
+ }, /*#__PURE__*/React.createElement(CommutePill, {
3603
+ travelTime: travelTime,
3604
+ className: "ml-0"
3605
+ })));
3606
+ };
3607
+
3608
+ var ItemsList = function ItemsList(_ref) {
3609
+ var fieldNames = _ref.fieldNames,
3610
+ showMap = _ref.showMap,
3611
+ fieldsShown = _ref.fieldsShown,
3612
+ specialFeatures = _ref.specialFeatures;
3613
+ var _useListLogic = useListLogic(),
3614
+ itemLimit = _useListLogic.itemLimit,
3615
+ sortSetting = _useListLogic.sortSetting,
3616
+ loader = _useListLogic.loader,
3617
+ scrollContainerRef = _useListLogic.scrollContainerRef,
3618
+ itemRefs = _useListLogic.itemRefs,
3619
+ setSortSetting = _useListLogic.setSortSetting;
3620
+ var _useMap = useMap(),
3621
+ selectedListItem = _useMap.selectedListItem;
3622
+ var _useMapList = useMapList(),
3623
+ mapItems = _useMapList.mapItems,
3624
+ filteredListings = _useMapList.filteredListings,
3625
+ loading = _useMapList.loading,
3626
+ commuteLocation = _useMapList.commuteLocation;
3627
+ var itemExpandedContent = function itemExpandedContent(item, recruiters) {
3628
+ return item ? /*#__PURE__*/React.createElement(ListingDetails, {
3629
+ item: item,
3630
+ recruiters: recruiters
3631
+ }) : null;
3632
+ };
3633
+ if (!fieldsShown.includes('travelTime') && commuteLocation != null && Object.entries(commuteLocation).length > 0) {
3634
+ fieldsShown.push('travelTime');
3635
+ fieldNames['travelTime'] = 'Commute';
3636
+ } else if (fieldsShown.includes('travelTime') && !commuteLocation) {
3637
+ fieldsShown = fieldsShown.filter(function (x) {
3638
+ return x !== 'travelTime';
3639
+ });
3640
+ }
3641
+ return /*#__PURE__*/React.createElement("div", {
3642
+ className: "relative bg-white md:px-4 flex flex-col"
3643
+ }, /*#__PURE__*/React.createElement("div", {
3644
+ className: "flex flex-wrap items-center justify-between gap-4 md:mb-2 p-3 md:p-0 bg-uiAccent/10 md:bg-transparent border-b md:border-none border-uiAccent/20"
3645
+ }, /*#__PURE__*/React.createElement("h2", {
3646
+ className: "text-gray-500 font-semibold text-xs md:text-sm"
3647
+ }, loading && /*#__PURE__*/React.createElement("span", null, "Loading..."), !loading && /*#__PURE__*/React.createElement("span", null, filteredListings.length, " results")), /*#__PURE__*/React.createElement("div", {
3648
+ className: "block md:hidden"
3649
+ }, /*#__PURE__*/React.createElement(FilterSort, {
3650
+ fields: fieldsShown,
3651
+ setSortSetting: setSortSetting,
3652
+ fieldNames: fieldNames
3653
+ }))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ListHeader, {
3654
+ setSortSetting: setSortSetting,
3655
+ sortSetting: sortSetting,
3656
+ fieldsShown: fieldsShown,
3657
+ fieldNames: fieldNames
3658
+ })), /*#__PURE__*/React.createElement("div", {
3659
+ ref: scrollContainerRef,
3660
+ className: "\n\t\t\t\t\tflex-grow overflow-y-auto\n\t\t\t\t\t".concat(showMap ? "md:max-h-45vh max-h-[100vh]" : "md:max-h-95vh max-h-[95vh]", "\n\t\t\t\t")
3661
+ }, loading ? /*#__PURE__*/React.createElement("div", {
3662
+ className: "flex justify-center items-center pt-20"
3663
+ }, /*#__PURE__*/React.createElement(Loading, null)) : /*#__PURE__*/React.createElement(Accordion, {
3664
+ className: "divide-y divide-uiAccent/10 z10000",
3665
+ defaultValue: selectedListItem === null || selectedListItem === void 0 ? void 0 : selectedListItem.id
3666
+ }, filteredListings.slice(0, itemLimit).map(function (item) {
3667
+ return /*#__PURE__*/React.createElement(MapAccordionItem, {
3668
+ key: item.id,
3669
+ showMap: showMap,
3670
+ item: item,
3671
+ itemRefs: itemRefs,
3672
+ fieldsShown: fieldsShown,
3673
+ itemExpandedContent: itemExpandedContent,
3674
+ specialFeatures: specialFeatures,
3675
+ mapItems: mapItems,
3676
+ isActive: (selectedListItem === null || selectedListItem === void 0 ? void 0 : selectedListItem.id) == item.id,
3677
+ hasListItemSelected: selectedListItem != null
3678
+ });
3679
+ })), /*#__PURE__*/React.createElement("div", {
3680
+ ref: loader,
3681
+ style: {
3682
+ height: "100px",
3683
+ textAlign: "center"
3684
+ }
3685
+ }, filteredListings.length >= itemLimit && /*#__PURE__*/React.createElement(Loading, null))));
3686
+ };
3687
+
3688
+ var CardInfoWindow = function CardInfoWindow(_ref) {
3689
+ var className = _ref.className,
3690
+ content = _ref.content,
3691
+ id = _ref.id;
3692
+ return /*#__PURE__*/React.createElement("div", {
3693
+ id: id,
3694
+ className: "\n\t\t\t\trelative flex flex-col break-words bg-clip-border\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : "", "\n\t\t\t")
3695
+ }, content);
3696
+ };
3697
+
3698
+ var InfoWindowContent = function InfoWindowContent(_ref) {
3699
+ var _items$0$mapDetails, _items$0$mapDetails2, _items$0$mapDetails3, _items$0$mapDetails4, _items$0$mapDetails5;
3700
+ var item = _ref.item,
3701
+ filterListingsByLocation = _ref.filterListingsByLocation;
3702
+ var _useMapList = useMapList(),
3703
+ setSelectedFilters = _useMapList.setSelectedFilters;
3704
+ _useMapList.setQuery;
3705
+ var setMobileTab = _useMapList.setMobileTab,
3706
+ selectedFilters = _useMapList.selectedFilters;
3707
+ var items = item && item.items ? Object.values(item.items) : null;
3708
+ if (!items || items.length < 0) {
3709
+ return;
3710
+ }
3711
+ var addressParts = [(_items$0$mapDetails = items[0].mapDetails) === null || _items$0$mapDetails === void 0 || (_items$0$mapDetails = _items$0$mapDetails.address) === null || _items$0$mapDetails === void 0 ? void 0 : _items$0$mapDetails.street, (_items$0$mapDetails2 = items[0].mapDetails) === null || _items$0$mapDetails2 === void 0 || (_items$0$mapDetails2 = _items$0$mapDetails2.address) === null || _items$0$mapDetails2 === void 0 ? void 0 : _items$0$mapDetails2.city, (_items$0$mapDetails3 = items[0].mapDetails) === null || _items$0$mapDetails3 === void 0 || (_items$0$mapDetails3 = _items$0$mapDetails3.address) === null || _items$0$mapDetails3 === void 0 ? void 0 : _items$0$mapDetails3.state, (_items$0$mapDetails4 = items[0].mapDetails) === null || _items$0$mapDetails4 === void 0 || (_items$0$mapDetails4 = _items$0$mapDetails4.address) === null || _items$0$mapDetails4 === void 0 ? void 0 : _items$0$mapDetails4.zip];
3712
+ var fullAddress = addressParts.filter(Boolean).join(', ');
3713
+ return /*#__PURE__*/React.createElement("div", {
3714
+ className: "flex-auto p-2"
3715
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h4", {
3716
+ className: "text-lg font-bold leading-tight mb-3"
3717
+ }, (_items$0$mapDetails5 = items[0].mapDetails) === null || _items$0$mapDetails5 === void 0 ? void 0 : _items$0$mapDetails5.entityDisplayName), /*#__PURE__*/React.createElement("p", null, fullAddress), /*#__PURE__*/React.createElement("div", {
3718
+ className: "pt-2"
3719
+ }, /*#__PURE__*/React.createElement("button", {
3720
+ className: "cursor-pointer hover:opacity-70 text-primary",
3721
+ onClick: function onClick() {
3722
+ setMobileTab("listTab");
3723
+ setSelectedFilters(_objectSpread2(_objectSpread2({}, selectedFilters), {}, {
3724
+ cityState: _defineProperty({}, items[0].fields.cityState, true)
3725
+ }));
3726
+ filterListingsByLocation();
3727
+ }
3728
+ }, items.length > 1 ? "View All ".concat(items.length, " jobs at this location") : "View job at this location")))));
3729
+ };
3730
+
3731
+ var MapMarker = function MapMarker(_ref) {
3732
+ var item = _ref.item,
3733
+ markerRefs = _ref.markerRefs,
3734
+ infoWindowClasses = _ref.infoWindowClasses,
3735
+ markerClickHandler = _ref.markerClickHandler,
3736
+ clusterer = _ref.clusterer,
3737
+ markerIconSelected = _ref.markerIconSelected,
3738
+ markerIcon = _ref.markerIcon,
3739
+ selectedLocation = _ref.selectedLocation,
3740
+ setMapInteracted = _ref.setMapInteracted;
3741
+ var _useMap = useMap(),
3742
+ setLocation = _useMap.setLocation,
3743
+ commuteLocation = _useMap.commuteLocation;
3744
+ var isSelected = item.id === (selectedLocation === null || selectedLocation === void 0 ? void 0 : selectedLocation.id);
3745
+ var markerRef = useRef(null);
3746
+ var _useMapList = useMapList(),
3747
+ handleFilterListingsByLocation = _useMapList.handleFilterListingsByLocation;
3748
+ useEffect(function () {
3749
+ markerRefs.current[item.id] = markerRef.current;
3750
+ }, []);
3751
+ var onMarkerClick = function onMarkerClick() {
3752
+ setMapInteracted(true);
3753
+ markerClickHandler(item);
3754
+ };
3755
+ var getInfoWindow = function getInfoWindow() {
3756
+ if (!isSelected || !item || !item.id || !selectedLocation) {
3757
+ return;
3758
+ }
3759
+ //Direct dom removal of empty info windows
3760
+ document.querySelectorAll("div.gm-style-iw.gm-style-iw-c").forEach(function (x) {
3761
+ if (!x.innerHTML.includes(item.id)) x.parentElement.remove();
3762
+ });
3763
+ return /*#__PURE__*/React.createElement(InfoWindow, {
3764
+ position: {
3765
+ lat: item.latitude,
3766
+ lng: item.longitude
3767
+ },
3768
+ anchor: markerRefs.current[item.id],
3769
+ onCloseClick: function onCloseClick() {
3770
+ setMapInteracted(true);
3771
+ setLocation(null);
3772
+ },
3773
+ options: {
3774
+ maxWidth: 400
3775
+ }
3776
+ }, /*#__PURE__*/React.createElement(CardInfoWindow, {
3777
+ className: infoWindowClasses,
3778
+ id: item.id,
3779
+ content: /*#__PURE__*/React.createElement(InfoWindowContent, {
3780
+ item: item,
3781
+ commuteLocation: commuteLocation,
3782
+ filterListingsByLocation: function filterListingsByLocation() {
3783
+ return handleFilterListingsByLocation(selectedLocation);
3784
+ }
3785
+ })
3786
+ }));
3787
+ };
3788
+ return /*#__PURE__*/React.createElement(MarkerF, {
3789
+ key: item.id,
3790
+ position: {
3791
+ lat: item.latitude,
3792
+ lng: item.longitude
3793
+ },
3794
+ title: item.name,
3795
+ options: {
3796
+ icon: isSelected ? markerIconSelected : markerIcon
3797
+ },
3798
+ zIndex: isSelected ? 9999 : 1,
3799
+ onLoad: function onLoad(marker) {
3800
+ return markerRef.current = marker;
3801
+ },
3802
+ onClick: onMarkerClick,
3803
+ clusterer: clusterer
3804
+ }, isSelected && getInfoWindow());
3805
+ };
3806
+
3807
+ var placeTypes = {
3808
+ FOOD: "food",
3809
+ STORE: "shopping",
3810
+ TOURIST_ATTRACTION: "attractions",
3811
+ TRANSIT_STATION: "transit",
3812
+ SCHOOL: "schools",
3813
+ PLACE_OF_WORSHIP: "worship"
3814
+ };
3815
+
3816
+ var customSVGIcon = function customSVGIcon(type) {
3817
+ var fillColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "#FFFFFF";
3818
+ var strokeColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "#000000";
3819
+ var backgroundFill = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "#000000";
3820
+ var backgroundStroke = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "#000000";
3821
+ var svg = "";
3822
+ switch (type) {
3823
+ case placeTypes.FOOD:
3824
+ svg = "\n\t\t\t\t\t<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\t\tviewBox=\"0 0 60.8 89.6\" preserveAspectRatio=\"xMidYMid meet\" style=\"enable-background:new 0 0 60.8 89.6;\" xml:space=\"preserve\">\n\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t.st0{fill:".concat(fillColor, "; stroke:").concat(strokeColor, ";}\n\t\t\t\t\t.svg-background{fill:").concat(backgroundFill, "; stroke:").concat(backgroundStroke, ";}\n\t\t\t\t\t</style>\n\t\t\t\t\t<path class=\"svg-background\" d=\"M30.4,3.9C14.3,3.9,1.3,16.8,1.3,33c0,21,18.6,29.1,29.1,56.6C40.9,62.1,59.5,54.9,59.5,33C60.3,16.8,46.6,3.9,30.4,3.9z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M25.7,36.6l0.6,15.8c0.1,2.4-2.3,2.4-2.3,2.4s-2.4,0-2.3-2.4l0.6-15.8c0.1-2-4.3-2.9-4-4.9l2.3-13.3h1.1\n\t\t\t\t\t\tl-0.6,9.7l1.7,1.2l0.6-10.9h1.1l0.6,10.9l1.7-1.2l-0.6-9.7h1.1l2.3,13.3C29.7,33.7,25.6,34.6,25.7,36.6z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M40,52.4c0,2.4-2.3,2.4-2.3,2.4s-2.5,0-2.3-2.4L36.6,39c-0.9,0-3.4-0.4-3.4-2.4v-6.1c0-2.4,0.3-6.4,1.2-8.2\n\t\t\t\t\t\tc1.1-2.4,3.9-4,5.6-4C40,18.3,40,52.4,40,52.4z\"/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t");
3825
+ break;
3826
+ case placeTypes.TOURIST_ATTRACTION:
3827
+ svg = "<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 60.8 89.6\" preserveAspectRatio=\"xMidYMid meet\" style=\"enable-background:new 0 0 60.8 89.6;\" xml:space=\"preserve\">\n\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t.st0{fill:".concat(fillColor, "; stroke:").concat(strokeColor, ";}\n\t\t\t\t\t.svg-background{fill:").concat(backgroundFill, "; stroke:").concat(backgroundStroke, ";}\n\t\t\t\t\t</style>\n\t\t\t\t\t<path class=\"svg-background\" d=\"M30.4,3.9C14.3,3.9,1.3,16.8,1.3,33c0,21,18.6,29.1,29.1,56.6C40.9,62.1,59.5,54.9,59.5,33C60.3,16.8,46.6,3.9,30.4,3.9z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M27,18.5c-1.2,0-1.7,1.1-2.2,2.2L23.7,23h-4.5c-1.9,0-3.4,1.5-3.4,3.4v11.2c0,1.9,1.5,3.4,3.4,3.4h22.5\n\t\t\t\t\t\tc1.9,0,3.4-1.5,3.4-3.4V26.4c0-1.9-1.5-3.4-3.4-3.4h-4.5L36,20.8c-0.6-1.1-1-2.2-2.2-2.2H27z M19.2,25.3c0.6,0,1.1,0.5,1.1,1.1\n\t\t\t\t\t\tc0,0.6-0.5,1.1-1.1,1.1c-0.6,0-1.1-0.5-1.1-1.1C18,25.8,18.5,25.3,19.2,25.3z M30.4,25.3c3.7,0,6.7,3,6.7,6.7s-3,6.7-6.7,6.7\n\t\t\t\t\t\ts-6.7-3-6.7-6.7S26.7,25.3,30.4,25.3z M30.4,28.7c-1.9,0-3.4,1.5-3.4,3.4s1.5,3.4,3.4,3.4c1.9,0,3.4-1.5,3.4-3.4\n\t\t\t\t\t\tS32.3,28.7,30.4,28.7z\"/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t");
3828
+ break;
3829
+ case placeTypes.SCHOOL:
3830
+ svg = "\n\t\t\t\t\t<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\t\tviewBox=\"0 0 60.8 89.6\" preserveAspectRatio=\"xMidYMid meet\" style=\"enable-background:new 0 0 60.8 89.6;\" xml:space=\"preserve\">\n\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t.st0{fill:".concat(fillColor, "; stroke:").concat(strokeColor, ";}\n\t\t\t\t\t.svg-background{fill:").concat(backgroundFill, "; stroke:").concat(backgroundStroke, ";}\n\t\t\t\t\t</style>\n\t\t\t\t\t<path class=\"svg-background\" d=\"M30.4,3.9C14.3,3.9,1.3,16.8,1.3,33c0,21,18.6,29.1,29.1,56.6C40.9,62.1,59.5,54.9,59.5,33C60.3,16.8,46.6,3.9,30.4,3.9z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M39.2,40.6c0,0-4.1,4.6-9.1,4.6S21,40.6,21,40.6v-5.2l9.1,5l9.1-5V40.6z\"/>\n\t\t\t\t\t<polygon class=\"st0\" points=\"44.4,40.4 41.8,40.4 41.8,31.4 30.1,37.8 15.8,30 30.1,22.2 44.4,30 \"/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t");
3831
+ break;
3832
+ case placeTypes.STORE:
3833
+ svg = "<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 60.8 89.6\" preserveAspectRatio=\"xMidYMid meet\" style=\"enable-background:new 0 0 60.8 89.6;\" xml:space=\"preserve\">\n\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t.st0{fill:".concat(fillColor, "; stroke:").concat(strokeColor, ";}\n\t\t\t\t\t.svg-background{fill:").concat(backgroundFill, "; stroke:").concat(backgroundStroke, ";}\n\t\t\t\t\t</style>\n\t\t\t\t\t<g>\n\t\t\t\t\t\t<path class=\"svg-background\" d=\"M30.4,3.9C14.3,3.9,1.3,16.8,1.3,33c0,21,18.6,29.1,29.1,56.6C40.9,62.1,59.5,54.9,59.5,33C60.3,16.8,46.6,3.9,30.4,3.9z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t\t<path class=\"st0\" d=\"M45.4,27.7L42,41.1c-0.1,0.6-0.7,1-1.3,1c1.8,0,3.3,1.5,3.3,3.3s-1.5,3.3-3.3,3.3s-3.3-1.5-3.3-3.3\n\t\t\t\t\t\ts1.5-3.3,3.3-3.3H23.3c1.8,0,3.3,1.5,3.3,3.3s-1.5,3.3-3.3,3.3S20,47.2,20,45.4s1.5-3.3,3.3-3.3c-0.6,0-1.2-0.4-1.3-1l-4.1-16.4\n\t\t\t\t\t\th-1.3c-0.7,0-1.3-0.6-1.3-1.3s0.6-1.3,1.3-1.3h2.3c0.6,0,1.2,0.4,1.3,1l0.8,3h23.1c0.4,0,0.8,0.2,1.1,0.5\n\t\t\t\t\t\tC45.4,26.9,45.5,27.3,45.4,27.7z\"/>\n\t\t\t\t\t<path d=\"M41.4,45.5c0-0.4-0.3-0.7-0.7-0.7S40,45.1,40,45.5C40.1,46.2,41.4,46.2,41.4,45.5z\"/>\n\t\t\t\t\t<path d=\"M24,45.5c0-0.4-0.3-0.7-0.7-0.7s-0.7,0.3-0.7,0.7C22.6,46.2,24,46.2,24,45.5z\"/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t");
3834
+ break;
3835
+ case placeTypes.TRANSIT_STATION:
3836
+ svg = "<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 60.8 89.6\" preserveAspectRatio=\"xMidYMid meet\" style=\"enable-background:new 0 0 60.8 89.6;\" xml:space=\"preserve\">\n\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t.st0{fill:".concat(fillColor, "; stroke:").concat(strokeColor, ";}\n\t\t\t\t\t.svg-background{fill:").concat(backgroundFill, "; stroke:").concat(backgroundStroke, ";}\n\t\t\t\t\t</style>\n\t\t\t\t\t<g>\n\t\t\t\t\t\t<path class=\"svg-background\" d=\"M30.4,3.9C14.3,3.9,1.3,16.8,1.3,33c0,21,18.6,29.1,29.1,56.6C40.9,62.1,59.5,54.9,59.5,33C60.3,16.8,46.6,3.9,30.4,3.9z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t\t<path class=\"st0\" d=\"M26.3,41.3h-2.8L20.7,44h-1.4v-1.4l1.4-1.4c-2.3,0-4.2-1.9-4.2-4.2V26c0-2.3,1.9-4.2,4.2-4.2h9.7\n\t\t\t\t\t\tc2.3,0,4.2,1.9,4.2,4.2v1.4h-2.8v-2.8H19.3v9.7h6.9v7H26.3z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M44.3,43c0,0.5-0.4,1-1,1h-0.8c-0.5,0-1-0.5-1-1.1v-1.7H30.4V43c0,0.5-0.4,1.1-0.9,1.1h-0.9c-0.5,0-1-0.5-1-1\n\t\t\t\t\t\tv-7.6l2-5.7c0.2-0.6,0.7-0.9,1.4-0.9h10c0.6,0,1.1,0.4,1.3,0.9l2,5.7V43z\"/>\n\t\t\t\t\t<circle cx=\"20.7\" cy=\"37.1\" r=\"1.4\"/>\n\t\t\t\t\t<circle cx=\"41.5\" cy=\"37.1\" r=\"1.4\"/>\n\t\t\t\t\t<circle cx=\"30.4\" cy=\"37.1\" r=\"1.4\"/>\n\t\t\t\t\t<polygon points=\"31,30.2 29.6,34.4 42.4,34.4 40.9,30.2 \"/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t");
3837
+ break;
3838
+ case placeTypes.PLACE_OF_WORSHIP:
3839
+ svg = "<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 60.8 89.6\" style=\"enable-background:new 0 0 60.8 89.6;\" xml:space=\"preserve\">\n\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t.st0{fill:".concat(fillColor, "; stroke:").concat(strokeColor, ";}\n\t\t\t\t\t.svg-background{fill:").concat(backgroundFill, "; stroke:").concat(backgroundStroke, ";}\n\t\t\t\t\t</style>\n\t\t\t\t\t<path class=\"svg-background\" d=\"M30.4,3.9C14.3,3.9,1.3,16.8,1.3,33c0,21,18.6,29.1,29.1,56.6C40.9,62.1,59.5,54.9,59.5,33C60.3,16.8,46.6,3.9,30.4,3.9z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M21.3,40.8h-3.8c-1.3,0-2.3-1-2.3-2.3v-4.3c0-0.8,0.5-1.6,1.2-2l4.9-2.7V40.8z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M38,40.8h-4.6v-4.6c0-1.7-1.4-3-3-3c-1.7,0-3,1.4-3,3v4.6h-4.6V30c0-0.8,0.4-1.5,1.1-2l1.9-1.2v-5.1l0,0\n\t\t\t\t\t\tc0-0.4,0.2-0.8,0.4-1.1l3.6-3.6c0.3-0.3,0.8-0.3,1.1,0l3.6,3.6c0.3,0.3,0.4,0.7,0.4,1.1v5.1l1.9,1.2c0.7,0.4,1.1,1.2,1.1,2L38,40.8\n\t\t\t\t\t\tL38,40.8z\"/>\n\t\t\t\t\t<path class=\"st0\" d=\"M45.6,38.5c0,1.3-1,2.3-2.3,2.3h-3.8V29.5l4.9,2.7c0.7,0.4,1.2,1.2,1.2,2C45.6,34.2,45.6,38.5,45.6,38.5z\"/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t");
3840
+ break;
3841
+ }
3842
+ var iconUrl = "data:image/svg+xml;utf8,".concat(encodeURIComponent(svg));
3843
+ return iconUrl;
3844
+ };
3845
+ var iconPath = "M5.5 0A5.27 5.27 0 0 0 0 5.01v.49c0 1.73 1.38 3.43 2.07 4.12s3.43 4.12 3.43 4.12 2.75-3.43 3.43-4.12 2.06-2.39 2.06-4.12c.14-2.9-2.1-5.36-5-5.5H5.5Zm-.04 5.71c-.32 0-.57-.27-.56-.58 0-.32.27-.57.58-.56.32 0 .57.27.56.58 0 .31-.25.55-.56.56h-.02Z";
3846
+ var markerIconProps = function markerIconProps(placeMarkerConfigs, type) {
3847
+ var scaledWidth = placeMarkerConfigs.size;
3848
+ var scaledHeight = scaledWidth * 3 / 2;
3849
+ var iconUrl = customSVGIcon(type, placeMarkerConfigs.colors.innerFillColor, placeMarkerConfigs.colors.innerStrokeColor, placeMarkerConfigs.colors.outerFillColor, placeMarkerConfigs.colors.outerStrokeColor);
3850
+ return {
3851
+ url: iconUrl,
3852
+ scaledSize: new google.maps.Size(scaledWidth, scaledHeight),
3853
+ anchor: new google.maps.Point(scaledWidth / 2, scaledHeight)
3854
+ };
3855
+ };
3856
+ var iconProps = function iconProps() {
3857
+ return {
3858
+ path: iconPath,
3859
+ fillOpacity: 1,
3860
+ strokeWeight: 1.75,
3861
+ scale: 1.6,
3862
+ anchor: new google.maps.Point(12, 17)
3863
+ };
3864
+ };
3865
+ var markerIcon = function markerIcon(markerConfigs) {
3866
+ return _objectSpread2(_objectSpread2({}, iconProps()), {}, {
3867
+ fillColor: markerConfigs.fillColor,
3868
+ strokeColor: markerConfigs.strokeColor
3869
+ });
3870
+ };
3871
+ var markerIconSelected = function markerIconSelected(markerConfigs) {
3872
+ return _objectSpread2(_objectSpread2({}, iconProps()), {}, {
3873
+ fillColor: markerConfigs.selectedFillColor,
3874
+ strokeColor: markerConfigs.selectedStrokeColor
3875
+ });
3876
+ };
3877
+ var pinIcon = function pinIcon(markerConfigs) {
3878
+ var fillColor = markerConfigs.fillColor,
3879
+ strokeColor = markerConfigs.strokeColor;
3880
+ var svg = "\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"30\" viewBox=\"-6 -4 24 24\">\n\t\t<path d=\"".concat(iconPath, "\" fill=\"").concat(fillColor, "\" stroke=\"").concat(strokeColor, "\" stroke-width=\"2\"/>\n\t </svg>\n\t");
3881
+ return "data:image/svg+xml;utf8,".concat(encodeURIComponent(svg));
3882
+ };
3883
+
3884
+ var searchNearbyPlaces = /*#__PURE__*/function () {
3885
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(typesArray, location, radius) {
3886
+ var url, headers, data, response;
3887
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
3888
+ while (1) switch (_context.prev = _context.next) {
3889
+ case 0:
3890
+ url = 'https://places.googleapis.com/v1/places:searchNearby';
3891
+ headers = {
3892
+ 'Content-Type': 'application/json',
3893
+ 'X-Goog-Api-Key': "AIzaSyAXPlfaoMCrmjNV1u-vFYdLBi7GkGeh4S4",
3894
+ 'X-Goog-FieldMask': 'places.location,places.displayName,places.types'
3895
+ };
3896
+ data = {
3897
+ includedTypes: typesArray,
3898
+ maxResultCount: 20,
3899
+ locationRestriction: {
3900
+ circle: {
3901
+ center: location,
3902
+ radius: radius
3903
+ }
3904
+ }
3905
+ };
3906
+ _context.prev = 3;
3907
+ _context.next = 6;
3908
+ return fetch(url, {
3909
+ method: 'POST',
3910
+ headers: headers,
3911
+ body: JSON.stringify(data)
3912
+ });
3913
+ case 6:
3914
+ response = _context.sent;
3915
+ if (response.ok) {
3916
+ _context.next = 9;
3917
+ break;
3918
+ }
3919
+ throw new Error("HTTP error! status: ".concat(response.status));
3920
+ case 9:
3921
+ _context.next = 11;
3922
+ return response.json();
3923
+ case 11:
3924
+ return _context.abrupt("return", _context.sent);
3925
+ case 14:
3926
+ _context.prev = 14;
3927
+ _context.t0 = _context["catch"](3);
3928
+ console.error('Error making the Nearby Search request:', _context.t0);
3929
+ throw _context.t0;
3930
+ case 18:
3931
+ case "end":
3932
+ return _context.stop();
3933
+ }
3934
+ }, _callee, null, [[3, 14]]);
3935
+ }));
3936
+ return function searchNearbyPlaces(_x, _x2, _x3) {
3937
+ return _ref.apply(this, arguments);
3938
+ };
3939
+ }();
3940
+
3941
+ var PlacesContext = /*#__PURE__*/createContext();
3942
+ var usePlaces = function usePlaces() {
3943
+ return useContext(PlacesContext);
3944
+ };
3945
+ var PlacesProvider = function PlacesProvider(_ref) {
3946
+ var children = _ref.children,
3947
+ placeMappings = _ref.placeMappings,
3948
+ markerColors = _ref.markerColors;
3949
+ var _useMap = useMap(),
3950
+ selectedPlaces = _useMap.selectedPlaces,
3951
+ zoom = _useMap.zoom,
3952
+ center = _useMap.center;
3953
+ var _useState = useState({
3954
+ markers: [],
3955
+ icon: null
3956
+ }),
3957
+ _useState2 = _slicedToArray(_useState, 2),
3958
+ poiMarkers = _useState2[0],
3959
+ setPoiMarkers = _useState2[1];
3960
+ var _useState3 = useState(center),
3961
+ _useState4 = _slicedToArray(_useState3, 2),
3962
+ currentCenter = _useState4[0],
3963
+ setCurrentCenter = _useState4[1];
3964
+ var _useState5 = useState(zoom),
3965
+ _useState6 = _slicedToArray(_useState5, 2),
3966
+ currentZoom = _useState6[0],
3967
+ setCurrentZoom = _useState6[1];
3968
+ var _useState7 = useState(false),
3969
+ _useState8 = _slicedToArray(_useState7, 2),
3970
+ placesWindow = _useState8[0],
3971
+ setPlacesWindow = _useState8[1];
3972
+ var _useState9 = useState(null),
3973
+ _useState10 = _slicedToArray(_useState9, 2),
3974
+ selectedPlaceMarker = _useState10[0],
3975
+ setSelectedPlaceMarker = _useState10[1];
3976
+ var getRadiusForZoom = function getRadiusForZoom() {
3977
+ if (currentZoom >= 18) return 1000;
3978
+ if (currentZoom <= 10) return 0;
3979
+ var tempZoom = Math.pow(19 - currentZoom, 4.85);
3980
+ var radius = tempZoom;
3981
+ var minRadius = 1500;
3982
+ var maxRadius = 800000;
3983
+ if (radius < minRadius) radius = minRadius;else if (radius > maxRadius) radius = maxRadius;
3984
+ return radius;
3985
+ };
3986
+ useEffect(function () {
3987
+ if (!selectedPlaces || !selectedPlaces.length > 0 || !center || currentZoom < 12) {
3988
+ setPoiMarkers({
3989
+ markers: [],
3990
+ icon: null
3991
+ });
3992
+ return;
3993
+ }
3994
+ var fetchPlaces = /*#__PURE__*/function () {
3995
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
3996
+ var poiTypes, selectedPOICategories, radius, location, response, newMarkers;
3997
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
3998
+ while (1) switch (_context.prev = _context.next) {
3999
+ case 0:
4000
+ poiTypes = [];
4001
+ selectedPOICategories = selectedPlaces;
4002
+ selectedPOICategories.forEach(function (pointOfInterest) {
4003
+ poiTypes = poiTypes.concat(placeMappings[pointOfInterest]);
4004
+ });
4005
+ radius = getRadiusForZoom();
4006
+ location = {
4007
+ latitude: currentCenter.lat,
4008
+ longitude: currentCenter.lng
4009
+ };
4010
+ _context.prev = 5;
4011
+ _context.next = 8;
4012
+ return searchNearbyPlaces(poiTypes, location, radius);
4013
+ case 8:
4014
+ response = _context.sent;
4015
+ newMarkers = response.places.map(function (place) {
4016
+ var getParentCategory = function getParentCategory(types) {
4017
+ var selectedTypes = selectedPOICategories.reduce(function (acc, category) {
4018
+ return acc.concat(placeMappings[category]);
4019
+ }, []);
4020
+ var _iterator = _createForOfIteratorHelper(types),
4021
+ _step;
4022
+ try {
4023
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
4024
+ var type = _step.value;
4025
+ if (!selectedTypes.includes(type)) continue;
4026
+ for (var category in placeMappings) {
4027
+ if (placeMappings[category].includes(type)) {
4028
+ return category;
4029
+ }
4030
+ }
4031
+ }
4032
+ } catch (err) {
4033
+ _iterator.e(err);
4034
+ } finally {
4035
+ _iterator.f();
4036
+ }
4037
+ };
4038
+ var icon = markerIconProps(markerColors.placeMarkers, getParentCategory(place.types));
4039
+ return {
4040
+ position: {
4041
+ lat: place.location.latitude,
4042
+ lng: place.location.longitude
4043
+ },
4044
+ title: place.displayName.text,
4045
+ icon: icon
4046
+ };
4047
+ });
4048
+ setPoiMarkers({
4049
+ markers: newMarkers,
4050
+ icon: null
4051
+ });
4052
+ _context.next = 16;
4053
+ break;
4054
+ case 13:
4055
+ _context.prev = 13;
4056
+ _context.t0 = _context["catch"](5);
4057
+ console.error('Failed to fetch places:', _context.t0);
4058
+ case 16:
4059
+ case "end":
4060
+ return _context.stop();
4061
+ }
4062
+ }, _callee, null, [[5, 13]]);
4063
+ }));
4064
+ return function fetchPlaces() {
4065
+ return _ref2.apply(this, arguments);
4066
+ };
4067
+ }();
4068
+ fetchPlaces();
4069
+ }, [selectedPlaces, currentZoom, currentCenter]);
4070
+ return /*#__PURE__*/React.createElement(PlacesContext.Provider, {
4071
+ value: {
4072
+ poiMarkers: poiMarkers,
4073
+ setCurrentCenter: setCurrentCenter,
4074
+ currentCenter: currentCenter,
4075
+ setCurrentZoom: setCurrentZoom,
4076
+ currentZoom: currentZoom,
4077
+ placesWindow: placesWindow,
4078
+ setPlacesWindow: setPlacesWindow,
4079
+ selectedPlaceMarker: selectedPlaceMarker,
4080
+ setSelectedPlaceMarker: setSelectedPlaceMarker
4081
+ }
4082
+ }, children);
4083
+ };
4084
+
4085
+ var PlaceMarker = function PlaceMarker(_ref) {
4086
+ var marker = _ref.marker,
4087
+ index = _ref.index,
4088
+ selectedPlaceMarker = _ref.selectedPlaceMarker,
4089
+ setSelectedPlaceMarker = _ref.setSelectedPlaceMarker,
4090
+ placesWindow = _ref.placesWindow,
4091
+ setPlacesWindow = _ref.setPlacesWindow;
4092
+ var markerKey = "marker-".concat(marker.title, "-").concat(index);
4093
+ var placeMarkerClickHandler = function placeMarkerClickHandler() {
4094
+ setSelectedPlaceMarker(markerKey);
4095
+ setPlacesWindow(true);
4096
+ };
4097
+ return /*#__PURE__*/React.createElement(Marker, {
4098
+ key: markerKey,
4099
+ position: marker.position,
4100
+ title: marker.title,
4101
+ icon: marker.icon,
4102
+ options: {
4103
+ optimized: false
4104
+ },
4105
+ onClick: placeMarkerClickHandler
4106
+ }, selectedPlaceMarker === markerKey && placesWindow && marker && /*#__PURE__*/React.createElement(InfoWindowF, {
4107
+ position: marker.position,
4108
+ onCloseClick: function onCloseClick() {
4109
+ return setPlacesWindow(false);
4110
+ },
4111
+ options: {
4112
+ maxWidth: 400
4113
+ }
4114
+ }, /*#__PURE__*/React.createElement("div", null, marker.title)));
4115
+ };
4116
+
4117
+ var ShowAllButton = function ShowAllButton(_ref) {
4118
+ var mapInteracted = _ref.mapInteracted,
4119
+ markerConfigs = _ref.markerConfigs,
4120
+ setMapInteracted = _ref.setMapInteracted,
4121
+ fitBounds = _ref.fitBounds,
4122
+ mapRef = _ref.mapRef,
4123
+ pinIconUrl = _ref.pinIconUrl,
4124
+ setSelectedFilters = _ref.setSelectedFilters,
4125
+ setQuery = _ref.setQuery,
4126
+ listingCount = _ref.listingCount;
4127
+ if (!mapInteracted || !markerConfigs) {
4128
+ return null;
4129
+ }
4130
+ return /*#__PURE__*/React.createElement("button", {
4131
+ style: {
4132
+ fontFamily: 'Roboto, Arial, sans-serif',
4133
+ fontSize: '14px',
4134
+ fontWeight: '500'
4135
+ },
4136
+ className: "absolute bottom-10 left-2.5 z-10 flex items-center justify-center pl-2 pb-1 pt-1.5 pr-3 bg-white text-black border-none rounded-full shadow cursor-pointer text-sm font-medium",
4137
+ onClick: function onClick() {
4138
+ setMapInteracted(false);
4139
+ fitBounds(mapRef.current, true);
4140
+ if (listingCount < 2) {
4141
+ setSelectedFilters({});
4142
+ setQuery(null);
4143
+ }
4144
+ }
4145
+ }, /*#__PURE__*/React.createElement("img", {
4146
+ src: pinIconUrl,
4147
+ alt: "Pin Icon",
4148
+ className: "w-5 h-5"
4149
+ }), "Show All");
4150
+ };
4151
+
4152
+ var Map = function Map(_ref) {
4153
+ var markerConfigs = _ref.markerConfigs,
4154
+ infoWindowClasses = _ref.infoWindowClasses,
4155
+ _ref$clusterGridSize = _ref.clusterGridSize,
4156
+ clusterGridSize = _ref$clusterGridSize === void 0 ? 60 : _ref$clusterGridSize;
4157
+ var _useMap = useMap(),
4158
+ location = _useMap.location,
4159
+ zoom = _useMap.zoom,
4160
+ center = _useMap.center;
4161
+ _useMap.commuteLocation;
4162
+ var selectLocationEntity = _useMap.selectLocationEntity,
4163
+ setLocation = _useMap.setLocation,
4164
+ mapInteracted = _useMap.mapInteracted,
4165
+ setMapInteracted = _useMap.setMapInteracted;
4166
+ var _useMapList = useMapList(),
4167
+ mapItems = _useMapList.mapItems;
4168
+ _useMapList.handleFilterListingsByLocation;
4169
+ var filteredListings = _useMapList.filteredListings,
4170
+ setSelectedFilters = _useMapList.setSelectedFilters,
4171
+ setQuery = _useMapList.setQuery;
4172
+ var mapRef = useRef();
4173
+ var markerRefs = useRef({});
4174
+ var mapContainerRef = useRef(null);
4175
+ var _usePlaces = usePlaces(),
4176
+ poiMarkers = _usePlaces.poiMarkers,
4177
+ setCurrentCenter = _usePlaces.setCurrentCenter,
4178
+ currentCenter = _usePlaces.currentCenter,
4179
+ setCurrentZoom = _usePlaces.setCurrentZoom,
4180
+ currentZoom = _usePlaces.currentZoom,
4181
+ selectedPlaceMarker = _usePlaces.selectedPlaceMarker,
4182
+ setSelectedPlaceMarker = _usePlaces.setSelectedPlaceMarker,
4183
+ placesWindow = _usePlaces.placesWindow,
4184
+ setPlacesWindow = _usePlaces.setPlacesWindow;
4185
+ var onIdle = function onIdle() {
4186
+ if (!currentCenter || !mapRef.current) return;
4187
+ var newCenter = mapRef.current.getCenter().toJSON();
4188
+ var newZoom = mapRef.current.zoom;
4189
+ setCurrentCenter(newCenter);
4190
+ if (newZoom != currentZoom) {
4191
+ setCurrentZoom(newZoom);
4192
+ }
4193
+ };
4194
+ useEffect(function () {
4195
+ if (mapContainerRef.current) {
4196
+ var handleScroll = function handleScroll() {
4197
+ setMapInteracted(true);
4198
+ };
4199
+ var mapContainerRefCurrent = mapContainerRef.current;
4200
+ mapContainerRef.current.addEventListener('wheel', handleScroll);
4201
+ return function () {
4202
+ return mapContainerRefCurrent.removeEventListener('wheel', handleScroll);
4203
+ };
4204
+ }
4205
+ }, [mapContainerRef.current]);
4206
+ useEffect(function () {
4207
+ if (mapRef.current) {
4208
+ var mapInstance = mapRef.current;
4209
+ var dragStartListener = mapInstance.addListener('dragstart', function () {
4210
+ return setMapInteracted(true);
4211
+ });
4212
+ var mouseDownListener = mapInstance.addListener('mousedown', function () {
4213
+ return setMapInteracted(true);
4214
+ });
4215
+ return function () {
4216
+ google.maps.event.removeListener(dragStartListener);
4217
+ google.maps.event.removeListener(mouseDownListener);
4218
+ };
4219
+ }
4220
+ }, [mapRef.current, mapContainerRef.current]);
4221
+ useEffect(function () {
4222
+ if ((mapItems && mapItems.length > 0 || poiMarkers.length > 0) && mapRef.current) {
4223
+ fitBounds(mapRef.current);
4224
+ }
4225
+ }, [mapItems, mapRef.current, location]);
4226
+ useEffect(function () {
4227
+ if (mapItems && mapItems.length > 0 || poiMarkers.length > 0 && mapRef.current && mapInteracted) {
4228
+ fitBounds(mapRef.current, true);
4229
+ }
4230
+ if (mapRef.current) {
4231
+ var currZoom = mapRef.current.zoom;
4232
+ var setZoomVal = currZoom < 13 ? currZoom : 12;
4233
+ mapRef.current.setZoom(setZoomVal);
4234
+ }
4235
+ }, [filteredListings]);
4236
+ useEffect(function () {
4237
+ if (!mapRef.current || !location || mapInteracted) return;
4238
+ mapRef.current.panTo(new google.maps.LatLng(location.latitude, location.longitude));
4239
+ if (mapRef.current) {
4240
+ var setZoomVal = zoom < 13 ? zoom : 12;
4241
+ mapRef.current.setZoom(setZoomVal);
4242
+ }
4243
+ }, [location, zoom, mapRef.current]);
4244
+ var fitBounds = function fitBounds(map) {
4245
+ var overload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4246
+ if ((mapInteracted === false || overload) && mapItems != null) {
4247
+ var bounds = new window.google.maps.LatLngBounds();
4248
+ mapItems.forEach(function (item) {
4249
+ bounds.extend(new google.maps.LatLng(item.latitude, item.longitude));
4250
+ });
4251
+ if (!map) return;
4252
+ map.fitBounds(bounds);
4253
+ }
4254
+ if (mapRef.current.zoom > 17) {
4255
+ mapRef.current.setZoom(16);
4256
+ }
4257
+ };
4258
+ var markerClickHandler = function markerClickHandler(mapLocation) {
4259
+ setMapInteracted(true);
4260
+ selectLocationEntity(mapLocation);
4261
+ };
4262
+ var onLoad = function onLoad(map) {
4263
+ if (!location || location === null) {
4264
+ mapRef.current = map;
4265
+ fitBounds(map, true);
4266
+ return;
4267
+ }
4268
+ mapRef.current = map;
4269
+ if (mapInteracted === false) {
4270
+ mapRef.current.panTo(new google.maps.LatLng(location.latitude, location.longitude));
4271
+ mapRef.current.setZoom(zoom);
4272
+ }
4273
+ };
4274
+ var pinIconUrl = pinIcon({
4275
+ fillColor: markerConfigs.fillColor,
4276
+ strokeColor: markerConfigs.strokeColor
4277
+ });
4278
+ return /*#__PURE__*/React.createElement(React.Fragment, null, zoom && center && /*#__PURE__*/React.createElement("div", {
4279
+ ref: mapContainerRef,
4280
+ className: "h-full relative"
4281
+ }, /*#__PURE__*/React.createElement(GoogleMap, {
4282
+ zoom: zoom,
4283
+ onLoad: onLoad,
4284
+ onIdle: onIdle,
4285
+ center: center,
4286
+ mapContainerStyle: {
4287
+ width: "100%",
4288
+ height: "100%"
4289
+ },
4290
+ options: {
4291
+ styles: [{
4292
+ featureType: "poi",
4293
+ elementType: "labels",
4294
+ stylers: [{
4295
+ visibility: "off"
4296
+ }]
4297
+ }]
4298
+ }
4299
+ }, /*#__PURE__*/React.createElement(MarkerClustererF, {
4300
+ options: clusterOptions(clusterGridSize, markerConfigs.fillColor)
4301
+ }, function (clusterer) {
4302
+ return /*#__PURE__*/React.createElement(React.Fragment, null, mapItems.map(function (item) {
4303
+ return /*#__PURE__*/React.createElement(MapMarker, {
4304
+ key: item.id,
4305
+ item: item,
4306
+ selectedLocation: location,
4307
+ markerRefs: markerRefs,
4308
+ infoWindowClasses: infoWindowClasses,
4309
+ setSelectedLocation: setLocation,
4310
+ markerClickHandler: markerClickHandler,
4311
+ clusterer: clusterer,
4312
+ markerIcon: markerIcon(markerConfigs),
4313
+ markerIconSelected: markerIconSelected(markerConfigs),
4314
+ setMapInteracted: setMapInteracted
4315
+ });
4316
+ }), poiMarkers && poiMarkers.markers.map(function (marker, index) {
4317
+ return /*#__PURE__*/React.createElement(PlaceMarker, {
4318
+ key: "marker-".concat(marker.title, "-").concat(index),
4319
+ marker: marker,
4320
+ index: index,
4321
+ selectedPlaceMarker: selectedPlaceMarker,
4322
+ placesWindow: placesWindow,
4323
+ setPlacesWindow: setPlacesWindow,
4324
+ setSelectedPlaceMarker: setSelectedPlaceMarker
4325
+ });
4326
+ }));
4327
+ })), mapInteracted && markerConfigs && /*#__PURE__*/React.createElement(ShowAllButton, {
4328
+ mapInteracted: mapInteracted,
4329
+ markerConfigs: markerConfigs,
4330
+ setMapInteracted: setMapInteracted,
4331
+ fitBounds: fitBounds,
4332
+ mapRef: mapRef,
4333
+ pinIconUrl: pinIconUrl,
4334
+ setQuery: setQuery,
4335
+ listingCount: filteredListings.length,
4336
+ setSelectedFilters: setSelectedFilters
4337
+ })));
4338
+ };
4339
+
4340
+ var MapTabs = function MapTabs(_ref) {
4341
+ var map = _ref.map,
4342
+ list = _ref.list,
4343
+ filter = _ref.filter,
4344
+ className = _ref.className,
4345
+ showMap = _ref.showMap;
4346
+ var tabButtonClasses = "flex items-center gap-2 rounded-none border-x-0 data-[state=active]:bg-primary data-[state=active]:text-white";
4347
+ var _useMapList = useMapList(),
4348
+ mobileTab = _useMapList.mobileTab,
4349
+ setMobileTab = _useMapList.setMobileTab;
4350
+ return /*#__PURE__*/React.createElement("div", {
4351
+ className: "\n\t\t\t\trelative overflow-hidden\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : "", "\n\t\t\t")
4352
+ }, /*#__PURE__*/React.createElement(Tabs.Root, {
4353
+ className: "flex flex-col h-screen min-h-screen"
4354
+ //defaultValue="listTab"
4355
+ ,
4356
+ value: mobileTab
4357
+ }, /*#__PURE__*/React.createElement(Tabs.List, {
4358
+ className: "w-full shrink-0 flex divide-x divide-primary",
4359
+ "aria-label": "Review positions"
4360
+ }, /*#__PURE__*/React.createElement(Tabs.Trigger, {
4361
+ value: "listTab",
4362
+ asChild: true,
4363
+ onClick: function onClick() {
4364
+ return setMobileTab("listTab");
4365
+ }
4366
+ }, /*#__PURE__*/React.createElement(Button.Btn, {
4367
+ variant: "outline",
4368
+ isBlock: true,
4369
+ className: tabButtonClasses
4370
+ }, /*#__PURE__*/React.createElement(Button.Body, {
4371
+ className: "justify-center"
4372
+ }, /*#__PURE__*/React.createElement(Button.Icon, {
4373
+ icon: "mdi:view-list",
4374
+ size: "w-5 h-5"
4375
+ }), "List"))), showMap && /*#__PURE__*/React.createElement(Tabs.Trigger, {
4376
+ value: "mapTab",
4377
+ asChild: true,
4378
+ onClick: function onClick() {
4379
+ return setMobileTab("mapTab");
4380
+ }
4381
+ }, /*#__PURE__*/React.createElement(Button.Btn, {
4382
+ variant: "outline",
4383
+ isBlock: true,
4384
+ className: tabButtonClasses
4385
+ }, /*#__PURE__*/React.createElement(Button.Body, {
4386
+ className: "justify-center"
4387
+ }, /*#__PURE__*/React.createElement(Button.Icon, {
4388
+ icon: "mdi:map",
4389
+ size: "w-5 h-5"
4390
+ }), "Map"))), /*#__PURE__*/React.createElement(Tabs.Trigger, {
4391
+ value: "filterTab",
4392
+ asChild: true,
4393
+ onClick: function onClick() {
4394
+ return setMobileTab("filterTab");
4395
+ }
4396
+ }, /*#__PURE__*/React.createElement(Button.Btn, {
4397
+ variant: "outline",
4398
+ isBlock: true,
4399
+ className: tabButtonClasses
4400
+ }, /*#__PURE__*/React.createElement(Button.Body, {
4401
+ className: "justify-center"
4402
+ }, /*#__PURE__*/React.createElement(Button.Icon, {
4403
+ icon: "fluent:search-12-filled",
4404
+ size: "w-5 h-5"
4405
+ }), "Filter")))), /*#__PURE__*/React.createElement(Tabs.Content, {
4406
+ className: "grow bg-white outline-none",
4407
+ value: "listTab"
4408
+ }, list), showMap && /*#__PURE__*/React.createElement(Tabs.Content, {
4409
+ className: "grow bg-white outline-none",
4410
+ value: "mapTab"
4411
+ }, map), /*#__PURE__*/React.createElement(Tabs.Content, {
4412
+ className: "grow bg-white outline-none p-2",
4413
+ value: "filterTab"
4414
+ }, filter)));
4415
+ };
4416
+
4417
+ var MapList = function MapList(_ref) {
4418
+ var _ref$loading = _ref.loading,
4419
+ loading = _ref$loading === void 0 ? false : _ref$loading,
4420
+ mapDetails = _ref.mapDetails,
4421
+ markerConfigs = _ref.markerConfigs,
4422
+ itemExpandedContent = _ref.itemExpandedContent,
4423
+ fieldsShown = _ref.fieldsShown,
4424
+ specialFeatures = _ref.specialFeatures,
4425
+ fieldNames = _ref.fieldNames,
4426
+ showMap = _ref.showMap,
4427
+ placeMappings = _ref.placeMappings;
4428
+ var listProps = {
4429
+ fieldsShown: fieldsShown,
4430
+ fieldNames: fieldNames,
4431
+ itemExpandedContent: itemExpandedContent,
4432
+ loading: loading,
4433
+ showMap: showMap,
4434
+ specialFeatures: specialFeatures
4435
+ };
4436
+ var mapProps = {
4437
+ mapDetails: mapDetails,
4438
+ markerConfigs: markerConfigs,
4439
+ placeMappings: placeMappings,
4440
+ clusterGridSize: 60,
4441
+ showMap: showMap
4442
+ };
4443
+
4444
+ // useEffect(() => {
4445
+ // if (selectedItem !== null) {
4446
+ // trackEvent("Map", "View Location", selectedItem[titlePropName]);
4447
+ // }
4448
+ // // eslint-disable-next-line react-hooks/exhaustive-deps
4449
+ // }, []);
4450
+ var map = /*#__PURE__*/React.createElement(Map, mapProps);
4451
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
4452
+ className: "\n\t\t\t\t\t".concat(showMap == false ? "md:grid-rows-[100vh]" : "md:grid-rows-[50vh_50vh]", "\n\t\t\t\t\tmd:grid md:pt-4 overflow-hidden relative\n\t\t\t\t")
4453
+ }, /*#__PURE__*/React.createElement("div", {
4454
+ className: ""
4455
+ }, /*#__PURE__*/React.createElement(ItemsList, listProps)), /*#__PURE__*/React.createElement("div", null, showMap && map)), /*#__PURE__*/React.createElement("div", {
4456
+ className: "md:hidden"
4457
+ }, /*#__PURE__*/React.createElement(MapTabs, {
4458
+ showMap: showMap,
4459
+ list: /*#__PURE__*/React.createElement(ItemsList, listProps),
4460
+ map: !loading && showMap && map,
4461
+ filter: /*#__PURE__*/React.createElement(Filter, {
4462
+ showMap: showMap,
4463
+ className: "md:hidden"
4464
+ })
4465
+ })));
4466
+ };
4467
+
4468
+ var reactThingy = React;
4469
+ var SectionContext = reactThingy.createContext(null);
4470
+
4471
+ function Provider(_ref) {
4472
+ var children = _ref.children;
4473
+ return /*#__PURE__*/React.createElement(Provider$1, null, children);
4474
+ }
4475
+
4476
+ var SkipLink = function SkipLink(_ref) {
4477
+ var _ref$href = _ref.href,
4478
+ href = _ref$href === void 0 ? '#start-of-content' : _ref$href,
4479
+ className = _ref.className,
4480
+ _ref$children = _ref.children,
4481
+ children = _ref$children === void 0 ? 'Skip to content' : _ref$children;
4482
+ return /*#__PURE__*/React.createElement("a", {
4483
+ href: href,
4484
+ className: "\n\t\t\t\tsr-only focus:not-sr-only focus:absolute focus:py-2 focus:px-6 bg-gray-900 dark:bg-white text-white dark:text-gray-900 font-bold text-center transition-colors hover:bg-gray-700\n\t\t\t\t".concat(className !== null && className !== void 0 ? className : '', "\n\t\t\t")
4485
+ }, children);
4486
+ };
4487
+
4488
+ var RootLayout = function RootLayout(_ref) {
4489
+ var children = _ref.children;
4490
+ var _useState = useState(null),
4491
+ _useState2 = _slicedToArray(_useState, 2),
4492
+ currentSection = _useState2[0],
4493
+ setCurrentSection = _useState2[1];
4494
+ return /*#__PURE__*/React.createElement("div", {
4495
+ id: "top",
4496
+ className: "relative"
4497
+ }, /*#__PURE__*/React.createElement(Provider, null, /*#__PURE__*/React.createElement(SectionContext.Provider, {
4498
+ value: {
4499
+ currentSection: currentSection,
4500
+ setCurrentSection: setCurrentSection
4501
+ }
4502
+ }, /*#__PURE__*/React.createElement(SkipLink, null), /*#__PURE__*/React.createElement("main", {
4503
+ id: "start-of-content"
4504
+ }, children))));
4505
+ };
4506
+
4507
+ var getMapConfig = /*#__PURE__*/function () {
4508
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
4509
+ var response;
4510
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
4511
+ while (1) switch (_context.prev = _context.next) {
4512
+ case 0:
4513
+ _context.prev = 0;
4514
+ _context.next = 3;
4515
+ return api.get("/MapConfig");
4516
+ case 3:
4517
+ response = _context.sent;
4518
+ return _context.abrupt("return", response);
4519
+ case 7:
4520
+ _context.prev = 7;
4521
+ _context.t0 = _context["catch"](0);
4522
+ console.error("Error retrieving map configuration:", _context.t0);
4523
+ throw _context.t0;
4524
+ case 11:
4525
+ case "end":
4526
+ return _context.stop();
4527
+ }
4528
+ }, _callee, null, [[0, 7]]);
4529
+ }));
4530
+ return function getMapConfig() {
4531
+ return _ref.apply(this, arguments);
4532
+ };
4533
+ }();
4534
+
4535
+ var libraries = ['places'];
4536
+ var HireControlMap = function HireControlMap(_ref) {
4537
+ var clientToken = _ref.clientToken;
4538
+ var _useState = useState(null),
4539
+ _useState2 = _slicedToArray(_useState, 2),
4540
+ siteConfig = _useState2[0],
4541
+ setSiteconfig = _useState2[1];
4542
+ useEffect(function () {
4543
+ setClientAuthKey(clientToken);
4544
+ var fetchSiteConfig = /*#__PURE__*/function () {
4545
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
4546
+ var configData;
4547
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
4548
+ while (1) switch (_context.prev = _context.next) {
4549
+ case 0:
4550
+ _context.prev = 0;
4551
+ _context.next = 3;
4552
+ return getMapConfig(clientToken);
4553
+ case 3:
4554
+ configData = _context.sent;
4555
+ setSiteconfig(configData);
4556
+ _context.next = 10;
4557
+ break;
4558
+ case 7:
4559
+ _context.prev = 7;
4560
+ _context.t0 = _context["catch"](0);
4561
+ console.error('Failed to fetch site configuration:', _context.t0);
4562
+ case 10:
4563
+ case "end":
4564
+ return _context.stop();
4565
+ }
4566
+ }, _callee, null, [[0, 7]]);
4567
+ }));
4568
+ return function fetchSiteConfig() {
4569
+ return _ref2.apply(this, arguments);
4570
+ };
4571
+ }();
4572
+ fetchSiteConfig();
4573
+ var handlePopState = function handlePopState(event) {
4574
+ window.location.reload();
4575
+ };
4576
+ window.addEventListener('popstate', handlePopState);
4577
+ return function () {
4578
+ window.removeEventListener('popstate', handlePopState);
4579
+ };
4580
+ }, [clientToken]);
4581
+ var _useLoadScript = useLoadScript({
4582
+ googleMapsApiKey: "AIzaSyAXPlfaoMCrmjNV1u-vFYdLBi7GkGeh4S4",
4583
+ libraries: libraries
4584
+ }),
4585
+ isLoaded = _useLoadScript.isLoaded;
4586
+ return /*#__PURE__*/React.createElement(BrowserRouter, null, /*#__PURE__*/React.createElement(RootLayout, null, isLoaded && siteConfig && /*#__PURE__*/React.createElement(HomeBody, {
4587
+ siteConfig: siteConfig
4588
+ })));
4589
+ };
4590
+ var HomeBody = function HomeBody(_ref3) {
4591
+ var _siteConfig$pointsOfI, _siteConfig$pointsOfI2;
4592
+ var siteConfig = _ref3.siteConfig;
4593
+ var resetFilters = false;
4594
+ return /*#__PURE__*/React.createElement(MapListProvider, {
4595
+ siteConfig: siteConfig,
4596
+ resetFilters: resetFilters
4597
+ }, /*#__PURE__*/React.createElement(MapProvider, {
4598
+ resetFilters: resetFilters
4599
+ }, /*#__PURE__*/React.createElement(PlacesProvider, {
4600
+ placeMappings: (_siteConfig$pointsOfI = siteConfig.pointsOfInterestConfig.placeMappings) !== null && _siteConfig$pointsOfI !== void 0 ? _siteConfig$pointsOfI : {},
4601
+ markerColors: {
4602
+ fillColor: siteConfig.colors.primary,
4603
+ strokeColor: siteConfig.colors.primaryDark,
4604
+ selectedFillColor: siteConfig.colors.secondary,
4605
+ selectedStrokeColor: siteConfig.colors.secondaryDark,
4606
+ placeMarkers: {
4607
+ colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
4608
+ size: siteConfig.pointsOfInterestConfig.placeMarkerSize
4609
+ }
4610
+ }
4611
+ }, /*#__PURE__*/React.createElement(PageHead, {
4612
+ title: ""
4613
+ }), /*#__PURE__*/React.createElement(Grid, {
4614
+ as: "section",
4615
+ id: "job-search-interface",
4616
+ columns: "md:grid-cols-[1fr_2.5fr] lg:grid-cols-[1fr_3.5fr]",
4617
+ gap: "gap-0",
4618
+ autoRows: false,
4619
+ className: "items-stretch h-screen min-h-[30rem] divide-x divide-uiAccent/20"
4620
+ }, /*#__PURE__*/React.createElement(Grid.Item, {
4621
+ className: "bg-gray-100"
4622
+ }, /*#__PURE__*/React.createElement(Filter, {
4623
+ showMap: siteConfig.showMap,
4624
+ className: "hidden md:block"
4625
+ })), /*#__PURE__*/React.createElement(MapList, {
4626
+ markerConfigs: {
4627
+ fillColor: siteConfig.colors.primary,
4628
+ strokeColor: siteConfig.colors.primaryDark,
4629
+ selectedFillColor: siteConfig.colors.secondary,
4630
+ selectedStrokeColor: siteConfig.colors.secondaryDark,
4631
+ placeMarkers: {
4632
+ colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
4633
+ size: siteConfig.pointsOfInterestConfig.placeMarkerSize
4634
+ }
4635
+ },
4636
+ showMap: siteConfig.showMap,
4637
+ fieldsShown: siteConfig.fieldsShown,
4638
+ specialFeatures: siteConfig.specialFeatures,
4639
+ fieldNames: siteConfig.fieldNames,
4640
+ placeMappings: (_siteConfig$pointsOfI2 = siteConfig.pointsOfInterestConfig.placeMappings) !== null && _siteConfig$pointsOfI2 !== void 0 ? _siteConfig$pointsOfI2 : {}
4641
+ })))));
4642
+ };
4643
+
4644
+ export { HireControlMap, HireControlMap as default };