93af7f35a3
* feat: altered the design of the tabs and redid the download tab * feat: redesign the upload file * fix: styles of tabs on hover * fix: display troubleshoot component when the status of the node is not OK * fix: when removing the file, remove the reference upload reference as well * fix: on inputs the label should not be selectable * feat: add placeholder to inputs and make the label non-selectable * refactor: improved the readability of the upload file component * chore: removed PeerDetail component * fix: replaced "batch" with (postage) "stamp" for clarity * refactor: address PR review comments * feat: disable the download button if there is no value
71 lines
1.6 KiB
TypeScript
71 lines
1.6 KiB
TypeScript
import React, { ReactElement, ReactNode } from 'react'
|
|
import { makeStyles, Theme, createStyles } from '@material-ui/core/styles'
|
|
import { Tab, Tabs } from '@material-ui/core'
|
|
|
|
interface TabPanelProps {
|
|
children?: ReactNode
|
|
index: number
|
|
value: number
|
|
}
|
|
|
|
function TabPanel(props: TabPanelProps) {
|
|
const { children, value, index, ...other } = props
|
|
|
|
return (
|
|
<div role="tabpanel" hidden={value !== index} {...other}>
|
|
{value === index && children}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
const useStyles = makeStyles((theme: Theme) =>
|
|
createStyles({
|
|
root: {
|
|
flexGrow: 1,
|
|
},
|
|
content: {
|
|
marginTop: theme.spacing(2),
|
|
},
|
|
}),
|
|
)
|
|
|
|
interface TabsValues {
|
|
component: ReactNode
|
|
label: ReactNode
|
|
}
|
|
|
|
interface Props {
|
|
values: TabsValues[]
|
|
index?: number
|
|
indexChanged?: (index: number) => void
|
|
}
|
|
|
|
export default function SimpleTabs({ values, index, indexChanged }: Props): ReactElement {
|
|
const classes = useStyles()
|
|
const [value, setValue] = React.useState<number>(index || 0)
|
|
|
|
const handleChange = (event: React.ChangeEvent<Record<string, never>>, newValue: number) => {
|
|
if (indexChanged) indexChanged(newValue)
|
|
else setValue(newValue)
|
|
}
|
|
|
|
const v = index !== undefined ? index : value
|
|
|
|
return (
|
|
<div className={classes.root}>
|
|
<Tabs value={v} onChange={handleChange} variant="fullWidth">
|
|
{values.map(({ label }, idx) => (
|
|
<Tab key={idx} label={label} />
|
|
))}
|
|
</Tabs>
|
|
<div className={classes.content}>
|
|
{values.map(({ component }, idx) => (
|
|
<TabPanel key={idx} value={v} index={idx}>
|
|
{component}
|
|
</TabPanel>
|
|
))}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|