'use client'; import { useState } from 'react'; import { Register, RegisterAccess, Note } from '@/utils/register_parser'; import { Form, Container, Row, Table, OverlayTrigger, Tooltip } from 'react-bootstrap'; import RegisterDetail from "@/app/registers/RegisterDetail"; interface RegisterBrowserProps { registers: Register[]; } /** * Renders the access details for a register, including its description, operations, and notes. * @param access The register access data to render. * @param extraNotes Non access footnotes to include in the tooltip. * @returns A React component that displays the register access details. */ export function renderAccess(access: RegisterAccess, extraNotes: Note[] = []) { const renderTooltip = (notes: Note[]) => ( {notes.map((note, index) => (
{note.ref} {note.text}
))}
); return ( <> {access.description &&
{access.description}
} {access.operations.length > 0 && {access.operations.map((op, index) => { const access_notes = access.notes.filter(note => note.ref === op.footnoteRef); const extra_notes = extraNotes.filter(note => note.ref === op.footnoteRef); const notes = [...access_notes, ...extra_notes].filter(note => note.text.length > 0); return ( ); })}
Bits Description
{op.bits} {op.description} {op.footnoteRef && notes.length > 0 && ( {op.footnoteRef} )}
} {access.notes.map((note, index) => (

{note.ref} {note.text}

))} ); } /** * A component for browsing and searching through a list of registers. * @param registers An array of Register objects to display. * @returns A React component that allows users to browse and search registers. */ export default function RegisterBrowser({ registers }: RegisterBrowserProps) { const [searchTerm, setSearchTerm] = useState(''); const filteredRegisters = registers.filter(register => register.name.toLowerCase().includes(searchTerm.toLowerCase()) || register.description.toLowerCase().includes(searchTerm.toLowerCase()) ); return ( setSearchTerm(e.target.value)} /> {filteredRegisters.map(register => ( ))} ); }