File size: 5,211 Bytes
1c8e50c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<div align="center">

# Task Management UI

A React web client for the Task Management System microservices stack. It gives administrators and collaborators a clean workspace to manage tasks, review submissions, and collaborate securely.

</div>

## Overview

- **Role-based dashboard** surfaces personalised task feeds and quick admin tools.
- **Task lifecycle management** lets admins create, assign, and complete work with a single click.
- **Submission tracking** provides a central place to review deliverables and status updates.
- **Responsive UI** built with reusable components, modern accessibility patterns, and mobile-friendly layouts.

## Tech Stack

- **Framework:** React 18 (Create React App)
- **Routing:** React Router v6
- **HTTP:** Axios with request interceptors for JWT auth
- **State Management:** React Context + hooks for auth, local component state elsewhere
- **Styling:** Custom CSS modules with design tokens and utility classes
- **Testing:** React Testing Library + Jest (CRA defaults)

## Getting Started

### 1. Install dependencies

```bash
npm install
```

### 2. Configure environment variables

Create a `.env` file from the provided template:

```bash
cp .env.example .env
```

| Variable | Default | Purpose |
| --- | --- | --- |
| `REACT_APP_API_BASE_URL` | `http://localhost:8090` | Base URL for the API Gateway that proxies requests to auth, user, task, and submission services. |

> The UI reads these variables at build time. Restart the dev server after editing `.env`.

### 3. Run locally

```bash
npm start
```

- Opens http://localhost:3000
- Proxies API calls to `REACT_APP_API_BASE_URL`
- Auto-reloads on code changes

### 4. Run tests

```bash
npm test
```

### 5. Build for production

```bash
npm run build
```

Outputs an optimised bundle to `build/` ready for static hosting.

## Project Structure

```
task-management-ui/
β”œβ”€β”€ public/               # Static assets served by CRA
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ Admin/        # Admin-specific panels
β”‚   β”‚   β”œβ”€β”€ Auth/         # Login & registration screens
β”‚   β”‚   β”œβ”€β”€ Layout/       # App-wide layout primitives (AppLayout, Navbar, Dashboard)
β”‚   β”‚   β”œβ”€β”€ Submission/   # Submission list & form
β”‚   β”‚   β”œβ”€β”€ Task/         # Task CRUD and detail components
β”‚   β”‚   └── common/       # Reusable UI primitives (Loader, EmptyState, PageSection)
β”‚   β”œβ”€β”€ context/          # React Context providers (AuthContext)
β”‚   β”œβ”€β”€ hooks/            # Reusable hooks (useAsync, etc.)
β”‚   β”œβ”€β”€ services/         # Axios instance and API helpers
β”‚   β”œβ”€β”€ styles/           # Global theme variables and layout styles
β”‚   β”œβ”€β”€ utils/            # Formatting helpers
β”‚   β”œβ”€β”€ App.js            # Route definitions with protected/public guards
β”‚   β”œβ”€β”€ index.js          # Entry point
β”‚   └── ...
β”œβ”€β”€ .env.example          # Environment variable template
β”œβ”€β”€ package.json
└── README.md
```

## Common Commands

- `npm start` β€” Launch dev server (port 3000)
- `npm test` β€” Run Jest + React Testing Library suite
- `npm run build` β€” Create production build
- `npm run eject` β€” Expose CRA build config (irreversible; avoid unless necessary)

## Error Fix Summary

- **Dependency alignment:** Downgraded React 19 beta packages to stable React 18 + React Router 6 to restore compatibility with `react-scripts`.
- **API resilience:** Centralised Axios base URL via env vars, normalised paths, and hardened interceptor behaviour.
- **Authentication flow:** Refactored context to securely persist JWTs, lazily hydrate the user profile, and gate routes with dedicated public/protected wrappers.
- **UI overhaul:** Replaced inline styles with design tokens, created reusable layout primitives, introduced loaders/empty states, and improved form accessibility (labels, helper text, aria attributes).
- **Admin toolkit:** Streamlined admin panel loading, error handling, and quick task creation workflow.
- **Testing:** Updated default CRA test to target the login view rendered by the new routing guard.

## Troubleshooting

- **API requests return 401/403:** Confirm `REACT_APP_API_BASE_URL` points to the running API gateway and that the JWT returned from `/auth/signin` is valid.
- **CORS errors in development:** Ensure the gateway includes `http://localhost:3000` in its allowed origins or run the UI behind the same domain via reverse proxy.
- **Blank screen after login:** Inspect browser dev tools for network failures. Missing profile endpoint `/api/users/profile` responses will sign the user out to prevent corrupted sessions.
- **npm audit warnings:** `react-scripts` and transitive dependencies may trigger advisories. Mitigate upstream or upgrade to Vite/CRA alternatives if security policies require zero advisories.
- **Styles not updating:** CRA caches `.env` and CSS. Restart `npm start` after editing environment variables or theme tokens.

## Contributing

Please format code with the included ESLint/Prettier rules (CRA defaults) and keep UI primitives in `components/common` to encourage reuse. Submit PRs with screenshots for notable UI changes.