/** * SearchMechanismCard Component * * Displays search mechanism detection results from PageAnalysis. * Shows form-based or URL pattern search implementations with selectors. * * Features: * - Conditional rendering based on method type (FORM_SUBMIT or URL_PATTERN) * - Code formatting for selectors * - Method badge display * - Empty state handling * * @layer Presentation */ import * as React from 'react'; import { Search } from 'lucide-react'; import { SearchMechanism, SearchMethod } from '@archer/domain'; import { cn } from '@/lib/utils'; export interface SearchMechanismCardProps { mechanism: SearchMechanism; className?: string; } /** * Simple Badge component for method type display */ const Badge: React.FC<{ children: React.ReactNode; className?: string }> = ({ children, className, }) => { return ( {children} ); }; /** * Code display component for selectors */ const Code: React.FC<{ children: React.ReactNode }> = ({ children }) => { return ( {children} ); }; export const SearchMechanismCard = React.forwardRef( ({ mechanism, className }, ref) => { const isFormSubmit = mechanism.method === SearchMethod.FORM_SUBMIT; const isUrlPattern = mechanism.method === SearchMethod.URL_PATTERN; return (
{/* Header */}
{/* Form Submit Method */} {isFormSubmit && mechanism.formSelector && (
Form: {mechanism.formSelector}
{mechanism.inputSelector && (
Input: {mechanism.inputSelector}
)} {mechanism.submitSelector && (
Submit: {mechanism.submitSelector}
)}
)} {/* URL Pattern Method */} {isUrlPattern && mechanism.urlPattern && (
URL Pattern: {mechanism.urlPattern}
{mechanism.paramName && (
Param Name: {mechanism.paramName}
)}
)} {/* Fallback for unknown method or missing data */} {!isFormSubmit && !isUrlPattern && (
Search mechanism detected but method details are not available.
)}
); } ); SearchMechanismCard.displayName = 'SearchMechanismCard';