@lookiero/checkout 3.8.0-beta.13 → 3.8.0-beta.3

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.
Files changed (128) hide show
  1. package/dist/domain/checkoutBooking/event/createNotificationWhenCheckoutBookingExpired.d.ts +6 -0
  2. package/dist/domain/checkoutBooking/event/createNotificationWhenCheckoutBookingExpired.js +13 -0
  3. package/dist/infrastructure/domain/uiSetting/react/useIncrementIntroShownCount.d.ts +10 -0
  4. package/dist/infrastructure/domain/uiSetting/react/useIncrementIntroShownCount.js +11 -0
  5. package/dist/infrastructure/projection/checkout/checkout.js +0 -14
  6. package/dist/infrastructure/projection/uiSetting/react/useShouldIntroBeShown.d.ts +6 -0
  7. package/dist/infrastructure/projection/uiSetting/react/useShouldIntroBeShown.js +7 -0
  8. package/dist/infrastructure/projection/uiSetting/react/useViewIntroShownCount.d.ts +6 -0
  9. package/dist/infrastructure/projection/uiSetting/react/useViewIntroShownCount.js +9 -0
  10. package/dist/infrastructure/ui/components/organisms/checkoutQuestions/CheckoutQuestion.js +1 -1
  11. package/dist/infrastructure/ui/components/organisms/checkoutQuestions/components/CheckoutQuestionItem.d.ts +1 -0
  12. package/dist/infrastructure/ui/components/organisms/checkoutQuestions/components/buttonCheckoutQuestionItem/ButtonCheckoutQuestionItem.js +2 -2
  13. package/dist/infrastructure/ui/components/organisms/checkoutQuestions/components/iconCheckoutQuestionItem/IconCheckoutQuestionItem.js +3 -3
  14. package/dist/infrastructure/ui/components/organisms/checkoutQuestions/components/textareaCheckoutQuestionItem/TextareaCheckoutQuestionItem.js +2 -2
  15. package/dist/infrastructure/ui/components/organisms/returnQuestions/ReturnQuestion.js +1 -1
  16. package/dist/infrastructure/ui/components/organisms/returnQuestions/components/ReturnQuestionItem.d.ts +1 -0
  17. package/dist/infrastructure/ui/components/organisms/returnQuestions/components/hostSelectReturnQuestionItem/HostSelectReturnQuestionItem.js +2 -2
  18. package/dist/infrastructure/ui/components/organisms/returnQuestions/components/optionReturnQuestionItem/OptionReturnQuestionItem.js +2 -2
  19. package/dist/infrastructure/ui/components/organisms/returnQuestions/components/textareaReturnQuestionItem/TextareaReturnQuestionItem.js +2 -2
  20. package/dist/infrastructure/ui/components/templates/SafeAreaScrollView.d.ts +13 -0
  21. package/dist/infrastructure/ui/components/templates/SafeAreaScrollView.js +19 -0
  22. package/dist/infrastructure/ui/components/templates/SafeAreaScrollView.style.ts.d.ts +6 -0
  23. package/dist/infrastructure/ui/components/templates/SafeAreaScrollView.style.ts.js +7 -0
  24. package/dist/infrastructure/ui/components/templates/header/header/Header.d.ts +3 -0
  25. package/dist/infrastructure/ui/components/templates/header/header/Header.js +10 -0
  26. package/dist/infrastructure/ui/components/templates/header/header/Header.style.d.ts +9 -0
  27. package/dist/infrastructure/ui/components/templates/header/header/Header.style.js +12 -0
  28. package/dist/infrastructure/ui/components/templates/safeAreaScrollView/SafeAreaScrollView.d.ts +13 -0
  29. package/dist/infrastructure/ui/components/templates/safeAreaScrollView/SafeAreaScrollView.js +19 -0
  30. package/dist/infrastructure/ui/components/templates/safeAreaScrollView/SafeAreaScrollView.style.ts.d.ts +6 -0
  31. package/dist/infrastructure/ui/components/templates/safeAreaScrollView/SafeAreaScrollView.style.ts.js +7 -0
  32. package/dist/infrastructure/ui/hooks/usePaymentInstrumentUpdateEvents.d.ts +2 -0
  33. package/dist/infrastructure/ui/hooks/usePaymentInstrumentUpdateEvents.js +28 -0
  34. package/dist/infrastructure/ui/hooks/useToast.d.ts +11 -0
  35. package/dist/infrastructure/ui/hooks/useToast.js +49 -0
  36. package/dist/infrastructure/ui/views/checkout/components/checkoutSuccessModal/CheckoutSuccessModal.d.ts +7 -0
  37. package/dist/infrastructure/ui/views/checkout/components/checkoutSuccessModal/CheckoutSuccessModal.js +25 -0
  38. package/dist/infrastructure/ui/views/checkout/components/checkoutSuccessModal/CheckoutSuccessModal.style.d.ts +16 -0
  39. package/dist/infrastructure/ui/views/checkout/components/checkoutSuccessModal/CheckoutSuccessModal.style.js +19 -0
  40. package/dist/infrastructure/ui/views/feedback/components/checkoutQuestionsForm/CheckoutQuestionsForm.js +1 -1
  41. package/dist/infrastructure/ui/views/intro/Intro.d.ts +6 -0
  42. package/dist/infrastructure/ui/views/intro/Intro.js +52 -0
  43. package/dist/infrastructure/ui/views/intro/Intro.style.d.ts +52 -0
  44. package/dist/infrastructure/ui/views/intro/Intro.style.js +55 -0
  45. package/dist/infrastructure/ui/views/item/Item.style.d.ts +15 -0
  46. package/dist/infrastructure/ui/views/item/Item.style.js +18 -0
  47. package/dist/infrastructure/ui/views/item/components/getOutOfCheckoutModal/GetOutOfCheckoutModal.js +6 -4
  48. package/dist/infrastructure/ui/views/item/components/getOutOfCheckoutModal/GetOutOfCheckoutModal.style.d.ts +10 -3
  49. package/dist/infrastructure/ui/views/item/components/getOutOfCheckoutModal/GetOutOfCheckoutModal.style.js +10 -3
  50. package/dist/infrastructure/ui/views/item/components/itemActions/ItemActions.js +4 -3
  51. package/dist/infrastructure/ui/views/item/components/itemActions/ItemActions.style.d.ts +3 -0
  52. package/dist/infrastructure/ui/views/item/components/itemActions/ItemActions.style.js +3 -0
  53. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.d.ts +26 -0
  54. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.js +44 -0
  55. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.style.d.ts +45 -0
  56. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.style.js +53 -0
  57. package/dist/infrastructure/ui/views/item/components/productVariantSlider/ProductVariantSlider.js +10 -9
  58. package/dist/infrastructure/ui/views/item/components/returnQuestionsFeedback/ReturnQuestionsFeedback.style.d.ts +1 -0
  59. package/dist/infrastructure/ui/views/item/components/returnQuestionsFeedback/ReturnQuestionsFeedback.style.js +1 -0
  60. package/dist/infrastructure/ui/views/item/components/returnQuestionsForm/ReturnQuestionsForm.js +3 -2
  61. package/dist/infrastructure/ui/views/item/components/returnQuestionsForm/ReturnQuestionsForm.style.d.ts +3 -0
  62. package/dist/infrastructure/ui/views/item/components/returnQuestionsForm/ReturnQuestionsForm.style.js +3 -0
  63. package/dist/infrastructure/ui/views/item/components/sizeChangeModal/SizeChangeModal.d.ts +7 -0
  64. package/dist/infrastructure/ui/views/item/components/sizeChangeModal/SizeChangeModal.js +25 -0
  65. package/dist/infrastructure/ui/views/item/components/sizeChangeModal/SizeChangeModal.style.d.ts +16 -0
  66. package/dist/infrastructure/ui/views/item/components/sizeChangeModal/SizeChangeModal.style.js +19 -0
  67. package/dist/infrastructure/ui/views/item/components/sizeWithoutStockModal/SizeWithoutStockModal.js +4 -3
  68. package/dist/infrastructure/ui/views/item/components/sizeWithoutStockModal/SizeWithoutStockModal.style.d.ts +10 -3
  69. package/dist/infrastructure/ui/views/item/components/sizeWithoutStockModal/SizeWithoutStockModal.style.js +10 -3
  70. package/dist/infrastructure/ui/views/item/views/productVariant/ProductVariant.style.d.ts +1 -0
  71. package/dist/infrastructure/ui/views/item/views/productVariant/ProductVariant.style.js +2 -1
  72. package/dist/infrastructure/ui/views/navigation/Navigation.d.ts +21 -0
  73. package/dist/infrastructure/ui/views/navigation/Navigation.js +45 -0
  74. package/dist/infrastructure/ui/views/navigation/Navigation.style.d.ts +5 -0
  75. package/dist/infrastructure/ui/views/navigation/Navigation.style.js +30 -0
  76. package/dist/infrastructure/ui/views/navigation/components/header/Header.d.ts +46 -0
  77. package/dist/infrastructure/ui/views/navigation/components/header/Header.js +120 -0
  78. package/dist/infrastructure/ui/views/navigation/components/header/Header.style.d.ts +31 -0
  79. package/dist/infrastructure/ui/views/navigation/components/header/Header.style.js +34 -0
  80. package/dist/infrastructure/ui/views/navigation/components/header/Logo.d.ts +7 -0
  81. package/dist/infrastructure/ui/views/navigation/components/header/Logo.js +11 -0
  82. package/dist/infrastructure/ui/views/navigation/components/header/Logo.style.d.ts +7 -0
  83. package/dist/infrastructure/ui/views/navigation/components/header/Logo.style.js +8 -0
  84. package/dist/infrastructure/ui/views/summary/components/checkoutItemsTabs/CheckoutItemsTabs.d.ts +12 -0
  85. package/dist/infrastructure/ui/views/summary/components/checkoutItemsTabs/CheckoutItemsTabs.js +24 -0
  86. package/dist/infrastructure/ui/views/summary/components/checkoutItemsTabs/CheckoutItemsTabs.style.d.ts +15 -0
  87. package/dist/infrastructure/ui/views/summary/components/checkoutItemsTabs/CheckoutItemsTabs.style.js +18 -0
  88. package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.js +8 -7
  89. package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.style.d.ts +6 -0
  90. package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.style.js +6 -0
  91. package/dist/shared/notifications/domain/notification/command/createNotification.d.ts +17 -0
  92. package/dist/shared/notifications/domain/notification/command/createNotification.js +7 -0
  93. package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.d.ts +21 -0
  94. package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.js +22 -0
  95. package/dist/shared/notifications/infrastructure/ui/components/NotificationItem.d.ts +12 -0
  96. package/dist/shared/notifications/infrastructure/ui/components/NotificationItem.js +24 -0
  97. package/dist/shared/notifications/infrastructure/ui/components/Notifications.d.ts +9 -0
  98. package/dist/shared/notifications/infrastructure/ui/components/Notifications.js +20 -0
  99. package/dist/shared/notifications/infrastructure/ui/components/Notifications.style.d.ts +36 -0
  100. package/dist/shared/notifications/infrastructure/ui/components/Notifications.style.js +31 -0
  101. package/dist/shared/notifications/infrastructure/ui/components/modalNotifications/ModalNotificationItem.js +4 -3
  102. package/dist/shared/notifications/infrastructure/ui/components/modalNotifications/ModalNotificationItem.style.d.ts +10 -3
  103. package/dist/shared/notifications/infrastructure/ui/components/modalNotifications/ModalNotificationItem.style.js +10 -3
  104. package/dist/shared/tracking/infrastructure/usePageView.d.ts +13 -0
  105. package/dist/shared/tracking/infrastructure/usePageView.js +27 -0
  106. package/dist/shared/ui/components/atoms/error/Error.style.d.ts +6 -0
  107. package/dist/shared/ui/components/atoms/error/Error.style.js +9 -0
  108. package/dist/shared/ui/components/atoms/input/Input.js +2 -2
  109. package/dist/shared/ui/components/layouts/modal/Modal.js +1 -1
  110. package/dist/shared/ui/components/layouts/slider/Bullets.js +4 -3
  111. package/dist/shared/ui/components/molecules/selectField/SelectField.js +3 -3
  112. package/package.json +1 -7
  113. package/dist/infrastructure/ui/components/layouts/layout/dummyLayout/useScrollViewRef.d.ts +0 -15
  114. package/dist/infrastructure/ui/components/layouts/layout/dummyLayout/useScrollViewRef.js +0 -14
  115. package/dist/shared/ui/components/layouts/carousel/Carousel.d.ts +0 -11
  116. package/dist/shared/ui/components/layouts/carousel/Carousel.js +0 -31
  117. package/dist/shared/ui/components/layouts/carousel/Carousel.style.d.ts +0 -15
  118. package/dist/shared/ui/components/layouts/carousel/Carousel.style.js +0 -7
  119. package/dist/shared/ui/components/layouts/carousel/Carousel2.d.ts +0 -25
  120. package/dist/shared/ui/components/layouts/carousel/Carousel2.js +0 -69
  121. package/dist/shared/ui/components/layouts/carousel/DragComponent.d.ts +0 -3
  122. package/dist/shared/ui/components/layouts/carousel/DragComponent.js +0 -48
  123. package/dist/shared/ui/components/layouts/slider/Bullets2.d.ts +0 -10
  124. package/dist/shared/ui/components/layouts/slider/Bullets2.js +0 -30
  125. package/dist/shared/ui/components/layouts/slider/SliderDots.d.ts +0 -8
  126. package/dist/shared/ui/components/layouts/slider/SliderDots.js +0 -16
  127. package/dist/shared/ui/components/layouts/slider/SliderDots.style.d.ts +0 -12
  128. package/dist/shared/ui/components/layouts/slider/SliderDots.style.js +0 -15
