2021-02-03 19:08:03 -05:00
|
|
|
import React, { useCallback, useState } from 'react'
|
|
|
|
|
import ReactDOM from 'react-dom'
|
2021-10-25 10:52:43 -04:00
|
|
|
import { Chip, Dialog } from '@material-ui/core'
|
2021-02-03 19:08:03 -05:00
|
|
|
import { getApplicationKeyMap, GlobalHotKeys } from 'react-hotkeys'
|
|
|
|
|
import TableContainer from '@material-ui/core/TableContainer'
|
|
|
|
|
import Paper from '@material-ui/core/Paper'
|
|
|
|
|
import Table from '@material-ui/core/Table'
|
|
|
|
|
import TableBody from '@material-ui/core/TableBody'
|
|
|
|
|
import TableRow from '@material-ui/core/TableRow'
|
|
|
|
|
import TableCell from '@material-ui/core/TableCell'
|
|
|
|
|
import { useTranslate } from 'react-admin'
|
2025-03-10 18:50:16 +00:00
|
|
|
import { humanize } from 'inflection'
|
2021-02-03 19:08:03 -05:00
|
|
|
import { keyMap } from '../hotkeys'
|
|
|
|
|
import { DialogTitle } from './DialogTitle'
|
|
|
|
|
import { DialogContent } from './DialogContent'
|
|
|
|
|
|
|
|
|
|
const HelpTable = (props) => {
|
|
|
|
|
const keyMap = getApplicationKeyMap()
|
|
|
|
|
const translate = useTranslate()
|
|
|
|
|
return ReactDOM.createPortal(
|
|
|
|
|
<Dialog {...props}>
|
|
|
|
|
<DialogTitle onClose={props.onClose}>
|
|
|
|
|
{translate('help.title')}
|
|
|
|
|
</DialogTitle>
|
|
|
|
|
<DialogContent dividers>
|
|
|
|
|
<TableContainer component={Paper}>
|
|
|
|
|
<Table size="small">
|
|
|
|
|
<TableBody>
|
|
|
|
|
{Object.keys(keyMap).map((key) => {
|
|
|
|
|
const { sequences, name } = keyMap[key]
|
|
|
|
|
const description = translate(`help.hotkeys.${name}`, {
|
2025-03-10 18:50:16 +00:00
|
|
|
_: humanize(name),
|
2021-02-03 19:08:03 -05:00
|
|
|
})
|
|
|
|
|
return (
|
|
|
|
|
<TableRow key={key}>
|
|
|
|
|
<TableCell align="right" component="th" scope="row">
|
|
|
|
|
{description}
|
|
|
|
|
</TableCell>
|
|
|
|
|
<TableCell align="left">
|
|
|
|
|
{sequences.map(({ sequence }) => (
|
2021-10-25 10:52:43 -04:00
|
|
|
<Chip
|
2021-10-26 08:57:20 -04:00
|
|
|
label={<kbd>{sequence}</kbd>}
|
2021-10-25 10:52:43 -04:00
|
|
|
size="small"
|
|
|
|
|
variant={'outlined'}
|
2021-10-26 08:57:20 -04:00
|
|
|
key={sequence}
|
2021-10-25 10:52:43 -04:00
|
|
|
/>
|
2021-02-03 19:08:03 -05:00
|
|
|
))}
|
|
|
|
|
</TableCell>
|
|
|
|
|
</TableRow>
|
|
|
|
|
)
|
|
|
|
|
})}
|
|
|
|
|
</TableBody>
|
|
|
|
|
</Table>
|
|
|
|
|
</TableContainer>
|
|
|
|
|
</DialogContent>
|
|
|
|
|
</Dialog>,
|
2023-12-18 14:56:03 -05:00
|
|
|
document.body,
|
2021-02-03 19:08:03 -05:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const HelpDialog = (props) => {
|
|
|
|
|
const [open, setOpen] = useState(false)
|
|
|
|
|
|
|
|
|
|
const handleClickClose = (e) => {
|
|
|
|
|
setOpen(false)
|
|
|
|
|
e.stopPropagation()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handlers = {
|
|
|
|
|
SHOW_HELP: useCallback(() => setOpen(true), [setOpen]),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<GlobalHotKeys keyMap={keyMap} handlers={handlers} allowChanges />
|
2023-05-17 15:48:22 -04:00
|
|
|
<HelpTable open={open} onClose={handleClickClose} />
|
2021-02-03 19:08:03 -05:00
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}
|