iceholidays-frontend 0.9.0 → 0.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e979c781e464ebe531852d7b1371c068e2513c56a8253f771cf8edbd696bf11c
4
- data.tar.gz: 9297a8712f483537252edb27d22d99718bde9c3cbc12814964f9c2d69bd7f4f8
3
+ metadata.gz: 1f50c77c77c53b3790f60e5635bd2de1268a0085c7a95508fb31db394271f3a1
4
+ data.tar.gz: eb86f0b2a34fd67b3b14a52a2f4d03d4b6210127c989c75674f16f61284d5b16
5
5
  SHA512:
6
- metadata.gz: f143cbbe5610f9c5d2431f2baff8cbdf3e38e9463ba53c853e7b7e07ee141857a3ee55dc587f9c6f848a90836a4de7e5a70eb1a2d0117b281c1f38b9767225ea
7
- data.tar.gz: 92e06104065cb2753e21e49659356b38050ab35964f8426a856d39ba80847ff4c478eea710a0926eedd75cca89245d532fd28f6dc083a08e758f24fdd21e1175
6
+ metadata.gz: 22ccaa192dc4db372f231e1c61c35a7db6f1ffded4c098df3ac914a48c25d4a57eab80c5a71bcc79d551cc0e7baaf3a493e0e2ab1761f37265da662ad606a4c1
7
+ data.tar.gz: 50ae100ed07dc32ed4079cab8e0aa76cb3ee1e10a5c30e19b347c08abb23b98d37ed02aba67e925be720dc2b4410fcd385df9b03d54f8d28cff6ca6e35f98747
@@ -278,6 +278,12 @@
278
278
  text-transform: uppercase;
279
279
  }
280
280
 
281
+ .loader{
282
+ width: 100%;
283
+ text-align: center;
284
+ margin: 20px 0;
285
+ }
286
+
281
287
  @media only screen and (min-width: 769px) {
282
288
  #headline{
283
289
  --side-padding: 10%;
@@ -72,6 +72,7 @@
72
72
  &> div{
73
73
  border-bottom: 1px solid #DFB16380;
74
74
  padding: 10px 0;
75
+ flex: 100%;
75
76
  }
76
77
 
77
78
  .ant-space{
@@ -214,7 +215,7 @@
214
215
  }
215
216
  }
216
217
 
217
- @media only screen and (min-width: 769px) {
218
+ @media only screen and (min-width: 768px) {
218
219
  #main-header{
219
220
  #toggle-menu{
220
221
  display: none;
@@ -282,6 +283,18 @@
282
283
  }
283
284
  }
284
285
 
286
+ #countries{
287
+ flex: 1 0 25%;
288
+ }
289
+
290
+ #footer-menus{
291
+ flex: 1 0 30%;
292
+ }
293
+
294
+ #contact-infos{
295
+ flex: 1 0 20%;
296
+ }
297
+
285
298
  .footer-menu{
286
299
  padding-top: 40px;
287
300
  }
@@ -291,6 +304,10 @@
291
304
  gap: 10px !important;
292
305
  align-items: flex-start;
293
306
  }
307
+
308
+ .social-icons{
309
+ align-items: center;
310
+ }
294
311
  }
295
312
  }
296
313
  }
