@ticketboothapp/booking 0.1.19 → 0.1.22
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.
- package/package.json +2 -1
- package/src/components/BookingWidget.tsx +282 -26
- package/src/components/ManageBookingView.tsx +75 -23
- package/src/components/PostBookingDependentAddOnUpsell.tsx +1 -1
- package/src/components/booking/BookingProductGrid.tsx +1 -1
- package/src/components/booking/Calendar.module.css +3 -3
- package/src/components/booking/CheckoutForm.tsx +1 -1
- package/src/components/booking/InfoTooltip.tsx +2 -13
- package/src/components/booking/PickupLocationSelector.tsx +2 -2
- package/src/components/booking/PriceBreakdown.tsx +11 -34
- package/src/index.ts +3 -1
- package/tsconfig.json +1 -1
- package/src/components/JobApplicationDialog.module.css +0 -440
- package/src/components/JobApplicationDialog.tsx +0 -620
- package/src/components/PickupLocationMap.tsx +0 -110
- package/src/components/accordion.css +0 -27
- package/src/components/accordion.tsx +0 -29
- package/src/components/analytics/AnalyticsConsentRestore.tsx +0 -19
- package/src/components/analytics/AnalyticsScripts.tsx +0 -106
- package/src/components/analytics/CookieConsentBanner.css +0 -86
- package/src/components/analytics/CookieConsentBanner.tsx +0 -102
- package/src/components/bottom-sheet.module.css +0 -78
- package/src/components/bottom-sheet.tsx +0 -60
- package/src/components/breadcrumb.module.css +0 -40
- package/src/components/breadcrumb.tsx +0 -36
- package/src/components/client-bottom-sheet.tsx +0 -14
- package/src/components/conditional-footer.tsx +0 -27
- package/src/components/contact-us.module.css +0 -147
- package/src/components/contact-us.tsx +0 -49
- package/src/components/email-signup.css +0 -151
- package/src/components/email-signup.tsx +0 -63
- package/src/components/faq-wrapper.module.css +0 -47
- package/src/components/faq-wrapper.tsx +0 -15
- package/src/components/footer.css +0 -187
- package/src/components/footer.tsx +0 -143
- package/src/components/global-simple-modal.tsx +0 -33
- package/src/components/google-review-summary.module.css +0 -77
- package/src/components/google-review-summary.tsx +0 -50
- package/src/components/hero-image.css +0 -13
- package/src/components/hero-image.tsx +0 -44
- package/src/components/language-aware-link.tsx +0 -72
- package/src/components/language-switcher.module.css +0 -124
- package/src/components/language-switcher.tsx +0 -75
- package/src/components/map-section.css +0 -59
- package/src/components/map-section.tsx +0 -63
- package/src/components/navbar.module.css +0 -152
- package/src/components/navbar.tsx +0 -125
- package/src/components/parallax-provider.tsx +0 -11
- package/src/components/product-theme-pages/best-option.module.css +0 -70
- package/src/components/product-theme-pages/best-option.tsx +0 -35
- package/src/components/product-theme-pages/extended-tour-options.module.css +0 -22
- package/src/components/product-theme-pages/extended-tour-options.tsx +0 -11
- package/src/components/product-theme-pages/photo-gallery.tsx +0 -90
- package/src/components/product-theme-pages/product-theme-page-layout.module.css +0 -13
- package/src/components/product-theme-pages/product-theme-page-layout.tsx +0 -67
- package/src/components/product-theme-pages/top-of-fold.module.css +0 -179
- package/src/components/product-theme-pages/top-of-fold.tsx +0 -80
- package/src/components/product-tile/image-only-product-tile-desktop.module.css +0 -106
- package/src/components/product-tile/image-only-product-tile-desktop.tsx +0 -56
- package/src/components/product-tile/image-only-product-tile-mobile.module.css +0 -122
- package/src/components/product-tile/image-only-product-tile-mobile.tsx +0 -89
- package/src/components/product-tile/image-only-product-tile.tsx +0 -44
- package/src/components/product-tile/product-tile-card.module.css +0 -84
- package/src/components/product-tile/product-tile-card.tsx +0 -61
- package/src/components/review-highlights-section.css +0 -85
- package/src/components/review-highlights-section.tsx +0 -127
- package/src/components/season-closure-overlay.module.css +0 -99
- package/src/components/season-closure-overlay.tsx +0 -98
- package/src/components/simple-modal.tsx +0 -69
- package/src/components/simple-top-of-fold.module.css +0 -76
- package/src/components/simple-top-of-fold.tsx +0 -34
- package/src/components/spacer.css +0 -41
- package/src/components/spacer.tsx +0 -23
- package/src/components/star-rating.module.css +0 -74
- package/src/components/star-rating.tsx +0 -48
- package/src/components/title-subtitle.module.css +0 -10
- package/src/components/title-subtitle.tsx +0 -30
- package/src/components/translatable-reviews.tsx +0 -75
- package/src/components/value-props.css +0 -185
- package/src/components/value-props.tsx +0 -88
- package/src/constants/booking-guide-quiz.ts +0 -64
- package/src/constants/contact-info.ts +0 -2
- package/src/constants/faq.ts +0 -44
- package/src/constants/json-ld/faq-json-ld.tsx +0 -170
- package/src/constants/json-ld/homepage-json-ld.tsx +0 -138
- package/src/constants/json-ld/job-posting-json-ld.tsx +0 -92
- package/src/constants/json-ld/organization-json-ld.tsx +0 -62
- package/src/constants/json-ld/page-json-ld.tsx +0 -6
- package/src/constants/json-ld/product-json-ld.tsx +0 -154
- package/src/constants/json-ld/review-json-ld.tsx +0 -377
- package/src/constants/navigation-links/footer-links.ts +0 -48
- package/src/constants/navigation-links/nav-bar-links.ts +0 -41
- package/src/constants/navigation-links/navigation-link.ts +0 -6
- package/src/constants/quiz-recommendations.ts +0 -506
- package/src/constants/reviews.ts +0 -75
- package/src/constants/staff.ts +0 -197
- package/src/constants/value-props.ts +0 -58
- package/src/hooks/use-bottom-sheet.tsx +0 -15
- package/src/hooks/use-simple-modal.tsx +0 -27
- package/src/hooks/useEmailSubscription.tsx +0 -103
- package/src/hooks/useEmbeddedInIframe.ts +0 -16
- package/src/hooks/useQuiz.tsx +0 -210
- package/src/providers/bottom-sheet-provider.tsx +0 -40
- package/src/types/fareharbor.d.ts +0 -12
- package/src/types/quiz.ts +0 -59
- /package/src/{app/photo-sessions → lib}/photo-packages.ts +0 -0
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
import { RecommendationRule, AnswerMatch } from "@/types/quiz";
|
|
2
|
-
import { PRODUCTS } from "./products";
|
|
3
|
-
|
|
4
|
-
// Helper function to check if answers include all specified values
|
|
5
|
-
const includesAll = (answers: (string | undefined)[], values: string[]) =>
|
|
6
|
-
values.every(v => v && answers.filter((a): a is string => a !== undefined).includes(v));
|
|
7
|
-
|
|
8
|
-
// Helper function to check if answers include any of specified values
|
|
9
|
-
const includesAny = (answers: (string | undefined)[], values: string[]) =>
|
|
10
|
-
values.some(v => v && answers.filter((a): a is string => a !== undefined).includes(v));
|
|
11
|
-
|
|
12
|
-
// Helper function to check if answers exclude all specified values
|
|
13
|
-
const excludesAll = (answers: (string | undefined)[], values: string[]) =>
|
|
14
|
-
values.every(v => v && !answers.filter((a): a is string => a !== undefined).includes(v));
|
|
15
|
-
|
|
16
|
-
export const RECOMMENDATION_RULES: RecommendationRule[] = [
|
|
17
|
-
{
|
|
18
|
-
answers: {
|
|
19
|
-
what_lakes: {
|
|
20
|
-
values: ["moraine_lake"],
|
|
21
|
-
matchType: 'AND'
|
|
22
|
-
},
|
|
23
|
-
sunrise: "yes",
|
|
24
|
-
exclude: {
|
|
25
|
-
what_lakes: ["lake_louise"],
|
|
26
|
-
hiking: ["moderate_hikes", "challenging_hikes", "expert_hikes"],
|
|
27
|
-
what_activities: ["canoeing"]
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE.id],
|
|
31
|
-
recommendationDetails: {
|
|
32
|
-
[
|
|
33
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE.id]: [
|
|
34
|
-
"Book a **regular ticket** for **3 hours at Moraine Lake**",
|
|
35
|
-
"Arrives at Moraine Lake before sunrise",
|
|
36
|
-
"Hot drinks and blankets provided",
|
|
37
|
-
"Enough time for an easy walk around the lake and photos at the lake's most famous viewpoints"
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
answers: {
|
|
43
|
-
what_lakes: {
|
|
44
|
-
values: ["moraine_lake"],
|
|
45
|
-
matchType: 'AND'
|
|
46
|
-
},
|
|
47
|
-
sunrise: "yes",
|
|
48
|
-
exclude: {
|
|
49
|
-
what_lakes: ["lake_louise"],
|
|
50
|
-
what_activities: ["canoeing"]
|
|
51
|
-
},
|
|
52
|
-
hiking: {
|
|
53
|
-
values: ["moderate_hikes", "challenging_hikes", "expert_hikes"],
|
|
54
|
-
matchType: 'OR'
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE.id],
|
|
58
|
-
recommendationDetails: {
|
|
59
|
-
[
|
|
60
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE.id]: [
|
|
61
|
-
"Book an **extended ticket** for **9.5 hours at Moraine Lake**",
|
|
62
|
-
"Arrives at Moraine Lake before sunrise",
|
|
63
|
-
"Hot drinks and blankets provided",
|
|
64
|
-
"Enough time to watch sunrise then go for a longer day hike"
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
answers: {
|
|
70
|
-
what_lakes: {
|
|
71
|
-
values: ["moraine_lake"],
|
|
72
|
-
matchType: 'AND'
|
|
73
|
-
},
|
|
74
|
-
sunrise: "yes",
|
|
75
|
-
exclude: {
|
|
76
|
-
what_lakes: ["lake_louise"],
|
|
77
|
-
hiking: ["expert_hikes"],
|
|
78
|
-
},
|
|
79
|
-
what_activities: {
|
|
80
|
-
values: ["canoeing"],
|
|
81
|
-
matchType: 'OR'
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE.id],
|
|
85
|
-
recommendationDetails: {
|
|
86
|
-
[
|
|
87
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE.id]: [
|
|
88
|
-
"Book an **extended ticket** for **9.5 hours at Moraine Lake**",
|
|
89
|
-
"Arrives at Moraine Lake before sunrise",
|
|
90
|
-
"Hot drinks and blankets provided",
|
|
91
|
-
"Enough time to watch sunrise, canoe around the lake, and even hike a short trail"
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
answers: {
|
|
97
|
-
what_lakes: {
|
|
98
|
-
values: ["moraine_lake", "lake_louise"],
|
|
99
|
-
matchType: 'AND'
|
|
100
|
-
},
|
|
101
|
-
sunrise: "yes",
|
|
102
|
-
exclude: {
|
|
103
|
-
hiking: ["moderate_hikes", "challenging_hikes", "expert_hikes"],
|
|
104
|
-
what_activities: ["canoeing"]
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id],
|
|
108
|
-
recommendationDetails: {
|
|
109
|
-
[
|
|
110
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id]: [
|
|
111
|
-
"Book a **regular ticket** for **2 hours at Moraine Lake + 1 hour at Lake Louise**",
|
|
112
|
-
"Arrives at Moraine Lake to watch sunrise before departing to Lake Louise",
|
|
113
|
-
"Hot drinks and blankets provided",
|
|
114
|
-
"See the most 2 famous lakes of Banff National Park with the rising sun"
|
|
115
|
-
]
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
answers: {
|
|
120
|
-
what_lakes: {
|
|
121
|
-
values: ["moraine_lake", "lake_louise"],
|
|
122
|
-
matchType: 'AND'
|
|
123
|
-
},
|
|
124
|
-
sunrise: "yes",
|
|
125
|
-
hiking: {
|
|
126
|
-
values: ["moderate_hikes", "challenging_hikes", "expert_hikes"],
|
|
127
|
-
matchType: 'OR'
|
|
128
|
-
},
|
|
129
|
-
exclude: {
|
|
130
|
-
what_activities: ["canoeing"]
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id],
|
|
134
|
-
recommendationDetails: {
|
|
135
|
-
[
|
|
136
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id]: [
|
|
137
|
-
"Book an **extended ticket** for **2 hours at Moraine Lake + 7.5 hours at Lake Louise**",
|
|
138
|
-
"Arrives at Moraine Lake to watch sunrise before departing to Lake Louise",
|
|
139
|
-
"Hot drinks and blankets provided",
|
|
140
|
-
"See the most 2 famous lakes of Banff National Park with the rising sun, then go for a longer day hike at Lake Louise"
|
|
141
|
-
]
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
answers: {
|
|
146
|
-
what_lakes: {
|
|
147
|
-
values: ["moraine_lake", "lake_louise"],
|
|
148
|
-
matchType: 'AND'
|
|
149
|
-
},
|
|
150
|
-
sunrise: "yes",
|
|
151
|
-
hiking: {
|
|
152
|
-
values: ["moderate_hikes", "challenging_hikes"],
|
|
153
|
-
matchType: 'OR'
|
|
154
|
-
},
|
|
155
|
-
what_activities: {
|
|
156
|
-
values: ["canoeing"],
|
|
157
|
-
matchType: 'OR'
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id],
|
|
161
|
-
recommendationDetails: {
|
|
162
|
-
[
|
|
163
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id]: [
|
|
164
|
-
"Book an **extended ticket** for **2 hours at Moraine Lake + 7.5 hours at Lake Louise**",
|
|
165
|
-
"Arrives at Moraine Lake to watch sunrise before departing to Lake Louise",
|
|
166
|
-
"Hot drinks and blankets provided",
|
|
167
|
-
"See the most 2 famous lakes of Banff National Park with the rising sun, then go pair a canoeing trip with a a hike at Lake Louise"
|
|
168
|
-
]
|
|
169
|
-
}
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
answers: {
|
|
173
|
-
what_lakes: {
|
|
174
|
-
values: ["moraine_lake", "lake_louise"],
|
|
175
|
-
matchType: 'AND'
|
|
176
|
-
},
|
|
177
|
-
sunrise: "yes",
|
|
178
|
-
what_activities: {
|
|
179
|
-
values: ["canoeing"],
|
|
180
|
-
matchType: 'OR'
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id],
|
|
184
|
-
recommendationDetails: {
|
|
185
|
-
[
|
|
186
|
-
PRODUCTS.MORAINE_LAKE_SUNRISE_LAKE_LOUISE_GOLDEN_HOUR.id]: [
|
|
187
|
-
"Book an **extended ticket** for **2 hours at Moraine Lake + 7.5 hours at Lake Louise**",
|
|
188
|
-
"Arrives at Moraine Lake to watch sunrise before departing to Lake Louise",
|
|
189
|
-
"Hot drinks and blankets provided",
|
|
190
|
-
"See the most 2 famous lakes of Banff National Park with the rising sun, then go for a canoe around Lake Louise"
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
answers: {
|
|
196
|
-
what_lakes: {
|
|
197
|
-
values: ["moraine_lake", "lake_louise"],
|
|
198
|
-
matchType: 'AND'
|
|
199
|
-
},
|
|
200
|
-
sunrise: "no",
|
|
201
|
-
exclude: {
|
|
202
|
-
hiking: ["moderate_hikes", "challenging_hikes", "expert_hikes"]
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
recommendationIds: [PRODUCTS.TWO_LAKES_COMBO.id],
|
|
206
|
-
recommendationDetails: {
|
|
207
|
-
[
|
|
208
|
-
PRODUCTS.TWO_LAKES_COMBO.id]: [
|
|
209
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
210
|
-
"Book a **regular ticket** for **2 hours at Moraine Lake + 2 hours at Lake Louise**",
|
|
211
|
-
"See the most 2 famous lakes of Banff National Park in one day",
|
|
212
|
-
"Enough time to canoe at either or both lakes"
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
answers: {
|
|
218
|
-
what_lakes: {
|
|
219
|
-
values: ["moraine_lake", "lake_louise"],
|
|
220
|
-
matchType: 'AND'
|
|
221
|
-
},
|
|
222
|
-
sunrise: "no",
|
|
223
|
-
hiking: {
|
|
224
|
-
values: ["moderate_hikes", "challenging_hikes", "expert_hikes"],
|
|
225
|
-
matchType: 'OR'
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
recommendationIds: [PRODUCTS.TWO_LAKES_COMBO.id],
|
|
229
|
-
recommendationDetails: {
|
|
230
|
-
[
|
|
231
|
-
PRODUCTS.TWO_LAKES_COMBO.id]: [
|
|
232
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
233
|
-
"Book an **extended ticket** for **2 hours at Moraine Lake + 5.5 hours at Lake Louise**",
|
|
234
|
-
"See the most 2 famous lakes of Banff National Park in one day, then go for a longer day hike at Lake Louise"
|
|
235
|
-
]
|
|
236
|
-
}
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
answers: {
|
|
240
|
-
what_lakes: {
|
|
241
|
-
values: ["moraine_lake"],
|
|
242
|
-
matchType: 'AND'
|
|
243
|
-
},
|
|
244
|
-
sunrise: "no",
|
|
245
|
-
exclude: {
|
|
246
|
-
what_lakes: ["lake_louise"],
|
|
247
|
-
hiking: ["challenging_hikes", "expert_hikes"],
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_ADVENTURE.id],
|
|
251
|
-
recommendationDetails: {
|
|
252
|
-
[
|
|
253
|
-
PRODUCTS.MORAINE_LAKE_ADVENTURE.id]: [
|
|
254
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
255
|
-
"Book a **regular ticket** for **4 hours at Moraine Lake**",
|
|
256
|
-
"Enough time for a small to moderate hike in Moraine Lake and hit all the famous photo spots or take a canoe out on the lake."
|
|
257
|
-
]
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
answers: {
|
|
262
|
-
what_lakes: {
|
|
263
|
-
values: ["moraine_lake"],
|
|
264
|
-
matchType: 'AND'
|
|
265
|
-
},
|
|
266
|
-
sunrise: "no",
|
|
267
|
-
exclude: {
|
|
268
|
-
what_lakes: ["lake_louise"],
|
|
269
|
-
},
|
|
270
|
-
hiking: {
|
|
271
|
-
values: ["challenging_hikes", "expert_hikes"],
|
|
272
|
-
matchType: 'OR'
|
|
273
|
-
}
|
|
274
|
-
},
|
|
275
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_ADVENTURE.id],
|
|
276
|
-
recommendationDetails: {
|
|
277
|
-
[
|
|
278
|
-
PRODUCTS.MORAINE_LAKE_ADVENTURE.id]: [
|
|
279
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
280
|
-
"Book an **extended ticket** for **7.5 hours at Moraine Lake**",
|
|
281
|
-
"Enough time for a longer hike in Moraine Lake and hit all the famous photo spots or take a canoe out on the lake."
|
|
282
|
-
]
|
|
283
|
-
}
|
|
284
|
-
},
|
|
285
|
-
{
|
|
286
|
-
answers: {
|
|
287
|
-
what_lakes: {
|
|
288
|
-
values: ["lake_louise"],
|
|
289
|
-
matchType: 'AND'
|
|
290
|
-
},
|
|
291
|
-
sunrise: "no",
|
|
292
|
-
exclude: {
|
|
293
|
-
what_lakes: ["moraine_lake"],
|
|
294
|
-
hiking: ["moderate_hikes", "challenging_hikes", "expert_hikes"]
|
|
295
|
-
}
|
|
296
|
-
},
|
|
297
|
-
recommendationIds: [PRODUCTS.LAKE_LOUISE_ADVENTURE.id],
|
|
298
|
-
recommendationDetails: {
|
|
299
|
-
[
|
|
300
|
-
PRODUCTS.LAKE_LOUISE_ADVENTURE.id]: [
|
|
301
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
302
|
-
"Book a **regular ticket** for **5 hours at Lake Louise**",
|
|
303
|
-
"Enough time for a small to moderate hike in Lake Louise and to hit all the famous photo spots or take a canoe out on the lake."
|
|
304
|
-
]
|
|
305
|
-
}
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
answers: {
|
|
309
|
-
what_lakes: {
|
|
310
|
-
values: ["lake_louise"],
|
|
311
|
-
matchType: 'AND'
|
|
312
|
-
},
|
|
313
|
-
sunrise: "no",
|
|
314
|
-
exclude: {
|
|
315
|
-
what_lakes: ["moraine_lake"],
|
|
316
|
-
},
|
|
317
|
-
hiking: {
|
|
318
|
-
values: ["challenging_hikes", "expert_hikes"],
|
|
319
|
-
matchType: 'OR'
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
recommendationIds: [PRODUCTS.LAKE_LOUISE_ADVENTURE.id],
|
|
323
|
-
recommendationDetails: {
|
|
324
|
-
[
|
|
325
|
-
PRODUCTS.LAKE_LOUISE_ADVENTURE.id]: [
|
|
326
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
327
|
-
"Book an **extended ticket** for **8.5 hours at Lake Louise**",
|
|
328
|
-
"Enough time for a longer hike in Lake Louise and to hit all the famous photo spots or take a canoe out on the lake."
|
|
329
|
-
]
|
|
330
|
-
}
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
answers: {
|
|
334
|
-
what_lakes: {
|
|
335
|
-
values: ["emerald_lake"],
|
|
336
|
-
matchType: 'AND'
|
|
337
|
-
},
|
|
338
|
-
exclude: {
|
|
339
|
-
what_lakes: ["lake_louise", "moraine_lake"],
|
|
340
|
-
}
|
|
341
|
-
},
|
|
342
|
-
recommendationIds: [PRODUCTS.EMERALD_LAKE_ESCAPE.id],
|
|
343
|
-
recommendationDetails: {
|
|
344
|
-
[
|
|
345
|
-
PRODUCTS.EMERALD_LAKE_ESCAPE.id]: [
|
|
346
|
-
"A 10 hour full day tour that departs daily at 8am from Canmore and Banff",
|
|
347
|
-
"Optionally add on a lunch package at checkout, served at the Emerald Lake Lodge.",
|
|
348
|
-
"Rent a canoe at Emerald Lake",
|
|
349
|
-
"See multiple bucket list destinations in Banff National Park in one day - this tour includes stops at Lake Louise, Takakkaw Falls, Morant's Curve, Johnston Canyon, and Emerald Lake."
|
|
350
|
-
]
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
answers: {
|
|
355
|
-
what_lakes: {
|
|
356
|
-
values: ["other_custom"],
|
|
357
|
-
matchType: 'AND'
|
|
358
|
-
}
|
|
359
|
-
},
|
|
360
|
-
recommendationIds: [PRODUCTS.PRIVATE_TOUR.id],
|
|
361
|
-
recommendationDetails: {
|
|
362
|
-
[PRODUCTS.PRIVATE_TOUR.id]: ["You want a custom itinerary, we'll create one for you! We can visit any destinations you are interested in in Banff National Park and Yoho National Park."]
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
{
|
|
366
|
-
answers: {
|
|
367
|
-
what_lakes: {
|
|
368
|
-
values: ["moraine_lake", "lake_louise", "emerald_lake"],
|
|
369
|
-
matchType: 'AND'
|
|
370
|
-
},
|
|
371
|
-
sunrise: "no",
|
|
372
|
-
},
|
|
373
|
-
recommendationIds: [],
|
|
374
|
-
isMultiDayGroup: true,
|
|
375
|
-
dayGroups: [
|
|
376
|
-
{
|
|
377
|
-
day: 1,
|
|
378
|
-
dayTitle: "Day 1: Moraine Lake",
|
|
379
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_ADVENTURE.id]
|
|
380
|
-
},
|
|
381
|
-
{
|
|
382
|
-
day: 2,
|
|
383
|
-
dayTitle: "Day 2: Emerald Lake & Lake Louise",
|
|
384
|
-
recommendationIds: [PRODUCTS.EMERALD_LAKE_ESCAPE.id]
|
|
385
|
-
}
|
|
386
|
-
],
|
|
387
|
-
recommendationDetails: {
|
|
388
|
-
[PRODUCTS.MORAINE_LAKE_ADVENTURE.id]: [
|
|
389
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
390
|
-
"Book a **regular ticket** for **4 hours at Moraine Lake**",
|
|
391
|
-
"Enough time for a small to moderate hike in Moraine Lake and hit all the famous photo spots or take a canoe out on the lake."
|
|
392
|
-
],
|
|
393
|
-
[PRODUCTS.EMERALD_LAKE_ESCAPE.id]: [
|
|
394
|
-
"A 10 hour full day tour that departs daily at 8am from Canmore and Banff",
|
|
395
|
-
"Optionally add on a lunch package at checkout, served at the Emerald Lake Lodge.",
|
|
396
|
-
"Rent a canoe at Emerald Lake",
|
|
397
|
-
"See multiple bucket list destinations in Banff National Park in one day - this tour includes stops at Lake Louise, Takakkaw Falls, Morant's Curve, Johnston Canyon, and Emerald Lake."
|
|
398
|
-
]
|
|
399
|
-
}
|
|
400
|
-
},
|
|
401
|
-
{
|
|
402
|
-
answers: {
|
|
403
|
-
what_lakes: {
|
|
404
|
-
values: ["moraine_lake", "lake_louise", "emerald_lake"],
|
|
405
|
-
matchType: 'AND'
|
|
406
|
-
},
|
|
407
|
-
sunrise: "yes",
|
|
408
|
-
},
|
|
409
|
-
recommendationIds: [],
|
|
410
|
-
isMultiDayGroup: true,
|
|
411
|
-
dayGroups: [
|
|
412
|
-
{
|
|
413
|
-
day: 1,
|
|
414
|
-
dayTitle: "Day 1: Moraine Lake",
|
|
415
|
-
recommendationIds: [PRODUCTS.MORAINE_LAKE_SUNRISE.id]
|
|
416
|
-
},
|
|
417
|
-
{
|
|
418
|
-
day: 2,
|
|
419
|
-
dayTitle: "Day 2: Emerald Lake & Lake Louise",
|
|
420
|
-
recommendationIds: [PRODUCTS.EMERALD_LAKE_ESCAPE.id]
|
|
421
|
-
}
|
|
422
|
-
],
|
|
423
|
-
recommendationDetails: {
|
|
424
|
-
[PRODUCTS.MORAINE_LAKE_SUNRISE.id]: [
|
|
425
|
-
"Book a **regular ticket** for **3 hours at Moraine Lake**",
|
|
426
|
-
"Arrives at Moraine Lake before sunrise",
|
|
427
|
-
"Hot drinks and blankets provided",
|
|
428
|
-
"Enough time for an easy walk around the lake and photos at the lake's most famous viewpoints"
|
|
429
|
-
],
|
|
430
|
-
[PRODUCTS.EMERALD_LAKE_ESCAPE.id]: [
|
|
431
|
-
"A 10 hour full day tour that departs daily at 8am from Canmore and Banff",
|
|
432
|
-
"Optionally add on a lunch package at checkout, served at the Emerald Lake Lodge.",
|
|
433
|
-
"Rent a canoe at Emerald Lake",
|
|
434
|
-
"See multiple bucket list destinations in Banff National Park in one day - this tour includes stops at Lake Louise, Takakkaw Falls, Morant's Curve, Johnston Canyon, and Emerald Lake."
|
|
435
|
-
]
|
|
436
|
-
}
|
|
437
|
-
},
|
|
438
|
-
{
|
|
439
|
-
answers: {
|
|
440
|
-
what_lakes: {
|
|
441
|
-
values: ["moraine_lake", "lake_louise", "other_custom"],
|
|
442
|
-
matchType: 'AND'
|
|
443
|
-
}
|
|
444
|
-
},
|
|
445
|
-
isAlternativeGroup: true,
|
|
446
|
-
alternativeGroupTitle: "Choose Your Adventure",
|
|
447
|
-
recommendationIds: [
|
|
448
|
-
PRODUCTS.TWO_LAKES_COMBO.id,
|
|
449
|
-
PRODUCTS.PRIVATE_TOUR.id
|
|
450
|
-
],
|
|
451
|
-
recommendationDetails: {
|
|
452
|
-
[PRODUCTS.TWO_LAKES_COMBO.id]: [
|
|
453
|
-
"Departs daily at 9am from Canmore with pickups in Banff and Lake Louise",
|
|
454
|
-
"Book a **regular ticket** for **2 hours at Moraine Lake + 2 hours at Lake Louise**",
|
|
455
|
-
"See the most 2 famous lakes of Banff National Park in one day"
|
|
456
|
-
],
|
|
457
|
-
[PRODUCTS.PRIVATE_TOUR.id]: [
|
|
458
|
-
"You want a custom itinerary, we'll create one for you! We can visit any destinations you are interested in in Banff National Park and Yoho National Park."
|
|
459
|
-
]
|
|
460
|
-
}
|
|
461
|
-
},
|
|
462
|
-
];
|
|
463
|
-
|
|
464
|
-
export function getQuizRecommendations(answers: Record<string, string | string[]>) {
|
|
465
|
-
const matchingRules = RECOMMENDATION_RULES.filter(rule => {
|
|
466
|
-
// Helper function to check matches based on match type
|
|
467
|
-
const checkMatches = (ruleMatch: AnswerMatch | undefined, userAnswers: string | string[] | undefined): boolean => {
|
|
468
|
-
if (!ruleMatch) return true;
|
|
469
|
-
const userAnswerArray = Array.isArray(userAnswers) ? userAnswers : [userAnswers];
|
|
470
|
-
return ruleMatch.matchType === 'AND'
|
|
471
|
-
? includesAll(userAnswerArray, ruleMatch.values)
|
|
472
|
-
: includesAny(userAnswerArray, ruleMatch.values);
|
|
473
|
-
};
|
|
474
|
-
|
|
475
|
-
// For lakes
|
|
476
|
-
const lakesMatch = checkMatches(rule.answers.what_lakes, answers.what_lakes);
|
|
477
|
-
|
|
478
|
-
// For sunrise, if rule requires it, check user wants it (single value)
|
|
479
|
-
const sunriseMatches = !rule.answers.sunrise || answers.sunrise === rule.answers.sunrise;
|
|
480
|
-
|
|
481
|
-
// For hiking
|
|
482
|
-
const hikingMatches = checkMatches(rule.answers.hiking, answers.hiking);
|
|
483
|
-
|
|
484
|
-
// For activities
|
|
485
|
-
const activitiesMatch = checkMatches(rule.answers.what_activities, answers.what_activities);
|
|
486
|
-
|
|
487
|
-
// Check exclusions
|
|
488
|
-
let exclusionsMatch = true;
|
|
489
|
-
if (rule.answers.exclude) {
|
|
490
|
-
Object.entries(rule.answers.exclude).forEach(([questionId, excludedAnswers]) => {
|
|
491
|
-
const userAnswers = Array.isArray(answers[questionId]) ? answers[questionId] : [answers[questionId]];
|
|
492
|
-
exclusionsMatch = exclusionsMatch && excludesAll(userAnswers as (string | undefined)[], excludedAnswers as string[]);
|
|
493
|
-
});
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
return lakesMatch && sunriseMatches && hikingMatches && activitiesMatch && exclusionsMatch;
|
|
497
|
-
});
|
|
498
|
-
|
|
499
|
-
// If there's a multi-day group or alternative group in the matching rules, prioritize those
|
|
500
|
-
const specialRule = matchingRules.find(rule => rule.isMultiDayGroup || rule.isAlternativeGroup);
|
|
501
|
-
if (specialRule) {
|
|
502
|
-
return [specialRule];
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
return matchingRules;
|
|
506
|
-
}
|
package/src/constants/reviews.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
export type Review = {
|
|
2
|
-
link: string;
|
|
3
|
-
review: string;
|
|
4
|
-
author: string;
|
|
5
|
-
profilePicture: string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export const REVIEWS: Review[] = [
|
|
9
|
-
{
|
|
10
|
-
link: 'https://maps.app.goo.gl/7q5CAwBTEkdQSbG2A',
|
|
11
|
-
review: "Via Via Moraine is a <b>great shuttle service to both Moraine and Lake Louise</b> and beyond. Comfortable, efficient, friendly and lots of tips on where to go and what to see. We had <b>plenty of time to hike around Moraine lake</b> on an amazing sunny day. Definitely <b>the best stress free way to visit special places in and around the Banff area</b>. Thank you Nathan, Jess and our driver Rebecca, we had a great time! Warm regards, Meyrem Almaci & family",
|
|
12
|
-
author: 'Meyrem',
|
|
13
|
-
profilePicture: 'meyrem-profile-pic.png'
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
link: 'https://maps.app.goo.gl/s2e5uXXpjVWQ4hvA8',
|
|
17
|
-
review: "We recently did the <b>Moraine Lake and Lake Louise shuttle from Canmore</b>, and it was great. Léo was our driver, and he was awesome. I was sitting in the first row so I got to chat with him a bit, he gave me some cool facts about the mountains and areas along the drives, and gave us some <b>tips of things we could do on other days of our vacation to Banff National Park</b>. When we arrived at each destination Léo would tell the full group from the van about the various things to do/see at each stop so we didn't feel lost when arriving. Léo was also mindful of bumps and things along the mountain roads, and I noticed he was good at following all the rules during the entry process to the restricted areas (like where to stop, waiting for gates to fully open or close, etc). I noticed many other tour vansbuses didn't do that, and while that doesn't have any impact on the trip itself, it did provide some comfort in trusting Leo and his driving.",
|
|
18
|
-
author: 'Ryan G.',
|
|
19
|
-
profilePicture: 'ryan-g-profile-pic.png'
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
link: 'https://maps.app.goo.gl/yCxqGdTMvcvmZvMh7',
|
|
23
|
-
review: 'My sister and I were <b>unable to book tickets through the parks Canada service during our visit</b>. We were so thankful to be able to see <b>both Moraine and Lake Louise with Via Via!</b> They were excellent! Our driver Kai was informative and kind, plus drove well and was on time. We loved that this tour allowed 2 hours at each lake and you could also extend your time at Lake Louise if you wanted to hike farther. We would highly recommend using this local company!',
|
|
24
|
-
author: 'Ariel K.',
|
|
25
|
-
profilePicture: 'ariel-k-profile-pic.png'
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
link: 'https://maps.app.goo.gl/FZJndQGPmfqHCRfb8',
|
|
29
|
-
review: "<b>Pickup at our hotel in Lake Louise was on time for sunrise</b>. Jess was a great guide and made sure we were taken care of. Hot chocolate and blankets were a nice addition, especially when it was 36 degrees F. She checked on us at each location and made sure we had the perfect pictures taken at Moraine Lake and Lake Louise. She answered all our questions and we were able to get a picture of a bear on the side of the road.",
|
|
30
|
-
author: 'Lori S.',
|
|
31
|
-
profilePicture: 'lori-s-profile-pic.png'
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
link: 'https://maps.app.goo.gl/hNmCNEj7pd9kxmEv6',
|
|
35
|
-
review: 'What an incredible experience watching the <b>sunrise at Moraine Lake and a stop off at Lake Louise!</b> The Via Via team were all so helpful; from the smooth process of booking on, to our informative guide Peter. The early morning was worth it, and made a little easier thanks to a complimentary coffee! With there being so many options for a Moraine Lake shuttle, I couldn’t recommend Via Via enough.',
|
|
36
|
-
author: 'Jack P.',
|
|
37
|
-
profilePicture: 'jack-p-profile-pic.png'
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
link: 'https://maps.app.goo.gl/3gX9WaQZUqU8KTeLA',
|
|
41
|
-
review: 'I had an amazing experience taking the <b>Via Via shuttle to both Moraine Lake and Lake Louise!</b> The service was smooth, punctual, and incredibly convenient. Special shoutout to our drivers, Kathy and Kai! They were both so friendly, professional, and informative throughout the trip. Kathy made the early morning ride feel warm and welcoming, and Kai was equally kind and made the return trip just as enjoyable. Highly recommend Via Via for anyone looking to visit the lakes stress-free!',
|
|
42
|
-
author: 'Andrew M.',
|
|
43
|
-
profilePicture: 'maarten-stenvert-profile-pic.png'
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
link: 'https://maps.app.goo.gl/E2SdLpfPzeSPuHu68',
|
|
47
|
-
review: "<b>Moraine lake sunrise shuttle was awesome!</b> We had so much fun. It was raining but Carrie had us covered. Hot chocolate, coffee, blankets and umbrellas! She was so nice in telling us where to go and how to get around. Then we went to Lake Louise, and saw people jumping in the water and enjoying the views. We left at 3:30AM from Canmore and got back around 10:00AM.",
|
|
48
|
-
author: 'Sadie W.',
|
|
49
|
-
profilePicture: 'sadie-w-profile-pic.png'
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
link: 'https://maps.app.goo.gl/V89aFZZ4hRVQbHM79',
|
|
53
|
-
review: 'Had such a great experience with Grace and Via Via. I highly recommend using them and their <b>sunrise tour to Lake Moraine</b>.',
|
|
54
|
-
author: 'Aubry G.',
|
|
55
|
-
profilePicture: 'aubry-g-profile-pic.png'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
link: 'https://maps.app.goo.gl/zr1KoongPhv6CTKV7',
|
|
59
|
-
review: "Our trip to <b>Lake Louise and Moraine Lake was wonderful and worry free</b>. Nathan took care of everything and was very informative along the way. The van was very comfortable and we enjoyed the intimacy of a small group. We highly recommend Via Via Moraine Lake Shuttle!!!! Paul and Pam from Trabuco Canyon, CA USA",
|
|
60
|
-
author: 'Pam M.',
|
|
61
|
-
profilePicture: 'pam-m-profile-pic.png'
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
link: 'https://maps.app.goo.gl/nwrP6bFHrH8MYEqW7',
|
|
65
|
-
review: "We did the <b>sunrise tour with extended stay at Lake Louise</b>. Everything was super well organized. Sure, it costs more than the Parks Canada shuttle, but you don’t have to worry about a thing – totally worth it. You get plenty of time at Moraine Lake to catch the sunrise, and the blankets and hot drinks are great for the cold. With the extended tour, we had more than enough time to do the Beehive hike. We'd book with Via Via again in a heartbeat – everything went smoothly and everyone was really friendly.",
|
|
66
|
-
author: 'Laura W.',
|
|
67
|
-
profilePicture: 'laura-w-profile-pic.png'
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
link: 'https://maps.app.goo.gl/cBs15LtRXkhbKbDe9',
|
|
71
|
-
review: 'Via Via is a fantastic tour company - I went on their <b>Emerald Lake Escape: Waterfalls & Canyon Wonders Tour yesterday and had the best time</b>! The locations were stunning and the bus was very comfortable. Our leader Léo was kind, personable, professional and a great driver - I was very happy with the service he and his colleagues provided throughout the day.',
|
|
72
|
-
author: 'Nichole V.',
|
|
73
|
-
profilePicture: 'nichole-v-profile-pic.png'
|
|
74
|
-
}
|
|
75
|
-
]
|