@@ -0,0 +1,17 @@
1
+ import { Command } from "@lookiero/messaging";
2
+ import { NotificationLevel } from "../model/notification";
3
+ declare const CREATE_NOTIFICATION = "create_notification";
4
+ interface CreateNotificationPayload {
5
+ readonly aggregateId: string;
6
+ readonly level: NotificationLevel;
7
+ readonly bodyI18nKey: string;
8
+ readonly titleI18nKey: string | undefined;
9
+ }
10
+ interface CreateNotification extends Command<typeof CREATE_NOTIFICATION>, CreateNotificationPayload {
11
+ }
12
+ interface CreateNotificationFunction {
13
+ (payload: CreateNotificationPayload): CreateNotification;
14
+ }
15
+ declare const createNotification: CreateNotificationFunction;
16
+ export type { CreateNotification };
17
+ export { CREATE_NOTIFICATION, createNotification };
@@ -0,0 +1,7 @@
1
+ import { command } from "@lookiero/messaging";
2
+ const CREATE_NOTIFICATION = "create_notification";
3
+ const createNotification = ({ aggregateId, ...payload }) => ({
4
+ ...command({ aggregateId, name: CREATE_NOTIFICATION }),
5
+ ...payload,
6
+ });
7
+ export { CREATE_NOTIFICATION, createNotification };
@@ -0,0 +1,21 @@
1
+ import { CommandStatus } from "@lookiero/messaging-react";
2
+ import { Logger } from "../../../../../logging/Logger";
3
+ import { NotificationLevel } from "../../../../domain/notification/model/notification";
4
+ interface CreateNotificationFunctionArgs {
5
+ readonly aggregateId?: string;
6
+ readonly level: NotificationLevel;
7
+ readonly bodyI18nKey: string;
8
+ readonly titleI18nKey?: string;
9
+ }
10
+ interface CreateNotificationFunction {
11
+ (args: CreateNotificationFunctionArgs): Promise<void>;
12
+ }
13
+ interface UseCreateNotificationFunctionArgs {
14
+ readonly contextId: string;
15
+ readonly logger: Logger;
16
+ }
17
+ interface UseCreateNotificationFunction {
18
+ (args: UseCreateNotificationFunctionArgs): [create: CreateNotificationFunction, status: CommandStatus];
19
+ }
20
+ declare const useCreateNotification: UseCreateNotificationFunction;
21
+ export { useCreateNotification };
@@ -0,0 +1,22 @@
1
+ import { useCommand } from "@lookiero/messaging-react";
2
+ import { useCallback } from "react";
3
+ import { v4 as uuid } from "uuid";
4
+ import { createNotification } from "../../../../domain/notification/command/createNotification";
5
+ const useCreateNotification = ({ contextId, logger }) => {
6
+ const [commandBus, status] = useCommand({ contextId });
7
+ const create = useCallback(async ({ aggregateId, level, titleI18nKey, bodyI18nKey }) => {
8
+ try {
9
+ await commandBus(createNotification({
10
+ aggregateId: aggregateId || uuid(),
11
+ level,
12
+ titleI18nKey,
13
+ bodyI18nKey,
14
+ }));
15
+ }
16
+ catch (error) {
17
+ logger.captureException(error);
18
+ }
19
+ }, [commandBus, logger]);
20
+ return [create, status];
21
+ };
22
+ export { useCreateNotification };
@@ -0,0 +1,12 @@
1
+ import { FC } from "react";
2
+ import { ToastStyle } from "../../../../ui/components/molecules/toast/Toast";
3
+ import { NotificationProjection } from "../../../projection/notification/notification";
4
+ interface NotificationItemProps {
5
+ readonly notification: NotificationProjection;
6
+ readonly onRemove: (notificationId: string) => void;
7
+ readonly autoHideTimeout?: number;
8
+ readonly testID?: string;
9
+ readonly style?: ToastStyle;
10
+ }
11
+ declare const NotificationItem: FC<NotificationItemProps>;
12
+ export { NotificationItem };
@@ -0,0 +1,24 @@
1
+ import { useI18nMessage } from "@lookiero/i18n-react";
2
+ import React from "react";
3
+ import { useCallback, useEffect } from "react";
4
+ import { Toast, ToastVariant } from "../../../../ui/components/molecules/toast/Toast";
5
+ import { NotificationLevel } from "../../../domain/notification/model/notification";
6
+ const toastVariantForNotificationLevel = {
7
+ [NotificationLevel.INFO]: ToastVariant.INFO,
8
+ [NotificationLevel.ERROR]: ToastVariant.ERROR,
9
+ [NotificationLevel.SUCCESS]: ToastVariant.SUCCESS,
10
+ };
11
+ const NotificationItem = ({ notification, onRemove, autoHideTimeout, testID = "notification-item", style: customStyle, }) => {
12
+ const title = useI18nMessage({ id: notification.titleI18nKey }) || undefined;
13
+ const body = useI18nMessage({ id: notification.bodyI18nKey || "" });
14
+ const handleOnClose = useCallback(() => onRemove(notification.id), [notification.id, onRemove]);
15
+ useEffect(() => {
16
+ if (!autoHideTimeout) {
17
+ return;
18
+ }
19
+ const hideTimeout = setTimeout(handleOnClose, autoHideTimeout);
20
+ return () => clearTimeout(hideTimeout);
21
+ }, [autoHideTimeout, handleOnClose]);
22
+ return (React.createElement(Toast, { body: body, style: customStyle, testID: testID, title: title, variant: toastVariantForNotificationLevel[notification.level], onClose: handleOnClose }));
23
+ };
24
+ export { NotificationItem };
@@ -0,0 +1,9 @@
1
+ import { FC } from "react";
2
+ import { NotificationProjection } from "../../../projection/notification/notification";
3
+ interface NotificationsProps {
4
+ readonly notifications?: NotificationProjection[];
5
+ readonly onRemove: (notificationId: string) => void;
6
+ readonly autoHideTimeout?: number;
7
+ }
8
+ declare const Notifications: FC<NotificationsProps>;
9
+ export { Notifications };
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { View } from "react-native";
3
+ import { useSafeAreaInsets } from "react-native-safe-area-context";
4
+ import { Column } from "../../../../ui/components/layouts/column/Column";
5
+ import { Row } from "../../../../ui/components/layouts/row/Row";
6
+ import { Stack } from "../../../../ui/components/layouts/stack/Stack";
7
+ import { useScreenSize } from "../../../../ui/hooks/useScreenSize";
8
+ import { NotificationItem } from "./NotificationItem";
9
+ import { style } from "./Notifications.style";
10
+ const NOTIFICATIONS_AUTOHIDE_TIMEOUT = 10000;
11
+ const Notifications = ({ notifications = [], onRemove, autoHideTimeout = NOTIFICATIONS_AUTOHIDE_TIMEOUT, }) => {
12
+ const { top: safeAreaInsetTop } = useSafeAreaInsets();
13
+ const screenSize = useScreenSize();
14
+ const isSmallDevice = screenSize === "S";
15
+ return (React.createElement(View, { pointerEvents: "box-none", style: style.notifications, testID: "notifications" },
16
+ React.createElement(Row, { style: [style.row, isSmallDevice && style.rowSmall, { paddingTop: safeAreaInsetTop }] },
17
+ React.createElement(Column, null,
18
+ React.createElement(Stack, null, notifications.map((notification) => (React.createElement(NotificationItem, { key: notification.id, autoHideTimeout: autoHideTimeout, notification: notification, style: { toast: style.toast }, testID: notification.id, onRemove: onRemove }))))))));
19
+ };
20
+ export { Notifications };
@@ -0,0 +1,36 @@
1
+ import { StyleSheet } from "react-native";
2
+ declare const style: StyleSheet.NamedStyles<any> | StyleSheet.NamedStyles<{
3
+ notifications: {
4
+ flexDirection: "column";
5
+ top: number;
6
+ width: string;
7
+ zIndex: number;
8
+ left: number;
9
+ } | {
10
+ flexDirection: "column";
11
+ top: number;
12
+ width: string;
13
+ zIndex: number;
14
+ position: "fixed";
15
+ left: number;
16
+ } | {
17
+ flexDirection: "column";
18
+ top: number;
19
+ width: string;
20
+ zIndex: number;
21
+ position: "absolute";
22
+ left: number;
23
+ };
24
+ row: {
25
+ flex: number;
26
+ justifyContent: "center";
27
+ };
28
+ rowSmall: {
29
+ paddingLeft: number;
30
+ paddingRight: number;
31
+ };
32
+ toast: {
33
+ marginTop: number;
34
+ };
35
+ }>;
36
+ export { style };
@@ -0,0 +1,31 @@
1
+ import { Platform, StyleSheet } from "react-native";
2
+ import { theme } from "../../../../../infrastructure/ui/theme/theme";
3
+ const { spaceM } = theme();
4
+ const style = StyleSheet.create({
5
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
6
+ // @ts-ignore
7
+ notifications: {
8
+ left: 0,
9
+ ...Platform.select({
10
+ web: { position: "fixed" },
11
+ ios: { position: "absolute" },
12
+ android: { position: "absolute" },
13
+ }),
14
+ flexDirection: "column",
15
+ top: 0,
16
+ width: "100%",
17
+ zIndex: 20,
18
+ },
19
+ row: {
20
+ flex: 1,
21
+ justifyContent: "center",
22
+ },
23
+ rowSmall: {
24
+ paddingLeft: spaceM,
25
+ paddingRight: spaceM,
26
+ },
27
+ toast: {
28
+ marginTop: spaceM,
29
+ },
30
+ });
31
+ export { style };
@@ -24,8 +24,9 @@ const ModalNotificationItem = ({ visible, notification, onRemove, testID = "moda
24
24
  }, [notification.id, onRemove]);
