iceholidays-frontend 0.6.0 → 0.8.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/iceholidays/frontend/_slick-theme.scss +194 -0
  3. data/app/assets/stylesheets/iceholidays/frontend/_slick.scss +100 -0
  4. data/app/assets/stylesheets/iceholidays/frontend/application.sass.scss +56 -3
  5. data/app/assets/stylesheets/iceholidays/frontend/common.scss +14 -0
  6. data/app/assets/stylesheets/iceholidays/frontend/layout.scss +11 -2
  7. data/app/assets/stylesheets/iceholidays/frontend/utils/_slick_overrides.scss +3 -0
  8. data/app/javascript/api-services/brochure-api.service.ts +17 -0
  9. data/app/javascript/api-services/contact-us-api.service.ts +19 -0
  10. data/app/javascript/api-services/posts-api.service.ts +47 -0
  11. data/app/javascript/api-services/testimonials-api.service.ts +1 -1
  12. data/app/javascript/interfaces/blog.interface.ts +8 -0
  13. data/app/javascript/interfaces/testimonial.interface.ts +1 -1
  14. data/app/javascript/react/App.tsx +1 -1
  15. data/app/javascript/react/components/Destinations.tsx +21 -10
  16. data/app/javascript/react/components/Testimonials.tsx +5 -2
  17. data/app/javascript/react/components/shared/LocationDropdown.tsx +3 -1
  18. data/app/javascript/react/index.js +2 -1
  19. data/app/javascript/react/layouts/MainFooter.tsx +43 -35
  20. data/app/javascript/react/layouts/MainHeader.tsx +80 -32
  21. data/app/javascript/react/layouts/MainLayout.tsx +1 -1
  22. data/app/javascript/react/pages/BlogPage.tsx +82 -66
  23. data/app/javascript/react/pages/BlogShowPage.tsx +50 -35
  24. data/app/javascript/react/pages/ContactUsPage.tsx +128 -101
  25. data/app/javascript/react/pages/ListingPage.tsx +42 -18
  26. data/app/javascript/react/pages/ShowPage.tsx +84 -52
  27. data/app/javascript/react/widgets/FilterPills.tsx +21 -18
  28. data/app/views/iceholidays/frontend/site/index.html.erb +7 -1
  29. data/config/routes.rb +1 -1
  30. data/lib/iceholidays/frontend/version.rb +1 -1
  31. data/public/iceholidays-assets/application.css +304 -9
  32. data/public/iceholidays-assets/application.js +161 -121
  33. data/public/iceholidays-assets/application.js.map +4 -4
  34. data/public/iceholidays-assets/images/TST Ribbon@2x.png +0 -0
  35. data/public/iceholidays-assets/images/TST Ribbon@3x.png +0 -0
  36. metadata +11 -2
@@ -1 +1,7 @@
1
- <%= react_component "App"%>
1
+ <%= react_component "App"%>
2
+ <%= react_component "MainFooter", {
3
+ PDPA: "#{asset_path('pdpa.pdf')}",
4
+ PRIVACY: "#{asset_path('privacy.pdf')}",
5
+ TNC: "#{asset_path('series_terms.pdf')}",
6
+ }
7
+ %>
data/config/routes.rb CHANGED
@@ -6,7 +6,7 @@ Iceholidays::Frontend::Engine.routes.draw do
6
6
  get '/about-us' => 'site#about_us', as: :about_us
7
7
  get '/countries' => 'site#countries', as: :countries
8
8
  get '/blog' => 'site#blog', as: :blog
9
- get '/blog/1' => 'site#show_blog', as: :show_blog
9
+ get '/blog/:id' => 'site#show_blog', as: :show_blog
10
10
  get '/contact-agents' => 'site#contact_agents', as: :contact_agents
11
11
  get '/contact-us' => 'site#contact_us', as: :contact_us
12
12
  resources :posts, only:[:index, :show]
@@ -1,5 +1,5 @@
1
1
  module Iceholidays
2
2
  module Frontend
3
- VERSION = "0.6.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
@@ -15,6 +15,240 @@
15
15
  *= require_self
16
16
  */
