Skip to content

Commit 97b9929

Browse files
authored
Merge pull request #24 from opendexnetwork/refactor/components
refactor: buttons
2 parents 11c74d3 + e8ba097 commit 97b9929

32 files changed

+416
-288
lines changed

src/common/components/ConnectionFailed.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
Button,
32
createStyles,
43
Grid,
54
makeStyles,
@@ -10,6 +9,7 @@ import React, { ReactElement, useEffect } from "react";
109
import { useHistory } from "react-router-dom";
1110
import { Path } from "../../router/Path";
1211
import { isElectron, sendMessageToParent } from "../utils/appUtil";
12+
import Button from "./input/buttons/Button";
1313

1414
const useStyles = makeStyles((theme: Theme) =>
1515
createStyles({
@@ -48,9 +48,11 @@ const ConnectionFailed = (): ReactElement => {
4848
</Typography>
4949
</Grid>
5050
<Grid item className={classes.row}>
51-
<Button variant="outlined" onClick={() => history.push(Path.DASHBOARD)}>
52-
Try again
53-
</Button>
51+
<Button
52+
text="Try Again"
53+
variant="outlined"
54+
onClick={() => history.push(Path.DASHBOARD)}
55+
/>
5456
</Grid>
5557
</Grid>
5658
);

src/common/components/data-display/LabeledRow.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { Divider, Grid, IconButton, makeStyles } from "@material-ui/core";
1+
import { Divider, Grid, makeStyles } from "@material-ui/core";
22
import FileCopyOutlinedIcon from "@material-ui/icons/FileCopyOutlined";
33
import React, { ReactElement } from "react";
44
import { copyToClipboard } from "../../utils/appUtil";
5+
import IconButton from "../input/buttons/IconButton";
56

67
type LabeledRowProps = {
78
label: string;
@@ -36,10 +37,11 @@ const LabeledRow = (props: LabeledRowProps): ReactElement => {
3637
{reserveSpaceForCopyIcon && (
3738
<Grid item xs={2} className={classes.cell}>
3839
{showCopyIcon && (
39-
/* IconButton */
40-
<IconButton onClick={() => copyToClipboard(value)}>
41-
<FileCopyOutlinedIcon fontSize="small" />
42-
</IconButton>
40+
<IconButton
41+
icon={<FileCopyOutlinedIcon fontSize="small" />}
42+
tooltipTitle="Copy to clipboard"
43+
onClick={() => copyToClipboard(value)}
44+
/>
4345
)}
4446
</Grid>
4547
)}

src/common/components/data-display/QrCode.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
createStyles,
33
Grid,
4-
IconButton,
54
makeStyles,
65
Paper,
76
Theme,
@@ -10,6 +9,7 @@ import {
109
import CloseIcon from "@material-ui/icons/Close";
1110
import QRCode from "qrcode.react";
1211
import React, { ReactElement } from "react";
12+
import IconButton from "../input/buttons/IconButton";
1313

1414
type QrCodeProps = {
1515
value: string;
@@ -39,9 +39,11 @@ const QrCode = (props: QrCodeProps): ReactElement => {
3939
return (
4040
<Paper className={classes.container}>
4141
<Grid item container justify="flex-end">
42-
<IconButton onClick={handleClose}>
43-
<CloseIcon />
44-
</IconButton>
42+
<IconButton
43+
icon={<CloseIcon />}
44+
tooltipTitle="Close"
45+
onClick={handleClose}
46+
/>
4547
</Grid>
4648
<Grid item container justify="center" alignItems="center">
4749
<Typography component="div" align="center">

src/common/components/data-display/WarningMessage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import {
22
Card,
33
createStyles,
44
Grid,
5-
IconButton,
65
makeStyles,
76
Theme,
87
Typography,
98
} from "@material-ui/core";
109
import WarningIcon from "@material-ui/icons/Warning";
1110
import React, { ReactElement } from "react";
1211
import CloseIcon from "@material-ui/icons/Close";
12+
import IconButton from "../input/buttons/IconButton";
1313

1414
type WarningMessageProps = {
1515
message: string;
@@ -80,12 +80,12 @@ const WarningMessage = (props: WarningMessageProps): ReactElement => {
8080
{showCloseIcon && (
8181
<Grid item>
8282
<IconButton
83+
icon={<CloseIcon />}
84+
tooltipTitle="Close"
8385
color="inherit"
8486
size="small"
8587
onClick={() => (onClose ? onClose() : void 0)}
86-
>
87-
<CloseIcon />
88-
</IconButton>
88+
/>
8989
</Grid>
9090
)}
9191
</Grid>

src/common/components/data-display/feedback/Snackbar.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {
2-
IconButton,
32
makeStyles,
43
Snackbar as MaterialSnackbar,
54
SnackbarContent,
65
} from "@material-ui/core";
76
import CloseIcon from "@material-ui/icons/Close";
87
import React, { ReactElement, useEffect, useState } from "react";
98
import { Subject } from "rxjs";
9+
import IconButton from "../../input/buttons/IconButton";
1010

1111
type SnackbarProps = {
1212
message: string;
@@ -47,9 +47,11 @@ const Snackbar = (props: SnackbarProps): ReactElement => {
4747
className={classes.snackbarContent}
4848
message={message}
4949
action={
50-
<IconButton onClick={() => setOpen(false)}>
51-
<CloseIcon />
52-
</IconButton>
50+
<IconButton
51+
icon={<CloseIcon />}
52+
tooltipTitle="Close"
53+
onClick={() => setOpen(false)}
54+
/>
5355
}
5456
/>
5557
</MaterialSnackbar>

src/common/components/data-display/table/SortingOptions.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@ import {
44
createStyles,
55
Fade,
66
Grid,
7-
IconButton,
87
makeStyles,
98
Paper,
109
Popper,
1110
Theme,
12-
Tooltip,
1311
Typography,
1412
} from "@material-ui/core";
1513
import ArrowDownwardIcon from "@material-ui/icons/ArrowDownward";
@@ -18,6 +16,7 @@ import CloseIcon from "@material-ui/icons/Close";
1816
import SortIcon from "@material-ui/icons/Sort";
1917
import React, { ReactElement, useState } from "react";
2018
import { SortingOrder } from "../../../utils/SortingUtil";
19+
import IconButton from "../../input/buttons/IconButton";
2120

2221
export type SortingOptionsProps<T> = {
2322
sortOpts: SortOption<T>[];
@@ -102,11 +101,12 @@ function SortingOptions<T>(props: SortingOptionsProps<T>): ReactElement {
102101
>
103102
<ClickAwayListener onClickAway={closeSortOptions}>
104103
<div>
105-
<Tooltip title="Sort" placement="left">
106-
<IconButton onClick={handleSortIconClick}>
107-
{!sortOptsOpen ? <SortIcon /> : <CloseIcon />}
108-
</IconButton>
109-
</Tooltip>
104+
<IconButton
105+
tooltipTitle="Sort"
106+
tooltipPlacement="left"
107+
onClick={handleSortIconClick}
108+
icon={sortOptsOpen ? <CloseIcon /> : <SortIcon />}
109+
/>
110110
<Popper
111111
open={sortOptsOpen}
112112
anchorEl={sortOptsAnchorEl}

src/common/components/data-display/table/Table.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import {
22
createStyles,
33
Divider,
44
Grid,
5-
IconButton,
65
makeStyles,
76
Theme,
87
Typography,
98
} from "@material-ui/core";
109
import FileCopyOutlinedIcon from "@material-ui/icons/FileCopyOutlined";
1110
import React, { ReactElement } from "react";
1211
import { copyToClipboard } from "../../../utils/appUtil";
12+
import IconButton from "../../input/buttons/IconButton";
1313
import CenterEllipsis from "../CenterEllipsis";
1414

1515
export type TableRow = {
@@ -106,6 +106,8 @@ function Table<T extends TableRow>(props: TableProps<T>): ReactElement {
106106
<Grid container item wrap="nowrap" alignItems="center">
107107
<CenterEllipsis text={row[column.key] + ""} />
108108
<IconButton
109+
icon={<FileCopyOutlinedIcon fontSize="inherit" />}
110+
tooltipTitle="Copy to clipboard"
109111
size="small"
110112
className={classes.tableCellIcon}
111113
onClick={() => {
@@ -116,9 +118,7 @@ function Table<T extends TableRow>(props: TableProps<T>): ReactElement {
116118
);
117119
}
118120
}}
119-
>
120-
<FileCopyOutlinedIcon fontSize="inherit" />
121-
</IconButton>
121+
/>
122122
</Grid>
123123
) : (
124124
<Typography

src/common/components/input/Password.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import {
22
FormControl,
3-
IconButton,
43
InputAdornment,
54
InputLabel,
65
OutlinedInput,
76
} from "@material-ui/core";
87
import Visibility from "@material-ui/icons/Visibility";
98
import VisibilityOff from "@material-ui/icons/VisibilityOff";
109
import React, { ChangeEvent, ReactElement, useState } from "react";
10+
import IconButton from "./buttons/IconButton";
1111

1212
type PasswordProps = {
1313
label?: string;
@@ -36,12 +36,12 @@ const Password = (props: PasswordProps): ReactElement => {
3636
endAdornment={
3737
<InputAdornment position="end">
3838
<IconButton
39+
icon={showPassword ? <Visibility /> : <VisibilityOff />}
40+
tooltipTitle={""}
3941
aria-label="toggle password visibility"
4042
onClick={() => setShowPassword(!showPassword)}
4143
edge="end"
42-
>
43-
{showPassword ? <Visibility /> : <VisibilityOff />}
44-
</IconButton>
44+
/>
4545
</InputAdornment>
4646
}
4747
/>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { ReactElement } from "react";
2+
import ButtonBase, { ButtonBaseProps } from "./ButtonBase";
3+
4+
type ButtonProps = Omit<ButtonBaseProps, "variant"> & {
5+
variant?: "contained" | "outlined";
6+
};
7+
8+
const Button = (props: ButtonProps): ReactElement => {
9+
const buttonBaseProps: ButtonBaseProps = {
10+
variant: props.variant || "contained",
11+
...props,
12+
};
13+
return ButtonBase(buttonBaseProps);
14+
};
15+
16+
export default Button;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
Button as MaterialButton,
3+
ButtonProps,
4+
Tooltip,
5+
} from "@material-ui/core";
6+
import React, { ReactElement } from "react";
7+
import { getFormattedTooltipTitle } from "../../../utils/uiUtil";
8+
9+
export type ButtonBaseProps = ButtonProps & {
10+
text: string;
11+
tooltipTitle?: string | string[];
12+
tooltipPlacement?: "left" | "right" | "bottom" | "top";
13+
};
14+
15+
const ButtonBase = (props: ButtonBaseProps): ReactElement => {
16+
const { text, tooltipTitle, tooltipPlacement, ...buttonProps } = props;
17+
18+
const materialButtonProps: ButtonProps = {
19+
disableElevation: true,
20+
children: text,
21+
...buttonProps,
22+
};
23+
24+
return (
25+
<>
26+
{tooltipTitle ? (
27+
<Tooltip
28+
title={getFormattedTooltipTitle(tooltipTitle)}
29+
placement={tooltipPlacement}
30+
>
31+
<span>
32+
<MaterialButton {...materialButtonProps} />
33+
</span>
34+
</Tooltip>
35+
) : (
36+
<MaterialButton {...materialButtonProps} />
37+
)}
38+
</>
39+
);
40+
};
41+
42+
export default ButtonBase;

0 commit comments

Comments
 (0)