/**
* External dependencies
*/
import { useAnalytics } from '@automattic/jetpack-shared-extension-utils';
import { Button, Icon } from '@wordpress/components';
import { useDispatch } from '@wordpress/data';
import { __, _x } from '@wordpress/i18n';
import debugFactory from 'debug';
/**
* Internal dependencies
*/
import AiFeedbackThumbs from '../../components/ai-feedback/index.tsx';
import CheckIcon from '../assets/icons/check.tsx';
import LogoIcon from '../assets/icons/logo.tsx';
import MediaIcon from '../assets/icons/media.tsx';
import { EVENT_SAVE, EVENT_USE } from '../constants.ts';
import useLogoGenerator from '../hooks/use-logo-generator.ts';
import useRequestErrors from '../hooks/use-request-errors.ts';
import { updateLogo } from '../lib/logo-storage.ts';
import { STORE_NAME } from '../store/index.ts';
import { ImageLoader } from './image-loader.tsx';
import './logo-presenter.scss';
/**
* Types
*/
import type { Logo } from '../store/types.ts';
import type { LogoPresenterProps } from '../types.ts';
import type { FC, ReactNode } from 'react';
const debug = debugFactory( 'jetpack-ai-calypso:logo-presenter' );
const SaveInLibraryButton: FC< { siteId: string } > = ( { siteId } ) => {
const { tracks } = useAnalytics();
const { recordEvent: recordTracksEvent } = tracks;
const {
saveLogo,
selectedLogo,
isSavingLogoToLibrary: saving,
logos,
selectedLogoIndex,
context,
} = useLogoGenerator();
const saved = !! selectedLogo?.mediaId;
const { loadLogoHistory } = useDispatch( STORE_NAME );
const handleClick = async () => {
if ( ! saved && ! saving ) {
recordTracksEvent( EVENT_SAVE, {
context,
logos_count: logos.length,
selected_logo: selectedLogoIndex ? selectedLogoIndex + 1 : 0,
} );
try {
const savedLogo = await saveLogo( selectedLogo );
// Update localStorage
updateLogo( {
siteId,
url: selectedLogo.url,
newUrl: savedLogo.mediaURL,
mediaId: savedLogo.mediaId,
} );
// Update state
loadLogoHistory( siteId );
} catch ( error ) {
debug( 'Error saving logo', error );
}
}
};
const savingLabel = _x( 'Saving…', 'Logo save button', 'jetpack-ai-client' );
const savedLabel = __( 'Saved', 'jetpack-ai-client' );
return ! saving && ! saved ? (
) : (
);
};
const UseOnSiteButton: FC< { onApplyLogo: ( mediaId: number ) => void } > = ( { onApplyLogo } ) => {
const { tracks } = useAnalytics();
const { recordEvent: recordTracksEvent } = tracks;
const { isSavingLogoToLibrary, selectedLogo, logos, selectedLogoIndex, context } =
useLogoGenerator();
const handleClick = async () => {
if ( ! isSavingLogoToLibrary ) {
recordTracksEvent( EVENT_USE, {
context,
logos_count: logos.length,
selected_logo: selectedLogoIndex != null ? selectedLogoIndex + 1 : 0,
} );
onApplyLogo?.( selectedLogo?.mediaId );
}
};
return (
);
};
const LogoLoading: FC = () => {
return (
<>