diff --git a/packages/admin-next/dashboard/src/components/layout/shell/shell.tsx b/packages/admin-next/dashboard/src/components/layout/shell/shell.tsx index 2c013c5b64317..0447a7a7f0819 100644 --- a/packages/admin-next/dashboard/src/components/layout/shell/shell.tsx +++ b/packages/admin-next/dashboard/src/components/layout/shell/shell.tsx @@ -1,3 +1,5 @@ +import * as Dialog from "@radix-ui/react-dialog" + import { ArrowRightOnRectangle, BellAlert, @@ -10,9 +12,6 @@ import { User as UserIcon, } from "@medusajs/icons" import { Avatar, DropdownMenu, IconButton, Kbd, Text, clx } from "@medusajs/ui" -import * as Dialog from "@radix-ui/react-dialog" -import { useAdminDeleteSession, useAdminGetSession } from "medusa-react" -import { PropsWithChildren } from "react" import { Link, Outlet, @@ -21,9 +20,10 @@ import { useMatches, useNavigate, } from "react-router-dom" +import { useAdminDeleteSession, useAdminGetSession } from "medusa-react" +import { PropsWithChildren } from "react" import { Skeleton } from "../../common/skeleton" - import { queryClient } from "../../../lib/medusa" import { useSearch } from "../../../providers/search-provider" import { useSidebar } from "../../../providers/sidebar-provider" @@ -121,6 +121,7 @@ const Breadcrumbs = () => { const UserBadge = () => { const isV2Enabled = V2_ENABLED === "true" + console.warn(isV2Enabled) // Medusa V2 disabled const v1 = useAdminGetSession({ enabled: !isV2Enabled, diff --git a/packages/admin-next/dashboard/src/routes/locations/location-create/components/create-location-form/create-location-form.tsx b/packages/admin-next/dashboard/src/modules/locations/location-create/components/create-location-form/create-location-form.tsx similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-create/components/create-location-form/create-location-form.tsx rename to packages/admin-next/dashboard/src/modules/locations/location-create/components/create-location-form/create-location-form.tsx diff --git a/packages/admin-next/dashboard/src/routes/locations/location-create/components/create-location-form/index.ts b/packages/admin-next/dashboard/src/modules/locations/location-create/components/create-location-form/index.ts similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-create/components/create-location-form/index.ts rename to packages/admin-next/dashboard/src/modules/locations/location-create/components/create-location-form/index.ts diff --git a/packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-general-section/index.ts b/packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-general-section/index.ts similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-general-section/index.ts rename to packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-general-section/index.ts diff --git a/packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-general-section/location-general-section.tsx b/packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-general-section/location-general-section.tsx similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-general-section/location-general-section.tsx rename to packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-general-section/location-general-section.tsx diff --git a/packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-sales-channel-section/index.ts b/packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-sales-channel-section/index.ts similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-sales-channel-section/index.ts rename to packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-sales-channel-section/index.ts diff --git a/packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-sales-channel-section/location-sales-channel-section.tsx b/packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-sales-channel-section/location-sales-channel-section.tsx similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-detail/components/location-sales-channel-section/location-sales-channel-section.tsx rename to packages/admin-next/dashboard/src/modules/locations/location-detail/components/location-sales-channel-section/location-sales-channel-section.tsx diff --git a/packages/admin-next/dashboard/src/routes/locations/location-edit/components/edit-location-form/edit-location-form.tsx b/packages/admin-next/dashboard/src/modules/locations/location-edit/components/edit-location-form/edit-location-form.tsx similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-edit/components/edit-location-form/edit-location-form.tsx rename to packages/admin-next/dashboard/src/modules/locations/location-edit/components/edit-location-form/edit-location-form.tsx diff --git a/packages/admin-next/dashboard/src/routes/locations/location-list/components/locations-list-table/index.ts b/packages/admin-next/dashboard/src/modules/locations/location-list/components/locations-list-table/index.ts similarity index 100% rename from packages/admin-next/dashboard/src/routes/locations/location-list/components/locations-list-table/index.ts rename to packages/admin-next/dashboard/src/modules/locations/location-list/components/locations-list-table/index.ts diff --git a/packages/admin-next/dashboard/src/routes/locations/location-list/components/locations-list-table/locations-list-table.tsx b/packages/admin-next/dashboard/src/modules/locations/location-list/components/locations-list-table/locations-list-table.tsx similarity index 99% rename from packages/admin-next/dashboard/src/routes/locations/location-list/components/locations-list-table/locations-list-table.tsx rename to packages/admin-next/dashboard/src/modules/locations/location-list/components/locations-list-table/locations-list-table.tsx index 3bd19aaa612e3..ad3acb92f8ac6 100644 --- a/packages/admin-next/dashboard/src/routes/locations/location-list/components/locations-list-table/locations-list-table.tsx +++ b/packages/admin-next/dashboard/src/modules/locations/location-list/components/locations-list-table/locations-list-table.tsx @@ -1,6 +1,9 @@ -import { PencilSquare, Trash } from "@medusajs/icons" -import { StockLocationExpandedDTO } from "@medusajs/types" import { Button, Container, Heading, Table, clx, usePrompt } from "@medusajs/ui" +import { Link, useNavigate, useSearchParams } from "react-router-dom" +import { + NoRecords, + NoResults, +} from "../../../../../components/common/empty-table-content/empty-table-content" import { PaginationState, RowSelectionState, @@ -9,20 +12,17 @@ import { getCoreRowModel, useReactTable, } from "@tanstack/react-table" +import { PencilSquare, Trash } from "@medusajs/icons" import { useAdminDeleteStockLocation, useAdminStockLocations, } from "medusa-react" import { useMemo, useState } from "react" -import { useTranslation } from "react-i18next" -import { Link, useNavigate, useSearchParams } from "react-router-dom" import { ActionMenu } from "../../../../../components/common/action-menu" -import { - NoRecords, - NoResults, -} from "../../../../../components/common/empty-table-content/empty-table-content" import { LocalizedTablePagination } from "../../../../../components/localization/localized-table-pagination" +import { StockLocationExpandedDTO } from "@medusajs/types" +import { useTranslation } from "react-i18next" const PAGE_SIZE = 50 @@ -49,7 +49,7 @@ export const LocationsListTable = () => { useAdminStockLocations({ limit: PAGE_SIZE, offset: pageIndex * PAGE_SIZE, - expand: "address", + fields: "*address", }) const columns = useColumns() diff --git a/packages/admin-next/dashboard/src/providers/router-provider/v2.tsx b/packages/admin-next/dashboard/src/providers/router-provider/v2.tsx index dad60e7e86489..618048ad49737 100644 --- a/packages/admin-next/dashboard/src/providers/router-provider/v2.tsx +++ b/packages/admin-next/dashboard/src/providers/router-provider/v2.tsx @@ -1,16 +1,15 @@ import { Navigate, RouteObject, useLocation } from "react-router-dom" -import { MainLayout } from "../../components/layout-v2/main-layout" -import { SettingsLayout } from "../../components/layout/settings-layout" - -import { Outlet } from "react-router-dom" +import { SalesChannelDTO, UserDTO } from "@medusajs/types" -import { Spinner } from "@medusajs/icons" import { AdminCollectionsRes } from "@medusajs/medusa" -import { SalesChannelDTO, UserDTO } from "@medusajs/types" import { ErrorBoundary } from "../../components/error/error-boundary" -import { useV2Session } from "../../lib/api-v2" +import { MainLayout } from "../../components/layout-v2/main-layout" +import { Outlet } from "react-router-dom" import { SearchProvider } from "../search-provider" +import { SettingsLayout } from "../../components/layout/settings-layout" import { SidebarProvider } from "../sidebar-provider" +import { Spinner } from "@medusajs/icons" +import { useV2Session } from "../../lib/api-v2" export const ProtectedRoute = () => { const { user, isLoading } = useV2Session() @@ -215,6 +214,44 @@ export const v2Routes: RouteObject[] = [ }, ], }, + { + path: "locations", + element: , + handle: { + crumb: () => "Locations", + }, + children: [ + { + path: "", + lazy: () => import("../../v2-routes/locations/location-list"), + children: [ + { + path: "create", + lazy: () => + import("../../v2-routes/locations/location-create"), + }, + ], + }, + { + path: ":id", + lazy: () => import("../../v2-routes/locations/location-detail"), + children: [ + { + path: "edit", + lazy: () => + import("../../v2-routes/locations/location-edit"), + }, + { + path: "add-sales-channels", + lazy: () => + import( + "../../v2-routes/locations/location-add-sales-channels" + ), + }, + ], + }, + ], + }, { path: "sales-channels", element: , diff --git a/packages/admin-next/dashboard/src/routes/locations/location-create/location-create.tsx b/packages/admin-next/dashboard/src/routes/locations/location-create/location-create.tsx index 5d6a290e16ac3..77dc24f33370b 100644 --- a/packages/admin-next/dashboard/src/routes/locations/location-create/location-create.tsx +++ b/packages/admin-next/dashboard/src/routes/locations/location-create/location-create.tsx @@ -1,5 +1,5 @@ +import { CreateLocationForm } from "../../../modules/locations/location-create/components/create-location-form" import { RouteFocusModal } from "../../../components/route-modal" -import { CreateLocationForm } from "./components/create-location-form" export const LocationCreate = () => { return ( diff --git a/packages/admin-next/dashboard/src/routes/locations/location-detail/location-detail.tsx b/packages/admin-next/dashboard/src/routes/locations/location-detail/location-detail.tsx index 45985636c6184..d0dd46403882a 100644 --- a/packages/admin-next/dashboard/src/routes/locations/location-detail/location-detail.tsx +++ b/packages/admin-next/dashboard/src/routes/locations/location-detail/location-detail.tsx @@ -1,8 +1,9 @@ -import { useAdminStockLocations } from "medusa-react" import { Outlet, json, useParams } from "react-router-dom" + import { JsonViewSection } from "../../../components/common/json-view-section" -import { LocationGeneralSection } from "./components/location-general-section" -import { LocationSalesChannelSection } from "./components/location-sales-channel-section" +import { LocationGeneralSection } from "../../../modules/locations/location-detail/components/location-general-section" +import { LocationSalesChannelSection } from "../../../modules/locations/location-detail/components/location-sales-channel-section" +import { useAdminStockLocations } from "medusa-react" export const LocationDetail = () => { const { id } = useParams() diff --git a/packages/admin-next/dashboard/src/routes/locations/location-edit/location-edit.tsx b/packages/admin-next/dashboard/src/routes/locations/location-edit/location-edit.tsx index 04e229be51bd4..38492662806a7 100644 --- a/packages/admin-next/dashboard/src/routes/locations/location-edit/location-edit.tsx +++ b/packages/admin-next/dashboard/src/routes/locations/location-edit/location-edit.tsx @@ -1,9 +1,9 @@ +import { EditLocationForm } from "../../../modules/locations/location-edit/components/edit-location-form/edit-location-form" import { Heading } from "@medusajs/ui" +import { RouteDrawer } from "../../../components/route-modal" import { useAdminStockLocations } from "medusa-react" -import { useTranslation } from "react-i18next" import { useParams } from "react-router-dom" -import { RouteDrawer } from "../../../components/route-modal" -import { EditLocationForm } from "./components/edit-location-form/edit-location-form" +import { useTranslation } from "react-i18next" export const LocationEdit = () => { const { id } = useParams() diff --git a/packages/admin-next/dashboard/src/routes/locations/location-list/location-list.tsx b/packages/admin-next/dashboard/src/routes/locations/location-list/location-list.tsx index 02363aba29b1e..76e8d7f3dedcb 100644 --- a/packages/admin-next/dashboard/src/routes/locations/location-list/location-list.tsx +++ b/packages/admin-next/dashboard/src/routes/locations/location-list/location-list.tsx @@ -1,5 +1,5 @@ +import { LocationsListTable } from "../../../modules/locations/location-list/components/locations-list-table" import { Outlet } from "react-router-dom" -import { LocationsListTable } from "./components/locations-list-table" export const LocationList = () => { return ( diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-add-sales-channels/index.ts b/packages/admin-next/dashboard/src/v2-routes/locations/location-add-sales-channels/index.ts new file mode 100644 index 0000000000000..eb7ea74f11870 --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-add-sales-channels/index.ts @@ -0,0 +1 @@ +export { LocationAddSalesChannels as Component } from "./location-add-sales-channels" diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-add-sales-channels/location-add-sales-channels.tsx b/packages/admin-next/dashboard/src/v2-routes/locations/location-add-sales-channels/location-add-sales-channels.tsx new file mode 100644 index 0000000000000..c09882bb28b8f --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-add-sales-channels/location-add-sales-channels.tsx @@ -0,0 +1,8 @@ +import { useAdminAddLocationToSalesChannel } from "medusa-react" +import { RouteFocusModal } from "../../../components/route-modal" + +export const LocationAddSalesChannels = () => { + const { mutateAsync } = useAdminAddLocationToSalesChannel() // TODO: We need a batch mutation instead of this to avoid multiple requests + + return +} diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-create/index.ts b/packages/admin-next/dashboard/src/v2-routes/locations/location-create/index.ts new file mode 100644 index 0000000000000..9e7d96209e7e4 --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-create/index.ts @@ -0,0 +1 @@ +export { LocationCreate as Component } from "./location-create" diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-create/location-create.tsx b/packages/admin-next/dashboard/src/v2-routes/locations/location-create/location-create.tsx new file mode 100644 index 0000000000000..77dc24f33370b --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-create/location-create.tsx @@ -0,0 +1,10 @@ +import { CreateLocationForm } from "../../../modules/locations/location-create/components/create-location-form" +import { RouteFocusModal } from "../../../components/route-modal" + +export const LocationCreate = () => { + return ( + + + + ) +} diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-detail/index.ts b/packages/admin-next/dashboard/src/v2-routes/locations/location-detail/index.ts new file mode 100644 index 0000000000000..086ccf707af37 --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-detail/index.ts @@ -0,0 +1 @@ +export { LocationDetail as Component } from "./location-detail" diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-detail/location-detail.tsx b/packages/admin-next/dashboard/src/v2-routes/locations/location-detail/location-detail.tsx new file mode 100644 index 0000000000000..257f74e4acc4c --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-detail/location-detail.tsx @@ -0,0 +1,39 @@ +import { Outlet, json, useParams } from "react-router-dom" + +import { JsonViewSection } from "../../../components/common/json-view-section" +import { LocationGeneralSection } from "../../../modules/locations/location-detail/components/location-general-section" +import { LocationSalesChannelSection } from "../../../modules/locations/location-detail/components/location-sales-channel-section" +import { useAdminStockLocations } from "medusa-react" + +export const LocationDetail = () => { + const { id } = useParams() + const { stock_locations, isLoading, isError, error } = useAdminStockLocations( + { + id, + fields: "*address,*sales_channels", + } + ) + + if (isLoading) { + return
Loading...
+ } + + if (isError) { + throw error + } + + const stock_location = stock_locations?.[0] + + if (!stock_location) { + throw json({ message: "Not found" }, 404) + } + + return ( +
+ + + + +
+ ) +} diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-edit/index.ts b/packages/admin-next/dashboard/src/v2-routes/locations/location-edit/index.ts new file mode 100644 index 0000000000000..516dd003a1585 --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-edit/index.ts @@ -0,0 +1 @@ +export { LocationEdit as Component } from "./location-edit" diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-edit/location-edit.tsx b/packages/admin-next/dashboard/src/v2-routes/locations/location-edit/location-edit.tsx new file mode 100644 index 0000000000000..8f846e249fbf7 --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-edit/location-edit.tsx @@ -0,0 +1,36 @@ +import { EditLocationForm } from "../../../modules/locations/location-edit/components/edit-location-form/edit-location-form" +import { Heading } from "@medusajs/ui" +import { RouteDrawer } from "../../../components/route-modal" +import { useAdminStockLocations } from "medusa-react" +import { useParams } from "react-router-dom" +import { useTranslation } from "react-i18next" + +export const LocationEdit = () => { + const { id } = useParams() + + const { stock_locations, isLoading, isError, error } = useAdminStockLocations( + { + id, + expand: "address", + } + ) + + const { t } = useTranslation() + + if (isError) { + throw error + } + + const stock_location = stock_locations?.[0] + + return ( + + + {t("locations.editLocation")} + + {!isLoading && !!stock_location && ( + + )} + + ) +} diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-list/index.ts b/packages/admin-next/dashboard/src/v2-routes/locations/location-list/index.ts new file mode 100644 index 0000000000000..883c2ba632d59 --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-list/index.ts @@ -0,0 +1 @@ +export { LocationList as Component } from "./location-list" diff --git a/packages/admin-next/dashboard/src/v2-routes/locations/location-list/location-list.tsx b/packages/admin-next/dashboard/src/v2-routes/locations/location-list/location-list.tsx new file mode 100644 index 0000000000000..76e8d7f3dedcb --- /dev/null +++ b/packages/admin-next/dashboard/src/v2-routes/locations/location-list/location-list.tsx @@ -0,0 +1,11 @@ +import { LocationsListTable } from "../../../modules/locations/location-list/components/locations-list-table" +import { Outlet } from "react-router-dom" + +export const LocationList = () => { + return ( +
+ + +
+ ) +}