You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.9 KiB
112 lines
2.9 KiB
import React, { useEffect, useState } from 'react' |
|
import { RouteComponentProps, useHistory } from 'react-router-dom' |
|
import { getClient, killSession, restartSession, startSession } from '../api' |
|
import { SessionPictures } from './SessionPictures' |
|
import { |
|
Button, |
|
Divider, |
|
message, |
|
PageHeader, |
|
Popconfirm, |
|
Row, |
|
Tag, |
|
} from 'antd' |
|
import { Content } from 'antd/lib/layout/layout' |
|
import { Client } from '../types' |
|
|
|
type Props = RouteComponentProps<{ clientId: string }> |
|
|
|
export const Session = (props: Props) => { |
|
const history = useHistory() |
|
const { clientId } = props.match.params |
|
const [client, setClient] = useState<Client | null>(null) |
|
const [active, setActive] = useState(false) |
|
|
|
const handleStartSession = async () => { |
|
message.loading('Photo sequence starting! Stand by...') |
|
await startSession(clientId) |
|
setActive(true) |
|
} |
|
|
|
const handleRestartSession = async () => { |
|
setActive(false) |
|
message.loading( |
|
'Deleting photos & restarting capture sequence! Stand by...', |
|
) |
|
await restartSession(clientId) |
|
setActive(true) |
|
} |
|
|
|
const handleExit = async () => { |
|
history.push('/') |
|
} |
|
|
|
const handleNuke = async () => { |
|
await killSession(clientId) |
|
message.success('Photos Deleted! Going back to dashboard') |
|
history.push('/') |
|
} |
|
|
|
useEffect(() => { |
|
const get = async () => { |
|
const client = await getClient(clientId) |
|
setClient(client) |
|
if (client.has_photos) setActive(true) |
|
} |
|
|
|
get() |
|
}, [clientId]) |
|
|
|
return ( |
|
<Content> |
|
<PageHeader |
|
ghost={false} |
|
onBack={() => history.goBack()} |
|
title={`Session for ${clientId}`} |
|
tags={active ? <Tag color="lime">Active</Tag> : <Tag>Inactive</Tag>} |
|
subTitle={`session has ${active ? 'started' : 'not started'}`} |
|
extra={[ |
|
<Button |
|
key="startsession" |
|
disabled={active} |
|
type="primary" |
|
onClick={handleStartSession} |
|
> |
|
Capture |
|
</Button>, |
|
<Popconfirm |
|
key="retry" |
|
title="Re-capture set?" |
|
onConfirm={handleRestartSession} |
|
> |
|
<Button type="default" disabled={!active}> |
|
Retry Capture |
|
</Button> |
|
</Popconfirm>, |
|
<Popconfirm |
|
key="nuke" |
|
title="Delete all photos and return to dashboard?" |
|
onConfirm={handleNuke} |
|
> |
|
<Button danger disabled={!active}> |
|
Abort Session |
|
</Button> |
|
</Popconfirm>, |
|
<Button |
|
key="finish" |
|
ghost |
|
type="primary" |
|
disabled={!active} |
|
onClick={handleExit} |
|
> |
|
Finish Session |
|
</Button>, |
|
]} |
|
></PageHeader> |
|
<Divider /> |
|
<Row className="controls"> |
|
{active && <SessionPictures clientId={clientId} />} |
|
</Row> |
|
</Content> |
|
) |
|
}
|
|
|