/** * External dependencies */ import { getSetting, STORE_PAGES, LocaleSpecificAddressField, } from '@woocommerce/settings'; export type WordCountType = | 'words' | 'characters_excluding_spaces' | 'characters_including_spaces'; interface WcBlocksConfig { buildPhase: number; pluginUrl: string; productCount: number; defaultAvatar: string; restApiRoutes: Record< string, string[] >; wordCountType: WordCountType; } export const blocksConfig = getSetting( 'wcBlocksConfig', { buildPhase: 1, pluginUrl: '', productCount: 0, defaultAvatar: '', restApiRoutes: {}, wordCountType: 'words', } ) as WcBlocksConfig; export const WC_BLOCKS_IMAGE_URL = blocksConfig.pluginUrl + 'images/'; export const WC_BLOCKS_BUILD_URL = blocksConfig.pluginUrl + 'build/'; export const WC_BLOCKS_PHASE = blocksConfig.buildPhase; export const SHOP_URL = STORE_PAGES.shop?.permalink; export const CHECKOUT_PAGE_ID = STORE_PAGES.checkout.id; export const CHECKOUT_URL = STORE_PAGES.checkout.permalink; export const PRIVACY_URL = STORE_PAGES.privacy.permalink; export const PRIVACY_PAGE_NAME = STORE_PAGES.privacy.title; export const TERMS_URL = STORE_PAGES.terms.permalink; export const TERMS_PAGE_NAME = STORE_PAGES.terms.title; export const CART_PAGE_ID = STORE_PAGES.cart.id; export const CART_URL = STORE_PAGES.cart.permalink; export const LOGIN_URL = STORE_PAGES.myaccount.permalink ? STORE_PAGES.myaccount.permalink : getSetting( 'wpLoginUrl', '/wp-login.php' ); export const LOCAL_PICKUP_ENABLED = getSetting< boolean >( 'localPickupEnabled', false ); type CountryData = { allowBilling: boolean; allowShipping: boolean; states: Record< string, string >; locale: Record< string, LocaleSpecificAddressField >; }; // Contains country names. const countries = getSetting< Record< string, string > >( 'countries', {} ); // Contains country settings. const countryData = getSetting< Record< string, CountryData > >( 'countryData', {} ); export const ALLOWED_COUNTRIES = Object.fromEntries( Object.keys( countryData ) .filter( ( countryCode ) => { return countryData[ countryCode ].allowBilling === true; } ) .map( ( countryCode ) => { return [ countryCode, countries[ countryCode ] || '' ]; } ) ); export const ALLOWED_STATES = Object.fromEntries( Object.keys( countryData ) .filter( ( countryCode ) => { return countryData[ countryCode ].allowBilling === true; } ) .map( ( countryCode ) => { return [ countryCode, countryData[ countryCode ].states || [] ]; } ) ); export const SHIPPING_COUNTRIES = Object.fromEntries( Object.keys( countryData ) .filter( ( countryCode ) => { return countryData[ countryCode ].allowShipping === true; } ) .map( ( countryCode ) => { return [ countryCode, countries[ countryCode ] || '' ]; } ) ); export const SHIPPING_STATES = Object.fromEntries( Object.keys( countryData ) .filter( ( countryCode ) => { return countryData[ countryCode ].allowShipping === true; } ) .map( ( countryCode ) => { return [ countryCode, countryData[ countryCode ].states || [] ]; } ) ); export const COUNTRY_LOCALE = Object.fromEntries( Object.keys( countryData ).map( ( countryCode ) => { return [ countryCode, countryData[ countryCode ].locale || [] ]; } ) );