@commercelayer/react-components 4.2.1-beta.0 → 4.2.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/lib/cjs/components/addresses/SaveAddressesButton.d.ts +7 -2
  2. package/lib/cjs/components/addresses/SaveAddressesButton.js +1 -1
  3. package/lib/cjs/components/gift_cards/GiftCardOrCouponForm.d.ts +6 -4
  4. package/lib/cjs/components/gift_cards/GiftCardOrCouponForm.js +1 -1
  5. package/lib/cjs/components/gift_cards/GiftCardOrCouponRemoveButton.d.ts +2 -0
  6. package/lib/cjs/components/gift_cards/GiftCardOrCouponRemoveButton.js +1 -1
  7. package/lib/cjs/components/orders/OrderContainer.js +1 -1
  8. package/lib/cjs/components/orders/PlaceOrderButton.d.ts +4 -0
  9. package/lib/cjs/components/payment_methods/PaymentMethod.d.ts +8 -4
  10. package/lib/cjs/components/payment_methods/PaymentMethod.js +1 -1
  11. package/lib/cjs/components/payment_methods/PaymentMethodRadioButton.d.ts +6 -2
  12. package/lib/cjs/components/payment_methods/PaymentMethodRadioButton.js +1 -1
  13. package/lib/cjs/components/shipments/Shipment.js +1 -1
  14. package/lib/cjs/components/shipping_methods/ShippingMethodRadioButton.d.ts +9 -5
  15. package/lib/cjs/components/shipping_methods/ShippingMethodRadioButton.js +1 -1
  16. package/lib/cjs/components/utils/PaymentCardsTemplate.d.ts +2 -3
  17. package/lib/cjs/context/AddressContext.d.ts +2 -3
  18. package/lib/cjs/context/AddressContext.js +1 -1
  19. package/lib/cjs/context/OrderContext.d.ts +5 -5
  20. package/lib/cjs/context/PaymentMethodContext.d.ts +2 -2
  21. package/lib/cjs/context/PlaceOrderContext.d.ts +4 -10
  22. package/lib/cjs/context/ShipmentContext.d.ts +2 -3
  23. package/lib/cjs/context/ShipmentContext.js +1 -1
  24. package/lib/cjs/index.d.ts +0 -2
  25. package/lib/cjs/reducers/AddressReducer.d.ts +11 -7
  26. package/lib/cjs/reducers/AddressReducer.js +1 -1
  27. package/lib/cjs/reducers/OrderReducer.d.ts +9 -6
  28. package/lib/cjs/reducers/OrderReducer.js +1 -1
  29. package/lib/cjs/reducers/PaymentMethodReducer.d.ts +6 -3
  30. package/lib/cjs/reducers/PaymentMethodReducer.js +1 -1
  31. package/lib/cjs/reducers/PlaceOrderReducer.d.ts +16 -18
  32. package/lib/cjs/reducers/PlaceOrderReducer.js +1 -1
  33. package/lib/cjs/reducers/ShipmentReducer.d.ts +6 -3
  34. package/lib/cjs/reducers/ShipmentReducer.js +1 -1
  35. package/lib/esm/components/addresses/SaveAddressesButton.d.ts +7 -2
  36. package/lib/esm/components/addresses/SaveAddressesButton.js +1 -1
  37. package/lib/esm/components/gift_cards/GiftCardOrCouponForm.d.ts +6 -4
  38. package/lib/esm/components/gift_cards/GiftCardOrCouponForm.js +1 -1
  39. package/lib/esm/components/gift_cards/GiftCardOrCouponRemoveButton.d.ts +2 -0
  40. package/lib/esm/components/gift_cards/GiftCardOrCouponRemoveButton.js +1 -1
  41. package/lib/esm/components/orders/OrderContainer.js +1 -1
  42. package/lib/esm/components/orders/PlaceOrderButton.d.ts +4 -0
  43. package/lib/esm/components/payment_methods/PaymentMethod.d.ts +8 -4
  44. package/lib/esm/components/payment_methods/PaymentMethod.js +1 -1
  45. package/lib/esm/components/payment_methods/PaymentMethodRadioButton.d.ts +6 -2
  46. package/lib/esm/components/payment_methods/PaymentMethodRadioButton.js +1 -1
  47. package/lib/esm/components/shipments/Shipment.js +1 -1
  48. package/lib/esm/components/shipping_methods/ShippingMethodRadioButton.d.ts +9 -5
  49. package/lib/esm/components/shipping_methods/ShippingMethodRadioButton.js +1 -1
  50. package/lib/esm/components/utils/PaymentCardsTemplate.d.ts +2 -3
  51. package/lib/esm/context/AddressContext.d.ts +2 -3
  52. package/lib/esm/context/AddressContext.js +1 -1
  53. package/lib/esm/context/OrderContext.d.ts +5 -5
  54. package/lib/esm/context/PaymentMethodContext.d.ts +2 -2
  55. package/lib/esm/context/PlaceOrderContext.d.ts +4 -10
  56. package/lib/esm/context/ShipmentContext.d.ts +2 -3
  57. package/lib/esm/context/ShipmentContext.js +1 -1
  58. package/lib/esm/index.d.ts +0 -2
  59. package/lib/esm/reducers/AddressReducer.d.ts +11 -7
  60. package/lib/esm/reducers/AddressReducer.js +1 -1
  61. package/lib/esm/reducers/OrderReducer.d.ts +9 -6
  62. package/lib/esm/reducers/OrderReducer.js +1 -1
  63. package/lib/esm/reducers/PaymentMethodReducer.d.ts +6 -3
  64. package/lib/esm/reducers/PaymentMethodReducer.js +1 -1
  65. package/lib/esm/reducers/PlaceOrderReducer.d.ts +16 -18
  66. package/lib/esm/reducers/PlaceOrderReducer.js +1 -1
  67. package/lib/esm/reducers/ShipmentReducer.d.ts +6 -3
  68. package/lib/esm/reducers/ShipmentReducer.js +1 -1
  69. package/lib/tsconfig.prod.esm.tsbuildinfo +1 -1
  70. package/lib/tsconfig.prod.tsbuildinfo +1 -1
  71. package/package.json +1 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPaymentConfig=exports.setPaymentMethodConfig=exports.destroyPaymentSource=exports.updatePaymentSource=exports.setPaymentSource=exports.setPaymentMethod=exports.getPaymentMethods=exports.setPaymentMethodErrors=exports.paymentMethodInitialState=exports.setPaymentRef=exports.setLoading=void 0;const tslib_1=require("tslib"),baseReducer_1=tslib_1.__importDefault(require("../utils/baseReducer")),getErrors_1=tslib_1.__importStar(require("../utils/getErrors")),getSdk_1=tslib_1.__importDefault(require("../utils/getSdk")),snakeToCamelCase_1=require("../utils/snakeToCamelCase"),replace_1=require("../utils/replace"),pick_1=require("../utils/pick");function setLoading({loading,dispatch}){dispatch&&dispatch({type:"setLoading",payload:{loading}})}exports.setLoading=setLoading;const setPaymentRef=({ref,dispatch})=>{ref&&dispatch&&dispatch({type:"setPaymentRef",payload:{currentPaymentMethodRef:ref}})};exports.setPaymentRef=setPaymentRef,exports.paymentMethodInitialState={errors:[],paymentMethods:void 0};const setPaymentMethodErrors=(errors,dispatch)=>{dispatch&&dispatch({type:"setErrors",payload:{errors}})};exports.setPaymentMethodErrors=setPaymentMethodErrors;const getPaymentMethods=async({order,dispatch})=>{const paymentMethods=order.available_payment_methods,paymentMethod=order.payment_method,paymentSource=order.payment_source;dispatch({type:"setPaymentMethods",payload:{paymentMethods,currentPaymentMethodId:paymentMethod?.id,currentPaymentMethodType:paymentMethod?.payment_source_type,paymentSource}})};exports.getPaymentMethods=getPaymentMethods;const setPaymentMethod=async({config,dispatch,order,paymentMethodId,updateOrder,setOrderErrors,paymentResource})=>{try{if(config&&order&&dispatch&&paymentResource){localStorage.removeItem("_save_payment_source_to_customer_wallet");const attributes={payment_method:(0,getSdk_1.default)(config).payment_methods.relationship(paymentMethodId)};updateOrder&&await updateOrder({id:order.id,attributes}),dispatch({type:"setPaymentMethods",payload:{currentPaymentMethodId:paymentMethodId,currentPaymentMethodType:paymentResource,errors:[]}}),setOrderErrors&&setOrderErrors([])}}catch(error){const errors=(0,getErrors_1.default)(error,"orders",paymentResource);console.error("Set payment method",errors)}};exports.setPaymentMethod=setPaymentMethod;const setPaymentSource=async({config,dispatch,getOrder,attributes,order,paymentResource,customerPaymentSourceId,paymentSourceId,updateOrder,errors:currentErrors})=>{try{if(config&&order){let paymentSource;const sdk=(0,getSdk_1.default)(config);if(customerPaymentSourceId)updateOrder&&await updateOrder({id:order.id,attributes:{_customer_payment_source_id:customerPaymentSourceId}});else{if(paymentSourceId){const attrs={id:paymentSourceId,...attributes};paymentSource=attributes!=null?await sdk[paymentResource].update(attrs):await sdk[paymentResource].retrieve(paymentSourceId)}else{const attrs={...attributes,order:sdk.orders.relationship(order.id)};paymentSource=await sdk[paymentResource].create(attrs)}return getOrder&&await getOrder(order.id),dispatch&&dispatch({type:"setPaymentSource",payload:{paymentSource,errors:[]}}),paymentSource}}}catch(error){const errors=(0,getErrors_1.default)(error,"payment_methods",paymentResource);console.error("Set payment source:",errors),dispatch&&(0,getErrors_1.setErrors)({currentErrors,newErrors:errors,dispatch})}};exports.setPaymentSource=setPaymentSource;const updatePaymentSource=async({id,attributes,config,dispatch,paymentResource})=>{if(config)try{const paymentSource=await(0,getSdk_1.default)(config)[paymentResource].update({id,...attributes});dispatch&&dispatch({type:"setPaymentSource",payload:{paymentSource}})}catch(err){console.error("Update payment source:",err)}};exports.updatePaymentSource=updatePaymentSource;const destroyPaymentSource=async({paymentSourceId,paymentResource,dispatch})=>{paymentSourceId&&paymentResource&&dispatch&&dispatch({type:"setPaymentSource",payload:{paymentSource:void 0}})};exports.destroyPaymentSource=destroyPaymentSource;const setPaymentMethodConfig=(config,dispatch)=>{dispatch({type:"setPaymentMethodConfig",payload:{config}})};exports.setPaymentMethodConfig=setPaymentMethodConfig;function getPaymentConfig(paymentResource,config){const resourceKeys=(0,replace_1.replace)((0,replace_1.replace)(paymentResource,"payments","payment"),"transfers","transfer"),resource=(0,snakeToCamelCase_1.snakeToCamelCase)(resourceKeys);return(0,pick_1.pick)(config,[resource])}exports.getPaymentConfig=getPaymentConfig;const type=["setErrors","setPaymentMethodConfig","setPaymentMethods","setPaymentSource","setPaymentRef","setLoading"],paymentMethodReducer=(state,reducer)=>(0,baseReducer_1.default)(state,reducer,type);exports.default=paymentMethodReducer;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPaymentConfig=exports.setPaymentMethodConfig=exports.destroyPaymentSource=exports.updatePaymentSource=exports.setPaymentSource=exports.setPaymentMethod=exports.getPaymentMethods=exports.setPaymentMethodErrors=exports.paymentMethodInitialState=exports.setPaymentRef=exports.setLoading=void 0;const tslib_1=require("tslib"),baseReducer_1=tslib_1.__importDefault(require("../utils/baseReducer")),getErrors_1=tslib_1.__importStar(require("../utils/getErrors")),getSdk_1=tslib_1.__importDefault(require("../utils/getSdk")),snakeToCamelCase_1=require("../utils/snakeToCamelCase"),replace_1=require("../utils/replace"),pick_1=require("../utils/pick");function setLoading({loading,dispatch}){dispatch&&dispatch({type:"setLoading",payload:{loading}})}exports.setLoading=setLoading;const setPaymentRef=({ref,dispatch})=>{ref&&dispatch&&dispatch({type:"setPaymentRef",payload:{currentPaymentMethodRef:ref}})};exports.setPaymentRef=setPaymentRef,exports.paymentMethodInitialState={errors:[],paymentMethods:void 0};const setPaymentMethodErrors=(errors,dispatch)=>{dispatch&&dispatch({type:"setErrors",payload:{errors}})};exports.setPaymentMethodErrors=setPaymentMethodErrors;const getPaymentMethods=async({order,dispatch})=>{const paymentMethods=order.available_payment_methods,paymentMethod=order.payment_method,paymentSource=order.payment_source;dispatch({type:"setPaymentMethods",payload:{paymentMethods,currentPaymentMethodId:paymentMethod?.id,currentPaymentMethodType:paymentMethod?.payment_source_type,paymentSource}})};exports.getPaymentMethods=getPaymentMethods;async function setPaymentMethod({config,dispatch,order,paymentMethodId,updateOrder,setOrderErrors,paymentResource}){let response={success:!1};try{if(config&&order&&dispatch&&paymentResource){localStorage.removeItem("_save_payment_source_to_customer_wallet");const attributes={payment_method:(0,getSdk_1.default)(config).payment_methods.relationship(paymentMethodId)};updateOrder!=null&&(response=await updateOrder({id:order.id,attributes})),dispatch({type:"setPaymentMethods",payload:{currentPaymentMethodId:paymentMethodId,currentPaymentMethodType:paymentResource,errors:[]}}),setOrderErrors&&setOrderErrors([])}return response}catch(error){const errors=(0,getErrors_1.default)(error,"orders",paymentResource);return console.error("Set payment method",errors),response}}exports.setPaymentMethod=setPaymentMethod;const setPaymentSource=async({config,dispatch,getOrder,attributes,order,paymentResource,customerPaymentSourceId,paymentSourceId,updateOrder,errors:currentErrors})=>{try{if(config&&order){let paymentSource;const sdk=(0,getSdk_1.default)(config);if(customerPaymentSourceId)updateOrder&&await updateOrder({id:order.id,attributes:{_customer_payment_source_id:customerPaymentSourceId}});else{if(paymentSourceId){const attrs={id:paymentSourceId,...attributes};paymentSource=attributes!=null?await sdk[paymentResource].update(attrs):await sdk[paymentResource].retrieve(paymentSourceId)}else{const attrs={...attributes,order:sdk.orders.relationship(order.id)};paymentSource=await sdk[paymentResource].create(attrs)}return getOrder&&await getOrder(order.id),dispatch&&dispatch({type:"setPaymentSource",payload:{paymentSource,errors:[]}}),paymentSource}}}catch(error){const errors=(0,getErrors_1.default)(error,"payment_methods",paymentResource);console.error("Set payment source:",errors),dispatch&&(0,getErrors_1.setErrors)({currentErrors,newErrors:errors,dispatch})}};exports.setPaymentSource=setPaymentSource;const updatePaymentSource=async({id,attributes,config,dispatch,paymentResource})=>{if(config)try{const paymentSource=await(0,getSdk_1.default)(config)[paymentResource].update({id,...attributes});dispatch&&dispatch({type:"setPaymentSource",payload:{paymentSource}})}catch(err){console.error("Update payment source:",err)}};exports.updatePaymentSource=updatePaymentSource;const destroyPaymentSource=async({paymentSourceId,paymentResource,dispatch})=>{paymentSourceId&&paymentResource&&dispatch&&dispatch({type:"setPaymentSource",payload:{paymentSource:void 0}})};exports.destroyPaymentSource=destroyPaymentSource;const setPaymentMethodConfig=(config,dispatch)=>{dispatch({type:"setPaymentMethodConfig",payload:{config}})};exports.setPaymentMethodConfig=setPaymentMethodConfig;function getPaymentConfig(paymentResource,config){const resourceKeys=(0,replace_1.replace)((0,replace_1.replace)(paymentResource,"payments","payment"),"transfers","transfer"),resource=(0,snakeToCamelCase_1.snakeToCamelCase)(resourceKeys);return(0,pick_1.pick)(config,[resource])}exports.getPaymentConfig=getPaymentConfig;const type=["setErrors","setPaymentMethodConfig","setPaymentMethods","setPaymentSource","setPaymentRef","setLoading"],paymentMethodReducer=(state,reducer)=>(0,baseReducer_1.default)(state,reducer,type);exports.default=paymentMethodReducer;
