25b65c3fb7
* feat(wip): add basic feed operations * ci: bump checks * ci: bump checks * feat: rework stamps and add feed functionalities * refactor: polish and fixes * feat(wip): add formulas * feat: show bzz.link for websites * feat: add stamp empty states and formatBzz * feat: add feed download * chore: update manifest-js version * feat: dev mode support with bee-js 3.1.0 (#273) * feat: dev mode support with bee-js 3.1.0 * fix: added missing package-lock.json file * build: remove PR preview * style: work on design * feat: add TroubleshootConnectionCard * build: remove depcheck Co-authored-by: Attila Gazso <agazso@gmail.com>
92 lines
1.9 KiB
TypeScript
92 lines
1.9 KiB
TypeScript
import { Button, CircularProgress, createStyles, makeStyles } from '@material-ui/core'
|
|
import React, { ReactElement } from 'react'
|
|
import { IconProps } from 'react-feather'
|
|
|
|
interface Props {
|
|
onClick: () => void
|
|
iconType: React.ComponentType<IconProps>
|
|
children: string
|
|
className?: string
|
|
disabled?: boolean
|
|
loading?: boolean
|
|
cancel?: boolean
|
|
}
|
|
|
|
const useStyles = makeStyles(() =>
|
|
createStyles({
|
|
button: {
|
|
height: '52px',
|
|
position: 'relative',
|
|
whiteSpace: 'nowrap',
|
|
color: '#242424',
|
|
'&:hover, &:focus': {
|
|
'& svg': {
|
|
stroke: '#fff',
|
|
transition: '0.1s',
|
|
},
|
|
},
|
|
},
|
|
cancelButton: {
|
|
background: '#f7f7f7',
|
|
color: '#606060',
|
|
},
|
|
spinnerWrapper: {
|
|
position: 'absolute',
|
|
left: '50%',
|
|
top: '50%',
|
|
width: '40px',
|
|
height: '40px',
|
|
transform: 'translate(-50%, -50%)',
|
|
},
|
|
}),
|
|
)
|
|
|
|
export function SwarmButton({
|
|
children,
|
|
onClick,
|
|
iconType,
|
|
className,
|
|
disabled,
|
|
loading,
|
|
cancel,
|
|
}: Props): ReactElement {
|
|
const classes = useStyles()
|
|
|
|
function getIconColor() {
|
|
if (loading || disabled) {
|
|
return 'rgba(0, 0, 0, 0.26)'
|
|
}
|
|
|
|
return cancel ? '#606060' : '#dd7700'
|
|
}
|
|
|
|
function getButtonClassName() {
|
|
return [className, classes.button, cancel && classes.cancelButton].filter(x => x).join(' ')
|
|
}
|
|
|
|
const icon = React.createElement(iconType, {
|
|
size: '1.25rem',
|
|
color: getIconColor(),
|
|
})
|
|
|
|
return (
|
|
<Button
|
|
className={getButtonClassName()}
|
|
onClick={(event: React.MouseEvent<HTMLButtonElement>) => {
|
|
onClick()
|
|
event.currentTarget.blur()
|
|
}}
|
|
variant="contained"
|
|
startIcon={icon}
|
|
disabled={disabled}
|
|
>
|
|
{children}
|
|
{loading && (
|
|
<div className={classes.spinnerWrapper}>
|
|
<CircularProgress />
|
|
</div>
|
|
)}
|
|
</Button>
|
|
)
|
|
}
|