@qite/tide-booking-component 1.4.83 → 1.4.85
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/build/build-cjs/index.js +60 -22
- package/build/build-cjs/src/content/footer/types.d.ts +1 -0
- package/build/build-cjs/src/content/navbar/types.d.ts +1 -0
- package/build/build-cjs/src/search-results/components/group-tour/group-tour-card.d.ts +1 -0
- package/build/build-cjs/src/search-results/types.d.ts +1 -0
- package/build/build-esm/index.js +60 -22
- package/build/build-esm/src/content/footer/types.d.ts +1 -0
- package/build/build-esm/src/content/navbar/types.d.ts +1 -0
- package/build/build-esm/src/search-results/components/group-tour/group-tour-card.d.ts +1 -0
- package/build/build-esm/src/search-results/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/booking-wizard/features/product-options/option-units-card.tsx +1 -1
- package/src/content/footer/index.tsx +4 -1
- package/src/content/footer/types.ts +1 -0
- package/src/content/navbar/index.tsx +17 -2
- package/src/content/navbar/types.ts +1 -0
- package/src/search-results/components/group-tour/group-tour-card.tsx +12 -9
- package/src/search-results/components/group-tour/group-tour-results.tsx +17 -3
- package/src/search-results/components/hotel/hotel-card.tsx +1 -4
- package/src/search-results/types.ts +1 -0
- package/styles/components/_footer.scss +1 -0
- package/styles/components/_navbar.scss +1 -0
- package/styles/components/_search.scss +0 -8
package/build/build-cjs/index.js
CHANGED
|
@@ -22956,7 +22956,7 @@ var OptionUnitsCard = function (_a) {
|
|
|
22956
22956
|
React__default['default'].createElement(
|
|
22957
22957
|
'div',
|
|
22958
22958
|
{ className: 'booking-card__group-header' },
|
|
22959
|
-
React__default['default'].createElement('h3', { className: 'booking-card__body-heading' }, translations.OPTIONS_FORM.UNIT_TITLE, ' ', u.index
|
|
22959
|
+
React__default['default'].createElement('h3', { className: 'booking-card__body-heading' }, translations.OPTIONS_FORM.UNIT_TITLE, ' ', u.index),
|
|
22960
22960
|
React__default['default'].createElement('p', null, getUnitPaxLabel(u.index)),
|
|
22961
22961
|
React__default['default'].createElement(
|
|
22962
22962
|
'div',
|
|
@@ -29940,6 +29940,7 @@ var Navbar = function (_a) {
|
|
|
29940
29940
|
var _b;
|
|
29941
29941
|
var currentPath = _a.currentPath,
|
|
29942
29942
|
logo = _a.logo,
|
|
29943
|
+
onLogoClick = _a.onLogoClick,
|
|
29943
29944
|
topLinks = _a.topLinks,
|
|
29944
29945
|
items = _a.items,
|
|
29945
29946
|
language = _a.language,
|
|
@@ -30234,7 +30235,7 @@ var Navbar = function (_a) {
|
|
|
30234
30235
|
React__default['default'].createElement(
|
|
30235
30236
|
'div',
|
|
30236
30237
|
{ className: 'nav__container' },
|
|
30237
|
-
React__default['default'].createElement('div', { className: 'nav__logo' }, logo),
|
|
30238
|
+
React__default['default'].createElement('div', { className: 'nav__logo', onClick: onLogoClick }, logo),
|
|
30238
30239
|
React__default['default'].createElement(
|
|
30239
30240
|
'div',
|
|
30240
30241
|
{ className: 'nav__wrapper' },
|
|
@@ -30480,6 +30481,7 @@ var defaultPayments = [
|
|
|
30480
30481
|
var Footer = function (_a) {
|
|
30481
30482
|
var className = _a.className,
|
|
30482
30483
|
logo = _a.logo,
|
|
30484
|
+
onLogoClick = _a.onLogoClick,
|
|
30483
30485
|
_b = _a.social,
|
|
30484
30486
|
social = _b === void 0 ? defaultSocial : _b,
|
|
30485
30487
|
_c = _a.columns,
|
|
@@ -30499,7 +30501,7 @@ var Footer = function (_a) {
|
|
|
30499
30501
|
{ className: 'footer__top' },
|
|
30500
30502
|
React__default['default'].createElement(
|
|
30501
30503
|
'div',
|
|
30502
|
-
{ className: 'footer__logo' },
|
|
30504
|
+
{ className: 'footer__logo', onClick: onLogoClick },
|
|
30503
30505
|
logo !== null && logo !== void 0 ? logo : React__default['default'].createElement(DefaultLogo, null)
|
|
30504
30506
|
),
|
|
30505
30507
|
React__default['default'].createElement(
|
|
@@ -42576,11 +42578,7 @@ var HotelCard = function (_a) {
|
|
|
42576
42578
|
return (e.currentTarget.style.transform = 'scale(1)');
|
|
42577
42579
|
}
|
|
42578
42580
|
},
|
|
42579
|
-
React__default['default'].createElement('div', {
|
|
42580
|
-
dangerouslySetInnerHTML: {
|
|
42581
|
-
__html: he.decode(result.contents)
|
|
42582
|
-
}
|
|
42583
|
-
}),
|
|
42581
|
+
React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: he.decode(result.contents) } }),
|
|
42584
42582
|
React__default['default'].createElement(
|
|
42585
42583
|
'div',
|
|
42586
42584
|
{ className: 'search__result-card__footer' },
|
|
@@ -45793,9 +45791,10 @@ var Filters = function (_a) {
|
|
|
45793
45791
|
};
|
|
45794
45792
|
|
|
45795
45793
|
var GroupTourCard = function (_a) {
|
|
45796
|
-
var _b;
|
|
45794
|
+
var _b, _c, _d, _e, _f, _g;
|
|
45797
45795
|
var result = _a.result,
|
|
45798
|
-
languageCode = _a.languageCode
|
|
45796
|
+
languageCode = _a.languageCode,
|
|
45797
|
+
cmsItem = _a.cmsItem;
|
|
45799
45798
|
var dispatch = reactRedux.useDispatch();
|
|
45800
45799
|
var translations = getTranslations(languageCode !== null && languageCode !== void 0 ? languageCode : 'en-GB');
|
|
45801
45800
|
var selectedSearchResultId = reactRedux.useSelector(function (state) {
|
|
@@ -45820,20 +45819,34 @@ var GroupTourCard = function (_a) {
|
|
|
45820
45819
|
React__default['default'].createElement(
|
|
45821
45820
|
'div',
|
|
45822
45821
|
{ className: 'search__result-card__allotment' },
|
|
45822
|
+
React__default['default'].createElement(
|
|
45823
|
+
'div',
|
|
45824
|
+
{ className: 'search__result-card__allotment__img-wrapper' },
|
|
45825
|
+
React__default['default'].createElement('img', {
|
|
45826
|
+
src:
|
|
45827
|
+
(_e =
|
|
45828
|
+
(_d = (_c = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.content) === null || _c === void 0 ? void 0 : _c.images) === null ||
|
|
45829
|
+
_d === void 0
|
|
45830
|
+
? void 0
|
|
45831
|
+
: _d.header) === null || _e === void 0
|
|
45832
|
+
? void 0
|
|
45833
|
+
: _e.url,
|
|
45834
|
+
alt: result.name,
|
|
45835
|
+
className: 'search__result-card__allotment__img'
|
|
45836
|
+
})
|
|
45837
|
+
),
|
|
45823
45838
|
React__default['default'].createElement(
|
|
45824
45839
|
'div',
|
|
45825
45840
|
{ className: 'search__result-card__allotment__title__wrapper' },
|
|
45826
|
-
React__default['default'].createElement(
|
|
45827
|
-
|
|
45828
|
-
|
|
45829
|
-
|
|
45830
|
-
|
|
45831
|
-
|
|
45832
|
-
|
|
45833
|
-
|
|
45834
|
-
|
|
45835
|
-
)
|
|
45836
|
-
),
|
|
45841
|
+
React__default['default'].createElement('h3', { className: 'search__result-card__allotment__title' }, result.name),
|
|
45842
|
+
((_g = (_f = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.content) === null || _f === void 0 ? void 0 : _f.introductie) === null ||
|
|
45843
|
+
_g === void 0
|
|
45844
|
+
? void 0
|
|
45845
|
+
: _g.intro) &&
|
|
45846
|
+
React__default['default'].createElement('div', {
|
|
45847
|
+
className: 'search__result-card__allotment__description',
|
|
45848
|
+
dangerouslySetInnerHTML: { __html: he.decode(cmsItem.content.introductie.intro) }
|
|
45849
|
+
}),
|
|
45837
45850
|
React__default['default'].createElement(
|
|
45838
45851
|
'div',
|
|
45839
45852
|
{ className: 'search__result-card__allotment__container' },
|
|
@@ -45972,11 +45985,36 @@ var GroupTourResults = function (_a) {
|
|
|
45972
45985
|
},
|
|
45973
45986
|
[activeTab]
|
|
45974
45987
|
);
|
|
45988
|
+
var cmsMap = React__default['default'].useMemo(
|
|
45989
|
+
function () {
|
|
45990
|
+
var _a;
|
|
45991
|
+
var map = new Map();
|
|
45992
|
+
(_a = context.cmsGroupTourData) === null || _a === void 0
|
|
45993
|
+
? void 0
|
|
45994
|
+
: _a.forEach(function (item) {
|
|
45995
|
+
var _a, _b, _c;
|
|
45996
|
+
var code =
|
|
45997
|
+
(_c =
|
|
45998
|
+
(_b = (_a = item === null || item === void 0 ? void 0 : item.content) === null || _a === void 0 ? void 0 : _a.introductie) === null ||
|
|
45999
|
+
_b === void 0
|
|
46000
|
+
? void 0
|
|
46001
|
+
: _b.data) === null || _c === void 0
|
|
46002
|
+
? void 0
|
|
46003
|
+
: _c.code;
|
|
46004
|
+
if (code) {
|
|
46005
|
+
map.set(code, item);
|
|
46006
|
+
}
|
|
46007
|
+
});
|
|
46008
|
+
return map;
|
|
46009
|
+
},
|
|
46010
|
+
[context.cmsGroupTourData]
|
|
46011
|
+
);
|
|
45975
46012
|
return React__default['default'].createElement(
|
|
45976
46013
|
'div',
|
|
45977
46014
|
{ className: 'search__results__cards search__results__cards--'.concat(activeTab) },
|
|
45978
46015
|
filteredResults.map(function (result, index) {
|
|
45979
|
-
|
|
46016
|
+
var cmsItem = cmsMap.get(result.code);
|
|
46017
|
+
return React__default['default'].createElement(GroupTourCard, { key: index, result: result, cmsItem: cmsItem });
|
|
45980
46018
|
})
|
|
45981
46019
|
);
|
|
45982
46020
|
};
|
|
@@ -19,6 +19,7 @@ export interface FooterProps {
|
|
|
19
19
|
className?: string;
|
|
20
20
|
/** Optional override for the logo (defaults to the SVG from your footer) */
|
|
21
21
|
logo?: React.ReactNode;
|
|
22
|
+
onLogoClick?: () => void;
|
|
22
23
|
social?: SocialLink[];
|
|
23
24
|
columns?: FooterColumn[];
|
|
24
25
|
copyrightText?: string;
|
package/build/build-esm/index.js
CHANGED
|
@@ -22917,7 +22917,7 @@ var OptionUnitsCard = function (_a) {
|
|
|
22917
22917
|
React__default.createElement(
|
|
22918
22918
|
'div',
|
|
22919
22919
|
{ className: 'booking-card__group-header' },
|
|
22920
|
-
React__default.createElement('h3', { className: 'booking-card__body-heading' }, translations.OPTIONS_FORM.UNIT_TITLE, ' ', u.index
|
|
22920
|
+
React__default.createElement('h3', { className: 'booking-card__body-heading' }, translations.OPTIONS_FORM.UNIT_TITLE, ' ', u.index),
|
|
22921
22921
|
React__default.createElement('p', null, getUnitPaxLabel(u.index)),
|
|
22922
22922
|
React__default.createElement(
|
|
22923
22923
|
'div',
|
|
@@ -29830,6 +29830,7 @@ var Navbar = function (_a) {
|
|
|
29830
29830
|
var _b;
|
|
29831
29831
|
var currentPath = _a.currentPath,
|
|
29832
29832
|
logo = _a.logo,
|
|
29833
|
+
onLogoClick = _a.onLogoClick,
|
|
29833
29834
|
topLinks = _a.topLinks,
|
|
29834
29835
|
items = _a.items,
|
|
29835
29836
|
language = _a.language,
|
|
@@ -30122,7 +30123,7 @@ var Navbar = function (_a) {
|
|
|
30122
30123
|
React__default.createElement(
|
|
30123
30124
|
'div',
|
|
30124
30125
|
{ className: 'nav__container' },
|
|
30125
|
-
React__default.createElement('div', { className: 'nav__logo' }, logo),
|
|
30126
|
+
React__default.createElement('div', { className: 'nav__logo', onClick: onLogoClick }, logo),
|
|
30126
30127
|
React__default.createElement(
|
|
30127
30128
|
'div',
|
|
30128
30129
|
{ className: 'nav__wrapper' },
|
|
@@ -30368,6 +30369,7 @@ var defaultPayments = [
|
|
|
30368
30369
|
var Footer = function (_a) {
|
|
30369
30370
|
var className = _a.className,
|
|
30370
30371
|
logo = _a.logo,
|
|
30372
|
+
onLogoClick = _a.onLogoClick,
|
|
30371
30373
|
_b = _a.social,
|
|
30372
30374
|
social = _b === void 0 ? defaultSocial : _b,
|
|
30373
30375
|
_c = _a.columns,
|
|
@@ -30387,7 +30389,7 @@ var Footer = function (_a) {
|
|
|
30387
30389
|
{ className: 'footer__top' },
|
|
30388
30390
|
React__default.createElement(
|
|
30389
30391
|
'div',
|
|
30390
|
-
{ className: 'footer__logo' },
|
|
30392
|
+
{ className: 'footer__logo', onClick: onLogoClick },
|
|
30391
30393
|
logo !== null && logo !== void 0 ? logo : React__default.createElement(DefaultLogo, null)
|
|
30392
30394
|
),
|
|
30393
30395
|
React__default.createElement(
|
|
@@ -42399,11 +42401,7 @@ var HotelCard = function (_a) {
|
|
|
42399
42401
|
return (e.currentTarget.style.transform = 'scale(1)');
|
|
42400
42402
|
}
|
|
42401
42403
|
},
|
|
42402
|
-
React__default.createElement('div', {
|
|
42403
|
-
dangerouslySetInnerHTML: {
|
|
42404
|
-
__html: he.decode(result.contents)
|
|
42405
|
-
}
|
|
42406
|
-
}),
|
|
42404
|
+
React__default.createElement('div', { dangerouslySetInnerHTML: { __html: he.decode(result.contents) } }),
|
|
42407
42405
|
React__default.createElement(
|
|
42408
42406
|
'div',
|
|
42409
42407
|
{ className: 'search__result-card__footer' },
|
|
@@ -45545,9 +45543,10 @@ var Filters = function (_a) {
|
|
|
45545
45543
|
};
|
|
45546
45544
|
|
|
45547
45545
|
var GroupTourCard = function (_a) {
|
|
45548
|
-
var _b;
|
|
45546
|
+
var _b, _c, _d, _e, _f, _g;
|
|
45549
45547
|
var result = _a.result,
|
|
45550
|
-
languageCode = _a.languageCode
|
|
45548
|
+
languageCode = _a.languageCode,
|
|
45549
|
+
cmsItem = _a.cmsItem;
|
|
45551
45550
|
var dispatch = useDispatch();
|
|
45552
45551
|
var translations = getTranslations(languageCode !== null && languageCode !== void 0 ? languageCode : 'en-GB');
|
|
45553
45552
|
var selectedSearchResultId = useSelector(function (state) {
|
|
@@ -45572,20 +45571,34 @@ var GroupTourCard = function (_a) {
|
|
|
45572
45571
|
React__default.createElement(
|
|
45573
45572
|
'div',
|
|
45574
45573
|
{ className: 'search__result-card__allotment' },
|
|
45574
|
+
React__default.createElement(
|
|
45575
|
+
'div',
|
|
45576
|
+
{ className: 'search__result-card__allotment__img-wrapper' },
|
|
45577
|
+
React__default.createElement('img', {
|
|
45578
|
+
src:
|
|
45579
|
+
(_e =
|
|
45580
|
+
(_d = (_c = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.content) === null || _c === void 0 ? void 0 : _c.images) === null ||
|
|
45581
|
+
_d === void 0
|
|
45582
|
+
? void 0
|
|
45583
|
+
: _d.header) === null || _e === void 0
|
|
45584
|
+
? void 0
|
|
45585
|
+
: _e.url,
|
|
45586
|
+
alt: result.name,
|
|
45587
|
+
className: 'search__result-card__allotment__img'
|
|
45588
|
+
})
|
|
45589
|
+
),
|
|
45575
45590
|
React__default.createElement(
|
|
45576
45591
|
'div',
|
|
45577
45592
|
{ className: 'search__result-card__allotment__title__wrapper' },
|
|
45578
|
-
React__default.createElement(
|
|
45579
|
-
|
|
45580
|
-
|
|
45581
|
-
|
|
45582
|
-
|
|
45583
|
-
|
|
45584
|
-
|
|
45585
|
-
|
|
45586
|
-
|
|
45587
|
-
)
|
|
45588
|
-
),
|
|
45593
|
+
React__default.createElement('h3', { className: 'search__result-card__allotment__title' }, result.name),
|
|
45594
|
+
((_g = (_f = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.content) === null || _f === void 0 ? void 0 : _f.introductie) === null ||
|
|
45595
|
+
_g === void 0
|
|
45596
|
+
? void 0
|
|
45597
|
+
: _g.intro) &&
|
|
45598
|
+
React__default.createElement('div', {
|
|
45599
|
+
className: 'search__result-card__allotment__description',
|
|
45600
|
+
dangerouslySetInnerHTML: { __html: he.decode(cmsItem.content.introductie.intro) }
|
|
45601
|
+
}),
|
|
45589
45602
|
React__default.createElement(
|
|
45590
45603
|
'div',
|
|
45591
45604
|
{ className: 'search__result-card__allotment__container' },
|
|
@@ -45724,11 +45737,36 @@ var GroupTourResults = function (_a) {
|
|
|
45724
45737
|
},
|
|
45725
45738
|
[activeTab]
|
|
45726
45739
|
);
|
|
45740
|
+
var cmsMap = React__default.useMemo(
|
|
45741
|
+
function () {
|
|
45742
|
+
var _a;
|
|
45743
|
+
var map = new Map();
|
|
45744
|
+
(_a = context.cmsGroupTourData) === null || _a === void 0
|
|
45745
|
+
? void 0
|
|
45746
|
+
: _a.forEach(function (item) {
|
|
45747
|
+
var _a, _b, _c;
|
|
45748
|
+
var code =
|
|
45749
|
+
(_c =
|
|
45750
|
+
(_b = (_a = item === null || item === void 0 ? void 0 : item.content) === null || _a === void 0 ? void 0 : _a.introductie) === null ||
|
|
45751
|
+
_b === void 0
|
|
45752
|
+
? void 0
|
|
45753
|
+
: _b.data) === null || _c === void 0
|
|
45754
|
+
? void 0
|
|
45755
|
+
: _c.code;
|
|
45756
|
+
if (code) {
|
|
45757
|
+
map.set(code, item);
|
|
45758
|
+
}
|
|
45759
|
+
});
|
|
45760
|
+
return map;
|
|
45761
|
+
},
|
|
45762
|
+
[context.cmsGroupTourData]
|
|
45763
|
+
);
|
|
45727
45764
|
return React__default.createElement(
|
|
45728
45765
|
'div',
|
|
45729
45766
|
{ className: 'search__results__cards search__results__cards--'.concat(activeTab) },
|
|
45730
45767
|
filteredResults.map(function (result, index) {
|
|
45731
|
-
|
|
45768
|
+
var cmsItem = cmsMap.get(result.code);
|
|
45769
|
+
return React__default.createElement(GroupTourCard, { key: index, result: result, cmsItem: cmsItem });
|
|
45732
45770
|
})
|
|
45733
45771
|
);
|
|
45734
45772
|
};
|
|
@@ -19,6 +19,7 @@ export interface FooterProps {
|
|
|
19
19
|
className?: string;
|
|
20
20
|
/** Optional override for the logo (defaults to the SVG from your footer) */
|
|
21
21
|
logo?: React.ReactNode;
|
|
22
|
+
onLogoClick?: () => void;
|
|
22
23
|
social?: SocialLink[];
|
|
23
24
|
columns?: FooterColumn[];
|
|
24
25
|
copyrightText?: string;
|
package/package.json
CHANGED
|
@@ -91,7 +91,7 @@ const OptionUnitsCard: React.FC<OptionUnitsCardProps> = ({ units, parentIndex, o
|
|
|
91
91
|
<div className={buildClassName(['booking-card__group', toggleStates && toggleStates[i] && 'booking-card__group--active'])}>
|
|
92
92
|
<div className="booking-card__group-header">
|
|
93
93
|
<h3 className="booking-card__body-heading">
|
|
94
|
-
{translations.OPTIONS_FORM.UNIT_TITLE} {u.index
|
|
94
|
+
{translations.OPTIONS_FORM.UNIT_TITLE} {u.index}
|
|
95
95
|
</h3>
|
|
96
96
|
<p>{getUnitPaxLabel(u.index)}</p>
|
|
97
97
|
<div className="booking-card__actions">
|
|
@@ -104,6 +104,7 @@ const defaultPayments: PaymentIcon[] = [
|
|
|
104
104
|
export const Footer: React.FC<FooterProps> = ({
|
|
105
105
|
className,
|
|
106
106
|
logo,
|
|
107
|
+
onLogoClick,
|
|
107
108
|
social = defaultSocial,
|
|
108
109
|
columns = defaultColumns,
|
|
109
110
|
copyrightText = '© 2024 Travel Agency. All rights reserved.',
|
|
@@ -113,7 +114,9 @@ export const Footer: React.FC<FooterProps> = ({
|
|
|
113
114
|
<footer className={['footer', className].filter(Boolean).join(' ')}>
|
|
114
115
|
<div className="footer__container">
|
|
115
116
|
<div className="footer__top">
|
|
116
|
-
<div className="footer__logo"
|
|
117
|
+
<div className="footer__logo" onClick={onLogoClick}>
|
|
118
|
+
{logo ?? <DefaultLogo />}
|
|
119
|
+
</div>
|
|
117
120
|
|
|
118
121
|
<div className="footer__social">
|
|
119
122
|
{social.map((item) => (
|
|
@@ -4,7 +4,20 @@ import Icon from '../components/icon';
|
|
|
4
4
|
import { NavbarProps, NavItem } from '../navbar/types';
|
|
5
5
|
import { getTranslations } from '../../shared/utils/localization-util';
|
|
6
6
|
|
|
7
|
-
const Navbar: React.FC<NavbarProps> = ({
|
|
7
|
+
const Navbar: React.FC<NavbarProps> = ({
|
|
8
|
+
currentPath,
|
|
9
|
+
logo,
|
|
10
|
+
onLogoClick,
|
|
11
|
+
topLinks,
|
|
12
|
+
items,
|
|
13
|
+
language,
|
|
14
|
+
languages,
|
|
15
|
+
onLanguageChange,
|
|
16
|
+
onSearch,
|
|
17
|
+
member,
|
|
18
|
+
onLogin,
|
|
19
|
+
onLogout
|
|
20
|
+
}) => {
|
|
8
21
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
9
22
|
const [query, setQuery] = useState('');
|
|
10
23
|
const [activeMobileGroup, setActiveMobileGroup] = useState<string>();
|
|
@@ -247,7 +260,9 @@ const Navbar: React.FC<NavbarProps> = ({ currentPath, logo, topLinks, items, lan
|
|
|
247
260
|
</div>
|
|
248
261
|
<nav className="nav__primary">
|
|
249
262
|
<div className="nav__container">
|
|
250
|
-
<div className="nav__logo"
|
|
263
|
+
<div className="nav__logo" onClick={onLogoClick}>
|
|
264
|
+
{logo}
|
|
265
|
+
</div>
|
|
251
266
|
<div className="nav__wrapper">
|
|
252
267
|
<div className="nav__links">{items && items.map(renderNavItem)}</div>
|
|
253
268
|
<div className="nav__search">
|
|
@@ -6,13 +6,15 @@ import { calculateDays, calculateNights, formatPrice, getTranslations } from '..
|
|
|
6
6
|
import { SearchResultsRootState } from '../../store/search-results-store';
|
|
7
7
|
import { useDispatch, useSelector } from 'react-redux';
|
|
8
8
|
import { setSelectedSearchResult } from '../../store/search-results-slice';
|
|
9
|
+
import he from 'he';
|
|
9
10
|
|
|
10
11
|
interface GroupTourCardProps {
|
|
11
12
|
result: BookingPackageItem;
|
|
12
13
|
languageCode?: string;
|
|
14
|
+
cmsItem?: any;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
const GroupTourCard: React.FC<GroupTourCardProps> = ({ result, languageCode }) => {
|
|
17
|
+
const GroupTourCard: React.FC<GroupTourCardProps> = ({ result, languageCode, cmsItem }) => {
|
|
16
18
|
const dispatch = useDispatch();
|
|
17
19
|
const translations = getTranslations(languageCode ?? 'en-GB');
|
|
18
20
|
const { selectedSearchResultId } = useSelector((state: SearchResultsRootState) => state.searchResults);
|
|
@@ -29,15 +31,16 @@ const GroupTourCard: React.FC<GroupTourCardProps> = ({ result, languageCode }) =
|
|
|
29
31
|
return (
|
|
30
32
|
<div className="search__result-card">
|
|
31
33
|
<div className="search__result-card__allotment">
|
|
34
|
+
<div className="search__result-card__allotment__img-wrapper">
|
|
35
|
+
<img src={cmsItem?.content?.images?.header?.url} alt={result.name} className="search__result-card__allotment__img" />
|
|
36
|
+
</div>
|
|
32
37
|
<div className="search__result-card__allotment__title__wrapper">
|
|
33
|
-
<h3 className="search__result-card__allotment__title">
|
|
34
|
-
|
|
35
|
-
<
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
</h3>
|
|
40
|
-
|
|
38
|
+
<h3 className="search__result-card__allotment__title">{result.name}</h3>
|
|
39
|
+
{cmsItem?.content?.introductie?.intro && (
|
|
40
|
+
<div
|
|
41
|
+
className="search__result-card__allotment__description"
|
|
42
|
+
dangerouslySetInnerHTML={{ __html: he.decode(cmsItem.content.introductie.intro) }}></div>
|
|
43
|
+
)}
|
|
41
44
|
<div className="search__result-card__allotment__container">
|
|
42
45
|
<div className="search__result-card__allotment__header">
|
|
43
46
|
<div className="search__result-card__allotment__wrapper">
|
|
@@ -36,11 +36,25 @@ const GroupTourResults: React.FC<GroupTourResultsProps> = ({ isLoading }) => {
|
|
|
36
36
|
}
|
|
37
37
|
}, [activeTab]);
|
|
38
38
|
|
|
39
|
+
const cmsMap = React.useMemo(() => {
|
|
40
|
+
const map = new Map();
|
|
41
|
+
|
|
42
|
+
context.cmsGroupTourData?.forEach((item) => {
|
|
43
|
+
const code = item?.content?.introductie?.data?.code;
|
|
44
|
+
if (code) {
|
|
45
|
+
map.set(code, item);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return map;
|
|
50
|
+
}, [context.cmsGroupTourData]);
|
|
51
|
+
|
|
39
52
|
return (
|
|
40
53
|
<div className={`search__results__cards search__results__cards--${activeTab}`}>
|
|
41
|
-
{filteredResults.map((result, index) =>
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
{filteredResults.map((result, index) => {
|
|
55
|
+
const cmsItem = cmsMap.get(result.code);
|
|
56
|
+
return <GroupTourCard key={index} result={result} cmsItem={cmsItem} />;
|
|
57
|
+
})}
|
|
44
58
|
</div>
|
|
45
59
|
);
|
|
46
60
|
};
|
|
@@ -26,10 +26,7 @@ const HotelCard: React.FC<HotelCardProps> = ({ result, translations }) => {
|
|
|
26
26
|
className="search__result-card__wrapper search__result-card__wrapper--custom"
|
|
27
27
|
onMouseEnter={(e) => (e.currentTarget.style.transform = 'scale(1.02)')}
|
|
28
28
|
onMouseLeave={(e) => (e.currentTarget.style.transform = 'scale(1)')}>
|
|
29
|
-
<div
|
|
30
|
-
dangerouslySetInnerHTML={{
|
|
31
|
-
__html: he.decode(result.contents)
|
|
32
|
-
}}></div>
|
|
29
|
+
<div dangerouslySetInnerHTML={{ __html: he.decode(result.contents) }}></div>
|
|
33
30
|
<div className="search__result-card__footer">
|
|
34
31
|
<button
|
|
35
32
|
type="button"
|
|
@@ -1174,16 +1174,8 @@
|
|
|
1174
1174
|
width: 100%;
|
|
1175
1175
|
|
|
1176
1176
|
@include mixins.media-xs {
|
|
1177
|
-
grid-template-columns: 1fr 0.6fr;
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
|
-
@include mixins.media-lg {
|
|
1181
1177
|
grid-template-columns: 1fr 0.8fr;
|
|
1182
1178
|
}
|
|
1183
|
-
|
|
1184
|
-
@include mixins.media-xl {
|
|
1185
|
-
grid-template-columns: 1fr 0.6fr;
|
|
1186
|
-
}
|
|
1187
1179
|
}
|
|
1188
1180
|
|
|
1189
1181
|
&__header {
|