feat(dashboard): inventory create flow (#7650)

This commit is contained in:
Frane Polić authored and GitHub committed 2024-06-10 17:37:36 +02:00
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)
}
+3
View File
@@ -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,
}
)
}
}
+1
View File
@@ -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,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[]
}>