From d6b452b73407d5a7436a510fc3683d0995370d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frane=20Poli=C4=87?= <16856471+fPolic@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:57:56 +0200 Subject: [PATCH] feat(dashboard, medusa) add metadata to pages (#9433) **WIP** - add metadata component and edit route to missing pages - fix API issues around metadata in certain domains --- FIXES CC-554 --- .../providers/router-provider/route-map.tsx | 30 +++++++ .../categories-metadata.tsx | 30 +++++++ .../categories/categories-metadata/index.ts | 1 + .../category-detail/category-detail.tsx | 84 ++++++++++--------- .../inventory-item-general-section.tsx | 4 +- .../inventory/inventory-metadata/index.ts | 1 + .../inventory-metadata/inventory-metadata.tsx | 27 ++++++ .../regions/region-detail/region-detail.tsx | 17 +++- .../routes/regions/region-metadata/index.ts | 1 + .../region-metadata/region-metadata.tsx | 27 ++++++ .../reservation-detail/reservation-detail.tsx | 74 +++++++--------- .../reservation-metadata/index.ts | 1 + .../reservation-metadata.tsx | 30 +++++++ .../sales-channel-detail.tsx | 16 +++- .../sales-channel-metadata/index.ts | 1 + .../sales-channel-metadata.tsx | 32 +++++++ .../tax-region-detail/tax-region-detail.tsx | 1 + .../tax-regions/tax-region-metadata/index.ts | 1 + .../tax-region-metadata.tsx | 31 +++++++ .../routes/users/user-detail/user-detail.tsx | 16 +++- .../src/routes/users/user-metadata/index.ts | 1 + .../users/user-metadata/user-metadata.tsx | 27 ++++++ .../types/src/http/user/admin/payloads.ts | 1 + .../api/admin/sales-channels/query-config.ts | 1 + .../medusa/src/api/admin/users/validators.ts | 1 + 25 files changed, 358 insertions(+), 98 deletions(-) create mode 100644 packages/admin/dashboard/src/routes/categories/categories-metadata/categories-metadata.tsx create mode 100644 packages/admin/dashboard/src/routes/categories/categories-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/inventory/inventory-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/inventory/inventory-metadata/inventory-metadata.tsx create mode 100644 packages/admin/dashboard/src/routes/regions/region-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/regions/region-metadata/region-metadata.tsx create mode 100644 packages/admin/dashboard/src/routes/reservations/reservation-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/reservations/reservation-metadata/reservation-metadata.tsx create mode 100644 packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/sales-channel-metadata.tsx create mode 100644 packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/tax-region-metadata.tsx create mode 100644 packages/admin/dashboard/src/routes/users/user-metadata/index.ts create mode 100644 packages/admin/dashboard/src/routes/users/user-metadata/user-metadata.tsx diff --git a/packages/admin/dashboard/src/providers/router-provider/route-map.tsx b/packages/admin/dashboard/src/providers/router-provider/route-map.tsx index 329dc57f08..38f38354bf 100644 --- a/packages/admin/dashboard/src/providers/router-provider/route-map.tsx +++ b/packages/admin/dashboard/src/providers/router-provider/route-map.tsx @@ -234,6 +234,11 @@ export const RouteMap: RouteObject[] = [ lazy: () => import("../../routes/categories/category-organize"), }, + { + path: "metadata/edit", + lazy: () => + import("../../routes/categories/categories-metadata"), + }, ], }, ], @@ -623,6 +628,11 @@ export const RouteMap: RouteObject[] = [ "../../routes/reservations/reservation-detail/components/edit-reservation" ), }, + { + path: "metadata/edit", + lazy: () => + import("../../routes/reservations/reservation-metadata"), + }, ], }, ], @@ -681,6 +691,11 @@ export const RouteMap: RouteObject[] = [ "../../routes/inventory/inventory-detail/components/adjust-inventory" ), }, + { + path: "metadata/edit", + lazy: () => + import("../../routes/inventory/inventory-metadata"), + }, { // TODO: create reservation path: "reservations", @@ -765,6 +780,10 @@ export const RouteMap: RouteObject[] = [ lazy: () => import("../../routes/regions/region-add-countries"), }, + { + path: "metadata/edit", + lazy: () => import("../../routes/regions/region-metadata"), + }, ], }, ], @@ -820,6 +839,10 @@ export const RouteMap: RouteObject[] = [ path: "edit", lazy: () => import("../../routes/users/user-edit"), }, + { + path: "metadata/edit", + lazy: () => import("../../routes/users/user-metadata"), + }, ], }, ], @@ -867,6 +890,13 @@ export const RouteMap: RouteObject[] = [ "../../routes/sales-channels/sales-channel-add-products" ), }, + { + path: "metadata/edit", + lazy: () => + import( + "../../routes/sales-channels/sales-channel-metadata" + ), + }, ], }, ], diff --git a/packages/admin/dashboard/src/routes/categories/categories-metadata/categories-metadata.tsx b/packages/admin/dashboard/src/routes/categories/categories-metadata/categories-metadata.tsx new file mode 100644 index 0000000000..6678c5d3df --- /dev/null +++ b/packages/admin/dashboard/src/routes/categories/categories-metadata/categories-metadata.tsx @@ -0,0 +1,30 @@ +import { useParams } from "react-router-dom" + +import { + useProductCategory, + useUpdateProductCategory, +} from "../../../hooks/api" +import { MetadataForm } from "../../../components/forms/metadata-form" +import { RouteDrawer } from "../../../components/modals" + +export const CategoriesMetadata = () => { + const { id } = useParams() + + const { product_category, isPending, isError, error } = useProductCategory(id) + const { mutateAsync, isPending: isMutating } = useUpdateProductCategory(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/admin/dashboard/src/routes/categories/categories-metadata/index.ts b/packages/admin/dashboard/src/routes/categories/categories-metadata/index.ts new file mode 100644 index 0000000000..9b97c2eb1d --- /dev/null +++ b/packages/admin/dashboard/src/routes/categories/categories-metadata/index.ts @@ -0,0 +1 @@ +export { CategoriesMetadata as Component } from "./categories-metadata" diff --git a/packages/admin/dashboard/src/routes/categories/category-detail/category-detail.tsx b/packages/admin/dashboard/src/routes/categories/category-detail/category-detail.tsx index c37f26d2a2..7923435e7e 100644 --- a/packages/admin/dashboard/src/routes/categories/category-detail/category-detail.tsx +++ b/packages/admin/dashboard/src/routes/categories/category-detail/category-detail.tsx @@ -1,5 +1,4 @@ -import { Outlet, useLoaderData, useParams } from "react-router-dom" -import { JsonViewSection } from "../../../components/common/json-view-section" +import { useLoaderData, useParams } from "react-router-dom" import { useProductCategory } from "../../../hooks/api/categories" import { CategoryGeneralSection } from "./components/category-general-section" import { CategoryOrganizeSection } from "./components/category-organize-section" @@ -10,6 +9,7 @@ import after from "virtual:medusa/widgets/product_category/details/after" import before from "virtual:medusa/widgets/product_category/details/before" import sideAfter from "virtual:medusa/widgets/product_category/details/side/after" import sideBefore from "virtual:medusa/widgets/product_category/details/side/before" +import { TwoColumnPage } from "../../../components/layout/pages" export const CategoryDetail = () => { const { id } = useParams() @@ -35,7 +35,18 @@ export const CategoryDetail = () => { } return ( -
+ {before.widgets.map((w, i) => { return (
@@ -43,43 +54,34 @@ export const CategoryDetail = () => {
) })} -
-
- - - {after.widgets.map((w, i) => { - return ( -
- -
- ) - })} -
- -
-
-
- {sideBefore.widgets.map((w, i) => { - return ( -
- -
- ) - })} - - {sideAfter.widgets.map((w, i) => { - return ( -
- -
- ) - })} -
- -
-
-
- -
+ + + + {after.widgets.map((w, i) => { + return ( +
+ +
+ ) + })} +
+ + {sideBefore.widgets.map((w, i) => { + return ( +
+ +
+ ) + })} + + {sideAfter.widgets.map((w, i) => { + return ( +
+ +
+ ) + })} +
+ ) } diff --git a/packages/admin/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx b/packages/admin/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx index 85e28f398a..b97362580b 100644 --- a/packages/admin/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx +++ b/packages/admin/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx @@ -1,10 +1,10 @@ import { Container, Heading } from "@medusajs/ui" import { HttpTypes } from "@medusajs/types" +import { PencilSquare } from "@medusajs/icons" +import { useTranslation } from "react-i18next" import { ActionMenu } from "../../../../components/common/action-menu" -import { PencilSquare } from "@medusajs/icons" import { SectionRow } from "../../../../components/common/section" -import { useTranslation } from "react-i18next" type InventoryItemGeneralSectionProps = { inventoryItem: HttpTypes.AdminInventoryItemResponse["inventory_item"] diff --git a/packages/admin/dashboard/src/routes/inventory/inventory-metadata/index.ts b/packages/admin/dashboard/src/routes/inventory/inventory-metadata/index.ts new file mode 100644 index 0000000000..ccd3bba222 --- /dev/null +++ b/packages/admin/dashboard/src/routes/inventory/inventory-metadata/index.ts @@ -0,0 +1 @@ +export { InventoryItemMetadata as Component } from "./inventory-metadata" diff --git a/packages/admin/dashboard/src/routes/inventory/inventory-metadata/inventory-metadata.tsx b/packages/admin/dashboard/src/routes/inventory/inventory-metadata/inventory-metadata.tsx new file mode 100644 index 0000000000..6060911df3 --- /dev/null +++ b/packages/admin/dashboard/src/routes/inventory/inventory-metadata/inventory-metadata.tsx @@ -0,0 +1,27 @@ +import { useParams } from "react-router-dom" + +import { useInventoryItem, useUpdateInventoryItem } from "../../../hooks/api" +import { MetadataForm } from "../../../components/forms/metadata-form" +import { RouteDrawer } from "../../../components/modals" + +export const InventoryItemMetadata = () => { + const { id } = useParams() + + const { inventory_item, isPending, isError, error } = useInventoryItem(id) + const { mutateAsync, isPending: isMutating } = useUpdateInventoryItem(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/admin/dashboard/src/routes/regions/region-detail/region-detail.tsx b/packages/admin/dashboard/src/routes/regions/region-detail/region-detail.tsx index 7a29358641..f07c54464a 100644 --- a/packages/admin/dashboard/src/routes/regions/region-detail/region-detail.tsx +++ b/packages/admin/dashboard/src/routes/regions/region-detail/region-detail.tsx @@ -9,6 +9,8 @@ import { regionLoader } from "./loader" import after from "virtual:medusa/widgets/region/details/after" import before from "virtual:medusa/widgets/region/details/before" import { usePricePreferences } from "../../../hooks/api/price-preferences" +import { SingleColumnPage } from "../../../components/layout/pages" +import { UserGeneralSection } from "../../users/user-detail/components/user-general-section" export const RegionDetail = () => { const initialData = useLoaderData() as Awaited< @@ -56,7 +58,16 @@ export const RegionDetail = () => { } return ( -
+ {before.widgets.map((w, i) => { return (
@@ -76,8 +87,6 @@ export const RegionDetail = () => {
) })} - - -
+ ) } diff --git a/packages/admin/dashboard/src/routes/regions/region-metadata/index.ts b/packages/admin/dashboard/src/routes/regions/region-metadata/index.ts new file mode 100644 index 0000000000..3fd1357aa9 --- /dev/null +++ b/packages/admin/dashboard/src/routes/regions/region-metadata/index.ts @@ -0,0 +1 @@ +export { RegionMetadata as Component } from "./region-metadata.tsx" diff --git a/packages/admin/dashboard/src/routes/regions/region-metadata/region-metadata.tsx b/packages/admin/dashboard/src/routes/regions/region-metadata/region-metadata.tsx new file mode 100644 index 0000000000..7bffe30054 --- /dev/null +++ b/packages/admin/dashboard/src/routes/regions/region-metadata/region-metadata.tsx @@ -0,0 +1,27 @@ +import { useParams } from "react-router-dom" + +import { MetadataForm } from "../../../components/forms/metadata-form" +import { RouteDrawer } from "../../../components/modals" +import { useRegion, useUpdateRegion } from "../../../hooks/api" + +export const RegionMetadata = () => { + const { id } = useParams() + + const { region, isPending, isError, error } = useRegion(id) + const { mutateAsync, isPending: isMutating } = useUpdateRegion(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/admin/dashboard/src/routes/reservations/reservation-detail/reservation-detail.tsx b/packages/admin/dashboard/src/routes/reservations/reservation-detail/reservation-detail.tsx index f3677f7877..d29977acfb 100644 --- a/packages/admin/dashboard/src/routes/reservations/reservation-detail/reservation-detail.tsx +++ b/packages/admin/dashboard/src/routes/reservations/reservation-detail/reservation-detail.tsx @@ -1,8 +1,6 @@ -import { Outlet, useLoaderData, useParams } from "react-router-dom" +import { useLoaderData, useParams } from "react-router-dom" -import { JsonViewSection } from "../../../components/common/json-view-section" import { useReservationItem } from "../../../hooks/api/reservations" -import { InventoryItemGeneralSection } from "../../inventory/inventory-detail/components/inventory-item-general-section" import { ReservationGeneralSection } from "./components/reservation-general-section" import { reservationItemLoader } from "./loader" @@ -10,6 +8,8 @@ import after from "virtual:medusa/widgets/reservation/details/after" import before from "virtual:medusa/widgets/reservation/details/before" import sideAfter from "virtual:medusa/widgets/reservation/details/side/after" import sideBefore from "virtual:medusa/widgets/reservation/details/side/before" +import { TwoColumnPage } from "../../../components/layout/pages" +import { InventoryItemGeneralSection } from "../../inventory/inventory-detail/components/inventory-item-general-section" export const ReservationDetail = () => { const { id } = useParams() @@ -35,7 +35,18 @@ export const ReservationDetail = () => { } return ( -
+ {before.widgets.map((w, i) => { return (
@@ -43,44 +54,21 @@ export const ReservationDetail = () => {
) })} -
-
- - {after.widgets.map((w, i) => { - return ( -
- -
- ) - })} -
- -
-
-
- {sideBefore.widgets.map((w, i) => { - return ( -
- -
- ) - })} - - {sideAfter.widgets.map((w, i) => { - return ( -
- -
- ) - })} -
- -
- -
-
-
+ + + {after.widgets.map((w, i) => { + return ( +
+ +
+ ) + })} +
+ + + + ) } diff --git a/packages/admin/dashboard/src/routes/reservations/reservation-metadata/index.ts b/packages/admin/dashboard/src/routes/reservations/reservation-metadata/index.ts new file mode 100644 index 0000000000..b47c93fd28 --- /dev/null +++ b/packages/admin/dashboard/src/routes/reservations/reservation-metadata/index.ts @@ -0,0 +1 @@ +export { ReservationMetadata as Component } from "./reservation-metadata" diff --git a/packages/admin/dashboard/src/routes/reservations/reservation-metadata/reservation-metadata.tsx b/packages/admin/dashboard/src/routes/reservations/reservation-metadata/reservation-metadata.tsx new file mode 100644 index 0000000000..10fa77b6e3 --- /dev/null +++ b/packages/admin/dashboard/src/routes/reservations/reservation-metadata/reservation-metadata.tsx @@ -0,0 +1,30 @@ +import { useParams } from "react-router-dom" + +import { + useReservationItem, + useUpdateReservationItem, +} from "../../../hooks/api" +import { MetadataForm } from "../../../components/forms/metadata-form" +import { RouteDrawer } from "../../../components/modals" + +export const ReservationMetadata = () => { + const { id } = useParams() + + const { reservation, isPending, isError, error } = useReservationItem(id) + const { mutateAsync, isPending: isMutating } = useUpdateReservationItem(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/admin/dashboard/src/routes/sales-channels/sales-channel-detail/sales-channel-detail.tsx b/packages/admin/dashboard/src/routes/sales-channels/sales-channel-detail/sales-channel-detail.tsx index bc3d3ae4c0..8065884249 100644 --- a/packages/admin/dashboard/src/routes/sales-channels/sales-channel-detail/sales-channel-detail.tsx +++ b/packages/admin/dashboard/src/routes/sales-channels/sales-channel-detail/sales-channel-detail.tsx @@ -8,6 +8,7 @@ import { salesChannelLoader } from "./loader" import after from "virtual:medusa/widgets/sales_channel/details/after" import before from "virtual:medusa/widgets/sales_channel/details/before" +import { SingleColumnPage } from "../../../components/layout/pages" export const SalesChannelDetail = () => { const initialData = useLoaderData() as Awaited< @@ -24,7 +25,16 @@ export const SalesChannelDetail = () => { } return ( -
+ {before.widgets.map((w, i) => { return (
@@ -41,8 +51,6 @@ export const SalesChannelDetail = () => {
) })} - - -
+ ) } diff --git a/packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/index.ts b/packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/index.ts new file mode 100644 index 0000000000..c04bbc819e --- /dev/null +++ b/packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/index.ts @@ -0,0 +1 @@ +export { SalesChannelMetadata as Component } from "./sales-channel-metadata" diff --git a/packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/sales-channel-metadata.tsx b/packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/sales-channel-metadata.tsx new file mode 100644 index 0000000000..75f3ac8957 --- /dev/null +++ b/packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata/sales-channel-metadata.tsx @@ -0,0 +1,32 @@ +import { useParams } from "react-router-dom" + +import { RouteDrawer } from "../../../components/modals" +import { MetadataForm } from "../../../components/forms/metadata-form" +import { useSalesChannel, useUpdateSalesChannel } from "../../../hooks/api" + +export const SalesChannelMetadata = () => { + const { id } = useParams() + + const { + sales_channel: salesChannel, + isPending, + isError, + error, + } = useSalesChannel(id) + const { mutateAsync, isPending: isMutating } = useUpdateSalesChannel(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/admin/dashboard/src/routes/tax-regions/tax-region-detail/tax-region-detail.tsx b/packages/admin/dashboard/src/routes/tax-regions/tax-region-detail/tax-region-detail.tsx index f89fc04682..741306dc22 100644 --- a/packages/admin/dashboard/src/routes/tax-regions/tax-region-detail/tax-region-detail.tsx +++ b/packages/admin/dashboard/src/routes/tax-regions/tax-region-detail/tax-region-detail.tsx @@ -40,6 +40,7 @@ export const TaxRegionDetail = () => { data={taxRegion} showJSON hasOutlet + // showMetadata // TOOD -> enable when tax region update is added to the API widgets={{ after, before, diff --git a/packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/index.ts b/packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/index.ts new file mode 100644 index 0000000000..f5ec5b2992 --- /dev/null +++ b/packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/index.ts @@ -0,0 +1 @@ +export { TaxRegionMetadata as Component } from "./tax-region-metadata.tsx" diff --git a/packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/tax-region-metadata.tsx b/packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/tax-region-metadata.tsx new file mode 100644 index 0000000000..d66f489b9a --- /dev/null +++ b/packages/admin/dashboard/src/routes/tax-regions/tax-region-metadata/tax-region-metadata.tsx @@ -0,0 +1,31 @@ +import { useParams } from "react-router-dom" + +import { useTaxRegion } from "../../../hooks/api" +import { MetadataForm } from "../../../components/forms/metadata-form" +import { RouteDrawer } from "../../../components/modals" + +/** + * TODO: Tax region update endpoint is missing + */ + +export const TaxRegionMetadata = () => { + const { id } = useParams() + + const { tax_region, isPending, isError, error } = useTaxRegion(id) + const { mutateAsync, isPending: isMutating } = {} // useUpdateTaxRegion(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/admin/dashboard/src/routes/users/user-detail/user-detail.tsx b/packages/admin/dashboard/src/routes/users/user-detail/user-detail.tsx index c4d554da59..0aa6fe28f6 100644 --- a/packages/admin/dashboard/src/routes/users/user-detail/user-detail.tsx +++ b/packages/admin/dashboard/src/routes/users/user-detail/user-detail.tsx @@ -7,6 +7,7 @@ import { userLoader } from "./loader" import after from "virtual:medusa/widgets/user/details/after" import before from "virtual:medusa/widgets/user/details/before" +import { SingleColumnPage } from "../../../components/layout/pages" export const UserDetail = () => { const initialData = useLoaderData() as Awaited> @@ -34,7 +35,16 @@ export const UserDetail = () => { } return ( -
+ {before.widgets.map((w, i) => (
@@ -46,8 +56,6 @@ export const UserDetail = () => {
))} - - -
+ ) } diff --git a/packages/admin/dashboard/src/routes/users/user-metadata/index.ts b/packages/admin/dashboard/src/routes/users/user-metadata/index.ts new file mode 100644 index 0000000000..2788dc4b68 --- /dev/null +++ b/packages/admin/dashboard/src/routes/users/user-metadata/index.ts @@ -0,0 +1 @@ +export { UserMetadata as Component } from "./user-metadata" diff --git a/packages/admin/dashboard/src/routes/users/user-metadata/user-metadata.tsx b/packages/admin/dashboard/src/routes/users/user-metadata/user-metadata.tsx new file mode 100644 index 0000000000..6c64330f1e --- /dev/null +++ b/packages/admin/dashboard/src/routes/users/user-metadata/user-metadata.tsx @@ -0,0 +1,27 @@ +import { useParams } from "react-router-dom" + +import { MetadataForm } from "../../../components/forms/metadata-form" +import { RouteDrawer } from "../../../components/modals" +import { useUpdateUser, useUser } from "../../../hooks/api" + +export const UserMetadata = () => { + const { id } = useParams() + + const { user, isPending, isError, error } = useUser(id) + const { mutateAsync, isPending: isMutating } = useUpdateUser(id) + + if (isError) { + throw error + } + + return ( + + + + ) +} diff --git a/packages/core/types/src/http/user/admin/payloads.ts b/packages/core/types/src/http/user/admin/payloads.ts index dc1d55c998..a40f739683 100644 --- a/packages/core/types/src/http/user/admin/payloads.ts +++ b/packages/core/types/src/http/user/admin/payloads.ts @@ -9,4 +9,5 @@ export interface AdminUpdateUser { first_name?: string | null last_name?: string | null avatar_url?: string | null + metadata?: Record | null } diff --git a/packages/medusa/src/api/admin/sales-channels/query-config.ts b/packages/medusa/src/api/admin/sales-channels/query-config.ts index 72857723de..2d4d710885 100644 --- a/packages/medusa/src/api/admin/sales-channels/query-config.ts +++ b/packages/medusa/src/api/admin/sales-channels/query-config.ts @@ -6,6 +6,7 @@ export const defaultAdminSalesChannelFields = [ "created_at", "updated_at", "deleted_at", + "metadata", ] export const retrieveTransformQueryConfig = { diff --git a/packages/medusa/src/api/admin/users/validators.ts b/packages/medusa/src/api/admin/users/validators.ts index 49b6430af3..a44b651122 100644 --- a/packages/medusa/src/api/admin/users/validators.ts +++ b/packages/medusa/src/api/admin/users/validators.ts @@ -37,4 +37,5 @@ export const AdminUpdateUser = z.object({ first_name: z.string().nullish(), last_name: z.string().nullish(), avatar_url: z.string().nullish(), + metadata: z.record(z.unknown()).nullish().optional(), })