import { VSCodeButton, VSCodeTextField } from "@vscode/webview-ui-toolkit/react" import { useExtensionState } from "../context/ExtensionStateContext" import { vscode } from "../utils/vscode" import { Virtuoso } from "react-virtuoso" import { memo, useMemo, useState } from "react" type HistoryViewProps = { onDone: () => void } const HistoryView = ({ onDone }: HistoryViewProps) => { const { taskHistory } = useExtensionState() const [searchQuery, setSearchQuery] = useState("") const handleHistorySelect = (id: string) => { vscode.postMessage({ type: "showTaskWithId", text: id }) } const handleDeleteHistoryItem = (id: string) => { vscode.postMessage({ type: "deleteTaskWithId", text: id }) } const formatDate = (timestamp: number) => { const date = new Date(timestamp) return date ?.toLocaleString("en-US", { month: "long", day: "numeric", hour: "numeric", minute: "2-digit", hour12: true, }) .replace(", ", " ") .replace(" at", ",") .toUpperCase() } const presentableTasks = useMemo(() => { return taskHistory.filter((item) => item.ts && item.task) }, [taskHistory]) const taskHistorySearchResults = useMemo(() => { return presentableTasks.filter((item) => item.task.toLowerCase().includes(searchQuery.toLowerCase())) }, [presentableTasks, searchQuery]) const highlightText = (text: string, query: string) => { if (!query) return text const parts = text.split(new RegExp(`(${query})`, "gi")) return parts.map((part, index) => part.toLowerCase() === query.toLowerCase() ? ( {part} ) : ( part ) ) } return ( <>