@@ -1,11 +1,10 @@
1
- import { Dispatch, RefObject } from 'react';
2
- import { BaseError } from '../typings/errors';
3
- import { CommerceLayerConfig } from '../context/CommerceLayerContext';
4
- import { Order } from '@commercelayer/sdk';
5
- import { PaymentResource } from './PaymentMethodReducer';
6
- import { PaymentSourceType } from './PaymentMethodReducer';
1
+ import type { Dispatch, RefObject } from 'react';
2
+ import type { CommerceLayerConfig } from '../context/CommerceLayerContext';
3
+ import type { BaseError } from '../typings/errors';
4
+ import type { Order } from '@commercelayer/sdk';
5
+ import { PaymentResource, PaymentSourceType } from './PaymentMethodReducer';
7
6
  export type PlaceOrderActionType = 'setErrors' | 'setPlaceOrderPermitted' | 'setButtonRef';
8
- export type PlaceOrderOptions = {
7
+ export interface PlaceOrderOptions {
9
8
  paypalPayerId?: string;
10
9
  adyen?: {
11
10
  MD?: string;
@@ -15,7 +14,7 @@ export type PlaceOrderOptions = {
15
14
  checkoutCom?: {
16
15
  session_id: string;
17
16
  };
18
- };
17
+ }
19
18
  export interface PlaceOrderActionPayload {
20
19
  errors: BaseError[];
21
20
  isPermitted: boolean;
@@ -33,18 +32,15 @@ export interface PlaceOrderAction {
33
32
  payload: Partial<PlaceOrderActionPayload>;
34
33
  }
35
34
  export declare const placeOrderInitialState: PlaceOrderState;
36
- export interface SetPlaceOrderErrors {
37
- <V extends BaseError[]>(errors: V, dispatch?: Dispatch<PlaceOrderAction>): void;
38
- }
39
- export declare const setPlaceOrderErrors: SetPlaceOrderErrors;
40
- type PlaceOrderPermitted = (args: {
35
+ export declare function setPlaceOrderErrors<V extends BaseError[]>(errors: V, dispatch: Dispatch<PlaceOrderAction>): void;
36
+ interface TPlaceOrderPermittedParams {
41
37
  config?: CommerceLayerConfig;
42
38
  dispatch: Dispatch<PlaceOrderAction>;
43
39
  order?: Order;
44
40
  options?: PlaceOrderOptions;
45
- }) => void;
46
- export declare const placeOrderPermitted: PlaceOrderPermitted;
47
- export type SetPlaceOrder = (args: {
41
+ }
42
+ export declare function placeOrderPermitted({ config, order, dispatch, options }: TPlaceOrderPermittedParams): void;
43
+ interface TSetPlaceOrderParams {
48
44
  config?: CommerceLayerConfig;
49
45
  order?: Order;
50
46
  state?: PlaceOrderState;
@@ -54,9 +50,11 @@ export type SetPlaceOrder = (args: {
54
50
  };
55
51
  include?: string[];
56
52
  setOrder?: (order: Order) => void;
57
- }) => Promise<{
53
+ }
54
+ export declare function setPlaceOrder({ state, order, config, setOrderErrors, paymentSource, setOrder, include }: TSetPlaceOrderParams): Promise<{
58
55
  placed: boolean;
56
+ errors?: BaseError[];
57
+ order?: Order;
59
58
  }>;
60
- export declare const setPlaceOrder: SetPlaceOrder;
61
59
  declare const placeOrderReducer: (state: PlaceOrderState, reducer: PlaceOrderAction) => PlaceOrderState;
62
60
  export default placeOrderReducer;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setPlaceOrder=exports.placeOrderPermitted=exports.setPlaceOrderErrors=exports.placeOrderInitialState=exports.setButtonRef=void 0;const tslib_1=require("tslib"),baseReducer_1=tslib_1.__importDefault(require("../utils/baseReducer")),isEmpty_1=tslib_1.__importDefault(require("lodash/isEmpty")),shipments_1=require("../utils/shipments"),customerOrderOptions_1=require("../utils/customerOrderOptions"),getSdk_1=tslib_1.__importDefault(require("../utils/getSdk")),getErrors_1=tslib_1.__importDefault(require("../utils/getErrors"));function setButtonRef(ref,dispatch){ref!=null&&ref.current!=null&&dispatch({type:"setButtonRef",payload:{placeOrderButtonRef:ref}})}exports.setButtonRef=setButtonRef,exports.placeOrderInitialState={errors:[],isPermitted:!1};const setPlaceOrderErrors=(errors,dispatch)=>{dispatch&&dispatch({type:"setErrors",payload:{errors}})};exports.setPlaceOrderErrors=setPlaceOrderErrors;const placeOrderPermitted=async({config,order,dispatch,options})=>{if(order&&config){let isPermitted=!0;order.privacy_url&&order.terms_url&&(isPermitted=localStorage.getItem("privacy-terms")==="true");const billingAddress=order.billing_address,shippingAddress=order.shipping_address,doNotShip=(0,shipments_1.isDoNotShip)(order.line_items),shipments=order.shipments,shipment=shipments&&(0,shipments_1.shipmentsFilled)(shipments),paymentMethod=order.payment_method,paymentSource=order.payment_source;order.total_amount_with_taxes_cents!==0&&(0,isEmpty_1.default)(paymentMethod?.id)&&(isPermitted=!1),(0,isEmpty_1.default)(billingAddress)&&(isPermitted=!1),(0,isEmpty_1.default)(shippingAddress)&&!doNotShip&&(isPermitted=!1),!(0,isEmpty_1.default)(shipments)&&!shipment&&(isPermitted=!1),paymentSource?.mismatched_amounts&&(isPermitted=!1),dispatch({type:"setPlaceOrderPermitted",payload:{isPermitted,paymentType:paymentMethod?.payment_source_type,paymentSecret:paymentSource?.client_secret,paymentId:paymentSource?.options?.id,paymentSource,options}})}};exports.placeOrderPermitted=placeOrderPermitted;const setPlaceOrder=async({state,order,config,setOrderErrors,paymentSource,setOrder,include})=>{const response={placed:!1};if(state&&config&&order){const sdk=(0,getSdk_1.default)(config),{options,paymentType}=state;try{if(paymentType==="paypal_payments"&&paymentSource){if(!options?.paypalPayerId&&paymentSource?.approval_url)return window.location.href=paymentSource?.approval_url,response;await sdk[paymentType].update({id:paymentSource.id,paypal_payer_id:options?.paypalPayerId})}if(paymentType==="checkout_com_payments"&&paymentSource&&options?.checkoutCom?.session_id){const payment=await sdk[paymentType].update({id:paymentSource.id,_details:!0,session_id:options?.checkoutCom?.session_id});if(payment?.payment_response?.status!=="Authorized"){const[action]=payment?.payment_response?.actions||[""];throw{errors:[{code:"PAYMENT_NOT_APPROVED_FOR_EXECUTION",message:action?.response_summary,resource:"orders",field:"checkout_com_payments"}]}}}const updateAttributes={id:order.id,_place:!0};switch((0,customerOrderOptions_1.saveBillingAddress)()&&await sdk.orders.update({id:order.id,_save_billing_address_to_customer_address_book:!0}),(0,customerOrderOptions_1.saveShippingAddress)()&&await sdk.orders.update({id:order.id,_save_shipping_address_to_customer_address_book:!0}),paymentType){case"braintree_payments":{(0,customerOrderOptions_1.saveToWallet)()&&await sdk.orders.update({id:order.id,_save_payment_source_to_customer_wallet:!0});const orderUpdated=await sdk.orders.update(updateAttributes,{include});return setOrder&&setOrder(orderUpdated),setOrderErrors&&setOrderErrors([]),{placed:!0}}default:{const orderUpdated=await sdk.orders.update(updateAttributes,{include});return setOrder&&setOrder(orderUpdated),(0,customerOrderOptions_1.saveToWallet)()&&await sdk.orders.update({id:order.id,_save_payment_source_to_customer_wallet:!0}),setOrderErrors&&setOrderErrors([]),{placed:!0}}}}catch(error){const errors=(0,getErrors_1.default)(error,"orders",paymentType);return setOrderErrors&&setOrderErrors(errors),{...response,errors}}}return response};exports.setPlaceOrder=setPlaceOrder;const type=["setErrors","setPlaceOrderPermitted","setButtonRef"],placeOrderReducer=(state,reducer)=>(0,baseReducer_1.default)(state,reducer,type);exports.default=placeOrderReducer;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setPlaceOrder=exports.placeOrderPermitted=exports.setPlaceOrderErrors=exports.placeOrderInitialState=exports.setButtonRef=void 0;const tslib_1=require("tslib"),baseReducer_1=tslib_1.__importDefault(require("../utils/baseReducer")),isEmpty_1=tslib_1.__importDefault(require("lodash/isEmpty")),shipments_1=require("../utils/shipments"),customerOrderOptions_1=require("../utils/customerOrderOptions"),getSdk_1=tslib_1.__importDefault(require("../utils/getSdk")),getErrors_1=tslib_1.__importDefault(require("../utils/getErrors"));function setButtonRef(ref,dispatch){ref?.current!=null&&dispatch({type:"setButtonRef",payload:{placeOrderButtonRef:ref}})}exports.setButtonRef=setButtonRef,exports.placeOrderInitialState={errors:[],isPermitted:!1};function setPlaceOrderErrors(errors,dispatch){dispatch&&dispatch({type:"setErrors",payload:{errors}})}exports.setPlaceOrderErrors=setPlaceOrderErrors;function placeOrderPermitted({config,order,dispatch,options}){if(order&&config){let isPermitted=!0;order.privacy_url&&order.terms_url&&(isPermitted=localStorage.getItem("privacy-terms")==="true");const billingAddress=order.billing_address,shippingAddress=order.shipping_address,doNotShip=(0,shipments_1.isDoNotShip)(order.line_items),shipments=order.shipments,shipment=shipments&&(0,shipments_1.shipmentsFilled)(shipments),paymentMethod=order.payment_method,paymentSource=order.payment_source;order.total_amount_with_taxes_cents!==0&&(0,isEmpty_1.default)(paymentMethod?.id)&&(isPermitted=!1),(0,isEmpty_1.default)(billingAddress)&&(isPermitted=!1),(0,isEmpty_1.default)(shippingAddress)&&!doNotShip&&(isPermitted=!1),!(0,isEmpty_1.default)(shipments)&&!shipment&&(isPermitted=!1),paymentSource?.mismatched_amounts&&(isPermitted=!1),dispatch({type:"setPlaceOrderPermitted",payload:{isPermitted,paymentType:paymentMethod?.payment_source_type,paymentSecret:paymentSource?.client_secret,paymentId:paymentSource?.options?.id,paymentSource,options}})}}exports.placeOrderPermitted=placeOrderPermitted;async function setPlaceOrder({state,order,config,setOrderErrors,paymentSource,setOrder,include}){const response={placed:!1};if(state&&config&&order){const sdk=(0,getSdk_1.default)(config),{options,paymentType}=state;try{if(paymentType==="paypal_payments"&&paymentSource){if(!options?.paypalPayerId&&paymentSource?.approval_url)return window.location.href=paymentSource?.approval_url,response;await sdk[paymentType].update({id:paymentSource.id,paypal_payer_id:options?.paypalPayerId})}if(paymentType==="checkout_com_payments"&&paymentSource&&options?.checkoutCom?.session_id){const payment=await sdk[paymentType].update({id:paymentSource.id,_details:!0,session_id:options?.checkoutCom?.session_id});if(payment?.payment_response?.status!=="Authorized"){const[action]=payment?.payment_response?.actions||[""];throw{errors:[{code:"PAYMENT_NOT_APPROVED_FOR_EXECUTION",message:action?.response_summary,resource:"orders",field:"checkout_com_payments"}]}}}const updateAttributes={id:order.id,_place:!0};switch((0,customerOrderOptions_1.saveBillingAddress)()&&await sdk.orders.update({id:order.id,_save_billing_address_to_customer_address_book:!0}),(0,customerOrderOptions_1.saveShippingAddress)()&&await sdk.orders.update({id:order.id,_save_shipping_address_to_customer_address_book:!0}),paymentType){case"braintree_payments":{(0,customerOrderOptions_1.saveToWallet)()&&await sdk.orders.update({id:order.id,_save_payment_source_to_customer_wallet:!0});const orderUpdated=await sdk.orders.update(updateAttributes,{include});return setOrder&&setOrder(orderUpdated),setOrderErrors&&setOrderErrors([]),{placed:!0,order:orderUpdated}}default:{const orderUpdated=await sdk.orders.update(updateAttributes,{include});return setOrder&&setOrder(orderUpdated),(0,customerOrderOptions_1.saveToWallet)()&&await sdk.orders.update({id:order.id,_save_payment_source_to_customer_wallet:!0}),setOrderErrors&&setOrderErrors([]),{placed:!0,order:orderUpdated}}}}catch(error){const errors=(0,getErrors_1.default)(error,"orders",paymentType);return setOrderErrors&&setOrderErrors(errors),{...response,errors}}}return response}exports.setPlaceOrder=setPlaceOrder;const type=["setErrors","setPlaceOrderPermitted","setButtonRef"],placeOrderReducer=(state,reducer)=>(0,baseReducer_1.default)(state,reducer,type);exports.default=placeOrderReducer;
@@ -26,13 +26,16 @@ type GetShipments = (args: {
26
26
  config: CommerceLayerConfig;
27
27
  }) => Promise<void>;
28
28
  export declare const getShipments: GetShipments;
29
- type SetShippingMethod = (args: {
29
+ interface TSetShippingMethodParams {
30
30
  config: CommerceLayerConfig;
31
31
  shipmentId: string;
32
32
  shippingMethodId: string;
33
33
  order?: Order;
34
34
  getOrder?: getOrderContext;
35
- }) => Promise<void>;
36
- export declare const setShippingMethod: SetShippingMethod;
35
+ }
36
+ export declare function setShippingMethod({ config, shipmentId, shippingMethodId, getOrder, order }: TSetShippingMethodParams): Promise<{
37
+ success: boolean;
38
+ order?: Order;
39
+ }>;
37
40
  declare const shipmentReducer: (state: ShipmentState, reducer: ShipmentAction) => ShipmentState;
38
41
  export default shipmentReducer;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setShippingMethod=exports.getShipments=exports.setShipmentErrors=exports.shipmentInitialState=void 0;const tslib_1=require("tslib"),baseReducer_1=tslib_1.__importDefault(require("../utils/baseReducer")),getSdk_1=tslib_1.__importDefault(require("../utils/getSdk"));exports.shipmentInitialState={errors:[]};const setShipmentErrors=(errors,dispatch)=>{dispatch&&dispatch({type:"setErrors",payload:{errors}})};exports.setShipmentErrors=setShipmentErrors;const getShipments=async({order,dispatch,config})=>{try{const sdk=(0,getSdk_1.default)(config),shipments=order.shipments,deliveryLeadTimes=await sdk.delivery_lead_times.list({include:["shipping_method","stock_location"]});dispatch({type:"setShipments",payload:{shipments,deliveryLeadTimes}})}catch(error){console.error(error)}};exports.getShipments=getShipments;const setShippingMethod=async({config,shipmentId,shippingMethodId,getOrder,order})=>{try{if(shippingMethodId){const sdk=(0,getSdk_1.default)(config);await sdk.shipments.update({id:shipmentId,shipping_method:sdk.shipping_methods.relationship(shippingMethodId)}),getOrder&&order&&await getOrder(order.id)}}catch(error){console.error(error)}};exports.setShippingMethod=setShippingMethod;const type=["setErrors","setShipments","setShippingMethod"],shipmentReducer=(state,reducer)=>(0,baseReducer_1.default)(state,reducer,type);exports.default=shipmentReducer;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setShippingMethod=exports.getShipments=exports.setShipmentErrors=exports.shipmentInitialState=void 0;const tslib_1=require("tslib"),baseReducer_1=tslib_1.__importDefault(require("../utils/baseReducer")),getSdk_1=tslib_1.__importDefault(require("../utils/getSdk"));exports.shipmentInitialState={errors:[]};const setShipmentErrors=(errors,dispatch)=>{dispatch&&dispatch({type:"setErrors",payload:{errors}})};exports.setShipmentErrors=setShipmentErrors;const getShipments=async({order,dispatch,config})=>{try{const sdk=(0,getSdk_1.default)(config),shipments=order.shipments,deliveryLeadTimes=await sdk.delivery_lead_times.list({include:["shipping_method","stock_location"]});dispatch({type:"setShipments",payload:{shipments,deliveryLeadTimes}})}catch(error){console.error(error)}};exports.getShipments=getShipments;async function setShippingMethod({config,shipmentId,shippingMethodId,getOrder,order}){try{if(shippingMethodId){const sdk=(0,getSdk_1.default)(config);if(await sdk.shipments.update({id:shipmentId,shipping_method:sdk.shipping_methods.relationship(shippingMethodId)}),getOrder!=null&&order!=null)return{success:!0,order:await getOrder(order.id)}}return{success:!1}}catch(error){return console.error(error),{success:!1}}}exports.setShippingMethod=setShippingMethod;const type=["setErrors","setShipments","setShippingMethod"],shipmentReducer=(state,reducer)=>(0,baseReducer_1.default)(state,reducer,type);exports.default=shipmentReducer;
@@ -1,11 +1,16 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ChildrenFunction } from '../../typings/index';
3
+ import type { Order } from '@commercelayer/sdk';
4
+ interface TOnClick {
5
+ success: boolean;
6
+ order?: Order;
7
+ }
3
8
  interface ChildrenProps extends Omit<Props, 'children'> {
4
9
  }
5
- interface Props extends Omit<JSX.IntrinsicElements['button'], 'children'> {
10
+ interface Props extends Omit<JSX.IntrinsicElements['button'], 'children' | 'onClick'> {
6
11
  children?: ChildrenFunction<ChildrenProps>;
7
12
  label?: string | ReactNode;
8
- onClick?: () => void;
13
+ onClick?: (params: TOnClick) => void;
9
14
  addressId?: string;
10
15
  }
11
16
  export declare function SaveAddressesButton(props: Props): JSX.Element;
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useContext,useState}from"react";import Parent from"../utils/Parent";import AddressContext from"../../context/AddressContext";import{shippingAddressController,countryLockController,billingAddressController}from"../../utils/addressesManager";import OrderContext from"../../context/OrderContext";import CustomerContext from"../../context/CustomerContext";import isFunction from"lodash/isFunction";export function SaveAddressesButton(props){const{children,label="Continue to delivery",resource,disabled=!1,addressId,onClick,...p}=props,{errors,billing_address:billingAddress,shipToDifferentAddress,shipping_address:shippingAddress,saveAddresses,billingAddressId,shippingAddressId}=useContext(AddressContext),{order}=useContext(OrderContext),{addresses,isGuest,createCustomerAddress}=useContext(CustomerContext),[forceDisable,setForceDisable]=useState(disabled),customerEmail=(isGuest===!0||typeof isGuest>"u")&&!order?.customer_email,billingDisable=billingAddressController({billing_address:billingAddress,errors,billingAddressId,requiresBillingInfo:order?.requires_billing_info}),shippingDisable=shippingAddressController({billingDisable,errors,shipToDifferentAddress,shipping_address:shippingAddress,shippingAddressId}),countryLockDisable=countryLockController({countryCodeLock:order?.shipping_country_code_lock,addresses,shipToDifferentAddress,billingAddressId,billing_address:billingAddress,shipping_address:shippingAddress,shippingAddressId}),disable=disabled||customerEmail||billingDisable||shippingDisable||countryLockDisable,handleClick=()=>{if(errors&&Object.keys(errors).length===0&&!disable){if(setForceDisable(!0),order)saveAddresses();else if(createCustomerAddress&&billingAddress){const address={...billingAddress};addressId&&(address.id=addressId),createCustomerAddress(address)}setForceDisable(!1),onClick&&onClick()}},parentProps={...p,label,resource,handleClick,disabled:disable};return children?_jsx(Parent,{...parentProps,children}):_jsx("button",{type:"button",disabled:disable||forceDisable,onClick:handleClick,...p,children:isFunction(label)?label():label})}export default SaveAddressesButton;
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useContext,useState}from"react";import Parent from"../utils/Parent";import AddressContext from"../../context/AddressContext";import{shippingAddressController,countryLockController,billingAddressController}from"../../utils/addressesManager";import OrderContext from"../../context/OrderContext";import CustomerContext from"../../context/CustomerContext";import isFunction from"lodash/isFunction";export function SaveAddressesButton(props){const{children,label="Continue to delivery",resource,disabled=!1,addressId,onClick,...p}=props,{errors,billing_address:billingAddress,shipToDifferentAddress,shipping_address:shippingAddress,saveAddresses,billingAddressId,shippingAddressId}=useContext(AddressContext),{order}=useContext(OrderContext),{addresses,isGuest,createCustomerAddress}=useContext(CustomerContext),[forceDisable,setForceDisable]=useState(disabled),customerEmail=(isGuest===!0||typeof isGuest>"u")&&!order?.customer_email,billingDisable=billingAddressController({billing_address:billingAddress,errors,billingAddressId,requiresBillingInfo:order?.requires_billing_info}),shippingDisable=shippingAddressController({billingDisable,errors,shipToDifferentAddress,shipping_address:shippingAddress,shippingAddressId}),countryLockDisable=countryLockController({countryCodeLock:order?.shipping_country_code_lock,addresses,shipToDifferentAddress,billingAddressId,billing_address:billingAddress,shipping_address:shippingAddress,shippingAddressId}),disable=disabled||customerEmail||billingDisable||shippingDisable||countryLockDisable,handleClick=async()=>{if(errors&&Object.keys(errors).length===0&&!disable){let orderUpdated={success:!1};if(setForceDisable(!0),order&&saveAddresses!=null)orderUpdated=await saveAddresses();else if(createCustomerAddress&&billingAddress){const address={...billingAddress};addressId&&(address.id=addressId),createCustomerAddress(address)}setForceDisable(!1),onClick&&orderUpdated.success&&onClick(orderUpdated)}},parentProps={...p,label,resource,handleClick,disabled:disable};return children?_jsx(Parent,{...parentProps,children}):_jsx("button",{type:"button",disabled:disable||forceDisable,onClick:()=>{handleClick()},...p,children:isFunction(label)?label():label})}export default SaveAddressesButton;
@@ -1,10 +1,12 @@
1
- import { ReactNode } from 'react';
2
- type Props = {
3
- children: ReactNode;
1
+ import type { Order } from '@commercelayer/sdk';
2
+ import type { DefaultChildrenType } from '../../typings/globals';
3
+ interface Props extends Omit<JSX.IntrinsicElements['form'], 'onSubmit'> {
4
+ children: DefaultChildrenType;
4
5
  onSubmit?: (response: {
5
6
  success: boolean;
6
7
  value: string;
8
+ order?: Order;
7
9
  }) => void;
8
- } & Omit<JSX.IntrinsicElements['form'], 'onSubmit'>;
10
+ }
9
11
  export declare function GiftCardOrCouponForm(props: Props): JSX.Element | null;
10
12
  export default GiftCardOrCouponForm;
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useRapidForm}from"rapid-form";import{useContext,useEffect,useRef,useState}from"react";import CouponAndGiftCardFormContext from"../../context/CouponAndGiftCardFormContext";import OrderContext from"../../context/OrderContext";import isEmpty from"lodash/isEmpty";import camelCase from"lodash/camelCase";import dropWhile from"lodash/dropWhile";import has from"lodash/has";import{findIndex}from"lodash";export function GiftCardOrCouponForm(props){const{children,autoComplete="on",onSubmit,...p}=props,{validation,values,reset}=useRapidForm(),[codeType,setCodeType]=useState("gift_card_or_coupon_code"),{setGiftCardOrCouponCode,order,errors,setOrderErrors}=useContext(OrderContext),ref=useRef(null),inputName="gift_card_or_coupon_code";useEffect(()=>{if(values[inputName]?.value===""&&findIndex(errors,{field:camelCase(inputName)})!==-1){const err=dropWhile(errors,i=>i.field===camelCase(inputName));setOrderErrors(err),onSubmit&&onSubmit({value:values[inputName]?.value,success:!1})}values[inputName]?.value===""&&(setOrderErrors([]),onSubmit&&onSubmit({value:values[inputName]?.value,success:!1}))},[values]),useEffect(()=>{order?.gift_card_code&&!order?.coupon_code&&setCodeType("coupon_code"),!order?.gift_card_code&&order?.coupon_code&&setCodeType("gift_card_code"),!order?.gift_card_code&&!order?.coupon_code&&setCodeType("gift_card_or_coupon_code")},[order]);const handleSubmit=async e=>{e.preventDefault();const code=has(values,inputName)?values[inputName].value:void 0;if(code){const{success}=await setGiftCardOrCouponCode({code,codeType}),value=values[inputName]?.value;onSubmit&&onSubmit({success,value}),success&&reset(e)}};return order?.gift_card_code&&order?.coupon_code||isEmpty(order)?null:_jsx(CouponAndGiftCardFormContext.Provider,{value:{validation,codeType},children:_jsx("form",{ref,autoComplete,onSubmit:e=>{handleSubmit(e)},...p,children})})}export default GiftCardOrCouponForm;
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useRapidForm}from"rapid-form";import{useContext,useEffect,useRef,useState}from"react";import CouponAndGiftCardFormContext from"../../context/CouponAndGiftCardFormContext";import OrderContext from"../../context/OrderContext";import isEmpty from"lodash/isEmpty";import camelCase from"lodash/camelCase";import dropWhile from"lodash/dropWhile";import has from"lodash/has";import findIndex from"lodash/findIndex";export function GiftCardOrCouponForm(props){const{children,autoComplete="on",onSubmit,...p}=props,{validation,values,reset}=useRapidForm(),[codeType,setCodeType]=useState("gift_card_or_coupon_code"),{setGiftCardOrCouponCode,order,errors,setOrderErrors}=useContext(OrderContext),ref=useRef(null),inputName="gift_card_or_coupon_code";useEffect(()=>{if(values[inputName]?.value===""&&findIndex(errors,{field:camelCase(inputName)})!==-1){const err=dropWhile(errors,i=>i.field===camelCase(inputName));setOrderErrors(err),onSubmit&&onSubmit({value:values[inputName]?.value,success:!1})}values[inputName]?.value===""&&(setOrderErrors([]),onSubmit&&onSubmit({value:values[inputName]?.value,success:!1}))},[values]),useEffect(()=>{order?.gift_card_code&&!order?.coupon_code&&setCodeType("coupon_code"),!order?.gift_card_code&&order?.coupon_code&&setCodeType("gift_card_code"),!order?.gift_card_code&&!order?.coupon_code&&setCodeType("gift_card_or_coupon_code")},[order]);const handleSubmit=async e=>{e.preventDefault();const code=has(values,inputName)?values[inputName].value:void 0;if(code!=null&&setGiftCardOrCouponCode!=null){const{success,order:order2}=await setGiftCardOrCouponCode({code,codeType}),value=values[inputName]?.value;onSubmit&&onSubmit({success,value,order:order2}),success&&reset(e)}};return order?.gift_card_code&&order?.coupon_code||isEmpty(order)?null:_jsx(CouponAndGiftCardFormContext.Provider,{value:{validation,codeType},children:_jsx("form",{ref,autoComplete,onSubmit:e=>{handleSubmit(e)},...p,children})})}export default GiftCardOrCouponForm;
@@ -1,6 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ChildrenFunction } from '../../typings/index';
3
3
  import { CodeType, OrderCodeType } from '../../reducers/OrderReducer';
