react-input-material 0.0.408 → 0.0.409

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1006,6 +1006,7 @@ export const GenericInputInner = function<Type = unknown>(
1006
1006
  transformer,
1007
1007
  /*
1008
1008
  NOTE: Handle two cases:
1009
+
1009
1010
  1. Representation has to be determine initially
1010
1011
  (-> usually no focus).
1011
1012
  2. Representation was set from the outside
@@ -2472,8 +2473,26 @@ GenericInput.transformer = {
2472
2473
  },
2473
2474
 
2474
2475
  date: {
2475
- format: {final: {transform: (value:number):string => {
2476
- value = typeof value === 'number' ? value : parseFloat(value)
2476
+ format: {final: {transform: (
2477
+ value:Date|number|string,
2478
+ configuration:DefaultProperties<number>,
2479
+ transformer:InputDataTransformation
2480
+ ):string => {
2481
+ if (typeof value !== 'number')
2482
+ if (transformer.date.parse)
2483
+ value = transformer.date.parse(
2484
+ value, configuration, transformer
2485
+ )
2486
+ else {
2487
+ const parsedDate:number = value instanceof Date ?
2488
+ value.getTime() / 1000 :
2489
+ Date.parse(value)
2490
+ if (isNaN(parsedDate)) {
2491
+ const parsedFloat:number = parseFloat(value as string)
2492
+ value = isNaN(parsedFloat) ? 0 : parsedFloat
2493
+ } else
2494
+ value = parsedDate / 1000
2495
+ }
2477
2496
 
2478
2497
  if (value === Infinity)
2479
2498
  return 'Infinitely far in the future'
@@ -2487,19 +2506,47 @@ GenericInput.transformer = {
2487
2506
 
2488
2507
  return formattedValue.substring(0, formattedValue.indexOf('T'))
2489
2508
  }}},
2490
- parse: (value:Date|number|string):number =>
2491
- typeof value === 'number' ?
2492
- value :
2493
- value instanceof Date ?
2494
- value.getTime() / 1000 :
2495
- isNaN(Date.parse(value)) ?
2496
- parseFloat(value) :
2497
- Date.parse(value) / 1000
2509
+ parse: (value:Date|number|string):number => {
2510
+ if (typeof value === 'number')
2511
+ return value
2512
+
2513
+ if (value instanceof Date)
2514
+ return value.getTime() / 1000
2515
+
2516
+ const parsedDate:number = Date.parse(value)
2517
+ if (isNaN(parsedDate)) {
2518
+ const parsedFloat:number = parseFloat(value)
2519
+ if (isNaN(parsedFloat))
2520
+ return 0
2521
+
2522
+ return parsedFloat
2523
+ }
2524
+
2525
+ return parsedDate / 1000
2526
+ }
2498
2527
  },
2499
2528
  // TODO respect local to utc conversion.
2500
2529
  'datetime-local': {
2501
- format: {final: {transform: (value:number):string => {
2502
- value = typeof value === 'number' ? value : parseFloat(value)
2530
+ format: {final: {transform: (
2531
+ value:Date|number|string,
2532
+ configuration:DefaultProperties<number>,
2533
+ transformer:InputDataTransformation
2534
+ ):string => {
2535
+ if (typeof value !== 'number')
2536
+ if (transformer['datetime-local'].parse)
2537
+ value = transformer['datetime-local'].parse(
2538
+ value, configuration, transformer
2539
+ )
2540
+ else {
2541
+ const parsedDate:number = value instanceof Date ?
2542
+ value.getTime() / 1000 :
2543
+ Date.parse(value)
2544
+ if (isNaN(parsedDate)) {
2545
+ const parsedFloat:number = parseFloat(value as string)
2546
+ value = isNaN(parsedFloat) ? 0 : parsedFloat
2547
+ } else
2548
+ value = parsedDate / 1000
2549
+ }
2503
2550
 
2504
2551
  if (value === Infinity)
2505
2552
  return 'Infinitely far in the future'
@@ -2514,72 +2561,116 @@ GenericInput.transformer = {
2514
2561
  return formattedValue.substring(0, formattedValue.length - 1)
2515
2562
  }}},
2516
2563
  parse: (
2517
- value:number|string,
2564
+ value:Date|number|string,
2518
2565
  configuration:DefaultProperties<number>,
2519
2566
  transformer:InputDataTransformation
2520
- ):number =>
2521
- transformer.date.parse ?
2522
- transformer.date.parse(value, configuration, transformer) :
2523
- isNaN(Date.parse(value as string)) ?
2524
- 0 :
2525
- Date.parse(value as string) / 1000
2567
+ ):number => {
2568
+ if (transformer.date.parse)
2569
+ return transformer.date.parse(
2570
+ value, configuration, transformer
2571
+ )
2572
+
2573
+ if (value instanceof Date)
2574
+ return value.getTime() / 1000
2575
+
2576
+ const parsedDate:number = Date.parse(value as string)
2577
+ if (isNaN(parsedDate)) {
2578
+ const parsedFloat:number = parseFloat(value as string)
2579
+ if (isNaN(parsedFloat))
2580
+ return 0
2581
+
2582
+ return parsedFloat
2583
+ }
2584
+
2585
+ return parsedDate / 1000
2586
+ }
2526
2587
  },
2527
2588
  time: {
2528
- format: {final: {transform: (
2529
- value:number, configuration:DefaultProperties<number>
2530
- ):string => {
2531
- value = typeof value === 'number' ? value : parseFloat(value)
2589
+ format: {
2590
+ final: {transform: (
2591
+ value:Date|number|string,
2592
+ configuration:DefaultProperties<number>,
2593
+ transformer:InputDataTransformation
2594
+ ):string => {
2595
+ if (typeof value !== 'number')
2596
+ if (transformer.time.parse)
2597
+ value = transformer.time.parse(
2598
+ value, configuration, transformer
2599
+ )
2600
+ else {
2601
+ const parsedDate:number = value instanceof Date ?
2602
+ value.getTime() / 1000 :
2603
+ Date.parse(value)
2604
+ if (isNaN(parsedDate)) {
2605
+ const parsedFloat:number =
2606
+ parseFloat(value as string)
2607
+ value = isNaN(parsedFloat) ? 0 : parsedFloat
2608
+ } else
2609
+ value = parsedDate / 1000
2610
+ }
2532
2611
 
2533
- if (value === Infinity)
2534
- return 'Infinitely far in the future'
2535
- if (value === -Infinity)
2536
- return 'Infinitely early in the past'
2537
- if (!isFinite(value))
2538
- return ''
2612
+ if (value === Infinity)
2613
+ return 'Infinitely far in the future'
2614
+ if (value === -Infinity)
2615
+ return 'Infinitely early in the past'
2616
+ if (!isFinite(value))
2617
+ return ''
2539
2618
 
2540
- let formattedValue:string =
2541
- (new Date(Math.round(value * 1000))).toISOString()
2619
+ let formattedValue:string =
2620
+ (new Date(Math.round(value * 1000))).toISOString()
2542
2621
 
2543
- formattedValue = formattedValue.substring(
2544
- formattedValue.indexOf('T') + 1, formattedValue.length - 1
2545
- )
2622
+ formattedValue = formattedValue.substring(
2623
+ formattedValue.indexOf('T') + 1, formattedValue.length - 1
2624
+ )
2546
2625
 
2547
- if (
2548
- configuration.step &&
2549
- configuration.step >= 60 &&
2550
- (configuration.step % 60) === 0
2551
- )
2552
- return formattedValue.substring(
2553
- 0, formattedValue.lastIndexOf(':')
2626
+ if (
2627
+ configuration.step &&
2628
+ configuration.step >= 60 &&
2629
+ (configuration.step % 60) === 0
2554
2630
  )
2631
+ return formattedValue.substring(
2632
+ 0, formattedValue.lastIndexOf(':')
2633
+ )
2555
2634
 
2556
- return formattedValue
2557
- }}},
2558
- parse: (value:Date|number|string):number =>
2559
- typeof value === 'number' ?
2560
- value :
2561
- value instanceof Date ?
2562
- value.getTime() / 1000 :
2563
- isNaN(Date.parse(value)) ?
2564
- parseFloat(value.replace(
2565
- /^([0-9]{2}):([0-9]{2})(:([0-9]{2}(\.[0-9]+)?))?$/,
2566
- (
2567
- _match:string,
2568
- hour:string,
2569
- minute:string,
2570
- secondsSuffix?:string,
2571
- seconds?:string,
2572
- _millisecondsSuffix?:string
2573
- ):string =>
2574
- String(
2575
- parseInt(hour) *
2576
- 60 ** 2 +
2577
- parseInt(minute) *
2578
- 60 +
2579
- (secondsSuffix ? parseFloat(seconds!) : 0)
2580
- )
2581
- )) :
2582
- Date.parse(value) / 1000
2635
+ return formattedValue
2636
+ }}
2637
+ },
2638
+ parse: (value:Date|number|string):number => {
2639
+ if (typeof value === 'number')
2640
+ return value
2641
+
2642
+ if (value instanceof Date)
2643
+ return value.getTime() / 1000
2644
+
2645
+ const parsedDate:number = Date.parse(value)
2646
+ if (isNaN(parsedDate)) {
2647
+ const parsedFloat:number = parseFloat(value.replace(
2648
+ /^([0-9]{2}):([0-9]{2})(:([0-9]{2}(\.[0-9]+)?))?$/,
2649
+ (
2650
+ _match:string,
2651
+ hour:string,
2652
+ minute:string,
2653
+ secondsSuffix?:string,
2654
+ seconds?:string,
2655
+ _millisecondsSuffix?:string
2656
+ ):string =>
2657
+ String(
2658
+ parseInt(hour) *
2659
+ 60 ** 2 +
2660
+ parseInt(minute) *
2661
+ 60 +
2662
+ (secondsSuffix ? parseFloat(seconds!) : 0)
2663
+ )
2664
+ ))
2665
+
2666
+ if (isNaN(parsedFloat))
2667
+ return 0
2668
+
2669
+ return parsedFloat
2670
+ }
2671
+
2672
+ return parsedDate / 1000
2673
+ }
2583
2674
  },
2584
2675
 
2585
2676
  float: {