/** * External dependencies */ import jetpackAnalytics from '@automattic/jetpack-analytics'; import { useSelect, useDispatch } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { useState, useCallback } from 'react'; /** * Internal dependencies */ import { INTEGRATIONS_STORE } from '../../store/integrations'; import AkismetDashboardCard from './akismet-card'; import GoogleSheetsDashboardCard from './google-sheets-card'; import HostingerReachDashboardCard from './hostinger-reach-card'; import JetpackCRMDashboardCard from './jetpack-crm-card'; import MailPoetDashboardCard from './mailpoet-card'; import SalesforceDashboardCard from './salesforce-card'; import './style.scss'; /** * Types */ import type { SelectIntegrations, IntegrationsDispatch } from '../../store/integrations'; import type { Integration } from '../../types'; const EMPTY_ARRAY: Integration[] = []; const Integrations = () => { const { integrations } = useSelect( ( select: SelectIntegrations ) => { const store = select( INTEGRATIONS_STORE ); return { integrations: store.getIntegrations() ?? EMPTY_ARRAY, }; }, [] ) as { integrations: Integration[] }; const { refreshIntegrations } = useDispatch( INTEGRATIONS_STORE ) as IntegrationsDispatch; const [ expandedCards, setExpandedCards ] = useState( { akismet: false, googleSheets: false, crm: false, salesforce: false, mailpoet: false, hostingerReach: false, } ); const toggleCard = useCallback( ( cardId: keyof typeof expandedCards ) => { setExpandedCards( prev => { const isExpanding = ! prev[ cardId ]; if ( isExpanding ) { jetpackAnalytics.tracks.recordEvent( 'jetpack_forms_integrations_card_expand', { card: cardId, origin: 'dashboard', } ); } return { ...prev, [ cardId ]: isExpanding, }; } ); }, [] ); const handleToggleAkismet = useCallback( () => toggleCard( 'akismet' ), [ toggleCard ] ); const handleToggleGoogleSheets = useCallback( () => toggleCard( 'googleSheets' ), [ toggleCard ] ); const handleToggleCRM = useCallback( () => toggleCard( 'crm' ), [ toggleCard ] ); const handleToggleSalesforce = useCallback( () => toggleCard( 'salesforce' ), [ toggleCard ] ); const handleToggleMailPoet = useCallback( () => toggleCard( 'mailpoet' ), [ toggleCard ] ); const handleToggleHostingerReach = useCallback( () => toggleCard( 'hostingerReach' ), [ toggleCard ] ); const findIntegrationById = ( id: string ) => integrations.find( integration => integration.id === id ); // Only supported integrations will be returned from endpoint. const akismetData = findIntegrationById( 'akismet' ); const googleDriveData = findIntegrationById( 'google-drive' ); const crmData = findIntegrationById( 'zero-bs-crm' ); const mailpoetData = findIntegrationById( 'mailpoet' ); const salesforceData = findIntegrationById( 'salesforce' ); const hostingerReachData = findIntegrationById( 'hostinger-reach' ); return (