81 lines
1.8 KiB
TypeScript
81 lines
1.8 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { __ } from '@wordpress/i18n';
|
|
import { difference } from 'lodash';
|
|
import { useSelect } from '@wordpress/data';
|
|
import { Spinner } from '@woocommerce/components';
|
|
import { PLUGINS_STORE_NAME, SETTINGS_STORE_NAME } from '@woocommerce/data';
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
import {
|
|
AUTOMATION_PLUGINS,
|
|
hasCompleteAddress,
|
|
SettingsSelector,
|
|
TaxChildProps,
|
|
} from '../utils';
|
|
import { AutomatedTaxes } from './automated-taxes';
|
|
import { Setup } from './setup';
|
|
|
|
export const WooCommerceTax: React.FC< TaxChildProps > = ( {
|
|
isPending,
|
|
onAutomate,
|
|
onManual,
|
|
onDisable,
|
|
} ) => {
|
|
const {
|
|
generalSettings,
|
|
isJetpackConnected,
|
|
isResolving,
|
|
pluginsToActivate,
|
|
} = useSelect( ( select ) => {
|
|
const { getSettings } = select(
|
|
SETTINGS_STORE_NAME
|
|
) as SettingsSelector;
|
|
const { getActivePlugins, hasFinishedResolution } =
|
|
select( PLUGINS_STORE_NAME );
|
|
const activePlugins = getActivePlugins();
|
|
|
|
return {
|
|
generalSettings: getSettings( 'general' ).general,
|
|
isJetpackConnected:
|
|
select( PLUGINS_STORE_NAME ).isJetpackConnected(),
|
|
isResolving:
|
|
! hasFinishedResolution( 'isJetpackConnected' ) ||
|
|
! select( SETTINGS_STORE_NAME ).hasFinishedResolution(
|
|
'getSettings',
|
|
[ 'general' ]
|
|
) ||
|
|
! hasFinishedResolution( 'getActivePlugins' ),
|
|
pluginsToActivate: difference( AUTOMATION_PLUGINS, activePlugins ),
|
|
};
|
|
} );
|
|
|
|
const canAutomateTaxes = () => {
|
|
return (
|
|
hasCompleteAddress( generalSettings ) &&
|
|
! pluginsToActivate.length &&
|
|
isJetpackConnected
|
|
);
|
|
};
|
|
|
|
if ( isResolving ) {
|
|
return <Spinner />;
|
|
}
|
|
|
|
const childProps = {
|
|
isPending,
|
|
onAutomate,
|
|
onManual,
|
|
onDisable,
|
|
};
|
|
|
|
if ( canAutomateTaxes() ) {
|
|
return <AutomatedTaxes { ...childProps } />;
|
|
}
|
|
|
|
return <Setup { ...childProps } />;
|
|
};
|