@envive-ai/react-hooks 0.3.45 → 0.3.47
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/application/commerce-api.cjs +73 -3
- package/dist/application/commerce-api.d.cts +16 -1
- package/dist/application/commerce-api.d.ts +16 -1
- package/dist/application/commerce-api.js +73 -3
- package/dist/application/models/api/userEvent.d.cts +9 -2
- package/dist/application/models/api/userEvent.d.ts +9 -2
- package/dist/application/models/api/widgetText.d.cts +2 -1
- package/dist/application/models/api/widgetText.d.ts +2 -1
- package/dist/application/models/featureGates.cjs +2 -1
- package/dist/application/models/featureGates.d.cts +2 -1
- package/dist/application/models/featureGates.d.ts +2 -1
- package/dist/application/models/featureGates.js +2 -1
- package/dist/application/models/graphql/queries/getProductOptionsQuery.cjs +33 -0
- package/dist/application/models/graphql/queries/getProductOptionsQuery.d.cts +28 -0
- package/dist/application/models/graphql/queries/getProductOptionsQuery.d.ts +28 -0
- package/dist/application/models/graphql/queries/getProductOptionsQuery.js +32 -0
- package/dist/application/models/index.cjs +1 -1
- package/dist/application/models/index.js +1 -1
- package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
- package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
- package/dist/application/models/validators/validateResponse.cjs +2 -1
- package/dist/application/models/validators/validateResponse.js +2 -1
- package/dist/application/models/validators/validateUserEvent.cjs +3 -3
- package/dist/application/models/validators/validateUserEvent.js +3 -3
- package/dist/application/utils/elementObserver.d.cts +2 -2
- package/dist/application/utils/elementObserver.d.ts +2 -2
- package/dist/application/utils/index.cjs +2 -0
- package/dist/application/utils/index.d.cts +2 -1
- package/dist/application/utils/index.d.ts +2 -1
- package/dist/application/utils/index.js +2 -1
- package/dist/application/utils/messageFromAddToCartEvent.cjs +32 -0
- package/dist/application/utils/messageFromAddToCartEvent.d.cts +19 -0
- package/dist/application/utils/messageFromAddToCartEvent.d.ts +19 -0
- package/dist/application/utils/messageFromAddToCartEvent.js +31 -0
- package/dist/application/utils/widgetTextFromApiWidgetTextResponse.cjs +3 -2
- package/dist/application/utils/widgetTextFromApiWidgetTextResponse.js +3 -2
- package/dist/atoms/app/index.cjs +1 -1
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/index.js +1 -1
- package/dist/atoms/app/variant.cjs +2 -2
- package/dist/atoms/app/variant.d.cts +7 -7
- package/dist/atoms/app/variant.d.ts +7 -7
- package/dist/atoms/app/variant.js +2 -2
- package/dist/atoms/chat/chatState.d.cts +19 -19
- package/dist/atoms/chat/chatState.d.ts +19 -19
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/index.cjs +1 -1
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/index.d.ts +2 -2
- package/dist/atoms/chat/index.js +1 -1
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +6 -6
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.d.cts +3 -3
- package/dist/atoms/chat/replies.d.ts +2 -2
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/envive/enviveConfig.cjs +7 -4
- package/dist/atoms/envive/enviveConfig.d.cts +16 -14
- package/dist/atoms/envive/enviveConfig.d.ts +16 -14
- package/dist/atoms/envive/enviveConfig.js +6 -4
- package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.cjs +1 -1
- package/dist/atoms/org/graphqlConfig.d.cts +6 -6
- package/dist/atoms/org/graphqlConfig.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.js +1 -1
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.js +1 -1
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
- package/dist/atoms/search/chatSearch.cjs +1 -1
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/chatSearch.js +1 -1
- package/dist/atoms/search/searchAPI.cjs +1 -1
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/search/searchAPI.js +1 -1
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +6 -4
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +3 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +3 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.js +6 -4
- package/dist/contexts/enviveContext/enviveContext.cjs +7 -3
- package/dist/contexts/enviveContext/enviveContext.d.cts +5 -1
- package/dist/contexts/enviveContext/enviveContext.d.ts +5 -1
- package/dist/contexts/enviveContext/enviveContext.js +7 -3
- package/dist/contexts/enviveContext/types.d.cts +1 -1
- package/dist/contexts/enviveContext/types.d.ts +1 -1
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -97
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +3 -25
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +3 -25
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +3 -97
- package/dist/contexts/featureFlagServiceContext/index.cjs +2 -1
- package/dist/contexts/featureFlagServiceContext/index.d.cts +2 -1
- package/dist/contexts/featureFlagServiceContext/index.d.ts +2 -1
- package/dist/contexts/featureFlagServiceContext/index.js +2 -1
- package/dist/contexts/graphqlContext/mockV3Config.cjs +1 -1
- package/dist/contexts/graphqlContext/mockV3Config.js +1 -1
- package/dist/contexts/localStorageContext/index.cjs +2 -1
- package/dist/contexts/localStorageContext/index.d.cts +2 -1
- package/dist/contexts/localStorageContext/index.d.ts +2 -1
- package/dist/contexts/localStorageContext/index.js +2 -1
- package/dist/contexts/localStorageContext/localStorageContext.cjs +5 -11
- package/dist/contexts/localStorageContext/localStorageContext.d.cts +3 -7
- package/dist/contexts/localStorageContext/localStorageContext.d.ts +3 -7
- package/dist/contexts/localStorageContext/localStorageContext.js +3 -8
- package/dist/contexts/localStorageContext/localStorageKeys.cjs +12 -0
- package/dist/contexts/localStorageContext/localStorageKeys.d.cts +9 -0
- package/dist/contexts/localStorageContext/localStorageKeys.d.ts +9 -0
- package/dist/contexts/localStorageContext/localStorageKeys.js +11 -0
- package/dist/contexts/pageContext/pageContext.cjs +2 -2
- package/dist/contexts/pageContext/pageContext.js +2 -2
- package/dist/contexts/salesAgentContext/chatAPI.cjs +15 -4
- package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -1
- package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -1
- package/dist/contexts/salesAgentContext/chatAPI.js +16 -5
- package/dist/contexts/salesAgentContext/salesAgentContext.cjs +15 -4
- package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +2 -1
- package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +2 -1
- package/dist/contexts/salesAgentContext/salesAgentContext.js +16 -5
- package/dist/contexts/salesAgentContext/salesAgentService.cjs +12 -4
- package/dist/contexts/salesAgentContext/salesAgentService.js +12 -4
- package/dist/contexts/searchContext/searchContext.cjs +1 -1
- package/dist/contexts/searchContext/searchContext.js +1 -1
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
- package/dist/contexts/types.cjs +1 -1
- package/dist/contexts/types.d.cts +3 -1
- package/dist/contexts/types.d.ts +3 -1
- package/dist/contexts/types.js +1 -1
- package/dist/contexts/typesV3.cjs +1 -1
- package/dist/contexts/typesV3.d.cts +11 -2
- package/dist/contexts/typesV3.d.ts +12 -3
- package/dist/contexts/typesV3.js +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.js +1 -1
- package/dist/hooks/AddToCart/addToCartErrorMessage.cjs +7 -0
- package/dist/hooks/AddToCart/addToCartErrorMessage.d.cts +5 -0
- package/dist/hooks/AddToCart/addToCartErrorMessage.d.ts +5 -0
- package/dist/hooks/AddToCart/addToCartErrorMessage.js +6 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.cjs +20 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.d.cts +17 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.d.ts +17 -0
- package/dist/hooks/AddToCart/createAddToCartUserEvent.js +19 -0
- package/dist/hooks/AddToCart/index.cjs +9 -0
- package/dist/hooks/AddToCart/index.d.cts +5 -0
- package/dist/hooks/AddToCart/index.d.ts +5 -0
- package/dist/hooks/AddToCart/index.js +6 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.cjs +27 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.d.cts +13 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.d.ts +13 -0
- package/dist/hooks/AddToCart/parseAddToCartFunction.js +27 -0
- package/dist/hooks/AddToCart/useAddToCart.cjs +24 -0
- package/dist/hooks/AddToCart/useAddToCart.d.cts +14 -0
- package/dist/hooks/AddToCart/useAddToCart.d.ts +14 -0
- package/dist/hooks/AddToCart/useAddToCart.js +23 -0
- package/dist/hooks/ChatToggle/useChatToggle.cjs +1 -1
- package/dist/hooks/ChatToggle/useChatToggle.js +1 -1
- package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.cjs +6 -5
- package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.js +3 -2
- package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +6 -3
- package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +6 -3
- package/dist/hooks/ProductDetails/index.cjs +9 -0
- package/dist/hooks/ProductDetails/index.d.cts +4 -0
- package/dist/hooks/ProductDetails/index.d.ts +4 -0
- package/dist/hooks/ProductDetails/index.js +4 -0
- package/dist/hooks/ProductDetails/useProductDetails.cjs +53 -0
- package/dist/hooks/ProductDetails/useProductDetails.d.cts +20 -0
- package/dist/hooks/ProductDetails/useProductDetails.d.ts +20 -0
- package/dist/hooks/ProductDetails/useProductDetails.js +52 -0
- package/dist/hooks/ProductDetails/variantSelection.cjs +42 -0
- package/dist/hooks/ProductDetails/variantSelection.d.cts +35 -0
- package/dist/hooks/ProductDetails/variantSelection.d.ts +35 -0
- package/dist/hooks/ProductDetails/variantSelection.js +38 -0
- package/dist/hooks/Search/useSearch.cjs +3 -3
- package/dist/hooks/Search/useSearch.d.cts +1 -1
- package/dist/hooks/Search/useSearch.d.ts +1 -1
- package/dist/hooks/Search/useSearch.js +3 -3
- package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +11 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +1 -10
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +1 -10
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +11 -2
- package/dist/hooks/WidgetInteraction/types.cjs +13 -3
- package/dist/hooks/WidgetInteraction/types.d.cts +29 -4
- package/dist/hooks/WidgetInteraction/types.d.ts +29 -4
- package/dist/hooks/WidgetInteraction/types.js +13 -3
- package/dist/hooks/WidgetInteraction/utils.cjs +2 -2
- package/dist/hooks/WidgetInteraction/utils.js +2 -2
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/hooks/utils.d.ts +1 -1
- package/dist/services/amplitudeService/amplitudeService.cjs +18 -11
- package/dist/services/amplitudeService/amplitudeService.d.cts +5 -2
- package/dist/services/amplitudeService/amplitudeService.d.ts +5 -2
- package/dist/services/amplitudeService/amplitudeService.js +16 -8
- package/dist/services/enviveConfigService/enviveConfigService.cjs +36 -4
- package/dist/services/enviveConfigService/enviveConfigService.d.cts +4 -1
- package/dist/services/enviveConfigService/enviveConfigService.d.ts +4 -1
- package/dist/services/enviveConfigService/enviveConfigService.js +35 -3
- package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +9 -8
- package/dist/services/enviveConfigService/fetchGraphQLConfig.js +9 -7
- package/dist/services/featureFlagService/index.cjs +101 -0
- package/dist/services/featureFlagService/index.d.cts +28 -0
- package/dist/services/featureFlagService/index.d.ts +28 -0
- package/dist/services/featureFlagService/index.js +101 -0
- package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +8 -2
- package/dist/services/ga4ProjectionService/ga4EventSchema.js +8 -2
- package/dist/services/hardcopyService/hardcopyService.cjs +4 -3
- package/dist/services/hardcopyService/hardcopyService.d.cts +1 -1
- package/dist/services/hardcopyService/hardcopyService.d.ts +1 -1
- package/dist/services/hardcopyService/hardcopyService.js +4 -3
- package/dist/services/urlResolverWarmupService/index.cjs +54 -0
- package/dist/services/urlResolverWarmupService/index.d.cts +40 -0
- package/dist/services/urlResolverWarmupService/index.d.ts +40 -0
- package/dist/services/urlResolverWarmupService/index.js +54 -0
- package/dist/types/enviveConfig.d.cts +6 -2
- package/dist/types/enviveConfig.d.ts +6 -2
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/package.json +18 -2
- package/src/application/__tests__/commerceApiAddToCartRehydration.test.ts +126 -0
- package/src/application/commerce-api.ts +142 -23
- package/src/application/models/api/userEvent.ts +8 -1
- package/src/application/models/api/widgetText.ts +3 -0
- package/src/application/models/featureGates.ts +5 -0
- package/src/application/models/graphql/queries/getProductOptionsQuery.ts +59 -0
- package/src/application/models/validators/__tests__/validateUserEvent.test.ts +41 -0
- package/src/application/models/validators/validateResponse.ts +1 -0
- package/src/application/models/validators/validateUserEvent.ts +7 -2
- package/src/application/utils/__tests__/messageFromAddToCartEvent.test.ts +109 -0
- package/src/application/utils/index.ts +1 -0
- package/src/application/utils/messageFromAddToCartEvent.ts +32 -0
- package/src/application/utils/widgetTextFromApiWidgetTextResponse.ts +1 -0
- package/src/atoms/app/index.ts +1 -1
- package/src/atoms/app/variant.ts +1 -1
- package/src/atoms/envive/enviveConfig.ts +6 -1
- package/src/atoms/org/graphqlConfig.ts +1 -1
- package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +5 -0
- package/src/contexts/enviveContext/enviveContext.tsx +10 -0
- package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +6 -173
- package/src/contexts/localStorageContext/localStorageContext.tsx +2 -5
- package/src/contexts/localStorageContext/localStorageKeys.ts +8 -0
- package/src/contexts/pageContext/pageContext.tsx +1 -1
- package/src/contexts/salesAgentContext/__tests__/chatAPI.test.tsx +63 -0
- package/src/contexts/salesAgentContext/chatAPI.ts +20 -1
- package/src/contexts/salesAgentContext/salesAgentContext.tsx +17 -0
- package/src/contexts/salesAgentContext/salesAgentService.ts +12 -3
- package/src/contexts/types.ts +2 -0
- package/src/contexts/typesV3.ts +14 -0
- package/src/hooks/AddToCart/__tests__/parseAddToCartFunction.test.ts +31 -0
- package/src/hooks/AddToCart/__tests__/useAddToCart.test.tsx +204 -0
- package/src/hooks/AddToCart/addToCartErrorMessage.ts +2 -0
- package/src/hooks/AddToCart/createAddToCartUserEvent.ts +25 -0
- package/src/hooks/AddToCart/index.ts +4 -0
- package/src/hooks/AddToCart/parseAddToCartFunction.ts +31 -0
- package/src/hooks/AddToCart/useAddToCart.ts +35 -0
- package/src/hooks/PageViewedEvent/__tests__/usePageViewedEvent.test.ts +4 -4
- package/src/hooks/PageViewedEvent/usePageViewedEvent.ts +5 -1
- package/src/hooks/ProductDetails/__tests__/useProductDetails.test.tsx +129 -0
- package/src/hooks/ProductDetails/__tests__/variantSelection.test.ts +145 -0
- package/src/hooks/ProductDetails/index.ts +2 -0
- package/src/hooks/ProductDetails/useProductDetails.ts +62 -0
- package/src/hooks/ProductDetails/variantSelection.ts +61 -0
- package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +15 -0
- package/src/hooks/WidgetInteraction/types.ts +43 -2
- package/src/hooks/WidgetInteraction/utils.ts +1 -1
- package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +8 -8
- package/src/services/amplitudeService/amplitudeService.ts +43 -23
- package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +208 -0
- package/src/services/enviveConfigService/enviveConfigService.ts +62 -2
- package/src/services/enviveConfigService/fetchGraphQLConfig.ts +17 -6
- package/src/services/featureFlagService/index.ts +176 -0
- package/src/services/ga4ProjectionService/__tests__/ga4ProjectionService.test.ts +36 -0
- package/src/services/ga4ProjectionService/ga4EventSchema.ts +7 -0
- package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +47 -1
- package/src/services/hardcopyService/hardcopyService.ts +5 -0
- package/src/services/urlResolverWarmupService/__tests__/urlResolverWarmupService.test.ts +85 -0
- package/src/services/urlResolverWarmupService/index.ts +89 -0
- package/src/types/enviveConfig.ts +3 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_urlsParser = require('../../application/utils/urlsParser.cjs');
|
|
2
3
|
const require_variantInfo = require('../../application/models/variantInfo/variantInfo.cjs');
|
|
3
4
|
require('../../application/models/index.cjs');
|
|
4
5
|
const require_eventNames = require('../../services/amplitudeService/eventNames.cjs');
|
|
@@ -34,7 +35,7 @@ const extractPageViewedContext = (pageVariant) => {
|
|
|
34
35
|
page_id: pageVariant.url
|
|
35
36
|
};
|
|
36
37
|
case require_variantInfo.VariantTypeEnum.FullPageSalesAgent: return {
|
|
37
|
-
page_type: "
|
|
38
|
+
page_type: "adaptive_storefront",
|
|
38
39
|
page_id: pageVariant.url
|
|
39
40
|
};
|
|
40
41
|
default: return null;
|
|
@@ -58,6 +59,7 @@ const usePageViewedEvent = () => {
|
|
|
58
59
|
const pageContext = extractPageViewedContext(pageVariantInfo);
|
|
59
60
|
if (!pageContext) return;
|
|
60
61
|
hasFired.current = true;
|
|
62
|
+
const envivePlacement = require_urlsParser.getQueryParam("envive_placement");
|
|
61
63
|
trackEvent({
|
|
62
64
|
eventName: require_eventNames.EnviveMetricsEventName.PageViewed,
|
|
63
65
|
eventProps: {
|
|
@@ -65,7 +67,8 @@ const usePageViewedEvent = () => {
|
|
|
65
67
|
"context.page_id": pageContext.page_id,
|
|
66
68
|
"context.supported": isSupported,
|
|
67
69
|
"context.ready": isSupported,
|
|
68
|
-
"context.page_variant_id": variantInfo.variantId
|
|
70
|
+
"context.page_variant_id": variantInfo.variantId,
|
|
71
|
+
...envivePlacement ? { "context.envive_placement": envivePlacement } : {}
|
|
69
72
|
}
|
|
70
73
|
});
|
|
71
74
|
}, [
|
|
@@ -81,4 +84,4 @@ const usePageViewedEvent = () => {
|
|
|
81
84
|
//#endregion
|
|
82
85
|
exports.extractPageViewedContext = extractPageViewedContext;
|
|
83
86
|
exports.usePageViewedEvent = usePageViewedEvent;
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUGFnZVZpZXdlZEV2ZW50LmNqcyIsIm5hbWVzIjpbIlZhcmlhbnRUeXBlRW51bSIsInVzZUFtcGxpdHVkZSIsInVzZVBhZ2UiLCJ2YXJpYW50SW5mb0F0b20iLCJoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20iLCJnZXRRdWVyeVBhcmFtIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9QYWdlVmlld2VkRXZlbnQvdXNlUGFnZVZpZXdlZEV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmFyaWFudFR5cGVFbnVtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRRdWVyeVBhcmFtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3VybHNQYXJzZXInO1xuaW1wb3J0IHsgaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tLCB2YXJpYW50SW5mb0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlUGFnZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9wYWdlQ29udGV4dCc7XG5pbXBvcnQge1xuICBGdWxsUGFnZVNhbGVzQWdlbnRWYXJpYW50SW5mbyxcbiAgSG9tZVZhcmlhbnRJbmZvLFxuICBPdGhlclZhcmlhbnRJbmZvLFxuICBQRFBQYWdlVmFyaWFudEluZm8sXG4gIFBMUFBhZ2VWYXJpYW50SW5mbyxcbiAgUGFnZVZhcmlhbnRJbmZvLFxuICBWaXNpdFBhZ2VWYXJpYW50SW5mbyxcbn0gZnJvbSAnc3JjL2NvbnRleHRzL3BhZ2VDb250ZXh0L3R5cGVzJztcblxuaW50ZXJmYWNlIFBhZ2VWaWV3ZWRDb250ZXh0IHtcbiAgcGFnZV90eXBlOiBzdHJpbmc7XG4gIHBhZ2VfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RQYWdlVmlld2VkQ29udGV4dCA9IChcbiAgcGFnZVZhcmlhbnQ6IFBhZ2VWYXJpYW50SW5mbyxcbik6IFBhZ2VWaWV3ZWRDb250ZXh0IHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAocGFnZVZhcmlhbnQudmFyaWFudFR5cGUpIHtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX3R5cGU6ICdwZHAnLFxuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgUERQUGFnZVZhcmlhbnRJbmZvKS5wcm9kdWN0SWQsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLlBscDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VfdHlwZTogJ3BscCcsXG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBQTFBQYWdlVmFyaWFudEluZm8pLnBscElkLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5Ib21lOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV90eXBlOiAnaG9tZXBhZ2UnLFxuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgSG9tZVZhcmlhbnRJbmZvKS51cmwsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV90eXBlOiAnb3RoZXInLFxuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgT3RoZXJWYXJpYW50SW5mbykudXJsLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX3R5cGU6ICdvdGhlcicsXG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBWaXNpdFBhZ2VWYXJpYW50SW5mbykudXJsLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5GdWxsUGFnZVNhbGVzQWdlbnQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX3R5cGU6ICdhZGFwdGl2ZV9zdG9yZWZyb250JyxcbiAgICAgICAgcGFnZV9pZDogKHBhZ2VWYXJpYW50IGFzIEZ1bGxQYWdlU2FsZXNBZ2VudFZhcmlhbnRJbmZvKS51cmwsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBGaXJlcyB0aGUgW0Vudml2ZV0gUGFnZSBWaWV3ZWQgZXZlbnQgb25jZSBwZXIgcGFnZSBsb2FkIHdoZW4gcGFnZSBjb250ZXh0IGRhdGEgaXMgcmVhZHkuXG4gKlxuICogVGhpcyBldmVudCBjYXB0dXJlcyBwYWdlIGNvbnRleHQgaW5mb3JtYXRpb24gYW5kIGlzIGludGVuZGVkIHRvIGV2ZW50dWFsbHkgcmVwbGFjZVxuICogdGhlIFtBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgdXNlUGFnZVZpZXdlZEV2ZW50ID0gKCkgPT4ge1xuICBjb25zdCBoYXNGaXJlZCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG4gIGNvbnN0IHsgdmFyaWFudEluZm86IHBhZ2VWYXJpYW50SW5mbywgaXNTdXBwb3J0ZWQsIGlzTG9hZGluZyB9ID0gdXNlUGFnZSgpO1xuICBjb25zdCB2YXJpYW50SW5mbyA9IHVzZUF0b21WYWx1ZSh2YXJpYW50SW5mb0F0b20pO1xuICBjb25zdCBoYXNQYXJzZWRWYXJpYW50SW5mbyA9IHVzZUF0b21WYWx1ZShoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhhc0ZpcmVkLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNMb2FkaW5nIHx8ICFoYXNQYXJzZWRWYXJpYW50SW5mbyB8fCAhcGFnZVZhcmlhbnRJbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUNvbnRleHQgPSBleHRyYWN0UGFnZVZpZXdlZENvbnRleHQocGFnZVZhcmlhbnRJbmZvKTtcbiAgICBpZiAoIXBhZ2VDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaGFzRmlyZWQuY3VycmVudCA9IHRydWU7XG5cbiAgICBjb25zdCBlbnZpdmVQbGFjZW1lbnQgPSBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfcGxhY2VtZW50Jyk7XG5cbiAgICB0cmFja0V2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogRW52aXZlTWV0cmljc0V2ZW50TmFtZS5QYWdlVmlld2VkLFxuICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAnY29udGV4dC5wYWdlX3R5cGUnOiBwYWdlQ29udGV4dC5wYWdlX3R5cGUsXG4gICAgICAgICdjb250ZXh0LnBhZ2VfaWQnOiBwYWdlQ29udGV4dC5wYWdlX2lkLFxuICAgICAgICAvLyBjb250ZXh0LnN1cHBvcnRlZCBhbmQgY29udGV4dC5yZWFkeSBib3RoIGRlcml2ZSBmcm9tIGlzU3VwcG9ydGVkIChyZXNwb25zZS5yZWFkeSlcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgc3VwcG9ydGVkRXZlbnRBdG9tIGlzIG5vdCBjdXJyZW50bHkgcG9wdWxhdGVkLlxuICAgICAgICAnY29udGV4dC5zdXBwb3J0ZWQnOiBpc1N1cHBvcnRlZCxcbiAgICAgICAgJ2NvbnRleHQucmVhZHknOiBpc1N1cHBvcnRlZCxcbiAgICAgICAgJ2NvbnRleHQucGFnZV92YXJpYW50X2lkJzogdmFyaWFudEluZm8udmFyaWFudElkLFxuICAgICAgICAuLi4oZW52aXZlUGxhY2VtZW50ID8geyAnY29udGV4dC5lbnZpdmVfcGxhY2VtZW50JzogZW52aXZlUGxhY2VtZW50IH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9LCBbaXNMb2FkaW5nLCBpc1N1cHBvcnRlZCwgaGFzUGFyc2VkVmFyaWFudEluZm8sIHBhZ2VWYXJpYW50SW5mbywgdmFyaWFudEluZm8sIHRyYWNrRXZlbnRdKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLE1BQWEsNEJBQ1gsZ0JBQzZCO0FBQzdCLFNBQVEsWUFBWSxhQUFwQjtFQUNFLEtBQUtBLG9DQUFnQixJQUNuQixRQUFPO0dBQ0wsV0FBVztHQUNYLFNBQVUsWUFBbUM7R0FDOUM7RUFDSCxLQUFLQSxvQ0FBZ0IsSUFDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQW1DO0dBQzlDO0VBQ0gsS0FBS0Esb0NBQWdCLEtBQ25CLFFBQU87R0FDTCxXQUFXO0dBQ1gsU0FBVSxZQUFnQztHQUMzQztFQUNILEtBQUtBLG9DQUFnQixNQUNuQixRQUFPO0dBQ0wsV0FBVztHQUNYLFNBQVUsWUFBaUM7R0FDNUM7RUFDSCxLQUFLQSxvQ0FBZ0IsVUFDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQXFDO0dBQ2hEO0VBQ0gsS0FBS0Esb0NBQWdCLG1CQUNuQixRQUFPO0dBQ0wsV0FBVztHQUNYLFNBQVUsWUFBOEM7R0FDekQ7RUFDSCxRQUNFLFFBQU87Ozs7Ozs7OztBQVViLE1BQWEsMkJBQTJCO0NBQ3RDLE1BQU0sNkJBQWtCLE1BQU07Q0FDOUIsTUFBTSxFQUFFLGVBQWVDLHVDQUFjO0NBQ3JDLE1BQU0sRUFBRSxhQUFhLGlCQUFpQixhQUFhLGNBQWNDLDZCQUFTO0NBQzFFLE1BQU0sc0NBQTJCQyxnQ0FBZ0I7Q0FDakQsTUFBTSwrQ0FBb0NDLHlDQUF5QjtBQUVuRSw0QkFBZ0I7QUFDZCxNQUFJLFNBQVMsUUFDWDtBQUdGLE1BQUksYUFBYSxDQUFDLHdCQUF3QixDQUFDLGdCQUN6QztFQUdGLE1BQU0sY0FBYyx5QkFBeUIsZ0JBQWdCO0FBQzdELE1BQUksQ0FBQyxZQUNIO0FBR0YsV0FBUyxVQUFVO0VBRW5CLE1BQU0sa0JBQWtCQyxpQ0FBYyxtQkFBbUI7QUFFekQsYUFBVztHQUNULFdBQVdDLDBDQUF1QjtHQUNsQyxZQUFZO0lBQ1YscUJBQXFCLFlBQVk7SUFDakMsbUJBQW1CLFlBQVk7SUFHL0IscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQiwyQkFBMkIsWUFBWTtJQUN2QyxHQUFJLGtCQUFrQixFQUFFLDRCQUE0QixpQkFBaUIsR0FBRyxFQUFFO0lBQzNFO0dBQ0YsQ0FBQztJQUNEO0VBQUM7RUFBVztFQUFhO0VBQXNCO0VBQWlCO0VBQWE7RUFBVyxDQUFDIn0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getQueryParam } from "../../application/utils/urlsParser.js";
|
|
1
2
|
import { VariantTypeEnum } from "../../application/models/variantInfo/variantInfo.js";
|
|
2
3
|
import "../../application/models/index.js";
|
|
3
4
|
import { EnviveMetricsEventName } from "../../services/amplitudeService/eventNames.js";
|
|
@@ -33,7 +34,7 @@ const extractPageViewedContext = (pageVariant) => {
|
|
|
33
34
|
page_id: pageVariant.url
|
|
34
35
|
};
|
|
35
36
|
case VariantTypeEnum.FullPageSalesAgent: return {
|
|
36
|
-
page_type: "
|
|
37
|
+
page_type: "adaptive_storefront",
|
|
37
38
|
page_id: pageVariant.url
|
|
38
39
|
};
|
|
39
40
|
default: return null;
|
|
@@ -57,6 +58,7 @@ const usePageViewedEvent = () => {
|
|
|
57
58
|
const pageContext = extractPageViewedContext(pageVariantInfo);
|
|
58
59
|
if (!pageContext) return;
|
|
59
60
|
hasFired.current = true;
|
|
61
|
+
const envivePlacement = getQueryParam("envive_placement");
|
|
60
62
|
trackEvent({
|
|
61
63
|
eventName: EnviveMetricsEventName.PageViewed,
|
|
62
64
|
eventProps: {
|
|
@@ -64,7 +66,8 @@ const usePageViewedEvent = () => {
|
|
|
64
66
|
"context.page_id": pageContext.page_id,
|
|
65
67
|
"context.supported": isSupported,
|
|
66
68
|
"context.ready": isSupported,
|
|
67
|
-
"context.page_variant_id": variantInfo.variantId
|
|
69
|
+
"context.page_variant_id": variantInfo.variantId,
|
|
70
|
+
...envivePlacement ? { "context.envive_placement": envivePlacement } : {}
|
|
68
71
|
}
|
|
69
72
|
});
|
|
70
73
|
}, [
|
|
@@ -79,4 +82,4 @@ const usePageViewedEvent = () => {
|
|
|
79
82
|
|
|
80
83
|
//#endregion
|
|
81
84
|
export { extractPageViewedContext, usePageViewedEvent };
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUGFnZVZpZXdlZEV2ZW50LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9QYWdlVmlld2VkRXZlbnQvdXNlUGFnZVZpZXdlZEV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmFyaWFudFR5cGVFbnVtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRRdWVyeVBhcmFtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3VybHNQYXJzZXInO1xuaW1wb3J0IHsgaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tLCB2YXJpYW50SW5mb0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlUGFnZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9wYWdlQ29udGV4dCc7XG5pbXBvcnQge1xuICBGdWxsUGFnZVNhbGVzQWdlbnRWYXJpYW50SW5mbyxcbiAgSG9tZVZhcmlhbnRJbmZvLFxuICBPdGhlclZhcmlhbnRJbmZvLFxuICBQRFBQYWdlVmFyaWFudEluZm8sXG4gIFBMUFBhZ2VWYXJpYW50SW5mbyxcbiAgUGFnZVZhcmlhbnRJbmZvLFxuICBWaXNpdFBhZ2VWYXJpYW50SW5mbyxcbn0gZnJvbSAnc3JjL2NvbnRleHRzL3BhZ2VDb250ZXh0L3R5cGVzJztcblxuaW50ZXJmYWNlIFBhZ2VWaWV3ZWRDb250ZXh0IHtcbiAgcGFnZV90eXBlOiBzdHJpbmc7XG4gIHBhZ2VfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RQYWdlVmlld2VkQ29udGV4dCA9IChcbiAgcGFnZVZhcmlhbnQ6IFBhZ2VWYXJpYW50SW5mbyxcbik6IFBhZ2VWaWV3ZWRDb250ZXh0IHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAocGFnZVZhcmlhbnQudmFyaWFudFR5cGUpIHtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX3R5cGU6ICdwZHAnLFxuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgUERQUGFnZVZhcmlhbnRJbmZvKS5wcm9kdWN0SWQsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLlBscDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VfdHlwZTogJ3BscCcsXG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBQTFBQYWdlVmFyaWFudEluZm8pLnBscElkLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5Ib21lOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV90eXBlOiAnaG9tZXBhZ2UnLFxuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgSG9tZVZhcmlhbnRJbmZvKS51cmwsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV90eXBlOiAnb3RoZXInLFxuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgT3RoZXJWYXJpYW50SW5mbykudXJsLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QYWdlVmlzaXQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX3R5cGU6ICdvdGhlcicsXG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBWaXNpdFBhZ2VWYXJpYW50SW5mbykudXJsLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5GdWxsUGFnZVNhbGVzQWdlbnQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX3R5cGU6ICdhZGFwdGl2ZV9zdG9yZWZyb250JyxcbiAgICAgICAgcGFnZV9pZDogKHBhZ2VWYXJpYW50IGFzIEZ1bGxQYWdlU2FsZXNBZ2VudFZhcmlhbnRJbmZvKS51cmwsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBGaXJlcyB0aGUgW0Vudml2ZV0gUGFnZSBWaWV3ZWQgZXZlbnQgb25jZSBwZXIgcGFnZSBsb2FkIHdoZW4gcGFnZSBjb250ZXh0IGRhdGEgaXMgcmVhZHkuXG4gKlxuICogVGhpcyBldmVudCBjYXB0dXJlcyBwYWdlIGNvbnRleHQgaW5mb3JtYXRpb24gYW5kIGlzIGludGVuZGVkIHRvIGV2ZW50dWFsbHkgcmVwbGFjZVxuICogdGhlIFtBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgdXNlUGFnZVZpZXdlZEV2ZW50ID0gKCkgPT4ge1xuICBjb25zdCBoYXNGaXJlZCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG4gIGNvbnN0IHsgdmFyaWFudEluZm86IHBhZ2VWYXJpYW50SW5mbywgaXNTdXBwb3J0ZWQsIGlzTG9hZGluZyB9ID0gdXNlUGFnZSgpO1xuICBjb25zdCB2YXJpYW50SW5mbyA9IHVzZUF0b21WYWx1ZSh2YXJpYW50SW5mb0F0b20pO1xuICBjb25zdCBoYXNQYXJzZWRWYXJpYW50SW5mbyA9IHVzZUF0b21WYWx1ZShoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhhc0ZpcmVkLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNMb2FkaW5nIHx8ICFoYXNQYXJzZWRWYXJpYW50SW5mbyB8fCAhcGFnZVZhcmlhbnRJbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUNvbnRleHQgPSBleHRyYWN0UGFnZVZpZXdlZENvbnRleHQocGFnZVZhcmlhbnRJbmZvKTtcbiAgICBpZiAoIXBhZ2VDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaGFzRmlyZWQuY3VycmVudCA9IHRydWU7XG5cbiAgICBjb25zdCBlbnZpdmVQbGFjZW1lbnQgPSBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfcGxhY2VtZW50Jyk7XG5cbiAgICB0cmFja0V2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogRW52aXZlTWV0cmljc0V2ZW50TmFtZS5QYWdlVmlld2VkLFxuICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAnY29udGV4dC5wYWdlX3R5cGUnOiBwYWdlQ29udGV4dC5wYWdlX3R5cGUsXG4gICAgICAgICdjb250ZXh0LnBhZ2VfaWQnOiBwYWdlQ29udGV4dC5wYWdlX2lkLFxuICAgICAgICAvLyBjb250ZXh0LnN1cHBvcnRlZCBhbmQgY29udGV4dC5yZWFkeSBib3RoIGRlcml2ZSBmcm9tIGlzU3VwcG9ydGVkIChyZXNwb25zZS5yZWFkeSlcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgc3VwcG9ydGVkRXZlbnRBdG9tIGlzIG5vdCBjdXJyZW50bHkgcG9wdWxhdGVkLlxuICAgICAgICAnY29udGV4dC5zdXBwb3J0ZWQnOiBpc1N1cHBvcnRlZCxcbiAgICAgICAgJ2NvbnRleHQucmVhZHknOiBpc1N1cHBvcnRlZCxcbiAgICAgICAgJ2NvbnRleHQucGFnZV92YXJpYW50X2lkJzogdmFyaWFudEluZm8udmFyaWFudElkLFxuICAgICAgICAuLi4oZW52aXZlUGxhY2VtZW50ID8geyAnY29udGV4dC5lbnZpdmVfcGxhY2VtZW50JzogZW52aXZlUGxhY2VtZW50IH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9LCBbaXNMb2FkaW5nLCBpc1N1cHBvcnRlZCwgaGFzUGFyc2VkVmFyaWFudEluZm8sIHBhZ2VWYXJpYW50SW5mbywgdmFyaWFudEluZm8sIHRyYWNrRXZlbnRdKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFzQkEsTUFBYSw0QkFDWCxnQkFDNkI7QUFDN0IsU0FBUSxZQUFZLGFBQXBCO0VBQ0UsS0FBSyxnQkFBZ0IsSUFDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQW1DO0dBQzlDO0VBQ0gsS0FBSyxnQkFBZ0IsSUFDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQW1DO0dBQzlDO0VBQ0gsS0FBSyxnQkFBZ0IsS0FDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQWdDO0dBQzNDO0VBQ0gsS0FBSyxnQkFBZ0IsTUFDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQWlDO0dBQzVDO0VBQ0gsS0FBSyxnQkFBZ0IsVUFDbkIsUUFBTztHQUNMLFdBQVc7R0FDWCxTQUFVLFlBQXFDO0dBQ2hEO0VBQ0gsS0FBSyxnQkFBZ0IsbUJBQ25CLFFBQU87R0FDTCxXQUFXO0dBQ1gsU0FBVSxZQUE4QztHQUN6RDtFQUNILFFBQ0UsUUFBTzs7Ozs7Ozs7O0FBVWIsTUFBYSwyQkFBMkI7Q0FDdEMsTUFBTSxXQUFXLE9BQU8sTUFBTTtDQUM5QixNQUFNLEVBQUUsZUFBZSxjQUFjO0NBQ3JDLE1BQU0sRUFBRSxhQUFhLGlCQUFpQixhQUFhLGNBQWMsU0FBUztDQUMxRSxNQUFNLGNBQWMsYUFBYSxnQkFBZ0I7Q0FDakQsTUFBTSx1QkFBdUIsYUFBYSx5QkFBeUI7QUFFbkUsaUJBQWdCO0FBQ2QsTUFBSSxTQUFTLFFBQ1g7QUFHRixNQUFJLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxnQkFDekM7RUFHRixNQUFNLGNBQWMseUJBQXlCLGdCQUFnQjtBQUM3RCxNQUFJLENBQUMsWUFDSDtBQUdGLFdBQVMsVUFBVTtFQUVuQixNQUFNLGtCQUFrQixjQUFjLG1CQUFtQjtBQUV6RCxhQUFXO0dBQ1QsV0FBVyx1QkFBdUI7R0FDbEMsWUFBWTtJQUNWLHFCQUFxQixZQUFZO0lBQ2pDLG1CQUFtQixZQUFZO0lBRy9CLHFCQUFxQjtJQUNyQixpQkFBaUI7SUFDakIsMkJBQTJCLFlBQVk7SUFDdkMsR0FBSSxrQkFBa0IsRUFBRSw0QkFBNEIsaUJBQWlCLEdBQUcsRUFBRTtJQUMzRTtHQUNGLENBQUM7SUFDRDtFQUFDO0VBQVc7RUFBYTtFQUFzQjtFQUFpQjtFQUFhO0VBQVcsQ0FBQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const require_useProductDetails = require('./useProductDetails.cjs');
|
|
2
|
+
const require_variantSelection = require('./variantSelection.cjs');
|
|
3
|
+
|
|
4
|
+
exports.fetchProductDetails = require_variantSelection.fetchProductDetails;
|
|
5
|
+
exports.findVariantForSelection = require_variantSelection.findVariantForSelection;
|
|
6
|
+
exports.getDefaultVariantSelection = require_variantSelection.getDefaultVariantSelection;
|
|
7
|
+
exports.getSingleVariantId = require_variantSelection.getSingleVariantId;
|
|
8
|
+
exports.needsVariantSelection = require_variantSelection.needsVariantSelection;
|
|
9
|
+
exports.useProductDetails = require_useProductDetails.useProductDetails;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ProductDetails, ProductOption, ProductVariant, ProductVariantOption } from "../../application/models/graphql/queries/getProductOptionsQuery.cjs";
|
|
2
|
+
import { UseProductDetailsResult, useProductDetails } from "./useProductDetails.cjs";
|
|
3
|
+
import { VariantSelection, fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection } from "./variantSelection.cjs";
|
|
4
|
+
export { ProductDetails, ProductOption, ProductVariant, ProductVariantOption, UseProductDetailsResult, VariantSelection, fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection, useProductDetails };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ProductDetails, ProductOption, ProductVariant, ProductVariantOption } from "../../application/models/graphql/queries/getProductOptionsQuery.js";
|
|
2
|
+
import { UseProductDetailsResult, useProductDetails } from "./useProductDetails.js";
|
|
3
|
+
import { VariantSelection, fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection } from "./variantSelection.js";
|
|
4
|
+
export { ProductDetails, ProductOption, ProductVariant, ProductVariantOption, UseProductDetailsResult, VariantSelection, fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection, useProductDetails };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { useProductDetails } from "./useProductDetails.js";
|
|
2
|
+
import { fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection } from "./variantSelection.js";
|
|
3
|
+
|
|
4
|
+
export { fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection, useProductDetails };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_application_commerce_api = require('../../application/commerce-api.cjs');
|
|
3
|
+
let react = require("react");
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/ProductDetails/useProductDetails.ts
|
|
6
|
+
/**
|
|
7
|
+
* Fetches variant-level product details (options, availability, pricing, images)
|
|
8
|
+
* for the given product ID via CommerceApiClient.retrieveProductDetails (GraphQL
|
|
9
|
+
* `me.productOptions`). Only meaningful for products that offer variations.
|
|
10
|
+
*
|
|
11
|
+
* Returns an idle result ({ data: undefined, isLoading: false, error: undefined })
|
|
12
|
+
* when productId is not provided.
|
|
13
|
+
*/
|
|
14
|
+
const useProductDetails = (productId) => {
|
|
15
|
+
const [data, setData] = (0, react.useState)(void 0);
|
|
16
|
+
const [isLoading, setIsLoading] = (0, react.useState)(false);
|
|
17
|
+
const [error, setError] = (0, react.useState)(void 0);
|
|
18
|
+
(0, react.useEffect)(() => {
|
|
19
|
+
if (!productId) {
|
|
20
|
+
setData(void 0);
|
|
21
|
+
setIsLoading(false);
|
|
22
|
+
setError(void 0);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
let cancelled = false;
|
|
26
|
+
setData(void 0);
|
|
27
|
+
setError(void 0);
|
|
28
|
+
setIsLoading(true);
|
|
29
|
+
require_application_commerce_api.default.retrieveProductDetails(productId).then((result) => {
|
|
30
|
+
if (!cancelled) {
|
|
31
|
+
setData(result);
|
|
32
|
+
setIsLoading(false);
|
|
33
|
+
}
|
|
34
|
+
}, (err) => {
|
|
35
|
+
if (!cancelled) {
|
|
36
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
37
|
+
setIsLoading(false);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return () => {
|
|
41
|
+
cancelled = true;
|
|
42
|
+
};
|
|
43
|
+
}, [productId]);
|
|
44
|
+
return {
|
|
45
|
+
data,
|
|
46
|
+
isLoading,
|
|
47
|
+
error
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
exports.useProductDetails = useProductDetails;
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUHJvZHVjdERldGFpbHMuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9Qcm9kdWN0RGV0YWlscy91c2VQcm9kdWN0RGV0YWlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHsgUHJvZHVjdERldGFpbHMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRQcm9kdWN0T3B0aW9uc1F1ZXJ5JztcblxuZXhwb3J0IHR5cGUge1xuICBQcm9kdWN0RGV0YWlscyxcbiAgUHJvZHVjdE9wdGlvbixcbiAgUHJvZHVjdFZhcmlhbnQsXG4gIFByb2R1Y3RWYXJpYW50T3B0aW9uLFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRQcm9kdWN0T3B0aW9uc1F1ZXJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VQcm9kdWN0RGV0YWlsc1Jlc3VsdCB7XG4gIGRhdGE6IFByb2R1Y3REZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIHZhcmlhbnQtbGV2ZWwgcHJvZHVjdCBkZXRhaWxzIChvcHRpb25zLCBhdmFpbGFiaWxpdHksIHByaWNpbmcsIGltYWdlcylcbiAqIGZvciB0aGUgZ2l2ZW4gcHJvZHVjdCBJRCB2aWEgQ29tbWVyY2VBcGlDbGllbnQucmV0cmlldmVQcm9kdWN0RGV0YWlscyAoR3JhcGhRTFxuICogYG1lLnByb2R1Y3RPcHRpb25zYCkuIE9ubHkgbWVhbmluZ2Z1bCBmb3IgcHJvZHVjdHMgdGhhdCBvZmZlciB2YXJpYXRpb25zLlxuICpcbiAqIFJldHVybnMgYW4gaWRsZSByZXN1bHQgKHsgZGF0YTogdW5kZWZpbmVkLCBpc0xvYWRpbmc6IGZhbHNlLCBlcnJvcjogdW5kZWZpbmVkIH0pXG4gKiB3aGVuIHByb2R1Y3RJZCBpcyBub3QgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VQcm9kdWN0RGV0YWlscyA9IChwcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFVzZVByb2R1Y3REZXRhaWxzUmVzdWx0ID0+IHtcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8UHJvZHVjdERldGFpbHMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXByb2R1Y3RJZCkge1xuICAgICAgc2V0RGF0YSh1bmRlZmluZWQpO1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgc2V0RGF0YSh1bmRlZmluZWQpO1xuICAgIHNldEVycm9yKHVuZGVmaW5lZCk7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIENvbW1lcmNlQXBpQ2xpZW50LnJldHJpZXZlUHJvZHVjdERldGFpbHMocHJvZHVjdElkKS50aGVuKFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXREYXRhKHJlc3VsdCk7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0RXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW3Byb2R1Y3RJZF0pO1xuXG4gIHJldHVybiB7IGRhdGEsIGlzTG9hZGluZywgZXJyb3IgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUF5QkEsTUFBYSxxQkFBcUIsY0FBMkQ7Q0FDM0YsTUFBTSxDQUFDLE1BQU0sK0JBQWdELE9BQVU7Q0FDdkUsTUFBTSxDQUFDLFdBQVcsb0NBQXlCLE1BQU07Q0FDakQsTUFBTSxDQUFDLE9BQU8sZ0NBQXdDLE9BQVU7QUFFaEUsNEJBQWdCO0FBQ2QsTUFBSSxDQUFDLFdBQVc7QUFDZCxXQUFRLE9BQVU7QUFDbEIsZ0JBQWEsTUFBTTtBQUNuQixZQUFTLE9BQVU7QUFDbkI7O0VBRUYsSUFBSSxZQUFZO0FBQ2hCLFVBQVEsT0FBVTtBQUNsQixXQUFTLE9BQVU7QUFDbkIsZUFBYSxLQUFLO0FBQ2xCLDJDQUFrQix1QkFBdUIsVUFBVSxDQUFDLE1BQ2xELFdBQVU7QUFDUixPQUFJLENBQUMsV0FBVztBQUNkLFlBQVEsT0FBTztBQUNmLGlCQUFhLE1BQU07O01BR3ZCLFFBQU87QUFDTCxPQUFJLENBQUMsV0FBVztBQUNkLGFBQVMsZUFBZSxRQUFRLE1BQU0sSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDN0QsaUJBQWEsTUFBTTs7SUFHeEI7QUFDRCxlQUFhO0FBQ1gsZUFBWTs7SUFFYixDQUFDLFVBQVUsQ0FBQztBQUVmLFFBQU87RUFBRTtFQUFNO0VBQVc7RUFBTyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProductDetails, ProductOption, ProductVariant, ProductVariantOption } from "../../application/models/graphql/queries/getProductOptionsQuery.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/ProductDetails/useProductDetails.d.ts
|
|
4
|
+
interface UseProductDetailsResult {
|
|
5
|
+
data: ProductDetails | undefined;
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
error: Error | undefined;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Fetches variant-level product details (options, availability, pricing, images)
|
|
11
|
+
* for the given product ID via CommerceApiClient.retrieveProductDetails (GraphQL
|
|
12
|
+
* `me.productOptions`). Only meaningful for products that offer variations.
|
|
13
|
+
*
|
|
14
|
+
* Returns an idle result ({ data: undefined, isLoading: false, error: undefined })
|
|
15
|
+
* when productId is not provided.
|
|
16
|
+
*/
|
|
17
|
+
declare const useProductDetails: (productId: string | undefined) => UseProductDetailsResult;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { UseProductDetailsResult, useProductDetails };
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUHJvZHVjdERldGFpbHMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1Byb2R1Y3REZXRhaWxzL3VzZVByb2R1Y3REZXRhaWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvZHVjdERldGFpbHMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRQcm9kdWN0T3B0aW9uc1F1ZXJ5JztcbmV4cG9ydCB0eXBlIHsgUHJvZHVjdERldGFpbHMsIFByb2R1Y3RPcHRpb24sIFByb2R1Y3RWYXJpYW50LCBQcm9kdWN0VmFyaWFudE9wdGlvbiwgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRQcm9kdWN0T3B0aW9uc1F1ZXJ5JztcbmV4cG9ydCBpbnRlcmZhY2UgVXNlUHJvZHVjdERldGFpbHNSZXN1bHQge1xuICAgIGRhdGE6IFByb2R1Y3REZXRhaWxzIHwgdW5kZWZpbmVkO1xuICAgIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgICBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEZldGNoZXMgdmFyaWFudC1sZXZlbCBwcm9kdWN0IGRldGFpbHMgKG9wdGlvbnMsIGF2YWlsYWJpbGl0eSwgcHJpY2luZywgaW1hZ2VzKVxuICogZm9yIHRoZSBnaXZlbiBwcm9kdWN0IElEIHZpYSBDb21tZXJjZUFwaUNsaWVudC5yZXRyaWV2ZVByb2R1Y3REZXRhaWxzIChHcmFwaFFMXG4gKiBgbWUucHJvZHVjdE9wdGlvbnNgKS4gT25seSBtZWFuaW5nZnVsIGZvciBwcm9kdWN0cyB0aGF0IG9mZmVyIHZhcmlhdGlvbnMuXG4gKlxuICogUmV0dXJucyBhbiBpZGxlIHJlc3VsdCAoeyBkYXRhOiB1bmRlZmluZWQsIGlzTG9hZGluZzogZmFsc2UsIGVycm9yOiB1bmRlZmluZWQgfSlcbiAqIHdoZW4gcHJvZHVjdElkIGlzIG5vdCBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlUHJvZHVjdERldGFpbHM6IChwcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gVXNlUHJvZHVjdERldGFpbHNSZXN1bHQ7XG4iXSwibWFwcGluZ3MiOiI7OztBQUVBLElBQVcsMEJBQTBCO0NBQUM7T0FBRztPQUFBO0NBQUE7QUFDekMsSUFBVyxvQkFBb0IsQ0FBQyxXQUFJLHdCQUFBIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProductDetails, ProductOption, ProductVariant, ProductVariantOption } from "../../application/models/graphql/queries/getProductOptionsQuery.js";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/ProductDetails/useProductDetails.d.ts
|
|
4
|
+
interface UseProductDetailsResult {
|
|
5
|
+
data: ProductDetails | undefined;
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
error: Error | undefined;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Fetches variant-level product details (options, availability, pricing, images)
|
|
11
|
+
* for the given product ID via CommerceApiClient.retrieveProductDetails (GraphQL
|
|
12
|
+
* `me.productOptions`). Only meaningful for products that offer variations.
|
|
13
|
+
*
|
|
14
|
+
* Returns an idle result ({ data: undefined, isLoading: false, error: undefined })
|
|
15
|
+
* when productId is not provided.
|
|
16
|
+
*/
|
|
17
|
+
declare const useProductDetails: (productId: string | undefined) => UseProductDetailsResult;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { UseProductDetailsResult, useProductDetails };
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUHJvZHVjdERldGFpbHMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvUHJvZHVjdERldGFpbHMvdXNlUHJvZHVjdERldGFpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9kdWN0RGV0YWlscyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFByb2R1Y3RPcHRpb25zUXVlcnknO1xuZXhwb3J0IHR5cGUgeyBQcm9kdWN0RGV0YWlscywgUHJvZHVjdE9wdGlvbiwgUHJvZHVjdFZhcmlhbnQsIFByb2R1Y3RWYXJpYW50T3B0aW9uLCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFByb2R1Y3RPcHRpb25zUXVlcnknO1xuZXhwb3J0IGludGVyZmFjZSBVc2VQcm9kdWN0RGV0YWlsc1Jlc3VsdCB7XG4gICAgZGF0YTogUHJvZHVjdERldGFpbHMgfCB1bmRlZmluZWQ7XG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAgIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogRmV0Y2hlcyB2YXJpYW50LWxldmVsIHByb2R1Y3QgZGV0YWlscyAob3B0aW9ucywgYXZhaWxhYmlsaXR5LCBwcmljaW5nLCBpbWFnZXMpXG4gKiBmb3IgdGhlIGdpdmVuIHByb2R1Y3QgSUQgdmlhIENvbW1lcmNlQXBpQ2xpZW50LnJldHJpZXZlUHJvZHVjdERldGFpbHMgKEdyYXBoUUxcbiAqIGBtZS5wcm9kdWN0T3B0aW9uc2ApLiBPbmx5IG1lYW5pbmdmdWwgZm9yIHByb2R1Y3RzIHRoYXQgb2ZmZXIgdmFyaWF0aW9ucy5cbiAqXG4gKiBSZXR1cm5zIGFuIGlkbGUgcmVzdWx0ICh7IGRhdGE6IHVuZGVmaW5lZCwgaXNMb2FkaW5nOiBmYWxzZSwgZXJyb3I6IHVuZGVmaW5lZCB9KVxuICogd2hlbiBwcm9kdWN0SWQgaXMgbm90IHByb3ZpZGVkLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VQcm9kdWN0RGV0YWlsczogKHByb2R1Y3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBVc2VQcm9kdWN0RGV0YWlsc1Jlc3VsdDtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBVywwQkFBMEI7Q0FBQztPQUFHO09BQUE7Q0FBQTtBQUN6QyxJQUFXLG9CQUFvQixDQUFDLFdBQUksd0JBQUEifQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import commerce_api_default from "../../application/commerce-api.js";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/hooks/ProductDetails/useProductDetails.ts
|
|
5
|
+
/**
|
|
6
|
+
* Fetches variant-level product details (options, availability, pricing, images)
|
|
7
|
+
* for the given product ID via CommerceApiClient.retrieveProductDetails (GraphQL
|
|
8
|
+
* `me.productOptions`). Only meaningful for products that offer variations.
|
|
9
|
+
*
|
|
10
|
+
* Returns an idle result ({ data: undefined, isLoading: false, error: undefined })
|
|
11
|
+
* when productId is not provided.
|
|
12
|
+
*/
|
|
13
|
+
const useProductDetails = (productId) => {
|
|
14
|
+
const [data, setData] = useState(void 0);
|
|
15
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
16
|
+
const [error, setError] = useState(void 0);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!productId) {
|
|
19
|
+
setData(void 0);
|
|
20
|
+
setIsLoading(false);
|
|
21
|
+
setError(void 0);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
let cancelled = false;
|
|
25
|
+
setData(void 0);
|
|
26
|
+
setError(void 0);
|
|
27
|
+
setIsLoading(true);
|
|
28
|
+
commerce_api_default.retrieveProductDetails(productId).then((result) => {
|
|
29
|
+
if (!cancelled) {
|
|
30
|
+
setData(result);
|
|
31
|
+
setIsLoading(false);
|
|
32
|
+
}
|
|
33
|
+
}, (err) => {
|
|
34
|
+
if (!cancelled) {
|
|
35
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
36
|
+
setIsLoading(false);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return () => {
|
|
40
|
+
cancelled = true;
|
|
41
|
+
};
|
|
42
|
+
}, [productId]);
|
|
43
|
+
return {
|
|
44
|
+
data,
|
|
45
|
+
isLoading,
|
|
46
|
+
error
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
export { useProductDetails };
|
|
52
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUHJvZHVjdERldGFpbHMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1Byb2R1Y3REZXRhaWxzL3VzZVByb2R1Y3REZXRhaWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlscyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFByb2R1Y3RPcHRpb25zUXVlcnknO1xuXG5leHBvcnQgdHlwZSB7XG4gIFByb2R1Y3REZXRhaWxzLFxuICBQcm9kdWN0T3B0aW9uLFxuICBQcm9kdWN0VmFyaWFudCxcbiAgUHJvZHVjdFZhcmlhbnRPcHRpb24sXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFByb2R1Y3RPcHRpb25zUXVlcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZVByb2R1Y3REZXRhaWxzUmVzdWx0IHtcbiAgZGF0YTogUHJvZHVjdERldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZldGNoZXMgdmFyaWFudC1sZXZlbCBwcm9kdWN0IGRldGFpbHMgKG9wdGlvbnMsIGF2YWlsYWJpbGl0eSwgcHJpY2luZywgaW1hZ2VzKVxuICogZm9yIHRoZSBnaXZlbiBwcm9kdWN0IElEIHZpYSBDb21tZXJjZUFwaUNsaWVudC5yZXRyaWV2ZVByb2R1Y3REZXRhaWxzIChHcmFwaFFMXG4gKiBgbWUucHJvZHVjdE9wdGlvbnNgKS4gT25seSBtZWFuaW5nZnVsIGZvciBwcm9kdWN0cyB0aGF0IG9mZmVyIHZhcmlhdGlvbnMuXG4gKlxuICogUmV0dXJucyBhbiBpZGxlIHJlc3VsdCAoeyBkYXRhOiB1bmRlZmluZWQsIGlzTG9hZGluZzogZmFsc2UsIGVycm9yOiB1bmRlZmluZWQgfSlcbiAqIHdoZW4gcHJvZHVjdElkIGlzIG5vdCBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVByb2R1Y3REZXRhaWxzID0gKHByb2R1Y3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogVXNlUHJvZHVjdERldGFpbHNSZXN1bHQgPT4ge1xuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSB1c2VTdGF0ZTxQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcHJvZHVjdElkKSB7XG4gICAgICBzZXREYXRhKHVuZGVmaW5lZCk7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3IodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICBzZXREYXRhKHVuZGVmaW5lZCk7XG4gICAgc2V0RXJyb3IodW5kZWZpbmVkKTtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgQ29tbWVyY2VBcGlDbGllbnQucmV0cmlldmVQcm9kdWN0RGV0YWlscyhwcm9kdWN0SWQpLnRoZW4oXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldERhdGEocmVzdWx0KTtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbcHJvZHVjdElkXSk7XG5cbiAgcmV0dXJuIHsgZGF0YSwgaXNMb2FkaW5nLCBlcnJvciB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBeUJBLE1BQWEscUJBQXFCLGNBQTJEO0NBQzNGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsU0FBcUMsT0FBVTtDQUN2RSxNQUFNLENBQUMsV0FBVyxnQkFBZ0IsU0FBUyxNQUFNO0NBQ2pELE1BQU0sQ0FBQyxPQUFPLFlBQVksU0FBNEIsT0FBVTtBQUVoRSxpQkFBZ0I7QUFDZCxNQUFJLENBQUMsV0FBVztBQUNkLFdBQVEsT0FBVTtBQUNsQixnQkFBYSxNQUFNO0FBQ25CLFlBQVMsT0FBVTtBQUNuQjs7RUFFRixJQUFJLFlBQVk7QUFDaEIsVUFBUSxPQUFVO0FBQ2xCLFdBQVMsT0FBVTtBQUNuQixlQUFhLEtBQUs7QUFDbEIsdUJBQWtCLHVCQUF1QixVQUFVLENBQUMsTUFDbEQsV0FBVTtBQUNSLE9BQUksQ0FBQyxXQUFXO0FBQ2QsWUFBUSxPQUFPO0FBQ2YsaUJBQWEsTUFBTTs7TUFHdkIsUUFBTztBQUNMLE9BQUksQ0FBQyxXQUFXO0FBQ2QsYUFBUyxlQUFlLFFBQVEsTUFBTSxJQUFJLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQztBQUM3RCxpQkFBYSxNQUFNOztJQUd4QjtBQUNELGVBQWE7QUFDWCxlQUFZOztJQUViLENBQUMsVUFBVSxDQUFDO0FBRWYsUUFBTztFQUFFO0VBQU07RUFBVztFQUFPIn0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const require_application_commerce_api = require('../../application/commerce-api.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/ProductDetails/variantSelection.ts
|
|
4
|
+
/**
|
|
5
|
+
* Imperative variant-details fetch for click-driven flows (the mount-driven
|
|
6
|
+
* useProductDetails hook is a poor fit when the fetch should ride a button's
|
|
7
|
+
* pending state). Resolves undefined when the product has no options data.
|
|
8
|
+
*
|
|
9
|
+
* @throws on network/HTTP failure or GraphQL errors
|
|
10
|
+
*/
|
|
11
|
+
const fetchProductDetails = (productId) => require_application_commerce_api.default.retrieveProductDetails(productId);
|
|
12
|
+
/**
|
|
13
|
+
* A product needs the variant selector when there is more than one variant to
|
|
14
|
+
* choose between and at least one option actually offers a choice.
|
|
15
|
+
*/
|
|
16
|
+
const needsVariantSelection = (details) => !!details && details.variants.length > 1 && details.options.some((o) => o.values.length > 1);
|
|
17
|
+
/** The variantId to add directly when the product has exactly one variant. */
|
|
18
|
+
const getSingleVariantId = (details) => details && details.variants.length === 1 ? details.variants[0].variantId : void 0;
|
|
19
|
+
/**
|
|
20
|
+
* Initial dropdown state: the options of the first available variant, falling
|
|
21
|
+
* back to the first variant, falling back to the first value of each option —
|
|
22
|
+
* so the selector opens in an addable state whenever possible.
|
|
23
|
+
*/
|
|
24
|
+
const getDefaultVariantSelection = (details) => {
|
|
25
|
+
const defaultVariant = details.variants.find((v) => v.available) ?? details.variants[0];
|
|
26
|
+
if (defaultVariant) return Object.fromEntries(defaultVariant.options.map(({ name, value }) => [name, value]));
|
|
27
|
+
return Object.fromEntries(details.options.filter((o) => o.values.length > 0).map((o) => [o.name, o.values[0]]));
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The variant whose options exactly match the selection (every option name in
|
|
31
|
+
* the variant agrees with the selected value, and counts match), or undefined
|
|
32
|
+
* when the combination does not exist.
|
|
33
|
+
*/
|
|
34
|
+
const findVariantForSelection = (details, selection) => details.variants.find((variant) => variant.options.length === Object.keys(selection).length && variant.options.every(({ name, value }) => selection[name] === value));
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
exports.fetchProductDetails = fetchProductDetails;
|
|
38
|
+
exports.findVariantForSelection = findVariantForSelection;
|
|
39
|
+
exports.getDefaultVariantSelection = getDefaultVariantSelection;
|
|
40
|
+
exports.getSingleVariantId = getSingleVariantId;
|
|
41
|
+
exports.needsVariantSelection = needsVariantSelection;
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudFNlbGVjdGlvbi5janMiLCJuYW1lcyI6WyJDb21tZXJjZUFwaUNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9Qcm9kdWN0RGV0YWlscy92YXJpYW50U2VsZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tZXJjZUFwaUNsaWVudCBmcm9tICdzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpJztcbmltcG9ydCB7XG4gIFByb2R1Y3REZXRhaWxzLFxuICBQcm9kdWN0VmFyaWFudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0UHJvZHVjdE9wdGlvbnNRdWVyeSc7XG5cbi8qKiBBIGRyb3Bkb3duIHNlbGVjdGlvbiBzdGF0ZTogb3B0aW9uIG5hbWUg4oaSIGNob3NlbiB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIFZhcmlhbnRTZWxlY3Rpb24gPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4vKipcbiAqIEltcGVyYXRpdmUgdmFyaWFudC1kZXRhaWxzIGZldGNoIGZvciBjbGljay1kcml2ZW4gZmxvd3MgKHRoZSBtb3VudC1kcml2ZW5cbiAqIHVzZVByb2R1Y3REZXRhaWxzIGhvb2sgaXMgYSBwb29yIGZpdCB3aGVuIHRoZSBmZXRjaCBzaG91bGQgcmlkZSBhIGJ1dHRvbidzXG4gKiBwZW5kaW5nIHN0YXRlKS4gUmVzb2x2ZXMgdW5kZWZpbmVkIHdoZW4gdGhlIHByb2R1Y3QgaGFzIG5vIG9wdGlvbnMgZGF0YS5cbiAqXG4gKiBAdGhyb3dzIG9uIG5ldHdvcmsvSFRUUCBmYWlsdXJlIG9yIEdyYXBoUUwgZXJyb3JzXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFByb2R1Y3REZXRhaWxzID0gKHByb2R1Y3RJZDogc3RyaW5nKTogUHJvbWlzZTxQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZD4gPT5cbiAgQ29tbWVyY2VBcGlDbGllbnQucmV0cmlldmVQcm9kdWN0RGV0YWlscyhwcm9kdWN0SWQpO1xuXG4vKipcbiAqIEEgcHJvZHVjdCBuZWVkcyB0aGUgdmFyaWFudCBzZWxlY3RvciB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdmFyaWFudCB0b1xuICogY2hvb3NlIGJldHdlZW4gYW5kIGF0IGxlYXN0IG9uZSBvcHRpb24gYWN0dWFsbHkgb2ZmZXJzIGEgY2hvaWNlLlxuICovXG5leHBvcnQgY29uc3QgbmVlZHNWYXJpYW50U2VsZWN0aW9uID0gKFxuICBkZXRhaWxzOiBQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZCxcbik6IGRldGFpbHMgaXMgUHJvZHVjdERldGFpbHMgPT5cbiAgISFkZXRhaWxzICYmIGRldGFpbHMudmFyaWFudHMubGVuZ3RoID4gMSAmJiBkZXRhaWxzLm9wdGlvbnMuc29tZShvID0+IG8udmFsdWVzLmxlbmd0aCA+IDEpO1xuXG4vKiogVGhlIHZhcmlhbnRJZCB0byBhZGQgZGlyZWN0bHkgd2hlbiB0aGUgcHJvZHVjdCBoYXMgZXhhY3RseSBvbmUgdmFyaWFudC4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaW5nbGVWYXJpYW50SWQgPSAoZGV0YWlsczogUHJvZHVjdERldGFpbHMgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgZGV0YWlscyAmJiBkZXRhaWxzLnZhcmlhbnRzLmxlbmd0aCA9PT0gMSA/IGRldGFpbHMudmFyaWFudHNbMF0udmFyaWFudElkIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEluaXRpYWwgZHJvcGRvd24gc3RhdGU6IHRoZSBvcHRpb25zIG9mIHRoZSBmaXJzdCBhdmFpbGFibGUgdmFyaWFudCwgZmFsbGluZ1xuICogYmFjayB0byB0aGUgZmlyc3QgdmFyaWFudCwgZmFsbGluZyBiYWNrIHRvIHRoZSBmaXJzdCB2YWx1ZSBvZiBlYWNoIG9wdGlvbiDigJRcbiAqIHNvIHRoZSBzZWxlY3RvciBvcGVucyBpbiBhbiBhZGRhYmxlIHN0YXRlIHdoZW5ldmVyIHBvc3NpYmxlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFZhcmlhbnRTZWxlY3Rpb24gPSAoZGV0YWlsczogUHJvZHVjdERldGFpbHMpOiBWYXJpYW50U2VsZWN0aW9uID0+IHtcbiAgY29uc3QgZGVmYXVsdFZhcmlhbnQgPSBkZXRhaWxzLnZhcmlhbnRzLmZpbmQodiA9PiB2LmF2YWlsYWJsZSkgPz8gZGV0YWlscy52YXJpYW50c1swXTtcbiAgaWYgKGRlZmF1bHRWYXJpYW50KSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhkZWZhdWx0VmFyaWFudC5vcHRpb25zLm1hcCgoeyBuYW1lLCB2YWx1ZSB9KSA9PiBbbmFtZSwgdmFsdWVdKSk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBkZXRhaWxzLm9wdGlvbnMuZmlsdGVyKG8gPT4gby52YWx1ZXMubGVuZ3RoID4gMCkubWFwKG8gPT4gW28ubmFtZSwgby52YWx1ZXNbMF1dKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVGhlIHZhcmlhbnQgd2hvc2Ugb3B0aW9ucyBleGFjdGx5IG1hdGNoIHRoZSBzZWxlY3Rpb24gKGV2ZXJ5IG9wdGlvbiBuYW1lIGluXG4gKiB0aGUgdmFyaWFudCBhZ3JlZXMgd2l0aCB0aGUgc2VsZWN0ZWQgdmFsdWUsIGFuZCBjb3VudHMgbWF0Y2gpLCBvciB1bmRlZmluZWRcbiAqIHdoZW4gdGhlIGNvbWJpbmF0aW9uIGRvZXMgbm90IGV4aXN0LlxuICovXG5leHBvcnQgY29uc3QgZmluZFZhcmlhbnRGb3JTZWxlY3Rpb24gPSAoXG4gIGRldGFpbHM6IFByb2R1Y3REZXRhaWxzLFxuICBzZWxlY3Rpb246IFZhcmlhbnRTZWxlY3Rpb24sXG4pOiBQcm9kdWN0VmFyaWFudCB8IHVuZGVmaW5lZCA9PlxuICBkZXRhaWxzLnZhcmlhbnRzLmZpbmQoXG4gICAgdmFyaWFudCA9PlxuICAgICAgdmFyaWFudC5vcHRpb25zLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMoc2VsZWN0aW9uKS5sZW5ndGggJiZcbiAgICAgIHZhcmlhbnQub3B0aW9ucy5ldmVyeSgoeyBuYW1lLCB2YWx1ZSB9KSA9PiBzZWxlY3Rpb25bbmFtZV0gPT09IHZhbHVlKSxcbiAgKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWdCQSxNQUFhLHVCQUF1QixjQUNsQ0EseUNBQWtCLHVCQUF1QixVQUFVOzs7OztBQU1yRCxNQUFhLHlCQUNYLFlBRUEsQ0FBQyxDQUFDLFdBQVcsUUFBUSxTQUFTLFNBQVMsS0FBSyxRQUFRLFFBQVEsTUFBSyxNQUFLLEVBQUUsT0FBTyxTQUFTLEVBQUU7O0FBRzVGLE1BQWEsc0JBQXNCLFlBQ2pDLFdBQVcsUUFBUSxTQUFTLFdBQVcsSUFBSSxRQUFRLFNBQVMsR0FBRyxZQUFZOzs7Ozs7QUFPN0UsTUFBYSw4QkFBOEIsWUFBOEM7Q0FDdkYsTUFBTSxpQkFBaUIsUUFBUSxTQUFTLE1BQUssTUFBSyxFQUFFLFVBQVUsSUFBSSxRQUFRLFNBQVM7QUFDbkYsS0FBSSxlQUNGLFFBQU8sT0FBTyxZQUFZLGVBQWUsUUFBUSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQztBQUUzRixRQUFPLE9BQU8sWUFDWixRQUFRLFFBQVEsUUFBTyxNQUFLLEVBQUUsT0FBTyxTQUFTLEVBQUUsQ0FBQyxLQUFJLE1BQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUNqRjs7Ozs7OztBQVFILE1BQWEsMkJBQ1gsU0FDQSxjQUVBLFFBQVEsU0FBUyxNQUNmLFlBQ0UsUUFBUSxRQUFRLFdBQVcsT0FBTyxLQUFLLFVBQVUsQ0FBQyxVQUNsRCxRQUFRLFFBQVEsT0FBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLFVBQVUsTUFBTSxDQUN4RSJ9
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ProductDetails, ProductVariant } from "../../application/models/graphql/queries/getProductOptionsQuery.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/ProductDetails/variantSelection.d.ts
|
|
4
|
+
/** A dropdown selection state: option name → chosen value. */
|
|
5
|
+
type VariantSelection = Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Imperative variant-details fetch for click-driven flows (the mount-driven
|
|
8
|
+
* useProductDetails hook is a poor fit when the fetch should ride a button's
|
|
9
|
+
* pending state). Resolves undefined when the product has no options data.
|
|
10
|
+
*
|
|
11
|
+
* @throws on network/HTTP failure or GraphQL errors
|
|
12
|
+
*/
|
|
13
|
+
declare const fetchProductDetails: (productId: string) => Promise<ProductDetails | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* A product needs the variant selector when there is more than one variant to
|
|
16
|
+
* choose between and at least one option actually offers a choice.
|
|
17
|
+
*/
|
|
18
|
+
declare const needsVariantSelection: (details: ProductDetails | undefined) => details is ProductDetails;
|
|
19
|
+
/** The variantId to add directly when the product has exactly one variant. */
|
|
20
|
+
declare const getSingleVariantId: (details: ProductDetails | undefined) => string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Initial dropdown state: the options of the first available variant, falling
|
|
23
|
+
* back to the first variant, falling back to the first value of each option —
|
|
24
|
+
* so the selector opens in an addable state whenever possible.
|
|
25
|
+
*/
|
|
26
|
+
declare const getDefaultVariantSelection: (details: ProductDetails) => VariantSelection;
|
|
27
|
+
/**
|
|
28
|
+
* The variant whose options exactly match the selection (every option name in
|
|
29
|
+
* the variant agrees with the selected value, and counts match), or undefined
|
|
30
|
+
* when the combination does not exist.
|
|
31
|
+
*/
|
|
32
|
+
declare const findVariantForSelection: (details: ProductDetails, selection: VariantSelection) => ProductVariant | undefined;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { VariantSelection, fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection };
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudFNlbGVjdGlvbi5kLmN0cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvUHJvZHVjdERldGFpbHMvdmFyaWFudFNlbGVjdGlvbi5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3REZXRhaWxzLCBQcm9kdWN0VmFyaWFudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFByb2R1Y3RPcHRpb25zUXVlcnknO1xuLyoqIEEgZHJvcGRvd24gc2VsZWN0aW9uIHN0YXRlOiBvcHRpb24gbmFtZSDihpIgY2hvc2VuIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgVmFyaWFudFNlbGVjdGlvbiA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4vKipcbiAqIEltcGVyYXRpdmUgdmFyaWFudC1kZXRhaWxzIGZldGNoIGZvciBjbGljay1kcml2ZW4gZmxvd3MgKHRoZSBtb3VudC1kcml2ZW5cbiAqIHVzZVByb2R1Y3REZXRhaWxzIGhvb2sgaXMgYSBwb29yIGZpdCB3aGVuIHRoZSBmZXRjaCBzaG91bGQgcmlkZSBhIGJ1dHRvbidzXG4gKiBwZW5kaW5nIHN0YXRlKS4gUmVzb2x2ZXMgdW5kZWZpbmVkIHdoZW4gdGhlIHByb2R1Y3QgaGFzIG5vIG9wdGlvbnMgZGF0YS5cbiAqXG4gKiBAdGhyb3dzIG9uIG5ldHdvcmsvSFRUUCBmYWlsdXJlIG9yIEdyYXBoUUwgZXJyb3JzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGZldGNoUHJvZHVjdERldGFpbHM6IChwcm9kdWN0SWQ6IHN0cmluZykgPT4gUHJvbWlzZTxQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZD47XG4vKipcbiAqIEEgcHJvZHVjdCBuZWVkcyB0aGUgdmFyaWFudCBzZWxlY3RvciB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdmFyaWFudCB0b1xuICogY2hvb3NlIGJldHdlZW4gYW5kIGF0IGxlYXN0IG9uZSBvcHRpb24gYWN0dWFsbHkgb2ZmZXJzIGEgY2hvaWNlLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBuZWVkc1ZhcmlhbnRTZWxlY3Rpb246IChkZXRhaWxzOiBQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZCkgPT4gZGV0YWlscyBpcyBQcm9kdWN0RGV0YWlscztcbi8qKiBUaGUgdmFyaWFudElkIHRvIGFkZCBkaXJlY3RseSB3aGVuIHRoZSBwcm9kdWN0IGhhcyBleGFjdGx5IG9uZSB2YXJpYW50LiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZ2V0U2luZ2xlVmFyaWFudElkOiAoZGV0YWlsczogUHJvZHVjdERldGFpbHMgfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKlxuICogSW5pdGlhbCBkcm9wZG93biBzdGF0ZTogdGhlIG9wdGlvbnMgb2YgdGhlIGZpcnN0IGF2YWlsYWJsZSB2YXJpYW50LCBmYWxsaW5nXG4gKiBiYWNrIHRvIHRoZSBmaXJzdCB2YXJpYW50LCBmYWxsaW5nIGJhY2sgdG8gdGhlIGZpcnN0IHZhbHVlIG9mIGVhY2ggb3B0aW9uIOKAlFxuICogc28gdGhlIHNlbGVjdG9yIG9wZW5zIGluIGFuIGFkZGFibGUgc3RhdGUgd2hlbmV2ZXIgcG9zc2libGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldERlZmF1bHRWYXJpYW50U2VsZWN0aW9uOiAoZGV0YWlsczogUHJvZHVjdERldGFpbHMpID0+IFZhcmlhbnRTZWxlY3Rpb247XG4vKipcbiAqIFRoZSB2YXJpYW50IHdob3NlIG9wdGlvbnMgZXhhY3RseSBtYXRjaCB0aGUgc2VsZWN0aW9uIChldmVyeSBvcHRpb24gbmFtZSBpblxuICogdGhlIHZhcmlhbnQgYWdyZWVzIHdpdGggdGhlIHNlbGVjdGVkIHZhbHVlLCBhbmQgY291bnRzIG1hdGNoKSwgb3IgdW5kZWZpbmVkXG4gKiB3aGVuIHRoZSBjb21iaW5hdGlvbiBkb2VzIG5vdCBleGlzdC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZmluZFZhcmlhbnRGb3JTZWxlY3Rpb246IChkZXRhaWxzOiBQcm9kdWN0RGV0YWlscywgc2VsZWN0aW9uOiBWYXJpYW50U2VsZWN0aW9uKSA9PiBQcm9kdWN0VmFyaWFudCB8IHVuZGVmaW5lZDtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxtQkFBbUIsQ0FBQyxXQUFXLE9BQU87QUFDakQsSUFBVyxzQkFBc0I7Q0FBQztPQUFXO09BQVE7Q0FBQTtBQUNyRCxJQUFFLHdCQUFBO0NBQUE7T0FBQTtPQUFBO0NBQUE7QUFDRixJQUFXLHFCQUFxQixDQUFDLFdBQVcsZUFBZTtBQUMzRCxJQUFXLDZCQUE2QjtDQUFDO09BQVc7T0FBc0I7Q0FBRTtBQUM1RSxJQUFXLDBCQUEwQjtDQUFDO09BQVc7T0FBc0I7T0FBRztDQUFBIn0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ProductDetails, ProductVariant } from "../../application/models/graphql/queries/getProductOptionsQuery.js";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/ProductDetails/variantSelection.d.ts
|
|
4
|
+
/** A dropdown selection state: option name → chosen value. */
|
|
5
|
+
type VariantSelection = Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Imperative variant-details fetch for click-driven flows (the mount-driven
|
|
8
|
+
* useProductDetails hook is a poor fit when the fetch should ride a button's
|
|
9
|
+
* pending state). Resolves undefined when the product has no options data.
|
|
10
|
+
*
|
|
11
|
+
* @throws on network/HTTP failure or GraphQL errors
|
|
12
|
+
*/
|
|
13
|
+
declare const fetchProductDetails: (productId: string) => Promise<ProductDetails | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* A product needs the variant selector when there is more than one variant to
|
|
16
|
+
* choose between and at least one option actually offers a choice.
|
|
17
|
+
*/
|
|
18
|
+
declare const needsVariantSelection: (details: ProductDetails | undefined) => details is ProductDetails;
|
|
19
|
+
/** The variantId to add directly when the product has exactly one variant. */
|
|
20
|
+
declare const getSingleVariantId: (details: ProductDetails | undefined) => string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Initial dropdown state: the options of the first available variant, falling
|
|
23
|
+
* back to the first variant, falling back to the first value of each option —
|
|
24
|
+
* so the selector opens in an addable state whenever possible.
|
|
25
|
+
*/
|
|
26
|
+
declare const getDefaultVariantSelection: (details: ProductDetails) => VariantSelection;
|
|
27
|
+
/**
|
|
28
|
+
* The variant whose options exactly match the selection (every option name in
|
|
29
|
+
* the variant agrees with the selected value, and counts match), or undefined
|
|
30
|
+
* when the combination does not exist.
|
|
31
|
+
*/
|
|
32
|
+
declare const findVariantForSelection: (details: ProductDetails, selection: VariantSelection) => ProductVariant | undefined;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { VariantSelection, fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection };
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudFNlbGVjdGlvbi5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9Qcm9kdWN0RGV0YWlscy92YXJpYW50U2VsZWN0aW9uLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvZHVjdERldGFpbHMsIFByb2R1Y3RWYXJpYW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0UHJvZHVjdE9wdGlvbnNRdWVyeSc7XG4vKiogQSBkcm9wZG93biBzZWxlY3Rpb24gc3RhdGU6IG9wdGlvbiBuYW1lIOKGkiBjaG9zZW4gdmFsdWUuICovXG5leHBvcnQgdHlwZSBWYXJpYW50U2VsZWN0aW9uID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbi8qKlxuICogSW1wZXJhdGl2ZSB2YXJpYW50LWRldGFpbHMgZmV0Y2ggZm9yIGNsaWNrLWRyaXZlbiBmbG93cyAodGhlIG1vdW50LWRyaXZlblxuICogdXNlUHJvZHVjdERldGFpbHMgaG9vayBpcyBhIHBvb3IgZml0IHdoZW4gdGhlIGZldGNoIHNob3VsZCByaWRlIGEgYnV0dG9uJ3NcbiAqIHBlbmRpbmcgc3RhdGUpLiBSZXNvbHZlcyB1bmRlZmluZWQgd2hlbiB0aGUgcHJvZHVjdCBoYXMgbm8gb3B0aW9ucyBkYXRhLlxuICpcbiAqIEB0aHJvd3Mgb24gbmV0d29yay9IVFRQIGZhaWx1cmUgb3IgR3JhcGhRTCBlcnJvcnNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZmV0Y2hQcm9kdWN0RGV0YWlsczogKHByb2R1Y3RJZDogc3RyaW5nKSA9PiBQcm9taXNlPFByb2R1Y3REZXRhaWxzIHwgdW5kZWZpbmVkPjtcbi8qKlxuICogQSBwcm9kdWN0IG5lZWRzIHRoZSB2YXJpYW50IHNlbGVjdG9yIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYW50IHRvXG4gKiBjaG9vc2UgYmV0d2VlbiBhbmQgYXQgbGVhc3Qgb25lIG9wdGlvbiBhY3R1YWxseSBvZmZlcnMgYSBjaG9pY2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG5lZWRzVmFyaWFudFNlbGVjdGlvbjogKGRldGFpbHM6IFByb2R1Y3REZXRhaWxzIHwgdW5kZWZpbmVkKSA9PiBkZXRhaWxzIGlzIFByb2R1Y3REZXRhaWxzO1xuLyoqIFRoZSB2YXJpYW50SWQgdG8gYWRkIGRpcmVjdGx5IHdoZW4gdGhlIHByb2R1Y3QgaGFzIGV4YWN0bHkgb25lIHZhcmlhbnQuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBnZXRTaW5nbGVWYXJpYW50SWQ6IChkZXRhaWxzOiBQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBJbml0aWFsIGRyb3Bkb3duIHN0YXRlOiB0aGUgb3B0aW9ucyBvZiB0aGUgZmlyc3QgYXZhaWxhYmxlIHZhcmlhbnQsIGZhbGxpbmdcbiAqIGJhY2sgdG8gdGhlIGZpcnN0IHZhcmlhbnQsIGZhbGxpbmcgYmFjayB0byB0aGUgZmlyc3QgdmFsdWUgb2YgZWFjaCBvcHRpb24g4oCUXG4gKiBzbyB0aGUgc2VsZWN0b3Igb3BlbnMgaW4gYW4gYWRkYWJsZSBzdGF0ZSB3aGVuZXZlciBwb3NzaWJsZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZ2V0RGVmYXVsdFZhcmlhbnRTZWxlY3Rpb246IChkZXRhaWxzOiBQcm9kdWN0RGV0YWlscykgPT4gVmFyaWFudFNlbGVjdGlvbjtcbi8qKlxuICogVGhlIHZhcmlhbnQgd2hvc2Ugb3B0aW9ucyBleGFjdGx5IG1hdGNoIHRoZSBzZWxlY3Rpb24gKGV2ZXJ5IG9wdGlvbiBuYW1lIGluXG4gKiB0aGUgdmFyaWFudCBhZ3JlZXMgd2l0aCB0aGUgc2VsZWN0ZWQgdmFsdWUsIGFuZCBjb3VudHMgbWF0Y2gpLCBvciB1bmRlZmluZWRcbiAqIHdoZW4gdGhlIGNvbWJpbmF0aW9uIGRvZXMgbm90IGV4aXN0LlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBmaW5kVmFyaWFudEZvclNlbGVjdGlvbjogKGRldGFpbHM6IFByb2R1Y3REZXRhaWxzLCBzZWxlY3Rpb246IFZhcmlhbnRTZWxlY3Rpb24pID0+IFByb2R1Y3RWYXJpYW50IHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFXLG1CQUFtQixDQUFDLFdBQVcsT0FBTztBQUNqRCxJQUFXLHNCQUFzQjtDQUFDO09BQVc7T0FBUTtDQUFBO0FBQ3JELElBQUUsd0JBQUE7Q0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNGLElBQVcscUJBQXFCLENBQUMsV0FBVyxlQUFlO0FBQzNELElBQVcsNkJBQTZCO0NBQUM7T0FBVztPQUFzQjtDQUFFO0FBQzVFLElBQVcsMEJBQTBCO0NBQUM7T0FBVztPQUFzQjtPQUFHO0NBQUEifQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import commerce_api_default from "../../application/commerce-api.js";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/ProductDetails/variantSelection.ts
|
|
4
|
+
/**
|
|
5
|
+
* Imperative variant-details fetch for click-driven flows (the mount-driven
|
|
6
|
+
* useProductDetails hook is a poor fit when the fetch should ride a button's
|
|
7
|
+
* pending state). Resolves undefined when the product has no options data.
|
|
8
|
+
*
|
|
9
|
+
* @throws on network/HTTP failure or GraphQL errors
|
|
10
|
+
*/
|
|
11
|
+
const fetchProductDetails = (productId) => commerce_api_default.retrieveProductDetails(productId);
|
|
12
|
+
/**
|
|
13
|
+
* A product needs the variant selector when there is more than one variant to
|
|
14
|
+
* choose between and at least one option actually offers a choice.
|
|
15
|
+
*/
|
|
16
|
+
const needsVariantSelection = (details) => !!details && details.variants.length > 1 && details.options.some((o) => o.values.length > 1);
|
|
17
|
+
/** The variantId to add directly when the product has exactly one variant. */
|
|
18
|
+
const getSingleVariantId = (details) => details && details.variants.length === 1 ? details.variants[0].variantId : void 0;
|
|
19
|
+
/**
|
|
20
|
+
* Initial dropdown state: the options of the first available variant, falling
|
|
21
|
+
* back to the first variant, falling back to the first value of each option —
|
|
22
|
+
* so the selector opens in an addable state whenever possible.
|
|
23
|
+
*/
|
|
24
|
+
const getDefaultVariantSelection = (details) => {
|
|
25
|
+
const defaultVariant = details.variants.find((v) => v.available) ?? details.variants[0];
|
|
26
|
+
if (defaultVariant) return Object.fromEntries(defaultVariant.options.map(({ name, value }) => [name, value]));
|
|
27
|
+
return Object.fromEntries(details.options.filter((o) => o.values.length > 0).map((o) => [o.name, o.values[0]]));
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The variant whose options exactly match the selection (every option name in
|
|
31
|
+
* the variant agrees with the selected value, and counts match), or undefined
|
|
32
|
+
* when the combination does not exist.
|
|
33
|
+
*/
|
|
34
|
+
const findVariantForSelection = (details, selection) => details.variants.find((variant) => variant.options.length === Object.keys(selection).length && variant.options.every(({ name, value }) => selection[name] === value));
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { fetchProductDetails, findVariantForSelection, getDefaultVariantSelection, getSingleVariantId, needsVariantSelection };
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudFNlbGVjdGlvbi5qcyIsIm5hbWVzIjpbIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1Byb2R1Y3REZXRhaWxzL3ZhcmlhbnRTZWxlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHtcbiAgUHJvZHVjdERldGFpbHMsXG4gIFByb2R1Y3RWYXJpYW50LFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRQcm9kdWN0T3B0aW9uc1F1ZXJ5JztcblxuLyoqIEEgZHJvcGRvd24gc2VsZWN0aW9uIHN0YXRlOiBvcHRpb24gbmFtZSDihpIgY2hvc2VuIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgVmFyaWFudFNlbGVjdGlvbiA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogSW1wZXJhdGl2ZSB2YXJpYW50LWRldGFpbHMgZmV0Y2ggZm9yIGNsaWNrLWRyaXZlbiBmbG93cyAodGhlIG1vdW50LWRyaXZlblxuICogdXNlUHJvZHVjdERldGFpbHMgaG9vayBpcyBhIHBvb3IgZml0IHdoZW4gdGhlIGZldGNoIHNob3VsZCByaWRlIGEgYnV0dG9uJ3NcbiAqIHBlbmRpbmcgc3RhdGUpLiBSZXNvbHZlcyB1bmRlZmluZWQgd2hlbiB0aGUgcHJvZHVjdCBoYXMgbm8gb3B0aW9ucyBkYXRhLlxuICpcbiAqIEB0aHJvd3Mgb24gbmV0d29yay9IVFRQIGZhaWx1cmUgb3IgR3JhcGhRTCBlcnJvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGZldGNoUHJvZHVjdERldGFpbHMgPSAocHJvZHVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFByb2R1Y3REZXRhaWxzIHwgdW5kZWZpbmVkPiA9PlxuICBDb21tZXJjZUFwaUNsaWVudC5yZXRyaWV2ZVByb2R1Y3REZXRhaWxzKHByb2R1Y3RJZCk7XG5cbi8qKlxuICogQSBwcm9kdWN0IG5lZWRzIHRoZSB2YXJpYW50IHNlbGVjdG9yIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYW50IHRvXG4gKiBjaG9vc2UgYmV0d2VlbiBhbmQgYXQgbGVhc3Qgb25lIG9wdGlvbiBhY3R1YWxseSBvZmZlcnMgYSBjaG9pY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBuZWVkc1ZhcmlhbnRTZWxlY3Rpb24gPSAoXG4gIGRldGFpbHM6IFByb2R1Y3REZXRhaWxzIHwgdW5kZWZpbmVkLFxuKTogZGV0YWlscyBpcyBQcm9kdWN0RGV0YWlscyA9PlxuICAhIWRldGFpbHMgJiYgZGV0YWlscy52YXJpYW50cy5sZW5ndGggPiAxICYmIGRldGFpbHMub3B0aW9ucy5zb21lKG8gPT4gby52YWx1ZXMubGVuZ3RoID4gMSk7XG5cbi8qKiBUaGUgdmFyaWFudElkIHRvIGFkZCBkaXJlY3RseSB3aGVuIHRoZSBwcm9kdWN0IGhhcyBleGFjdGx5IG9uZSB2YXJpYW50LiAqL1xuZXhwb3J0IGNvbnN0IGdldFNpbmdsZVZhcmlhbnRJZCA9IChkZXRhaWxzOiBQcm9kdWN0RGV0YWlscyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PlxuICBkZXRhaWxzICYmIGRldGFpbHMudmFyaWFudHMubGVuZ3RoID09PSAxID8gZGV0YWlscy52YXJpYW50c1swXS52YXJpYW50SWQgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogSW5pdGlhbCBkcm9wZG93biBzdGF0ZTogdGhlIG9wdGlvbnMgb2YgdGhlIGZpcnN0IGF2YWlsYWJsZSB2YXJpYW50LCBmYWxsaW5nXG4gKiBiYWNrIHRvIHRoZSBmaXJzdCB2YXJpYW50LCBmYWxsaW5nIGJhY2sgdG8gdGhlIGZpcnN0IHZhbHVlIG9mIGVhY2ggb3B0aW9uIOKAlFxuICogc28gdGhlIHNlbGVjdG9yIG9wZW5zIGluIGFuIGFkZGFibGUgc3RhdGUgd2hlbmV2ZXIgcG9zc2libGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VmFyaWFudFNlbGVjdGlvbiA9IChkZXRhaWxzOiBQcm9kdWN0RGV0YWlscyk6IFZhcmlhbnRTZWxlY3Rpb24gPT4ge1xuICBjb25zdCBkZWZhdWx0VmFyaWFudCA9IGRldGFpbHMudmFyaWFudHMuZmluZCh2ID0+IHYuYXZhaWxhYmxlKSA/PyBkZXRhaWxzLnZhcmlhbnRzWzBdO1xuICBpZiAoZGVmYXVsdFZhcmlhbnQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGRlZmF1bHRWYXJpYW50Lm9wdGlvbnMubWFwKCh7IG5hbWUsIHZhbHVlIH0pID0+IFtuYW1lLCB2YWx1ZV0pKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIGRldGFpbHMub3B0aW9ucy5maWx0ZXIobyA9PiBvLnZhbHVlcy5sZW5ndGggPiAwKS5tYXAobyA9PiBbby5uYW1lLCBvLnZhbHVlc1swXV0pLFxuICApO1xufTtcblxuLyoqXG4gKiBUaGUgdmFyaWFudCB3aG9zZSBvcHRpb25zIGV4YWN0bHkgbWF0Y2ggdGhlIHNlbGVjdGlvbiAoZXZlcnkgb3B0aW9uIG5hbWUgaW5cbiAqIHRoZSB2YXJpYW50IGFncmVlcyB3aXRoIHRoZSBzZWxlY3RlZCB2YWx1ZSwgYW5kIGNvdW50cyBtYXRjaCksIG9yIHVuZGVmaW5lZFxuICogd2hlbiB0aGUgY29tYmluYXRpb24gZG9lcyBub3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kVmFyaWFudEZvclNlbGVjdGlvbiA9IChcbiAgZGV0YWlsczogUHJvZHVjdERldGFpbHMsXG4gIHNlbGVjdGlvbjogVmFyaWFudFNlbGVjdGlvbixcbik6IFByb2R1Y3RWYXJpYW50IHwgdW5kZWZpbmVkID0+XG4gIGRldGFpbHMudmFyaWFudHMuZmluZChcbiAgICB2YXJpYW50ID0+XG4gICAgICB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID09PSBPYmplY3Qua2V5cyhzZWxlY3Rpb24pLmxlbmd0aCAmJlxuICAgICAgdmFyaWFudC5vcHRpb25zLmV2ZXJ5KCh7IG5hbWUsIHZhbHVlIH0pID0+IHNlbGVjdGlvbltuYW1lXSA9PT0gdmFsdWUpLFxuICApO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBZ0JBLE1BQWEsdUJBQXVCLGNBQ2xDQSxxQkFBa0IsdUJBQXVCLFVBQVU7Ozs7O0FBTXJELE1BQWEseUJBQ1gsWUFFQSxDQUFDLENBQUMsV0FBVyxRQUFRLFNBQVMsU0FBUyxLQUFLLFFBQVEsUUFBUSxNQUFLLE1BQUssRUFBRSxPQUFPLFNBQVMsRUFBRTs7QUFHNUYsTUFBYSxzQkFBc0IsWUFDakMsV0FBVyxRQUFRLFNBQVMsV0FBVyxJQUFJLFFBQVEsU0FBUyxHQUFHLFlBQVk7Ozs7OztBQU83RSxNQUFhLDhCQUE4QixZQUE4QztDQUN2RixNQUFNLGlCQUFpQixRQUFRLFNBQVMsTUFBSyxNQUFLLEVBQUUsVUFBVSxJQUFJLFFBQVEsU0FBUztBQUNuRixLQUFJLGVBQ0YsUUFBTyxPQUFPLFlBQVksZUFBZSxRQUFRLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBRTNGLFFBQU8sT0FBTyxZQUNaLFFBQVEsUUFBUSxRQUFPLE1BQUssRUFBRSxPQUFPLFNBQVMsRUFBRSxDQUFDLEtBQUksTUFBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQ2pGOzs7Ozs7O0FBUUgsTUFBYSwyQkFDWCxTQUNBLGNBRUEsUUFBUSxTQUFTLE1BQ2YsWUFDRSxRQUFRLFFBQVEsV0FBVyxPQUFPLEtBQUssVUFBVSxDQUFDLFVBQ2xELFFBQVEsUUFBUSxPQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsVUFBVSxNQUFNLENBQ3hFIn0=
|
|
@@ -4,14 +4,14 @@ const require_eventNames = require('../../services/amplitudeService/eventNames.c
|
|
|
4
4
|
require('../../services/amplitudeService/amplitudeService.cjs');
|
|
5
5
|
const require_atoms_envive_enviveConfig = require('../../atoms/envive/enviveConfig.cjs');
|
|
6
6
|
const require_hooks_utils = require('../utils.cjs');
|
|
7
|
-
const require_amplitudeContext = require('../../contexts/amplitudeContext/amplitudeContext.cjs');
|
|
8
|
-
const require_useNewOrgConfig = require('../NewOrgConfig/useNewOrgConfig.cjs');
|
|
9
|
-
require('../NewOrgConfig/index.cjs');
|
|
10
7
|
const require_globalSearch = require('../../atoms/globalSearch/globalSearch.cjs');
|
|
11
8
|
const require_atoms_search_utils = require('../../atoms/search/utils.cjs');
|
|
12
9
|
const require_atoms_search_types = require('../../atoms/search/types.cjs');
|
|
13
10
|
const require_searchAPI = require('../../atoms/search/searchAPI.cjs');
|
|
14
11
|
require('../../atoms/search/index.cjs');
|
|
12
|
+
const require_amplitudeContext = require('../../contexts/amplitudeContext/amplitudeContext.cjs');
|
|
13
|
+
const require_useNewOrgConfig = require('../NewOrgConfig/useNewOrgConfig.cjs');
|
|
14
|
+
require('../NewOrgConfig/index.cjs');
|
|
15
15
|
const require_useIntersection = require('../Intersection/useIntersection.cjs');
|
|
16
16
|
const require_useSearchInput = require('./useSearchInput.cjs');
|
|
17
17
|
const require_useRecommendedProducts = require('./useRecommendedProducts.cjs');
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { SearchResponseProductAttributes } from "../../application/models/api/response.cjs";
|
|
2
2
|
import { ProductCardConfig } from "../../contexts/types.cjs";
|
|
3
3
|
import { SearchResult } from "../../application/models/api/search.cjs";
|
|
4
|
-
import { SelectedFilterOption } from "../../atoms/search/searchAPI.cjs";
|
|
5
4
|
import { SearchFilterDatum, SelectFilterItem } from "../../types/search-filter-types.cjs";
|
|
5
|
+
import { SelectedFilterOption } from "../../atoms/search/searchAPI.cjs";
|
|
6
6
|
import { SearchResultsState } from "../utils.cjs";
|
|
7
7
|
import { SearchResponseProduct } from "@spiffy-ai/commerce-api-client";
|
|
8
8
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { SearchResponseProductAttributes } from "../../application/models/api/response.js";
|
|
2
2
|
import { ProductCardConfig } from "../../contexts/types.js";
|
|
3
3
|
import { SearchResult } from "../../application/models/api/search.js";
|
|
4
|
-
import { SelectedFilterOption } from "../../atoms/search/searchAPI.js";
|
|
5
4
|
import { SearchFilterDatum, SelectFilterItem } from "../../types/search-filter-types.js";
|
|
5
|
+
import { SelectedFilterOption } from "../../atoms/search/searchAPI.js";
|
|
6
6
|
import { SearchResultsState } from "../utils.js";
|
|
7
7
|
import { SearchResponseProduct } from "@spiffy-ai/commerce-api-client";
|
|
8
8
|
|
|
@@ -3,14 +3,14 @@ import { SpiffyMetricsEventName } from "../../services/amplitudeService/eventNam
|
|
|
3
3
|
import "../../services/amplitudeService/amplitudeService.js";
|
|
4
4
|
import { orgShortNameAtom } from "../../atoms/envive/enviveConfig.js";
|
|
5
5
|
import { SearchResultsState, getSearchResultsState } from "../utils.js";
|
|
6
|
-
import { useAmplitude } from "../../contexts/amplitudeContext/amplitudeContext.js";
|
|
7
|
-
import { useNewOrgConfig } from "../NewOrgConfig/useNewOrgConfig.js";
|
|
8
|
-
import "../NewOrgConfig/index.js";
|
|
9
6
|
import { isFilterOpenAtom } from "../../atoms/globalSearch/globalSearch.js";
|
|
10
7
|
import { formatFilterDisplayName } from "../../atoms/search/utils.js";
|
|
11
8
|
import { ProductSorting } from "../../atoms/search/types.js";
|
|
12
9
|
import { addSearchFilterAtom, clearSearchFiltersAtom, createFilterOption, filteredSearchProductsAtom, performSearchAtom, removeSearchFilterAtom, searchAtom, searchFiltersAtom, searchParamsAtom, searchProductSortingAtom, searchSelectedFiltersAtom } from "../../atoms/search/searchAPI.js";
|
|
13
10
|
import "../../atoms/search/index.js";
|
|
11
|
+
import { useAmplitude } from "../../contexts/amplitudeContext/amplitudeContext.js";
|
|
12
|
+
import { useNewOrgConfig } from "../NewOrgConfig/useNewOrgConfig.js";
|
|
13
|
+
import "../NewOrgConfig/index.js";
|
|
14
14
|
import { useIntersection } from "../Intersection/useIntersection.js";
|
|
15
15
|
import { useSearchInput } from "./useSearchInput.js";
|
|
16
16
|
import { useRecommendedProducts } from "./useRecommendedProducts.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { GenerationParams } from "../../application/models/api/generationParams.cjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react2 from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/hooks/SystemSettingsContext/useSystemSettingsContext.d.ts
|
|
5
5
|
declare const useSystemSettingsContext: () => {
|
|
6
6
|
generationParams?: GenerationParams;
|
|
7
7
|
showDebugBar?: boolean;
|
|
8
8
|
endpointURL?: string;
|
|
9
|
-
setGenerationParams:
|
|
9
|
+
setGenerationParams: react2.Dispatch<react2.SetStateAction<GenerationParams | undefined>>;
|
|
10
10
|
};
|
|
11
11
|
//#endregion
|
|
12
12
|
export { useSystemSettingsContext };
|