17
17
  @import url("//fonts.googleapis.com/css?family=Poppins:ital,wght@0,100;0,200;0,200;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,200;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
18
+ /* Slider */
19
+ .slick-slider {
20
+ position: relative;
21
+ display: block;
22
+ box-sizing: border-box;
23
+ -webkit-touch-callout: none;
24
+ -webkit-user-select: none;
25
+ -khtml-user-select: none;
26
+ -moz-user-select: none;
27
+ -ms-user-select: none;
28
+ user-select: none;
29
+ -ms-touch-action: pan-y;
30
+ touch-action: pan-y;
31
+ -webkit-tap-highlight-color: transparent;
32
+ }
33
+
34
+ .slick-list {
35
+ position: relative;
36
+ overflow: hidden;
37
+ display: block;
38
+ margin: 0;
39
+ padding: 0;
40
+ }
41
+ .slick-list:focus {
42
+ outline: none;
43
+ }
44
+ .slick-list.dragging {
45
+ cursor: pointer;
46
+ cursor: hand;
47
+ }
48
+
49
+ .slick-slider .slick-track,
50
+ .slick-slider .slick-list {
51
+ -webkit-transform: translate3d(0, 0, 0);
52
+ -moz-transform: translate3d(0, 0, 0);
53
+ -ms-transform: translate3d(0, 0, 0);
54
+ -o-transform: translate3d(0, 0, 0);
55
+ transform: translate3d(0, 0, 0);
56
+ }
57
+
58
+ .slick-track {
59
+ position: relative;
60
+ left: 0;
61
+ top: 0;
62
+ display: block;
63
+ margin-left: auto;
64
+ margin-right: auto;
65
+ }
66
+ .slick-track:before, .slick-track:after {
67
+ content: "";
68
+ display: table;
69
+ }
70
+ .slick-track:after {
71
+ clear: both;
72
+ }
73
+ .slick-loading .slick-track {
74
+ visibility: hidden;
75
+ }
76
+
77
+ .slick-slide {
78
+ float: left;
79
+ height: 100%;
80
+ min-height: 1px;
81
+ display: none;
82
+ }
83
+ [dir=rtl] .slick-slide {
84
+ float: right;
85
+ }
86
+ .slick-slide img {
87
+ display: block;
88
+ }
89
+ .slick-slide.slick-loading img {
90
+ display: none;
91
+ }
92
+ .slick-slide.dragging img {
93
+ pointer-events: none;
94
+ }
95
+ .slick-initialized .slick-slide {
96
+ display: block;
97
+ }
98
+ .slick-loading .slick-slide {
99
+ visibility: hidden;
100
+ }
101
+ .slick-vertical .slick-slide {
102
+ display: block;
103
+ height: auto;
104
+ border: 1px solid transparent;
105
+ }
106
+
107
+ .slick-arrow.slick-hidden {
108
+ display: none;
109
+ }
110
+
111
+ /* Slider */
112
+ /* Icons */
113
+ /* Arrows */
114
+ .slick-prev,
115
+ .slick-next {
116
+ position: absolute;
117
+ display: block;
118
+ height: 20px;
119
+ width: 20px;
120
+ line-height: 0px;
121
+ font-size: 0px;
122
+ cursor: pointer;
123
+ background: transparent;
124
+ color: transparent;
125
+ top: 50%;
126
+ -webkit-transform: translate(0, -50%);
127
+ -ms-transform: translate(0, -50%);
128
+ transform: translate(0, -50%);
129
+ padding: 0;
130
+ border: none;
131
+ outline: none;
132
+ }
133
+ .slick-prev:hover, .slick-prev:focus,
134
+ .slick-next:hover,
135
+ .slick-next:focus {
136
+ outline: none;
137
+ background: transparent;
138
+ color: transparent;
139
+ }
140
+ .slick-prev:hover:before, .slick-prev:focus:before,
141
+ .slick-next:hover:before,
142
+ .slick-next:focus:before {
143
+ opacity: 1;
144
+ }
145
+ .slick-prev.slick-disabled:before,
146
+ .slick-next.slick-disabled:before {
147
+ opacity: 0.25;
148
+ }
149
+ .slick-prev:before,
150
+ .slick-next:before {
151
+ font-family: "slick";
152
+ font-size: 20px;
153
+ line-height: 1;
154
+ color: white;
155
+ opacity: 0.75;
156
+ -webkit-font-smoothing: antialiased;
157
+ -moz-osx-font-smoothing: grayscale;
158
+ }
159
+
160
+ .slick-prev {
161
+ left: -25px;
162
+ }
163
+ [dir=rtl] .slick-prev {
164
+ left: auto;
165
+ right: -25px;
166
+ }
167
+ .slick-prev:before {
168
+ content: "←";
169
+ }
170
+ [dir=rtl] .slick-prev:before {
171
+ content: "→";
172
+ }
173
+
174
+ .slick-next {
175
+ right: -25px;
176
+ }
177
+ [dir=rtl] .slick-next {
178
+ left: -25px;
179
+ right: auto;
180
+ }
181
+ .slick-next:before {
182
+ content: "→";
183
+ }
184
+ [dir=rtl] .slick-next:before {
185
+ content: "←";
186
+ }
187
+
188
+ /* Dots */
189
+ .slick-dotted.slick-slider {
190
+ margin-bottom: 30px;
191
+ }
192
+
193
+ .slick-dots {
194
+ position: absolute;
195
+ bottom: -25px;
196
+ list-style: none;
197
+ display: block;
198
+ text-align: center;
199
+ padding: 0;
200
+ margin: 0;
201
+ width: 100%;
202
+ }
203
+ .slick-dots li {
204
+ position: relative;
205
+ display: inline-block;
206
+ height: 20px;
207
+ width: 20px;
208
+ margin: 0 5px;
209
+ padding: 0;
210
+ cursor: pointer;
211
+ }
212
+ .slick-dots li button {
213
+ border: 0;
214
+ background: transparent;
215
+ display: block;
216
+ height: 20px;
217
+ width: 20px;
218
+ outline: none;
219
+ line-height: 0px;
220
+ font-size: 0px;
221
+ color: transparent;
222
+ padding: 5px;
223
+ cursor: pointer;
224
+ }
225
+ .slick-dots li button:hover, .slick-dots li button:focus {
226
+ outline: none;
227
+ }
228
+ .slick-dots li button:hover:before, .slick-dots li button:focus:before {
229
+ opacity: 1;
230
+ }
231
+ .slick-dots li button:before {
232
+ position: absolute;
233
+ top: 0;
234
+ left: 0;
235
+ content: "•";
236
+ width: 20px;
237
+ height: 20px;
238
+ font-family: "slick";
239
+ font-size: 6px;
240
+ line-height: 20px;
241
+ text-align: center;
242
+ color: black;
243
+ opacity: 0.25;
244
+ -webkit-font-smoothing: antialiased;
245
+ -moz-osx-font-smoothing: grayscale;
246
+ }
247
+ .slick-dots li.slick-active button:before {
248
+ color: black;
249
+ opacity: 0.75;
250
+ }
251
+
18
252
  .ant-layout-content {
19
253
  position: relative;
20
254
  }
@@ -112,6 +346,10 @@ a {
112
346
  background-color: transparent;
113
347
  }
114
348
 
349
+ .slick-track {
350
+ margin: unset;
351
+ }
352
+
115
353
  #main-header {
116
354
  --button-height: 35px;
117
355
  position: relative;
@@ -212,9 +450,16 @@ a {
212
450
  grid-template-rows: 1fr;
213
451
  column-gap: 34px;
214
452
  }
453
+ #main-footer_links .contact-info .ant-flex {
454
+ display: inline-flex;
455
+ }
215
456
  #main-footer_links .contact-info .link-group-title {
