woocommerce/plugins/woocommerce-admin/client/tasks/fills/shipping/shipping-providers/shipping-providers.ts

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 ] ],
];
};