diff --git a/.changeset/loose-experts-lead.md b/.changeset/loose-experts-lead.md
new file mode 100644
index 00000000000..8ffadb84c44
--- /dev/null
+++ b/.changeset/loose-experts-lead.md
@@ -0,0 +1,5 @@
+---
+"saleor-dashboard": patch
+---
+
+Fixed code splitting for `auth` and `configuration` chunks. Previously this code was included in the main bundle, skipping dynamic imports. Now it will only load when needed, which should improve performance.
diff --git a/src/attributes/components/AttributeListPage/AttributeListPage.tsx b/src/attributes/components/AttributeListPage/AttributeListPage.tsx
index 0efa64ffd2b..d8b54d73fa2 100644
--- a/src/attributes/components/AttributeListPage/AttributeListPage.tsx
+++ b/src/attributes/components/AttributeListPage/AttributeListPage.tsx
@@ -4,7 +4,7 @@ import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import { BulkDeleteButton } from "@dashboard/components/BulkDeleteButton";
import { DashboardCard } from "@dashboard/components/Card";
import { FilterPresetsSelect } from "@dashboard/components/FilterPresetsSelect";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { AttributeFragment } from "@dashboard/graphql";
import useNavigator from "@dashboard/hooks/useNavigator";
import { sectionNames } from "@dashboard/intl";
diff --git a/src/attributes/components/AttributePage/AttributePage.tsx b/src/attributes/components/AttributePage/AttributePage.tsx
index 8fc306be3d0..17b4eae558d 100644
--- a/src/attributes/components/AttributePage/AttributePage.tsx
+++ b/src/attributes/components/AttributePage/AttributePage.tsx
@@ -12,8 +12,8 @@ import {
ENTITY_TYPES_WITH_TYPES_RESTRICTION,
REFERENCE_ATTRIBUTE_TYPES,
} from "@dashboard/attributes/utils/data";
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import CardSpacer from "@dashboard/components/CardSpacer";
import { ConfirmButtonTransitionState } from "@dashboard/components/ConfirmButton";
diff --git a/src/auth/AuthProvider.tsx b/src/auth/AuthProvider.tsx
index 2cdd1185a83..ef3b188506a 100644
--- a/src/auth/AuthProvider.tsx
+++ b/src/auth/AuthProvider.tsx
@@ -3,8 +3,8 @@ import { useNotifier } from "@dashboard/hooks/useNotifier";
import { PropsWithChildren } from "react";
import { useIntl } from "react-intl";
-import { UserContext } from "./";
import { useAuthProvider } from "./hooks/useAuthProvider";
+import { UserContext } from "./useUser";
const AuthProvider = ({ children }: PropsWithChildren) => {
const apolloClient = useApolloClient();
diff --git a/src/auth/components/Layout.tsx b/src/auth/components/Layout.tsx
index e604b8e5a32..8a771e7aac0 100644
--- a/src/auth/components/Layout.tsx
+++ b/src/auth/components/Layout.tsx
@@ -5,7 +5,7 @@ import { makeStyles, useTheme } from "@saleor/macaw-ui";
import { ReactNode } from "react";
import SVG from "react-inlinesvg";
-import { useUser } from "..";
+import { useUser } from "../useUser";
import LoginLoading from "./LoginLoading";
const useStyles = makeStyles(
diff --git a/src/auth/components/LoginPage/LoginPage.tsx b/src/auth/components/LoginPage/LoginPage.tsx
index 14df8302972..a6231106d3e 100644
--- a/src/auth/components/LoginPage/LoginPage.tsx
+++ b/src/auth/components/LoginPage/LoginPage.tsx
@@ -1,7 +1,7 @@
-import { getExternalAuthenticationMethodName } from "@dashboard/auth";
import { LastLoginMethod } from "@dashboard/auth/hooks/useLastLoginMethod";
import { UserContextError } from "@dashboard/auth/types";
import { passwordResetUrl } from "@dashboard/auth/urls";
+import { getExternalAuthenticationMethodName } from "@dashboard/auth/utils";
import { ButtonWithLoader } from "@dashboard/components/ButtonWithLoader/ButtonWithLoader";
import { FormSpacer } from "@dashboard/components/FormSpacer";
import { AvailableExternalAuthenticationsQuery } from "@dashboard/graphql";
diff --git a/src/auth/components/SectionRoute.tsx b/src/auth/components/SectionRoute.tsx
index 3675ec3d883..0d81b4fdcaa 100644
--- a/src/auth/components/SectionRoute.tsx
+++ b/src/auth/components/SectionRoute.tsx
@@ -3,8 +3,8 @@ import { PermissionEnum } from "@dashboard/graphql";
import { RouteProps } from "react-router-dom";
import NotFound from "../../NotFound";
-import { useUser } from "..";
import { hasAllPermissions, hasAnyPermissions } from "../misc";
+import { useUser } from "../useUser";
type MatchPermissionType = "all" | "any";
diff --git a/src/auth/hooks/useAuthRedirection.ts b/src/auth/hooks/useAuthRedirection.ts
index fdc0554c1f4..f76a79cd1f1 100644
--- a/src/auth/hooks/useAuthRedirection.ts
+++ b/src/auth/hooks/useAuthRedirection.ts
@@ -3,8 +3,8 @@ import { useEffect } from "react";
import urlJoin from "url-join";
import useRouter from "use-react-router";
-import { useUser } from "..";
import { loginCallbackPath } from "../urls";
+import { useUser } from "../useUser";
import { useAuthParameters } from "./useAuthParameters";
const PLUGIN_ID_PARAM = "saleorPluginId";
diff --git a/src/auth/hooks/useUserAccessibleChannels.ts b/src/auth/hooks/useUserAccessibleChannels.ts
index 671e60097c7..6ae4b4bd9f2 100644
--- a/src/auth/hooks/useUserAccessibleChannels.ts
+++ b/src/auth/hooks/useUserAccessibleChannels.ts
@@ -1,4 +1,4 @@
-import { useUser } from "..";
+import { useUser } from "../useUser";
export const useUserAccessibleChannels = () => {
const user = useUser();
diff --git a/src/auth/hooks/useUserPermissions.ts b/src/auth/hooks/useUserPermissions.ts
index 448e8f19654..129b6505046 100644
--- a/src/auth/hooks/useUserPermissions.ts
+++ b/src/auth/hooks/useUserPermissions.ts
@@ -1,3 +1,3 @@
-import { useUser } from "..";
+import { useUser } from "../useUser";
export const useUserPermissions = () => useUser().user?.userPermissions;
diff --git a/src/auth/index.tsx b/src/auth/index.tsx
index f4ff2ffcd61..e662bd13e00 100644
--- a/src/auth/index.tsx
+++ b/src/auth/index.tsx
@@ -1,10 +1,8 @@
import { Route } from "@dashboard/components/Router";
import { parseQs } from "@dashboard/url-utils";
-import { createContext, useContext } from "react";
import { Switch } from "react-router-dom";
import Layout from "./components/Layout";
-import { UserContext as Context } from "./types";
import {
LoginUrlQueryParams,
newPasswordPath,
@@ -23,18 +21,6 @@ const LoginView = () => {
return ;
};
-export const UserContext = createContext({
- login: undefined,
- loginByExternalPlugin: undefined,
- logout: undefined,
- requestLoginByExternalPlugin: undefined,
- authenticating: false,
- isCredentialsLogin: false,
- authenticated: false,
- errors: [],
- refetchUser: undefined,
-});
-
const AuthRouter = () => (
@@ -48,6 +34,3 @@ const AuthRouter = () => (
AuthRouter.displayName = "AuthRouter";
export default AuthRouter;
-
-export * from "./utils";
-export const useUser = () => useContext(UserContext);
diff --git a/src/auth/useUser.ts b/src/auth/useUser.ts
new file mode 100644
index 00000000000..473ca63a8f6
--- /dev/null
+++ b/src/auth/useUser.ts
@@ -0,0 +1,17 @@
+import { createContext, useContext } from "react";
+
+import { UserContext as Context } from "./types";
+
+export const UserContext = createContext({
+ login: undefined,
+ loginByExternalPlugin: undefined,
+ logout: undefined,
+ requestLoginByExternalPlugin: undefined,
+ authenticating: false,
+ isCredentialsLogin: false,
+ authenticated: false,
+ errors: [],
+ refetchUser: undefined,
+});
+
+export const useUser = () => useContext(UserContext);
diff --git a/src/auth/views/Login.tsx b/src/auth/views/Login.tsx
index 4291c2004b2..3c06beb913e 100644
--- a/src/auth/views/Login.tsx
+++ b/src/auth/views/Login.tsx
@@ -5,12 +5,12 @@ import { useEffect } from "react";
import urlJoin from "url-join";
import useRouter from "use-react-router";
-import { useUser } from "..";
import LoginPage from "../components/LoginPage";
import { LoginFormData } from "../components/LoginPage/types";
import { useAuthParameters } from "../hooks/useAuthParameters";
import { useLastLoginMethod } from "../hooks/useLastLoginMethod";
import { loginCallbackPath, LoginUrlQueryParams } from "../urls";
+import { useUser } from "../useUser";
interface LoginViewProps {
params: LoginUrlQueryParams;
diff --git a/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx b/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx
index 6e2bb1a251b..51986e41e70 100644
--- a/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx
+++ b/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx
@@ -1,5 +1,5 @@
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { categoryListPath, categoryUrl } from "@dashboard/categories/urls";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import { CardSpacer } from "@dashboard/components/CardSpacer";
diff --git a/src/channels/pages/ChannelsListPage/ChannelsListPage.tsx b/src/channels/pages/ChannelsListPage/ChannelsListPage.tsx
index 81514d73b4f..e6eb033a7d2 100644
--- a/src/channels/pages/ChannelsListPage/ChannelsListPage.tsx
+++ b/src/channels/pages/ChannelsListPage/ChannelsListPage.tsx
@@ -9,7 +9,7 @@ import { ResponsiveTable } from "@dashboard/components/ResponsiveTable";
import { TableButtonWrapper } from "@dashboard/components/TableButtonWrapper/TableButtonWrapper";
import TableCellHeader from "@dashboard/components/TableCellHeader";
import TableRowLink from "@dashboard/components/TableRowLink";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { ChannelDetailsFragment, RefreshLimitsQuery } from "@dashboard/graphql";
import useNavigator from "@dashboard/hooks/useNavigator";
import { sectionNames } from "@dashboard/intl";
diff --git a/src/channels/views/ChannelCreate/useSaveChannel.test.ts b/src/channels/views/ChannelCreate/useSaveChannel.test.ts
index 944d61dde95..f473ca7eca5 100644
--- a/src/channels/views/ChannelCreate/useSaveChannel.test.ts
+++ b/src/channels/views/ChannelCreate/useSaveChannel.test.ts
@@ -1,11 +1,11 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelWarehouses } from "@dashboard/channels/pages/ChannelDetailsPage/types";
import { ChannelCreateInput } from "@dashboard/graphql";
import { useSaveChannel } from "./useSaveChannel";
jest.mock(
- "@dashboard/auth",
+ "@dashboard/auth/useUser",
jest.fn(() => ({
useUser: jest.fn(),
})),
diff --git a/src/channels/views/ChannelCreate/useSaveChannel.ts b/src/channels/views/ChannelCreate/useSaveChannel.ts
index 4cedbc87e36..b88f056dfa3 100644
--- a/src/channels/views/ChannelCreate/useSaveChannel.ts
+++ b/src/channels/views/ChannelCreate/useSaveChannel.ts
@@ -1,5 +1,5 @@
import { MutationFunction } from "@apollo/client";
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelWarehouses } from "@dashboard/channels/pages/ChannelDetailsPage/types";
import {
ChannelCreateInput,
diff --git a/src/collections/components/CollectionDetailsPage/CollectionDetailsPage.tsx b/src/collections/components/CollectionDetailsPage/CollectionDetailsPage.tsx
index 45e4b155907..148db0f32eb 100644
--- a/src/collections/components/CollectionDetailsPage/CollectionDetailsPage.tsx
+++ b/src/collections/components/CollectionDetailsPage/CollectionDetailsPage.tsx
@@ -1,6 +1,6 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelCollectionData } from "@dashboard/channels/utils";
import { collectionListPath, CollectionUrlQueryParams } from "@dashboard/collections/urls";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
diff --git a/src/components/AccountPermissions/AccountPermissions.tsx b/src/components/AccountPermissions/AccountPermissions.tsx
index 0ad270c422a..52a377a2533 100644
--- a/src/components/AccountPermissions/AccountPermissions.tsx
+++ b/src/components/AccountPermissions/AccountPermissions.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { PermissionData } from "@dashboard/permissionGroups/components/PermissionGroupDetailsPage";
import { Box, Text } from "@saleor/macaw-ui-next";
import { ChangeEvent } from "react";
diff --git a/src/components/AppLayout/AppChannelContext.tsx b/src/components/AppLayout/AppChannelContext.tsx
index 99754df0b79..1b878ab09c3 100644
--- a/src/components/AppLayout/AppChannelContext.tsx
+++ b/src/components/AppLayout/AppChannelContext.tsx
@@ -1,5 +1,5 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelFragment, useBaseChannelsQuery } from "@dashboard/graphql";
import useLocalStorage from "@dashboard/hooks/useLocalStorage";
import { getById } from "@dashboard/misc";
diff --git a/src/components/AppLayout/TopNav/Root.tsx b/src/components/AppLayout/TopNav/Root.tsx
index 952a32bde41..05791b01da2 100644
--- a/src/components/AppLayout/TopNav/Root.tsx
+++ b/src/components/AppLayout/TopNav/Root.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { Box, BoxProps, Text } from "@saleor/macaw-ui-next";
import { PropsWithChildren } from "react";
import * as React from "react";
diff --git a/src/components/Datagrid/persistance/useMetadata.ts b/src/components/Datagrid/persistance/useMetadata.ts
index f7b8478751c..8f35558008c 100644
--- a/src/components/Datagrid/persistance/useMetadata.ts
+++ b/src/components/Datagrid/persistance/useMetadata.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import {
MetadataInput,
MetadataItemFragment,
diff --git a/src/components/Shop/index.tsx b/src/components/Shop/index.tsx
index cdb0d4605b5..43d6316f608 100644
--- a/src/components/Shop/index.tsx
+++ b/src/components/Shop/index.tsx
@@ -3,7 +3,7 @@ import appleTouchIcon from "@assets/favicons/apple-touch-icon.png";
import favicon16 from "@assets/favicons/favicon-16x16.png";
import favicon32 from "@assets/favicons/favicon-32x32.png";
import safariPinnedTab from "@assets/favicons/safari-pinned-tab.svg";
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { ShopInfoQuery, useShopInfoQuery } from "@dashboard/graphql";
import { createContext, ReactNode, useEffect } from "react";
import Helmet from "react-helmet";
diff --git a/src/components/Sidebar/menu/hooks/useMenuStructure.tsx b/src/components/Sidebar/menu/hooks/useMenuStructure.tsx
index ca67d99d317..0949817a871 100644
--- a/src/components/Sidebar/menu/hooks/useMenuStructure.tsx
+++ b/src/components/Sidebar/menu/hooks/useMenuStructure.tsx
@@ -1,8 +1,8 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { categoryListUrl } from "@dashboard/categories/urls";
import { collectionListUrl } from "@dashboard/collections/urls";
import { iconSize } from "@dashboard/components/icons";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { getConfigMenuItemsPermissions } from "@dashboard/configuration/utils";
import { customerListUrl } from "@dashboard/customers/urls";
import { saleListUrl, voucherListUrl } from "@dashboard/discounts/urls";
diff --git a/src/components/Sidebar/user/Controls.tsx b/src/components/Sidebar/user/Controls.tsx
index 3599d831f92..cbdd25d6c7d 100644
--- a/src/components/Sidebar/user/Controls.tsx
+++ b/src/components/Sidebar/user/Controls.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { staffMemberDetailsUrl } from "@dashboard/staff/urls";
import { useTheme } from "@dashboard/theme";
import { useTheme as useLegacyTheme } from "@saleor/macaw-ui";
diff --git a/src/components/Sidebar/user/Info.tsx b/src/components/Sidebar/user/Info.tsx
index 4a82ce05616..a7a5416e6fe 100644
--- a/src/components/Sidebar/user/Info.tsx
+++ b/src/components/Sidebar/user/Info.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { UserAvatar } from "@dashboard/components/UserAvatar";
import { getUserInitials, getUserName } from "@dashboard/misc";
import { Box, Text } from "@saleor/macaw-ui-next";
diff --git a/src/configuration/ConfigurationPage.test.tsx b/src/configuration/ConfigurationPage.test.tsx
index 4e205a78769..56fcdd02baf 100644
--- a/src/configuration/ConfigurationPage.test.tsx
+++ b/src/configuration/ConfigurationPage.test.tsx
@@ -3,7 +3,7 @@ import { render, screen, waitFor } from "@testing-library/react";
import { useIntl } from "react-intl";
import { Link } from "react-router-dom";
-import { useUser } from "../auth";
+import { useUser } from "../auth/useUser";
import { PermissionEnum, UserFragment } from "../graphql";
import { ConfigurationPage } from "./ConfigurationPage";
import { MenuSection } from "./types";
@@ -16,7 +16,7 @@ jest.mock("@dashboard/hooks/useNavigator", () => () => jest.fn());
jest.mock("react-router-dom", () => ({
Link: jest.fn(({ children }) => children),
}));
-jest.mock("@dashboard/auth", () => ({
+jest.mock("@dashboard/auth/useUser", () => ({
useUser: jest.fn(),
}));
jest.mock("./styles", () => ({
diff --git a/src/configuration/createConfigurationMenu.tsx b/src/configuration/createConfigurationMenu.tsx
new file mode 100644
index 00000000000..cbbd017a508
--- /dev/null
+++ b/src/configuration/createConfigurationMenu.tsx
@@ -0,0 +1,192 @@
+// @ts-strict-ignore
+import { attributeListUrl } from "@dashboard/attributes/urls";
+import { channelsListUrl } from "@dashboard/channels/urls";
+import { PermissionEnum } from "@dashboard/graphql";
+import Attributes from "@dashboard/icons/Attributes";
+import Channels from "@dashboard/icons/Channels";
+import PermissionGroups from "@dashboard/icons/PermissionGroups";
+import ProductTypes from "@dashboard/icons/ProductTypes";
+import ShippingMethods from "@dashboard/icons/ShippingMethods";
+import SiteSettings from "@dashboard/icons/SiteSettings";
+import StaffMembers from "@dashboard/icons/StaffMembers";
+import Taxes from "@dashboard/icons/Taxes";
+import Warehouses from "@dashboard/icons/Warehouses";
+import { sectionNames } from "@dashboard/intl";
+import { permissionGroupListUrl } from "@dashboard/permissionGroups/urls";
+import { productTypeListUrl } from "@dashboard/productTypes/urls";
+import { refundsSettingsPath } from "@dashboard/refundsSettings/urls";
+import { shippingZonesListUrl } from "@dashboard/shipping/urls";
+import { siteSettingsUrl } from "@dashboard/siteSettings/urls";
+import { staffListUrl } from "@dashboard/staff/urls";
+import { taxConfigurationListUrl } from "@dashboard/taxes/urls";
+import { warehouseSection } from "@dashboard/warehouses/urls";
+import { CreditCard } from "lucide-react";
+import { IntlShape } from "react-intl";
+
+import { MenuSection } from "./types";
+
+export function createConfigurationMenu(intl: IntlShape): MenuSection[] {
+ return [
+ {
+ label: intl.formatMessage({
+ id: "HP6m+q",
+ defaultMessage: "Attributes and Product Types",
+ }),
+ menuItems: [
+ {
+ description: intl.formatMessage({
+ id: "19/lwV",
+ defaultMessage: "Determine attributes used to create product types",
+ }),
+ icon: ,
+ requireAllPermissions: true,
+ permissions: [
+ PermissionEnum.MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES,
+ PermissionEnum.MANAGE_PAGE_TYPES_AND_ATTRIBUTES,
+ ],
+ title: intl.formatMessage(sectionNames.attributes),
+ url: attributeListUrl(),
+ testId: "configuration-menu-attributes",
+ },
+ {
+ description: intl.formatMessage({
+ id: "n0RwMK",
+ defaultMessage: "Define types of products you sell",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES],
+ title: intl.formatMessage(sectionNames.productTypes),
+ url: productTypeListUrl(),
+ testId: "configuration-menu-product-types",
+ },
+ ],
+ },
+ {
+ label: intl.formatMessage({
+ id: "jFrdB5",
+ defaultMessage: "Product Settings",
+ }),
+ menuItems: [
+ {
+ description: intl.formatMessage({
+ id: "EIULpW",
+ defaultMessage: "Manage how your store charges tax",
+ }),
+ icon: ,
+ title: intl.formatMessage(sectionNames.taxes),
+ url: taxConfigurationListUrl(),
+ testId: "configuration-menu-taxes",
+ },
+ ],
+ },
+ {
+ label: intl.formatMessage({
+ id: "UN+yTt",
+ defaultMessage: "Staff Settings",
+ }),
+ menuItems: [
+ {
+ description: intl.formatMessage({
+ id: "RQUkVW",
+ defaultMessage: "Manage your employees and their permissions",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_STAFF],
+ title: intl.formatMessage(sectionNames.staff),
+ url: staffListUrl(),
+ testId: "configuration-menu-staff",
+ },
+ {
+ description: intl.formatMessage({
+ id: "ivJ1qt",
+ defaultMessage: "Manage your permission groups and their permissions",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_STAFF],
+ title: intl.formatMessage(sectionNames.permissionGroups),
+ url: permissionGroupListUrl(),
+ testId: "configuration-menu-permission-groups",
+ },
+ ],
+ },
+ {
+ label: intl.formatMessage({
+ id: "gTr0qE",
+ defaultMessage: "Shipping Settings",
+ }),
+ menuItems: [
+ {
+ description: intl.formatMessage({
+ id: "zxs6G3",
+ defaultMessage: "Manage how you ship out orders",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_SHIPPING],
+ title: intl.formatMessage(sectionNames.shipping),
+ url: shippingZonesListUrl(),
+ testId: "configurationMenuShipping",
+ },
+ {
+ description: intl.formatMessage({
+ id: "5RmuD+",
+ defaultMessage: "Manage and update your warehouse information",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_PRODUCTS],
+ title: intl.formatMessage(sectionNames.warehouses),
+ url: warehouseSection,
+ testId: "configuration-menu-warehouses",
+ },
+ ],
+ },
+ {
+ label: intl.formatMessage({
+ id: "MWSacl",
+ defaultMessage: "Multichannel",
+ }),
+ menuItems: [
+ {
+ description: intl.formatMessage({
+ id: "8vJCJ4",
+ defaultMessage: "Define and manage your sales channels",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_CHANNELS],
+ title: intl.formatMessage(sectionNames.channels),
+ url: channelsListUrl(),
+ testId: "configuration-menu-channels",
+ },
+ ],
+ },
+ {
+ label: intl.formatMessage({
+ id: "YZl6cv",
+ defaultMessage: "Miscellaneous",
+ }),
+ menuItems: [
+ {
+ description: intl.formatMessage({
+ id: "5BajZK",
+ defaultMessage: "View and update your site settings",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_SETTINGS],
+ title: intl.formatMessage(sectionNames.siteSettings),
+ url: siteSettingsUrl(),
+ testId: "configuration-menu-site-settings",
+ },
+ {
+ description: intl.formatMessage({
+ id: "rUnw7n",
+ defaultMessage: "Configure refunds behavior",
+ }),
+ icon: ,
+ permissions: [PermissionEnum.MANAGE_SETTINGS],
+ title: intl.formatMessage(sectionNames.refundsSettings),
+ url: refundsSettingsPath,
+ testId: "configuration-menu-refunds-settings",
+ },
+ ],
+ },
+ ];
+}
diff --git a/src/configuration/index.tsx b/src/configuration/index.tsx
index 28f44dd12b6..e0ced78bf73 100644
--- a/src/configuration/index.tsx
+++ b/src/configuration/index.tsx
@@ -1,203 +1,14 @@
// @ts-strict-ignore
-import { attributeListUrl } from "@dashboard/attributes/urls";
-import { useUser } from "@dashboard/auth";
-import { channelsListUrl } from "@dashboard/channels/urls";
+import { useUser } from "@dashboard/auth/useUser";
import { WindowTitle } from "@dashboard/components/WindowTitle";
import { APP_VERSION as dashboardVersion } from "@dashboard/config";
-import { PermissionEnum } from "@dashboard/graphql";
import useShop from "@dashboard/hooks/useShop";
-import Attributes from "@dashboard/icons/Attributes";
-import Channels from "@dashboard/icons/Channels";
-import PermissionGroups from "@dashboard/icons/PermissionGroups";
-import ProductTypes from "@dashboard/icons/ProductTypes";
-import ShippingMethods from "@dashboard/icons/ShippingMethods";
-import SiteSettings from "@dashboard/icons/SiteSettings";
-import StaffMembers from "@dashboard/icons/StaffMembers";
-import Taxes from "@dashboard/icons/Taxes";
-import Warehouses from "@dashboard/icons/Warehouses";
import { sectionNames } from "@dashboard/intl";
import { maybe } from "@dashboard/misc";
-import { permissionGroupListUrl } from "@dashboard/permissionGroups/urls";
-import { productTypeListUrl } from "@dashboard/productTypes/urls";
-import { refundsSettingsPath } from "@dashboard/refundsSettings/urls";
-import { shippingZonesListUrl } from "@dashboard/shipping/urls";
-import { siteSettingsUrl } from "@dashboard/siteSettings/urls";
-import { staffListUrl } from "@dashboard/staff/urls";
-import { taxConfigurationListUrl } from "@dashboard/taxes/urls";
-import { warehouseSection } from "@dashboard/warehouses/urls";
-import { CreditCard } from "lucide-react";
-import { IntlShape, useIntl } from "react-intl";
+import { useIntl } from "react-intl";
import { ConfigurationPage } from "./ConfigurationPage";
-import { MenuSection } from "./types";
-
-export function createConfigurationMenu(intl: IntlShape): MenuSection[] {
- return [
- {
- label: intl.formatMessage({
- id: "HP6m+q",
- defaultMessage: "Attributes and Product Types",
- }),
- menuItems: [
- {
- description: intl.formatMessage({
- id: "19/lwV",
- defaultMessage: "Determine attributes used to create product types",
- }),
- icon: ,
- requireAllPermissions: true,
- permissions: [
- PermissionEnum.MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES,
- PermissionEnum.MANAGE_PAGE_TYPES_AND_ATTRIBUTES,
- ],
- title: intl.formatMessage(sectionNames.attributes),
- url: attributeListUrl(),
- testId: "configuration-menu-attributes",
- },
- {
- description: intl.formatMessage({
- id: "n0RwMK",
- defaultMessage: "Define types of products you sell",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES],
- title: intl.formatMessage(sectionNames.productTypes),
- url: productTypeListUrl(),
- testId: "configuration-menu-product-types",
- },
- ],
- },
- {
- label: intl.formatMessage({
- id: "jFrdB5",
- defaultMessage: "Product Settings",
- }),
- menuItems: [
- {
- description: intl.formatMessage({
- id: "EIULpW",
- defaultMessage: "Manage how your store charges tax",
- }),
- icon: ,
- title: intl.formatMessage(sectionNames.taxes),
- url: taxConfigurationListUrl(),
- testId: "configuration-menu-taxes",
- },
- ],
- },
- {
- label: intl.formatMessage({
- id: "UN+yTt",
- defaultMessage: "Staff Settings",
- }),
- menuItems: [
- {
- description: intl.formatMessage({
- id: "RQUkVW",
- defaultMessage: "Manage your employees and their permissions",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_STAFF],
- title: intl.formatMessage(sectionNames.staff),
- url: staffListUrl(),
- testId: "configuration-menu-staff",
- },
- {
- description: intl.formatMessage({
- id: "ivJ1qt",
- defaultMessage: "Manage your permission groups and their permissions",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_STAFF],
- title: intl.formatMessage(sectionNames.permissionGroups),
- url: permissionGroupListUrl(),
- testId: "configuration-menu-permission-groups",
- },
- ],
- },
- {
- label: intl.formatMessage({
- id: "gTr0qE",
- defaultMessage: "Shipping Settings",
- }),
- menuItems: [
- {
- description: intl.formatMessage({
- id: "zxs6G3",
- defaultMessage: "Manage how you ship out orders",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_SHIPPING],
- title: intl.formatMessage(sectionNames.shipping),
- url: shippingZonesListUrl(),
- testId: "configurationMenuShipping",
- },
- {
- description: intl.formatMessage({
- id: "5RmuD+",
- defaultMessage: "Manage and update your warehouse information",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_PRODUCTS],
- title: intl.formatMessage(sectionNames.warehouses),
- url: warehouseSection,
- testId: "configuration-menu-warehouses",
- },
- ],
- },
- {
- label: intl.formatMessage({
- id: "MWSacl",
- defaultMessage: "Multichannel",
- }),
- menuItems: [
- {
- description: intl.formatMessage({
- id: "8vJCJ4",
- defaultMessage: "Define and manage your sales channels",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_CHANNELS],
- title: intl.formatMessage(sectionNames.channels),
- url: channelsListUrl(),
- testId: "configuration-menu-channels",
- },
- ],
- },
- {
- label: intl.formatMessage({
- id: "YZl6cv",
- defaultMessage: "Miscellaneous",
- }),
- menuItems: [
- {
- description: intl.formatMessage({
- id: "5BajZK",
- defaultMessage: "View and update your site settings",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_SETTINGS],
- title: intl.formatMessage(sectionNames.siteSettings),
- url: siteSettingsUrl(),
- testId: "configuration-menu-site-settings",
- },
- {
- description: intl.formatMessage({
- id: "rUnw7n",
- defaultMessage: "Configure refunds behavior",
- }),
- icon: ,
- permissions: [PermissionEnum.MANAGE_SETTINGS],
- title: intl.formatMessage(sectionNames.refundsSettings),
- url: refundsSettingsPath,
- testId: "configuration-menu-refunds-settings",
- },
- ],
- },
- ];
-}
-
-export const configurationMenuUrl = "/configuration/";
+import { createConfigurationMenu } from "./createConfigurationMenu";
const ConfigurationSection = () => {
const shop = useShop();
diff --git a/src/configuration/urls.ts b/src/configuration/urls.ts
new file mode 100644
index 00000000000..9846764b2bc
--- /dev/null
+++ b/src/configuration/urls.ts
@@ -0,0 +1 @@
+export const configurationMenuUrl = "/configuration/";
diff --git a/src/configuration/utils.ts b/src/configuration/utils.ts
index 5abc9a24000..d90c1a7ce7e 100644
--- a/src/configuration/utils.ts
+++ b/src/configuration/utils.ts
@@ -3,7 +3,7 @@ import { hasAllPermissions, hasAnyPermissions } from "@dashboard/auth/misc";
import { PermissionEnum, UserFragment } from "@dashboard/graphql";
import { IntlShape } from "react-intl";
-import { createConfigurationMenu } from ".";
+import { createConfigurationMenu } from "./createConfigurationMenu";
import { MenuItem } from "./types";
export const getConfigMenuItemsPermissions = (intl: IntlShape): PermissionEnum[] =>
diff --git a/src/discounts/components/VoucherDetailsPage/VoucherDetailsPage.tsx b/src/discounts/components/VoucherDetailsPage/VoucherDetailsPage.tsx
index 61c0a5dd4ad..bf35240bf28 100644
--- a/src/discounts/components/VoucherDetailsPage/VoucherDetailsPage.tsx
+++ b/src/discounts/components/VoucherDetailsPage/VoucherDetailsPage.tsx
@@ -1,6 +1,6 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelVoucherData } from "@dashboard/channels/utils";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import CardSpacer from "@dashboard/components/CardSpacer";
diff --git a/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.test.ts b/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.test.ts
index 1faf6c6cc98..52ae662db95 100644
--- a/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.test.ts
+++ b/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.test.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { useUserAccountUpdateMutation } from "@dashboard/graphql";
import { renderHook } from "@testing-library/react-hooks";
@@ -7,7 +7,7 @@ import {
useSidebarWebhookAlertMetadata,
} from "./useSidebarWebhookAlertMetadata";
-jest.mock("@dashboard/auth", () => ({
+jest.mock("@dashboard/auth/useUser", () => ({
useUser: jest.fn().mockReturnValue({ user: null }),
}));
diff --git a/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.ts b/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.ts
index d1551d8bace..2cb8086c24b 100644
--- a/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.ts
+++ b/src/extensions/components/AppAlerts/useSidebarWebhookAlertMetadata.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { MetadataInput, useUserAccountUpdateMutation } from "@dashboard/graphql";
import { useMemo } from "react";
diff --git a/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.test.ts b/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.test.ts
index 52c5f9f0b52..58db3c6af4d 100644
--- a/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.test.ts
+++ b/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.test.ts
@@ -1,12 +1,12 @@
-import { useUser } from "@dashboard/auth";
import { UserContext } from "@dashboard/auth/types";
+import { useUser } from "@dashboard/auth/useUser";
import { PermissionEnum, PermissionFragment, UserFragment } from "@dashboard/graphql";
import useShop from "@dashboard/hooks/useShop";
import { renderHook } from "@testing-library/react-hooks";
import { useUserAppCreationPermissions } from "./useUserAppCreationPermissions";
-jest.mock("@dashboard/auth");
+jest.mock("@dashboard/auth/useUser");
jest.mock("@dashboard/hooks/useShop");
const mockUseUser = useUser as jest.MockedFunction;
diff --git a/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.ts b/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.ts
index fac0262e0e6..6580dcd66a8 100644
--- a/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.ts
+++ b/src/extensions/views/AddCustomExtension/hooks/useUserAppCreationPermissions.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import useShop from "@dashboard/hooks/useShop";
import difference from "lodash/difference";
diff --git a/src/extensions/views/AddCustomExtension/hooks/useUserPermissionMap.ts b/src/extensions/views/AddCustomExtension/hooks/useUserPermissionMap.ts
index 6a851747569..24255e15823 100644
--- a/src/extensions/views/AddCustomExtension/hooks/useUserPermissionMap.ts
+++ b/src/extensions/views/AddCustomExtension/hooks/useUserPermissionMap.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { useMemo } from "react";
export const useUserPermissionSet = () => {
diff --git a/src/featureFlags/FeatureFlagsProvider.tsx b/src/featureFlags/FeatureFlagsProvider.tsx
index 578f0fce17d..9bebd3c43cc 100644
--- a/src/featureFlags/FeatureFlagsProvider.tsx
+++ b/src/featureFlags/FeatureFlagsProvider.tsx
@@ -1,5 +1,5 @@
-import { useUser } from "@dashboard/auth";
import LoginLoading from "@dashboard/auth/components/LoginLoading/LoginLoading";
+import { useUser } from "@dashboard/auth/useUser";
import { ReactNode, useEffect, useState } from "react";
import { FlagList } from "./availableFlags";
diff --git a/src/hooks/makeMutation.ts b/src/hooks/makeMutation.ts
index bc96acd4438..f07291f0f6f 100644
--- a/src/hooks/makeMutation.ts
+++ b/src/hooks/makeMutation.ts
@@ -6,8 +6,9 @@ import {
MutationResult,
useMutation as useBaseMutation,
} from "@apollo/client";
-import { handleNestedMutationErrors, showAllErrors, useUser } from "@dashboard/auth";
import { isJwtError } from "@dashboard/auth/errors";
+import { useUser } from "@dashboard/auth/useUser";
+import { handleNestedMutationErrors, showAllErrors } from "@dashboard/auth/utils";
import { commonMessages } from "@dashboard/intl";
import { getMutationStatus } from "@dashboard/misc";
import { MutationResultAdditionalProps } from "@dashboard/types";
diff --git a/src/hooks/makeQuery.ts b/src/hooks/makeQuery.ts
index 629bf40ee3c..d2672b0125c 100644
--- a/src/hooks/makeQuery.ts
+++ b/src/hooks/makeQuery.ts
@@ -8,7 +8,8 @@ import {
QueryResult,
useQuery as useBaseQuery,
} from "@apollo/client";
-import { handleQueryAuthError, useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
+import { handleQueryAuthError } from "@dashboard/auth/utils";
import { PrefixedPermissions } from "@dashboard/graphql/extendedTypes";
import { PermissionEnum, UserPermissionFragment } from "@dashboard/graphql/types.generated";
import { RequireAtLeastOne } from "@dashboard/misc";
diff --git a/src/modeling/components/PageDetailsPage/PageDetailsPage.tsx b/src/modeling/components/PageDetailsPage/PageDetailsPage.tsx
index 6231f5043af..05c96445a1b 100644
--- a/src/modeling/components/PageDetailsPage/PageDetailsPage.tsx
+++ b/src/modeling/components/PageDetailsPage/PageDetailsPage.tsx
@@ -3,8 +3,8 @@ import {
getReferenceAttributeEntityTypeFromAttribute,
handleContainerReferenceAssignment,
} from "@dashboard/attributes/utils/data";
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import AssignAttributeValueDialog from "@dashboard/components/AssignAttributeValueDialog";
import { AttributeInput, Attributes } from "@dashboard/components/Attributes";
diff --git a/src/orders/components/OrderSendRefundPage/components/useOrderSendRefund.test.ts b/src/orders/components/OrderSendRefundPage/components/useOrderSendRefund.test.ts
index 8997b778bec..ef759dc711d 100644
--- a/src/orders/components/OrderSendRefundPage/components/useOrderSendRefund.test.ts
+++ b/src/orders/components/OrderSendRefundPage/components/useOrderSendRefund.test.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import {
OrderDetailsWithMetadataDocument,
PermissionEnum,
@@ -10,7 +10,7 @@ import { useOrderSendRefund } from "./useOrderSendRefund";
const mockSendRefund = jest.fn();
-jest.mock("@dashboard/auth");
+jest.mock("@dashboard/auth/useUser");
jest.mock("@dashboard/graphql");
describe("useOrderSendRefund", () => {
diff --git a/src/orders/hooks/useHasManageProductsPermission.ts b/src/orders/hooks/useHasManageProductsPermission.ts
index cf8264c7450..2dc45fa711c 100644
--- a/src/orders/hooks/useHasManageProductsPermission.ts
+++ b/src/orders/hooks/useHasManageProductsPermission.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { hasPermissions } from "@dashboard/components/RequirePermissions";
import { PermissionEnum } from "@dashboard/graphql";
diff --git a/src/orders/views/OrderDetails/OrderDetailsMessages.tsx b/src/orders/views/OrderDetails/OrderDetailsMessages.tsx
index 943862626cb..8e68939c1b6 100644
--- a/src/orders/views/OrderDetails/OrderDetailsMessages.tsx
+++ b/src/orders/views/OrderDetails/OrderDetailsMessages.tsx
@@ -1,5 +1,5 @@
// @ts-strict-ignore
-import { handleNestedMutationErrors } from "@dashboard/auth";
+import { handleNestedMutationErrors } from "@dashboard/auth/utils";
import { formatMoney } from "@dashboard/components/Money";
import messages from "@dashboard/containers/BackgroundTasks/messages";
import {
diff --git a/src/orders/views/OrderDetails/useOrderDetails.test.ts b/src/orders/views/OrderDetails/useOrderDetails.test.ts
index c7c79cea5c6..18285784054 100644
--- a/src/orders/views/OrderDetails/useOrderDetails.test.ts
+++ b/src/orders/views/OrderDetails/useOrderDetails.test.ts
@@ -1,10 +1,10 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { PermissionEnum, useOrderDetailsWithMetadataQuery } from "@dashboard/graphql";
import { renderHook } from "@testing-library/react-hooks";
import { useOrderDetails } from "./useOrderDetails";
-jest.mock("@dashboard/auth");
+jest.mock("@dashboard/auth/useUser");
jest.mock("@dashboard/graphql");
describe("useOrderDetails", () => {
diff --git a/src/orders/views/OrderDraftList/OrderDraftList.tsx b/src/orders/views/OrderDraftList/OrderDraftList.tsx
index 3d28992dd77..410e04c2de7 100644
--- a/src/orders/views/OrderDraftList/OrderDraftList.tsx
+++ b/src/orders/views/OrderDraftList/OrderDraftList.tsx
@@ -1,5 +1,5 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import ChannelPickerDialog from "@dashboard/channels/components/ChannelPickerDialog";
import ActionDialog from "@dashboard/components/ActionDialog";
import useAppChannel from "@dashboard/components/AppLayout/AppChannelContext";
diff --git a/src/orders/views/OrderFulfill/OrderFulfill.tsx b/src/orders/views/OrderFulfill/OrderFulfill.tsx
index 6bfaf5331fd..725e5033698 100644
--- a/src/orders/views/OrderFulfill/OrderFulfill.tsx
+++ b/src/orders/views/OrderFulfill/OrderFulfill.tsx
@@ -1,5 +1,5 @@
// @ts-strict-ignore
-import { handleNestedMutationErrors } from "@dashboard/auth";
+import { handleNestedMutationErrors } from "@dashboard/auth/utils";
import { WindowTitle } from "@dashboard/components/WindowTitle";
import {
useFulfillOrderMutation,
diff --git a/src/orders/views/OrderList/OrderList.tsx b/src/orders/views/OrderList/OrderList.tsx
index 8da6cd18fab..e38be2254b1 100644
--- a/src/orders/views/OrderList/OrderList.tsx
+++ b/src/orders/views/OrderList/OrderList.tsx
@@ -1,5 +1,5 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import ChannelPickerDialog from "@dashboard/channels/components/ChannelPickerDialog";
import useAppChannel from "@dashboard/components/AppLayout/AppChannelContext";
import { useConditionalFilterContext } from "@dashboard/components/ConditionalFilter";
diff --git a/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx b/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx
index d5f2b733363..15a1465243c 100644
--- a/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx
+++ b/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import AccountPermissions from "@dashboard/components/AccountPermissions";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import { ChannelPermission } from "@dashboard/components/ChannelPermission";
diff --git a/src/permissionGroups/components/PermissionGroupListPage/PermissionGroupListPage.tsx b/src/permissionGroups/components/PermissionGroupListPage/PermissionGroupListPage.tsx
index dfb97c0152a..052513bb90e 100644
--- a/src/permissionGroups/components/PermissionGroupListPage/PermissionGroupListPage.tsx
+++ b/src/permissionGroups/components/PermissionGroupListPage/PermissionGroupListPage.tsx
@@ -1,7 +1,7 @@
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import { DashboardCard } from "@dashboard/components/Card";
import { ListPageLayout } from "@dashboard/components/Layouts";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { PermissionGroupFragment } from "@dashboard/graphql";
import useNavigator from "@dashboard/hooks/useNavigator";
import { sectionNames } from "@dashboard/intl";
diff --git a/src/permissionGroups/views/PermissionGroupCreate/PermissionGroupCreate.tsx b/src/permissionGroups/views/PermissionGroupCreate/PermissionGroupCreate.tsx
index 43a68b456d0..86b13932976 100644
--- a/src/permissionGroups/views/PermissionGroupCreate/PermissionGroupCreate.tsx
+++ b/src/permissionGroups/views/PermissionGroupCreate/PermissionGroupCreate.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import useAppChannel from "@dashboard/components/AppLayout/AppChannelContext";
import { WindowTitle } from "@dashboard/components/WindowTitle";
import { usePermissionGroupCreateMutation } from "@dashboard/graphql";
diff --git a/src/permissionGroups/views/PermissionGroupDetails/PermissionGroupDetails.tsx b/src/permissionGroups/views/PermissionGroupDetails/PermissionGroupDetails.tsx
index b5b28c9ac52..aad021ee880 100644
--- a/src/permissionGroups/views/PermissionGroupDetails/PermissionGroupDetails.tsx
+++ b/src/permissionGroups/views/PermissionGroupDetails/PermissionGroupDetails.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import useAppChannel from "@dashboard/components/AppLayout/AppChannelContext";
import { Button } from "@dashboard/components/Button";
import { DEFAULT_INITIAL_SEARCH_DATA } from "@dashboard/config";
diff --git a/src/productTypes/components/ProductTypeListPage/ProductTypeListPage.tsx b/src/productTypes/components/ProductTypeListPage/ProductTypeListPage.tsx
index 9718272746d..d83eace2cba 100644
--- a/src/productTypes/components/ProductTypeListPage/ProductTypeListPage.tsx
+++ b/src/productTypes/components/ProductTypeListPage/ProductTypeListPage.tsx
@@ -3,7 +3,7 @@ import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import { DashboardCard } from "@dashboard/components/Card";
import { FilterPresetsSelect } from "@dashboard/components/FilterPresetsSelect";
import { ListPageLayout } from "@dashboard/components/Layouts";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { ProductTypeFragment } from "@dashboard/graphql";
import useNavigator from "@dashboard/hooks/useNavigator";
import { sectionNames } from "@dashboard/intl";
diff --git a/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx b/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx
index 2e98d1a8d31..ac833cde00b 100644
--- a/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx
+++ b/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx
@@ -3,8 +3,8 @@ import {
getReferenceAttributeEntityTypeFromAttribute,
handleMetadataReferenceAssignment,
} from "@dashboard/attributes/utils/data";
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelData } from "@dashboard/channels/utils";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import AssignAttributeValueDialog from "@dashboard/components/AssignAttributeValueDialog";
diff --git a/src/products/components/ProductVariantPage/ProductVariantPage.tsx b/src/products/components/ProductVariantPage/ProductVariantPage.tsx
index 1c5f6709d01..8c3b782d028 100644
--- a/src/products/components/ProductVariantPage/ProductVariantPage.tsx
+++ b/src/products/components/ProductVariantPage/ProductVariantPage.tsx
@@ -4,8 +4,8 @@ import {
getReferenceAttributeEntityTypeFromAttribute,
handleContainerReferenceAssignment,
} from "@dashboard/attributes/utils/data";
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { ChannelPriceData } from "@dashboard/channels/utils";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import AssignAttributeValueDialog from "@dashboard/components/AssignAttributeValueDialog";
diff --git a/src/refundsSettings/components/RefundsSettingsPage/RefundsSettingsPage.tsx b/src/refundsSettings/components/RefundsSettingsPage/RefundsSettingsPage.tsx
index ffd9e364b9d..83cfe82a9e1 100644
--- a/src/refundsSettings/components/RefundsSettingsPage/RefundsSettingsPage.tsx
+++ b/src/refundsSettings/components/RefundsSettingsPage/RefundsSettingsPage.tsx
@@ -3,7 +3,7 @@ import { DetailPageLayout } from "@dashboard/components/Layouts";
import Link from "@dashboard/components/Link";
import PageSectionHeader from "@dashboard/components/PageSectionHeader";
import { Savebar } from "@dashboard/components/Savebar";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import {
useModelsOfTypeQuery,
useModelTypesQuery,
diff --git a/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx b/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx
index eb1c0ee80b0..f66028bf44e 100644
--- a/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx
+++ b/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx
@@ -1,6 +1,6 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import CardSpacer from "@dashboard/components/CardSpacer";
import { ConfirmButtonTransitionState } from "@dashboard/components/ConfirmButton";
diff --git a/src/shipping/components/ShippingZonesListPage/ShippingZonesListPage.tsx b/src/shipping/components/ShippingZonesListPage/ShippingZonesListPage.tsx
index 5481fec0467..1428b98576a 100644
--- a/src/shipping/components/ShippingZonesListPage/ShippingZonesListPage.tsx
+++ b/src/shipping/components/ShippingZonesListPage/ShippingZonesListPage.tsx
@@ -2,7 +2,7 @@ import SearchInput from "@dashboard/components/AppLayout/ListFilters/components/
import { TopNav } from "@dashboard/components/AppLayout/TopNav";
import { BulkDeleteButton } from "@dashboard/components/BulkDeleteButton";
import RequirePermissions from "@dashboard/components/RequirePermissions";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { PermissionEnum, ShippingZoneFragment, WeightUnitsEnum } from "@dashboard/graphql";
import { SubmitPromise } from "@dashboard/hooks/useForm";
import useNavigator from "@dashboard/hooks/useNavigator";
diff --git a/src/shipping/views/ShippingZonesList.tsx b/src/shipping/views/ShippingZonesList.tsx
index 29a90acbe69..68bc04a0561 100644
--- a/src/shipping/views/ShippingZonesList.tsx
+++ b/src/shipping/views/ShippingZonesList.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import ActionDialog from "@dashboard/components/ActionDialog";
import {
useBulkDeleteShippingZoneMutation,
diff --git a/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx b/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx
index bccaf7353c8..19e188aac49 100644
--- a/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx
+++ b/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx
@@ -8,7 +8,7 @@ import Form from "@dashboard/components/Form";
import { DetailPageLayout } from "@dashboard/components/Layouts";
import PageSectionHeader from "@dashboard/components/PageSectionHeader";
import { Savebar } from "@dashboard/components/Savebar";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { ShopErrorFragment, SiteSettingsQuery } from "@dashboard/graphql";
import useAddressValidation from "@dashboard/hooks/useAddressValidation";
import { SubmitPromise } from "@dashboard/hooks/useForm";
diff --git a/src/staff/components/StaffListPage/StaffListPage.tsx b/src/staff/components/StaffListPage/StaffListPage.tsx
index 0a227f7eea9..1fc0f21956e 100644
--- a/src/staff/components/StaffListPage/StaffListPage.tsx
+++ b/src/staff/components/StaffListPage/StaffListPage.tsx
@@ -5,7 +5,7 @@ import { DashboardCard } from "@dashboard/components/Card";
import { FilterPresetsSelect } from "@dashboard/components/FilterPresetsSelect";
import { ListPageLayout } from "@dashboard/components/Layouts";
import LimitReachedAlert from "@dashboard/components/LimitReachedAlert";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { RefreshLimitsQuery } from "@dashboard/graphql";
import { sectionNames } from "@dashboard/intl";
import { StaffMembers } from "@dashboard/staff/types";
diff --git a/src/staff/views/StaffDetails.tsx b/src/staff/views/StaffDetails.tsx
index 8c8ff44e949..be960219e12 100644
--- a/src/staff/views/StaffDetails.tsx
+++ b/src/staff/views/StaffDetails.tsx
@@ -1,5 +1,5 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import ActionDialog from "@dashboard/components/ActionDialog";
import NotFoundPage from "@dashboard/components/NotFoundPage";
import { hasPermissions } from "@dashboard/components/RequirePermissions";
diff --git a/src/structures/views/MenuDetails/index.tsx b/src/structures/views/MenuDetails/index.tsx
index 9e45db192bf..23a4ecdea69 100644
--- a/src/structures/views/MenuDetails/index.tsx
+++ b/src/structures/views/MenuDetails/index.tsx
@@ -1,6 +1,6 @@
// @ts-strict-ignore
-import { useUser } from "@dashboard/auth";
import { hasPermission } from "@dashboard/auth/misc";
+import { useUser } from "@dashboard/auth/useUser";
import ActionDialog from "@dashboard/components/ActionDialog";
import {
PermissionEnum,
diff --git a/src/taxes/pages/TaxChannelsPage/TaxChannelsPage.tsx b/src/taxes/pages/TaxChannelsPage/TaxChannelsPage.tsx
index 37402de234a..2f7062e99b5 100644
--- a/src/taxes/pages/TaxChannelsPage/TaxChannelsPage.tsx
+++ b/src/taxes/pages/TaxChannelsPage/TaxChannelsPage.tsx
@@ -7,7 +7,7 @@ import Grid from "@dashboard/components/Grid";
import { DetailPageLayout } from "@dashboard/components/Layouts";
import { Savebar } from "@dashboard/components/Savebar";
import VerticalSpacer from "@dashboard/components/VerticalSpacer";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import {
CountryCode,
CountryFragment,
diff --git a/src/taxes/pages/TaxClassesPage/TaxClassesPage.tsx b/src/taxes/pages/TaxClassesPage/TaxClassesPage.tsx
index 2e3f08a5abf..e49b93bc94a 100644
--- a/src/taxes/pages/TaxClassesPage/TaxClassesPage.tsx
+++ b/src/taxes/pages/TaxClassesPage/TaxClassesPage.tsx
@@ -9,7 +9,7 @@ import { Savebar } from "@dashboard/components/Savebar";
import { TablePagination } from "@dashboard/components/TablePagination";
import TableRowLink from "@dashboard/components/TableRowLink";
import VerticalSpacer from "@dashboard/components/VerticalSpacer";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { TaxClassFragment } from "@dashboard/graphql";
import { useClientPagination } from "@dashboard/hooks/useClientPagination/useClientPagination";
import { SubmitPromise } from "@dashboard/hooks/useForm";
diff --git a/src/taxes/pages/TaxCountriesPage/TaxCountriesPage.tsx b/src/taxes/pages/TaxCountriesPage/TaxCountriesPage.tsx
index 3e3e8992ee4..53e956df6de 100644
--- a/src/taxes/pages/TaxCountriesPage/TaxCountriesPage.tsx
+++ b/src/taxes/pages/TaxCountriesPage/TaxCountriesPage.tsx
@@ -8,7 +8,7 @@ import { ResponsiveTable } from "@dashboard/components/ResponsiveTable";
import { Savebar } from "@dashboard/components/Savebar";
import TableRowLink from "@dashboard/components/TableRowLink";
import VerticalSpacer from "@dashboard/components/VerticalSpacer";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import {
CountryCode,
TaxClassRateInput,
diff --git a/src/utils/permissions.ts b/src/utils/permissions.ts
index 43c24cd6cf8..e9c51c7481e 100644
--- a/src/utils/permissions.ts
+++ b/src/utils/permissions.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { PermissionEnum } from "@dashboard/graphql";
import { useMemo } from "react";
diff --git a/src/warehouses/components/WarehouseListPage/WarehouseListPage.tsx b/src/warehouses/components/WarehouseListPage/WarehouseListPage.tsx
index 9b5e659ecd3..8f306cff00c 100644
--- a/src/warehouses/components/WarehouseListPage/WarehouseListPage.tsx
+++ b/src/warehouses/components/WarehouseListPage/WarehouseListPage.tsx
@@ -3,7 +3,7 @@ import { DashboardCard } from "@dashboard/components/Card";
import { FilterPresetsSelect } from "@dashboard/components/FilterPresetsSelect";
import { ListPageLayout } from "@dashboard/components/Layouts";
import LimitReachedAlert from "@dashboard/components/LimitReachedAlert";
-import { configurationMenuUrl } from "@dashboard/configuration";
+import { configurationMenuUrl } from "@dashboard/configuration/urls";
import { RefreshLimitsQuery, WarehouseWithShippingFragment } from "@dashboard/graphql";
import useNavigator from "@dashboard/hooks/useNavigator";
import { sectionNames } from "@dashboard/intl";
diff --git a/src/welcomePage/WelcomePage.tsx b/src/welcomePage/WelcomePage.tsx
index 0271b55d5fd..4667dc164f7 100644
--- a/src/welcomePage/WelcomePage.tsx
+++ b/src/welcomePage/WelcomePage.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import useAppChannel from "@dashboard/components/AppLayout/AppChannelContext";
import { hasPermissions } from "@dashboard/components/RequirePermissions";
import { PermissionEnum } from "@dashboard/graphql";
diff --git a/src/welcomePage/WelcomePageOnboarding/WelcomePageOnboarding.test.tsx b/src/welcomePage/WelcomePageOnboarding/WelcomePageOnboarding.test.tsx
index 0db795c9e92..29fa90559f4 100644
--- a/src/welcomePage/WelcomePageOnboarding/WelcomePageOnboarding.test.tsx
+++ b/src/welcomePage/WelcomePageOnboarding/WelcomePageOnboarding.test.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { useFlag } from "@dashboard/featureFlags";
import { ApolloMockedProvider } from "@test/ApolloMockedProvider";
import { render, screen, waitFor } from "@testing-library/react";
@@ -15,7 +15,7 @@ jest.mock("@dashboard/components/Router/useRouteChange", () => ({
register: jest.fn(),
}),
}));
-jest.mock("@dashboard/auth");
+jest.mock("@dashboard/auth/useUser");
jest.mock("@dashboard/featureFlags", () => ({
useFlag: jest.fn().mockReturnValue({
enabled: false,
diff --git a/src/welcomePage/WelcomePageOnboarding/components/WelcomePageCreateProductButton.tsx b/src/welcomePage/WelcomePageOnboarding/components/WelcomePageCreateProductButton.tsx
index 0aed5e12502..1b8f60704c8 100644
--- a/src/welcomePage/WelcomePageOnboarding/components/WelcomePageCreateProductButton.tsx
+++ b/src/welcomePage/WelcomePageOnboarding/components/WelcomePageCreateProductButton.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { hasPermissions } from "@dashboard/components/RequirePermissions";
import { PermissionEnum } from "@dashboard/graphql";
import { productListUrl } from "@dashboard/products/urls";
diff --git a/src/welcomePage/WelcomePageOnboarding/components/WelcomePageInviteStaffButton.tsx b/src/welcomePage/WelcomePageOnboarding/components/WelcomePageInviteStaffButton.tsx
index 07ec0686c10..c6c7ee8e9ec 100644
--- a/src/welcomePage/WelcomePageOnboarding/components/WelcomePageInviteStaffButton.tsx
+++ b/src/welcomePage/WelcomePageOnboarding/components/WelcomePageInviteStaffButton.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { hasPermissions } from "@dashboard/components/RequirePermissions";
import { PermissionEnum } from "@dashboard/graphql";
import { staffListUrl } from "@dashboard/staff/urls";
diff --git a/src/welcomePage/WelcomePageOnboarding/components/WelcomePageOrdersButton.tsx b/src/welcomePage/WelcomePageOnboarding/components/WelcomePageOrdersButton.tsx
index 5812f60b595..9e34c31254f 100644
--- a/src/welcomePage/WelcomePageOnboarding/components/WelcomePageOrdersButton.tsx
+++ b/src/welcomePage/WelcomePageOnboarding/components/WelcomePageOrdersButton.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { hasPermissions } from "@dashboard/components/RequirePermissions";
import { PermissionEnum } from "@dashboard/graphql";
import { orderListUrl } from "@dashboard/orders/urls";
diff --git a/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.test.ts b/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.test.ts
index 2a5c724e6ac..fad10a44370 100644
--- a/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.test.ts
+++ b/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.test.ts
@@ -1,9 +1,9 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { renderHook } from "@testing-library/react-hooks";
import { useNewUserCheck } from "./useNewUserCheck";
-jest.mock("@dashboard/auth");
+jest.mock("@dashboard/auth/useUser");
describe("useNewUserCheck", () => {
const originalEnv = process.env;
diff --git a/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.ts b/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.ts
index c7a7d10f3e6..ef5ed25dcef 100644
--- a/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.ts
+++ b/src/welcomePage/WelcomePageOnboarding/hooks/useNewUserCheck.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import moment from "moment";
export const useNewUserCheck = () => {
diff --git a/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.test.ts b/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.test.ts
index e6ba15e2f3e..cf1dba59137 100644
--- a/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.test.ts
+++ b/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.test.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { useSaveOnBoardingStateMutation } from "@dashboard/graphql";
import { act } from "@testing-library/react";
import { renderHook } from "@testing-library/react-hooks";
@@ -6,7 +6,7 @@ import { renderHook } from "@testing-library/react-hooks";
import { OnboardingStepsIDs } from "./types";
import { useOnboardingStorage } from "./useOnboardingStorage";
-jest.mock("@dashboard/auth", () => ({
+jest.mock("@dashboard/auth/useUser", () => ({
__esModule: true,
useUser: jest.fn(),
}));
diff --git a/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.ts b/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.ts
index e3333bb0c3c..95ab5dabe6f 100644
--- a/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.ts
+++ b/src/welcomePage/WelcomePageOnboarding/onboardingContext/useOnboardingStorage.ts
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { useSaveOnBoardingStateMutation } from "@dashboard/graphql";
import debounce from "lodash/debounce";
import { useCallback, useMemo } from "react";
diff --git a/src/welcomePage/WelcomePageTitle.tsx b/src/welcomePage/WelcomePageTitle.tsx
index 12faac60cd7..262f7e6ba0b 100644
--- a/src/welcomePage/WelcomePageTitle.tsx
+++ b/src/welcomePage/WelcomePageTitle.tsx
@@ -1,4 +1,4 @@
-import { useUser } from "@dashboard/auth";
+import { useUser } from "@dashboard/auth/useUser";
import { getUserName } from "@dashboard/misc";
import { Text } from "@saleor/macaw-ui-next";
import { FormattedMessage } from "react-intl";