import React from 'react'; import { Typography, Select, Button, Checkbox, Tooltip, Tag } from 'antd'; import { CloseOutlined, EyeInvisibleOutlined, StopOutlined, FilterOutlined } from '@ant-design/icons'; import { PiiEntityCategory } from './types'; const { Text } = Typography; const { Option } = Select; // Helper functions export const formatEntityName = (name: string) => { return name.replace(/_/g, ' '); }; export const getActionIcon = (action: string) => { switch(action) { case 'MASK': return ; case 'BLOCK': return ; default: return null; } }; // CategoryFilter component export interface CategoryFilterProps { categories: PiiEntityCategory[]; selectedCategories: string[]; onChange: (categories: string[]) => void; } export const CategoryFilter: React.FC = ({ categories, selectedCategories, onChange }) => { return ( Filter by category ( {props.label} )} > {categories.map(cat => ( {cat.category} ))} ); }; // QuickActions component export interface QuickActionsProps { onSelectAll: (action: string) => void; onUnselectAll: () => void; hasSelectedEntities: boolean; } export const QuickActions: React.FC = ({ onSelectAll, onUnselectAll, hasSelectedEntities }) => { return ( Quick Actions ⓘ } className="border-gray-300 hover:text-red-600 hover:border-red-300" > Unselect All onSelectAll('MASK')} className="flex items-center justify-center h-10 border-blue-200 hover:border-blue-300 hover:text-blue-700 bg-blue-50 hover:bg-blue-100 text-blue-600" block icon={} > Select All & Mask onSelectAll('BLOCK')} className="flex items-center justify-center h-10 border-red-200 hover:border-red-300 hover:text-red-700 bg-red-50 hover:bg-red-100 text-red-600" block icon={} > Select All & Block ); }; // PiiEntityList component export interface PiiEntityListProps { entities: string[]; selectedEntities: string[]; selectedActions: {[key: string]: string}; actions: string[]; onEntitySelect: (entity: string) => void; onActionSelect: (entity: string, action: string) => void; entityToCategoryMap: Map; } export const PiiEntityList: React.FC = ({ entities, selectedEntities, selectedActions, actions, onEntitySelect, onActionSelect, entityToCategoryMap }) => { return ( PII Type Action {entities.length === 0 ? ( No PII types match your filter criteria ) : ( entities.map(entity => ( onEntitySelect(entity)} className="mr-3" /> {formatEntityName(entity)} {entityToCategoryMap.get(entity) && ( {entityToCategoryMap.get(entity)} )} onActionSelect(entity, value)} style={{ width: 120 }} disabled={!selectedEntities.includes(entity)} className={`${!selectedEntities.includes(entity) ? 'opacity-50' : ''}`} dropdownMatchSelectWidth={false} > {actions.map(action => ( {getActionIcon(action)} {action} ))} )) )} ); };