mautourco-components 0.2.50 → 0.2.52
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/molecules/ActionDropdown/ActionDropdown.css +1 -0
- package/dist/components/molecules/ActionDropdown/ActionDropdown.js +2 -1
- package/dist/components/molecules/DetailsInfo/DetailsAction.js +4 -4
- package/dist/components/molecules/DetailsInfo/DetailsAgency/DetailsAgency.d.ts +3 -1
- package/dist/components/molecules/DetailsInfo/DetailsAgency/DetailsAgency.js +2 -2
- package/dist/components/molecules/DetailsInfo/DetailsClient/DetailsClient.css +6 -0
- package/dist/components/molecules/DetailsInfo/DetailsClient/DetailsClient.js +1 -1
- package/dist/components/organisms/TabCancellationPolicy/CancellationAccom.d.ts +2 -1
- package/dist/components/organisms/TabCancellationPolicy/CancellationAccom.js +4 -3
- package/dist/components/organisms/TabCancellationPolicy/PolicyAccom/PolicyAccom.css +1 -0
- package/dist/components/organisms/TabCancellationPolicy/TabCancellationPolicyLayout/TabCancellationPolicyLayout.css +2 -0
- package/dist/components/organisms/TabCancellationPolicy/TabCancellationPolicyLayout/TabCancellationPolicyLayout.d.ts +1 -1
- package/dist/components/organisms/TabCancellationPolicy/TabCancellationPolicyLayout/TabCancellationPolicyLayout.js +1 -1
- package/dist/components/organisms/Table/Table.css +3 -1
- package/dist/components/organisms/Table/Table.d.ts +2 -0
- package/dist/components/organisms/Table/Table.js +2 -2
- package/dist/components/organisms/Table/columns/booking-columns.js +1 -1
- package/dist/components/organisms/Table/columns/quotation-columns.js +1 -1
- package/package.json +1 -1
- package/src/components/molecules/ActionDropdown/ActionDropdown.css +1 -1
- package/src/components/molecules/ActionDropdown/ActionDropdown.tsx +5 -3
- package/src/components/molecules/DetailsInfo/DetailsAction.tsx +12 -8
- package/src/components/molecules/DetailsInfo/DetailsAgency/DetailsAgency.tsx +26 -15
- package/src/components/molecules/DetailsInfo/DetailsClient/DetailsClient.css +4 -0
- package/src/components/molecules/DetailsInfo/DetailsClient/DetailsClient.tsx +2 -2
- package/src/components/organisms/TabCancellationPolicy/CancellationAccom.tsx +22 -13
- package/src/components/organisms/TabCancellationPolicy/PolicyAccom/PolicyAccom.css +1 -1
- package/src/components/organisms/TabCancellationPolicy/TabCancellationPolicyLayout/TabCancellationPolicyLayout.css +2 -0
- package/src/components/organisms/TabCancellationPolicy/TabCancellationPolicyLayout/TabCancellationPolicyLayout.tsx +6 -4
- package/src/components/organisms/Table/Table.css +3 -1
- package/src/components/organisms/Table/Table.tsx +5 -1
- package/src/components/organisms/Table/columns/booking-columns.tsx +4 -2
- package/src/components/organisms/Table/columns/quotation-columns.tsx +8 -6
|
@@ -17,7 +17,8 @@ import './ActionDropdown.css';
|
|
|
17
17
|
export function ActionDropdown(props) {
|
|
18
18
|
var data = props.data, children = props.children, _a = props.maxWidth, maxWidth = _a === void 0 ? '153px' : _a;
|
|
19
19
|
var _b = useState(false), open = _b[0], setOpen = _b[1];
|
|
20
|
-
|
|
20
|
+
console.log(open);
|
|
21
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { children: children !== null && children !== void 0 ? children : (_jsx("span", { className: "action-dropdown-trigger", children: _jsx(Icon, { name: "more-vertical" }) })) }), _jsx(PopoverContent, { className: "action-dropdown", style: { '--max-width': maxWidth }, align: "end", side: "bottom", avoidCollisions: false, children: data.map(function (item, index) {
|
|
21
22
|
var defaultButton = (_jsx("button", { onClick: function () {
|
|
22
23
|
var _a;
|
|
23
24
|
if (item.disabled) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from '../../../lib/utils';
|
|
3
3
|
import { ActionDropdownType } from '../../../types/table/index';
|
|
4
|
-
import
|
|
4
|
+
import Icon from '../../atoms/Icon/Icon';
|
|
5
5
|
import { ActionDropdown } from '../ActionDropdown/ActionDropdown';
|
|
6
6
|
export function DetailsAction(props) {
|
|
7
|
-
var
|
|
7
|
+
var data = props.data, onAction = props.onAction, _a = props.buttonVariant, buttonVariant = _a === void 0 ? 'outline-secondary' : _a, _b = props.buttonClassName, buttonClassName = _b === void 0 ? '' : _b, _c = props.buttonLabel, buttonLabel = _c === void 0 ? 'More options' : _c, dropdownMaxWidth = props.dropdownMaxWidth;
|
|
8
8
|
return (_jsx(ActionDropdown, { maxWidth: dropdownMaxWidth, data: data
|
|
9
9
|
? data
|
|
10
10
|
: [
|
|
@@ -32,5 +32,5 @@ export function DetailsAction(props) {
|
|
|
32
32
|
onAction === null || onAction === void 0 ? void 0 : onAction(ActionDropdownType.DELETE_QUOTE);
|
|
33
33
|
},
|
|
34
34
|
},
|
|
35
|
-
], children:
|
|
35
|
+
], children: _jsxs("div", { className: cn('button button--outline-secondary button--sm w-[144px] !justify-between !px-[14px] cursor-pointer', buttonClassName), children: [buttonLabel, _jsx("span", { className: "button__icon button__icon--trailing", children: _jsx(Icon, { name: "chevron-down" }) })] }) }));
|
|
36
36
|
}
|
|
@@ -4,10 +4,12 @@ export interface DetailsAgencyProps {
|
|
|
4
4
|
/** Name of the agency */
|
|
5
5
|
name: string;
|
|
6
6
|
/** Client type of the agency */
|
|
7
|
-
clientType
|
|
7
|
+
clientType?: string;
|
|
8
8
|
/** Show the waiting for confirmation chip */
|
|
9
9
|
isOnRequest: boolean;
|
|
10
10
|
/** Children of the agency */
|
|
11
11
|
children?: React.ReactNode;
|
|
12
|
+
/** The logo of the agency */
|
|
13
|
+
logo?: string;
|
|
12
14
|
}
|
|
13
15
|
export declare function DetailsAgency(props: DetailsAgencyProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,6 +3,6 @@ import Chip from '../../../atoms/Chip/Chip';
|
|
|
3
3
|
import { Text } from '../../../atoms/Typography/Typography';
|
|
4
4
|
import './DetailsAgency.css';
|
|
5
5
|
export function DetailsAgency(props) {
|
|
6
|
-
var name = props.name, clientType = props.clientType, isOnRequest = props.isOnRequest, children = props.children;
|
|
7
|
-
return (_jsxs("div", { className: "flex flex-col gap-y-6 items-end", children: [_jsx("img", { src:
|
|
6
|
+
var name = props.name, clientType = props.clientType, isOnRequest = props.isOnRequest, children = props.children, _a = props.logo, logo = _a === void 0 ? '/images/mautourco-logo.png' : _a;
|
|
7
|
+
return (_jsxs("div", { className: "flex flex-col gap-y-6 items-end", children: [_jsx("img", { src: logo, alt: "Mautourco Logo", width: 220 }), _jsxs("div", { className: "details-agency", children: [_jsx(Text, { variant: "bold", color: "accent", children: "Documents details:" }), _jsxs("div", { className: "details-agency__content", children: [_jsxs("div", { className: "details-agency__content-item", children: [_jsx(Text, { variant: "bold", size: "sm", leading: "4", className: "details-agency__content-item-name", children: "Agency" }), _jsx(Text, { size: "sm", leading: "4", children: name })] }), ' ', clientType && (_jsxs("div", { className: "details-agency__content-item", children: [_jsx(Text, { variant: "bold", size: "sm", leading: "4", className: "details-agency__content-item-name", children: "Client type" }), _jsx(Text, { size: "sm", leading: "4", children: clientType })] }))] })] }), isOnRequest && _jsx(Chip, { color: "yellow", children: "Waiting for confirmation" }), children] }));
|
|
8
8
|
}
|
|
@@ -27,4 +27,10 @@
|
|
|
27
27
|
background-size: cover;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.details-client__item > :not([hidden]) ~ :not([hidden]) {
|
|
33
|
+
--tw-space-y-reverse: 0;
|
|
34
|
+
margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
|
|
35
|
+
margin-bottom: calc(1rem * var(--tw-space-y-reverse));
|
|
30
36
|
}
|
|
@@ -5,5 +5,5 @@ import { languagesMap } from '../../ServiceLanguages/constant';
|
|
|
5
5
|
import './DetailsClient.css';
|
|
6
6
|
export function DetailsClientInfo(props) {
|
|
7
7
|
var language = props.language, clients = props.clients;
|
|
8
|
-
return (_jsxs("div", { className: "details-client", children: [_jsx(Text, { variant: "bold", children: "1. Client's information" }), _jsxs("div", { className: "
|
|
8
|
+
return (_jsxs("div", { className: "details-client", children: [_jsx(Text, { variant: "bold", children: "1. Client's information" }), _jsxs("div", { className: "details-client__item", children: [_jsx(Text, { variant: "medium", size: "lg", children: "Language:" }), _jsxs(Chip, { color: "neutral", size: "md", className: "!px-4", children: [_jsx("i", { className: "fi fi-".concat(languagesMap[language.toLowerCase()]) }), _jsx(Text, { variant: "medium", as: "span", children: language })] })] }), _jsx("div", { className: "flex gap-x-8 flex-wrap", children: clients.map(function (client, index) { return (_jsxs("div", { className: "details-client__item", children: [_jsxs(Text, { variant: "medium", size: "lg", children: [client.type, " No ", index + 1, ' ', client.age > 0 ? (_jsxs(Text, { variant: "regular", size: "lg", as: "span", children: ["(", client.age, " yo)"] })) : ('')] }), _jsxs(Chip, { color: "neutral", size: "md", className: "!px-4", children: [client.firstName, " ", client.lastName] })] }, "cl-".concat(index))); }) })] }));
|
|
9
9
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HeaderAccomProps } from './HeaderAccom';
|
|
2
2
|
import { Policy } from './PolicyAccom/PolicyAccom';
|
|
3
|
-
export interface CancellationAccomProps extends HeaderAccomProps {
|
|
3
|
+
export interface CancellationAccomProps extends Omit<HeaderAccomProps, 'dates'> {
|
|
4
4
|
/**
|
|
5
5
|
* The image of the cancellation accommodation.
|
|
6
6
|
*/
|
|
@@ -13,6 +13,7 @@ export interface CancellationAccomProps extends HeaderAccomProps {
|
|
|
13
13
|
* The room policies of the cancellation accommodation.
|
|
14
14
|
*/
|
|
15
15
|
roomPolicies: Array<{
|
|
16
|
+
dates: string[];
|
|
16
17
|
roomName: string;
|
|
17
18
|
policies: Policy[];
|
|
18
19
|
}>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment } from 'react';
|
|
2
3
|
import CancellationBody from './CancellationBody';
|
|
3
4
|
import CancellationHeader from './CancellationHeader';
|
|
4
5
|
import DetailsCancellationPolicy from './TabCancellationPolicy';
|
|
@@ -19,6 +20,6 @@ import DetailsCancellationPolicy from './TabCancellationPolicy';
|
|
|
19
20
|
* @returns The CancellationAccom component.
|
|
20
21
|
*/
|
|
21
22
|
export default function CancellationAccom(props) {
|
|
22
|
-
var hotelName = props.hotelName, pax = props.pax,
|
|
23
|
-
return (_jsx(DetailsCancellationPolicy.Layout, { title: "Accommodation", icon: "accom", isOnRequest: isOnRequest, image: image, header: _jsx(CancellationHeader, { children: _jsx(CancellationHeader.Accom, { hotelName: hotelName, pax: pax, dates: dates }) }),
|
|
23
|
+
var hotelName = props.hotelName, pax = props.pax, image = props.image, roomPolicies = props.roomPolicies, isOnRequest = props.isOnRequest;
|
|
24
|
+
return (_jsx(DetailsCancellationPolicy.Layout, { title: "Accommodation", icon: "accom", isOnRequest: isOnRequest, image: image, children: _jsx(CancellationBody, { children: roomPolicies.map(function (roomPolicy, index) { return (_jsxs(Fragment, { children: [_jsx("div", { className: "details-cancellation-policy__layout-content-header", children: _jsx(CancellationHeader, { children: _jsx(CancellationHeader.Accom, { hotelName: hotelName, pax: pax, dates: roomPolicy.dates }) }) }), _jsx(CancellationBody.Accom, { index: index, roomName: roomPolicy.roomName, policies: roomPolicy.policies }, index)] }, index)); }) }) }));
|
|
24
25
|
}
|
|
@@ -7,7 +7,7 @@ interface TabCancellationPolicyLayoutProps {
|
|
|
7
7
|
isOnRequest?: boolean;
|
|
8
8
|
children: React.ReactNode;
|
|
9
9
|
image: string;
|
|
10
|
-
header
|
|
10
|
+
header?: React.ReactNode;
|
|
11
11
|
}
|
|
12
12
|
export default function TabCancellationPolicyLayout(props: TabCancellationPolicyLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
export {};
|
|
@@ -4,5 +4,5 @@ import TextWithIcon from '../../../molecules/TextWithIcon/TextWithIcon';
|
|
|
4
4
|
import './TabCancellationPolicyLayout.css';
|
|
5
5
|
export default function TabCancellationPolicyLayout(props) {
|
|
6
6
|
var title = props.title, icon = props.icon, isOnRequest = props.isOnRequest, children = props.children, image = props.image, header = props.header;
|
|
7
|
-
return (_jsxs("div", { className: "details-cancellation-policy__layout", children: [_jsxs(TextWithIcon, { icon: icon, color: isOnRequest ? 'yellow' : 'accent', textVariant: "bold", children: [title, isOnRequest && _jsx(Chip, { color: "yellow", children: "On request" })] }), _jsxs("div", { className: "details-cancellation-policy__layout-flex", children: [_jsx("figure", { children: _jsx("img", { src: image, alt: title, width: 400, height: 400 }) }), _jsxs("div", { className: "details-cancellation-policy__layout-content", children: [_jsx("div", { className: "details-cancellation-policy__layout-content-header", children: header }), _jsx("div", { className: "details-cancellation-policy__layout-content-body", children: children })] })] })] }));
|
|
7
|
+
return (_jsxs("div", { className: "details-cancellation-policy__layout", children: [_jsxs(TextWithIcon, { icon: icon, color: isOnRequest ? 'yellow' : 'accent', textVariant: "bold", children: [title, isOnRequest && _jsx(Chip, { color: "yellow", children: "On request" })] }), _jsxs("div", { className: "details-cancellation-policy__layout-flex", children: [_jsx("figure", { children: _jsx("img", { src: image, alt: title, width: 400, height: 400 }) }), _jsxs("div", { className: "details-cancellation-policy__layout-content", children: [header && (_jsx("div", { className: "details-cancellation-policy__layout-content-header", children: header })), _jsx("div", { className: "details-cancellation-policy__layout-content-body", children: children })] })] })] }));
|
|
8
8
|
}
|
|
@@ -35,6 +35,8 @@ export interface TableProps<T extends TableRowData<T>> {
|
|
|
35
35
|
isTotalBorderDash?: boolean;
|
|
36
36
|
/** Whether the last column is visible */
|
|
37
37
|
totalSubstractedSpace?: number;
|
|
38
|
+
/** Whether the table layout is fixed */
|
|
39
|
+
isLayoutFixed?: boolean;
|
|
38
40
|
}
|
|
39
41
|
/**
|
|
40
42
|
* A table component for displaying structured data in rows and columns. Supports customizable column definitions and data rows.
|
|
@@ -66,7 +66,7 @@ var NestedContent = function (_a) {
|
|
|
66
66
|
*
|
|
67
67
|
*/
|
|
68
68
|
export function Table(props) {
|
|
69
|
-
var columns = props.columns, data = props.data, pagination = props.pagination, isGrouped = props.isGrouped, _a = props.totalRows, totalRows = _a === void 0 ? {} : _a, _b = props.isTotalBorderDash, isTotalBorderDash = _b === void 0 ? true : _b, _c = props.totalSubstractedSpace, totalSubstractedSpace = _c === void 0 ? 10 : _c, onClickRow = props.onClickRow;
|
|
69
|
+
var columns = props.columns, data = props.data, pagination = props.pagination, isGrouped = props.isGrouped, _a = props.totalRows, totalRows = _a === void 0 ? {} : _a, _b = props.isTotalBorderDash, isTotalBorderDash = _b === void 0 ? true : _b, _c = props.totalSubstractedSpace, totalSubstractedSpace = _c === void 0 ? 10 : _c, _d = props.isLayoutFixed, isLayoutFixed = _d === void 0 ? true : _d, onClickRow = props.onClickRow;
|
|
70
70
|
var normalizeLastColumnWidth = function () {
|
|
71
71
|
var width = columns[columns.length - 1].width;
|
|
72
72
|
if (typeof width === 'number') {
|
|
@@ -75,7 +75,7 @@ export function Table(props) {
|
|
|
75
75
|
return width;
|
|
76
76
|
};
|
|
77
77
|
var hasTotal = Object.keys(totalRows).length > 0;
|
|
78
|
-
return (_jsx(LazyMotion, { features: domAnimation, children: _jsxs("div", { children: [_jsx("div", { className: cn('table-container', { 'table-container--no-total': !hasTotal }), children: _jsxs("table", { className:
|
|
78
|
+
return (_jsx(LazyMotion, { features: domAnimation, children: _jsxs("div", { children: [_jsx("div", { className: cn('table-container', { 'table-container--no-total': !hasTotal }), children: _jsxs("table", { className: cn('table', { 'table-layout-fixed': isLayoutFixed }), children: [_jsx("thead", { className: "table__header", children: _jsx("tr", { children: columns.map(function (column, columnIndex) { return (_jsx("th", { className: column.className, style: column.width
|
|
79
79
|
? { minWidth: column.width, width: column.width }
|
|
80
80
|
: undefined, children: _jsx(Text, { variant: "bold", size: "sm", children: column.header }) }, "hd-".concat(columnIndex))); }) }) }), _jsxs("tbody", { className: "table__body", children: [data.length > 0 &&
|
|
81
81
|
data.map(function (row, rowIndex) {
|
|
@@ -89,7 +89,7 @@ export var bookingColumns = function (_a) {
|
|
|
89
89
|
var _a;
|
|
90
90
|
var handleAction = (_a = onAction === null || onAction === void 0 ? void 0 : onAction(raw)) !== null && _a !== void 0 ? _a : (function () { });
|
|
91
91
|
var actionData = actionDropdownData(handleAction);
|
|
92
|
-
return (_jsxs("div", { className: "flex items-center justify-between gap-x-
|
|
92
|
+
return (_jsxs("div", { className: "flex items-center justify-between gap-x-2", children: [renderStatusContent(raw.status), _jsx("div", { children: _jsx(ActionDropdown, { data: actionData }) })] }));
|
|
93
93
|
},
|
|
94
94
|
},
|
|
95
95
|
];
|
|
@@ -88,7 +88,7 @@ export var quotationColumns = function (_a) {
|
|
|
88
88
|
var isExpanded = (_a = raw.children) === null || _a === void 0 ? void 0 : _a.some(function (child) { return child.visible; });
|
|
89
89
|
var buttonLabel = isExpanded ? 'See less' : 'See more';
|
|
90
90
|
var isOnRequest = raw.status.toLowerCase() === 'on request';
|
|
91
|
-
return (_jsx("div", { children: hasChildren ? (_jsx(Button, { variant: "outline-primary", size: "sm", trailingIcon: "chevron-down", className: cn('table__button', isExpanded && 'table__button-expanded'), onClick: function () { return onExpand === null || onExpand === void 0 ? void 0 : onExpand(raw, index, childIndex); }, children: buttonLabel })) : (_jsxs("div", { className: "flex items-center gap-x-8", children: [_jsx(Button, { variant: isOnRequest ? 'outline-secondary' : 'secondary', size: "sm", className: "table__button", children: isOnRequest ? 'Request to book' : 'Book now' }), _jsx(ActionDropdown, { data: actionDropdownData((_b = onAction === null || onAction === void 0 ? void 0 : onAction({ isChild: childIndex !== undefined, quote: raw })) !== null && _b !== void 0 ? _b : (function () { })) })] })) }));
|
|
91
|
+
return (_jsx("div", { children: hasChildren ? (_jsx(Button, { variant: "outline-primary", size: "sm", trailingIcon: "chevron-down", className: cn('table__button', isExpanded && 'table__button-expanded'), onClick: function () { return onExpand === null || onExpand === void 0 ? void 0 : onExpand(raw, index, childIndex); }, children: buttonLabel })) : (_jsxs("div", { className: "flex items-center gap-x-8", children: [_jsx(Button, { variant: isOnRequest ? 'outline-secondary' : 'secondary', size: "sm", className: "table__button", children: isOnRequest ? 'Request to book' : 'Book now' }), _jsx("div", { children: _jsx(ActionDropdown, { data: actionDropdownData((_b = onAction === null || onAction === void 0 ? void 0 : onAction({ isChild: childIndex !== undefined, quote: raw })) !== null && _b !== void 0 ? _b : (function () { })) }) })] })) }));
|
|
92
92
|
},
|
|
93
93
|
},
|
|
94
94
|
];
|
package/package.json
CHANGED
|
@@ -38,13 +38,15 @@ export function ActionDropdown(props: ActionDropdownProps) {
|
|
|
38
38
|
const { data, children, maxWidth = '153px' } = props;
|
|
39
39
|
const [open, setOpen] = useState(false);
|
|
40
40
|
|
|
41
|
+
console.log(open);
|
|
42
|
+
|
|
41
43
|
return (
|
|
42
44
|
<Popover open={open} onOpenChange={setOpen}>
|
|
43
|
-
<PopoverTrigger
|
|
45
|
+
<PopoverTrigger>
|
|
44
46
|
{children ?? (
|
|
45
|
-
<
|
|
47
|
+
<span className="action-dropdown-trigger">
|
|
46
48
|
<Icon name="more-vertical" />
|
|
47
|
-
</
|
|
49
|
+
</span>
|
|
48
50
|
)}
|
|
49
51
|
</PopoverTrigger>
|
|
50
52
|
<PopoverContent
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { cn } from '@/src/lib/utils';
|
|
2
2
|
import { ActionDropdownType } from '@/src/types/table';
|
|
3
|
-
import
|
|
3
|
+
import { ButtonProps } from '../../atoms/Button/Button';
|
|
4
|
+
import Icon from '../../atoms/Icon/Icon';
|
|
4
5
|
import { ActionDropdown, ActionDropdownItem } from '../ActionDropdown/ActionDropdown';
|
|
5
6
|
|
|
6
7
|
export interface DetailsActionProps {
|
|
@@ -15,7 +16,7 @@ export interface DetailsActionProps {
|
|
|
15
16
|
|
|
16
17
|
export function DetailsAction(props: DetailsActionProps) {
|
|
17
18
|
const {
|
|
18
|
-
data
|
|
19
|
+
data,
|
|
19
20
|
onAction,
|
|
20
21
|
buttonVariant = 'outline-secondary',
|
|
21
22
|
buttonClassName = '',
|
|
@@ -55,13 +56,16 @@ export function DetailsAction(props: DetailsActionProps) {
|
|
|
55
56
|
},
|
|
56
57
|
]
|
|
57
58
|
}>
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
<div
|
|
60
|
+
className={cn(
|
|
61
|
+
'button button--outline-secondary button--sm w-[144px] !justify-between !px-[14px] cursor-pointer',
|
|
62
|
+
buttonClassName
|
|
63
|
+
)}>
|
|
63
64
|
{buttonLabel}
|
|
64
|
-
|
|
65
|
+
<span className="button__icon button__icon--trailing">
|
|
66
|
+
<Icon name="chevron-down" />
|
|
67
|
+
</span>
|
|
68
|
+
</div>
|
|
65
69
|
</ActionDropdown>
|
|
66
70
|
);
|
|
67
71
|
}
|
|
@@ -7,18 +7,27 @@ export interface DetailsAgencyProps {
|
|
|
7
7
|
/** Name of the agency */
|
|
8
8
|
name: string;
|
|
9
9
|
/** Client type of the agency */
|
|
10
|
-
clientType
|
|
10
|
+
clientType?: string;
|
|
11
11
|
/** Show the waiting for confirmation chip */
|
|
12
12
|
isOnRequest: boolean;
|
|
13
13
|
/** Children of the agency */
|
|
14
14
|
children?: React.ReactNode;
|
|
15
|
+
|
|
16
|
+
/** The logo of the agency */
|
|
17
|
+
logo?: string;
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
export function DetailsAgency(props: DetailsAgencyProps) {
|
|
18
|
-
const {
|
|
21
|
+
const {
|
|
22
|
+
name,
|
|
23
|
+
clientType,
|
|
24
|
+
isOnRequest,
|
|
25
|
+
children,
|
|
26
|
+
logo = '/images/mautourco-logo.png',
|
|
27
|
+
} = props;
|
|
19
28
|
return (
|
|
20
29
|
<div className="flex flex-col gap-y-6 items-end">
|
|
21
|
-
<img src=
|
|
30
|
+
<img src={logo} alt="Mautourco Logo" width={220} />
|
|
22
31
|
<div className="details-agency">
|
|
23
32
|
<Text variant="bold" color="accent">
|
|
24
33
|
Documents details:
|
|
@@ -36,18 +45,20 @@ export function DetailsAgency(props: DetailsAgencyProps) {
|
|
|
36
45
|
{name}
|
|
37
46
|
</Text>
|
|
38
47
|
</div>{' '}
|
|
39
|
-
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
{clientType && (
|
|
49
|
+
<div className="details-agency__content-item">
|
|
50
|
+
<Text
|
|
51
|
+
variant="bold"
|
|
52
|
+
size="sm"
|
|
53
|
+
leading="4"
|
|
54
|
+
className="details-agency__content-item-name">
|
|
55
|
+
Client type
|
|
56
|
+
</Text>
|
|
57
|
+
<Text size="sm" leading="4">
|
|
58
|
+
{clientType}
|
|
59
|
+
</Text>
|
|
60
|
+
</div>
|
|
61
|
+
)}
|
|
51
62
|
</div>
|
|
52
63
|
</div>
|
|
53
64
|
{isOnRequest && <Chip color="yellow">Waiting for confirmation</Chip>}
|
|
@@ -20,7 +20,7 @@ export function DetailsClientInfo(props: DetailsClientInfoProps) {
|
|
|
20
20
|
return (
|
|
21
21
|
<div className="details-client">
|
|
22
22
|
<Text variant="bold">1. Client's information</Text>
|
|
23
|
-
<div className="
|
|
23
|
+
<div className="details-client__item">
|
|
24
24
|
<Text variant="medium" size="lg">
|
|
25
25
|
Language:
|
|
26
26
|
</Text>
|
|
@@ -33,7 +33,7 @@ export function DetailsClientInfo(props: DetailsClientInfoProps) {
|
|
|
33
33
|
</div>
|
|
34
34
|
<div className="flex gap-x-8 flex-wrap">
|
|
35
35
|
{clients.map((client, index) => (
|
|
36
|
-
<div key={`cl-${index}`} className="
|
|
36
|
+
<div key={`cl-${index}`} className="details-client__item">
|
|
37
37
|
<Text variant="medium" size="lg">
|
|
38
38
|
{client.type} No {index + 1}{' '}
|
|
39
39
|
{client.age > 0 ? (
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { Fragment } from 'react';
|
|
1
2
|
import CancellationBody from './CancellationBody';
|
|
2
3
|
import CancellationHeader from './CancellationHeader';
|
|
3
4
|
import { HeaderAccomProps } from './HeaderAccom';
|
|
4
5
|
import { Policy } from './PolicyAccom/PolicyAccom';
|
|
5
6
|
import DetailsCancellationPolicy from './TabCancellationPolicy';
|
|
6
7
|
|
|
7
|
-
export interface CancellationAccomProps extends HeaderAccomProps {
|
|
8
|
+
export interface CancellationAccomProps extends Omit<HeaderAccomProps, 'dates'> {
|
|
8
9
|
/**
|
|
9
10
|
* The image of the cancellation accommodation.
|
|
10
11
|
*/
|
|
@@ -17,6 +18,7 @@ export interface CancellationAccomProps extends HeaderAccomProps {
|
|
|
17
18
|
* The room policies of the cancellation accommodation.
|
|
18
19
|
*/
|
|
19
20
|
roomPolicies: Array<{
|
|
21
|
+
dates: string[];
|
|
20
22
|
roomName: string;
|
|
21
23
|
policies: Policy[];
|
|
22
24
|
}>;
|
|
@@ -39,25 +41,32 @@ export interface CancellationAccomProps extends HeaderAccomProps {
|
|
|
39
41
|
* @returns The CancellationAccom component.
|
|
40
42
|
*/
|
|
41
43
|
export default function CancellationAccom(props: CancellationAccomProps) {
|
|
42
|
-
const { hotelName, pax,
|
|
44
|
+
const { hotelName, pax, image, roomPolicies, isOnRequest } = props;
|
|
43
45
|
return (
|
|
44
46
|
<DetailsCancellationPolicy.Layout
|
|
45
47
|
title="Accommodation"
|
|
46
48
|
icon="accom"
|
|
47
49
|
isOnRequest={isOnRequest}
|
|
48
|
-
image={image}
|
|
49
|
-
header={
|
|
50
|
-
<CancellationHeader>
|
|
51
|
-
<CancellationHeader.Accom hotelName={hotelName} pax={pax} dates={dates} />
|
|
52
|
-
</CancellationHeader>
|
|
53
|
-
}>
|
|
50
|
+
image={image}>
|
|
54
51
|
<CancellationBody>
|
|
55
52
|
{roomPolicies.map((roomPolicy, index) => (
|
|
56
|
-
<
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
<Fragment key={index}>
|
|
54
|
+
<div className="details-cancellation-policy__layout-content-header">
|
|
55
|
+
<CancellationHeader>
|
|
56
|
+
<CancellationHeader.Accom
|
|
57
|
+
hotelName={hotelName}
|
|
58
|
+
pax={pax}
|
|
59
|
+
dates={roomPolicy.dates}
|
|
60
|
+
/>
|
|
61
|
+
</CancellationHeader>
|
|
62
|
+
</div>
|
|
63
|
+
<CancellationBody.Accom
|
|
64
|
+
key={index}
|
|
65
|
+
index={index}
|
|
66
|
+
roomName={roomPolicy.roomName}
|
|
67
|
+
policies={roomPolicy.policies}
|
|
68
|
+
/>
|
|
69
|
+
</Fragment>
|
|
61
70
|
))}
|
|
62
71
|
</CancellationBody>
|
|
63
72
|
</DetailsCancellationPolicy.Layout>
|
|
@@ -10,7 +10,7 @@ interface TabCancellationPolicyLayoutProps {
|
|
|
10
10
|
isOnRequest?: boolean;
|
|
11
11
|
children: React.ReactNode;
|
|
12
12
|
image: string;
|
|
13
|
-
header
|
|
13
|
+
header?: React.ReactNode;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export default function TabCancellationPolicyLayout(
|
|
@@ -31,9 +31,11 @@ export default function TabCancellationPolicyLayout(
|
|
|
31
31
|
<img src={image} alt={title} width={400} height={400} />
|
|
32
32
|
</figure>
|
|
33
33
|
<div className="details-cancellation-policy__layout-content">
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
{header && (
|
|
35
|
+
<div className="details-cancellation-policy__layout-content-header">
|
|
36
|
+
{header}
|
|
37
|
+
</div>
|
|
38
|
+
)}
|
|
37
39
|
<div className="details-cancellation-policy__layout-content-body">
|
|
38
40
|
{children}
|
|
39
41
|
</div>
|
|
@@ -52,6 +52,9 @@ export interface TableProps<T extends TableRowData<T>> {
|
|
|
52
52
|
|
|
53
53
|
/** Whether the last column is visible */
|
|
54
54
|
totalSubstractedSpace?: number;
|
|
55
|
+
|
|
56
|
+
/** Whether the table layout is fixed */
|
|
57
|
+
isLayoutFixed?: boolean;
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
/**
|
|
@@ -150,6 +153,7 @@ export function Table<T extends TableRowData<T>>(props: TableProps<T>) {
|
|
|
150
153
|
totalRows = {},
|
|
151
154
|
isTotalBorderDash = true,
|
|
152
155
|
totalSubstractedSpace = 10,
|
|
156
|
+
isLayoutFixed = true,
|
|
153
157
|
onClickRow,
|
|
154
158
|
} = props;
|
|
155
159
|
|
|
@@ -168,7 +172,7 @@ export function Table<T extends TableRowData<T>>(props: TableProps<T>) {
|
|
|
168
172
|
<div>
|
|
169
173
|
<div
|
|
170
174
|
className={cn('table-container', { 'table-container--no-total': !hasTotal })}>
|
|
171
|
-
<table className=
|
|
175
|
+
<table className={cn('table', { 'table-layout-fixed': isLayoutFixed })}>
|
|
172
176
|
<thead className="table__header">
|
|
173
177
|
<tr>
|
|
174
178
|
{columns.map((column, columnIndex) => (
|
|
@@ -138,9 +138,11 @@ export const bookingColumns: (params: {
|
|
|
138
138
|
const actionData = actionDropdownData(handleAction);
|
|
139
139
|
|
|
140
140
|
return (
|
|
141
|
-
<div className="flex items-center justify-between gap-x-
|
|
141
|
+
<div className="flex items-center justify-between gap-x-2">
|
|
142
142
|
{renderStatusContent(raw.status)}
|
|
143
|
-
<
|
|
143
|
+
<div>
|
|
144
|
+
<ActionDropdown data={actionData} />
|
|
145
|
+
</div>
|
|
144
146
|
</div>
|
|
145
147
|
);
|
|
146
148
|
},
|
|
@@ -171,12 +171,14 @@ export const quotationColumns: (params: {
|
|
|
171
171
|
className="table__button">
|
|
172
172
|
{isOnRequest ? 'Request to book' : 'Book now'}
|
|
173
173
|
</Button>
|
|
174
|
-
<
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
(
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
<div>
|
|
175
|
+
<ActionDropdown
|
|
176
|
+
data={actionDropdownData(
|
|
177
|
+
onAction?.({ isChild: childIndex !== undefined, quote: raw }) ??
|
|
178
|
+
(() => {})
|
|
179
|
+
)}
|
|
180
|
+
/>
|
|
181
|
+
</div>
|
|
180
182
|
</div>
|
|
181
183
|
)}
|
|
182
184
|
</div>
|