Skip to content

Commit

Permalink
AI Client: make fetch error retry optional (#39848)
Browse files Browse the repository at this point in the history
* make reload handler optional on fetch error notice

* changelog

* provide empty retry handler

* move condition process to modal initializer

* cleanup new open handler
  • Loading branch information
CGastrell authored Oct 22, 2024
1 parent b275dbe commit 932747a
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Significance: minor
Type: changed

AI Client: make reload handler prop optional as it still works in a fuzzy way. The error notice (modal) will instruct to reload the page when the optional prop is not provided
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,34 @@ import type React from 'react';

export const FeatureFetchFailureScreen: React.FC< {
onCancel: () => void;
onRetry: () => void;
onRetry?: () => void;
} > = ( { onCancel, onRetry } ) => {
const errorMessage = __(
'We are sorry. There was an error loading your Jetpack AI plan data. Please, try again.',
'jetpack-ai-client'
);

const errorMessageWithoutRetry = __(
'We are sorry. There was an error loading your Jetpack AI plan data. Please, reload the page and try again.',
'jetpack-ai-client'
);

return (
<div className="jetpack-ai-logo-generator-modal__notice-message-wrapper">
<div className="jetpack-ai-logo-generator-modal__notice-message">
<span className="jetpack-ai-logo-generator-modal__loading-message">{ errorMessage }</span>
<span className="jetpack-ai-logo-generator-modal__loading-message">
{ onRetry ? errorMessage : errorMessageWithoutRetry }
</span>
</div>
<div className="jetpack-ai-logo-generator-modal__notice-actions">
<Button variant="tertiary" onClick={ onCancel }>
{ __( 'Cancel', 'jetpack-ai-client' ) }
</Button>
<Button variant="primary" onClick={ onRetry }>
{ __( 'Try again', 'jetpack-ai-client' ) }
</Button>
{ onRetry && (
<Button variant="primary" onClick={ onRetry }>
{ __( 'Try again', 'jetpack-ai-client' ) }
</Button>
) }
</div>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
isOpen,
onClose,
onApplyLogo,
onReload,
onReload = null,
siteDetails,
context,
placement,
Expand Down Expand Up @@ -73,7 +73,8 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
site,
requireUpgrade,
} = useLogoGenerator();
const { featureFetchError, firstLogoPromptFetchError, clearErrors } = useRequestErrors();
const { featureFetchError, setFeatureFetchError, firstLogoPromptFetchError, clearErrors } =
useRequestErrors();
const siteId = siteDetails?.ID;
const [ logoAccepted, setLogoAccepted ] = useState( false );
const { nextTierCheckoutURL: upgradeURL } = useCheckout();
Expand Down Expand Up @@ -105,6 +106,15 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
*/
const initializeModal = useCallback( async () => {
try {
if ( ! siteId ) {
throw new Error( 'Site ID is missing' );
}

if ( ! feature?.featuresControl?.[ 'logo-generator' ]?.enabled ) {
setFeatureFetchError( 'Failed to fetch feature data' );
throw new Error( 'Failed to fetch feature data' );
}

const hasHistory = ! isLogoHistoryEmpty( String( siteId ) );

const logoCost = feature?.costs?.[ 'jetpack-ai-logo-generator' ]?.logo ?? DEFAULT_LOGO_COST;
Expand Down Expand Up @@ -179,6 +189,7 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
isLogoHistoryEmpty,
siteId,
requireUpgrade,
setFeatureFetchError,
] );

const handleModalOpen = useCallback( async () => {
Expand All @@ -201,6 +212,15 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
recordTracksEvent( EVENT_MODAL_CLOSE, { context, placement } );
};

const handleReload = useCallback( () => {
if ( ! onReload ) {
return;
}
closeModal();
requestedFeatureData.current = false;
onReload();
}, [ onReload, closeModal ] );

const handleApplyLogo = ( mediaId: number ) => {
setLogoAccepted( true );
onApplyLogo?.( mediaId );
Expand Down Expand Up @@ -229,7 +249,7 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
// Handles modal opening logic
useEffect( () => {
// While the modal is not open, the siteId is not set, or the feature data is not available, do nothing.
if ( ! isOpen || ! siteId || ! feature?.costs ) {
if ( ! isOpen ) {
return;
}

Expand All @@ -238,7 +258,7 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
needsToHandleModalOpen.current = false;
handleModalOpen();
}
}, [ isOpen, siteId, handleModalOpen, feature ] );
}, [ isOpen, handleModalOpen ] );

let body: React.ReactNode;

Expand All @@ -248,10 +268,7 @@ export const GeneratorModal: React.FC< GeneratorModalProps > = ( {
body = (
<FeatureFetchFailureScreen
onCancel={ closeModal }
onRetry={ () => {
closeModal();
onReload?.();
} }
onRetry={ onReload ? handleReload : null }
/>
);
} else if ( needsFeature || needsMoreRequests ) {
Expand Down
2 changes: 1 addition & 1 deletion projects/js-packages/ai-client/src/logo-generator/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export interface GeneratorModalProps {
isOpen: boolean;
onClose: () => void;
onApplyLogo: ( mediaId: number ) => void;
onReload: () => void;
onReload?: () => void;
context: string;
placement: string;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Significance: patch
Type: other

Jetpack AI: remove reload handler for logo generator modal call
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ const siteLogoEditWithAiComponents = createHigherOrderComponent( BlockEdit => {
setIsLogoGeneratorModalVisible( false );
}, [] );

const reloadModal = useCallback( () => {
closeModal();
showModal();
}, [ closeModal, showModal ] );
// const reloadModal = useCallback( () => {
// closeModal();
// showModal();
// }, [ closeModal, showModal ] );

const applyLogoHandler = useCallback(
( mediaId: number ) => {
Expand Down Expand Up @@ -135,7 +135,8 @@ const siteLogoEditWithAiComponents = createHigherOrderComponent( BlockEdit => {
isOpen={ isLogoGeneratorModalVisible }
onClose={ closeModal }
onApplyLogo={ applyLogoHandler }
onReload={ reloadModal }
// reload is not working right and can end up showing a non functional modal
// onReload={ reloadModal }
context={ PLACEMENT_CONTEXT }
placement={ TOOL_PLACEMENT }
siteDetails={ siteDetails }
Expand Down

0 comments on commit 932747a

Please sign in to comment.