blob: da555bcc7f1a7a5c63a95d3542946dd7a3a7561c [file] [log] [blame]
// 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