Skip to content

Commit

Permalink
Feat(dashboard): admin locations v2 (#6868)
Browse files Browse the repository at this point in the history
* initial create

* add list for stock locations

* add changeset

* redo changes for stock locatino module'

* add changeset

* naming

* prep for pr

* move integration tests

* fix pr feedback

* add changeset

* update changeset

* init

* undo versioning updates

* rm whitespace

* move common files to modules

* Update packages/admin-next/dashboard/src/v2-routes/locations/location-edit/location-edit.tsx

Co-authored-by: Adrien de Peretti <[email protected]>

* rm logs

* fields instead of expands

---------

Co-authored-by: Riqwan Thamir <[email protected]>
Co-authored-by: Adrien de Peretti <[email protected]>
  • Loading branch information
3 people authored Apr 4, 2024
1 parent 6c6e530 commit fd3fc13
Show file tree
Hide file tree
Showing 25 changed files with 176 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import * as Dialog from "@radix-ui/react-dialog"

import {
ArrowRightOnRectangle,
BellAlert,
Expand All @@ -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,
Expand All @@ -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"
Expand Down Expand Up @@ -121,6 +121,7 @@ const Breadcrumbs = () => {
const UserBadge = () => {
const isV2Enabled = V2_ENABLED === "true"

console.warn(isV2Enabled)
// Medusa V2 disabled
const v1 = useAdminGetSession({
enabled: !isV2Enabled,
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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

Expand All @@ -49,7 +49,7 @@ export const LocationsListTable = () => {
useAdminStockLocations({
limit: PAGE_SIZE,
offset: pageIndex * PAGE_SIZE,
expand: "address",
fields: "*address",
})

const columns = useColumns()
Expand Down
51 changes: 44 additions & 7 deletions packages/admin-next/dashboard/src/providers/router-provider/v2.tsx
Original file line number Diff line number Diff line change
@@ -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()
Expand Down Expand Up @@ -215,6 +214,44 @@ export const v2Routes: RouteObject[] = [
},
],
},
{
path: "locations",
element: <Outlet />,
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: <Outlet />,
Expand Down
Original file line number Diff line number Diff line change
@@ -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 (
Expand Down
Original file line number Diff line number Diff line change
@@ -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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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 (
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { LocationAddSalesChannels as Component } from "./location-add-sales-channels"
Original file line number Diff line number Diff line change
@@ -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 <RouteFocusModal></RouteFocusModal>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { LocationCreate as Component } from "./location-create"
Original file line number Diff line number Diff line change
@@ -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 (
<RouteFocusModal>
<CreateLocationForm />
</RouteFocusModal>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { LocationDetail as Component } from "./location-detail"
Original file line number Diff line number Diff line change
@@ -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 <div>Loading...</div>
}

if (isError) {
throw error
}

const stock_location = stock_locations?.[0]

if (!stock_location) {
throw json({ message: "Not found" }, 404)
}

return (
<div className="flex flex-col gap-y-2">
<LocationGeneralSection location={stock_location} />
<LocationSalesChannelSection location={stock_location} />
<JsonViewSection data={stock_location} />
<Outlet />
</div>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { LocationEdit as Component } from "./location-edit"
Original file line number Diff line number Diff line change
@@ -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 (
<RouteDrawer>
<RouteDrawer.Header>
<Heading className="capitalize">{t("locations.editLocation")}</Heading>
</RouteDrawer.Header>
{!isLoading && !!stock_location && (
<EditLocationForm location={stock_location} />
)}
</RouteDrawer>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { LocationList as Component } from "./location-list"
Original file line number Diff line number Diff line change
@@ -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 (
<div className="flex flex-col gap-y-2">
<LocationsListTable />
<Outlet />
</div>
)
}

0 comments on commit fd3fc13

Please sign in to comment.