142 lines
3.8 KiB
TypeScript
142 lines
3.8 KiB
TypeScript
/**
|
|
* Internal dependencies
|
|
*/
|
|
import {
|
|
EnviaSinglePartner,
|
|
SkydropxSinglePartner,
|
|
SendcloudSinglePartner,
|
|
PacklinkSinglePartner,
|
|
ShipStationSinglePartner,
|
|
PacklinkDualPartner,
|
|
SendcloudDualPartner,
|
|
ShipStationDualPartner,
|
|
WooCommerceShippingSinglePartner,
|
|
} from './partners';
|
|
|
|
// Order is respected, left to right in the UI
|
|
const shippingProviders = {
|
|
AU: {
|
|
shipping_providers: [ 'ShipStation' ] as const,
|
|
},
|
|
MX: {
|
|
// using name instead of directly referencing the component because we want to send this over the API in the near future
|
|
shipping_providers: [ 'Skydropx' ] as const,
|
|
},
|
|
CA: {
|
|
shipping_providers: [ 'ShipStation' ] as const,
|
|
},
|
|
CO: {
|
|
shipping_providers: [ 'Skydropx' ] as const,
|
|
},
|
|
CL: {
|
|
shipping_providers: [ 'Envia' ] as const,
|
|
},
|
|
AR: {
|
|
shipping_providers: [ 'Envia' ] as const,
|
|
},
|
|
PE: {
|
|
shipping_providers: [ 'Envia' ] as const,
|
|
},
|
|
BR: {
|
|
shipping_providers: [ 'Envia' ] as const,
|
|
},
|
|
UY: {
|
|
shipping_providers: [ 'Envia' ] as const,
|
|
},
|
|
GT: {
|
|
shipping_providers: [ 'Envia' ] as const,
|
|
},
|
|
NL: {
|
|
shipping_providers: [ 'Sendcloud' ] as const,
|
|
},
|
|
AT: {
|
|
shipping_providers: [ 'Sendcloud' ] as const,
|
|
},
|
|
BE: {
|
|
shipping_providers: [ 'Sendcloud' ] as const,
|
|
},
|
|
FR: {
|
|
shipping_providers: [ 'Sendcloud', 'Packlink' ] as const,
|
|
},
|
|
DE: {
|
|
shipping_providers: [ 'Sendcloud', 'Packlink' ] as const,
|
|
},
|
|
ES: {
|
|
shipping_providers: [ 'Packlink', 'Sendcloud' ] as const,
|
|
},
|
|
IT: {
|
|
shipping_providers: [ 'Packlink', 'Sendcloud' ] as const,
|
|
},
|
|
GB: {
|
|
shipping_providers: [ 'Sendcloud', 'ShipStation' ] as const,
|
|
},
|
|
US: {
|
|
shipping_providers: [ 'WooCommerceShipping' ] as const,
|
|
},
|
|
};
|
|
|
|
const providers = {
|
|
Envia: {
|
|
name: 'Envia' as const,
|
|
url: 'https://woocommerce.com/products/envia-shipping-and-fulfillment/', // no plugin yet so we link to the product page
|
|
'single-partner-layout': EnviaSinglePartner,
|
|
},
|
|
Skydropx: {
|
|
name: 'Skydropx' as const,
|
|
url: 'https://wordpress.org/plugins/skydropx-cotizador-y-envios/',
|
|
'single-partner-layout': SkydropxSinglePartner,
|
|
},
|
|
Sendcloud: {
|
|
name: 'Sendcloud' as const,
|
|
slug: 'sendcloud-shipping', // https://wordpress.org/plugins/sendcloud-shipping/
|
|
url: 'https://wordpress.org/plugins/sendcloud-shipping/',
|
|
'single-partner-layout': SendcloudSinglePartner,
|
|
'dual-partner-layout': SendcloudDualPartner,
|
|
},
|
|
Packlink: {
|
|
name: 'Packlink' as const,
|
|
slug: 'packlink-pro-shipping', // https://wordpress.org/plugins/packlink-pro-shipping/
|
|
url: 'https://wordpress.org/plugins/packlink-pro-shipping/',
|
|
'single-partner-layout': PacklinkSinglePartner,
|
|
'dual-partner-layout': PacklinkDualPartner,
|
|
},
|
|
ShipStation: {
|
|
name: 'ShipStation' as const,
|
|
slug: 'woocommerce-shipstation-integration', // https://wordpress.org/plugins/woocommerce-shipstation-integration/
|
|
url: 'https://wordpress.org/plugins/woocommerce-shipstation-integration/',
|
|
'single-partner-layout': ShipStationSinglePartner,
|
|
'dual-partner-layout': ShipStationDualPartner,
|
|
},
|
|
WooCommerceShipping: {
|
|
name: 'WooCommerce Shipping' as const,
|
|
slug: 'woocommerce-services', // https://wordpress.org/plugins/woocommerce-services/
|
|
url: 'https://woocommerce.com/products/shipping',
|
|
dependencies: 'jetpack',
|
|
'single-partner-layout': WooCommerceShippingSinglePartner,
|
|
},
|
|
} as const;
|
|
|
|
/**
|
|
* Gets the components for the shipping providers for a given country
|
|
*
|
|
* @param countryCode One of the countries above
|
|
* @return Either a single partner component or an array containing two partner components
|
|
*/
|
|
export const getShippingProviders = (
|
|
countryCode: keyof typeof shippingProviders
|
|
) => {
|
|
const countryProviders =
|
|
shippingProviders[ countryCode ]?.shipping_providers;
|
|
|
|
if ( ! countryProviders ) {
|
|
return [];
|
|
}
|
|
|
|
return countryProviders.length === 1
|
|
? [ providers[ countryProviders[ 0 ] ] ]
|
|
: [
|
|
providers[ countryProviders[ 0 ] ],
|
|
providers[ countryProviders[ 1 ] ],
|
|
];
|
|
};
|