mautourco-components 0.2.22 → 0.2.24
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/dist/components/atoms/Icon/icons/LineIcon.d.ts +8 -0
- package/dist/components/atoms/Icon/icons/LineIcon.js +21 -0
- package/dist/components/atoms/Icon/icons/PlusCircleIcon.js +1 -1
- package/dist/components/atoms/Icon/icons/registry.d.ts +1 -0
- package/dist/components/atoms/Icon/icons/registry.js +2 -0
- package/dist/components/molecules/AccomodationDocket/AccomodationDocket.d.ts +7 -0
- package/dist/components/molecules/AccomodationDocket/AccomodationDocket.js +69 -0
- package/dist/components/molecules/AccomodationDocket/index.d.ts +2 -0
- package/dist/components/molecules/AccomodationDocket/index.js +1 -0
- package/dist/components/molecules/AddItemButton/AddItemButton.css +2088 -0
- package/dist/components/molecules/AddItemButton/AddItemButton.d.ts +7 -0
- package/dist/components/molecules/AddItemButton/AddItemButton.js +19 -0
- package/dist/components/molecules/BookingResume/ResumeAccom/ResumeAccom.js +1 -1
- package/dist/components/molecules/BookingResume/ResumeExcursion/ResumeExcursion.js +1 -1
- package/dist/components/molecules/BookingResume/ResumeTransfer.js +1 -1
- package/dist/components/molecules/Calendar/DateTime.d.ts +5 -5
- package/dist/components/molecules/Calendar/DateTime.js +48 -37
- package/dist/components/molecules/DateDisplay/DateDisplay.css +2100 -0
- package/dist/components/molecules/DateDisplay/DateDisplay.d.ts +13 -6
- package/dist/components/molecules/DateDisplay/DateDisplay.js +22 -8
- package/dist/components/molecules/DocketPrices/DocketPrices.d.ts +19 -0
- package/dist/components/molecules/DocketPrices/DocketPrices.js +31 -0
- package/dist/components/molecules/DocketPrices/index.d.ts +3 -0
- package/dist/components/molecules/DocketPrices/index.js +2 -0
- package/dist/components/molecules/ExcursionDocket/ExcursionDocket.d.ts +8 -0
- package/dist/components/molecules/ExcursionDocket/ExcursionDocket.js +30 -0
- package/dist/components/molecules/ExcursionDocket/index.d.ts +2 -0
- package/dist/components/molecules/ExcursionDocket/index.js +1 -0
- package/dist/components/molecules/LocationDropdown/LocationDropdown.js +8 -11
- package/dist/components/molecules/OtherServiceDocket/OtherServiceDocket.d.ts +8 -0
- package/dist/components/molecules/OtherServiceDocket/OtherServiceDocket.js +29 -0
- package/dist/components/molecules/OtherServiceDocket/index.d.ts +2 -0
- package/dist/components/molecules/OtherServiceDocket/index.js +1 -0
- package/dist/components/molecules/PriceDisplay/PriceDisplay.css +2101 -0
- package/dist/components/molecules/PriceDisplay/PriceDisplay.d.ts +26 -0
- package/dist/components/molecules/PriceDisplay/PriceDisplay.js +132 -0
- package/dist/components/molecules/PriceDisplay/index.d.ts +3 -0
- package/dist/components/molecules/PriceDisplay/index.js +2 -0
- package/dist/components/molecules/ServiceSelector/ServiceSelector.d.ts +3 -0
- package/dist/components/molecules/ServiceSelector/ServiceSelector.js +23 -12
- package/dist/components/molecules/TransferDocket/TransferDocket.d.ts +8 -0
- package/dist/components/molecules/TransferDocket/TransferDocket.js +59 -0
- package/dist/components/molecules/TransferDocket/index.d.ts +3 -0
- package/dist/components/molecules/TransferDocket/index.js +2 -0
- package/dist/components/organisms/BookingAddItem/AddItemNewService.d.ts +12 -0
- package/dist/components/organisms/BookingAddItem/AddItemNewService.js +48 -0
- package/dist/components/organisms/BookingAddItem/AddItemSelector.d.ts +9 -0
- package/dist/components/organisms/BookingAddItem/AddItemSelector.js +23 -0
- package/dist/components/organisms/BookingAddItem/BookingAddItem.d.ts +16 -0
- package/dist/components/organisms/BookingAddItem/BookingAddItem.js +66 -0
- package/dist/components/organisms/BookingAddItem/index.d.ts +3 -0
- package/dist/components/organisms/BookingAddItem/index.js +3 -0
- package/dist/components/organisms/DateTimePicker/DateTimePicker.js +11 -7
- package/dist/components/organisms/Docket/Docket.d.ts +126 -0
- package/dist/components/organisms/Docket/Docket.js +125 -0
- package/dist/components/organisms/PaxSelector/PaxSelector.d.ts +1 -0
- package/dist/components/organisms/PaxSelector/PaxSelector.js +50 -28
- package/dist/components/ui/popover.js +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +5 -0
- package/dist/styles/components/checkbox.css +5 -4
- package/dist/styles/components/molecule/accomodation-docket.css +2222 -0
- package/dist/styles/components/molecule/calendarInput.css +3 -4
- package/dist/styles/components/molecule/docket-prices.css +2095 -0
- package/dist/styles/components/molecule/excursion-docket.css +2135 -0
- package/dist/styles/components/molecule/other-service-docket.css +2114 -0
- package/dist/styles/components/molecule/service-selector.css +70 -21
- package/dist/styles/components/molecule/transfer-docket.css +2150 -0
- package/dist/styles/components/organism/docket.css +2448 -0
- package/dist/types/docket/docket.types.d.ts +11 -0
- package/dist/types/docket/docket.types.js +1 -0
- package/dist/types/docket/services.types.d.ts +125 -0
- package/dist/types/docket/services.types.js +1 -0
- package/package.json +1 -1
- package/src/components/atoms/Icon/icons/LineIcon.tsx +31 -0
- package/src/components/atoms/Icon/icons/PlusCircleIcon.tsx +2 -2
- package/src/components/atoms/Icon/icons/registry.tsx +2 -0
- package/src/components/molecules/AccomodationDocket/AccomodationDocket.tsx +224 -0
- package/src/components/molecules/AccomodationDocket/index.ts +3 -0
- package/src/components/molecules/AddItemButton/AddItemButton.css +5 -0
- package/src/components/molecules/AddItemButton/AddItemButton.tsx +18 -0
- package/src/components/molecules/BookingResume/ResumeAccom/ResumeAccom.tsx +1 -1
- package/src/components/molecules/BookingResume/ResumeExcursion/ResumeExcursion.tsx +1 -1
- package/src/components/molecules/BookingResume/ResumeTransfer.tsx +1 -1
- package/src/components/molecules/Calendar/DateTime.tsx +69 -53
- package/src/components/molecules/DateDisplay/DateDisplay.css +21 -0
- package/src/components/molecules/DateDisplay/DateDisplay.tsx +52 -24
- package/src/components/molecules/DocketPrices/DocketPrices.tsx +56 -0
- package/src/components/molecules/DocketPrices/index.ts +4 -0
- package/src/components/molecules/ExcursionDocket/ExcursionDocket.tsx +171 -0
- package/src/components/molecules/ExcursionDocket/index.ts +2 -0
- package/src/components/molecules/LocationDropdown/LocationDropdown.tsx +41 -38
- package/src/components/molecules/OtherServiceDocket/OtherServiceDocket.tsx +58 -0
- package/src/components/molecules/OtherServiceDocket/index.ts +2 -0
- package/src/components/molecules/PriceDisplay/PriceDisplay.css +24 -0
- package/src/components/molecules/PriceDisplay/PriceDisplay.tsx +179 -0
- package/src/components/molecules/PriceDisplay/index.ts +4 -0
- package/src/components/molecules/ServiceSelector/ServiceSelector.tsx +91 -83
- package/src/components/molecules/TransferDocket/TransferDocket.tsx +156 -0
- package/src/components/molecules/TransferDocket/index.ts +4 -0
- package/src/components/organisms/BookingAddItem/AddItemNewService.tsx +95 -0
- package/src/components/organisms/BookingAddItem/AddItemSelector.tsx +43 -0
- package/src/components/organisms/BookingAddItem/BookingAddItem.tsx +120 -0
- package/src/components/organisms/BookingAddItem/index.ts +3 -0
- package/src/components/organisms/CarBookingCard/index.ts +1 -0
- package/src/components/organisms/DateTimePicker/DateTimePicker.tsx +13 -7
- package/src/components/organisms/Docket/Docket.tsx +456 -0
- package/src/components/organisms/PaxSelector/PaxSelector.tsx +305 -193
- package/src/components/organisms/SearchBarTransfer/index.ts +2 -0
- package/src/components/ui/popover.tsx +2 -4
- package/src/styles/components/checkbox.css +5 -4
- package/src/styles/components/molecule/accomodation-docket.css +117 -0
- package/src/styles/components/molecule/calendarInput.css +12 -13
- package/src/styles/components/molecule/docket-prices.css +13 -0
- package/src/styles/components/molecule/excursion-docket.css +47 -0
- package/src/styles/components/molecule/other-service-docket.css +30 -0
- package/src/styles/components/molecule/service-selector.css +71 -23
- package/src/styles/components/molecule/transfer-docket.css +61 -0
- package/src/styles/components/organism/docket.css +360 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { CancellationPolicy, Offer } from '../table';
|
|
2
|
+
type ServiceType = 'accommodation' | 'transfer' | 'excursion' | 'otherService';
|
|
3
|
+
export interface ServiceDocket {
|
|
4
|
+
type: ServiceType;
|
|
5
|
+
}
|
|
6
|
+
export interface HotelAmenity {
|
|
7
|
+
AmenityIcon: string;
|
|
8
|
+
AmenityName: string;
|
|
9
|
+
}
|
|
10
|
+
export interface RoomDocket {
|
|
11
|
+
room_detail_id?: number;
|
|
12
|
+
Dates: string[];
|
|
13
|
+
RoomName?: string;
|
|
14
|
+
RoomPrice?: number;
|
|
15
|
+
RoomAmenities?: Record<string, any>;
|
|
16
|
+
RoomImage?: string;
|
|
17
|
+
AdultCount?: number;
|
|
18
|
+
TeenCount?: number;
|
|
19
|
+
ChildCount?: number;
|
|
20
|
+
InfantCount?: number;
|
|
21
|
+
MealPlan?: string;
|
|
22
|
+
Mealsupplement?: number;
|
|
23
|
+
quotationPrice?: number;
|
|
24
|
+
ClientType?: string;
|
|
25
|
+
cancellation_policy?: CancellationPolicy[];
|
|
26
|
+
Offers?: Offer[];
|
|
27
|
+
Status?: string;
|
|
28
|
+
Mandatory?: any[];
|
|
29
|
+
paxAge?: any[];
|
|
30
|
+
isEmpty?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface AccomodationDocket extends ServiceDocket {
|
|
33
|
+
type: 'accommodation';
|
|
34
|
+
HotelName: string;
|
|
35
|
+
HotelId: number;
|
|
36
|
+
HotelAmenities: HotelAmenity[];
|
|
37
|
+
Dates: [string, string];
|
|
38
|
+
Images: string[];
|
|
39
|
+
Total: string;
|
|
40
|
+
Currency: string;
|
|
41
|
+
Description: string;
|
|
42
|
+
TitleDescription: string;
|
|
43
|
+
Rooms: RoomDocket[];
|
|
44
|
+
}
|
|
45
|
+
export interface TransferDocket extends ServiceDocket {
|
|
46
|
+
type: 'transfer';
|
|
47
|
+
IdTransfer: number;
|
|
48
|
+
TransferDate: string;
|
|
49
|
+
TransferTime: string;
|
|
50
|
+
TransferType: string;
|
|
51
|
+
LocationFromId: number;
|
|
52
|
+
LocationFromName: string;
|
|
53
|
+
LocationFromDetails: string;
|
|
54
|
+
LocationToId: number;
|
|
55
|
+
LocationToName: string;
|
|
56
|
+
LocationToDetails: string;
|
|
57
|
+
Currency: string;
|
|
58
|
+
TotalPrice: number;
|
|
59
|
+
AdultCount: number;
|
|
60
|
+
TeenCount: number;
|
|
61
|
+
ChildCount: number;
|
|
62
|
+
InfantCount: number;
|
|
63
|
+
VehicleTypeId: number;
|
|
64
|
+
VehicleTypeName: string;
|
|
65
|
+
vehicleTypeCategory: string;
|
|
66
|
+
Vehicle_type: string;
|
|
67
|
+
capacity: number;
|
|
68
|
+
CarCount: number;
|
|
69
|
+
Car_selected: boolean;
|
|
70
|
+
luggage: any[];
|
|
71
|
+
LuggageTruck: number;
|
|
72
|
+
LuggageCar: number;
|
|
73
|
+
baby_seat_count: number;
|
|
74
|
+
HandlingFee: string;
|
|
75
|
+
HandlingFeeAdult: number;
|
|
76
|
+
HandlingFeeChild: number;
|
|
77
|
+
HandlingFeeDetails: string | null;
|
|
78
|
+
HandlingType: string;
|
|
79
|
+
Remarks: string;
|
|
80
|
+
Flight: string;
|
|
81
|
+
Pic_url: string;
|
|
82
|
+
IsSearched: boolean;
|
|
83
|
+
IsFieldManually: boolean;
|
|
84
|
+
paxAge: any[];
|
|
85
|
+
otherServices: {
|
|
86
|
+
serviceDetailID: number;
|
|
87
|
+
serviceID: number;
|
|
88
|
+
clientRefs: any[];
|
|
89
|
+
}[];
|
|
90
|
+
}
|
|
91
|
+
export interface ExcursionDocket extends ServiceDocket {
|
|
92
|
+
type: 'excursion';
|
|
93
|
+
ExcursionID: number;
|
|
94
|
+
ExcursionName: string;
|
|
95
|
+
ServiceDate: string;
|
|
96
|
+
SelectedHotel?: string;
|
|
97
|
+
SelectedHotelDetails?: string;
|
|
98
|
+
Currency: string;
|
|
99
|
+
TotalPrice: string | number;
|
|
100
|
+
AdultCount: number;
|
|
101
|
+
TeenCount?: number;
|
|
102
|
+
ChildCount?: number;
|
|
103
|
+
InfantCount?: number;
|
|
104
|
+
Duration?: string;
|
|
105
|
+
MealIncluded?: boolean;
|
|
106
|
+
Meal?: string;
|
|
107
|
+
Accessibility?: string;
|
|
108
|
+
VehicleType?: string;
|
|
109
|
+
VehicleTypeName?: string;
|
|
110
|
+
paxAge?: any[];
|
|
111
|
+
}
|
|
112
|
+
export interface OtherServiceDocket extends ServiceDocket {
|
|
113
|
+
type: 'otherService';
|
|
114
|
+
service_detail_id: number;
|
|
115
|
+
service_for: string;
|
|
116
|
+
service_date?: string;
|
|
117
|
+
Currency: string;
|
|
118
|
+
TotalPrice: string | number;
|
|
119
|
+
AdultCount: number;
|
|
120
|
+
TeenCount?: number;
|
|
121
|
+
ChildCount?: number;
|
|
122
|
+
InfantCount?: number;
|
|
123
|
+
paxAge?: any[];
|
|
124
|
+
}
|
|
125
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface LineIconProps {
|
|
4
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
5
|
+
className?: string;
|
|
6
|
+
color?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const LineIcon: React.FC<LineIconProps> = ({ size = 'md', className = '', color }) => {
|
|
10
|
+
// Line icon always takes full width and has 1px height
|
|
11
|
+
const classes = `w-full h-px ${className}`;
|
|
12
|
+
|
|
13
|
+
// Default stroke color from Figma: #A3A3A3
|
|
14
|
+
const strokeColor = color || '#A3A3A3';
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<svg
|
|
18
|
+
className={classes}
|
|
19
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
20
|
+
width="336"
|
|
21
|
+
height="1"
|
|
22
|
+
viewBox="0 0 336 1"
|
|
23
|
+
fill="none"
|
|
24
|
+
preserveAspectRatio="none"
|
|
25
|
+
style={{ width: '100%', height: '1px' }}>
|
|
26
|
+
<path d="M0 0.5L336 0.499971" stroke={strokeColor} strokeDasharray="4 4" />
|
|
27
|
+
</svg>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default LineIcon;
|
|
@@ -45,12 +45,12 @@ const PlusCircleIcon: React.FC<PlusCircleIconProps> = ({
|
|
|
45
45
|
<g clipPath="url(#clip0_7074_66340)">
|
|
46
46
|
<path
|
|
47
47
|
d="M13.915 8.00098C13.915 4.7334 11.2666 2.08416 7.99902 2.08398C4.73134 2.08398 2.08203 4.73329 2.08203 8.00098C2.08221 11.2685 4.73145 13.917 7.99902 13.917C11.2664 13.9168 13.9149 11.2684 13.915 8.00098ZM7.24902 10.667V8.75098H5.33203C4.91793 8.75098 4.58221 8.41504 4.58203 8.00098C4.58203 7.58676 4.91782 7.25098 5.33203 7.25098H7.24902V5.33398C7.24902 4.91977 7.58481 4.58398 7.99902 4.58398C8.41309 4.58416 8.74902 4.91988 8.74902 5.33398V7.25098H10.665L10.7422 7.25488C11.1203 7.29337 11.415 7.61271 11.415 8.00098C11.4149 8.38912 11.1202 8.70862 10.7422 8.74707L10.665 8.75098H8.74902V10.667C8.74902 11.0811 8.41309 11.4168 7.99902 11.417C7.58481 11.417 7.24902 11.0812 7.24902 10.667ZM15.415 8.00098C15.4149 12.0968 12.0949 15.4168 7.99902 15.417C3.90302 15.417 0.582208 12.0969 0.582031 8.00098C0.582031 3.90487 3.90291 0.583984 7.99902 0.583984C12.095 0.584161 15.415 3.90497 15.415 8.00098Z"
|
|
48
|
-
fill="
|
|
48
|
+
fill="currentColor"
|
|
49
49
|
/>
|
|
50
50
|
</g>
|
|
51
51
|
<defs>
|
|
52
52
|
<clipPath id="clip0_7074_66340">
|
|
53
|
-
<rect width="16" height="16" fill="
|
|
53
|
+
<rect width="16" height="16" fill="currentColor" />
|
|
54
54
|
</clipPath>
|
|
55
55
|
</defs>
|
|
56
56
|
</svg>
|
|
@@ -30,6 +30,7 @@ import FacebookIcon from './FacebookIcon';
|
|
|
30
30
|
import HomeIcon from './HomeIcon';
|
|
31
31
|
import InfoIcon from './InfoIcon';
|
|
32
32
|
import LandIcon from './Land';
|
|
33
|
+
import LineIcon from './LineIcon';
|
|
33
34
|
import LinkedInIcon from './LinkedInIcon';
|
|
34
35
|
import LuggageIcon from './LuggageIcon';
|
|
35
36
|
import MapIcon from './MapIcon';
|
|
@@ -139,6 +140,7 @@ export const ICONS = {
|
|
|
139
140
|
bike: BikeIcon as unknown as IconComponent,
|
|
140
141
|
air: AirIcon as unknown as IconComponent,
|
|
141
142
|
luggage: LuggageIcon as unknown as IconComponent,
|
|
143
|
+
line: LineIcon as unknown as IconComponent,
|
|
142
144
|
'car-front': CarFrontIcon as unknown as IconComponent,
|
|
143
145
|
sea: SeaIcon as unknown as IconComponent,
|
|
144
146
|
catamaran: CatamaranIcon as unknown as IconComponent,
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { differenceInDays } from 'date-fns';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { AccomodationDocket as AccomodationDocketType } from '../../../types/docket/services.types';
|
|
4
|
+
import Chip from '../../atoms/Chip/Chip';
|
|
5
|
+
import Icon from '../../atoms/Icon/Icon';
|
|
6
|
+
import { Text } from '../../atoms/Typography/Typography';
|
|
7
|
+
import { DateDisplay } from '../DateDisplay/DateDisplay';
|
|
8
|
+
import TextWithIcon from '../TextWithIcon/TextWithIcon';
|
|
9
|
+
import '../../../styles/components/molecule/accomodation-docket.css';
|
|
10
|
+
|
|
11
|
+
export interface AccomodationDocketProps {
|
|
12
|
+
data: AccomodationDocketType;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const clientTypeMap: Record<string, string> = {
|
|
16
|
+
standard: 'Standard',
|
|
17
|
+
honeymooners: 'Honeymooners',
|
|
18
|
+
vip: 'VIP',
|
|
19
|
+
vvip: 'VVIP',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const AccomodationDocket: React.FC<AccomodationDocketProps> = ({ data }) => {
|
|
23
|
+
const { HotelName, TitleDescription, Total, Currency, Dates, Rooms } = data;
|
|
24
|
+
|
|
25
|
+
const calculateNights = (dates: string[]): number => {
|
|
26
|
+
if (dates && dates.length >= 2) {
|
|
27
|
+
return differenceInDays(new Date(dates[1]), new Date(dates[0]));
|
|
28
|
+
}
|
|
29
|
+
return 0;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const formatChildrenInfo = (
|
|
33
|
+
room: AccomodationDocketType['Rooms'][0]
|
|
34
|
+
): React.ReactNode => {
|
|
35
|
+
if (!room.ChildCount || room.ChildCount === 0) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const childrenInfo: React.ReactNode[] = [];
|
|
40
|
+
const paxAges = room.paxAge || [];
|
|
41
|
+
|
|
42
|
+
// Group children by age
|
|
43
|
+
const childGroups: Array<{ count: number; age: number }> = [];
|
|
44
|
+
|
|
45
|
+
if (paxAges.length > 0) {
|
|
46
|
+
// Count children by age
|
|
47
|
+
const ageCounts: Record<number, number> = {};
|
|
48
|
+
paxAges.forEach((age: any) => {
|
|
49
|
+
const ageNum = typeof age === 'number' ? age : parseInt(age, 10);
|
|
50
|
+
if (!isNaN(ageNum)) {
|
|
51
|
+
ageCounts[ageNum] = (ageCounts[ageNum] || 0) + 1;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
Object.entries(ageCounts).forEach(([age, count]) => {
|
|
56
|
+
childGroups.push({ count, age: parseInt(age, 10) });
|
|
57
|
+
});
|
|
58
|
+
} else {
|
|
59
|
+
// If no age info, just show total count
|
|
60
|
+
childGroups.push({ count: room.ChildCount, age: 0 });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<div className="accomodation-docket__children">
|
|
65
|
+
{childGroups.map((group, index) => (
|
|
66
|
+
<React.Fragment key={`child-${index}`}>
|
|
67
|
+
{index > 0 && <div className="accomodation-docket__divider-vertical" />}
|
|
68
|
+
<span className="accomodation-docket__child-info">
|
|
69
|
+
<Text size="sm" variant="medium" color="default">
|
|
70
|
+
{group.count} Child{group.count > 1 ? 'ren' : ''}
|
|
71
|
+
</Text>
|
|
72
|
+
{group.age > 0 ? (
|
|
73
|
+
<Text
|
|
74
|
+
size="sm"
|
|
75
|
+
variant="medium"
|
|
76
|
+
className="accomodation-docket__child-age">
|
|
77
|
+
{' '}
|
|
78
|
+
({group.age} y.o)
|
|
79
|
+
</Text>
|
|
80
|
+
) : null}
|
|
81
|
+
</span>
|
|
82
|
+
</React.Fragment>
|
|
83
|
+
))}
|
|
84
|
+
</div>
|
|
85
|
+
);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const renderRoomDetails = (room: AccomodationDocketType['Rooms'][0], index: number) => {
|
|
89
|
+
const isRoomEmpty = room.isEmpty || !room.Dates || room.Dates.length === 0;
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<div key={`room-${index}`} className="accomodation-docket__room">
|
|
93
|
+
<div className="accomodation-docket__room-header">
|
|
94
|
+
<TextWithIcon icon="accom" textVariant="bold" textSize="sm" color="subtle">
|
|
95
|
+
Room {index + 1}
|
|
96
|
+
</TextWithIcon>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
{isRoomEmpty ? (
|
|
100
|
+
<div className="accomodation-docket__room-empty">
|
|
101
|
+
<Text variant="bold" size="sm" color="state-error">
|
|
102
|
+
Please select your second room
|
|
103
|
+
</Text>
|
|
104
|
+
</div>
|
|
105
|
+
) : (
|
|
106
|
+
<div className="accomodation-docket__room-details">
|
|
107
|
+
<div className="accomodation-docket__date-section">
|
|
108
|
+
{room.Dates && room.Dates.length >= 2 && (
|
|
109
|
+
<DateDisplay
|
|
110
|
+
dates={room.Dates}
|
|
111
|
+
calendarSize="sm"
|
|
112
|
+
arrowSize="sm"
|
|
113
|
+
textSize="sm"
|
|
114
|
+
colorMode="green"
|
|
115
|
+
/>
|
|
116
|
+
)}
|
|
117
|
+
{room.Dates && room.Dates.length >= 2 && (
|
|
118
|
+
<TextWithIcon icon="night" textSize="sm" color="subtle">
|
|
119
|
+
{calculateNights(room.Dates)} nights
|
|
120
|
+
</TextWithIcon>
|
|
121
|
+
)}
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div className="accomodation-docket__client-info">
|
|
125
|
+
{room.ClientType && (
|
|
126
|
+
<div className="accomodation-docket__client-type">
|
|
127
|
+
<Text variant="bold" size="sm" color="subtle">
|
|
128
|
+
Client type:{' '}
|
|
129
|
+
</Text>
|
|
130
|
+
<Text variant="medium" size="sm" color="subtle">
|
|
131
|
+
{clientTypeMap[room.ClientType.toLowerCase()] || room.ClientType}
|
|
132
|
+
</Text>
|
|
133
|
+
</div>
|
|
134
|
+
)}
|
|
135
|
+
|
|
136
|
+
<div className="accomodation-docket__guests">
|
|
137
|
+
{room.AdultCount && room.AdultCount > 0 && (
|
|
138
|
+
<TextWithIcon icon="user" textSize="sm" color="subtle">
|
|
139
|
+
{room.AdultCount} Adult{room.AdultCount > 1 ? 's' : ''}
|
|
140
|
+
</TextWithIcon>
|
|
141
|
+
)}
|
|
142
|
+
{room.ChildCount && room.ChildCount > 0 ? (
|
|
143
|
+
<div className="accomodation-docket__children-wrapper">
|
|
144
|
+
<Icon
|
|
145
|
+
name="user"
|
|
146
|
+
size="sm"
|
|
147
|
+
color="var(--color-text-subtle, #303642)"
|
|
148
|
+
/>
|
|
149
|
+
{formatChildrenInfo(room)}
|
|
150
|
+
</div>
|
|
151
|
+
) : null}
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<div className="accomodation-docket__room-info">
|
|
156
|
+
{room.RoomName && (
|
|
157
|
+
<TextWithIcon
|
|
158
|
+
icon="accom"
|
|
159
|
+
textSize="sm"
|
|
160
|
+
color="subtle"
|
|
161
|
+
textLeading="none">
|
|
162
|
+
{room.RoomName}
|
|
163
|
+
</TextWithIcon>
|
|
164
|
+
)}
|
|
165
|
+
{room.MealPlan && (
|
|
166
|
+
<div className="accomodation-docket__meal-plan">
|
|
167
|
+
<div className="accomodation-docket__meal-plan-label">
|
|
168
|
+
<TextWithIcon
|
|
169
|
+
icon="utensils"
|
|
170
|
+
textSize="sm"
|
|
171
|
+
color="subtle"
|
|
172
|
+
textLeading="none">
|
|
173
|
+
Meal-Plan
|
|
174
|
+
</TextWithIcon>
|
|
175
|
+
<div className="accomodation-docket__divider-vertical" />
|
|
176
|
+
</div>
|
|
177
|
+
<Text variant="medium" size="sm" color="subtle" leading="none">
|
|
178
|
+
{room.MealPlan}
|
|
179
|
+
</Text>
|
|
180
|
+
</div>
|
|
181
|
+
)}
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
)}
|
|
185
|
+
</div>
|
|
186
|
+
);
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
<div className="accomodation-docket">
|
|
191
|
+
<div className="accomodation-docket__header">
|
|
192
|
+
<div className="accomodation-docket__title-section">
|
|
193
|
+
<div className="accomodation-docket__title-bar" />
|
|
194
|
+
<Icon name="accom" size="sm" />
|
|
195
|
+
<Text variant="bold" size="sm" color="accent">
|
|
196
|
+
Accommodation
|
|
197
|
+
</Text>
|
|
198
|
+
</div>
|
|
199
|
+
{Total && Currency && (
|
|
200
|
+
<Chip type="filled" color="accent" size="sm">
|
|
201
|
+
{Currency} {Total}
|
|
202
|
+
</Chip>
|
|
203
|
+
)}
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
{TitleDescription && (
|
|
207
|
+
<div className="accomodation-docket__hotel-name">
|
|
208
|
+
<Text variant="bold" size="base" color="default">
|
|
209
|
+
{TitleDescription.split('\n').map((line, index) => (
|
|
210
|
+
<React.Fragment key={`line-${index}`}>
|
|
211
|
+
{line}
|
|
212
|
+
{index < TitleDescription.split('\n').length - 1 && <br />}
|
|
213
|
+
</React.Fragment>
|
|
214
|
+
))}
|
|
215
|
+
</Text>
|
|
216
|
+
</div>
|
|
217
|
+
)}
|
|
218
|
+
|
|
219
|
+
<div className="accomodation-docket__rooms">
|
|
220
|
+
{Rooms.map((room, index) => renderRoomDetails(room, index))}
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
);
|
|
224
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Icon from '../../atoms/Icon/Icon';
|
|
3
|
+
import { Text } from '../../atoms/Typography/Typography';
|
|
4
|
+
import './AddItemButton.css';
|
|
5
|
+
|
|
6
|
+
export interface AddItemButtonProps {
|
|
7
|
+
label: React.ReactNode;
|
|
8
|
+
onClick?: () => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const AddItemButton: React.FC<AddItemButtonProps> = ({ label, onClick }) => {
|
|
12
|
+
return (
|
|
13
|
+
<button className="add-item-button" onClick={onClick}>
|
|
14
|
+
<Icon name="plus-circle" size="lg" />
|
|
15
|
+
<Text variant="medium">{label}</Text>
|
|
16
|
+
</button>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
@@ -33,7 +33,7 @@ export const ResumeAccom: React.FC<ResumeAccomProps> = (props) => {
|
|
|
33
33
|
className="resume-accom">
|
|
34
34
|
<ServiceTitle title={hotelName} />
|
|
35
35
|
<div className="space-y-2 mt-4">
|
|
36
|
-
<DateDisplay dates={dates}
|
|
36
|
+
<DateDisplay dates={dates} colorMode="green" />
|
|
37
37
|
<TextWithIcon icon="night">{stay} Nights</TextWithIcon>
|
|
38
38
|
<Text variant="medium" size="sm" leading="4">
|
|
39
39
|
<strong>Client types:</strong> {clientType}
|
|
@@ -45,7 +45,7 @@ export const ResumeExcursion: React.FC<ResumeExcursionProps> = (props) => {
|
|
|
45
45
|
image={image}
|
|
46
46
|
className="resume-excursion">
|
|
47
47
|
<div className="space-y-3">
|
|
48
|
-
<DateDisplay dates={[date]}
|
|
48
|
+
<DateDisplay dates={[date]} colorMode="green" />
|
|
49
49
|
<div className="space-y-1">
|
|
50
50
|
<TextWithIcon icon={type} textSize="sm" textVariant="medium">
|
|
51
51
|
{mapType[type]}
|
|
@@ -35,7 +35,7 @@ export const ResumeTransfer: React.FC<ResumeTransferProps> = (props) => {
|
|
|
35
35
|
icon="car-front"
|
|
36
36
|
image={image}>
|
|
37
37
|
<div className="space-y-3">
|
|
38
|
-
<DateDisplay dates={[date]}
|
|
38
|
+
<DateDisplay dates={[date]} colorMode="green" />
|
|
39
39
|
<FromTo from={location.from} to={location.to} />
|
|
40
40
|
<div className="space-y-1">
|
|
41
41
|
<PaxDisplay pax={pax} />
|