@@ -7,15 +7,15 @@ import Button from './material/Button'
77import { uploadAllSegments , type FileType } from '~/api/file'
88import type { Route } from '~/api/types'
99
10- const BUTTON_TYPES = [ 'road' , 'driver' , 'logs' , 'route' ]
10+ const BUTTON_TYPES = [ 'road' , 'driver' , 'logs' , 'route' ] as const
1111type ButtonType = ( typeof BUTTON_TYPES ) [ number ]
1212type ButtonState = 'idle' | 'loading' | 'success' | 'error'
1313
14- const BUTTON_TO_FILE_TYPES : Record < Exclude < ButtonType , 'route' > , FileType [ ] > = {
14+ const BUTTON_TO_FILE_TYPES = {
1515 road : [ 'cameras' , 'ecameras' ] ,
1616 driver : [ 'dcameras' ] ,
1717 logs : [ 'logs' ] ,
18- }
18+ } as const
1919
2020interface UploadButtonProps {
2121 state : ButtonState
@@ -59,13 +59,11 @@ interface RouteUploadButtonsProps {
5959}
6060
6161const RouteUploadButtons : VoidComponent < RouteUploadButtonsProps > = ( props ) => {
62- const [ uploadStore , setUploadStore ] = createStore ( {
63- states : {
64- road : 'idle' ,
65- driver : 'idle' ,
66- logs : 'idle' ,
67- route : 'idle' ,
68- } as Record < ButtonType , ButtonState > ,
62+ const [ uploadStore , setUploadStore ] = createStore < Record < ButtonType , ButtonState > > ( {
63+ road : 'idle' ,
64+ driver : 'idle' ,
65+ logs : 'idle' ,
66+ route : 'idle' ,
6967 } )
7068 const [ abortController , setAbortController ] = createSignal ( new AbortController ( ) )
7169
@@ -75,7 +73,7 @@ const RouteUploadButtons: VoidComponent<RouteUploadButtonsProps> = (props) => {
7573 ( ) => {
7674 abortController ( ) . abort ( )
7775 setAbortController ( new AbortController ( ) )
78- setUploadStore ( 'states' , BUTTON_TYPES , 'idle' )
76+ setUploadStore ( BUTTON_TYPES , 'idle' )
7977 } ,
8078 ) ,
8179 )
@@ -87,13 +85,13 @@ const RouteUploadButtons: VoidComponent<RouteUploadButtonsProps> = (props) => {
8785
8886 const updateButtonStates = ( types : readonly ButtonType [ ] , state : ButtonState ) => {
8987 if ( signal . aborted ) return
90- setUploadStore ( 'states' , types , state )
88+ setUploadStore ( types , state )
9189 }
9290
9391 const uploadButtonTypes : ButtonType [ ] = [ type ]
9492 let uploadFileTypes : FileType [ ] = [ ]
9593 for ( const check of type === 'route' ? ( [ 'road' , 'driver' , 'logs' ] as const ) : [ type ] ) {
96- const state = uploadStore . states [ check ]
94+ const state = uploadStore [ check ]
9795 if ( state === 'loading' || state === 'success' ) continue
9896 uploadButtonTypes . push ( check )
9997 uploadFileTypes = uploadFileTypes . concat ( BUTTON_TO_FILE_TYPES [ check ] )
@@ -112,10 +110,10 @@ const RouteUploadButtons: VoidComponent<RouteUploadButtonsProps> = (props) => {
112110 return (
113111 < div class = "flex flex-col rounded-b-md m-5" >
114112 < div class = "grid grid-cols-2 gap-3 w-full lg:grid-cols-4" >
115- < UploadButton text = "Road" icon = "videocam" state = { uploadStore . states . road } onClick = { ( ) => handleUpload ( 'road' ) } />
116- < UploadButton text = "Driver" icon = "person" state = { uploadStore . states . driver } onClick = { ( ) => handleUpload ( 'driver' ) } />
117- < UploadButton text = "Logs" icon = "description" state = { uploadStore . states . logs } onClick = { ( ) => handleUpload ( 'logs' ) } />
118- < UploadButton text = "All" icon = "upload" state = { uploadStore . states . route } onClick = { ( ) => handleUpload ( 'route' ) } />
113+ < UploadButton text = "Road" icon = "videocam" state = { uploadStore . road } onClick = { ( ) => handleUpload ( 'road' ) } />
114+ < UploadButton text = "Driver" icon = "person" state = { uploadStore . driver } onClick = { ( ) => handleUpload ( 'driver' ) } />
115+ < UploadButton text = "Logs" icon = "description" state = { uploadStore . logs } onClick = { ( ) => handleUpload ( 'logs' ) } />
116+ < UploadButton text = "All" icon = "upload" state = { uploadStore . route } onClick = { ( ) => handleUpload ( 'route' ) } />
119117 </ div >
120118 </ div >
121119 )
0 commit comments