Files
community-rule/app/components/cards/RuleCard/RuleCard.container.tsx
T
2026-04-18 14:12:49 -06:00

87 lines
2.0 KiB
TypeScript

"use client";
import { memo } from "react";
import { RuleCardView } from "./RuleCard.view";
import type { RuleCardProps } from "./RuleCard.types";
declare global {
interface Window {
gtag?: (
_command: string,
_eventName: string,
_params?: Record<string, unknown>,
) => void;
analytics?: {
track: (_eventName: string, _params?: Record<string, unknown>) => void;
};
}
}
const RuleCardContainer = memo<RuleCardProps>(
({
title,
description,
icon,
backgroundColor = "bg-[var(--color-community-teal-100)]",
className = "",
onClick,
expanded = false,
size: sizeProp,
categories,
logoUrl,
logoAlt,
communityInitials,
}) => {
const size = sizeProp ?? "L";
const handleClick = () => {
// Basic analytics event tracking
if (typeof window !== "undefined" && window.gtag) {
window.gtag("event", "template_selected", {
template_name: title,
template_type: "governance_pattern",
});
}
// Custom analytics event for other tracking systems
if (typeof window !== "undefined" && window.analytics) {
window.analytics.track("Template Selected", {
templateName: title,
templateType: "governance_pattern",
});
}
if (onClick) onClick();
};
const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
if (event.key === "Enter" || event.key === " ") {
event.preventDefault();
handleClick();
}
};
return (
<RuleCardView
title={title}
description={description}
icon={icon}
backgroundColor={backgroundColor}
className={className}
onClick={handleClick}
onKeyDown={handleKeyDown}
expanded={expanded}
size={size}
categories={categories}
logoUrl={logoUrl}
logoAlt={logoAlt}
communityInitials={communityInitials}
/>
);
},
);
RuleCardContainer.displayName = "RuleCard";
export default RuleCardContainer;