Zadanie Rekrutacyjne
Komponent React do wyświetlania zamówień
Opis zadania
Twoim zadaniem jest stworzenie komponentu React, który pobierze dane zamówień z API i wyświetli je w czytelny sposób dla klienta.
1. Endpoint API
Komponent powinien pobierać dane z endpointu:
GET https://cal.piecyk.eu/api/orders/
Endpoint zwraca dane w formacie JSON z następującą strukturą:
{
"orders": [
{
"id": "uuid",
"created_at": "2025-12-12T13:49:18.143141+00:00",
"name": "Imię klienta",
"company": "Nazwa firmy",
"email": "email@example.com",
"price": 142.74,
"quantity": 0,
"completed": false,
"comment": "Komentarz",
"enclosures": [
{
"id": 4291,
"enclosure_name": "OBUDOWA POLIESTER (GRP) - (WYM. ZEW. 120 x 120 x 90)",
"enclosure_code": "HAR-100-100200",
"enclosure_code3": "HTB1P 121209",
"quantity": 1,
"price": 0,
"terminals": [
{
"id": 5482,
"name": "UT 2,5",
"size": "2.5",
"brand": null,
"quantity": 3.0,
"rail_number": 1,
"side": ""
}
],
"glands": [
{
"id": 6611,
"name": "M12 | GHG 960 1955 R0101",
"size": "12",
"material": "polyamide_Ex_i",
"quantity": 1.0,
"side": "down"
}
]
}
],
"enclosures_count": 1
}
],
"pagination": {
"current_page": 1,
"total_pages": 4,
"total_count": 36,
"page_size": 10,
"has_next": true,
"has_previous": false,
"next_page": 2,
"previous_page": null
}
}
2. Wymagania funkcjonalne
Komponent powinien:
- Pobierać dane z API przy pierwszym renderowaniu
- Wyświetlać listę zamówień w czytelny sposób
- Obsługiwać paginację – wyświetlać przyciski “Poprzednia” / “Następna” oraz informacje o aktualnej stronie
-
Wyświetlać szczegóły każdego zamówienia:
- ID zamówienia
- Data utworzenia (sformatowana w czytelny sposób)
- Imię i nazwisko klienta
- Nazwa firmy (jeśli dostępna)
- Cena zamówienia (sformatowana jako waluta PLN)
- Status (zakończone/niezakończone)
- Komentarz (jeśli dostępny)
- Lista obudów z ich szczegółami:
- Nazwa obudowy
- Kod obudowy
- Ilość
- Cena
- Lista terminali (nazwa, rozmiar, marka, ilość, numer szyny, strona)
- Lista dławików (nazwa, rozmiar, materiał, ilość, strona)
- Obsługiwać stany ładowania – wyświetlać spinner podczas pobierania danych
- Obsługiwać błędy – wyświetlać komunikat błędu w przypadku problemów z API
3. Wymagania techniczne
- React (wersja 16.8+ z hooks)
- TypeScript (opcjonalnie, ale zalecane)
- React Bootstrap lub inna biblioteka UI (opcjonalnie)
- Fetch API lub Axios do pobierania danych
- Responsywny design – komponent powinien działać na urządzeniach mobilnych
4. Dodatkowe funkcje (opcjonalne, ale mile widziane)
- Filtrowanie zamówień po statusie (zakończone/niezakończone)
- Sortowanie zamówień (po dacie, cenie)
- Wyszukiwanie zamówień
- Eksport danych do CSV/Excel
- Animacje przejść
- Dark mode
5. Struktura komponentu
Zalecana struktura:
OrderList/ ├── OrderList.tsx # Główny komponent ├── OrderItem.tsx # Komponent pojedynczego zamówienia ├── EnclosureDetails.tsx # Komponent szczegółów obudowy ├── Pagination.tsx # Komponent paginacji └── types.ts # Definicje typów TypeScript (jeśli używany)
6. Przykład użycia
import OrderList from './components/OrderList';
function App() {
return (
<div className="App">
<h1>Lista zamówień</h1>
<OrderList />
</div>
);
}
Kryteria oceny
40% Funkcjonalność
- Czy komponent poprawnie pobiera i wyświetla dane?
- Czy paginacja działa poprawnie?
- Czy wszystkie wymagane informacje są wyświetlane?
30% Jakość kodu
- Czytelność i organizacja kodu
- Użycie best practices React
- Obsługa błędów i edge cases
- TypeScript (jeśli używany)
20% UI/UX
- Estetyka i czytelność interfejsu
- Responsywność
- Użyteczność
10% Dodatkowe funkcje
- Implementacja opcjonalnych funkcji
Dostarczenie rozwiązania
- Stwórz repozytorium Git (GitHub/GitLab/Bitbucket)
- Dodaj plik README.md z instrukcjami uruchomienia
- Dodaj komentarze w kodzie wyjaśniające kluczowe decyzje
- Wyślij link do repozytorium
Czas realizacji
Szacowany czas: 4-6 godzin
Pytania?
W razie pytań lub wątpliwości, skontaktuj się z nami.