woocommerce/plugins/woocommerce-admin/client/tasks/fills/experimental-shipping-recom.../components/store-location.tsx

65 lines
1.7 KiB
TypeScript

/**
* External dependencies
*/
import { SETTINGS_STORE_NAME } from '@woocommerce/data';
import { recordEvent } from '@woocommerce/tracks';
import { useEffect, useState } from '@wordpress/element';
import { useSelect, useDispatch } from '@wordpress/data';
/**
* Internal dependencies
*/
import { getCountryCode } from '~/dashboard/utils';
import { hasCompleteAddress } from '../../tax/utils';
import { default as StoreLocationForm } from '~/tasks/fills/steps/location';
export const StoreLocation: React.FC< {
nextStep: () => void;
onLocationComplete: () => void;
} > = ( { nextStep, onLocationComplete } ) => {
const { createNotice } = useDispatch( 'core/notices' );
const { updateAndPersistSettingsForGroup } =
useDispatch( SETTINGS_STORE_NAME );
const { generalSettings, isResolving } = useSelect( ( select ) => {
const { getSettings, hasFinishedResolution } =
select( SETTINGS_STORE_NAME );
return {
generalSettings: getSettings( 'general' )?.general,
isResolving: ! hasFinishedResolution( 'getSettings', [
'general',
] ),
};
} );
useEffect( () => {
if ( isResolving || ! hasCompleteAddress( generalSettings || {} ) ) {
return;
}
onLocationComplete();
}, [ generalSettings, onLocationComplete, isResolving ] );
if ( isResolving ) {
return null;
}
return (
<StoreLocationForm
onComplete={ ( values: { [ key: string ]: string } ) => {
const country = getCountryCode( values.countryState );
recordEvent( 'tasklist_shipping_recommendation_set_location', {
country,
} );
nextStep();
} }
isSettingsRequesting={ false }
settings={ generalSettings }
updateAndPersistSettingsForGroup={
updateAndPersistSettingsForGroup
}
createNotice={ createNotice }
isSettingsError={ false }
/>
);
};