46 lines
1.2 KiB
TypeScript
46 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', {} );
|
|
};
|
|
|
|
const { loading, data } = useSelect( ( select ) => {
|
|
const { getOption, hasFinishedResolution } =
|
|
select( OPTIONS_STORE_NAME );
|
|
|
|
return {
|
|
loading: ! hasFinishedResolution( 'getOption', [
|
|
OPTION_NAME_BANNER_DISMISSED,
|
|
] ),
|
|
data: getOption( OPTION_NAME_BANNER_DISMISSED ),
|
|
};
|
|
}, [] );
|
|
|
|
return {
|
|
loading,
|
|
isIntroductionBannerDismissed: data === OPTION_VALUE_YES,
|
|
dismissIntroductionBanner,
|
|
};
|
|
};
|