**What** - Renames /admin-next -> /admin - Renames @medusajs/admin-sdk -> @medusajs/admin-bundler - Creates a new package called @medusajs/admin-sdk that will hold all tooling relevant to creating admin extensions. This is currently `defineRouteConfig` and `defineWidgetConfig`, but will eventually also export methods for adding custom fields, register translation, etc. - cc: @shahednasser we should update the examples in the docs so these functions are imported from `@medusajs/admin-sdk`. People will also need to install the package in their project, as it's no longer a transient dependency. - cc: @olivermrbl we might want to publish a changelog when this is merged, as it is a breaking change, and will require people to import the `defineXConfig` from the new package instead of `@medusajs/admin-shared`. - Updates CODEOWNERS so /admin packages does not require a review from the UI team.
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import { castNumber } from "./cast-number"
|
|
|
|
export function transformNullableFormValue<T>(
|
|
value: T,
|
|
nullify = true
|
|
): T | undefined | null {
|
|
if (typeof value === "string" && value.trim() === "") {
|
|
return nullify ? null : undefined
|
|
}
|
|
|
|
if (Array.isArray(value) && value.length === 0) {
|
|
return nullify ? null : undefined
|
|
}
|
|
|
|
return value
|
|
}
|
|
|
|
type Nullable<T> = { [K in keyof T]: T[K] | null }
|
|
type Optional<T> = { [K in keyof T]: T[K] | undefined }
|
|
|
|
export function transformNullableFormData<
|
|
T extends Record<string, unknown>,
|
|
K extends boolean = true
|
|
>(data: T, nullify: K = true as K): K extends true ? Nullable<T> : Optional<T> {
|
|
return Object.entries(data).reduce((acc, [key, value]) => {
|
|
return {
|
|
...acc,
|
|
[key]: transformNullableFormValue(value, nullify),
|
|
}
|
|
}, {} as K extends true ? Nullable<T> : Optional<T>)
|
|
}
|
|
|
|
export function transformNullableFormNumber<K extends boolean = true>(
|
|
value?: string | number,
|
|
nullify: K = true as K
|
|
): K extends true ? number | null : number | undefined {
|
|
if (
|
|
typeof value === "undefined" ||
|
|
(typeof value === "string" && value.trim() === "")
|
|
) {
|
|
return (nullify ? null : undefined) as K extends true
|
|
? number | null
|
|
: number | undefined
|
|
}
|
|
|
|
if (typeof value === "string") {
|
|
return castNumber(value)
|
|
}
|
|
|
|
return value
|
|
}
|
|
|
|
type NullableNumbers = Record<string, number | null>
|
|
type OptionalNumbers = Record<string, number | undefined>
|
|
|
|
export function transformNullableFormNumbers<
|
|
T extends Record<string, string | number | undefined>,
|
|
K extends boolean = true
|
|
>(
|
|
data: T,
|
|
nullify: K = true as K
|
|
): K extends true ? NullableNumbers : OptionalNumbers {
|
|
return Object.entries(data).reduce((acc, [key, value]) => {
|
|
return {
|
|
...acc,
|
|
[key]: transformNullableFormNumber(value, nullify),
|
|
}
|
|
}, {} as K extends true ? NullableNumbers : OptionalNumbers)
|
|
}
|