@asdp/ferryui 0.1.22-dev.9114 → 0.1.22-dev.9117
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/index.d.mts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +120 -92
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -256,6 +256,16 @@ interface CarouselWithCustomNavProps {
|
|
|
256
256
|
* Callback when close button is clicked
|
|
257
257
|
*/
|
|
258
258
|
onCloseClick?: () => void;
|
|
259
|
+
/**
|
|
260
|
+
* Whether the carousel should auto play
|
|
261
|
+
* @default false
|
|
262
|
+
*/
|
|
263
|
+
autoPlay?: boolean;
|
|
264
|
+
/**
|
|
265
|
+
* Interval for auto play in milliseconds
|
|
266
|
+
* @default 5000
|
|
267
|
+
*/
|
|
268
|
+
autoPlayInterval?: number;
|
|
259
269
|
}
|
|
260
270
|
|
|
261
271
|
declare const CarouselWithCustomNav: React$1.FC<CarouselWithCustomNavProps>;
|
package/dist/index.d.ts
CHANGED
|
@@ -256,6 +256,16 @@ interface CarouselWithCustomNavProps {
|
|
|
256
256
|
* Callback when close button is clicked
|
|
257
257
|
*/
|
|
258
258
|
onCloseClick?: () => void;
|
|
259
|
+
/**
|
|
260
|
+
* Whether the carousel should auto play
|
|
261
|
+
* @default false
|
|
262
|
+
*/
|
|
263
|
+
autoPlay?: boolean;
|
|
264
|
+
/**
|
|
265
|
+
* Interval for auto play in milliseconds
|
|
266
|
+
* @default 5000
|
|
267
|
+
*/
|
|
268
|
+
autoPlayInterval?: number;
|
|
259
269
|
}
|
|
260
270
|
|
|
261
271
|
declare const CarouselWithCustomNav: React$1.FC<CarouselWithCustomNavProps>;
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var reactComponents = require('@fluentui/react-components');
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var
|
|
5
|
+
var React = require('react');
|
|
6
6
|
var reactIcons = require('@fluentui/react-icons');
|
|
7
7
|
var reactGridSystem = require('react-grid-system');
|
|
8
8
|
var react = require('@iconify/react');
|
|
@@ -15,7 +15,7 @@ var reactRange = require('react-range');
|
|
|
15
15
|
|
|
16
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
19
19
|
var PhoneInputComponent__default = /*#__PURE__*/_interopDefault(PhoneInputComponent);
|
|
20
20
|
var Select__default = /*#__PURE__*/_interopDefault(Select);
|
|
21
21
|
var moment__default = /*#__PURE__*/_interopDefault(moment);
|
|
@@ -607,11 +607,13 @@ var CarouselWithCustomNav = ({
|
|
|
607
607
|
cardFocus = false,
|
|
608
608
|
showNavButtons = false,
|
|
609
609
|
showCloseButton = false,
|
|
610
|
-
onCloseClick
|
|
610
|
+
onCloseClick,
|
|
611
|
+
autoPlay = false,
|
|
612
|
+
autoPlayInterval = 5e3
|
|
611
613
|
}) => {
|
|
612
614
|
const styles = useStyles2();
|
|
613
|
-
const [internalIndex, setInternalIndex] =
|
|
614
|
-
const labels =
|
|
615
|
+
const [internalIndex, setInternalIndex] = React.useState(0);
|
|
616
|
+
const labels = React__default.default.useMemo(
|
|
615
617
|
() => ({
|
|
616
618
|
...DEFAULT_LABELS2[language],
|
|
617
619
|
...customLabels,
|
|
@@ -620,7 +622,7 @@ var CarouselWithCustomNav = ({
|
|
|
620
622
|
[language, customLabels, deprecatedAriaLabel]
|
|
621
623
|
);
|
|
622
624
|
const activeIndex = controlledIndex !== void 0 ? controlledIndex : internalIndex;
|
|
623
|
-
const handleIndexChange =
|
|
625
|
+
const handleIndexChange = React.useCallback(
|
|
624
626
|
(index) => {
|
|
625
627
|
if (controlledIndex === void 0) {
|
|
626
628
|
setInternalIndex(index);
|
|
@@ -629,7 +631,33 @@ var CarouselWithCustomNav = ({
|
|
|
629
631
|
},
|
|
630
632
|
[controlledIndex, onActiveIndexChange]
|
|
631
633
|
);
|
|
632
|
-
|
|
634
|
+
React__default.default.useEffect(() => {
|
|
635
|
+
if (!autoPlay) return;
|
|
636
|
+
const totalSlides = React__default.default.Children.count(children);
|
|
637
|
+
if (totalSlides <= 1) return;
|
|
638
|
+
const intervalId = setInterval(() => {
|
|
639
|
+
let nextIndex = activeIndex + 1;
|
|
640
|
+
if (nextIndex >= totalSlides) {
|
|
641
|
+
nextIndex = circular ? 0 : activeIndex;
|
|
642
|
+
}
|
|
643
|
+
if (nextIndex !== activeIndex) {
|
|
644
|
+
if (controlledIndex === void 0) {
|
|
645
|
+
setInternalIndex(nextIndex);
|
|
646
|
+
}
|
|
647
|
+
onActiveIndexChange?.(nextIndex);
|
|
648
|
+
}
|
|
649
|
+
}, autoPlayInterval);
|
|
650
|
+
return () => clearInterval(intervalId);
|
|
651
|
+
}, [
|
|
652
|
+
autoPlay,
|
|
653
|
+
autoPlayInterval,
|
|
654
|
+
children,
|
|
655
|
+
circular,
|
|
656
|
+
activeIndex,
|
|
657
|
+
controlledIndex,
|
|
658
|
+
onActiveIndexChange
|
|
659
|
+
]);
|
|
660
|
+
const defaultAnnouncement = React.useCallback(
|
|
633
661
|
(index, totalSlides) => {
|
|
634
662
|
return labels.announcementTemplate.replace("{index}", (index + 1).toString()).replace("{total}", totalSlides.toString());
|
|
635
663
|
},
|
|
@@ -966,12 +994,12 @@ var useStyles4 = reactComponents.makeStyles({
|
|
|
966
994
|
padding: 0,
|
|
967
995
|
backgroundColor: "transparent",
|
|
968
996
|
border: "none",
|
|
969
|
-
|
|
997
|
+
aspectRatio: "3/1",
|
|
970
998
|
borderRadius: reactComponents.tokens.borderRadiusXLarge
|
|
971
999
|
},
|
|
972
1000
|
bannerImage: {
|
|
973
1001
|
width: "100%",
|
|
974
|
-
|
|
1002
|
+
aspectRatio: "3/1",
|
|
975
1003
|
objectFit: "cover",
|
|
976
1004
|
display: "block",
|
|
977
1005
|
cursor: "pointer",
|
|
@@ -1030,11 +1058,11 @@ var CardBanner = ({
|
|
|
1030
1058
|
) });
|
|
1031
1059
|
};
|
|
1032
1060
|
function useWindowSize() {
|
|
1033
|
-
const [windowSize, setWindowSize] =
|
|
1061
|
+
const [windowSize, setWindowSize] = React.useState({
|
|
1034
1062
|
width: 0,
|
|
1035
1063
|
height: 0
|
|
1036
1064
|
});
|
|
1037
|
-
|
|
1065
|
+
React.useEffect(() => {
|
|
1038
1066
|
function handleResize() {
|
|
1039
1067
|
setWindowSize({
|
|
1040
1068
|
width: window.innerWidth,
|
|
@@ -1970,7 +1998,7 @@ var CardServiceMenu = ({
|
|
|
1970
1998
|
return reactComponents.mergeClasses(styles.menuItem, isActive && styles.menuItemActive);
|
|
1971
1999
|
};
|
|
1972
2000
|
return /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Card, { className: reactComponents.mergeClasses(styles.card, className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.menuList, children: menuItems.map((item, index) => {
|
|
1973
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2001
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React__default.default.Fragment, { children: [
|
|
1974
2002
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1975
2003
|
reactComponents.Button,
|
|
1976
2004
|
{
|
|
@@ -2007,9 +2035,9 @@ var CardServiceMenu = ({
|
|
|
2007
2035
|
}) }) });
|
|
2008
2036
|
};
|
|
2009
2037
|
function useIsClamped(deps) {
|
|
2010
|
-
const ref =
|
|
2011
|
-
const [isClamped, setIsClamped] =
|
|
2012
|
-
|
|
2038
|
+
const ref = React.useRef(null);
|
|
2039
|
+
const [isClamped, setIsClamped] = React.useState(false);
|
|
2040
|
+
React.useEffect(() => {
|
|
2013
2041
|
const el = ref.current;
|
|
2014
2042
|
if (!el) return;
|
|
2015
2043
|
const check = () => setIsClamped(el.scrollHeight > el.clientHeight);
|
|
@@ -2040,7 +2068,7 @@ var MenuItemDescription = ({ description, className }) => {
|
|
|
2040
2068
|
}
|
|
2041
2069
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { ref, className, children: description });
|
|
2042
2070
|
};
|
|
2043
|
-
var DatePickerInput =
|
|
2071
|
+
var DatePickerInput = React.forwardRef(
|
|
2044
2072
|
({
|
|
2045
2073
|
field,
|
|
2046
2074
|
placeholder,
|
|
@@ -2053,7 +2081,7 @@ var DatePickerInput = React5.forwardRef(
|
|
|
2053
2081
|
max,
|
|
2054
2082
|
...restProps
|
|
2055
2083
|
}, ref) => {
|
|
2056
|
-
const [isOpen, setIsOpen] =
|
|
2084
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
2057
2085
|
const dateValue = field.value ? new Date(field.value) : void 0;
|
|
2058
2086
|
const onSelectDate = (date) => {
|
|
2059
2087
|
if (date) {
|
|
@@ -2576,19 +2604,19 @@ var InputDynamic = ({
|
|
|
2576
2604
|
}) => {
|
|
2577
2605
|
const styles = useStyles7();
|
|
2578
2606
|
const mergedLabels = { ...DEFAULT_LABELS7[language], ...labels };
|
|
2579
|
-
const [showPassword, setShowPassword] =
|
|
2580
|
-
const [isPhoneMode, setIsPhoneMode] =
|
|
2581
|
-
const [emailOrPhoneType, setEmailOrPhoneType] =
|
|
2582
|
-
const [identityType, setIdentityType] =
|
|
2607
|
+
const [showPassword, setShowPassword] = React.useState(false);
|
|
2608
|
+
const [isPhoneMode, setIsPhoneMode] = React.useState(false);
|
|
2609
|
+
const [emailOrPhoneType, setEmailOrPhoneType] = React.useState("none");
|
|
2610
|
+
const [identityType, setIdentityType] = React.useState(
|
|
2583
2611
|
"id"
|
|
2584
2612
|
);
|
|
2585
|
-
const [lastPhoneValue, setLastPhoneValue] =
|
|
2586
|
-
const [lastEmailOrPhoneValue, setLastEmailOrPhoneValue] =
|
|
2587
|
-
const inputRef =
|
|
2588
|
-
const phoneInputRef =
|
|
2589
|
-
const emailOrPhoneInputRef =
|
|
2590
|
-
const shouldFocusRef =
|
|
2591
|
-
const isBackspaceNavigationRef =
|
|
2613
|
+
const [lastPhoneValue, setLastPhoneValue] = React.useState("");
|
|
2614
|
+
const [lastEmailOrPhoneValue, setLastEmailOrPhoneValue] = React.useState("");
|
|
2615
|
+
const inputRef = React.useRef(null);
|
|
2616
|
+
const phoneInputRef = React.useRef(null);
|
|
2617
|
+
const emailOrPhoneInputRef = React.useRef(null);
|
|
2618
|
+
const shouldFocusRef = React.useRef(false);
|
|
2619
|
+
const isBackspaceNavigationRef = React.useRef(false);
|
|
2592
2620
|
const getSelectStyles = (hasError2, selectAppearance) => {
|
|
2593
2621
|
const currentAppearance = appearance || "outline";
|
|
2594
2622
|
const getControlStyles = (provided, state) => {
|
|
@@ -2708,7 +2736,7 @@ var InputDynamic = ({
|
|
|
2708
2736
|
})
|
|
2709
2737
|
};
|
|
2710
2738
|
};
|
|
2711
|
-
|
|
2739
|
+
React.useEffect(() => {
|
|
2712
2740
|
if (shouldFocusRef.current) {
|
|
2713
2741
|
setTimeout(() => {
|
|
2714
2742
|
if (identityType === "phone" && phoneInputRef.current) {
|
|
@@ -2730,7 +2758,7 @@ var InputDynamic = ({
|
|
|
2730
2758
|
}, 50);
|
|
2731
2759
|
}
|
|
2732
2760
|
}, [identityType]);
|
|
2733
|
-
|
|
2761
|
+
React.useEffect(() => {
|
|
2734
2762
|
if (shouldFocusRef.current && type === "emailOrPhone") {
|
|
2735
2763
|
setTimeout(() => {
|
|
2736
2764
|
if (emailOrPhoneType === "phone" && emailOrPhoneInputRef.current) {
|
|
@@ -3766,7 +3794,7 @@ var CardTicketSearch = ({
|
|
|
3766
3794
|
menuItems
|
|
3767
3795
|
}) => {
|
|
3768
3796
|
const styles = useStyles8();
|
|
3769
|
-
const labels =
|
|
3797
|
+
const labels = React__default.default.useMemo(
|
|
3770
3798
|
() => ({ ...DEFAULT_LABELS8[language], ...customLabels }),
|
|
3771
3799
|
[language, customLabels]
|
|
3772
3800
|
);
|
|
@@ -3787,7 +3815,7 @@ var CardTicketSearch = ({
|
|
|
3787
3815
|
name: "roundTrip",
|
|
3788
3816
|
defaultValue: roundTrip
|
|
3789
3817
|
});
|
|
3790
|
-
|
|
3818
|
+
React__default.default.useEffect(() => {
|
|
3791
3819
|
setValue("from", from);
|
|
3792
3820
|
setValue("to", to);
|
|
3793
3821
|
setValue("startDate", startDate);
|
|
@@ -3807,7 +3835,7 @@ var CardTicketSearch = ({
|
|
|
3807
3835
|
passenger,
|
|
3808
3836
|
setValue
|
|
3809
3837
|
]);
|
|
3810
|
-
|
|
3838
|
+
React__default.default.useEffect(() => {
|
|
3811
3839
|
if (onRoundTripChange) {
|
|
3812
3840
|
onRoundTripChange(roundTripValue);
|
|
3813
3841
|
}
|
|
@@ -5125,18 +5153,18 @@ var ModalSelectDate = ({
|
|
|
5125
5153
|
}) => {
|
|
5126
5154
|
const styles = useStyles11();
|
|
5127
5155
|
const mergedLabels = { ...DEFAULT_LABELS11[language], ...labels };
|
|
5128
|
-
|
|
5156
|
+
React.useEffect(() => {
|
|
5129
5157
|
moment__default.default.locale(language === "id" ? "id" : "en");
|
|
5130
5158
|
}, [language]);
|
|
5131
|
-
const [selectedDate, setSelectedDate] =
|
|
5159
|
+
const [selectedDate, setSelectedDate] = React.useState(
|
|
5132
5160
|
selectedDepartureDate
|
|
5133
5161
|
);
|
|
5134
|
-
const [selectedEndDate, setSelectedEndDate] =
|
|
5162
|
+
const [selectedEndDate, setSelectedEndDate] = React.useState(
|
|
5135
5163
|
selectedReturnDate
|
|
5136
5164
|
);
|
|
5137
|
-
const [hoveredDate, setHoveredDate] =
|
|
5138
|
-
const [activeTab, setActiveTab] =
|
|
5139
|
-
const previewEndDate =
|
|
5165
|
+
const [hoveredDate, setHoveredDate] = React.useState();
|
|
5166
|
+
const [activeTab, setActiveTab] = React.useState(initialTab);
|
|
5167
|
+
const previewEndDate = React.useMemo(() => {
|
|
5140
5168
|
if (selectedEndDate) return selectedEndDate;
|
|
5141
5169
|
if (selectedDate && hoveredDate && hoveredDate > selectedDate) {
|
|
5142
5170
|
return hoveredDate;
|
|
@@ -5147,7 +5175,7 @@ var ModalSelectDate = ({
|
|
|
5147
5175
|
if (!first || !second) return false;
|
|
5148
5176
|
return moment__default.default(first).isSame(second, "day");
|
|
5149
5177
|
};
|
|
5150
|
-
|
|
5178
|
+
React.useEffect(() => {
|
|
5151
5179
|
if (open) {
|
|
5152
5180
|
setSelectedDate(selectedDepartureDate);
|
|
5153
5181
|
setSelectedEndDate(selectedReturnDate);
|
|
@@ -5199,7 +5227,7 @@ var ModalSelectDate = ({
|
|
|
5199
5227
|
handleClose();
|
|
5200
5228
|
}
|
|
5201
5229
|
};
|
|
5202
|
-
const handleCustomDayCellRef =
|
|
5230
|
+
const handleCustomDayCellRef = React.useCallback(
|
|
5203
5231
|
(element, date, _classNames) => {
|
|
5204
5232
|
if (!element) return;
|
|
5205
5233
|
const removeTokens = (className) => {
|
|
@@ -5453,8 +5481,8 @@ var ModalService = ({
|
|
|
5453
5481
|
const styles = useStyles12();
|
|
5454
5482
|
const mergedLabels = { ...DEFAULT_LABELS12[language], ...labels };
|
|
5455
5483
|
const displayTitle = title || mergedLabels.title;
|
|
5456
|
-
const [selectedServices, setSelectedServices] =
|
|
5457
|
-
|
|
5484
|
+
const [selectedServices, setSelectedServices] = React.useState(selectedServiceIds);
|
|
5485
|
+
React.useEffect(() => {
|
|
5458
5486
|
if (open) {
|
|
5459
5487
|
if (selectedServiceIds && selectedServiceIds.length > 0) {
|
|
5460
5488
|
const validIds = services.filter((s) => selectedServiceIds.includes(s.serviceTypeId)).map((s) => s.serviceTypeId);
|
|
@@ -5654,13 +5682,13 @@ var ModalTotalPassengers = ({
|
|
|
5654
5682
|
}) => {
|
|
5655
5683
|
const styles = useStyles13();
|
|
5656
5684
|
const mergedLabels = { ...DEFAULT_LABELS13[language], ...labels };
|
|
5657
|
-
const [passengers, setPassengers] =
|
|
5658
|
-
const [openItems, setOpenItems] =
|
|
5685
|
+
const [passengers, setPassengers] = React.useState([]);
|
|
5686
|
+
const [openItems, setOpenItems] = React.useState([]);
|
|
5659
5687
|
const defaultInfoMessage = mergedLabels.infoMessage.replace(
|
|
5660
5688
|
"{maxPassengers}",
|
|
5661
5689
|
String(maxPassengers)
|
|
5662
5690
|
);
|
|
5663
|
-
|
|
5691
|
+
React.useEffect(() => {
|
|
5664
5692
|
if (passengerTypes.length === 0) return;
|
|
5665
5693
|
const defaultPassengers = passengerTypes.map(
|
|
5666
5694
|
(passengerType) => ({
|
|
@@ -6005,10 +6033,10 @@ var ModalTypeOfService = ({
|
|
|
6005
6033
|
}) => {
|
|
6006
6034
|
const styles = useStyles14();
|
|
6007
6035
|
const mergedLabels = { ...DEFAULT_LABELS14[language], ...labels };
|
|
6008
|
-
const [selectedServiceId, setSelectedServiceId] =
|
|
6036
|
+
const [selectedServiceId, setSelectedServiceId] = React.useState(
|
|
6009
6037
|
selectedService?.id || 0
|
|
6010
6038
|
);
|
|
6011
|
-
const [openItems, setOpenItems] =
|
|
6039
|
+
const [openItems, setOpenItems] = React.useState(() => {
|
|
6012
6040
|
if (!selectedService) return [];
|
|
6013
6041
|
for (const item of serviceTypes) {
|
|
6014
6042
|
if (item.children && item.children.length > 0) {
|
|
@@ -6038,7 +6066,7 @@ var ModalTypeOfService = ({
|
|
|
6038
6066
|
}
|
|
6039
6067
|
);
|
|
6040
6068
|
const imageRenderer = renderImage || defaultRenderImage;
|
|
6041
|
-
|
|
6069
|
+
React.useEffect(() => {
|
|
6042
6070
|
const newId = selectedService?.id || 0;
|
|
6043
6071
|
if (newId !== selectedServiceId) {
|
|
6044
6072
|
setSelectedServiceId(newId);
|
|
@@ -6321,7 +6349,7 @@ var SortMenu = ({
|
|
|
6321
6349
|
clearFiltersText: deprecatedClearFiltersText
|
|
6322
6350
|
}) => {
|
|
6323
6351
|
const styles = useStyles15();
|
|
6324
|
-
const labels =
|
|
6352
|
+
const labels = React__default.default.useMemo(
|
|
6325
6353
|
() => ({
|
|
6326
6354
|
...DEFAULT_LABELS15[language],
|
|
6327
6355
|
...customLabels,
|
|
@@ -6344,11 +6372,11 @@ var SortMenu = ({
|
|
|
6344
6372
|
deprecatedClearFiltersText
|
|
6345
6373
|
]
|
|
6346
6374
|
);
|
|
6347
|
-
const sortOptions =
|
|
6375
|
+
const sortOptions = React__default.default.useMemo(
|
|
6348
6376
|
() => customSortOptions || getSortOptions(labels),
|
|
6349
6377
|
[customSortOptions, labels]
|
|
6350
6378
|
);
|
|
6351
|
-
const currentSortLabel =
|
|
6379
|
+
const currentSortLabel = React__default.default.useMemo(
|
|
6352
6380
|
() => sortOptions.find((opt) => opt.value === value)?.label || labels.recommendation,
|
|
6353
6381
|
[sortOptions, value, labels.recommendation]
|
|
6354
6382
|
);
|
|
@@ -6607,8 +6635,8 @@ var ModalFilterTicket = ({
|
|
|
6607
6635
|
}) => {
|
|
6608
6636
|
const styles = useStyles16();
|
|
6609
6637
|
const mergedLabels = { ...DEFAULT_LABELS16[language], ...labels };
|
|
6610
|
-
const [rangeReady, setRangeReady] =
|
|
6611
|
-
|
|
6638
|
+
const [rangeReady, setRangeReady] = React.useState(false);
|
|
6639
|
+
React.useEffect(() => {
|
|
6612
6640
|
if (open) {
|
|
6613
6641
|
const timer = setTimeout(() => {
|
|
6614
6642
|
setRangeReady(true);
|
|
@@ -6645,7 +6673,7 @@ var ModalFilterTicket = ({
|
|
|
6645
6673
|
price
|
|
6646
6674
|
);
|
|
6647
6675
|
};
|
|
6648
|
-
const renderPriceTrack =
|
|
6676
|
+
const renderPriceTrack = React.useCallback(
|
|
6649
6677
|
({ props, children }) => {
|
|
6650
6678
|
const [value1, value2] = priceRange;
|
|
6651
6679
|
const percent1 = (value1 - minPrice) / (maxPrice - minPrice) * 100;
|
|
@@ -6684,7 +6712,7 @@ var ModalFilterTicket = ({
|
|
|
6684
6712
|
},
|
|
6685
6713
|
[priceRange, minPrice, maxPrice]
|
|
6686
6714
|
);
|
|
6687
|
-
const renderDurationTrack =
|
|
6715
|
+
const renderDurationTrack = React.useCallback(
|
|
6688
6716
|
({ props, children }) => {
|
|
6689
6717
|
const [value1, value2] = durationRange;
|
|
6690
6718
|
const percent1 = (value1 - minDuration) / (maxDuration - minDuration) * 100;
|
|
@@ -7012,7 +7040,7 @@ var DateFilter = ({
|
|
|
7012
7040
|
labels
|
|
7013
7041
|
}) => {
|
|
7014
7042
|
const styles = useStyles17();
|
|
7015
|
-
const scrollRef =
|
|
7043
|
+
const scrollRef = React.useRef(null);
|
|
7016
7044
|
const mergedLabels = {
|
|
7017
7045
|
...DEFAULT_LABELS17[language],
|
|
7018
7046
|
...labels
|
|
@@ -7249,8 +7277,8 @@ var ModalSearchTicket = ({
|
|
|
7249
7277
|
name: "roundTrip",
|
|
7250
7278
|
defaultValue: defaultValues?.roundTrip || false
|
|
7251
7279
|
});
|
|
7252
|
-
const isUpdatingFromProps =
|
|
7253
|
-
|
|
7280
|
+
const isUpdatingFromProps = React.useRef(false);
|
|
7281
|
+
React.useEffect(() => {
|
|
7254
7282
|
if (defaultValues) {
|
|
7255
7283
|
isUpdatingFromProps.current = true;
|
|
7256
7284
|
Object.entries(defaultValues).forEach(([key, value]) => {
|
|
@@ -7261,7 +7289,7 @@ var ModalSearchTicket = ({
|
|
|
7261
7289
|
}, 0);
|
|
7262
7290
|
}
|
|
7263
7291
|
}, [defaultValues, setValue]);
|
|
7264
|
-
|
|
7292
|
+
React.useEffect(() => {
|
|
7265
7293
|
if (onRoundTripChange && !isUpdatingFromProps.current) {
|
|
7266
7294
|
onRoundTripChange(roundTripValue);
|
|
7267
7295
|
}
|
|
@@ -7811,13 +7839,13 @@ var Stepper = ({
|
|
|
7811
7839
|
}) => {
|
|
7812
7840
|
const styles = useStyles19();
|
|
7813
7841
|
const mergedLabels = { ...DEFAULT_LABELS19[language], ...labels };
|
|
7814
|
-
const currentStepIndex =
|
|
7842
|
+
const currentStepIndex = React.useMemo(() => {
|
|
7815
7843
|
if (typeof currentStep === "number") {
|
|
7816
7844
|
return steps.findIndex((step) => step.number === currentStep);
|
|
7817
7845
|
}
|
|
7818
7846
|
return steps.findIndex((step) => step.id === currentStep);
|
|
7819
7847
|
}, [steps, currentStep]);
|
|
7820
|
-
const activeStepNumber =
|
|
7848
|
+
const activeStepNumber = React.useMemo(() => {
|
|
7821
7849
|
return currentStepIndex >= 0 ? steps[currentStepIndex].number : 1;
|
|
7822
7850
|
}, [currentStepIndex, steps]);
|
|
7823
7851
|
const getStepStatus = (stepNumber) => {
|
|
@@ -7848,7 +7876,7 @@ var Stepper = ({
|
|
|
7848
7876
|
className: styles.stepperBackground
|
|
7849
7877
|
}
|
|
7850
7878
|
),
|
|
7851
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.stepsRow, children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7879
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.stepsRow, children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
|
|
7852
7880
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.stepCircleWrapper, children: [
|
|
7853
7881
|
getStepStatus(step.number) === "active" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
7854
7882
|
"img",
|
|
@@ -8459,28 +8487,28 @@ var ModalPassengerForm = ({
|
|
|
8459
8487
|
};
|
|
8460
8488
|
const displayTitle = title || mergedLabels.title;
|
|
8461
8489
|
const idTypes = ["KTP", "SIM", "Paspor"];
|
|
8462
|
-
const [isModalSelectIdTypeOpen, setIsModalSelectIdTypeOpen] =
|
|
8463
|
-
const [isModalScanOpen, setIsModalScanOpen] =
|
|
8464
|
-
const [scannedIdType, setScannedIdType] =
|
|
8465
|
-
const [scanStatus, setScanStatus] =
|
|
8466
|
-
const [scanStep, setScanStep] =
|
|
8467
|
-
const [capturedImage, setCapturedImage] =
|
|
8468
|
-
const [stream, setStream] =
|
|
8469
|
-
const videoRef =
|
|
8490
|
+
const [isModalSelectIdTypeOpen, setIsModalSelectIdTypeOpen] = React.useState(false);
|
|
8491
|
+
const [isModalScanOpen, setIsModalScanOpen] = React.useState(false);
|
|
8492
|
+
const [scannedIdType, setScannedIdType] = React.useState(null);
|
|
8493
|
+
const [scanStatus, setScanStatus] = React.useState("idle");
|
|
8494
|
+
const [scanStep, setScanStep] = React.useState(0);
|
|
8495
|
+
const [capturedImage, setCapturedImage] = React.useState(null);
|
|
8496
|
+
const [stream, setStream] = React.useState(null);
|
|
8497
|
+
const videoRef = React.useRef(null);
|
|
8470
8498
|
const { control, handleSubmit, reset, watch, setValue } = reactHookForm.useForm({
|
|
8471
8499
|
defaultValues
|
|
8472
8500
|
});
|
|
8473
8501
|
const idType = watch("idType");
|
|
8474
8502
|
const watchPassportCountry = watch("country");
|
|
8475
|
-
|
|
8503
|
+
React.useEffect(() => {
|
|
8476
8504
|
reset(defaultValues);
|
|
8477
8505
|
}, [defaultValues, reset]);
|
|
8478
|
-
|
|
8506
|
+
React.useEffect(() => {
|
|
8479
8507
|
if (idType) {
|
|
8480
8508
|
setValue("idNumber", "");
|
|
8481
8509
|
}
|
|
8482
8510
|
}, [idType, watchPassportCountry, setValue]);
|
|
8483
|
-
const stopCamera =
|
|
8511
|
+
const stopCamera = React.useCallback(() => {
|
|
8484
8512
|
if (stream) {
|
|
8485
8513
|
stream.getTracks().forEach((track) => track.stop());
|
|
8486
8514
|
setStream(null);
|
|
@@ -8490,7 +8518,7 @@ var ModalPassengerForm = ({
|
|
|
8490
8518
|
videoRef.current.srcObject = null;
|
|
8491
8519
|
}
|
|
8492
8520
|
}, [stream]);
|
|
8493
|
-
const startCamera =
|
|
8521
|
+
const startCamera = React.useCallback(async () => {
|
|
8494
8522
|
try {
|
|
8495
8523
|
const mediaStream = await navigator.mediaDevices.getUserMedia({
|
|
8496
8524
|
video: {
|
|
@@ -8505,7 +8533,7 @@ var ModalPassengerForm = ({
|
|
|
8505
8533
|
alert(mergedLabels.cameraPermissionError);
|
|
8506
8534
|
}
|
|
8507
8535
|
}, [mergedLabels.cameraPermissionError]);
|
|
8508
|
-
const capturePhoto =
|
|
8536
|
+
const capturePhoto = React.useCallback(() => {
|
|
8509
8537
|
if (videoRef.current) {
|
|
8510
8538
|
const canvas = document.createElement("canvas");
|
|
8511
8539
|
canvas.width = videoRef.current.videoWidth;
|
|
@@ -8523,12 +8551,12 @@ var ModalPassengerForm = ({
|
|
|
8523
8551
|
}
|
|
8524
8552
|
}
|
|
8525
8553
|
}, [scannedIdType, stopCamera]);
|
|
8526
|
-
|
|
8554
|
+
React.useEffect(() => {
|
|
8527
8555
|
if (isModalScanOpen && scanStatus === "idle") {
|
|
8528
8556
|
startCamera();
|
|
8529
8557
|
}
|
|
8530
8558
|
}, [isModalScanOpen, scanStatus, startCamera]);
|
|
8531
|
-
|
|
8559
|
+
React.useEffect(() => {
|
|
8532
8560
|
if (isModalScanOpen && scanStatus === "idle" && stream && videoRef.current) {
|
|
8533
8561
|
if (videoRef.current.srcObject !== stream) {
|
|
8534
8562
|
videoRef.current.srcObject = stream;
|
|
@@ -8543,18 +8571,18 @@ var ModalPassengerForm = ({
|
|
|
8543
8571
|
}
|
|
8544
8572
|
}
|
|
8545
8573
|
}, [isModalScanOpen, scanStatus, stream]);
|
|
8546
|
-
|
|
8574
|
+
React.useEffect(() => {
|
|
8547
8575
|
if (!isModalScanOpen) {
|
|
8548
8576
|
stopCamera();
|
|
8549
8577
|
setScanStep(0);
|
|
8550
8578
|
}
|
|
8551
8579
|
}, [isModalScanOpen, stopCamera]);
|
|
8552
|
-
|
|
8580
|
+
React.useEffect(() => {
|
|
8553
8581
|
return () => {
|
|
8554
8582
|
stopCamera();
|
|
8555
8583
|
};
|
|
8556
8584
|
}, [stopCamera]);
|
|
8557
|
-
|
|
8585
|
+
React.useEffect(() => {
|
|
8558
8586
|
if (scanStatus !== "reading" || !capturedImage) return;
|
|
8559
8587
|
let isCancelled = false;
|
|
8560
8588
|
const performOCR = async () => {
|
|
@@ -11607,7 +11635,7 @@ var CardReview = ({
|
|
|
11607
11635
|
}
|
|
11608
11636
|
) : (
|
|
11609
11637
|
// Clone element to append className if it's a valid React element
|
|
11610
|
-
|
|
11638
|
+
React__default.default.isValidElement(item.label) ? React__default.default.cloneElement(item.label, {
|
|
11611
11639
|
className: `${styles.defaultLabel} ${item.labelClassName || ""}${item.label.props.className ? " " + item.label.props.className : ""}`
|
|
11612
11640
|
}) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
11613
11641
|
"div",
|
|
@@ -11960,7 +11988,7 @@ var CardPriceDetails = ({
|
|
|
11960
11988
|
const renderItem = (item, key) => {
|
|
11961
11989
|
const variantClass = getVariantClass(item.variant);
|
|
11962
11990
|
const isTaxLike = item.variant === "danger";
|
|
11963
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11991
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React__default.default.Fragment, { children: [
|
|
11964
11992
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.row, children: [
|
|
11965
11993
|
isTaxLike ? /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1Strong, { className: variantClass, children: item.name }) : /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { className: reactComponents.mergeClasses(styles.label, variantClass), children: item.name }),
|
|
11966
11994
|
isTaxLike ? /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Body1Strong, { className: reactComponents.mergeClasses(styles.value, variantClass), children: [
|
|
@@ -11987,7 +12015,7 @@ var CardPriceDetails = ({
|
|
|
11987
12015
|
section.detail.map((item, i) => renderItem(item, i))
|
|
11988
12016
|
] }, index);
|
|
11989
12017
|
}
|
|
11990
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12018
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Fragment, { children: section.detail.map((item, i) => renderItem(item, i)) }, index);
|
|
11991
12019
|
}),
|
|
11992
12020
|
/* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
|
|
11993
12021
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.totalRow, children: [
|
|
@@ -12981,7 +13009,7 @@ var uploadStyles = reactComponents.makeStyles({
|
|
|
12981
13009
|
objectFit: "contain"
|
|
12982
13010
|
}
|
|
12983
13011
|
});
|
|
12984
|
-
var FileUpload =
|
|
13012
|
+
var FileUpload = React__default.default.forwardRef(
|
|
12985
13013
|
({
|
|
12986
13014
|
name,
|
|
12987
13015
|
control,
|
|
@@ -12997,12 +13025,12 @@ var FileUpload = React5__default.default.forwardRef(
|
|
|
12997
13025
|
}, ref) => {
|
|
12998
13026
|
const mergedLabels = { ...DEFAULT_LABELS38[language], ...customLabels };
|
|
12999
13027
|
const styles = uploadStyles();
|
|
13000
|
-
const fileInputRef =
|
|
13001
|
-
const [, setIsDragOver] =
|
|
13002
|
-
const [previewUrl, setPreviewUrl] =
|
|
13003
|
-
const [sizeError, setSizeError] =
|
|
13004
|
-
const [currentFile, setCurrentFile] =
|
|
13005
|
-
const [isPreviewOpen, setIsPreviewOpen] =
|
|
13028
|
+
const fileInputRef = React.useRef(null);
|
|
13029
|
+
const [, setIsDragOver] = React.useState(false);
|
|
13030
|
+
const [previewUrl, setPreviewUrl] = React.useState(null);
|
|
13031
|
+
const [sizeError, setSizeError] = React.useState(null);
|
|
13032
|
+
const [currentFile, setCurrentFile] = React.useState(null);
|
|
13033
|
+
const [isPreviewOpen, setIsPreviewOpen] = React.useState(false);
|
|
13006
13034
|
const formatFileSize = (bytes) => {
|
|
13007
13035
|
if (bytes < 1024) return `${bytes} B`;
|
|
13008
13036
|
const kb = bytes / 1024;
|
|
@@ -13091,7 +13119,7 @@ var FileUpload = React5__default.default.forwardRef(
|
|
|
13091
13119
|
rules: { required: required ? `${label} ${mergedLabels.requiredError}` : false },
|
|
13092
13120
|
render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
13093
13121
|
const displayFile = currentFile || value;
|
|
13094
|
-
|
|
13122
|
+
React.useEffect(() => {
|
|
13095
13123
|
const fileToPreview = currentFile || value;
|
|
13096
13124
|
if (fileToPreview instanceof File) {
|
|
13097
13125
|
if (fileToPreview.type.startsWith("image/")) {
|