4
+ import type { Order } from '@commercelayer/sdk';
4
5
  interface ChildrenProps extends Omit<Props, 'children' | 'onClick'> {
5
6
  codeType?: OrderCodeType;
6
7
  hide?: boolean;
@@ -12,6 +13,7 @@ type Props = {
12
13
  label?: string | ReactNode;
13
14
  onClick?: (response: {
14
15
  success: boolean;
16
+ order?: Order;
15
17
  }) => void;
16
18
  } & Omit<JSX.IntrinsicElements['button'], 'type' | 'onClick'>;
17
19
  export declare function GiftCardOrCouponRemoveButton(props: Props): JSX.Element | null;
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useContext}from"react";import Parent from"../utils/Parent";import OrderContext from"../../context/OrderContext";export function GiftCardOrCouponRemoveButton(props){const{children,label="Remove",onClick,type,...p}=props,{order,removeGiftCardOrCouponCode}=useContext(OrderContext);let codeType=type?`${type}_code`:void 0;!type&&order&&"coupon_code"in order&&order.coupon_code!=null?codeType="coupon_code":type||(codeType="gift_card_code");const code=order&&codeType?order[codeType]:"",hide=!(order&&code),handleClick=async()=>{const response=removeGiftCardOrCouponCode&&codeType&&await removeGiftCardOrCouponCode({codeType});onClick&&response&&onClick(response)},parentProps={...p,label,handleClick,codeType};return children?_jsx(Parent,{...parentProps,children}):hide?null:_jsx("button",{type:"button",onClick:()=>{handleClick()},...p,children:label})}export default GiftCardOrCouponRemoveButton;
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useContext}from"react";import Parent from"../utils/Parent";import OrderContext from"../../context/OrderContext";export function GiftCardOrCouponRemoveButton(props){const{children,label="Remove",onClick,type,...p}=props,{order,removeGiftCardOrCouponCode}=useContext(OrderContext);let codeType=type?`${type}_code`:void 0;!type&&order&&"coupon_code"in order&&order.coupon_code!=null?codeType="coupon_code":type||(codeType="gift_card_code");const code=order&&codeType?order[codeType]:"",hide=!(order&&code),handleClick=async()=>{if(codeType!=null&&removeGiftCardOrCouponCode!=null){const response=await removeGiftCardOrCouponCode({codeType});onClick!=null&&response!=null&&onClick(response)}},parentProps={...p,label,handleClick,codeType};return children?_jsx(Parent,{...parentProps,children}):hide?null:_jsx("button",{type:"button",onClick:()=>{handleClick()},...p,children:label})}export default GiftCardOrCouponRemoveButton;
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useEffect,useReducer,useContext,useMemo,useState}from"react";import orderReducer,{createOrder,getApiOrder,setOrderErrors,setOrder,orderInitialState,updateOrder,addToCart}from"../../reducers/OrderReducer";import CommerceLayerContext from"../../context/CommerceLayerContext";import OrderContext,{defaultOrderContext}from"../../context/OrderContext";import OrderStorageContext from"../../context/OrderStorageContext";import compareObjAttribute from"../../utils/compareObjAttribute";import useCustomContext from"../../utils/hooks/useCustomContext";export function OrderContainer(props){const{orderId,children,metadata,attributes,fetchOrder}=props,[state,dispatch]=useReducer(orderReducer,orderInitialState),[lock,setLock]=useState(!1),[lockOrder,setLockOrder]=useState(!0),config=useCustomContext({context:CommerceLayerContext,contextComponentName:"CommerceLayer",currentComponentName:"OrderContainer",key:"accessToken"}),{persistKey,clearWhenPlaced,getLocalOrder,setLocalOrder,deleteLocalOrder}=useContext(OrderStorageContext);useEffect(()=>{state.withoutIncludes||dispatch({type:"setLoading",payload:{loading:!0}})},[state.withoutIncludes]),useEffect(()=>{if(attributes&&state?.order&&!lock){const updateAttributes=compareObjAttribute({attributes,object:state.order});Object.keys(updateAttributes).length>0&&(updateOrder({id:state.order.id,attributes:updateAttributes,dispatch,config,include:state.include,state}),setLock(!0))}return()=>{if(attributes&&state?.order){const updateAttributes=compareObjAttribute({attributes,object:state.order});state.order&&Object.keys(updateAttributes).length===0&&setLock(!1)}}},[attributes,state?.order,lock]),useEffect(()=>{const localOrder=persistKey?getLocalOrder(persistKey):orderId,startRequest=Object.keys(state?.includeLoaded||{}).filter(key=>state?.includeLoaded?.[key]===!0),getOrder=async()=>{localOrder&&await getApiOrder({id:localOrder,dispatch,config,persistKey,clearWhenPlaced:!!(persistKey&&clearWhenPlaced),deleteLocalOrder,state})};return config.accessToken&&state.loading===!1&&state?.order==null?localOrder&&!state.order&&state.include?.length===startRequest.length&&!state.withoutIncludes&&!lockOrder?getOrder():state?.order&&fetchOrder?fetchOrder(state.order):state.withoutIncludes&&!state.include?.length&&startRequest.length===0&&getOrder():[config.accessToken,state.order!=null,state.loading,state.withoutIncludes].every(Boolean)?dispatch({type:"setLoading",payload:{loading:!1}}):[config.accessToken,state.order!=null,state.loading,state.withoutIncludes===!1].every(Boolean)&&dispatch({type:"setLoading",payload:{loading:!1}}),()=>{state.order==null&&state.loading&&state.withoutIncludes===!1&&(state.include?.length===0&&startRequest.length>0?dispatch({type:"setLoading",payload:{loading:!1}}):state.include&&state.include?.length>0&&(dispatch({type:"setIncludesResource",payload:{include:[]}}),setLockOrder(!1)))}},[config.accessToken,Object.keys(state.includeLoaded??{}).length,state.include?.length,orderId,state.order,state.loading,state.withoutIncludes,lockOrder]);const orderValue=useMemo(()=>({...state,setOrder:order=>setOrder(order,dispatch),getOrder:async id=>await getApiOrder({id,dispatch,config,state}),setOrderErrors:errors=>setOrderErrors({dispatch,errors}),createOrder:async()=>await createOrder({persistKey,dispatch,config,state,orderMetadata:metadata,orderAttributes:attributes,setLocalOrder}),addToCart:async params=>await addToCart({...params,persistKey,dispatch,state,config,errors:state.errors,orderMetadata:metadata||{},orderAttributes:attributes,setLocalOrder}),saveAddressToCustomerAddressBook:args=>defaultOrderContext.saveAddressToCustomerAddressBook({...args,dispatch}),setGiftCardOrCouponCode:async({code,codeType})=>await defaultOrderContext.setGiftCardOrCouponCode({code,codeType,dispatch,order:state.order,config,include:state.include,state}),removeGiftCardOrCouponCode:async({codeType})=>await defaultOrderContext.removeGiftCardOrCouponCode({codeType,dispatch,order:state.order,config,include:state.include,state}),addResourceToInclude:args=>defaultOrderContext.addResourceToInclude({...args,dispatch,resourcesIncluded:state.include,resourceIncludedLoaded:state.includeLoaded}),updateOrder:async args=>await defaultOrderContext.updateOrder({...args,dispatch,config,include:state.include,state})}),[state,config.accessToken]);return _jsx(OrderContext.Provider,{value:orderValue,children})}export default OrderContainer;
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useEffect,useReducer,useContext,useMemo,useState}from"react";import orderReducer,{createOrder,getApiOrder,setOrderErrors,setOrder,orderInitialState,updateOrder,addToCart}from"../../reducers/OrderReducer";import CommerceLayerContext from"../../context/CommerceLayerContext";import OrderContext,{defaultOrderContext}from"../../context/OrderContext";import OrderStorageContext from"../../context/OrderStorageContext";import compareObjAttribute from"../../utils/compareObjAttribute";import useCustomContext from"../../utils/hooks/useCustomContext";export function OrderContainer(props){const{orderId,children,metadata,attributes,fetchOrder}=props,[state,dispatch]=useReducer(orderReducer,orderInitialState),[lock,setLock]=useState(!1),[lockOrder,setLockOrder]=useState(!0),config=useCustomContext({context:CommerceLayerContext,contextComponentName:"CommerceLayer",currentComponentName:"OrderContainer",key:"accessToken"}),{persistKey,clearWhenPlaced,getLocalOrder,setLocalOrder,deleteLocalOrder}=useContext(OrderStorageContext);useEffect(()=>{state.withoutIncludes||dispatch({type:"setLoading",payload:{loading:!0}})},[state.withoutIncludes]),useEffect(()=>{if(attributes&&state?.order&&!lock){const updateAttributes=compareObjAttribute({attributes,object:state.order});Object.keys(updateAttributes).length>0&&(updateOrder({id:state.order.id,attributes:updateAttributes,dispatch,config,include:state.include,state}),setLock(!0))}return()=>{if(attributes&&state?.order){const updateAttributes=compareObjAttribute({attributes,object:state.order});state.order&&Object.keys(updateAttributes).length===0&&setLock(!1)}}},[attributes,state?.order,lock]),useEffect(()=>{const localOrder=persistKey?getLocalOrder(persistKey):orderId,startRequest=Object.keys(state?.includeLoaded||{}).filter(key=>state?.includeLoaded?.[key]===!0),getOrder=async()=>{localOrder&&await getApiOrder({id:localOrder,dispatch,config,persistKey,clearWhenPlaced:!!(persistKey&&clearWhenPlaced),deleteLocalOrder,state})};return config.accessToken&&state.loading===!1&&state?.order==null?(localOrder&&!state.order&&state.include?.length===startRequest.length&&!state.withoutIncludes&&!lockOrder||state.withoutIncludes&&!state.include?.length&&startRequest.length===0)&&getOrder():[config.accessToken,state.order!=null,state.loading,state.withoutIncludes].every(Boolean)?dispatch({type:"setLoading",payload:{loading:!1}}):[config.accessToken,state.order!=null,state.loading,state.withoutIncludes===!1].every(Boolean)&&dispatch({type:"setLoading",payload:{loading:!1}}),()=>{state.order==null&&state.loading&&state.withoutIncludes===!1&&(state.include?.length===0&&startRequest.length>0?dispatch({type:"setLoading",payload:{loading:!1}}):state.include&&state.include?.length>0&&(dispatch({type:"setIncludesResource",payload:{include:[]}}),setLockOrder(!1)))}},[config.accessToken,Object.keys(state.includeLoaded??{}).length,state.include?.length,orderId,Object.keys(state?.order??{}).length,state.loading,state.withoutIncludes,lockOrder]);const orderValue=useMemo(()=>{if(fetchOrder!=null&&state?.order!=null){fetchOrder(state.order);debugger}return{...state,setOrder:order=>setOrder(order,dispatch),getOrder:async id=>await getApiOrder({id,dispatch,config,state}),setOrderErrors:errors=>setOrderErrors({dispatch,errors}),createOrder:async()=>await createOrder({persistKey,dispatch,config,state,orderMetadata:metadata,orderAttributes:attributes,setLocalOrder}),addToCart:async params=>await addToCart({...params,persistKey,dispatch,state,config,errors:state.errors,orderMetadata:metadata||{},orderAttributes:attributes,setLocalOrder}),saveAddressToCustomerAddressBook:args=>defaultOrderContext.saveAddressToCustomerAddressBook({...args,dispatch}),setGiftCardOrCouponCode:async({code,codeType})=>await defaultOrderContext.setGiftCardOrCouponCode({code,codeType,dispatch,order:state.order,config,include:state.include,state}),removeGiftCardOrCouponCode:async({codeType})=>await defaultOrderContext.removeGiftCardOrCouponCode({codeType,dispatch,order:state.order,config,include:state.include,state}),addResourceToInclude:args=>defaultOrderContext.addResourceToInclude({...args,dispatch,resourcesIncluded:state.include,resourceIncludedLoaded:state.includeLoaded}),updateOrder:async args=>await defaultOrderContext.updateOrder({...args,dispatch,config,include:state.include,state})}},[state,config.accessToken]);return _jsx(OrderContext.Provider,{value:orderValue,children})}export default OrderContainer;
@@ -1,5 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ChildrenFunction } from '../../typings/index';
3
+ import type { BaseError } from '../../typings/errors';
4
+ import type { Order } from '@commercelayer/sdk';
3
5
  interface ChildrenProps extends Omit<Props, 'children'> {
4
6
  handleClick: () => Promise<void>;
5
7
  }
