diff --git a/media-store/app/src/api/axiosInstance.js b/media-store/app/src/api/axiosInstance.js
index d1fc2f2c..abde261a 100644
--- a/media-store/app/src/api/axiosInstance.js
+++ b/media-store/app/src/api/axiosInstance.js
@@ -16,6 +16,6 @@ const locale = getLocaleFromLS();
changeUserDefaults(user);
changeLocaleDefaults(locale);
-// axiosInstance.interceptors.response.use(null, responseErrorInterceptor);
+axiosInstance.interceptors.response.use(null, responseErrorInterceptor);
export { axiosInstance, changeLocaleDefaults, changeUserDefaults };
diff --git a/media-store/app/src/api/responseErrorInterceptor.js b/media-store/app/src/api/responseErrorInterceptor.js
index ba68c2ab..40824e4d 100644
--- a/media-store/app/src/api/responseErrorInterceptor.js
+++ b/media-store/app/src/api/responseErrorInterceptor.js
@@ -8,8 +8,9 @@ let subscribers = [];
function responseErrorInterceptor(error) {
const originalRequest = error.config;
+ const user = getUserFromLS();
- if (error.response && error.response.status === 401) {
+ if (error.response && error.response.status === 401 && !!user) {
if (originalRequest.url === "users/login") {
return Promise.reject(error);
}
@@ -26,21 +27,18 @@ function responseErrorInterceptor(error) {
if (!isRefreshing) {
isRefreshing = true;
- refreshTokens(getUserFromLS().refreshToken)
+ refreshTokens(user.refreshToken)
.then((response) => {
emitter.emit("UPDATE_USER", response.data);
subscribers.forEach((request) =>
request.resolve(response.data.accessToken)
);
- })
- .catch(() => {
- subscribers.forEach((request) => request.reject(error));
- })
- .finally(() => {
subscribers = [];
isRefreshing = false;
+ })
+ .catch(() => {
+ emitter.emit("UPDATE_USER", undefined);
});
- return;
}
// holding requests which should be sended after users/refreshTokens complete
diff --git a/media-store/app/src/components/CurrentPageHeader.js b/media-store/app/src/components/CurrentPageHeader.js
deleted file mode 100644
index 121987f8..00000000
--- a/media-store/app/src/components/CurrentPageHeader.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from "react";
-import { Breadcrumb, Spin } from "antd";
-import { useLocation } from "react-router-dom";
-import { useAppState } from "../hooks/useAppState";
-
-const names = {
- "/": "Browse / Tracks",
- "/person": "Profile",
- "/login": "Login form",
- "/invoice": "Requested items",
- "/manage": "Manage store",
-};
-
-const CurrentPageHeader = () => {
- const location = useLocation();
- const { loading } = useAppState();
-
- return (
-
-
- {names[location.pathname]}
- {loading && }
-
-
- );
-};
-
-export { CurrentPageHeader };
diff --git a/media-store/app/src/components/Header.js b/media-store/app/src/components/Header.js
index abf7ccc0..266c1daf 100644
--- a/media-store/app/src/components/Header.js
+++ b/media-store/app/src/components/Header.js
@@ -1,10 +1,11 @@
import React from "react";
-import { Menu, Badge } from "antd";
+import { Menu, Badge, Spin } from "antd";
import { isEmpty } from "lodash";
import {
CreditCardOutlined,
LogoutOutlined,
LoginOutlined,
+ LoadingOutlined,
} from "@ant-design/icons";
import { useHistory, useLocation } from "react-router-dom";
import { useAppState } from "../hooks/useAppState";
@@ -12,17 +13,18 @@ import { setLocaleToLS } from "../util/localStorageService";
import { changeLocaleDefaults } from "../api/axiosInstance";
import { emitter } from "../util/EventEmitter";
import "./Header.css";
+import { requireEmployee, requireCustomer } from "../util/constants";
const { SubMenu } = Menu;
-const keys = ["/", "/person", "/login", "/manage", "/invoice"];
+const keys = ["/", "/person", "/login", "/manage", "/invoice", "/invoices"];
const AVAILABLE_LOCALES = ["en", "fr", "de"];
const RELOAD_LOCATION_NUMBER = 0;
const Header = () => {
const history = useHistory();
const location = useLocation();
- const { user, invoicedItems, locale, setLocale } = useAppState();
+ const { user, invoicedItems, locale, setLocale, loading } = useAppState();
const currentKey = [keys.find((key) => key === location.pathname)];
const haveInvoicedItems = !isEmpty(invoicedItems);
const invoicedItemsLength = invoicedItems.length;
@@ -46,7 +48,6 @@ const Header = () => {
const onUserLogout = () => {
emitter.emit("UPDATE_USER", undefined);
-
history.push("/");
};
@@ -54,7 +55,8 @@ const Header = () => {
{
Profile
)}
- {!!user && user.roles.includes("employee") && (
+ {requireCustomer(user) && (
+
history.push("/invoices")}>
+ Invoices
+
+ )}
+ {requireEmployee(user) && (
history.push("/manage")}>
Manage
)}
+
+ {loading && (
+ }
+ />
+ )}
+