← Wszystkie zadaniaReact · Junior

Filtrowanie listy

Napisz komponent FilterList, który dostaje tablicę napisów items. Nad listą jest pole wyszukiwania z etykietą Search.

Lista <ul> pokazuje tylko napisy zawierające wpisany tekst, bez względu na wielkość liter i spacje na końcach zapytania. Jeśli nic nie pasuje, zamiast listy pokaż akapit No results.

Testy (4)

  1. render(<FilterList items={['Apple', 'Banana', 'Cherry']} />);
    expect(screen.getAllByRole('listitem').map((li) => li.textContent)).toEqual(['Apple', 'Banana', 'Cherry']);
  2. render(<FilterList items={['Apple', 'Banana', 'Cherry']} />);
    fireEvent.change(screen.getByLabelText('Search'), { target: { value: 'an' } });
    expect(screen.getAllByRole('listitem').map((li) => li.textContent)).toEqual(['Banana']);
  3. render(<FilterList items={['Apple', 'Banana', 'Cherry']} />);
    fireEvent.change(screen.getByLabelText('Search'), { target: { value: ' AP ' } });
    expect(screen.getAllByRole('listitem').map((li) => li.textContent)).toEqual(['Apple']);
  4. render(<FilterList items={['Apple', 'Banana', 'Cherry']} />);
    fireEvent.change(screen.getByLabelText('Search'), { target: { value: 'xyz' } });
    expect(screen.getByText('No results')).toBeTruthy();
    expect(screen.queryAllByRole('listitem')).toHaveLength(0);