Current File : /home/jeconsul/public_html/wp-content/plugins/suremails/src/screens/notifications/notifications.js |
// @components/Notifications.js
import React, { memo, useEffect } from 'react';
import { __ } from '@wordpress/i18n';
import { Container, toast, Title } from '@bsf/force-ui';
import { useQuery } from '@tanstack/react-query';
import { fetchInstalledPluginsData } from '@api/plugins';
import EmptyNotifications from './empty-notifications';
import NotificationsSkeleton from './notifications-skeleton';
import Ottokit from '@screens/notifications/ottokit';
const Notifications = () => {
// Fetch the installed/active plugins data using the centralized API call.
const {
data: pluginsData,
isLoading,
error,
} = useQuery( {
queryKey: [ 'installed-plugins' ],
queryFn: fetchInstalledPluginsData,
refetchInterval: 100000,
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: true,
} );
// Determine installation and activation status.
const isSureTriggersInstalled =
pluginsData?.installed.includes( 'suretriggers' );
const isSureTriggersActive = pluginsData?.active.includes( 'suretriggers' );
// Check OttoKit connection status from localized data.
const isOttokitConnected = window.suremails?.ottokit_connected === '1';
// Handle error state.
useEffect( () => {
if ( error ) {
toast.error( __( 'Error loading notifications.', 'suremails' ), {
description:
error.message ||
__(
'There was an issue fetching notifications.',
'suremails'
),
} );
}
}, [ error ] );
const renderContent = () => {
if ( isLoading ) {
return <NotificationsSkeleton />;
}
// Only display the OttoKit UI if the plugin is installed, active, and connected.
if (
isSureTriggersInstalled &&
isSureTriggersActive &&
isOttokitConnected
) {
return <Ottokit />;
}
// Otherwise, show an EmptyNotifications component with a Connect OttoKit button.
return (
<EmptyNotifications
isSureTriggersInstalled={ isSureTriggersInstalled }
isSureTriggersActive={ isSureTriggersActive }
/>
);
};
// Check if Ottokit is being rendered
const isOttokitRendering =
isSureTriggersInstalled && isSureTriggersActive && isOttokitConnected;
return (
<div className="flex items-start justify-center h-full px-8 py-8 overflow-hidden bg-background-secondary">
<div className="w-full h-auto px-4 py-4 space-y-2 border-0.5 border-solid shadow-sm opacity-100 rounded-xl border-border-subtle bg-background-primary">
{ /* Header */ }
{ isSureTriggersInstalled && isSureTriggersActive && (
<div className="flex items-center justify-between w-full gap-2 px-2 py-2.25">
<Title
title={ __( 'Notifications', 'suremails' ) }
tag="h1"
/>
</div>
) }
{ /* Content Area */ }
<div
className={ `p-2 rounded-lg ${
isOttokitRendering ? 'bg-background-secondary' : ''
}` }
>
<Container className="rounded-lg">
{ renderContent() }
</Container>
</div>
</div>
</div>
);
};
export default memo( Notifications );