@lookiero/checkout 0.4.5-beta.0 → 0.4.5-beta.2

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 (32) 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/index.js +1 -3
  4. package/dist/infrastructure/delivery/baseBootstrap.js +56 -48
  5. package/dist/infrastructure/ui/Root.d.ts +0 -2
  6. package/dist/infrastructure/ui/Root.js +2 -3
  7. package/dist/infrastructure/ui/hooks/useSubmitCheckout.js +2 -1
  8. package/dist/infrastructure/ui/i18n/i18n.d.ts +2 -1
  9. package/dist/infrastructure/ui/i18n/i18n.js +1 -0
  10. package/dist/infrastructure/ui/views/App.js +2 -1
  11. package/dist/infrastructure/ui/views/item/Item.js +2 -2
  12. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.js +3 -1
  13. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.style.d.ts +0 -1
  14. package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.style.js +1 -2
  15. package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.js +3 -1
  16. package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.style.d.ts +0 -1
  17. package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.style.js +1 -2
  18. package/dist/shared/notifications/infrastructure/delivery/bootstrap.d.ts +9 -1
  19. package/dist/shared/notifications/infrastructure/delivery/bootstrap.js +5 -1
  20. package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.d.ts +4 -1
  21. package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.js +2 -3
  22. package/dist/shared/notifications/infrastructure/domain/notification/react/useRemoveNotification.d.ts +4 -1
  23. package/dist/shared/notifications/infrastructure/domain/notification/react/useRemoveNotification.js +2 -3
  24. package/dist/shared/notifications/infrastructure/ui/views/Notifications.d.ts +4 -1
  25. package/dist/shared/notifications/infrastructure/ui/views/Notifications.js +3 -3
  26. package/dist/shared/notifications/projection/notification/react/useListNotifications.d.ts +4 -1
  27. package/dist/shared/notifications/projection/notification/react/useListNotifications.js +2 -3
  28. package/dist/shared/ui/components/atoms/input/Input.style.d.ts +0 -3
  29. package/dist/shared/ui/components/atoms/input/Input.style.js +3 -3
  30. package/dist/shared/ui/components/layouts/sticky/Sticky.style.d.ts +3 -0
  31. package/dist/shared/ui/components/layouts/sticky/Sticky.style.js +1 -0
  32. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import { ProcessManagerFunction } from "@lookiero/messaging";
2
+ import { CheckoutBookingExpired } from "../model/checkoutBookingExpired";
3
+ interface CreateNotificationWhenCheckoutBookingExpiredFunction extends ProcessManagerFunction<CheckoutBookingExpired> {
4
+ }
5
+ declare const createNotificationWhenCheckoutBookingExpired: CreateNotificationWhenCheckoutBookingExpiredFunction;
6
+ export { createNotificationWhenCheckoutBookingExpired };
@@ -0,0 +1,13 @@
1
+ import { v4 as uuid } from "uuid";
2
+ import { I18nMessages } from "../../../infrastructure/ui/i18n/i18n";
3
+ import { createNotification } from "../../../shared/notifications/domain/notification/command/createNotification";
4
+ import { NotificationLevel } from "../../../shared/notifications/domain/notification/model/notification";
5
+ const createNotificationWhenCheckoutBookingExpired = ({ commandBus }) => async () => {
6
+ await commandBus(createNotification({
7
+ aggregateId: uuid(),
8
+ level: NotificationLevel.ERROR,
9
+ titleI18nKey: undefined,
10
+ bodyI18nKey: I18nMessages.CHECKOUT_TOAST_BOOKING_EXPIRED,
11
+ }));
12
+ };
13
+ export { createNotificationWhenCheckoutBookingExpired };
package/dist/index.js CHANGED
@@ -3,15 +3,13 @@ import { i18n } from "@lookiero/i18n-react";
3
3
  import { bootstrap as checkoutBootstrap } from "./infrastructure/delivery/bootstrap";
4
4
  import { root } from "./infrastructure/ui/Root";
5
5
  import { viewIsCheckoutAccessibleByCustomerId, } from "./projection/checkout/viewIsCheckoutAccessibleByCustomerId";