@@ -8,6 +10,8 @@ interface Props extends Omit<JSX.IntrinsicElements['button'], 'children' | 'onCl
8
10
  label?: string | ReactNode;
9
11
  onClick?: (response: {
10
12
  placed: boolean;
13
+ order?: Order;
14
+ errors?: BaseError[];
11
15
  }) => void;
12
16
  }
13
17
  export declare function PlaceOrderButton(props: Props): JSX.Element;
@@ -1,7 +1,11 @@
1
- import { LoaderType } from '../../typings/index';
2
- import { PaymentMethod as PaymentMethodType } from '@commercelayer/sdk';
3
- import { PaymentResource } from '../../reducers/PaymentMethodReducer';
1
+ import type { LoaderType } from '../../typings/index';
2
+ import type { Order, PaymentMethod as PaymentMethodType } from '@commercelayer/sdk';
3
+ import type { PaymentResource } from '../../reducers/PaymentMethodReducer';
4
4
  import type { DefaultChildrenType } from '../../typings/globals';
5
+ interface TOnClickParams {
6
+ payment?: PaymentMethodType | Record<string, any>;
7
+ order?: Order;
8
+ }
5
9
  type Props = {
6
10
  /**
7
11
  * Hide payment methods by an array of strings or a function that returns a boolean
@@ -13,7 +17,7 @@ type Props = {
13
17
  autoSelectSinglePaymentMethod?: boolean | (() => void);
14
18
  } & Omit<JSX.IntrinsicElements['div'], 'onClick' | 'children'> & ({
15
19
  clickableContainer: true;
16
- onClick?: (payment?: PaymentMethodType | Record<string, any>) => void;
20
+ onClick?: (params?: TOnClickParams) => void;
17
21
  } | {
18
22
  clickableContainer?: never;
19
23
  onClick?: never;
@@ -1 +1 @@
1
- import{jsx as _jsx,Fragment as _Fragment}from"react/jsx-runtime";import{useState,useEffect,useContext}from"react";import PaymentMethodContext from"../../context/PaymentMethodContext";import PaymentMethodChildrenContext from"../../context/PaymentMethodChildrenContext";import getLoaderComponent from"../../utils/getLoaderComponent";import useCustomContext from"../../utils/hooks/useCustomContext";import OrderContext from"../../context/OrderContext";import CustomerContext from"../../context/CustomerContext";import{getExternalPaymentAttributes,getPaypalAttributes}from"../../utils/getPaymentAttributes";export function PaymentMethod({children,className,activeClass,loader="Loading...",clickableContainer,autoSelectSinglePaymentMethod,hide,onClick,...p}){const[loading,setLoading]=useState(!0),[paymentSelected,setPaymentSelected]=useState(""),{paymentMethods,currentPaymentMethodId,setPaymentMethod,setLoading:setLoadingPlaceOrder,paymentSource,setPaymentSource,config}=useCustomContext({context:PaymentMethodContext,contextComponentName:"PaymentMethodsContainer",currentComponentName:"PaymentMethod",key:"paymentMethods"}),{order}=useContext(OrderContext),{getCustomerPaymentSources}=useContext(CustomerContext);useEffect(()=>{paymentMethods!=null&&autoSelectSinglePaymentMethod!=null&&(async()=>{if(paymentMethods.length===1){const[paymentMethod]=paymentMethods??[];if(paymentMethod&&!paymentSource){setLoadingPlaceOrder({loading:!0}),setPaymentSelected(paymentMethod.id);const paymentMethodId=paymentMethod?.id,paymentResource=paymentMethod?.payment_source_type;await setPaymentMethod({paymentResource,paymentMethodId});let attributes={};config!=null&&paymentResource==="paypal_payments"&&(attributes=getPaypalAttributes(paymentResource,config)),config!=null&&paymentResource==="external_payments"&&(attributes=getExternalPaymentAttributes(paymentResource,config));const ps=await setPaymentSource({paymentResource,order,attributes});ps&&paymentMethod&&onClick!=null&&(onClick({payment:paymentMethod,paymentSource:ps}),setTimeout(()=>{setLoading(!1)},200)),getCustomerPaymentSources&&await getCustomerPaymentSources(),setLoadingPlaceOrder({loading:!1})}typeof autoSelectSinglePaymentMethod=="function"&&autoSelectSinglePaymentMethod()}else setTimeout(()=>{setLoading(!1)},200)})()},[paymentMethods]),useEffect(()=>(paymentMethods&&(paymentMethods.length===1&&autoSelectSinglePaymentMethod?paymentSource&&setTimeout(()=>{setLoading(!1)},200):setLoading(!1)),currentPaymentMethodId&&setPaymentSelected(currentPaymentMethodId),()=>{setLoading(!0)}),[paymentMethods,currentPaymentMethodId]);const components=paymentMethods?.filter(payment=>{if(Array.isArray(hide)){const source=payment?.payment_source_type;return!hide?.includes(source)}else if(typeof hide=="function")return hide(payment);return!0}).map((payment,k)=>{const isActive=currentPaymentMethodId===payment?.id,paymentMethodProps={payment,clickableContainer,paymentSelected,setPaymentSelected},paymentResource=payment?.payment_source_type,onClickable=clickableContainer?async e=>{e.stopPropagation(),setLoadingPlaceOrder({loading:!0}),setPaymentSelected(payment.id);const paymentMethodId=payment?.id;await setPaymentMethod({paymentResource,paymentMethodId}),onClick&&onClick(payment),setLoadingPlaceOrder({loading:!1})}:void 0;return _jsx("div",{"data-test-id":paymentResource,className:`${className??""} ${isActive&&activeClass!=null?activeClass:""}`,onClick:onClickable,...p,children:_jsx(PaymentMethodChildrenContext.Provider,{value:paymentMethodProps,children})},k)});return loading?getLoaderComponent(loader):_jsx(_Fragment,{children:components})}export default PaymentMethod;
1
+ import{jsx as _jsx,Fragment as _Fragment}from"react/jsx-runtime";import{useState,useEffect,useContext}from"react";import PaymentMethodContext from"../../context/PaymentMethodContext";import PaymentMethodChildrenContext from"../../context/PaymentMethodChildrenContext";import getLoaderComponent from"../../utils/getLoaderComponent";import useCustomContext from"../../utils/hooks/useCustomContext";import OrderContext from"../../context/OrderContext";import CustomerContext from"../../context/CustomerContext";import{getExternalPaymentAttributes,getPaypalAttributes}from"../../utils/getPaymentAttributes";export function PaymentMethod({children,className,activeClass,loader="Loading...",clickableContainer,autoSelectSinglePaymentMethod,hide,onClick,...p}){const[loading,setLoading]=useState(!0),[paymentSelected,setPaymentSelected]=useState(""),{paymentMethods,currentPaymentMethodId,setPaymentMethod,setLoading:setLoadingPlaceOrder,paymentSource,setPaymentSource,config}=useCustomContext({context:PaymentMethodContext,contextComponentName:"PaymentMethodsContainer",currentComponentName:"PaymentMethod",key:"paymentMethods"}),{order}=useContext(OrderContext),{getCustomerPaymentSources}=useContext(CustomerContext);useEffect(()=>{paymentMethods!=null&&autoSelectSinglePaymentMethod!=null&&(async()=>{if(paymentMethods.length===1){const[paymentMethod]=paymentMethods??[];if(paymentMethod&&!paymentSource){setLoadingPlaceOrder({loading:!0}),setPaymentSelected(paymentMethod.id);const paymentMethodId=paymentMethod?.id,paymentResource=paymentMethod?.payment_source_type;await setPaymentMethod({paymentResource,paymentMethodId});let attributes={};config!=null&&paymentResource==="paypal_payments"&&(attributes=getPaypalAttributes(paymentResource,config)),config!=null&&paymentResource==="external_payments"&&(attributes=getExternalPaymentAttributes(paymentResource,config)),await setPaymentSource({paymentResource,order,attributes})&&paymentMethod&&onClick!=null&&(onClick({payment:paymentMethod,order}),setTimeout(()=>{setLoading(!1)},200)),getCustomerPaymentSources&&await getCustomerPaymentSources(),setLoadingPlaceOrder({loading:!1})}typeof autoSelectSinglePaymentMethod=="function"&&autoSelectSinglePaymentMethod()}else setTimeout(()=>{setLoading(!1)},200)})()},[paymentMethods]),useEffect(()=>(paymentMethods&&(paymentMethods.length===1&&autoSelectSinglePaymentMethod?paymentSource&&setTimeout(()=>{setLoading(!1)},200):setLoading(!1)),currentPaymentMethodId&&setPaymentSelected(currentPaymentMethodId),()=>{setLoading(!0)}),[paymentMethods,currentPaymentMethodId]);const components=paymentMethods?.filter(payment=>{if(Array.isArray(hide)){const source=payment?.payment_source_type;return!hide?.includes(source)}else if(typeof hide=="function")return hide(payment);return!0}).map((payment,k)=>{const isActive=currentPaymentMethodId===payment?.id,paymentMethodProps={payment,clickableContainer,paymentSelected,setPaymentSelected},paymentResource=payment?.payment_source_type,onClickable=clickableContainer?async e=>{e.stopPropagation(),setLoadingPlaceOrder({loading:!0}),setPaymentSelected(payment.id);const paymentMethodId=payment?.id,{order:order2}=await setPaymentMethod({paymentResource,paymentMethodId});onClick&&onClick({payment,order:order2}),setLoadingPlaceOrder({loading:!1})}:void 0;return _jsx("div",{"data-test-id":paymentResource,className:`${className??""} ${isActive&&activeClass!=null?activeClass:""}`,onClick:onClickable,...p,children:_jsx(PaymentMethodChildrenContext.Provider,{value:paymentMethodProps,children})},k)});return loading?getLoaderComponent(loader):_jsx(_Fragment,{children:components})}export default PaymentMethod;
@@ -1,13 +1,17 @@
1
1
  import { ChangeEvent } from 'react';
2
- import { PaymentMethod } from '@commercelayer/sdk';
2
+ import type { Order, PaymentMethod } from '@commercelayer/sdk';
3
3
  import { ChildrenFunction } from '../../typings/index';
4
4
  interface ChildrenProps extends Omit<Props, 'children'> {
5
5
  checked: boolean;
6
6
  handleOnChange: (event: ChangeEvent<HTMLInputElement>) => Promise<void>;
7
7
  }
8
+ interface TOnChangeParams {
9
+ payment?: PaymentMethod | Record<string, any>;
10
+ order?: Order;
11
+ }
8
12
  type Props = {
9
13
  children?: ChildrenFunction<ChildrenProps>;
10
- onChange?: (payment?: PaymentMethod | Record<string, any>) => void;
14
+ onChange?: (params: TOnChangeParams) => void;
11
15
  } & JSX.IntrinsicElements['input'];
12
16
  export declare function PaymentMethodRadioButton(props: Props): JSX.Element;
13
17
  export default PaymentMethodRadioButton;
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useContext}from"react";import PaymentMethodChildrenContext from"../../context/PaymentMethodChildrenContext";import Parent from"../utils/Parent";import PaymentMethodContext from"../../context/PaymentMethodContext";import OrderContext from"../../context/OrderContext";import useCustomContext from"../../utils/hooks/useCustomContext";export function PaymentMethodRadioButton(props){const{onChange,...p}=props,{payment,paymentSelected,setPaymentSelected,clickableContainer}=useCustomContext({context:PaymentMethodChildrenContext,contextComponentName:"PaymentMethod",currentComponentName:"PaymentMethodRadioButton",key:"payment"}),{order}=useContext(OrderContext),{setPaymentMethod,setLoading}=useContext(PaymentMethodContext),orderId=order?.id||"",paymentResource=payment?.payment_source_type,paymentMethodId=payment?.id,name=`payment-${orderId}`,checked=paymentSelected===payment?.id,handleOnChange=async e=>{e.stopPropagation(),setPaymentSelected&&setPaymentSelected(paymentMethodId),setLoading({loading:!0}),!clickableContainer&&await setPaymentMethod({paymentResource,paymentMethodId}),onChange&&onChange(payment),setLoading({loading:!1})},id=payment?.payment_source_type,parentProps={handleOnChange,checked,id,name,...props};return props.children?_jsx(Parent,{...parentProps,children:props.children}):_jsx("input",{title:name,type:"radio",id,onChange:e=>{handleOnChange(e)},checked,...p})}export default PaymentMethodRadioButton;
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useContext}from"react";import PaymentMethodChildrenContext from"../../context/PaymentMethodChildrenContext";import Parent from"../utils/Parent";import PaymentMethodContext from"../../context/PaymentMethodContext";import OrderContext from"../../context/OrderContext";import useCustomContext from"../../utils/hooks/useCustomContext";export function PaymentMethodRadioButton(props){const{onChange,...p}=props,{payment,paymentSelected,setPaymentSelected,clickableContainer}=useCustomContext({context:PaymentMethodChildrenContext,contextComponentName:"PaymentMethod",currentComponentName:"PaymentMethodRadioButton",key:"payment"}),{order}=useContext(OrderContext),{setPaymentMethod,setLoading}=useContext(PaymentMethodContext),orderId=order?.id||"",paymentResource=payment?.payment_source_type,paymentMethodId=payment?.id,name=`payment-${orderId}`,checked=paymentSelected===payment?.id,handleOnChange=async e=>{if(e.stopPropagation(),setPaymentSelected&&setPaymentSelected(paymentMethodId),setLoading({loading:!0}),!clickableContainer){const{order:order2}=await setPaymentMethod({paymentResource,paymentMethodId});onChange&&onChange({payment,order:order2})}setLoading({loading:!1})},id=payment?.payment_source_type,parentProps={handleOnChange,checked,id,name,...props};return props.children?_jsx(Parent,{...parentProps,children:props.children}):_jsx("input",{title:name,type:"radio",id,onChange:e=>{handleOnChange(e)},checked,...p})}export default PaymentMethodRadioButton;
@@ -1 +1 @@
1
- import{jsx as _jsx,Fragment as _Fragment}from"react/jsx-runtime";import{useContext,useState,useEffect}from"react";import ShipmentContext from"../../context/ShipmentContext";import ShipmentChildrenContext from"../../context/ShipmentChildrenContext";import getLoaderComponent from"../../utils/getLoaderComponent";export function Shipment({children,loader="Loading...",autoSelectSingleShippingMethod=!1}){const[loading,setLoading]=useState(!0),{shipments,deliveryLeadTimes,setShippingMethod}=useContext(ShipmentContext);useEffect(()=>{shipments&&(autoSelectSingleShippingMethod?(async()=>shipments.forEach(shipment=>{const isSingle=shipment?.available_shipping_methods?.length===1;if(!shipment?.shipping_method&&isSingle){const[shippingMethod]=shipment?.available_shipping_methods||[];shippingMethod&&setShippingMethod(shipment.id,shippingMethod.id),typeof autoSelectSingleShippingMethod=="function"&&autoSelectSingleShippingMethod()}else setTimeout(()=>{setLoading(!1)},200)}))():setLoading(!1))},[shipments]);const components=shipments?.map((shipment,k)=>{const lineItems=shipment.shipment_line_items?.map(shipmentLineItem=>{const l=shipmentLineItem.line_item;return l&&(l.quantity=shipmentLineItem.quantity),l}),shippingMethods=shipment.available_shipping_methods,currentShippingMethodId=autoSelectSingleShippingMethod&&shippingMethods&&shippingMethods.length===1?shippingMethods[0]?.id:shipment.shipping_method?.id,stockTransfers=shipment.stock_transfers,parcels=shipment.parcels,times=deliveryLeadTimes?.filter(time=>time.stock_location?.id===shipment.stock_location?.id),shipmentProps={parcels,lineItems,shippingMethods,currentShippingMethodId,stockTransfers,deliveryLeadTimes:times,shipment,keyNumber:k+1};return _jsx(ShipmentChildrenContext.Provider,{value:shipmentProps,children},k)});return loading?getLoaderComponent(loader):_jsx(_Fragment,{children:components})}export default Shipment;
1
+ import{jsx as _jsx,Fragment as _Fragment}from"react/jsx-runtime";import{useContext,useState,useEffect}from"react";import ShipmentContext from"../../context/ShipmentContext";import ShipmentChildrenContext from"../../context/ShipmentChildrenContext";import getLoaderComponent from"../../utils/getLoaderComponent";export function Shipment({children,loader="Loading...",autoSelectSingleShippingMethod=!1}){const[loading,setLoading]=useState(!0),{shipments,deliveryLeadTimes,setShippingMethod}=useContext(ShipmentContext);useEffect(()=>{shipments&&(autoSelectSingleShippingMethod?(async()=>shipments.forEach(shipment=>{const isSingle=shipment?.available_shipping_methods?.length===1;if(!shipment?.shipping_method&&isSingle){const[shippingMethod]=shipment?.available_shipping_methods||[];shippingMethod&&setShippingMethod!=null&&setShippingMethod(shipment.id,shippingMethod.id),typeof autoSelectSingleShippingMethod=="function"&&autoSelectSingleShippingMethod()}else setTimeout(()=>{setLoading(!1)},200)}))():setLoading(!1))},[shipments]);const components=shipments?.map((shipment,k)=>{const lineItems=shipment.shipment_line_items?.map(shipmentLineItem=>{const l=shipmentLineItem.line_item;return l&&(l.quantity=shipmentLineItem.quantity),l}),shippingMethods=shipment.available_shipping_methods,currentShippingMethodId=autoSelectSingleShippingMethod&&shippingMethods&&shippingMethods.length===1?shippingMethods[0]?.id:shipment.shipping_method?.id,stockTransfers=shipment.stock_transfers,parcels=shipment.parcels,times=deliveryLeadTimes?.filter(time=>time.stock_location?.id===shipment.stock_location?.id),shipmentProps={parcels,lineItems,shippingMethods,currentShippingMethodId,stockTransfers,deliveryLeadTimes:times,shipment,keyNumber:k+1};return _jsx(ShipmentChildrenContext.Provider,{value:shipmentProps,children},k)});return loading?getLoaderComponent(loader):_jsx(_Fragment,{children:components})}export default Shipment;
@@ -1,12 +1,16 @@
1
- import type { ShippingMethod } from '@commercelayer/sdk';
2
- export type ShippingMethodRadioButtonType = Omit<Props, 'children'> & {
1
+ import type { Order, ShippingMethod } from '@commercelayer/sdk';
2
+ interface ShippingMethodRadioButtonType extends Omit<Props, 'children'> {
3
3
  shippingMethod: ShippingMethod;
4
4
  shipmentId: string;
5
- };
6
- export type ShippingMethodRadioButtonOnChangeType = (shippingMethod: ShippingMethod, shipmentId: string) => void;
5
+ }
6
+ interface TOnChange {
7
+ shippingMethod: ShippingMethod;
8
+ shipmentId: string;
9
+ order?: Order;
10
+ }
7
11
  type Props = {
8
12
  children?: (props: ShippingMethodRadioButtonType) => JSX.Element;
9
- onChange?: ShippingMethodRadioButtonOnChangeType;
13
+ onChange?: (params: TOnChange) => void;
10
14
  } & Omit<JSX.IntrinsicElements['input'], 'onChange'>;
11
15
  export declare function ShippingMethodRadioButton(props: Props): JSX.Element;
12
16
  export default ShippingMethodRadioButton;
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useContext,useEffect,useState}from"react";import ShippingMethodChildrenContext from"../../context/ShippingMethodChildrenContext";import Parent from"../utils/Parent";import ShipmentContext from"../../context/ShipmentContext";export function ShippingMethodRadioButton(props){const{onChange,...p}=props,[checked,setChecked]=useState(!1),{shippingMethod,currentShippingMethodId,shipmentId}=useContext(ShippingMethodChildrenContext),{setShippingMethod}=useContext(ShipmentContext),shippingMethodId=shippingMethod?.id,name=`shipment-${shipmentId??""}`,id=`${name}-${shippingMethodId??""}`;useEffect(()=>(setChecked(shippingMethodId===currentShippingMethodId),()=>{setChecked(!1)}),[currentShippingMethodId]);const handleOnChange=async()=>{shipmentId&&shippingMethodId&&(setChecked(!0),await setShippingMethod(shipmentId,shippingMethodId),shippingMethod&&onChange&&onChange(shippingMethod,shipmentId))},parentProps={shippingMethod,shipmentId,handleOnChange,name,id,...props};return props.children?_jsx(Parent,{...parentProps,children:props.children}):_jsx("input",{type:"radio",name,id,onChange:()=>{handleOnChange()},checked,...p})}export default ShippingMethodRadioButton;
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useContext,useEffect,useState}from"react";import ShippingMethodChildrenContext from"../../context/ShippingMethodChildrenContext";import Parent from"../utils/Parent";import ShipmentContext from"../../context/ShipmentContext";export function ShippingMethodRadioButton(props){const{onChange,...p}=props,[checked,setChecked]=useState(!1),{shippingMethod,currentShippingMethodId,shipmentId}=useContext(ShippingMethodChildrenContext),{setShippingMethod}=useContext(ShipmentContext),shippingMethodId=shippingMethod?.id,name=`shipment-${shipmentId??""}`,id=`${name}-${shippingMethodId??""}`;useEffect(()=>(setChecked(shippingMethodId===currentShippingMethodId),()=>{setChecked(!1)}),[currentShippingMethodId]);const handleOnChange=async()=>{if(shipmentId&&shippingMethodId&&setShippingMethod!=null){setChecked(!0);const{order}=await setShippingMethod(shipmentId,shippingMethodId);shippingMethod&&onChange!=null&&onChange({shippingMethod,shipmentId,order})}},parentProps={shippingMethod,shipmentId,handleOnChange,name,id,...props};return props.children?_jsx(Parent,{...parentProps,children:props.children}):_jsx("input",{type:"radio",name,id,onChange:()=>{handleOnChange()},checked,...p})}export default ShippingMethodRadioButton;
@@ -1,9 +1,9 @@
1
1
  import { PaymentResource, PaymentSourceType } from '../../reducers/PaymentMethodReducer';
2
2
  import PaymentSourceContext, { IconBrand } from '../../context/PaymentSourceContext';
3
3
  import { ChildrenFunction } from '../../typings/index';
4
- type ChildrenProps = Pick<Props, 'customerPayments'> & {
4
+ interface ChildrenProps extends Pick<Props, 'customerPayments'> {
5
5
  PaymentSourceProvider: typeof PaymentSourceContext.Provider;
6
- };
6
+ }
7
7
  type CustomerPayment = PaymentSourceType & {
8
8
  card?: {
9
9
  brand?: IconBrand;
@@ -12,7 +12,6 @@ type CustomerPayment = PaymentSourceType & {
12
12
  handleClick?: () => void;
13
13
  };
14
14
  export type CustomerCardsTemplateChildren = ChildrenFunction<ChildrenProps>;
15
- export type CustomerCardsType = ChildrenProps;
16
15
  interface Props {
17
16
  customerPayments: CustomerPayment[];
18
17
  children: CustomerCardsTemplateChildren;
@@ -1,14 +1,13 @@
1
1
  /// <reference types="react" />
2
- import { AddressState, SetAddress, AddressResource } from '../reducers/AddressReducer';
2
+ import { AddressState, SetAddress, AddressResource, saveAddresses } from '../reducers/AddressReducer';
3
3
  import { BaseError } from '../typings/errors';
4
4
  type DefaultContext = {
5
- saveAddresses: () => void;
5
+ saveAddresses?: () => ReturnType<typeof saveAddresses>;
6
6
  setCloneAddress: (id: string, resource: AddressResource) => void;
7
7
  setAddress: SetAddress;
8
8
  setAddressErrors: (errors: BaseError[], resource: AddressResource) => void;
9
9
  } & AddressState;
10
10
  export declare const defaultAddressContext: {
11
- saveAddresses: () => void;
12
11
  setCloneAddress: () => void;
13
12
  setAddress: SetAddress;
14
13
  setAddressErrors: () => void;
@@ -1 +1 @@
1
- import{createContext}from"react";import{setAddress}from"../reducers/AddressReducer";export const defaultAddressContext={saveAddresses:()=>{},setCloneAddress:()=>{},setAddress,setAddressErrors:()=>{}};const AddressesContext=createContext(defaultAddressContext);export default AddressesContext;
1
+ import{createContext}from"react";import{setAddress}from"../reducers/AddressReducer";export const defaultAddressContext={setCloneAddress:()=>{},setAddress,setAddressErrors:()=>{}};const AddressesContext=createContext(defaultAddressContext);export default AddressesContext;
@@ -1,13 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  import { Order } from '@commercelayer/sdk';
3
- import { OrderState, CreateOrder, SetGiftCardOrCouponCode, RemoveGiftCardOrCouponCode, SaveAddressToCustomerAddressBook, addResourceToInclude, updateOrder, getOrderContext, addToCart } from '../reducers/OrderReducer';
3
+ import { OrderState, CreateOrder, SaveAddressToCustomerAddressBook, setGiftCardOrCouponCode, removeGiftCardOrCouponCode, addResourceToInclude, updateOrder, getOrderContext, addToCart } from '../reducers/OrderReducer';
4
4
  import { BaseError } from '../typings/errors';
5
5
  interface DefaultContext extends OrderState {
6
6
  createOrder: CreateOrder;
7
7
  addToCart?: typeof addToCart;
8
8
  setOrderErrors: (errors: BaseError[]) => void;
9
- setGiftCardOrCouponCode: SetGiftCardOrCouponCode;
10
- removeGiftCardOrCouponCode: RemoveGiftCardOrCouponCode;
9
+ setGiftCardOrCouponCode?: typeof setGiftCardOrCouponCode;
10
+ removeGiftCardOrCouponCode?: typeof removeGiftCardOrCouponCode;
11
11
  saveAddressToCustomerAddressBook: SaveAddressToCustomerAddressBook;
12
12
  addResourceToInclude: typeof addResourceToInclude;
13
13
  getOrder: getOrderContext;
@@ -18,8 +18,8 @@ export declare const defaultOrderContext: {
18
18
  createOrder: CreateOrder;
19
19
  setOrderErrors: () => void;
20
20
  setOrder: () => void;
21
- setGiftCardOrCouponCode: SetGiftCardOrCouponCode;
22
- removeGiftCardOrCouponCode: RemoveGiftCardOrCouponCode;
21
+ setGiftCardOrCouponCode: typeof setGiftCardOrCouponCode;
22
+ removeGiftCardOrCouponCode: typeof removeGiftCardOrCouponCode;
23
23
  saveAddressToCustomerAddressBook: SaveAddressToCustomerAddressBook;
24
24
  addResourceToInclude: typeof addResourceToInclude;
25
25
  getOrder: () => Promise<undefined>;
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
- import { UpdatePaymentSource, PaymentMethodState, SetPaymentMethodErrors, SetPaymentSource, SetPaymentMethod, DestroyPaymentSource, SetPaymentRef, setLoading } from '../reducers/PaymentMethodReducer';
2
+ import { UpdatePaymentSource, PaymentMethodState, SetPaymentMethodErrors, SetPaymentSource, setPaymentMethod, DestroyPaymentSource, SetPaymentRef, setLoading } from '../reducers/PaymentMethodReducer';
3
3
  type DefaultContext = {
4
4
  setPaymentMethodErrors: SetPaymentMethodErrors;
5
- setPaymentMethod: SetPaymentMethod;
5
+ setPaymentMethod: typeof setPaymentMethod;
6
6
  setPaymentSource: SetPaymentSource;
7
7
  setPaymentRef: SetPaymentRef;
8
8
  destroyPaymentSource: DestroyPaymentSource;
@@ -1,19 +1,13 @@
1
1
  import { RefObject } from 'react';
2
- import { PlaceOrderOptions, PlaceOrderState, SetPlaceOrderErrors } from '../reducers/PlaceOrderReducer';
3
- import { PaymentSourceType } from '../reducers/PaymentMethodReducer';
2
+ import { PlaceOrderState, setPlaceOrder, setPlaceOrderErrors } from '../reducers/PlaceOrderReducer';
4
3
  type DefaultContext = {
5
- setPlaceOrderErrors?: SetPlaceOrderErrors;
6
- setPlaceOrder?: ({ paymentSource, }: {
7
- paymentSource?: PaymentSourceType;
8
- options?: PlaceOrderOptions;
9
- }) => Promise<{
10
- placed: boolean;
11
- }>;
4
+ setPlaceOrderErrors?: typeof setPlaceOrderErrors;
5
+ setPlaceOrder?: typeof setPlaceOrder;
12
6
  placeOrderPermitted?: () => void;
13
7
  setButtonRef?: (ref: RefObject<HTMLButtonElement>) => void;
14
8
  } & PlaceOrderState;
15
9
  export declare const defaultPlaceOrderContext: {
16
- setPlaceOrderErrors: SetPlaceOrderErrors;
10
+ setPlaceOrderErrors: typeof setPlaceOrderErrors;
17
11
  };
18
12
  declare const PlaceOrderContext: import("react").Context<DefaultContext>;
19
13
  export default PlaceOrderContext;
@@ -1,12 +1,11 @@
1
1
  /// <reference types="react" />
2
- import { ShipmentState, SetShipmentErrors } from '../reducers/ShipmentReducer';
2
+ import { ShipmentState, SetShipmentErrors, setShippingMethod } from '../reducers/ShipmentReducer';
3
3
  type DefaultContext = {
4
4
  setShipmentErrors: SetShipmentErrors;
5
- setShippingMethod: (shipmentId: string, shippingMethodId: string) => Promise<void>;
5
+ setShippingMethod?: (shipmentId: string, shippingMethodId: string) => ReturnType<typeof setShippingMethod>;
6
6
  } & ShipmentState;
7
7
  export declare const defaultShipmentContext: {
8
8
  setShipmentErrors: SetShipmentErrors;
9
- setShippingMethod: () => Promise<void>;
10
9
  };
11
10
  declare const ShipmentContext: import("react").Context<DefaultContext>;
12
11
  export default ShipmentContext;
@@ -1 +1 @@
1
- import{createContext}from"react";import{setShipmentErrors}from"../reducers/ShipmentReducer";export const defaultShipmentContext={setShipmentErrors,setShippingMethod:async()=>{}};const ShipmentContext=createContext(defaultShipmentContext);export default ShipmentContext;
1
+ import{createContext}from"react";import{setShipmentErrors}from"../reducers/ShipmentReducer";export const defaultShipmentContext={setShipmentErrors};const ShipmentContext=createContext(defaultShipmentContext);export default ShipmentContext;
@@ -98,6 +98,4 @@ export * from './components/skus/Skus';
98
98
  export * from './components/skus/SkusContainer';
99
99
  export * from './components/stock_transfers/StockTransfer';
100
100
  export * from './components/stock_transfers/StockTransferField';
101
- export type { CustomerCardsType } from './components/utils/PaymentCardsTemplate';
102
- export type { ShippingMethodRadioButtonType, ShippingMethodRadioButtonOnChangeType } from './components/shipping_methods/ShippingMethodRadioButton';
103
101
  export * from './typings/errors';
@@ -38,7 +38,11 @@ export interface SetAddressParams<V extends AddressSchema> {
38
38
  dispatch?: Dispatch<AddressAction>;
39
39
  }
40
40
  export type SetAddress = <V extends AddressSchema>(params: SetAddressParams<V>) => void;
41
- export type SaveAddresses = (params: {
41
+ export declare const setAddressErrors: SetAddressErrors;
42
+ export declare const setAddress: SetAddress;
43
+ type SetCloneAddress = (id: string, resource: AddressResource, dispatch: Dispatch<AddressAction>) => void;
44
+ export declare const setCloneAddress: SetCloneAddress;
45
+ interface TSaveAddressesParams {
42
46
  orderId?: string;
43
47
  order?: Order | null;
44
48
  updateOrder?: typeof updateOrder;
@@ -46,11 +50,11 @@ export type SaveAddresses = (params: {
46
50
  state: AddressState;
47
51
  dispatch: Dispatch<AddressAction>;
48
52
  getCustomerAddresses?: () => Promise<void>;
49
- }) => Promise<void>;
50
- export declare const setAddressErrors: SetAddressErrors;
51
- export declare const setAddress: SetAddress;
52
- type SetCloneAddress = (id: string, resource: AddressResource, dispatch: Dispatch<AddressAction>) => void;
53
- export declare const setCloneAddress: SetCloneAddress;
54
- export declare const saveAddresses: SaveAddresses;
53
+ }
54
+ export declare function saveAddresses({ config, updateOrder, order, state }: TSaveAddressesParams): Promise<{
55
+ success: boolean;
56
+ order?: Order;
57
+ error?: unknown;
58
+ }>;
55
59
  declare const addressReducer: (state: AddressState, reducer: AddressAction) => AddressState;
56
60
  export default addressReducer;
@@ -1 +1 @@
1
- import baseReducer from"../utils/baseReducer";import isEmpty from"lodash/isEmpty";import getSdk from"../utils/getSdk";import camelCase from"lodash/camelCase";export const addressFields=["city","company","country_code","first_name","last_name","line_1","line_2","phone","state_code","zip_code"],addressInitialState={errors:[]},setAddressErrors=({errors,dispatch,currentErrors=[],resource})=>{const billingErrors=resource==="billing_address"?errors.filter(e=>e.resource===resource):currentErrors.filter(e=>e.resource==="billing_address"),shippingErrors=resource==="shipping_address"?errors.filter(e=>e.resource===resource):currentErrors.filter(e=>e.resource==="shipping_address"),finalErrors=[...billingErrors,...shippingErrors];dispatch&&dispatch({type:"setErrors",payload:{errors:finalErrors}})},setAddress=({values,resource,dispatch})=>{dispatch&&dispatch({type:"setAddress",payload:{[`${resource}`]:values}})},setCloneAddress=(id,resource,dispatch)=>{dispatch({type:"setCloneAddress",payload:{[`${camelCase(resource)}Id`]:id}})},saveAddresses=async({config,updateOrder,order,state})=>{const{shipToDifferentAddress,billing_address:billingAddress,shipping_address:shippingAddress,billingAddressId,shippingAddressId}=state;try{const sdk=getSdk(config);if(order){const currentBillingAddressRef=order?.billing_address?.reference,orderAttributes={id:order?.id,_billing_address_clone_id:billingAddressId,_shipping_address_clone_id:billingAddressId};if(currentBillingAddressRef===billingAddressId&&(orderAttributes._billing_address_clone_id=order?.billing_address?.id,orderAttributes._shipping_address_clone_id=order?.shipping_address?.id),!isEmpty(billingAddress)&&billingAddress){delete orderAttributes._billing_address_clone_id,delete orderAttributes._shipping_address_clone_id,orderAttributes._shipping_address_same_as_billing=!0;const address=await sdk.addresses.create(billingAddress);orderAttributes.billing_address=sdk.addresses.relationship(address.id)}if(shipToDifferentAddress&&(delete orderAttributes._shipping_address_same_as_billing,shippingAddressId&&(orderAttributes._shipping_address_clone_id=shippingAddressId),!isEmpty(shippingAddress)&&shippingAddress)){delete orderAttributes._shipping_address_clone_id;const address=await sdk.addresses.create(shippingAddress);orderAttributes.shipping_address=sdk.addresses.relationship(address.id)}!isEmpty(orderAttributes)&&updateOrder&&await updateOrder({id:order.id,attributes:orderAttributes})}}catch(error){console.error(error)}};const type=["setErrors","setAddress","setShipToDifferentAddress","setCloneAddress","cleanup"],addressReducer=(state,reducer)=>baseReducer(state,reducer,type);export default addressReducer;
1
+ import baseReducer from"../utils/baseReducer";import isEmpty from"lodash/isEmpty";import getSdk from"../utils/getSdk";import camelCase from"lodash/camelCase";export const addressFields=["city","company","country_code","first_name","last_name","line_1","line_2","phone","state_code","zip_code"],addressInitialState={errors:[]},setAddressErrors=({errors,dispatch,currentErrors=[],resource})=>{const billingErrors=resource==="billing_address"?errors.filter(e=>e.resource===resource):currentErrors.filter(e=>e.resource==="billing_address"),shippingErrors=resource==="shipping_address"?errors.filter(e=>e.resource===resource):currentErrors.filter(e=>e.resource==="shipping_address"),finalErrors=[...billingErrors,...shippingErrors];dispatch&&dispatch({type:"setErrors",payload:{errors:finalErrors}})},setAddress=({values,resource,dispatch})=>{dispatch&&dispatch({type:"setAddress",payload:{[`${resource}`]:values}})},setCloneAddress=(id,resource,dispatch)=>{dispatch({type:"setCloneAddress",payload:{[`${camelCase(resource)}Id`]:id}})};export async function saveAddresses({config,updateOrder,order,state}){const{shipToDifferentAddress,billing_address:billingAddress,shipping_address:shippingAddress,billingAddressId,shippingAddressId}=state;try{const sdk=getSdk(config);if(order){const currentBillingAddressRef=order?.billing_address?.reference,orderAttributes={id:order?.id,_billing_address_clone_id:billingAddressId,_shipping_address_clone_id:billingAddressId};if(currentBillingAddressRef===billingAddressId&&(orderAttributes._billing_address_clone_id=order?.billing_address?.id,orderAttributes._shipping_address_clone_id=order?.shipping_address?.id),!isEmpty(billingAddress)&&billingAddress){delete orderAttributes._billing_address_clone_id,delete orderAttributes._shipping_address_clone_id,orderAttributes._shipping_address_same_as_billing=!0;const address=await sdk.addresses.create(billingAddress);orderAttributes.billing_address=sdk.addresses.relationship(address.id)}if(shipToDifferentAddress&&(delete orderAttributes._shipping_address_same_as_billing,shippingAddressId&&(orderAttributes._shipping_address_clone_id=shippingAddressId),!isEmpty(shippingAddress)&&shippingAddress)){delete orderAttributes._shipping_address_clone_id;const address=await sdk.addresses.create(shippingAddress);orderAttributes.shipping_address=sdk.addresses.relationship(address.id)}if(!isEmpty(orderAttributes)&&updateOrder)return{success:!0,order:(await updateOrder({id:order.id,attributes:orderAttributes}))?.order}}return{success:!1}}catch(error){return console.error(error),{success:!1,error}}}const type=["setErrors","setAddress","setShipToDifferentAddress","setCloneAddress","cleanup"],addressReducer=(state,reducer)=>baseReducer(state,reducer,type);export default addressReducer;