Merge branch 'develop' of github.com:Tria-plc/edr-platform into feat/customer_registration

This commit is contained in:
yaschalew
2026-05-18 11:25:59 +03:00
17 changed files with 248 additions and 46 deletions

View File

@@ -28,7 +28,7 @@ import TrackingPage from "./pages/tracking/TrackingPage";
import BillingPage from "./pages/billing/BillingPage";
import TrainsPage from "./pages/trains/TrainsPage";
import DashboardPage from "./pages/dashboard/DashboardPage";
import { IamLoginPage } from "@tria-plc/iamui-common";
import { IamLoginPage, LoadingScreen, useAuth } from "@tria-plc/iamui-common";
import CustomersPage from "./pages/customers/CustomersPage";
import CustomerDetailPage from "./pages/customers/CustomerDetailPage";
import NewCustomerPage from "./pages/customers/NewCustomerPage";
@@ -52,8 +52,13 @@ const sidebarItems: SidebarItem[] = [
const App = () => {
const navigate = useNavigate();
const location = useLocation();
const { user, loading } = useAuth();
if (location.pathname === "/auth") {
if (loading) {
return <LoadingScreen />;
}
if (!user) {
return (
<Routes>
<Route path="/auth" element={<IamLoginPage />} />
@@ -62,6 +67,10 @@ const App = () => {
);
}
if (location.pathname === "/auth") {
return <Navigate to="/" replace />;
}
return (
<DashboardLayout
title="EDR Freight"

View File

@@ -10,13 +10,29 @@ import {
BrandingProvider,
configureIam,
UserProvider,
axiosInstance,
} from "@tria-plc/iamui-common";
const queryClient = new QueryClient();
window.__IAM_CONFIG__ = {
apiUrl: `${import.meta.env.VITE_BASE_API_URL}/api`,
postLoginPath: "/user-management",
postLoginPath: "/",
};
// Unwrap the StandardResponse envelope ({ success, data, timestamp }) that the
// freight API's ResponseTransformInterceptor adds to every response, so that
// iamui-common can read response.data.token / response.data fields as expected.
axiosInstance.interceptors.response.use((response) => {
if (
response.data &&
typeof response.data === "object" &&
"success" in response.data &&
"data" in response.data
) {
response.data = response.data.data;
}
return response;
});
window.__USER_MANAGEMENT_BRANDING__ = {
organizationName: "EDR Platform",
appName: "EDR Portal",

View File

@@ -4,6 +4,23 @@ export const api = axios.create({
baseURL: import.meta.env.VITE_API_URL,
});
// TODO: integrate @edr/auth — add a request interceptor here that attaches
// the bearer token from the auth package and a response interceptor that
// triggers a refresh on 401.
api.interceptors.request.use((config) => {
const token = document.cookie
.split("; ")
.find((row) => row.startsWith("auth-token="))
?.split("=")[1];
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
window.location.href = "/auth";
}
return Promise.reject(error);
},
);