mirror of
https://github.com/inventree/InvenTree.git
synced 2026-01-30 01:53:42 +00:00
[UI] Suggested pricing (#10867)
* Refactor NumberField into separate component * Add helper func to ensure a number is a number * Use placeholder value for suggested sale price * Fix for auto-fill * Tweak price calculation * Add UI testing for sales order price breaks * Fix aria label name * Annotate price breaks to supplier part * Fetch price break data * Support price breaks for purchase order pricing * Fix required to prevent circular imports * Add playwright tests for purchase order price breaks * Bump API version * Re-add output options for SupplierPriceBreakList * Revert change * Simplify unit test
This commit is contained in:
@@ -40,3 +40,36 @@ export function identifierString(value: string): string {
|
||||
|
||||
return value.toLowerCase().replace(/[^a-z0-9]/g, '-');
|
||||
}
|
||||
|
||||
export function toNumber(
|
||||
value: any,
|
||||
defaultValue: number | null = 0
|
||||
): number | null {
|
||||
// Convert the provided value into a number (if possible)
|
||||
|
||||
if (value == undefined || value == null || value === '') {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
// Case 1: numeric already
|
||||
if (typeof value === 'number') return value;
|
||||
|
||||
// Case 2: react-number-format object
|
||||
if (typeof value === 'object') {
|
||||
if ('floatValue' in value && typeof value.floatValue === 'number') {
|
||||
return value.floatValue;
|
||||
}
|
||||
if ('value' in value) {
|
||||
const parsed = Number(value.value);
|
||||
return Number.isNaN(parsed) ? Number.NaN : parsed;
|
||||
}
|
||||
}
|
||||
|
||||
// Case 3: string
|
||||
if (typeof value === 'string') {
|
||||
const parsed = Number(value);
|
||||
return Number.isNaN(parsed) ? Number.NaN : parsed;
|
||||
}
|
||||
|
||||
return Number.NaN;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user