6
- import { notificationsRoot } from "./shared/notifications";
7
6
  const bootstrap = ({ apiUrl, getAuthToken, translations }) => {
8
7
  const { Component: Messaging, queryBus } = checkoutBootstrap({ apiUrl, getAuthToken });
9
8
  const I18n = i18n({
10
9
  fetchTranslation: fetchFetchTranslation({ endpoint: translations }),
11
10
  contextId: "CheckoutI18n",
12
11
  });
13
- const Notifications = notificationsRoot();
14
- const Root = root({ Messaging, I18n, Notifications, getAuthToken });
12
+ const Root = root({ Messaging, I18n, getAuthToken });
15
13
  const isCheckoutAccessible = ({ customerId }) => queryBus(viewIsCheckoutAccessibleByCustomerId({ customerId }));
16
14
  return {
17
15
  Root,
@@ -4,7 +4,9 @@ import { START_CHECKOUT } from "../../domain/checkout/command/startCheckout";
4
4
  import { markCheckoutAsPaidHandler, startCheckoutHandler } from "../../domain/checkout/model/checkout";
5
5
  import { BLOCK_CHECKOUT_BOOKING } from "../../domain/checkoutBooking/command/blockCheckoutBooking";
6
6
  import { BOOK_CHECKOUT_BOOKING_FOR_CHECKOUT_ITEM } from "../../domain/checkoutBooking/command/bookCheckoutBookingForCheckoutItem";
7
+ import { createNotificationWhenCheckoutBookingExpired } from "../../domain/checkoutBooking/event/createNotificationWhenCheckoutBookingExpired";
7
8
  import { blockCheckoutBookingHandler, bookCheckoutBookingForCheckoutItemHandler, } from "../../domain/checkoutBooking/model/checkoutBooking";
9
+ import { CHECKOUT_BOOKING_EXPIRED } from "../../domain/checkoutBooking/model/checkoutBookingExpired";
8
10
  import { GIVE_CHECKOUT_FEEDBACK } from "../../domain/checkoutFeedback/command/giveCheckoutFeedback";
9
11
  import { giveCheckoutFeedbackHandler } from "../../domain/checkoutFeedback/model/checkoutFeedback";
10
12
  import { KEEP_CHECKOUT_ITEM } from "../../domain/checkoutItem/command/keepCheckoutItem";
@@ -26,53 +28,59 @@ import { viewPaymentFlowPayloadByCheckoutIdHandler, VIEW_PAYMENT_FLOW_PAYLOAD_BY
26
28
  import { viewPricingByCheckoutIdHandler, VIEW_PRICING_BY_CHECKOUT_ID, } from "../../projection/pricing/viewPricingByCheckoutId";
27
29
  import { listReturnQuestionsByCheckoutItemIdHandler, LIST_RETURN_QUESTIONS_BY_CHECKOUT_ITEM_ID, } from "../../projection/returnQuestion/listReturnQuestionsByCheckoutItemId";
28
30
  import { viewUiSettingByKeyHandler, VIEW_UI_SETTING_BY_KEY, } from "../../projection/uiSetting/viewUiSettingByKey";
31
+ import { bootstrapWithBuilder as bootstrapNotifications } from "../../shared/notifications/infrastructure/delivery/bootstrap";
32
+ import { inMemoryStorageNotifications } from "../../shared/notifications/infrastructure/persistence/inMemoryStorageNotifications";
29
33
  const MESSAGING_CONTEXT_ID = "Checkout";
30
- const baseBootstrap = ({ checkoutByIdView, firstAvailableCheckoutByCustomerIdView, isCheckoutEnabledByCustomerIdView, fiveItemsDiscountByCustomerIdView, checkoutItemByIdView, returnQuestionsByCheckoutItemIdView, bookedProductsVariantsForCheckoutItemView, checkoutBookingByIdView, pricingByCheckoutIdView, paymentFlowPayloadByCheckoutIdView, checkoutQuestionsByCheckoutIdView, uiSettingByKeyView, getUiSetting, saveUiSetting, uiSettingsDependencies, getCheckout, saveCheckout, checkoutsDependencies, getCheckoutItem, saveCheckoutItem, checkoutItemsDependencies, getCheckoutBooking, saveCheckoutBooking, checkoutBookingsDependencies, getCheckoutFeedback, saveCheckoutFeedback, checkoutFeedbacksDependencies, }) => messagingBootstrap({ id: MESSAGING_CONTEXT_ID })
31
- .query(VIEW_FIVE_ITEMS_DISCOUNT_BY_CUSTOMER_ID, viewFiveItemsDiscountByCustomerIdHandler, {
32
- view: fiveItemsDiscountByCustomerIdView,
33
- })
34
- .query(VIEW_CHECKOUT_BY_ID, viewCheckoutByIdHandler, {
35
- view: checkoutByIdView,
36
- })
37
- .query(VIEW_FIRST_AVAILABLE_CHECKOUT_BY_CUSTOMER_ID, viewFirstAvailableCheckoutByCustomerIdHandler, {
38
- view: firstAvailableCheckoutByCustomerIdView,
39
- })
40
- .query(VIEW_IS_CHECKOUT_ENABLED_BY_CUSTOMER_ID, viewIsCheckoutEnabledByCustomerIdHandler, {
41
- view: isCheckoutEnabledByCustomerIdView,
42
- })
43
- .query(VIEW_IS_CHECKOUT_ACCESSIBLE_BY_CUSTOMER_ID, viewIsCheckoutAccessibleByCustomerIdHandler)
44
- .command(START_CHECKOUT, startCheckoutHandler)(getCheckout, saveCheckout, ...checkoutsDependencies)
45
- .command(MARK_CHECKOUT_AS_PAID, markCheckoutAsPaidHandler)(getCheckout, saveCheckout, ...checkoutsDependencies)
46
- .query(VIEW_CHECKOUT_ITEM_BY_ID, viewCheckoutItemByIdHandler, {
47
- view: checkoutItemByIdView,
48
- })
49
- .query(LIST_RETURN_QUESTIONS_BY_CHECKOUT_ITEM_ID, listReturnQuestionsByCheckoutItemIdHandler, {
50
- view: returnQuestionsByCheckoutItemIdView,
51
- })
52
- .command(KEEP_CHECKOUT_ITEM, keepCheckoutItemHandler)(getCheckoutItem, saveCheckoutItem, ...checkoutItemsDependencies)
53
- .command(RETURN_CHECKOUT_ITEM, returnCheckoutItemHandler)(getCheckoutItem, saveCheckoutItem, ...checkoutItemsDependencies)
54
- .command(REPLACE_CHECKOUT_ITEM, replaceCheckoutItemHandler)(getCheckoutItem, saveCheckoutItem, ...checkoutItemsDependencies)
55
- .query(VIEW_PRICING_BY_CHECKOUT_ID, viewPricingByCheckoutIdHandler, {
56
- view: pricingByCheckoutIdView,
57
- })
58
- .query(VIEW_PAYMENT_FLOW_PAYLOAD_BY_CHECKOUT_ID, viewPaymentFlowPayloadByCheckoutIdHandler, {
59
- view: paymentFlowPayloadByCheckoutIdView,
60
- })
61
- .query(LIST_CHECKOUT_QUESTIONS_BY_CHECKOUT_ID, listCheckoutQuestionsByCheckoutIdHandler, {
62
- view: checkoutQuestionsByCheckoutIdView,
63
- })
64
- .query(VIEW_CHECKOUT_BOOKING_BY_ID, viewCheckoutBookingByIdHandler, {
65
- view: checkoutBookingByIdView,
66
- })
67
- .query(VIEW_BOOKED_PRODUCT_VARIANTS_FOR_CHECKOUT_ITEM, viewBookedProductsVariantsForCheckoutItemHandler, {
68
- view: bookedProductsVariantsForCheckoutItemView,
69
- })
70
- .command(BOOK_CHECKOUT_BOOKING_FOR_CHECKOUT_ITEM, bookCheckoutBookingForCheckoutItemHandler)(getCheckoutBooking, saveCheckoutBooking, ...checkoutBookingsDependencies)
71
- .command(BLOCK_CHECKOUT_BOOKING, blockCheckoutBookingHandler)(getCheckoutBooking, saveCheckoutBooking, ...checkoutBookingsDependencies)
72
- .command(GIVE_CHECKOUT_FEEDBACK, giveCheckoutFeedbackHandler)(getCheckoutFeedback, saveCheckoutFeedback, ...checkoutFeedbacksDependencies)
73
- .query(VIEW_UI_SETTING_BY_KEY, viewUiSettingByKeyHandler, {
74
- view: uiSettingByKeyView,
75
- })
76
- .command(UPDATE_UI_SETTING, updateUiSettingHandler)(getUiSetting, saveUiSetting, ...uiSettingsDependencies)
77
- .build();
34
+ const baseBootstrap = ({ checkoutByIdView, firstAvailableCheckoutByCustomerIdView, isCheckoutEnabledByCustomerIdView, fiveItemsDiscountByCustomerIdView, checkoutItemByIdView, returnQuestionsByCheckoutItemIdView, bookedProductsVariantsForCheckoutItemView, checkoutBookingByIdView, pricingByCheckoutIdView, paymentFlowPayloadByCheckoutIdView, checkoutQuestionsByCheckoutIdView, uiSettingByKeyView, getUiSetting, saveUiSetting, uiSettingsDependencies, getCheckout, saveCheckout, checkoutsDependencies, getCheckoutItem, saveCheckoutItem, checkoutItemsDependencies, getCheckoutBooking, saveCheckoutBooking, checkoutBookingsDependencies, getCheckoutFeedback, saveCheckoutFeedback, checkoutFeedbacksDependencies, }) => {
35
+ let messaging = messagingBootstrap({ id: MESSAGING_CONTEXT_ID })
36
+ .query(VIEW_FIVE_ITEMS_DISCOUNT_BY_CUSTOMER_ID, viewFiveItemsDiscountByCustomerIdHandler, {
37
+ view: fiveItemsDiscountByCustomerIdView,
38
+ })
39
+ .query(VIEW_CHECKOUT_BY_ID, viewCheckoutByIdHandler, {
40
+ view: checkoutByIdView,
41
+ })
42
+ .query(VIEW_FIRST_AVAILABLE_CHECKOUT_BY_CUSTOMER_ID, viewFirstAvailableCheckoutByCustomerIdHandler, {
43
+ view: firstAvailableCheckoutByCustomerIdView,
44
+ })
45
+ .query(VIEW_IS_CHECKOUT_ENABLED_BY_CUSTOMER_ID, viewIsCheckoutEnabledByCustomerIdHandler, {
46
+ view: isCheckoutEnabledByCustomerIdView,
47
+ })
48
+ .query(VIEW_IS_CHECKOUT_ACCESSIBLE_BY_CUSTOMER_ID, viewIsCheckoutAccessibleByCustomerIdHandler)
49
+ .command(START_CHECKOUT, startCheckoutHandler)(getCheckout, saveCheckout, ...checkoutsDependencies)
50
+ .command(MARK_CHECKOUT_AS_PAID, markCheckoutAsPaidHandler)(getCheckout, saveCheckout, ...checkoutsDependencies)
51
+ .query(VIEW_CHECKOUT_ITEM_BY_ID, viewCheckoutItemByIdHandler, {
52
+ view: checkoutItemByIdView,
53
+ })
54
+ .query(LIST_RETURN_QUESTIONS_BY_CHECKOUT_ITEM_ID, listReturnQuestionsByCheckoutItemIdHandler, {
55
+ view: returnQuestionsByCheckoutItemIdView,
56
+ })
57
+ .command(KEEP_CHECKOUT_ITEM, keepCheckoutItemHandler)(getCheckoutItem, saveCheckoutItem, ...checkoutItemsDependencies)
58
+ .command(RETURN_CHECKOUT_ITEM, returnCheckoutItemHandler)(getCheckoutItem, saveCheckoutItem, ...checkoutItemsDependencies)
59
+ .command(REPLACE_CHECKOUT_ITEM, replaceCheckoutItemHandler)(getCheckoutItem, saveCheckoutItem, ...checkoutItemsDependencies)
60
+ .query(VIEW_PRICING_BY_CHECKOUT_ID, viewPricingByCheckoutIdHandler, {
61
+ view: pricingByCheckoutIdView,
62
+ })
63
+ .query(VIEW_PAYMENT_FLOW_PAYLOAD_BY_CHECKOUT_ID, viewPaymentFlowPayloadByCheckoutIdHandler, {
64
+ view: paymentFlowPayloadByCheckoutIdView,
65
+ })
66
+ .query(LIST_CHECKOUT_QUESTIONS_BY_CHECKOUT_ID, listCheckoutQuestionsByCheckoutIdHandler, {
67
+ view: checkoutQuestionsByCheckoutIdView,
68
+ })
69
+ .query(VIEW_CHECKOUT_BOOKING_BY_ID, viewCheckoutBookingByIdHandler, {
70
+ view: checkoutBookingByIdView,
71
+ })
72
+ .query(VIEW_BOOKED_PRODUCT_VARIANTS_FOR_CHECKOUT_ITEM, viewBookedProductsVariantsForCheckoutItemHandler, {
73
+ view: bookedProductsVariantsForCheckoutItemView,
74
+ })
75
+ .command(BOOK_CHECKOUT_BOOKING_FOR_CHECKOUT_ITEM, bookCheckoutBookingForCheckoutItemHandler)(getCheckoutBooking, saveCheckoutBooking, ...checkoutBookingsDependencies)
76
+ .command(BLOCK_CHECKOUT_BOOKING, blockCheckoutBookingHandler)(getCheckoutBooking, saveCheckoutBooking, ...checkoutBookingsDependencies)
77
+ .command(GIVE_CHECKOUT_FEEDBACK, giveCheckoutFeedbackHandler)(getCheckoutFeedback, saveCheckoutFeedback, ...checkoutFeedbacksDependencies)
78
+ .query(VIEW_UI_SETTING_BY_KEY, viewUiSettingByKeyHandler, {
79
+ view: uiSettingByKeyView,
80
+ })
81
+ .command(UPDATE_UI_SETTING, updateUiSettingHandler)(getUiSetting, saveUiSetting, ...uiSettingsDependencies)
82
+ .processManager(CHECKOUT_BOOKING_EXPIRED, createNotificationWhenCheckoutBookingExpired);
83
+ messaging = bootstrapNotifications({ messaging, storage: inMemoryStorageNotifications() });
84
+ return messaging.build();
85
+ };
78
86
  export { baseBootstrap, MESSAGING_CONTEXT_ID };
@@ -1,11 +1,9 @@
1
1
  import { I18n } from "@lookiero/i18n-react";
2
2
  import { MessagingRoot } from "@lookiero/messaging-react/bootstrap";
3
3
  import { FC } from "react";
4
- import { NotificationsRoot } from "../../shared/notifications";
5
4
  import { Menu } from "./views/header/Header";
6
5
  interface RootFunctionArgs {
7
6
  readonly Messaging: MessagingRoot;
8
- readonly Notifications: NotificationsRoot;
9
7
  readonly I18n: I18n;
10
8
  readonly development?: boolean;
11
9
  readonly getAuthToken: () => Promise<string>;
@@ -1,12 +1,11 @@
1
1
  import React, { useCallback } from "react";
2
2
  import { Platform } from "react-native";
3
3
  import { Routing } from "./routing/Routing";
4
- const root = ({ Messaging, I18n, Notifications, getAuthToken, development }) =>
4
+ const root = ({ Messaging, I18n, getAuthToken, development }) =>
5
5
  // eslint-disable-next-line react/display-name, react/prop-types
6
6
  ({ basePath, locale = "en", customerId, menu, onNotAccessible, useRedirect }) => {
7
7
  const handleOnI18nError = useCallback(() => void 0, []);
8
8
  return (React.createElement(Messaging, { includeReactQueryDevTools: Platform.OS === "web" },
9
- React.createElement(Notifications, { includeReactQueryDevTools: Platform.OS === "web" },
10
- React.createElement(Routing, { I18n: I18n, basePath: basePath, customerId: customerId, getAuthToken: getAuthToken, locale: locale, menu: menu, useRedirect: useRedirect, onI18nError: development ? undefined : handleOnI18nError, onNotAccessible: onNotAccessible }))));
9
+ React.createElement(Routing, { I18n: I18n, basePath: basePath, customerId: customerId, getAuthToken: getAuthToken, locale: locale, menu: menu, useRedirect: useRedirect, onI18nError: development ? undefined : handleOnI18nError, onNotAccessible: onNotAccessible })));
11
10
  };
12
11
  export { root };
@@ -3,13 +3,14 @@ import { ChargeStatus } from "@lookiero/payments-front/build/infrastructure/Chec
3
3
  import { useCallback, useMemo, useState } from "react";
4
4
  import { useCreateNotification } from "../../../shared/notifications";
5
5
  import { NotificationLevel } from "../../../shared/notifications/domain/notification/model/notification";
6
+ import { MESSAGING_CONTEXT_ID } from "../../delivery/baseBootstrap";
6
7
  import { useMarkCheckoutAsPaid } from "../../domain/checkout/react/useMarkCheckoutAsPaid";
7
8
  import { useBlockCheckoutBooking } from "../../domain/checkoutBooking/react/useBlockCheckoutBooking";
8
9
  import { I18nMessages } from "../i18n/i18n";
9
10
  const useSubmitCheckout = ({ checkoutId, checkoutBookingId, paymentFlowRef, onError }) => {
10
11
  const [markAsPaid, markAsPaidStatus] = useMarkCheckoutAsPaid({ checkoutId });
11
12
  const [blockCheckoutBooking, blockCheckoutBookingStatus] = useBlockCheckoutBooking({ checkoutBookingId });
12
- const [createNotification] = useCreateNotification();
13
+ const [createNotification] = useCreateNotification({ contextId: MESSAGING_CONTEXT_ID });
13
14
  const [startLegacyBoxCheckoutStatus, setStartLegacyBoxCheckoutStatus] = useState("idle");
14
15
  const submitCheckout = useCallback(async ({ paymentFlowPayload }) => {
15
16
  try {
@@ -57,6 +57,7 @@ declare enum I18nMessages {
57
57
  CHECKOUT_DELIVERY_BANNER = "checkout.delivery_banner",
58
58
  HEADER_CHECKOUT_TITLE = "header.checkout_title",
59
59
  HEADER_COMPLETE_CHECKOUT_TITLE = "header.complete_checkout_title",
60
- FEEDBACK_BUTTON = "feedback.button"
60
+ FEEDBACK_BUTTON = "feedback.button",
61
+ CHECKOUT_TOAST_BOOKING_EXPIRED = "checkout.toast_booking_expired"
61
62
  }
62
63
  export { I18nMessages, COLOR_I18N_PREFIX };
@@ -59,5 +59,6 @@ var I18nMessages;
59
59
  I18nMessages["HEADER_CHECKOUT_TITLE"] = "header.checkout_title";
60
60
  I18nMessages["HEADER_COMPLETE_CHECKOUT_TITLE"] = "header.complete_checkout_title";
61
61
  I18nMessages["FEEDBACK_BUTTON"] = "feedback.button";
62
+ I18nMessages["CHECKOUT_TOAST_BOOKING_EXPIRED"] = "checkout.toast_booking_expired";
62
63
  })(I18nMessages || (I18nMessages = {}));
63
64
  export { I18nMessages, COLOR_I18N_PREFIX };
@@ -2,10 +2,11 @@ import { PortalProvider } from "@gorhom/portal";
2
2
  import React from "react";
3
3
  import { SafeAreaProvider } from "react-native-safe-area-context";
4
4
  import { Notifications } from "../../../shared/notifications/infrastructure/ui/views/Notifications";
5
+ import { MESSAGING_CONTEXT_ID } from "../../delivery/baseBootstrap";
5
6
  import { style } from "./App.style";
6
7
  import { Header } from "./header/Header";
7
8
  const App = ({ customerId, menu, children }) => (React.createElement(SafeAreaProvider, null,
8
9
  React.createElement(Header, { customerId: customerId, menu: menu, style: style.header }),
9
- React.createElement(Notifications, null),
10
+ React.createElement(Notifications, { contextId: MESSAGING_CONTEXT_ID }),
10
11
  React.createElement(PortalProvider, null, children)));
11
12
  export { App };
@@ -145,7 +145,7 @@ const Item = ({ customerId }) => {
145
145
  React.createElement(ProductVariantDescription, { brand: brand, color: color, name: name, price: price, size: productVariantSelected.size }),
146
146
  checkoutItem.status === CheckoutItemStatus.RETURNED && (React.createElement(View, { style: style.feedbackContainer },
147
147
  React.createElement(ReturnQuestionsFeedback, { returnQuestions: returnQuestions || [], onEditFeedback: handleOnEditFeedback })))))),
148
- !customerDecissionMade && (React.createElement(ItemActions, { keepButtonLoading: keepCheckoutItemStatus === CommandStatus.LOADING, productVariantSelected: productVariantSelected, productVariants: bookedProductsVariants?.productVariants || [], returnButtonLoading: returnCheckoutItemStatus === CommandStatus.LOADING, sizeSelectorDisabled: replaceCheckoutItemStatus === CommandStatus.LOADING, onKeep: handleOnKeep, onLayout: handleOnStickyLayout, onReplace: handleOnReplace, onReturn: handleOnReturn, onSizeSelectorPress: handleOnShowSizeWithoutStockModal })),
149
- React.createElement(ReturnQuestionsForm, { checkoutItemPrice: checkoutItem.price, productVariant: checkoutItem.productVariant, returnQuestions: returnQuestions || [], visible: returnQuestionsVisible, onClose: handleOnHideReturnQuestions, onSubmit: handleOnSubmit })));
148
+ React.createElement(ReturnQuestionsForm, { checkoutItemPrice: checkoutItem.price, productVariant: checkoutItem.productVariant, returnQuestions: returnQuestions || [], visible: returnQuestionsVisible, onClose: handleOnHideReturnQuestions, onSubmit: handleOnSubmit }),
149
+ !customerDecissionMade && (React.createElement(ItemActions, { keepButtonLoading: keepCheckoutItemStatus === CommandStatus.LOADING, productVariantSelected: productVariantSelected, productVariants: bookedProductsVariants?.productVariants || [], returnButtonLoading: returnCheckoutItemStatus === CommandStatus.LOADING, sizeSelectorDisabled: replaceCheckoutItemStatus === CommandStatus.LOADING, onKeep: handleOnKeep, onLayout: handleOnStickyLayout, onReplace: handleOnReplace, onReturn: handleOnReturn, onSizeSelectorPress: handleOnShowSizeWithoutStockModal }))));
150
150
  };