216
457
  text-align: center;
217
458
  }
459
+ #main-footer_links .contact-info a {
460
+ display: flex;
461
+ align-items: center;
462
+ }
218
463
  #main-footer #copyright {
219
464
  text-align: center;
220
465
  padding: 20px 0 0;
@@ -319,7 +564,7 @@ a {
319
564
  display: block;
320
565
  }
321
566
  #main-footer {
322
- height: 321px;
567
+ height: auto;
323
568
  background: linear-gradient(270deg, #AA853E 0%, #F9E298 33.5%, #FFF3A6 50%, #F9E298 65.5%, #E1B65B 100%), linear-gradient(4.08deg, rgba(170, 133, 62, 0.5) -2.54%, rgba(249, 225, 151, 0.5) 7.02%);
324
569
  }
325
570
  #main-footer_links {
@@ -334,7 +579,7 @@ a {
334
579
  }
335
580
  #main-footer .contact-info .ant-flex {
336
581
  gap: 10px !important;
337
- align-items: flex-start;
582
+ align-items: center;
338
583
  }
339
584
  }
340
585
  #headline {
@@ -581,6 +826,18 @@ a {
581
826
  line-height: 30px;
582
827
  }
583
828
  }
829
+ @media only screen and (min-width: 1441px) {
830
+ #ribbon-section_header {
831
+ background-image: url("/iceholidays-assets/images/TST Ribbon@2x.png");
832
+ height: 300px;
833
+ }
834
+ }
835
+ @media only screen and (min-width: 2880px) {
836
+ #ribbon-section_header {
837
+ background-image: url("/iceholidays-assets/images/TST Ribbon@3x.png");
838
+ height: 450px;
839
+ }
840
+ }
584
841
  .ant-input {
585
842
  field-sizing: content;
586
843
  }
