@@ -7,7 +7,7 @@ import { FullMakerspace } from "../../../queries/makerspaceQueries";
77import { useMemo , useState } from "react" ;
88import { EquipmentInstance , GET_EQUIPMENT_INSTANCES } from "../../../queries/equipmentInstanceQueries" ;
99import { useMutation , useQuery } from "@apollo/client/react" ;
10- import { CREATE_INTERVAL_MAINTENANCE_TICKET , MaintenanceTicketSeverity } from "../../../queries/maintenanceTicketQueries" ;
10+ import { CREATE_INTERVAL_MAINTENANCE_TICKET , GET_MAINTENANCE_TICKETS , MaintenanceTicketSeverity , PAGINATED_MAINTENANCE_TICKETS } from "../../../queries/maintenanceTicketQueries" ;
1111import { toast } from "react-toastify" ;
1212import FileUploadButton from "../../../common/FileUploadButton" ;
1313import styled from "styled-components" ;
@@ -32,7 +32,7 @@ export default function NewIntervalTicketModal(props: NewTicketModalProps) {
3232 const [ imageUrl , setImageUrl ] = useState < string > ( ) ;
3333
3434 const equipmentInstancesResult = useQuery ( GET_EQUIPMENT_INSTANCES , { variables : { equipmentID : equipment ?. id ?? - 1 } } ) ;
35- const [ createTicket ] = useMutation ( CREATE_INTERVAL_MAINTENANCE_TICKET , { refetchQueries : [ "PaginatedMaintenanceTickets" , "MaintenanceTickets" ] } ) ;
35+ const [ createTicket ] = useMutation ( CREATE_INTERVAL_MAINTENANCE_TICKET , { refetchQueries : [ { query : PAGINATED_MAINTENANCE_TICKETS } , { query : GET_MAINTENANCE_TICKETS } ] } ) ;
3636
3737 const EMPTY_ARRAY : EquipmentInstance [ ] = [ ] ;
3838 const instances : EquipmentInstance [ ] = equipmentInstancesResult . data ?. equipmentInstances ?? EMPTY_ARRAY ;
@@ -50,14 +50,20 @@ export default function NewIntervalTicketModal(props: NewTicketModalProps) {
5050 const makerspace_equipments = makerspace_equipments_2 ?. flat ( 1 ) ;
5151
5252 const [ startDate , setStartDate ] = useState ( new Date ( ) ) ;
53- const [ scale , setScale ] = useState ( "days" ) ;
53+ const [ timeUnit , setTimeUnit ] = useState ( "" ) ; // USAGE | CALENDAR
54+ const [ scale , setScale ] = useState ( "days" ) ; // hours | days | weeks
5455 const [ interval , setInterval ] = useState ( "1" ) ;
5556
5657 function handleChangeScale ( _event : React . MouseEvent < HTMLElement > , value : string ) {
5758 if ( value !== null && value !== scale ) {
5859 setScale ( value ) ;
5960 }
6061 }
62+ function handleChangeTimeUnit ( _event : React . MouseEvent < HTMLElement > , value : string ) {
63+ if ( value !== null && value !== timeUnit ) {
64+ setTimeUnit ( value ) ;
65+ }
66+ }
6167
6268 function handleClose ( ) {
6369 setEquipment ( undefined ) ;
@@ -67,25 +73,29 @@ export default function NewIntervalTicketModal(props: NewTicketModalProps) {
6773 setImageUrl ( undefined ) ;
6874 setStartDate ( new Date ( ) ) ;
6975 setScale ( "days" ) ;
76+ setTimeUnit ( "CALENDAR" )
7077 setInterval ( "1" ) ;
7178
7279 props . onClose ( ) ;
7380 }
7481
7582 async function handleCreateTicket ( ) {
76- if ( ! ( equipment && reportedInstance && severity && ! Number . isNaN ( Number ( interval ) ) ) ) {
77- toast . error ( "A required field is empty!" ) ;
83+ if ( ! ( equipment && reportedInstance && severity && ! Number . isNaN ( Number ( interval ) ) && ( timeUnit == "USAGE" || timeUnit == "CALENDAR" ) ) ) {
84+ toast . error ( "A required field is empty or invalid !" ) ;
7885 return ;
7986 }
8087 try {
88+ const intervalHours = scale === "days" ? Math . floor ( Number ( interval ) * 24 ) : ( scale == "weeks" ) ? Math . floor ( Number ( interval ) * 168 ) : Math . floor ( Number ( interval ) )
89+
8190 await createTicket ( {
8291 variables : {
8392 severity : severity ,
8493 instanceID : Number ( reportedInstance . id ) ,
8594 description : description ,
8695 startDate : startDate . toISOString ( ) ,
8796 imageUrl : imageUrl ,
88- intervalHours : scale === "days" ? Number ( interval ) * 24 : Number ( interval ) * 168
97+ intervalHours : intervalHours ,
98+ timeUnit : timeUnit ,
8999 }
90100 } )
91101 } catch ( e ) {
@@ -127,6 +137,7 @@ export default function NewIntervalTicketModal(props: NewTicketModalProps) {
127137 {
128138 equipment
129139 ? < Autocomplete
140+ fullWidth
130141 key = { instances . length === 1 ? "auto-selected" : "manual-select" }
131142 renderInput = {
132143 ( params ) => (
@@ -159,21 +170,40 @@ export default function NewIntervalTicketModal(props: NewTicketModalProps) {
159170 disabled
160171 />
161172 }
162- < Autocomplete
163- renderInput = {
164- ( params ) => (
165- < TextField
166- { ...params }
167- label = "Severity"
168- placeholder = "Select Severity..."
169- required
170- />
171- )
172- }
173- options = { [ MaintenanceTicketSeverity . HIGH , MaintenanceTicketSeverity . MEDIUM , MaintenanceTicketSeverity . LOW ] }
174- value = { severity }
175- onChange = { ( event , newValue ) => setSeverity ( newValue ?? undefined ) }
176- />
173+ < Stack direction = { "row" } spacing = { 1 } >
174+ < Autocomplete
175+ renderInput = {
176+ ( params ) => (
177+ < TextField
178+ { ...params }
179+ label = "Severity"
180+ placeholder = "Select Severity..."
181+ required
182+ />
183+ )
184+ }
185+ options = { [ MaintenanceTicketSeverity . HIGH , MaintenanceTicketSeverity . MEDIUM , MaintenanceTicketSeverity . LOW ] }
186+ value = { severity }
187+ onChange = { ( event , newValue ) => setSeverity ( newValue ?? undefined ) }
188+ sx = { { flexGrow : 1 } }
189+ />
190+
191+ < ToggleButtonGroup
192+ exclusive
193+ value = { timeUnit }
194+ onChange = { handleChangeTimeUnit }
195+ >
196+ < ToggleButton value = "USAGE" >
197+ Usage
198+ </ ToggleButton >
199+ < ToggleButton value = "CALENDAR" >
200+ Calendar
201+ </ ToggleButton >
202+ </ ToggleButtonGroup >
203+
204+
205+ </ Stack >
206+
177207 < Stack direction = { "row" } justifyContent = { "space-between" } >
178208 < DatePicker
179209 value = { startDate }
@@ -196,11 +226,15 @@ export default function NewIntervalTicketModal(props: NewTicketModalProps) {
196226 width : "120px"
197227 } }
198228 />
229+
199230 < ToggleButtonGroup
200231 exclusive
201232 value = { scale }
202233 onChange = { handleChangeScale }
203234 >
235+ < ToggleButton value = "hours" >
236+ Hours
237+ </ ToggleButton >
204238 < ToggleButton value = "days" >
205239 Days
206240 </ ToggleButton >
0 commit comments