67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { __ } from '@wordpress/i18n';
|
|
import { Button } from '@wordpress/components';
|
|
import { NAVIGATION_STORE_NAME } from '@woocommerce/data';
|
|
import { recordEvent } from '@woocommerce/tracks';
|
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
import './style.scss';
|
|
|
|
export const FavoriteButton = ( { id } ) => {
|
|
const { favorites, isResolving } = useSelect( ( select ) => {
|
|
return {
|
|
favorites: select( NAVIGATION_STORE_NAME ).getFavorites(),
|
|
isResolving: select( NAVIGATION_STORE_NAME ).isResolving(
|
|
'getFavorites'
|
|
),
|
|
};
|
|
} );
|
|
|
|
const { addFavorite, removeFavorite } = useDispatch(
|
|
NAVIGATION_STORE_NAME
|
|
);
|
|
|
|
const isFavorited = favorites.includes( id );
|
|
|
|
const toggleFavorite = () => {
|
|
const toggle = isFavorited ? removeFavorite : addFavorite;
|
|
toggle( id );
|
|
recordEvent( 'navigation_favorite', {
|
|
id,
|
|
action: isFavorited ? 'unfavorite' : 'favorite',
|
|
} );
|
|
};
|
|
|
|
if ( isResolving ) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Button
|
|
id="woocommerce-navigation-favorite-button"
|
|
className="woocommerce-navigation-favorite-button"
|
|
isTertiary
|
|
onClick={ toggleFavorite }
|
|
icon={ isFavorited ? 'star-filled' : 'star-empty' }
|
|
aria-label={
|
|
isFavorited
|
|
? __(
|
|
'Add this item to your favorites.',
|
|
'woocommerce-admin'
|
|
)
|
|
: __(
|
|
'Remove this item from your favorites.',
|
|
'woocommerce-admin'
|
|
)
|
|
}
|
|
/>
|
|
);
|
|
};
|
|
|
|
export default FavoriteButton;
|