From 935cd5b510fe82631bee0a17992b605772e3f341 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Tue, 7 Apr 2026 13:40:50 +0200 Subject: [PATCH] feat: add search functionality to Matrix View --- src/components/MatrixView.tsx | 36 ++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/components/MatrixView.tsx b/src/components/MatrixView.tsx index ebca7c4..358afdb 100644 --- a/src/components/MatrixView.tsx +++ b/src/components/MatrixView.tsx @@ -1,4 +1,5 @@ import React, { useState, useMemo } from 'react'; +import { Search } from 'lucide-react'; import { ExcelRow } from '../types'; interface MatrixViewProps { @@ -9,11 +10,20 @@ interface MatrixViewProps { export function MatrixView({ data, headers }: MatrixViewProps) { const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(25); + const [search, setSearch] = useState(''); + + const filteredData = useMemo(() => { + if (!search) return data; + const s = search.toLowerCase(); + return data.filter(row => + row.some(cell => String(cell || '').toLowerCase().includes(s)) + ); + }, [data, search]); const paginatedData = useMemo(() => { const start = (page - 1) * pageSize; - return data.slice(start, start + pageSize); - }, [data, page, pageSize]); + return filteredData.slice(start, start + pageSize); + }, [filteredData, page, pageSize]); const formatCellValue = (val: any, header: string = '') => { if (val === undefined || val === null || val === '') return ''; @@ -72,13 +82,25 @@ export function MatrixView({ data, headers }: MatrixViewProps) { return val; }; - const totalPages = Math.ceil(data.length / pageSize); + const totalPages = Math.ceil(filteredData.length / pageSize); return (
-
-

Matrix View

-

All data fields formatted to 2 decimal places for numbers/prices.

+
+
+

Matrix View

+

All data fields formatted to 2 decimal places for numbers/prices.

+
+
+ + { setSearch(e.target.value); setPage(1); }} + className="w-full pl-9 pr-4 py-2 bg-slate-900 border border-slate-700 rounded-md text-sm text-white focus:outline-none focus:border-blue-500 focus:ring-1 focus:ring-blue-500 transition-all font-medium" + /> +
@@ -122,7 +144,7 @@ export function MatrixView({ data, headers }: MatrixViewProps) {
- Showing {Math.min((page - 1) * pageSize + 1, data.length)} to {Math.min(page * pageSize, data.length)} of {data.length} entries + Showing {Math.min((page - 1) * pageSize + 1, filteredData.length)} to {Math.min(page * pageSize, filteredData.length)} of {filteredData.length} entries