+
-
- {sideBefore.widgets.map((w, i) => {
- return (
-
-
-
- )
- })}
-
-
-
- {sideAfter.widgets.map((w, i) => {
- return (
-
-
-
- )
- })}
-
{after.widgets.map((w, i) => {
return (
@@ -75,9 +58,12 @@ export const ProductDetail = () => {
)
})}
-
+
+
+
+
-
+
{sideBefore.widgets.map((w, i) => {
return (
@@ -95,6 +81,10 @@ export const ProductDetail = () => {
)
})}
+
+
+
+
diff --git a/packages/admin-next/dashboard/src/v2-routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx b/packages/admin-next/dashboard/src/v2-routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx
index 9c5e91b3b8378..55048807d55f0 100644
--- a/packages/admin-next/dashboard/src/v2-routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx
+++ b/packages/admin-next/dashboard/src/v2-routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx
@@ -1,7 +1,6 @@
import { zodResolver } from "@hookform/resolvers/zod"
import { ProductOption } from "@medusajs/medusa"
import { Button, Input } from "@medusajs/ui"
-import { useAdminUpdateProductOption } from "medusa-react"
import { useForm } from "react-hook-form"
import { useTranslation } from "react-i18next"
import { z } from "zod"
@@ -10,6 +9,7 @@ import {
RouteDrawer,
useRouteModal,
} from "../../../../../components/route-modal"
+import { useUpdateProductOption } from "../../../../../hooks/api/products"
type EditProductOptionFormProps = {
option: ProductOption
@@ -32,8 +32,9 @@ export const CreateProductOptionForm = ({
resolver: zodResolver(CreateProductOptionSchema),
})
- const { mutateAsync, isLoading } = useAdminUpdateProductOption(
- option.product_id
+ const { mutateAsync, isLoading } = useUpdateProductOption(
+ option.product_id,
+ option.id
)
const handleSubmit = form.handleSubmit(async (values) => {
diff --git a/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/components/product-edit-variant-form/product-edit-variant-form.tsx b/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/components/product-edit-variant-form/product-edit-variant-form.tsx
index 603051d09e331..fa310bbfb1a40 100644
--- a/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/components/product-edit-variant-form/product-edit-variant-form.tsx
+++ b/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/components/product-edit-variant-form/product-edit-variant-form.tsx
@@ -1,7 +1,6 @@
import { zodResolver } from "@hookform/resolvers/zod"
import { Product, ProductOption, ProductVariant } from "@medusajs/medusa"
import { Button, Heading, Input, Switch } from "@medusajs/ui"
-import { useAdminUpdateVariant } from "medusa-react"
import { useForm } from "react-hook-form"
import { useTranslation } from "react-i18next"
import { z } from "zod"
@@ -17,6 +16,7 @@ import {
} from "../../../../../components/route-modal"
import { castNumber } from "../../../../../lib/cast-number"
import { optionalInt } from "../../../../../lib/validation"
+import { useUpdateProductVariant } from "../../../../../hooks/api/products"
type ProductEditVariantFormProps = {
product: Product
@@ -83,7 +83,10 @@ export const ProductEditVariantForm = ({
resolver: zodResolver(ProductEditVariantSchema),
})
- const { mutateAsync, isLoading } = useAdminUpdateVariant(product.id)
+ const { mutateAsync, isLoading } = useUpdateProductVariant(
+ product.id,
+ variant.id
+ )
const handleSubmit = form.handleSubmit(async (data) => {
const parseNumber = (value?: string | number) => {
diff --git a/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/loader.ts b/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/loader.ts
index 321ace2e9ba99..6563e610d5142 100644
--- a/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/loader.ts
+++ b/packages/admin-next/dashboard/src/v2-routes/products/product-edit-variant/loader.ts
@@ -1,10 +1,10 @@
-import { adminProductKeys, adminStoreKeys } from "medusa-react"
import { LoaderFunctionArgs } from "react-router-dom"
import { medusa, queryClient } from "../../../lib/medusa"
+import { productsQueryKeys } from "../../../hooks/api/products"
const queryKey = (id: string) => {
- return [adminProductKeys.detail(id), adminStoreKeys.details()]
+ return [productsQueryKeys.detail(id)]
}
const queryFn = async (id: string) => {
diff --git a/packages/admin-next/dashboard/src/v2-routes/products/product-list/loader.ts b/packages/admin-next/dashboard/src/v2-routes/products/product-list/loader.ts
index 9ad18e2dc5545..806dae1e6d463 100644
--- a/packages/admin-next/dashboard/src/v2-routes/products/product-list/loader.ts
+++ b/packages/admin-next/dashboard/src/v2-routes/products/product-list/loader.ts
@@ -1,12 +1,12 @@
import { AdminProductsListRes } from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { QueryClient } from "@tanstack/react-query"
-import { adminProductKeys } from "medusa-react"
import { medusa, queryClient } from "../../../lib/medusa"
+import { productsQueryKeys } from "../../../hooks/api/products"
const productsListQuery = () => ({
- queryKey: adminProductKeys.list({ limit: 20, offset: 0 }),
+ queryKey: productsQueryKeys.list({ limit: 20, offset: 0 }),
queryFn: async () => medusa.admin.products.list({ limit: 20, offset: 0 }),
})
diff --git a/packages/admin-next/dashboard/src/v2-routes/products/product-media/components/edit-product-media-form/edit-product-media-form.tsx b/packages/admin-next/dashboard/src/v2-routes/products/product-media/components/edit-product-media-form/edit-product-media-form.tsx
index c686e26cd8064..bd7e71d80ffd1 100644
--- a/packages/admin-next/dashboard/src/v2-routes/products/product-media/components/edit-product-media-form/edit-product-media-form.tsx
+++ b/packages/admin-next/dashboard/src/v2-routes/products/product-media/components/edit-product-media-form/edit-product-media-form.tsx
@@ -3,7 +3,6 @@ import { CheckMini, Spinner, ThumbnailBadge } from "@medusajs/icons"
import { Image, Product } from "@medusajs/medusa"
import { Button, CommandBar, Tooltip, clx } from "@medusajs/ui"
import { AnimatePresence, motion } from "framer-motion"
-import { useAdminUpdateProduct, useMedusa } from "medusa-react"
import { Fragment, useCallback, useState } from "react"
import { useFieldArray, useForm } from "react-hook-form"
import { useTranslation } from "react-i18next"
@@ -19,6 +18,7 @@ import {
FileType,
FileUpload,
} from "../../../../../components/common/file-upload"
+import { useUpdateProduct } from "../../../../../hooks/api/products"
type ProductMediaViewProps = {
product: Product
@@ -73,8 +73,7 @@ export const EditProductMediaForm = ({ product }: ProductMediaViewProps) => {
keyName: "field_id",
})
- const { mutateAsync, isLoading } = useAdminUpdateProduct(product.id)
- const { client } = useMedusa()
+ const { mutateAsync, isLoading } = useUpdateProduct(product.id)
const handleSubmit = form.handleSubmit(async ({ media }) => {
const urls = media.map((m) => m.url)
@@ -86,15 +85,20 @@ export const EditProductMediaForm = ({ product }: ProductMediaViewProps) => {
if (filesToUpload.length) {
const files = filesToUpload.map((m) => m.file) as File[]
- const uploads = await client.admin.uploads
- .create(files)
- .then((res) => {
- return res.uploads
- })
- .catch((_err) => {
- // Show error message
- return null
- })
+ // TODO: Implement upload to Medusa
+ // const uploads = await client.admin.uploads
+ // .create(files)
+ // .then((res) => {
+ // return res.uploads
+ // })
+ // .catch((_err) => {
+ // // Show error message
+ // return null
+ // })
+
+ const uploads = files.map((file) => ({
+ url: URL.createObjectURL(file),
+ }))
if (!uploads) {
return
diff --git a/packages/admin-next/dashboard/src/v2-routes/products/product-sales-channels/components/edit-sales-channels-form/edit-sales-channels-form.tsx b/packages/admin-next/dashboard/src/v2-routes/products/product-sales-channels/components/edit-sales-channels-form/edit-sales-channels-form.tsx
index 4935d217b4d81..a08a16b1d0638 100644
--- a/packages/admin-next/dashboard/src/v2-routes/products/product-sales-channels/components/edit-sales-channels-form/edit-sales-channels-form.tsx
+++ b/packages/admin-next/dashboard/src/v2-routes/products/product-sales-channels/components/edit-sales-channels-form/edit-sales-channels-form.tsx
@@ -1,7 +1,6 @@
import { Product, SalesChannel } from "@medusajs/medusa"
import { Button, Checkbox } from "@medusajs/ui"
import { RowSelectionState, createColumnHelper } from "@tanstack/react-table"
-import { useAdminSalesChannels, useAdminUpdateProduct } from "medusa-react"
import { useEffect, useMemo, useState } from "react"
import { useTranslation } from "react-i18next"
import * as zod from "zod"
@@ -17,6 +16,8 @@ import { useSalesChannelTableColumns } from "../../../../../hooks/table/columns/
import { useSalesChannelTableFilters } from "../../../../../hooks/table/filters/use-sales-channel-table-filters"
import { useSalesChannelTableQuery } from "../../../../../hooks/table/query/use-sales-channel-table-query"
import { useDataTable } from "../../../../../hooks/use-data-table"
+import { useSalesChannels } from "../../../../../hooks/api/sales-channels"
+import { useUpdateProduct } from "../../../../../hooks/api/products"
type EditSalesChannelsFormProps = {
product: Product
@@ -63,15 +64,14 @@ export const EditSalesChannelsForm = ({
const { searchParams, raw } = useSalesChannelTableQuery({
pageSize: PAGE_SIZE,
})
- const { sales_channels, count, isLoading, isError, error } =
- useAdminSalesChannels(
- {
- ...searchParams,
- },
- {
- keepPreviousData: true,
- }
- )
+ const { sales_channels, count, isLoading, isError, error } = useSalesChannels(
+ {
+ ...searchParams,
+ },
+ {
+ keepPreviousData: true,
+ }
+ )
const filters = useSalesChannelTableFilters()
const columns = useColumns()
@@ -90,9 +90,7 @@ export const EditSalesChannelsForm = ({
pageSize: PAGE_SIZE,
})
- const { mutateAsync, isLoading: isMutating } = useAdminUpdateProduct(
- product.id
- )
+ const { mutateAsync, isLoading: isMutating } = useUpdateProduct(product.id)
const handleSubmit = form.handleSubmit(async (data) => {
const arr = data.sales_channels ?? []
diff --git a/packages/medusa/src/api-v2/admin/products/query-config.ts b/packages/medusa/src/api-v2/admin/products/query-config.ts
index d49664ec6b991..3b72e34cbd58f 100644
--- a/packages/medusa/src/api-v2/admin/products/query-config.ts
+++ b/packages/medusa/src/api-v2/admin/products/query-config.ts
@@ -24,6 +24,7 @@ export const defaultAdminProductsVariantFields = [
"barcode",
"*prices",
"*options",
+ "*options.option_value",
]
export const retrieveVariantConfig = {
@@ -81,10 +82,10 @@ export const defaultAdminProductFields = [
"*options.values",
"*tags",
"*images",
- "*sales_channels",
"*variants",
"*variants.prices",
"*variants.options",
+ "*variants.options.option_value",
"*sales_channels",
]