11import { Autocomplete , Button , Card , Chip , IconButton , Link , MenuItem , Select , Stack , TextField , Typography } from "@mui/material" ;
2- import { DELETE_EQUIPMENT_INSTANCE , EquipmentInstance , InstanceStatus , UPDATE_INSTANCE , UPDATE_INSTANCE_CONTROLLER_ASSIGNMENT } from "../../../queries/equipmentInstanceQueries" ;
2+ import { DELETE_EQUIPMENT_INSTANCE , EquipmentInstance , InstanceStatus , UPDATE_INSTANCE , UPDATE_INSTANCE_CONTROLLER_ASSIGNMENT , UPDATE_INSTANCE_HOBBS_TIME } from "../../../queries/equipmentInstanceQueries" ;
33import DriveFileRenameOutlineIcon from '@mui/icons-material/DriveFileRenameOutline' ;
44import { useMutation , useQuery } from "@apollo/client/react" ;
55import { useState } from "react" ;
@@ -29,6 +29,11 @@ export default function EquipmentInstanceRow(props: EquipmentInstanceRowProps) {
2929 awaitRefetchQueries : true
3030 } ) ;
3131
32+ const [ updateInstanceHobbsTime ] = useMutation ( UPDATE_INSTANCE_HOBBS_TIME , {
33+ refetchQueries : [ "EquipmentInstances" , "GetUnpairedAccessControllers" ] ,
34+ awaitRefetchQueries : true
35+ } ) ;
36+
3237 const [ updatePairing ] = useMutation ( UPDATE_INSTANCE_CONTROLLER_ASSIGNMENT , {
3338 refetchQueries : [ "EquipmentInstances" , "GetUnpairedAccessControllers" ] ,
3439 awaitRefetchQueries : true
@@ -47,9 +52,12 @@ export default function EquipmentInstanceRow(props: EquipmentInstanceRowProps) {
4752 const [ sendCommandedState ] = useMutation ( COMMAND_CONTROLLER_STATE ) ;
4853 const [ commandedState , setCommandedState ] = useState < string > ( "IDLE" ) ;
4954
55+ const [ hobbsTime , setHobbsTime ] = useState ( props . instance . hobbsTime ) ;
56+
5057
5158 async function handleSave ( ) {
5259 setAllowEdit ( false ) ;
60+ await updateInstanceHobbsTime ( { variables : { id : props . instance . id , hobbsTime : hobbsTime } } )
5361 await updateInstance ( { variables : { id : props . instance . id , name : name , status : status } } )
5462 await updatePairing ( { variables : { id : Number ( props . instance . id ) , accessControllerID : pairedController ?. id } } )
5563 }
@@ -91,6 +99,20 @@ export default function EquipmentInstanceRow(props: EquipmentInstanceRowProps) {
9199 /> ;
92100 }
93101
102+ function formatSeconds ( allSeconds : number ) {
103+ const hours = Math . floor ( allSeconds / 3600 ) ;
104+ if ( hours > 0 ) {
105+ return ( allSeconds / 3600 ) . toFixed ( 2 ) + " hrs"
106+ }
107+ const minutes = Math . floor ( ( allSeconds % 3600 ) / 60 ) ;
108+ const seconds = allSeconds % 60 ;
109+ if ( minutes > 0 ) {
110+ return ( minutes + seconds / 50 ) . toFixed ( 2 ) + " min"
111+ } else {
112+ return Math . floor ( allSeconds ) + "sec"
113+ }
114+ }
115+
94116 function activeUserDisplay ( ) {
95117 if ( ! currentAccessController ) {
96118 return < Typography > No User</ Typography > ;
@@ -108,6 +130,15 @@ export default function EquipmentInstanceRow(props: EquipmentInstanceRowProps) {
108130 </ Stack >
109131 }
110132
133+ function hobbsTimeSetField ( ) {
134+ return < TextField label = "Hobbs (s)"
135+ required
136+ value = { hobbsTime }
137+ onChange = { ( e ) => setHobbsTime ( Math . abs ( Number ( e . target . value ) ) ) }
138+ >
139+ </ TextField >
140+ }
141+
111142 return (
112143 < Card sx = { { padding : "15px" } } >
113144 < Stack spacing = { 1 } direction = { "row" } width = { "100%" } height = { "60px" } alignItems = { "center" } >
@@ -127,6 +158,16 @@ export default function EquipmentInstanceRow(props: EquipmentInstanceRowProps) {
127158 : controllerPairingField ( )
128159 }
129160 </ Stack >
161+
162+ < Stack alignItems = { "center" } direction = { "row" } width = { "200px" } >
163+ {
164+ ! allowEdit
165+ ? formatSeconds ( props . instance . hobbsTime )
166+ : hobbsTimeSetField ( )
167+ }
168+ </ Stack >
169+
170+
130171 < Stack direction = { "row" } alignItems = { "center" } width = { "300px" } >
131172 { activeUserDisplay ( ) }
132173 </ Stack >
0 commit comments