@@ -5,7 +5,6 @@ import { redirectingAuthorizedFetch } from '../authentication';
55
66export interface RestControllerProps < D > extends WithSnackbarProps {
77 handleValueChange : ( name : keyof D ) => ( event : React . ChangeEvent < HTMLInputElement > ) => void ;
8- handleCheckboxChange : ( name : keyof D ) => ( event : React . ChangeEvent < HTMLInputElement > , checked : boolean ) => void ;
98 handleSliderChange : ( name : keyof D ) => ( event : React . ChangeEvent < { } > , value : number | number [ ] ) => void ;
109
1110 setData : ( data : D ) => void ;
@@ -23,6 +22,17 @@ interface RestControllerState<D> {
2322 errorMessage ?: string ;
2423}
2524
25+ const extractValue = ( event : React . ChangeEvent < HTMLInputElement > ) => {
26+ switch ( event . target . type ) {
27+ case "number" :
28+ return event . target . valueAsNumber ;
29+ case "checkbox" :
30+ return event . target . checked ;
31+ default :
32+ return event . target . value
33+ }
34+ }
35+
2636export function restController < D , P extends RestControllerProps < D > > ( endpointUrl : string , RestController : React . ComponentType < P & RestControllerProps < D > > ) {
2737 return withSnackbar (
2838 class extends React . Component < Omit < P , keyof RestControllerProps < D > > & WithSnackbarProps , RestControllerState < D > > {
@@ -85,12 +95,7 @@ export function restController<D, P extends RestControllerProps<D>>(endpointUrl:
8595 }
8696
8797 handleValueChange = ( name : keyof D ) => ( event : React . ChangeEvent < HTMLInputElement > ) => {
88- const data = { ...this . state . data ! , [ name ] : event . target . value } ;
89- this . setState ( { data } ) ;
90- }
91-
92- handleCheckboxChange = ( name : keyof D ) => ( event : React . ChangeEvent < HTMLInputElement > ) => {
93- const data = { ...this . state . data ! , [ name ] : event . target . checked } ;
98+ const data = { ...this . state . data ! , [ name ] : extractValue ( event ) } ;
9499 this . setState ( { data } ) ;
95100 }
96101
@@ -102,7 +107,6 @@ export function restController<D, P extends RestControllerProps<D>>(endpointUrl:
102107 render ( ) {
103108 return < RestController
104109 handleValueChange = { this . handleValueChange }
105- handleCheckboxChange = { this . handleCheckboxChange }
106110 handleSliderChange = { this . handleSliderChange }
107111 setData = { this . setData }
108112 saveData = { this . saveData }
0 commit comments