@@ -1360,20 +1617,20 @@ body {
1360
1617
  #show-page #date-selector {
1361
1618
  padding: 20px var(--side-padding);
1362
1619
  }
1363
- #show-page #date-selector [class~=ant-carousel] .slick-slide > div {
1620
+ #show-page #date-selector [class~=slick-slider] .slick-slide > div {
1364
1621
  padding: 0 5px;
1365
1622
  }
1366
- #show-page #date-selector [class~=ant-carousel] .slick-arrow {
1623
+ #show-page #date-selector [class~=slick-slider] .slick-arrow {
1367
1624
  color: rgb(149, 148, 146);
1368
1625
  }
1369
- #show-page #date-selector [class~=ant-carousel] .slick-arrow:hover {
1626
+ #show-page #date-selector [class~=slick-slider] .slick-arrow:hover {
1370
1627
  color: #DCB062;
1371
1628
  }
1372
- #show-page #date-selector [class~=ant-carousel] .slick-prev {
1373
- inset-inline-start: -40px;
1629
+ #show-page #date-selector [class~=slick-slider] .slick-prev {
1630
+ inset-inline-start: -35px;
1374
1631
  }
1375
- #show-page #date-selector [class~=ant-carousel] .slick-next {
1376
- inset-inline-end: -40px;
1632
+ #show-page #date-selector [class~=slick-slider] .slick-next {
1633
+ inset-inline-end: -35px;
1377
1634
  }
1378
1635
  #show-page #date-selector .date-box {
1379
1636
  background: #FFFFFF;
@@ -1825,6 +2082,9 @@ body {
1825
2082
  margin: 20px 0;
1826
2083
  display: block;
1827
2084
  }
2085
+ #about-signature-tours picture > img {
2086
+ width: 100%;
2087
+ }
1828
2088
  #about-signature-tours #about-st-feature #feature {
1829
2089
  height: 246px;
1830
2090
  gap: 0px;
@@ -2228,6 +2488,17 @@ body {
2228
2488
  #blog-page_body #blogs {
2229
2489
  margin: 30px 0;
2230
2490
  }
2491
+ #blog-page_body #blogs .preview-content {
2492
+ overflow: hidden;
2493
+ text-overflow: ellipsis;
2494
+ display: -webkit-box;
2495
+ -webkit-line-clamp: 2;
2496
+ -webkit-box-orient: vertical;
2497
+ max-height: 100px;
2498
+ }
2499
+ #blog-page_body #blogs .view-blog {
2500
+ margin-top: 10px;
2501
+ }
2231
2502
 
2232
2503
  #blog-show-page_body {
2233
2504
  margin: 20px var(--side-padding);
@@ -2236,6 +2507,21 @@ body {
2236
2507
  background: rgb(255, 255, 255);
2237
2508
  box-shadow: 0px 5px 20px 0px rgba(225, 182, 91, 0.2);
2238
2509
  }
2510
+ #blog-show-page_body h1 {
2511
+ font-family: Poppins;
2512
+ font-weight: 600;
2513
+ font-size: 24px;
2514
+ line-height: 36px;
2515
+ letter-spacing: 0%;
2516
+ margin-top: 0;
2517
+ }
2518
+ #blog-show-page_body img {
2519
+ object-fit: cover;
2520
+ height: auto;
2521
+ border-radius: 20px;
2522
+ width: 100%;
2523
+ margin-bottom: 20px;
2524
+ }
2239
2525
 
2240
2526
  @media only screen and (min-width: 769px) {
2241
2527
  * {
@@ -2535,6 +2821,15 @@ body {
2535
2821
  line-height: 45px;
2536
2822
  letter-spacing: 0.05em;
2537
2823
  }
2824
+ #show-page #date-selector [class~=slick-slider] .slick-slide > div {
2825
+ padding: 0 5px;
2826
+ }
2827
+ #show-page #date-selector [class~=slick-slider] .slick-prev {
2828
+ inset-inline-start: -40px;
2829
+ }
2830
+ #show-page #date-selector [class~=slick-slider] .slick-next {
2831
+ inset-inline-end: -40px;
2832
+ }
2538
2833
  #show-page_body .toggle_contact-agent,
2539
2834
  #show-page_body .collapse-contact-agent {
2540
2835
  display: none;