diff --git a/projects/packages/forms/src/dashboard/components/export-responses-modal/index.tsx b/projects/packages/forms/src/dashboard/components/export-responses-modal/index.tsx index 0ff7d691597a9..5ce5fb94112c4 100644 --- a/projects/packages/forms/src/dashboard/components/export-responses-modal/index.tsx +++ b/projects/packages/forms/src/dashboard/components/export-responses-modal/index.tsx @@ -2,12 +2,16 @@ * External dependencies */ import { Modal, __experimentalVStack as VStack } from '@wordpress/components'; // eslint-disable-line @wordpress/no-unsafe-wp-apis +import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ +import { INTEGRATIONS_STORE } from '../../../store/integrations'; import CSVExport from '../../inbox/export-responses/csv'; import GoogleDriveExport from '../../inbox/export-responses/google-drive'; +import type { SelectIntegrations } from '../../../store/integrations'; +import type { Integration } from '../../../types'; type ExportResponsesModalProps = { onRequestClose: () => void; @@ -20,6 +24,16 @@ const ExportResponsesModal = ( { onExport, autoConnectGdrive, }: ExportResponsesModalProps ) => { + const { integrations } = useSelect( ( select: SelectIntegrations ) => { + const store = select( INTEGRATIONS_STORE ); + return { + integrations: store.getIntegrations() || [], + }; + }, [] ) as { integrations: Integration[] }; + + const isGoogleDriveEnabled = integrations.some( + integration => integration.id === 'google-drive' + ); return ( - + { isGoogleDriveEnabled && ( + + ) } ); diff --git a/projects/packages/forms/src/dashboard/inbox/export-responses/google-drive.tsx b/projects/packages/forms/src/dashboard/inbox/export-responses/google-drive.tsx index a3f346f21acea..a5cbc0299b5b4 100644 --- a/projects/packages/forms/src/dashboard/inbox/export-responses/google-drive.tsx +++ b/projects/packages/forms/src/dashboard/inbox/export-responses/google-drive.tsx @@ -6,6 +6,7 @@ import { isSimpleSite } from '@automattic/jetpack-script-data'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import requestExternalAccess from '@automattic/request-external-access'; import { Button, Path, Spinner, SVG } from '@wordpress/components'; +import { useSelect, useDispatch } from '@wordpress/data'; import { useCallback, useRef, useState } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; import clsx from 'clsx'; @@ -13,12 +14,22 @@ import clsx from 'clsx'; * Internal dependencies */ import { config } from '../..'; -import { useIntegrationStatus } from '../../../blocks/contact-form/components/jetpack-integrations-modal/hooks/use-integration-status'; +import { INTEGRATIONS_STORE } from '../../../store/integrations'; import { PARTIAL_RESPONSES_PATH } from '../../../util/get-preferred-responses-view'; +/** + * Internal dependencies + */ +import type { SelectIntegrations, IntegrationsDispatch } from '../../../store/integrations'; +import type { Integration } from '../../../types'; const GoogleDriveExport = ( { onExport, autoConnect = false } ) => { const [ isExporting, setIsExporting ] = useState( false ); - const { integration, refreshStatus } = useIntegrationStatus( 'google-drive' ); + const { integration } = useSelect( ( select: SelectIntegrations ) => { + const store = select( INTEGRATIONS_STORE ); + const list = store.getIntegrations() || []; + return { integration: list.find( ( i: Integration ) => i.id === 'google-drive' ) }; + }, [] ) as { integration?: Integration }; + const { refreshIntegrations } = useDispatch( INTEGRATIONS_STORE ) as IntegrationsDispatch; const isConnectedToGoogleDrive = !! integration?.isConnected; const { tracks } = useAnalytics(); const autoConnectOpened = useRef( false ); @@ -58,12 +69,12 @@ const GoogleDriveExport = ( { onExport, autoConnect = false } ) => { setIsTogglingConnection( true ); requestExternalAccess( integration?.settingsUrl, ( { keyring_id: keyringId } ) => { if ( keyringId ) { - refreshStatus(); + refreshIntegrations(); } else { setIsTogglingConnection( false ); } } ); - }, [ tracks, integration?.settingsUrl, refreshStatus ] ); + }, [ tracks, integration?.settingsUrl, refreshIntegrations ] ); if ( isOfflineMode ) { return null;