@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.
- package/dist/domain/checkoutBooking/event/createNotificationWhenCheckoutBookingExpired.d.ts +6 -0
- package/dist/domain/checkoutBooking/event/createNotificationWhenCheckoutBookingExpired.js +13 -0
- package/dist/index.js +1 -3
- package/dist/infrastructure/delivery/baseBootstrap.js +56 -48
- package/dist/infrastructure/ui/Root.d.ts +0 -2
- package/dist/infrastructure/ui/Root.js +2 -3
- package/dist/infrastructure/ui/hooks/useSubmitCheckout.js +2 -1
- package/dist/infrastructure/ui/i18n/i18n.d.ts +2 -1
- package/dist/infrastructure/ui/i18n/i18n.js +1 -0
- package/dist/infrastructure/ui/views/App.js +2 -1
- package/dist/infrastructure/ui/views/item/Item.js +2 -2
- package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.js +3 -1
- package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.style.d.ts +0 -1
- package/dist/infrastructure/ui/views/item/components/productVariant/ProductVariant.style.js +1 -2
- package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.js +3 -1
- package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.style.d.ts +0 -1
- package/dist/infrastructure/ui/views/summary/components/pricing/Pricing.style.js +1 -2
- package/dist/shared/notifications/infrastructure/delivery/bootstrap.d.ts +9 -1
- package/dist/shared/notifications/infrastructure/delivery/bootstrap.js +5 -1
- package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.d.ts +4 -1
- package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.js +2 -3
- package/dist/shared/notifications/infrastructure/domain/notification/react/useRemoveNotification.d.ts +4 -1
- package/dist/shared/notifications/infrastructure/domain/notification/react/useRemoveNotification.js +2 -3
- package/dist/shared/notifications/infrastructure/ui/views/Notifications.d.ts +4 -1
- package/dist/shared/notifications/infrastructure/ui/views/Notifications.js +3 -3
- package/dist/shared/notifications/projection/notification/react/useListNotifications.d.ts +4 -1
- package/dist/shared/notifications/projection/notification/react/useListNotifications.js +2 -3
- package/dist/shared/ui/components/atoms/input/Input.style.d.ts +0 -3
- package/dist/shared/ui/components/atoms/input/Input.style.js +3 -3
- package/dist/shared/ui/components/layouts/sticky/Sticky.style.d.ts +3 -0
- package/dist/shared/ui/components/layouts/sticky/Sticky.style.js +1 -0
- 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
|
|
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, }) =>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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,
|
|
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(
|
|
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,
|
|
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
|
-
|
|
149
|
-
React.createElement(
|
|
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,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from "react-native";
|
|
2
2
|
import { theme } from "../../../../theme/theme";
|
|
3
|
-
const { borderSize,
|
|
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 },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from "react-native";
|
|
2
2
|
import { theme } from "../../../../theme/theme";
|
|
3
|
-
const { colorContent,
|
|
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
|
-
|
|
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 };
|
package/dist/shared/notifications/infrastructure/domain/notification/react/useCreateNotification.js
CHANGED
|
@@ -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
|
-
|
|
6
|
-
const
|
|
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 };
|
package/dist/shared/notifications/infrastructure/domain/notification/react/useRemoveNotification.js
CHANGED
|
@@ -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
|
-
|
|
5
|
-
const
|
|
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
|
};
|
|
@@ -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
|
|
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;
|