25
25
  return (React.createElement(Modal, { testID: testID, visible: visible, onClose: handleOnClose },
26
26
  React.createElement(View, { style: style.modal },
27
- React.createElement(Text, { align: ALIGN.CENTER, level: 1 }, titleText),
28
- React.createElement(Text, { level: 3, style: style.modalDescription }, bodyText),
29
- React.createElement(Button, { style: style.button, onPress: handleOnClose }, acceptText))));
27
+ React.createElement(Text, { align: ALIGN.CENTER, level: 1, style: style.title }, titleText),
28
+ React.createElement(Text, { level: 3, style: style.description }, bodyText),
29
+ React.createElement(Button, { style: style.button, testID: "modal-notification-button", onPress: handleOnClose },
30
+ React.createElement(Text, { align: ALIGN.CENTER, level: 3, selectable: false, style: style.buttonText, action: true, upperCase: true }, acceptText)))));
30
31
  };
31
32
  export { ModalNotificationItem };
@@ -2,12 +2,19 @@ declare const style: {
2
2
  button: {
3
3
  flex: number;
4
4
  };
5
- modal: {
6
- padding: number;
5
+ buttonText: {
6
+ width: string;
7
7
  };
8
- modalDescription: {
8
+ description: {
9
9
  marginVertical: number;
10
10
  textAlign: "center";
11
+ width: string;
12
+ };
13
+ modal: {
14
+ padding: number;
15
+ };
16
+ title: {
17
+ width: string;
11
18
  };
12
19
  };
13
20
  export { style };
@@ -5,12 +5,19 @@ const style = StyleSheet.create({
5
5
  button: {
6
6
  flex: 0,
7
7
  },
8
- modal: {
9
- padding: spaceXL,
8
+ buttonText: {
9
+ width: "100%",
10
10
  },
11
- modalDescription: {
11
+ description: {
12
12
  marginVertical: spaceXL,
13
13
  textAlign: "center",
14
+ width: "100%",
15
+ },
16
+ modal: {
17
+ padding: spaceXL,
18
+ },
19
+ title: {
20
+ width: "100%",
14
21
  },
15
22
  });
16
23
  export { style };
@@ -0,0 +1,13 @@
1
+ import { TrackingPage } from "../../../infrastructure/tracking/tracking";
2
+ import { Country } from "../../../projection/shared/country";
3
+ interface UsePageViewFunctionArgs {
4
+ readonly page: TrackingPage;
5
+ readonly country: Country;
6
+ readonly checkoutId?: string;
7
+ readonly checkoutItemId?: string;
8
+ }
9
+ interface UsePageViewFunction {
10
+ (agrs: UsePageViewFunctionArgs): void;
11
+ }
12
+ declare const usePageView: UsePageViewFunction;
13
+ export { usePageView };
@@ -0,0 +1,27 @@
1
+ import { useLayoutEffect } from "react";
2
+ import { PROJECT } from "../../../infrastructure/tracking/tracking";
3
+ import { TrackingEvent, TrackingEventCategory } from "../tracking";
4
+ import { useEmitUserEvent } from "./useEmitUserEvent";
5
+ const usePageView = ({ page, country, checkoutId, checkoutItemId }) => {
6
+ const emitUserEvent = useEmitUserEvent();
7
+ useLayoutEffect(() => {
8
+ if (!checkoutId) {
9
+ return;
10
+ }
11
+ const baseTrackingEvent = {
12
+ event: TrackingEvent.PAGEVIEW,
13
+ eventCategory: TrackingEventCategory.NAVIGATION,
14
+ section: `${PROJECT}_${page}`,
15
+ store: country,
16
+ checkoutId,
17
+ };
18
+ const pageViewTrackingEvent = checkoutItemId
19
+ ? {
20
+ ...baseTrackingEvent,
21
+ checkoutItemId,
22
+ }
23
+ : baseTrackingEvent;
24
+ emitUserEvent(pageViewTrackingEvent);
25
+ }, [checkoutId, checkoutItemId, country, emitUserEvent, page]);
26
+ };
27
+ export { usePageView };
@@ -0,0 +1,6 @@
1
+ declare const style: {
2
+ error: {
3
+ color: string;
4
+ };
5
+ };
6
+ export { style };
@@ -0,0 +1,9 @@
1
+ import { StyleSheet } from "react-native";
2
+ import { theme } from "../../../../../infrastructure/ui/theme/theme";
3
+ const { colorPrimary } = theme();
4
+ const style = StyleSheet.create({
5
+ error: {
6
+ color: colorPrimary,
7
+ },
8
+ });
9
+ export { style };
@@ -6,7 +6,7 @@ const MIN_HEIGHT = 56;
6
6
  const MAX_HEIGHT = 242; // 10 lines
7
7
  const { colorGrayscaleL } = theme();
8
8
  const clamp = (min, max, value) => Math.min(Math.max(min, value), max);
9
- const Input = ({ minHeight = MIN_HEIGHT, maxHeight = MAX_HEIGHT, style: customStyle, placeholderTextColor = colorGrayscaleL, onChange, onContentSizeChange, value, multiline, ...restOfProps }) => {
9
+ const Input = ({ minHeight = MIN_HEIGHT, maxHeight = MAX_HEIGHT, style: customStyle, placeholderTextColor = colorGrayscaleL, onChange, onContentSizeChange, value, multiline, testID = "input", ...restOfProps }) => {
10
10
  const [height, setHeight] = useState(minHeight);
11
11
  // When content height has became smaller the onContentSizeChange does in fact triggered but the internal height is incorrect.
12
12
  const handleOnContentSizeChange = useCallback((event) => {
@@ -32,6 +32,6 @@ const Input = ({ minHeight = MIN_HEIGHT, maxHeight = MAX_HEIGHT, style: customSt
32
32
  }, [maxHeight, minHeight, multiline]);
33
33
  useLayoutEffect(handleOnContentSizeChangeWeb, [handleOnContentSizeChangeWeb, value]);
34
34
  const textInputRef = useRef(null);
35
- return (React.createElement(TextInput, { ...restOfProps, ref: textInputRef, multiline: multiline, numberOfLines: !!multiline ? undefined : 1, placeholderTextColor: placeholderTextColor, style: [style.input, customStyle, { height }], testID: "input", textAlignVertical: "top", value: value, onChange: onChange, onContentSizeChange: handleOnContentSizeChange }));
35
+ return (React.createElement(TextInput, { ref: textInputRef, accessibilityLabel: testID, multiline: multiline, numberOfLines: !!multiline ? undefined : 1, placeholderTextColor: placeholderTextColor, style: [style.input, customStyle, { height }], testID: testID, textAlignVertical: "top", value: value, accessible: true, onChange: onChange, onContentSizeChange: handleOnContentSizeChange, ...restOfProps }));
36
36
  };
37
37
  export { Input };
@@ -75,7 +75,7 @@ const Modal = ({ children, visible, header, footer, portalHostName, onClose, sho
75
75
  (header || showCloseButton) && (React.createElement(View, { style: [style.header, customStyle?.header] },
76
76
  React.createElement(View, null, header),
77
77
  showCloseButton && (React.createElement(ButtonIcon, { name: "close", style: { button: customStyle?.closeButton }, onPress: onClose })))),
78
- React.createElement(ModalContentView, null,
78
+ React.createElement(ModalContentView, { keyboardShouldPersistTaps: "handled" },
79
79
  React.createElement(View, { style: {
80
80
  paddingBottom: safeAreaInsetBottom +
81
81
  (Platform.OS !== "ios" ? spaceXL : 0) +
@@ -1,10 +1,11 @@
1
1
  import { animated, useSpring } from "@react-spring/native";
2
2
  import React from "react";
3
- import { View, Pressable } from "react-native";
3
+ import { TouchableHighlight, View } from "react-native";
4
4
  import { theme } from "../../../../../infrastructure/ui/theme/theme";
5
5
  import { style } from "./Bullets.style";
6
6
  const { colorContent, colorGrayscaleM } = theme();
7
- const MAX = 5;
7
+ const colorTransparent = "rgba(0,0,0,0)";
8
+ const MAX = 7;
8
9
  const DIAMETER_MAX = 8;
9
10
  const DIAMETER_MIN = 2;
10
11
  const Bullet = ({ index, activeIndex, maxBullets, onChange }) => {
@@ -13,7 +14,7 @@ const Bullet = ({ index, activeIndex, maxBullets, onChange }) => {
13
14
  const diameter = delta > 1 ? DIAMETER_MAX - delta * DIAMETER_MIN : DIAMETER_MAX;
14
15
  const color = delta === 0 ? colorContent : colorGrayscaleM;
15
16
  const springs = useSpring({ diameter, color });
16
- return delta >= pivot ? null : (React.createElement(Pressable, { onPress: () => onChange(index) },
17
+ return delta >= pivot ? null : (React.createElement(TouchableHighlight, { underlayColor: colorTransparent, onPress: () => onChange(index) },
17
18
  React.createElement(animated.View, { accessibilityState: { selected: delta === 0 }, testID: "bullet", style: [
18
19
  style.bullet,
19
20
  {
@@ -6,7 +6,7 @@ import { Modal } from "../../layouts/modal/Modal";
6
6
  import { InputField } from "../inputField/InputField";
7
7
  import { style } from "./SelectField.style";
8
8
  const { colorGrayscaleS } = theme();
9
- const SelectField = ({ title, placeholder, value, options, style: customStyle, onChange = () => void 0, ...touchableRestProps }) => {
9
+ const SelectField = ({ title, placeholder, value, options, style: customStyle, onChange = () => void 0, testID, ...touchableRestProps }) => {
10
10
  const [modalVisible, setModalVisible] = useState(false);
11
11
  const handleOnPressSelectField = useCallback(() => setModalVisible(true), []);
12
12
  const handleOnModalClose = useCallback(() => setModalVisible(false), []);
@@ -16,13 +16,13 @@ const SelectField = ({ title, placeholder, value, options, style: customStyle, o
16
16
  }, [handleOnModalClose, onChange]);
17
17
  const selectedValue = useMemo(() => options.find((option) => option.value === value), [options, value]);
18
18
  return (React.createElement(React.Fragment, null,
19
- React.createElement(TouchableHighlight, { style: customStyle?.selectField, underlayColor: colorGrayscaleS, onPress: handleOnPressSelectField, ...touchableRestProps },
19
+ React.createElement(TouchableHighlight, { accessibilityLabel: testID, style: customStyle?.selectField, testID: testID, underlayColor: colorGrayscaleS, accessible: true, onPress: handleOnPressSelectField, ...touchableRestProps },
20
20
  React.createElement(View, { pointerEvents: "none" },
21
21
  React.createElement(InputField, { editable: false, icon: "arrow-down", label: placeholder, style: customStyle?.inputField, value: selectedValue?.label }))),
22
22
  React.createElement(Modal, { testID: "select-field-modal", visible: modalVisible, scroll: true, showCloseButton: true, onClose: handleOnModalClose },
23
23
  React.createElement(View, { style: [style.modalContent, customStyle?.modalContent] },
24
24
  title && (React.createElement(Text, { level: 2, style: style.modalTitle }, title)),
25
- options.map(({ label, value: optionValue }) => (React.createElement(TouchableHighlight, { key: optionValue, disabled: value === optionValue, style: [style.option, customStyle?.option], underlayColor: colorGrayscaleS, onPress: value !== optionValue ? () => handleOnPressOption(optionValue) : undefined },
25
+ options.map(({ label, value: optionValue }) => (React.createElement(TouchableHighlight, { key: optionValue, accessibilityLabel: optionValue, disabled: value === optionValue, style: [style.option, customStyle?.option], testID: optionValue, underlayColor: colorGrayscaleS, accessible: true, onPress: value !== optionValue ? () => handleOnPressOption(optionValue) : undefined },
26
26
  React.createElement(Text, { color: value === optionValue ? COLOR.GRAYSCALE_M : COLOR.CONTENT, level: 3, style: [style.optionText, customStyle?.optionText] }, label))))))));
27
27
  };
28
28
  export { SelectField };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lookiero/checkout",
3
- "version": "3.8.0-beta.13",
3
+ "version": "3.8.0-beta.3",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -57,11 +57,8 @@
57
57
  "react": "^18.2.0",
58
58
  "react-dom": "^18.2.0",
59
59
  "react-native": "^0.71.4",
60
- "react-native-gesture-handler": "^2.12.0",
61
60
  "react-native-get-random-values": "^1.8.0",
62
61
  "react-native-web": "^0.18.11",
63
- "react-native-reanimated": "^3.3.0",
64
- "react-native-reanimated-carousel": "^3.4.0",
65
62
  "react-router-dom": "^6.8.1",
66
63
  "react-router-native": "^6.8.1"
67
64
  },
@@ -119,11 +116,8 @@
119
116
  "react-error-overlay": "^6.0.9",
120
117
  "react-native": "^0.71.3",
121
118
  "react-native-adjust": "^4.33.0",
122
- "react-native-gesture-handler": "^2.12.0",
123
119
  "react-native-get-random-values": "^1.8.0",
124
120
  "react-native-web": "^0.18.11",
125
- "react-native-reanimated": "^3.3.0",
126
- "react-native-reanimated-carousel": "^3.4.0",
127
121
  "react-router-dom": "^6.8.1",
128
122
  "react-router-native": "^6.8.1",
129
123
  "react-test-renderer": "^18.0.0",
@@ -1,15 +0,0 @@
1
- import { FC, ReactNode, Ref } from "react";
2
- import { GestureType, ScrollView } from "react-native-gesture-handler";
3
- interface ContextShape {
4
- readonly scrollViewRef: Ref<ScrollView>;
5
- readonly panGestureRef: Ref<GestureType>;
6
- }
7
- interface ScrollViewRefContextProviderProps {
8
- readonly children: ReactNode;
9
- }
10
- declare const ScrollViewRefContextProvider: FC<ScrollViewRefContextProviderProps>;
11
- interface UseScrollViewRefFunction {
12
- (): ContextShape;
13
- }
14
- declare const useScrollViewRef: UseScrollViewRefFunction;
15
- export { useScrollViewRef, ScrollViewRefContextProvider };
@@ -1,14 +0,0 @@
1
- import React, { createContext, useContext, useRef } from "react";
2
- import invariant from "tiny-invariant";
3
- const ScrollViewRefContext = createContext(null);
4
- const ScrollViewRefContextProvider = ({ children }) => {
5
- const scrollViewRef = useRef(null);
6
- const panGestureRef = useRef(null);
7
- return (React.createElement(ScrollViewRefContext.Provider, { value: { scrollViewRef, panGestureRef } }, children));
8
- };
9
- const useScrollViewRef = () => {
10
- const ref = useContext(ScrollViewRefContext);
11
- invariant(ref, "Your are trying to use the useScrollViewRef hook without wrapping your app with the <ScrollViewRefContextProvider>.");
12
- return ref;
13
- };
14
- export { useScrollViewRef, ScrollViewRefContextProvider };
@@ -1,11 +0,0 @@
1
- /// <reference types="react" />
2
- import { TCarouselProps } from "react-native-reanimated-carousel";
3
- type CarouselRenderItem<T> = TCarouselProps<T>["renderItem"];
4
- interface CarouselProps<T> {
5
- readonly data: T[];
6
- readonly children: CarouselRenderItem<T>;
7
- readonly onActiveIndexChanged?: (index: number) => void;
8
- }
9
- declare const Carousel: <T>({ data, children, onActiveIndexChanged }: CarouselProps<T>) => JSX.Element;
10
- export type { CarouselRenderItem };
11
- export { Carousel };
@@ -1,31 +0,0 @@
1
- import React, { useCallback, useRef, useState } from "react";
2
- import { View } from "react-native";
3
- import { GestureHandlerRootView } from "react-native-gesture-handler";
4
- import RNRCarousel from "react-native-reanimated-carousel";
5
- import { Bullets } from "../slider/Bullets";
6
- const Carousel = ({ data, children, onActiveIndexChanged }) => {
7
- const [carouselDimensions, setCarouselDimensions] = useState();
8
- const handleOnLayout = useCallback(({ nativeEvent: { layout: { width, height }, }, }) => setCarouselDimensions({ width, height }), []);
9
- const ref = React.useRef(null);
10
- const [activeIndex, setActiveIndex] = useState(0);
11
- const activeIndexRef = useRef(activeIndex);
12
- activeIndexRef.current = activeIndex;
13
- const handleOnActiveChanged = useCallback((index) => ref.current?.scrollTo({ index, animated: true }), []);
14
- const handleOnProgressChanged = useCallback(
15
- // eslint-disable-next-line @typescript-eslint/naming-convention
16
- (_offsetProgress, absoluteProgress) => {
17
- const index = Math.round(absoluteProgress);
18
- if (activeIndexRef.current === index) {
19
- return;
20
- }
21
- setActiveIndex(index);
22
- onActiveIndexChanged?.(index);
23
- }, [onActiveIndexChanged]);
24
- return (React.createElement(React.Fragment, null,
25
- React.createElement(View, { style: { flex: 1 }, onLayout: handleOnLayout }, carouselDimensions && (React.createElement(GestureHandlerRootView, { style: { flex: 1 } },
26
- React.createElement(RNRCarousel, { ref: ref, data: data, height: carouselDimensions.height, loop: false, renderItem: children, width: carouselDimensions.width, panGestureHandlerProps: {
27
- activeOffsetX: [-10, 10],
28
- }, onProgressChange: handleOnProgressChanged })))),
29
- React.createElement(Bullets, { activeIndex: activeIndex, count: data.length, onChange: handleOnActiveChanged })));
30
- };
31
- export { Carousel };
@@ -1,15 +0,0 @@
1
- declare const style: {
2
- carousel: {
3
- flex: number;
4
- flexDirection: "row";
5
- height: string;
6
- };
7
- carouselItem: {
8
- flex: number;
9
- };
10
- container: {
11
- flex: number;
12
- overflow: "hidden";
13
- };
14
- };
15
- export { style };
@@ -1,7 +0,0 @@
1
- import { StyleSheet } from "react-native";
2
- const style = StyleSheet.create({
3
- carousel: { flex: 1, flexDirection: "row", height: "100%" },
4
- carouselItem: { flex: 1 },
5
- container: { flex: 1, overflow: "hidden" },
6
- });
7
- export { style };
@@ -1,25 +0,0 @@
1
- /// <reference types="react" />
2
- interface RenderItemFunctionArgs<T> {
3
- readonly item: T;
4
- readonly index: number;
5
- }
6
- interface RenderItemFunction<T> {
7
- (args: RenderItemFunctionArgs<T>): JSX.Element;
8
- }
9
- interface RenderBulletsFunctionArgs {
10
- readonly activeIndex: number;
11
- readonly count: number;
12
- readonly onChange: (index: number) => void;
13
- }
14
- interface RenderBulletsFunction {
15
- (args: RenderBulletsFunctionArgs): JSX.Element;
16
- }
17
- interface CarouselProps<T> {
18
- readonly data: T[];
19
- readonly children: RenderItemFunction<T>;
20
- readonly bullets: RenderBulletsFunction;
21
- readonly onActiveIndexChanged?: (index: number) => void;
22
- }
23
- declare const Carousel2: <T>({ data, children, bullets, onActiveIndexChanged }: CarouselProps<T>) => JSX.Element;
24
- export type { RenderItemFunction, RenderBulletsFunction };
25
- export { Carousel2 };