File "PluginSearchBanner.jsx"

Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/extendify/src/Recommendations/components/PluginSearchBanner.jsx
File size: 2.32 KB
MIME-type: text/x-java
Charset: utf-8

import { useEffect } from '@wordpress/element';
import { __, sprintf } from '@wordpress/i18n';
import { safeDecodeURIComponent } from '@wordpress/url';
import { RecommendationsGrid } from '@recommendations/components/RecommendationsGrid';
import {
	selectIsLoading,
	selectIsError,
	selectRecommendations,
} from '@recommendations/selectors/plugin-search';
import { usePluginSearchStore } from '@recommendations/state/plugin-search';
import { recordActivity } from '@recommendations/utils/record-activity';

const showPartnerBranding =
	window.extRecommendationsData?.showPartnerBranding &&
	window.extSharedData?.partnerLogo;

export const PluginSearchBanner = () => {
	const query = usePluginSearchStore((state) => state.query);
	const isLoading = usePluginSearchStore(selectIsLoading);
	const isError = usePluginSearchStore(selectIsError);
	const recommendationsLimit = usePluginSearchStore(
		(state) => state.recommendationsLimit,
	);
	const recommendations = usePluginSearchStore(selectRecommendations);
	const fetchInstalledPlugins = usePluginSearchStore(
		(state) => state.fetchInstalledPlugins,
	);

	useEffect(() => {
		if (!query || isLoading) return;
		recordActivity({ slot: 'plugin-search', event: 'search' });
	}, [query, isLoading]);

	useEffect(() => {
		if (!query) return;
		fetchInstalledPlugins(true);
	}, [query, fetchInstalledPlugins]);

	if (!query || !recommendations?.length || isLoading || isError) {
		return null;
	}

	return (
		<div
			className="my-8 flex w-full flex-col overflow-hidden rounded border border-gray-400 bg-white"
			data-test="extendify-recommendations-banner">
			<div
				className={`flex h-14 border-b border-b-gray-200 ${showPartnerBranding ? 'bg-banner-main' : ''} px-6 py-4`}>
				{showPartnerBranding ? (
					<>
						<img
							className="mr-3 h-full"
							src={window.extSharedData?.partnerLogo}
						/>
						<div className="mr-3 border-l border-banner-text opacity-80" />
					</>
				) : null}
				<h2
					className={`m-0 flex h-full items-center ${showPartnerBranding ? 'text-banner-text' : ''} `}>
					{sprintf(
						// translators: %s: The search query term
						__('Recommended Solutions for: %s', 'extendify-local'),
						safeDecodeURIComponent(query),
					)}
				</h2>
			</div>
			<RecommendationsGrid
				recommendations={recommendations.slice(0, recommendationsLimit)}
			/>
		</div>
	);
};