- connect_orders.py: add GET /api/connect/orders?status=active|history endpoints - api/client.js: add getIncomingOrders, getActiveOrders, getOrderHistory, acceptOnlineOrder, rejectOnlineOrder, updateOnlineOrderStatus - OnlineOrdersPage.jsx: three-tab page (Incoming / Active / History) with order cards, action buttons (accept/reject/status progression), 20 s polling, SSE listener for online_order_received/updated events, and optimistic UI updates - App.jsx: add /online-orders route - Sidebar.jsx: add Online Orders nav item with red badge showing pending count, polling every 20 s independently of the page Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
import axios from 'axios'
|
|
|
|
const client = axios.create({ baseURL: '' })
|
|
|
|
client.interceptors.request.use(config => {
|
|
const token = localStorage.getItem('manager_token')
|
|
if (token) config.headers.Authorization = `Bearer ${token}`
|
|
return config
|
|
})
|
|
|
|
client.interceptors.response.use(
|
|
res => res,
|
|
err => {
|
|
if (err.response?.status === 401) {
|
|
// On hard 401 (expired/invalid token) force a full logout
|
|
localStorage.removeItem('manager_token')
|
|
localStorage.removeItem('manager_username')
|
|
localStorage.removeItem('manager_lock_timeout')
|
|
window.location.href = '/login'
|
|
}
|
|
return Promise.reject(err)
|
|
}
|
|
)
|
|
|
|
export default client
|
|
|
|
// ── Online Orders (Xenia Connect) ─────────────────────────────────────────────
|
|
|
|
export const getIncomingOrders = () => client.get('/api/connect/orders/incoming')
|
|
export const getActiveOrders = () => client.get('/api/connect/orders?status=active')
|
|
export const getOrderHistory = () => client.get('/api/connect/orders?status=history')
|
|
|
|
export const acceptOnlineOrder = (id) =>
|
|
client.post(`/api/connect/orders/${id}/accept`)
|
|
|
|
export const rejectOnlineOrder = (id, reason) =>
|
|
client.post(`/api/connect/orders/${id}/reject`, { reason })
|
|
|
|
export const updateOnlineOrderStatus = (id, status) =>
|
|
client.post(`/api/connect/orders/${id}/status`, { status })
|