woocommerce/plugins/woocommerce-admin/client/marketing/hooks/useIntroductionBanner.ts

44 lines
1.2 KiB
TypeScript

/**
* External dependencies
*/
import { useDispatch, useSelect } from '@wordpress/data';
import { OPTIONS_STORE_NAME } from '@woocommerce/data';
import { recordEvent } from '@woocommerce/tracks';
type UseIntroductionBanner = {
loading: boolean;
isIntroductionBannerDismissed: boolean;
dismissIntroductionBanner: () => void;
};
const OPTION_NAME_BANNER_DISMISSED =
'woocommerce_marketing_overview_multichannel_banner_dismissed';
const OPTION_VALUE_YES = 'yes';
export const useIntroductionBanner = (): UseIntroductionBanner => {
const { updateOptions } = useDispatch( OPTIONS_STORE_NAME );
const dismissIntroductionBanner = () => {
updateOptions( {
[ OPTION_NAME_BANNER_DISMISSED ]: OPTION_VALUE_YES,
} );
recordEvent( 'marketing_multichannel_banner_dismissed', {} );
};
return useSelect( ( select ) => {
const { getOption, isOptionsUpdating, hasFinishedResolution } =
select( OPTIONS_STORE_NAME );
const isUpdateRequesting = isOptionsUpdating();
return {
loading: ! hasFinishedResolution( 'getOption', [
OPTION_NAME_BANNER_DISMISSED,
] ),
isIntroductionBannerDismissed:
getOption( OPTION_NAME_BANNER_DISMISSED ) ===
OPTION_VALUE_YES || isUpdateRequesting,
dismissIntroductionBanner,
};
}, [] );
};