Skip to content

Commit 557ddb4

Browse files
committed
Move detail view into a modal dialog
1 parent 6d2891e commit 557ddb4

1 file changed

Lines changed: 64 additions & 63 deletions

File tree

backend/frontend/src/pages/Home.tsx

Lines changed: 64 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { useState, useEffect } from 'react'
22
import { Link } from 'react-router-dom'
33
import {
4-
Anchor, Box, Button, Checkbox, Group, PasswordInput,
5-
Select, Table, Text, Title,
4+
Anchor, Box, Button, Checkbox, Group, Modal, PasswordInput,
5+
ScrollArea, Select, Table, Text, Title,
66
} from '@mantine/core'
77
import { TestRecord, TestData } from '../types'
88
import { diffDisplay, diffStyle, timingDisplay } from '../utils'
@@ -179,75 +179,63 @@ function TestHistory({
179179
)
180180
}
181181

182-
const COL_SPAN = 10
183-
184182
function TestRow({
185183
record,
186-
onUpdateReference,
184+
onOpen,
187185
}: {
188186
record: TestRecord
189-
onUpdateReference: (record: TestRecord) => void
187+
onOpen: (record: TestRecord) => void
190188
}) {
191-
const [expanded, setExpanded] = useState(false)
192189
const latestData = record.data[record.data.length - 1]
193190
if (!latestData) return null
194191

195192
return (
196-
<>
197-
<Table.Tr style={{ cursor: 'pointer' }} onClick={() => setExpanded(e => !e)}>
198-
<Table.Td>
199-
<Box
200-
px={6}
201-
py={2}
202-
style={{ borderRadius: 4, textAlign: 'center', fontSize: 13, ...diffStyle(latestData.pixelError) }}
203-
>
204-
{diffDisplay(latestData.pixelError)}
205-
</Box>
206-
</Table.Td>
207-
<Table.Td>{record.group}</Table.Td>
208-
<Table.Td>{record.name}</Table.Td>
209-
<Table.Td>{record.hardware}</Table.Td>
210-
<Table.Td>{timingDisplay(latestData.timing)}</Table.Td>
211-
<Table.Td>
212-
<Anchor
213-
size="sm"
214-
href={`https://github.com/OpenSpace/OpenSpace/commit/${latestData.commitHash}`}
215-
target="_blank"
216-
onClick={(e: React.MouseEvent) => e.stopPropagation()}
217-
>
218-
{latestData.commitHash.substring(0, 8)}
219-
</Anchor>
220-
</Table.Td>
221-
<Table.Td>
222-
<Text size="sm">{new Date(latestData.timeStamp).toISOString()}</Text>
223-
</Table.Td>
224-
<Table.Td>
225-
<ImageThumbnail
226-
type="candidate" group={record.group} name={record.name}
227-
hardware={record.hardware} stopPropagation
228-
/>
229-
</Table.Td>
230-
<Table.Td>
231-
<ImageThumbnail
232-
type="reference" group={record.group} name={record.name}
233-
hardware={record.hardware} stopPropagation
234-
/>
235-
</Table.Td>
236-
<Table.Td>
237-
<ImageThumbnail
238-
type="difference" group={record.group} name={record.name}
239-
hardware={record.hardware} stopPropagation
240-
/>
241-
</Table.Td>
242-
</Table.Tr>
243-
{expanded && (
244-
<Table.Tr>
245-
<Table.Td colSpan={COL_SPAN} style={{ padding: 0 }}>
246-
<TestHistory record={record} onUpdateReference={onUpdateReference} />
247-
</Table.Td>
248-
</Table.Tr>
249-
)}
250-
</>
193+
<Table.Tr style={{ cursor: 'pointer' }} onClick={() => onOpen(record)}>
194+
<Table.Td>
195+
<Box
196+
px={6}
197+
py={2}
198+
style={{ borderRadius: 4, textAlign: 'center', fontSize: 13, ...diffStyle(latestData.pixelError) }}
199+
>
200+
{diffDisplay(latestData.pixelError)}
201+
</Box>
202+
</Table.Td>
203+
<Table.Td>{record.group}</Table.Td>
204+
<Table.Td>{record.name}</Table.Td>
205+
<Table.Td>{record.hardware}</Table.Td>
206+
<Table.Td>{timingDisplay(latestData.timing)}</Table.Td>
207+
<Table.Td>
208+
<Anchor
209+
size="sm"
210+
href={`https://github.com/OpenSpace/OpenSpace/commit/${latestData.commitHash}`}
211+
target="_blank"
212+
onClick={(e: React.MouseEvent) => e.stopPropagation()}
213+
>
214+
{latestData.commitHash.substring(0, 8)}
215+
</Anchor>
216+
</Table.Td>
217+
<Table.Td>
218+
<Text size="sm">{new Date(latestData.timeStamp).toISOString()}</Text>
219+
</Table.Td>
220+
<Table.Td>
221+
<ImageThumbnail
222+
type="candidate" group={record.group} name={record.name}
223+
hardware={record.hardware} stopPropagation
224+
/>
225+
</Table.Td>
226+
<Table.Td>
227+
<ImageThumbnail
228+
type="reference" group={record.group} name={record.name}
229+
hardware={record.hardware} stopPropagation
230+
/>
231+
</Table.Td>
232+
<Table.Td>
233+
<ImageThumbnail
234+
type="difference" group={record.group} name={record.name}
235+
hardware={record.hardware} stopPropagation
236+
/>
237+
</Table.Td>
238+
</Table.Tr>
251239
)
252240
}
253241

@@ -272,6 +260,7 @@ export default function Home() {
272260
const [allHardware, setAllHardware] = useState<string[]>([])
273261
const [selectedHardware, setSelectedHardware] = useState<Set<string>>(new Set())
274262
const [adminToken, setAdminToken] = useState('')
263+
const [selectedRecord, setSelectedRecord] = useState<TestRecord | null>(null)
275264

276265
useEffect(() => {
277266
fetch('/api/test-records')
@@ -398,12 +387,24 @@ export default function Home() {
398387
{visibleRecords.map(record => (
399388
<TestRow
400389
key={`${record.group}-${record.name}-${record.hardware}`}
390+
onOpen={setSelectedRecord}
401391
record={record}
402-
onUpdateReference={updateReference}
403392
/>
404393
))}
405394
</Table.Tbody>
406395
</Table>
396+
397+
<Modal
398+
opened={selectedRecord !== null}
399+
onClose={() => setSelectedRecord(null)}
400+
title={selectedRecord ? `${selectedRecord.group} / ${selectedRecord.name}${selectedRecord.hardware}` : ''}
401+
size="auto"
402+
scrollAreaComponent={ScrollArea.Autosize}
403+
>
404+
{selectedRecord && (
405+
<TestHistory record={selectedRecord} onUpdateReference={updateReference} />
406+
)}
407+
</Modal>
407408
</Box>
408409
)
409410
}

0 commit comments

Comments
 (0)