c20d411c7f7c52c81edcfb87a7847a57874ad6bb
Adds the user-facing half of the service ordering workflow on top of the backend foundation merged in Task #62. What's new: - Order button on each available service card (hidden when service is unavailable) opens a focused OrderServiceModal showing only the service name + image with a multi-line notes textarea (500-char cap with live counter). Submitting calls POST /orders, shows a toast, and invalidates the My Orders cache. - New /my-orders page lists the user's own orders newest-first with a status pill, a horizontal 4-step timeline (pending → received → preparing → completed), and a red terminal pill for cancelled orders. - Cancel action with confirm dialog is shown only while the order is pending or received; it calls PATCH /orders/:id/status with cancelled. - "My Orders" link added to the services page header. - Realtime: the existing notifications socket also invalidates the my-orders query on notification_created (when type === 'order') and on a new order_updated event. - Locale keys mirrored in ar.json and en.json for services.order/*, myOrders.*, and orderStatus.*. RTL/LTR handled. - Friendly load-error state with retry, plus client-side sort by createdAt desc. Verification: typecheck clean, all 3 e2e tests pass, manual end-to-end UI flow (place + cancel + locale switch) verified via testing skill, backend smoke test confirmed POST /orders + GET /orders/my wiring.
Description
No description provided
Languages
TypeScript
69.4%
JavaScript
29%
CSS
0.6%
Shell
0.6%
Dockerfile
0.2%
Other
0.2%