forked from SeleniumHQ/selenium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSessions.tsx
92 lines (83 loc) · 2.97 KB
/
Sessions.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import React, { useEffect } from 'react'
import RunningSessions from '../../components/RunningSessions/RunningSessions'
import { useQuery } from '@apollo/client'
import { loader } from 'graphql.macro'
import Grid from '@mui/material/Grid'
import QueuedSessions from '../../components/QueuedSessions/QueuedSessions'
import NoData from '../../components/NoData/NoData'
import Loading from '../../components/Loading/Loading'
import Error from '../../components/Error/Error'
import { GridConfig } from '../../config'
import {GRID_SESSIONS_QUERY} from "../../graphql/sessions";
import { useNavigate, useParams } from 'react-router-dom'
function Sessions (): JSX.Element {
const { loading, error, data } = useQuery(GRID_SESSIONS_QUERY, {
pollInterval: GridConfig.status.xhrPollingIntervalMillis,
fetchPolicy: 'network-only'
})
const navigate = useNavigate()
const { sessionId } = useParams<{ sessionId: string }>()
useEffect(() => {
if (data === undefined || data.sessionsInfo === undefined || data.sessionsInfo.sessions === undefined) {
return
}
if (sessionId && data.sessionsInfo.sessions.length === 0) {
navigate("/sessions")
}
}, [data, sessionId])
if (error !== undefined) {
const message = 'There has been an error while loading running and ' +
'queued Sessions from the Grid.'
const errorMessage = error?.networkError?.message
return (
<Grid container>
<Error message={message} errorMessage={errorMessage} />
</Grid>
)
}
if (loading) {
return (
<Grid container>
<Loading />
</Grid>
)
}
if (data.sessionsInfo.sessionQueueRequests.length === 0 &&
data.sessionsInfo.sessions.length === 0) {
const shortMessage = 'No running or queued sessions at the moment.'
return (
<Grid container>
<NoData message={shortMessage} />
</Grid>
)
}
return (
<Grid container>
<RunningSessions
sessions={data.sessionsInfo.sessions}
origin={window.location.origin}
sessionId={sessionId}
/>
<QueuedSessions
sessionQueueRequests={data.sessionsInfo.sessionQueueRequests}
/>
</Grid>
)
}
export default Sessions