151
151
  export { Item };
@@ -8,7 +8,9 @@ import { ButtonIcon } from "../../../../../../shared/ui/components/molecules/but
8
8
  import { Price } from "../../../../components/atoms/price/Price";
9
9
  import { useMediaImage } from "../../../../hooks/useMediaImage";
10
10
  import { COLOR_I18N_PREFIX, I18nMessages } from "../../../../i18n/i18n";
11
+ import { theme } from "../../../../theme/theme";
11
12
  import { IMAGE_WIDTH, style } from "./ProductVariant.style";
13
+ const { colorContent } = theme();
12
14
  const ProductVariant = ({ media, brand, name, price, size, color, status, discarded, style: customStyle, onPress, }) => {
13
15
  const uniqueText = useI18nMessage({ id: I18nMessages.ITEM_UNIQUE });
14
16
  const colorLabel = useI18nMessage({ id: color.label, prefix: COLOR_I18N_PREFIX });
@@ -23,7 +25,7 @@ const ProductVariant = ({ media, brand, name, price, size, color, status, discar
23
25
  width: IMAGE_WIDTH,
24
26
  }),
25
27
  } }),
26
- discarded && (React.createElement(Svg, { preserveAspectRatio: "none", style: style.discarded, testID: "discarded", viewBox: "0 0 100 100" },
28
+ discarded && (React.createElement(Svg, { preserveAspectRatio: "none", stroke: colorContent, style: style.discarded, testID: "discarded", viewBox: "0 0 100 100" },
27
29
  React.createElement(Line, { vectorEffect: "non-scaling-stroke", x1: "100", x2: "0", y1: "0", y2: "100" })))),
28
30
  React.createElement(View, { style: style.descriptionContainer },
29
31
  React.createElement(View, null,
@@ -15,7 +15,6 @@ declare const style: {
15
15
  height: string;
16
16
  left: number;
17
17
  position: "absolute";
18
- stroke: string;
19
18
  top: number;
20
19
  width: string;
21
20
  zIndex: number;
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from "react-native";
2
2
  import { theme } from "../../../../theme/theme";
3
- const { borderSize, colorContent, colorGrayscaleL, colorInfo, spaceXS, spaceS, spaceM } = theme();
3
+ const { borderSize, colorGrayscaleL, colorInfo, spaceXS, spaceS, spaceM } = theme();
4
4
  const IMAGE_WIDTH = 96;
5
5
  const IMAGE_HEIGHT = 120;
6
6
  const style = StyleSheet.create({
@@ -19,7 +19,6 @@ const style = StyleSheet.create({
19
19
  height: "100%",
20
20
  left: 0,
21
21
  position: "absolute",
22
- stroke: colorContent,
23
22
  top: 0,
24
23
  width: "100%",
25
24
  zIndex: 10,
@@ -6,9 +6,11 @@ import React from "react";
6
6
  import { Pressable, View } from "react-native";
7
7
  import { Price } from "../../../../components/atoms/price/Price";
8
8
  import { I18nMessages } from "../../../../i18n/i18n";
9
+ import { theme } from "../../../../theme/theme";
9
10
  import { style } from "./Pricing.style";
10
11
  import { ArrowDown } from "./icons/ArrowDown";
11
12
  import { ArrowUp } from "./icons/ArrowUp";
13
+ const { colorGrayscaleS } = theme();
12
14
  const PS_SERVICE_FREE_INDICATOR = 100;
13
15
  const Row = ({ text, level = 3, children }) => (React.createElement(View, { style: style.row },
14
16
  React.createElement(Text, { level: level, style: style.uppercase, action: true }, text),
@@ -32,7 +34,7 @@ const Pricing = ({ orderTotal, subtotal, balanceDiscount, discount, discountPerc
32
34
  const collapsedStyle = useSpring({ opacitiy: collapsed ? 1 : 0 });
33
35
  const notCollapsedStyle = useSpring({ opacitiy: collapsed ? 0 : 1 });
34
36
  return (React.createElement(Pressable, { testID: "pricing", onPress: collapsible ? onPress : null },
35
- collapsible && (React.createElement(View, { style: style.iconContainer }, collapsed ? (React.createElement(ArrowUp, { style: style.icon, testID: "arrow-up" })) : (React.createElement(ArrowDown, { style: style.icon, testID: "arrow-down" })))),
37
+ collapsible && (React.createElement(View, { style: style.iconContainer }, collapsed ? (React.createElement(ArrowUp, { stroke: colorGrayscaleS, style: style.icon, testID: "arrow-up" })) : (React.createElement(ArrowDown, { stroke: colorGrayscaleS, style: style.icon, testID: "arrow-down" })))),
36
38
  collapsed && collapsible ? (React.createElement(animated.View, { style: [style.collapsed, { opacity: collapsedStyle.opacitiy }] },
37
39
  React.createElement(View, null,
38
40
  React.createElement(Text, { level: 1, style: style.totalCollapsed, detail: true },
@@ -10,7 +10,6 @@ declare const style: {
10
10
  };
11
11
  icon: {
12
12
  height: number;
13
- stroke: string;
14
13
  width: number;
15
14
  };
16
15
  iconContainer: {
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from "react-native";
2
2
  import { theme } from "../../../../theme/theme";
3
- const { colorContent, colorGrayscaleS, spaceXS, spaceL } = theme();
3
+ const { colorContent, spaceXS, spaceL } = theme();
4
4
  const style = StyleSheet.create({
5
5
  collapsed: {
6
6
  flexDirection: "row",
@@ -13,7 +13,6 @@ const style = StyleSheet.create({
13
13
  },
14
14
  icon: {
15
15
  height: 10,
16
- stroke: colorGrayscaleS,
17
16
  width: 58,
18
17
  },
19
18
  iconContainer: {
@@ -1,3 +1,4 @@
1
+ import { BootstrapDefinition } from "@lookiero/messaging";
1
2
  import { BuildBootstrapFunctionReturn } from "@lookiero/messaging-react";
2
3
  import { NotificationDto } from "../persistence/notificationDto";
3
4
  import { Storage } from "../persistence/storage";
@@ -9,5 +10,12 @@ interface BootstrapFunction {
9
10
  (args: BootstrapFunctionArgs): BuildBootstrapFunctionReturn;
10
11
  }
11
12
  declare const bootstrap: BootstrapFunction;
13
+ interface BootstrapWithBuilderFunctionArgs extends BootstrapFunctionArgs {
14
+ readonly messaging: BootstrapDefinition<BuildBootstrapFunctionReturn>;
15
+ }
16
+ interface BootstrapWithBuilderFunction {
17
+ (args: BootstrapWithBuilderFunctionArgs): BootstrapDefinition<BuildBootstrapFunctionReturn>;
18
+ }
19
+ declare const bootstrapWithBuilder: BootstrapWithBuilderFunction;
12
20
  export type { BootstrapFunctionArgs };
13
- export { NOTIFICATIONS_MESSAGING_CONTEXT_ID, bootstrap };
21
+ export { NOTIFICATIONS_MESSAGING_CONTEXT_ID, bootstrap, bootstrapWithBuilder };
@@ -11,4 +11,8 @@ const bootstrap = ({ storage }) => messagingReactBootstrap({ id: NOTIFICATIONS_M
11
11
  .command(CREATE_NOTIFICATION, createNotificationHandler)(getNotification, saveNotification, { storage })
12
12
  .command(REMOVE_NOTIFICATION, removeNotificationHandler)(getNotification, saveNotification, { storage })
13
13
  .build();
14
- export { NOTIFICATIONS_MESSAGING_CONTEXT_ID, bootstrap };
14
+ const bootstrapWithBuilder = ({ storage, messaging }) => messaging
15
+ .query(LIST_NOTIFICATIONS, listNotificationsHandler, { view: storageListNotificationsView({ storage }) })
16
+ .command(CREATE_NOTIFICATION, createNotificationHandler)(getNotification, saveNotification, { storage })
17
+ .command(REMOVE_NOTIFICATION, removeNotificationHandler)(getNotification, saveNotification, { storage });
18
+ export { NOTIFICATIONS_MESSAGING_CONTEXT_ID, bootstrap, bootstrapWithBuilder };
@@ -9,8 +9,11 @@ interface CreateNotificationFunctionArgs {
9
9
  interface CreateNotificationFunction {
10
10
  (args: CreateNotificationFunctionArgs): Promise<void>;
11
11
  }
12
+ interface UseCreateNotificationFunctionArgs {
13
+ readonly contextId: string;
14
+ }
12
15
  interface UseCreateNotificationFunction {
13
- (): [create: CreateNotificationFunction, status: CommandStatus];
16
+ (args: UseCreateNotificationFunctionArgs): [create: CreateNotificationFunction, status: CommandStatus];
14
17
  }
15
18
  declare const useCreateNotification: UseCreateNotificationFunction;
16
19
  export { useCreateNotification };
@@ -2,9 +2,8 @@ import { useCommand } from "@lookiero/messaging-react";
2
2
  import { useCallback } from "react";
3
3
  import { v4 as uuid } from "uuid";
4
4
  import { createNotification } from "../../../../domain/notification/command/createNotification";
5
- import { NOTIFICATIONS_MESSAGING_CONTEXT_ID } from "../../../delivery/bootstrap";
6
- const useCreateNotification = () => {
7
- const [commandBus, status] = useCommand({ contextId: NOTIFICATIONS_MESSAGING_CONTEXT_ID });
5
+ const useCreateNotification = ({ contextId }) => {
6
+ const [commandBus, status] = useCommand({ contextId });
8
7
  const create = useCallback(({ aggregateId, level, titleI18nKey, bodyI18nKey }) => commandBus(createNotification({
9
8
  aggregateId: aggregateId || uuid(),
10
9
  level,
@@ -5,8 +5,11 @@ interface RemoveNotificationFunctionArgs {
5
5
  interface RemoveNotificationFunction {
6
6
  (args: RemoveNotificationFunctionArgs): Promise<void>;
7
7
  }
8
+ interface UseRemoveNotificationFunctionArgs {
9
+ readonly contextId: string;
10
+ }
8
11
  interface UseRemoveNotificationFunction {
9
- (): [remove: RemoveNotificationFunction, status: CommandStatus];
12
+ (args: UseRemoveNotificationFunctionArgs): [remove: RemoveNotificationFunction, status: CommandStatus];
10
13
  }
11
14
  declare const useRemoveNotification: UseRemoveNotificationFunction;
12
15
  export { useRemoveNotification };
@@ -1,9 +1,8 @@
1
1
  import { useCommand } from "@lookiero/messaging-react";
2
2
  import { useCallback } from "react";
3
3
  import { removeNotification } from "../../../../domain/notification/command/removeNotification";
4
- import { NOTIFICATIONS_MESSAGING_CONTEXT_ID } from "../../../delivery/bootstrap";
5
- const useRemoveNotification = () => {
6
- const [commandBus, status] = useCommand({ contextId: NOTIFICATIONS_MESSAGING_CONTEXT_ID });
4
+ const useRemoveNotification = ({ contextId }) => {
5
+ const [commandBus, status] = useCommand({ contextId });
7
6
  const remove = useCallback(({ aggregateId }) => commandBus(removeNotification({ aggregateId })), [commandBus]);
8
7
  return [remove, status];
9
8
  };
@@ -1,3 +1,6 @@
1
1
  import { FC } from "react";
2
- declare const Notifications: FC;
2
+ interface NotificationsProps {
3
+ readonly contextId: string;
4
+ }
5
+ declare const Notifications: FC<NotificationsProps>;
3
6
  export { Notifications };
@@ -2,9 +2,9 @@ import React, { useCallback } from "react";
2
2
  import { useListNotifications } from "../../../projection/notification/react/useListNotifications";
3
3
  import { useRemoveNotification } from "../../domain/notification/react/useRemoveNotification";
4
4
  import { Notifications as NotificationsTemplate } from "../components/Notifications";
5
- const Notifications = () => {
6
- const [notifications] = useListNotifications();
7
- const [remove] = useRemoveNotification();
5
+ const Notifications = ({ contextId }) => {
6
+ const [notifications] = useListNotifications({ contextId });
7
+ const [remove] = useRemoveNotification({ contextId });
8
8
  const onRemove = useCallback((id) => remove({ aggregateId: id }), [remove]);
9
9
  return React.createElement(NotificationsTemplate, { notifications: notifications, onRemove: onRemove });
10
10
  };
@@ -1,7 +1,10 @@
1
1
  import { UseQueryFunctionResult } from "@lookiero/messaging-react";
2
2
  import { ListNotificationsResult } from "../listNotifications";
3
+ interface UseListNotificationsFunctionArgs {
4
+ readonly contextId: string;
5
+ }
3
6
  interface UseListNotificationsFunction {
4
- (): UseQueryFunctionResult<ListNotificationsResult>;
7
+ (args: UseListNotificationsFunctionArgs): UseQueryFunctionResult<ListNotificationsResult>;
5
8
  }
6
9
  declare const useListNotifications: UseListNotificationsFunction;
7
10
  export { useListNotifications };
@@ -1,14 +1,13 @@
1
1
  import { useQuery } from "@lookiero/messaging-react";
2
2
  import { NOTIFICATION_CREATED } from "../../../domain/notification/model/notificationCreated";
3
3
  import { NOTIFICATION_REMOVED } from "../../../domain/notification/model/notificationRemoved";
4
- import { NOTIFICATIONS_MESSAGING_CONTEXT_ID } from "../../../infrastructure/delivery/bootstrap";
5
4
  import { listNotifications } from "../listNotifications";
6
5
  const isNotificationCreated = (event) => event.name === NOTIFICATION_CREATED;
7
6
  const isNotificationRemoved = (event) => event.name === NOTIFICATION_REMOVED;
8
7
  const shouldInvalidate = (event) => isNotificationCreated(event) || isNotificationRemoved(event);
9
- const useListNotifications = () => useQuery({
8
+ const useListNotifications = ({ contextId }) => useQuery({
10
9
  query: listNotifications(),
11
- contextId: NOTIFICATIONS_MESSAGING_CONTEXT_ID,
10
+ contextId,
12
11
  invalidation: shouldInvalidate,
13
12
  options: { staleTime: Infinity, retry: false, refetchOnWindowFocus: false },
14
13
  });
@@ -8,12 +8,9 @@ declare const style: {
8
8
  fontFamily: string;
9
9
  fontSize: number;
10
10
  letterSpacing: number;
11
- outlineStyle: string;
12
11
  paddingBottom: number;
13
12
  paddingHorizontal: number;
14
13
  paddingTop: number;
15
- textOverflow: string;
16
- whiteSpace: string;
17
14
  };
18
15
  };
19
16
  export { style, borderSize, paddingVertical };
@@ -10,12 +10,12 @@ const style = StyleSheet.create({
10
10
  fontFamily: fontMap.Body,
11
11
  fontSize: fontBodySize3,
12
12
  letterSpacing: fontBodyLetterSpacing3,
13
- outlineStyle: "none",
13
+ // outlineStyle: "none",
14
14
  paddingBottom: paddingVertical,
15
15
  paddingHorizontal: spaceM,
16
16
  paddingTop: paddingVertical,
17
- textOverflow: "ellipsis",
18
- whiteSpace: "nowrap",
17
+ // textOverflow: "ellipsis",
18
+ // whiteSpace: "nowrap",
19
19
  ...Platform.select({
20
20
  web: {
21
21
  lineHeight: fontBodyHeight3,
@@ -1,6 +1,7 @@
1
1
  import { StyleSheet } from "react-native";
2
2
  declare const style: StyleSheet.NamedStyles<any> | StyleSheet.NamedStyles<{
3
3
  sticky: {
4
+ zIndex: number;
4
5
  backgroundColor: string;
5
6
  bottom: number;
6
7
  elevation: number;
@@ -14,6 +15,7 @@ declare const style: StyleSheet.NamedStyles<any> | StyleSheet.NamedStyles<{
14
15
  shadowRadius: number;
15
16
  width: string;
16
17
  } | {
18
+ zIndex: number;
17
19
  position: "sticky";
18
20
  backgroundColor: string;
19
21
  bottom: number;
@@ -28,6 +30,7 @@ declare const style: StyleSheet.NamedStyles<any> | StyleSheet.NamedStyles<{
28
30
  shadowRadius: number;
29
31
  width: string;
30
32
  } | {
33
+ zIndex: number;
31
34
  position: "absolute";
32
35
  backgroundColor: string;
33
36
  bottom: number;
@@ -28,6 +28,7 @@ const style = StyleSheet.create({
28
28
  position: "absolute",
29
29
  },
30
30
  }),
31
+ zIndex: 1,
31
32
  },
32
33
  });
33
34
  export { style };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lookiero/checkout",
3
- "version": "0.4.5-beta.0",
3
+ "version": "0.4.5-beta.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [