import y, { EditorProperty } from "@iplusplus/y-model" export const undefined_number = undefined as unknown as number export function checkCanEdit(p: EditorProperty, isInAdd?: boolean) { const x = p.valueType.getAttach("editable") if (x === "noedit" || (!isInAdd && x === "only-in-create") || (isInAdd && x === "only-edit") || p.name == "id") return false return true } type CheckResult = { value: unknown isValid: boolean } export const CanBeUndefined = "CanBeUndefined" export const undefinedNumberValueType = y.number(undefined_number).attach(CanBeUndefined, 1) export const createUndefineNumberValueType = () => y.number(undefined_number).attach(CanBeUndefined, 1) export function ignoreUndefined(v: T | undefined): T { return v as unknown as T } function checkNumberValue(p: EditorProperty, value: unknown): CheckResult { let newValue: number = NaN if (typeof value === "string") { if (p.valueType.getAttach(CanBeUndefined) && value.trim() === "") { return { value: undefined, isValid: true, } } newValue = parseFloat(value) } if (typeof value === "number") newValue = value if (isNaN(newValue)) { return { value, isValid: false, } } return { value: newValue, isValid: true, } } export function checkValidValue(p: EditorProperty, value: unknown): CheckResult { if (p.valueType.dataTypeName === "number") { return checkNumberValue(p, value) } return { isValid: true, value, } }