tessl install tessl/npm-types--react@19.1.0TypeScript definitions for React, the popular JavaScript library for building user interfaces
Agent Success
Agent success rate when using this tile
80%
Improvement
Agent success rate improvement when using this tile compared to baseline
1.48x
Baseline
Agent success rate without this tile
54%
Build a data table component that displays a list of products with sorting and filtering capabilities.
Create a ProductTable class component that:
Displays product data in a table format with the following columns:
Implements sorting functionality:
Implements filtering functionality:
Optimizes rendering:
Initial data structure:
The component should accept a products prop with the following TypeScript interface:
interface Product {
id: number;
name: string;
category: string;
price: number;
stock: number;
}// File: ProductTable.test.tsx
import { render, screen } from '@testing-library/react';
import ProductTable from './ProductTable';
test('renders product table with data', () => {
const products = [
{ id: 1, name: 'Laptop', category: 'Electronics', price: 999, stock: 5 },
{ id: 2, name: 'Desk', category: 'Furniture', price: 299, stock: 10 },
];
render(<ProductTable products={products} />);
expect(screen.getByText('Laptop')).toBeInTheDocument();
expect(screen.getByText('Desk')).toBeInTheDocument();
expect(screen.getByText('999')).toBeInTheDocument();
expect(screen.getByText('10')).toBeInTheDocument();
});// File: ProductTable.test.tsx
import { render, screen, fireEvent } from '@testing-library/react';
import ProductTable from './ProductTable';
test('sorts products by price when price header is clicked', () => {
const products = [
{ id: 1, name: 'Laptop', category: 'Electronics', price: 999, stock: 5 },
{ id: 2, name: 'Desk', category: 'Furniture', price: 299, stock: 10 },
{ id: 3, name: 'Mouse', category: 'Electronics', price: 29, stock: 50 },
];
render(<ProductTable products={products} />);
const priceHeader = screen.getByText('Price');
fireEvent.click(priceHeader);
const rows = screen.getAllByRole('row');
// First data row should be Mouse (lowest price)
expect(rows[1]).toHaveTextContent('Mouse');
expect(rows[1]).toHaveTextContent('29');
});// File: ProductTable.test.tsx
import { render, screen, fireEvent } from '@testing-library/react';
import ProductTable from './ProductTable';
test('filters products by name', () => {
const products = [
{ id: 1, name: 'Laptop', category: 'Electronics', price: 999, stock: 5 },
{ id: 2, name: 'Desk', category: 'Furniture', price: 299, stock: 10 },
{ id: 3, name: 'Desktop Computer', category: 'Electronics', price: 1299, stock: 3 },
];
render(<ProductTable products={products} />);
const nameFilter = screen.getByPlaceholderText('Filter by name');
fireEvent.change(nameFilter, { target: { value: 'desk' } });
expect(screen.getByText('Desk')).toBeInTheDocument();
expect(screen.getByText('Desktop Computer')).toBeInTheDocument();
expect(screen.queryByText('Laptop')).not.toBeInTheDocument();
});Provides TypeScript type definitions for React, including class component types and lifecycle methods.