@@ -61,7 +61,7 @@ export default class MainFooter extends React.Component<IMainFooterProps> {
61
61
  return (
62
62
  <div id="main-footer">
63
63
  <Row id="main-footer_links" gutter={[12, 12]}>
64
- <Col flex="1 0 25%" className="column">
64
+ <Col id="countries" className="column">
65
65
  <Space direction="vertical">
66
66
  <div className="link-group-title">Countries</div>
67
67
  <div className="link-group-items">
@@ -71,7 +71,7 @@ export default class MainFooter extends React.Component<IMainFooterProps> {
71
71
  </div>
72
72
  </Space>
73
73
  </Col>
74
- <Col flex="1 0 30%" className="column footer-menu">
74
+ <Col id="footer-menus" className="column footer-menu">
75
75
  <Space direction="vertical">
76
76
  <div className="link-group-items">
77
77
  {
@@ -80,16 +80,15 @@ export default class MainFooter extends React.Component<IMainFooterProps> {
80
80
  </div>
81
81
  </Space>
82
82
  </Col>
83
- <Col flex="1 0 20%" className="column contact-info">
83
+ <Col id="contact-infos" className="column contact-info">
84
84
  <Space direction="vertical" align="center">
85
85
  <Flex vertical gap="20px" align="center">
86
86
  <div className="link-group-title">Contact Us</div>
87
87
  <div><a href="/app/contact-agents">contact agents</a></div>
88
88
  <div className="link-group-title">Follow us on</div>
89
- <Flex gap={20} justify="space-between">
89
+ <Flex gap={20} justify="space-between" className="social-icons">
90
90
  <a target="_blank" href="https://www.facebook.com/thesignaturetour"><img src="/iceholidays-assets/images/social/ico_fb.png"/></a>
91
- <a target="_blank" style={{pointerEvents: "none"}} href="javascript:void(0)"><img src="/iceholidays-assets/images/social/ico_twitter.png"/></a>
92
- <a target="_blank" style={{pointerEvents: "none"}} href="javascript:void(0)"><img src="/iceholidays-assets/images/social/ico_yt.png"/></a>
91
+ <a target="_blank" href="https://wa.me/60128688148"><img src="/iceholidays-assets/images/social/ico_whatsapp.png"/></a>
93
92
  <a target="_blank" href="https://www.instagram.com/thesignaturetours"><img src="/iceholidays-assets/images/social/ico_ig.png"/></a>
94
93
  </Flex>
95
94
  </Flex>
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import Headline from "../components/shared/Headline";
3
3
  import { Button, Col, Flex, Form, Input, notification, Row, Select, Space } from "antd";
4
- import { mdiFacebook, mdiInstagram, mdiTwitter, mdiYoutube } from "@mdi/js";
4
+ import { mdiFacebook, mdiInstagram, mdiTwitter, mdiWhatsapp, mdiYoutube } from "@mdi/js";
5
5
  import Icon from "@mdi/react";
6
6
  import ContactUsApi from "../../api-services/contact-us-api.service";
7
7
  const { TextArea } = Input;
@@ -131,13 +131,9 @@ export default class ContactUsPage extends React.Component {
131
131
  <a target="_blank" href="https://www.instagram.com/thesignaturetours">
132
132
  <Icon path={mdiInstagram} size={1} />
133
133
  </a>
134
- <a target="_blank" href="javascript:void(0)" style={{pointerEvents: "none"}}>
135
- <Icon path={mdiTwitter} size={1} />
134
+ <a target="_blank" href="https://wa.me/60128688148">
135
+ <Icon path={mdiWhatsapp} size={1} />
136
136
  </a>
137
- <a target="_blank" href="javascript:void(0)" style={{pointerEvents: "none"}}>
138
- <Icon path={mdiYoutube} size={1} />
139
- </a>
140
- <img src="/iceholidays-assets/images/social.png" className="social-icon"/>
141
137
  </Space>
142
138
  </div>
143
139
  </Col>
@@ -1,5 +1,5 @@
1
1
  import React, { Component } from "react";
2
- import { Badge, Breadcrumb, Button, Flex, Modal, Space, Select, Row, Col, notification } from "antd";
2
+ import { Badge, Breadcrumb, Button, Flex, Modal, Space, Select, Row, Col, notification, Spin } from "antd";
3
3
  import FilterPills from "../widgets/FilterPills";
4
4
  import { Link, useSearchParams } from "react-router-dom";
5
5
  import { mdiDotsHorizontalCircleOutline, mdiFileDownload, mdiFilterVariant, mdiInformationOutline, mdiMapMarkerOutline } from "@mdi/js";
@@ -42,6 +42,7 @@ class ListingPage extends React.Component <{searchParams}> {
42
42
  seriesApi = new SeriesApi;
43
43
 
44
44
  state = {
45
+ loading: true,
45
46
  countries: [],
46
47
  selectedCountry: {name: "", cities: []},
47
48
  searchParamsObj: {keyword: "", year: "", month: "", location_id: null},
@@ -121,6 +122,8 @@ class ListingPage extends React.Component <{searchParams}> {
121
122
  }
122
123
 
123
124
  getItineraries(searchParams, init = false){
125
+ this.setState({loading: true});
126
+
124
127
  const locationId = searchParams.location_id;
125
128
  const storedSearchParamsStr = localStorage.getItem("searchParams");
126
129
  if(storedSearchParamsStr != null){
@@ -132,10 +135,11 @@ class ListingPage extends React.Component <{searchParams}> {
132
135
  }
133
136
 
134
137
  this.seriesApi.getItineraries(searchParams)
135
- .then(itinerariesData => {
138
+ .then(itinerariesData => {
136
139
  this.setBreadcrumbs();
137
140
  this.setState({itineraries: itinerariesData})
138
141
  })
142
+ .finally(()=>this.setState({loading: false}))
139
143
  .catch(error => {
140
144
  notification.error({ message: 'An error occured while loading itineraries.'});
141
145
  });
@@ -179,14 +183,14 @@ class ListingPage extends React.Component <{searchParams}> {
179
183
  searchParamsObj.location_id = selectedCountry.id;
180
184
  // this.getLocation(selectedCountry.id);
181
185
 
182
- this.setState({selectedCountry, searchParamsObj});
186
+ this.setState({selectedCountry, searchParamsObj, loading: true});
183
187
  this.getItineraries(searchParamsObj);
184
188
  }
185
189
  }
186
190
 
187
191
 
188
192
  render(){
189
- const {countries, selectedCountry, searchParamsObj, itineraries, location, breadcrumbs, descriptionData, fileUrlData, departureDatesData } = this.state;
193
+ const {loading, countries, selectedCountry, searchParamsObj, itineraries, location, breadcrumbs, descriptionData, fileUrlData, departureDatesData } = this.state;
190
194
 
191
195
  return <div id="listing-page">
192
196
 
@@ -204,8 +208,9 @@ class ListingPage extends React.Component <{searchParams}> {
204
208
  <FilterPills items={selectedCountry.cities} bindLabel="name" bindValue="location_id" initialValue={searchParamsObj} selectFilter={(selected) => this.getItineraries(selected)}></FilterPills>
205
209
  </Space>
206
210
 
211
+ <Spin size="large" className="loader" spinning={loading}/>
207
212
  {
208
- itineraries.length > 0 ? (
213
+ !loading && (itineraries.length > 0 ? (
209
214
  <>
210
215
  <div id="legends">
211
216
  <Space size={17}>
@@ -278,9 +283,10 @@ class ListingPage extends React.Component <{searchParams}> {
278
283
  </Flex>
279
284
  </div>
280
285
  </>
281
- ) : <h1 id="no-tours-found">No tour package is found.</h1>
286
+ ) : <h1 id="no-tours-found">No tour package is found.</h1>)
282
287
  }
283
288
 
289
+
284
290
  </div>
285
291
 
286
292
  <Modal title="Description" open={this.state.descriptionModalOpen} onCancel={()=>this.closeModal("descriptionModalOpen")} footer={null} width={1000} centered className="tour_details_description">
@@ -1,5 +1,5 @@
1
1
  module Iceholidays
2
2
  module Frontend
3
- VERSION = "0.9.0"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
@@ -415,6 +415,7 @@ a {
415
415
  #main-footer_links > div {
416
416
  border-bottom: 1px solid rgba(223, 177, 99, 0.5019607843);
417
417
  padding: 10px 0;
418
+ flex: 100%;
418
419
  }
419
420
  #main-footer_links .ant-space {
420
421
  width: 100%;
@@ -528,7 +529,7 @@ a {
528
529
  white-space: nowrap;
529
530
  }
530
531
  }
531
- @media only screen and (min-width: 769px) {
532
+ @media only screen and (min-width: 768px) {
532
533
  #main-header #toggle-menu {
533
534
  display: none;
534
535
  }
@@ -579,6 +580,15 @@ a {
579
580
  #main-footer_links > div {
580
581
  padding: 10px 0 40px;
581
582
  }
583
+ #main-footer #countries {
584
+ flex: 1 0 25%;
585
+ }
586
+ #main-footer #footer-menus {
587
+ flex: 1 0 30%;
588
+ }
589
+ #main-footer #contact-infos {
590
+ flex: 1 0 20%;
591
+ }
582
592
  #main-footer .footer-menu {
583
593
  padding-top: 40px;
584
594
  }
@@ -586,6 +596,9 @@ a {
586
596
  gap: 10px !important;
587
597
  align-items: flex-start;
588
598
  }
599
+ #main-footer .contact-info .social-icons {
600
+ align-items: center;
601
+ }
589
602
  }
590
603
  #headline {
591
604
  --side-padding: 20px;
@@ -803,6 +816,12 @@ a {
803
816
  text-transform: uppercase;
804
817
  }
805
818
 
819
+ .loader {
820
+ width: 100%;
821
+ text-align: center;
822
+ margin: 20px 0;
823
+ }
824
+
806
825
  @media only screen and (min-width: 769px) {
807
826
  #headline {
808
827
  --side-padding: 10%;