feat(dashboard): inventory create flow (#7650)
This commit is contained in:
1 parent
69410162f6
commit
f08f0d6cc9
37 files changed
+1010
-271
No files matched your search
@@ -39,14 +39,9 @@ export const deleteInventoryLevelsFromItemAndLocationsStep = createStep(
|
||||
}
|
||||
|
||||
const deletedIds = items.map((i) => i.id)
|
||||
const deleted = await service.softDeleteInventoryLevels(deletedIds)
|
||||
await service.softDeleteInventoryLevels(deletedIds)
|
||||
|
||||
return new StepResponse(
|
||||
{
|
||||
[Modules.INVENTORY]: deleted,
|
||||
} as DeleteEntityInput,
|
||||
deletedIds
|
||||
)
|
||||
return new StepResponse(void 0, deletedIds)
|
||||
},
|
||||
async (prevLevelIds, { container }) => {
|
||||
if (!prevLevelIds?.length) {
|
||||
|
||||
@@ -5,8 +5,6 @@ import {
|
||||
deleteInventoryLevelsFromItemAndLocationsStep,
|
||||
} from "../steps"
|
||||
|
||||
import { removeRemoteLinkStep } from "../../common"
|
||||
|
||||
interface WorkflowInput {
|
||||
creates: InventoryNext.CreateInventoryLevelInput[]
|
||||
deletes: { inventory_item_id: string; location_id: string }[]
|
||||
@@ -17,9 +15,7 @@ export const bulkCreateDeleteLevelsWorkflowId =
|
||||
export const bulkCreateDeleteLevelsWorkflow = createWorkflow(
|
||||
bulkCreateDeleteLevelsWorkflowId,
|
||||
(input: WorkflowData<WorkflowInput>): WorkflowData<InventoryLevelDTO[]> => {
|
||||
const deleted = deleteInventoryLevelsFromItemAndLocationsStep(input.deletes)
|
||||
|
||||
removeRemoteLinkStep(deleted)
|
||||
deleteInventoryLevelsFromItemAndLocationsStep(input.deletes)
|
||||
|
||||
return createInventoryLevelsStep(input.creates)
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import { StockLocation } from "./stock-location"
|
||||
import { TaxRate } from "./tax-rate"
|
||||
import { TaxRegion } from "./tax-region"
|
||||
import { Upload } from "./upload"
|
||||
import { InventoryItem } from "./inventory-item"
|
||||
|
||||
export class Admin {
|
||||
public invite: Invite
|
||||
@@ -28,6 +29,7 @@ export class Admin {
|
||||
public fulfillment: Fulfillment
|
||||
public shippingOption: ShippingOption
|
||||
public shippingProfile: ShippingProfile
|
||||
public inventoryItem: InventoryItem
|
||||
public order: Order
|
||||
public taxRate: TaxRate
|
||||
public taxRegion: TaxRegion
|
||||
@@ -45,6 +47,7 @@ export class Admin {
|
||||
this.fulfillment = new Fulfillment(client)
|
||||
this.shippingOption = new ShippingOption(client)
|
||||
this.shippingProfile = new ShippingProfile(client)
|
||||
this.inventoryItem = new InventoryItem(client)
|
||||
this.order = new Order(client)
|
||||
this.taxRate = new TaxRate(client)
|
||||
this.taxRegion = new TaxRegion(client)
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
import { HttpTypes, SelectParams } from "@medusajs/types"
|
||||
import { Client } from "../client"
|
||||
import { ClientHeaders } from "../types"
|
||||
|
||||
export class InventoryItem {
|
||||
private client: Client
|
||||
constructor(client: Client) {
|
||||
this.client = client
|
||||
}
|
||||
|
||||
async create(
|
||||
body: HttpTypes.AdminCreateInventoryItem,
|
||||
query?: HttpTypes.SelectParams,
|
||||
headers?: ClientHeaders
|
||||
) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemResponse>(
|
||||
`/admin/inventory-items`,
|
||||
{
|
||||
method: "POST",
|
||||
headers,
|
||||
body,
|
||||
query,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async update(
|
||||
id: string,
|
||||
body: HttpTypes.AdminUpdateInventoryItem,
|
||||
query?: SelectParams,
|
||||
headers?: ClientHeaders
|
||||
) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemResponse>(
|
||||
`/admin/inventory-items/${id}`,
|
||||
{
|
||||
method: "POST",
|
||||
headers,
|
||||
body,
|
||||
query,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async list(
|
||||
query?: HttpTypes.AdminInventoryItemParams,
|
||||
headers?: ClientHeaders
|
||||
) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemListResponse>(
|
||||
`/admin/inventory-items`,
|
||||
{
|
||||
query,
|
||||
headers,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async retrieve(id: string, query?: SelectParams, headers?: ClientHeaders) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemResponse>(
|
||||
`/admin/inventory-items/${id}`,
|
||||
{
|
||||
query,
|
||||
headers,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async delete(id: string, headers?: ClientHeaders) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemDeleteResponse>(
|
||||
`/admin/inventory-items/${id}`,
|
||||
{
|
||||
method: "DELETE",
|
||||
headers,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async listLevels(
|
||||
id: string,
|
||||
query?: HttpTypes.AdminInventoryLevelFilters,
|
||||
headers?: ClientHeaders
|
||||
) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryLevelListResponse>(
|
||||
`/admin/inventory-items/${id}/location-levels`,
|
||||
{
|
||||
query,
|
||||
headers,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async updateLevel(
|
||||
id: string,
|
||||
locationId: string,
|
||||
body: HttpTypes.AdminUpdateInventoryLevel,
|
||||
query?: SelectParams,
|
||||
headers?: ClientHeaders
|
||||
) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemResponse>(
|
||||
`/admin/inventory-items/${id}/location-levels/${locationId}`,
|
||||
{
|
||||
method: "POST",
|
||||
headers,
|
||||
body,
|
||||
query,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async deleteLevel(id: string, locationId: string, headers?: ClientHeaders) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemDeleteResponse>(
|
||||
`/admin/inventory-items/${id}/location-levels/${locationId}`,
|
||||
{
|
||||
method: "DELETE",
|
||||
headers,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async batchUpdateLevels(
|
||||
id: string,
|
||||
body: HttpTypes.AdminBatchUpdateInventoryLevelLocation,
|
||||
query?: SelectParams,
|
||||
headers?: ClientHeaders
|
||||
) {
|
||||
return await this.client.fetch<HttpTypes.AdminInventoryItemResponse>(
|
||||
`/admin/inventory-items/${id}/location-levels/batch`,
|
||||
{
|
||||
method: "POST",
|
||||
headers,
|
||||
body,
|
||||
query,
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ export * from "./fulfillment"
|
||||
export * from "./fulfillment-provider"
|
||||
export * from "./fulfillment-set"
|
||||
export * from "./inventory"
|
||||
export * from "./inventory-level"
|
||||
export * from "./invite"
|
||||
export * from "./order"
|
||||
export * from "./payment"
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
export interface InventoryLevel {
|
||||
id: string
|
||||
inventory_item_id: string
|
||||
location_id: string
|
||||
stocked_quantity: number
|
||||
reserved_quantity: number
|
||||
available_quantity: number
|
||||
incoming_quantity: number
|
||||
metadata?: Record<string, unknown> | null
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
export * from "./entities"
|
||||
export * from "./payloads"
|
||||
export * from "./queries"
|
||||
export * from "./responses"
|
||||
@@ -0,0 +1,16 @@
|
||||
export interface AdminUpdateInventoryLevel {
|
||||
stocked_quantity?: number
|
||||
incoming_quantity?: number
|
||||
}
|
||||
|
||||
export interface AdminCreateInventoryLevel {
|
||||
location_id: string
|
||||
stocked_quantity?: number
|
||||
incoming_quantity?: number
|
||||
}
|
||||
|
||||
export interface AdminBatchUpdateInventoryLevelLocation {
|
||||
delete?: string[] // a list of location_ids
|
||||
update?: never // TODO - not implemented // AdminUpdateInventoryLevel[]
|
||||
create?: AdminCreateInventoryLevel[]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import { FindParams } from "../../common"
|
||||
|
||||
export interface AdminInventoryLevelFilters extends FindParams {
|
||||
location_id?: string | string[]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import { PaginatedResponse } from "../../common"
|
||||
import { InventoryLevel } from "./entities"
|
||||
|
||||
export interface AdminInventoryLevelResponse {
|
||||
inventory_level: InventoryLevel
|
||||
}
|
||||
|
||||
export type AdminInventoryLevelListResponse = PaginatedResponse<{
|
||||
inventory_levels: InventoryLevel[]
|
||||
}>
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./admin"
|
||||
+1
-11
@@ -1,6 +1,4 @@
|
||||
import { PaginatedResponse } from "../common"
|
||||
|
||||
interface InventoryItemResponse {
|
||||
export interface AdminInventoryItem {
|
||||
id: string
|
||||
sku?: string | null
|
||||
origin_country?: string | null
|
||||
@@ -17,11 +15,3 @@ interface InventoryItemResponse {
|
||||
thumbnail?: string | null
|
||||
metadata?: Record<string, unknown> | null
|
||||
}
|
||||
|
||||
export interface AdminInventoryItemResponse {
|
||||
inventory_item: InventoryItemResponse
|
||||
}
|
||||
|
||||
export type AdminInventoryItemListResponse = PaginatedResponse<{
|
||||
inventory_items: InventoryItemResponse[]
|
||||
}>
|
||||
@@ -0,0 +1,4 @@
|
||||
export * from "./entities"
|
||||
export * from "./payloads"
|
||||
export * from "./queries"
|
||||
export * from "./responses"
|
||||
@@ -0,0 +1,18 @@
|
||||
export interface AdminCreateInventoryItem {
|
||||
sku?: string
|
||||
hs_code?: string
|
||||
weight?: number
|
||||
length?: number
|
||||
height?: number
|
||||
width?: number
|
||||
origin_country?: string
|
||||
mid_code?: string
|
||||
material?: string
|
||||
title?: string
|
||||
description?: string
|
||||
requires_shipping?: boolean
|
||||
thumbnail?: string
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
|
||||
export interface AdminUpdateInventoryItem extends AdminCreateInventoryItem {}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { FindParams } from "../../common"
|
||||
import { OperatorMap } from "../../../dal"
|
||||
|
||||
export interface AdminInventoryItemParams extends FindParams {
|
||||
id?: string | string[]
|
||||
q?: string
|
||||
sku?: string | string[]
|
||||
origin_country?: string | string[]
|
||||
hs_code?: string | string[]
|
||||
material?: string | string[]
|
||||
requires_shipping?: boolean
|
||||
weight?: number | OperatorMap<number>
|
||||
length?: number | OperatorMap<number>
|
||||
height?: number | OperatorMap<number>
|
||||
width?: number | OperatorMap<number>
|
||||
location_levels?: Record<"location_id", string | string[]>
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import { DeleteResponse, PaginatedResponse } from "../../common"
|
||||
import { AdminInventoryItem } from "./entities"
|
||||
|
||||
export interface AdminInventoryItemResponse {
|
||||
inventory_item: AdminInventoryItem
|
||||
}
|
||||
|
||||
export type AdminInventoryItemListResponse = PaginatedResponse<{
|
||||
inventory_items: AdminInventoryItem[]
|
||||
}>
|
||||
|
||||
export type AdminInventoryItemDeleteResponse = DeleteResponse<"inventory_item">
|
||||
@@ -1,2 +1 @@
|
||||
export * from "./inventory"
|
||||
export * from "./inventory-level"
|
||||
export * from "./admin"
|
||||
@@ -1,21 +0,0 @@
|
||||
import { AdminInventoryItemResponse } from "./inventory"
|
||||
import { PaginatedResponse } from "../common"
|
||||
|
||||
interface InventoryLevelResponse {
|
||||
id: string
|
||||
inventory_item_id: string
|
||||
location_id: string
|
||||
stocked_quantity: number
|
||||
reserved_quantity: number
|
||||
available_quantity: number
|
||||
incoming_quantity: number
|
||||
metadata?: Record<string, unknown> | null
|
||||
}
|
||||
|
||||
export interface AdminInventoryLevelResponse {
|
||||
inventory_item: AdminInventoryItemResponse
|
||||
}
|
||||
|
||||
export type AdminInventoryLevelListResponse = PaginatedResponse<{
|
||||
inventory_levels: InventoryLevelResponse[]
|
||||
}>
|
||||
Reference in new issue
Block a user