Skip to content

Commit 2eb1306

Browse files
committed
chore: refactor validation button
1 parent be603f7 commit 2eb1306

File tree

1 file changed

+38
-103
lines changed

1 file changed

+38
-103
lines changed
Lines changed: 38 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,149 +1,84 @@
11
import { DeveloperService } from "../spicedb-common/services/developerservice";
2-
import Button from "@material-ui/core/Button";
3-
import { Theme, createStyles, makeStyles } from "@material-ui/core/styles";
4-
import { alpha } from "@material-ui/core/styles/colorManipulator";
5-
import CheckCircleIcon from "@material-ui/icons/CheckCircle";
6-
import CheckCircleOutlineIcon from "@material-ui/icons/CheckCircleOutline";
7-
import ErrorIcon from "@material-ui/icons/Error";
8-
import PlayCircleFilledIcon from "@material-ui/icons/PlayCircleFilled";
9-
import clsx from "clsx";
10-
import "react-reflex/styles.css";
2+
import { Button } from "./ui/button";
113
import { DataStore } from "../services/datastore";
124
import { ValidationState, ValidationStatus } from "../services/validation";
13-
import { TourElementClass } from "./GuidedTour";
5+
import { CheckCircle, CircleX, CirclePlay } from "lucide-react";
146

15-
const useStyles = makeStyles((theme: Theme) =>
16-
createStyles({
17-
gcm: {
18-
color: "green",
19-
display: "inherit",
20-
},
21-
rem: {
22-
color: "red",
23-
display: "inherit",
24-
},
25-
gray: {
26-
color: "gray",
27-
display: "inherit",
28-
},
29-
lastRun: {
30-
display: "grid",
31-
gridTemplateColumns: "auto 150px",
32-
alignItems: "center",
33-
columnGap: theme.spacing(1),
34-
backgroundColor: "rgba(255, 255, 255, 0.05)",
35-
height: "100%",
36-
padding: "4px",
37-
paddingLeft: "8px",
38-
},
39-
validated: {
40-
backgroundColor: alpha(theme.palette.success.light, 0.2),
41-
},
42-
validationError: {
43-
backgroundColor: alpha(theme.palette.error.light, 0.2),
44-
},
45-
validationDisplay: {
46-
display: "grid",
47-
gridTemplateColumns: "auto auto",
48-
alignItems: "center",
49-
columnGap: theme.spacing(1),
50-
},
51-
}),
52-
);
53-
54-
export function ValidateButton(props: {
7+
export function ValidateButton({
8+
conductValidation,
9+
datastore,
10+
validationState,
11+
developerService,
12+
}: {
5513
conductValidation: () => void;
5614
datastore: DataStore;
5715
validationState: ValidationState;
5816
developerService: DeveloperService;
5917
}) {
6018
const validated =
61-
props.validationState.status === ValidationStatus.VALIDATED ||
62-
props.validationState.status === ValidationStatus.VALIDATION_ERROR;
19+
validationState.status === ValidationStatus.VALIDATED ||
20+
validationState.status === ValidationStatus.VALIDATION_ERROR;
6321
const upToDate =
6422
validated &&
65-
props.validationState.validationDatastoreIndex ===
66-
props.datastore.currentIndex();
67-
68-
const classes = useStyles();
23+
validationState.validationDatastoreIndex === datastore.currentIndex();
6924

7025
return (
71-
<div className={classes.validationDisplay}>
72-
<div
73-
className={clsx(classes.lastRun, {
74-
[classes.validated]:
75-
upToDate &&
76-
props.validationState.status === ValidationStatus.VALIDATED,
77-
[classes.validationError]:
78-
upToDate &&
79-
props.validationState.status === ValidationStatus.VALIDATION_ERROR,
80-
})}
81-
>
26+
<div className="flex flex-row bg-transparent justify-between">
27+
<div className="flex flex-row px-3 mr-2 w-48 items-center bg-zinc-700 rounded-xs">
8228
<ValidationIcon
83-
datastore={props.datastore}
84-
validationState={props.validationState}
29+
datastore={datastore}
30+
validationState={validationState}
31+
className="pr-2"
8532
/>
8633
{upToDate &&
87-
props.validationState.status === ValidationStatus.VALIDATED &&
34+
validationState.status === ValidationStatus.VALIDATED &&
8835
"Validated!"}
8936
{upToDate &&
90-
props.validationState.status === ValidationStatus.VALIDATION_ERROR &&
37+
validationState.status === ValidationStatus.VALIDATION_ERROR &&
9138
"Failed to Validate"}
92-
{props.validationState.status === ValidationStatus.CALL_ERROR &&
39+
{validationState.status === ValidationStatus.CALL_ERROR &&
9340
"Dev service loading"}
94-
{props.validationState.status !== ValidationStatus.CALL_ERROR &&
41+
{validationState.status !== ValidationStatus.CALL_ERROR &&
9542
!upToDate &&
9643
"Validation not run"}
9744
</div>
9845
<Button
99-
variant="contained"
100-
startIcon={<PlayCircleFilledIcon />}
101-
className={TourElementClass.run}
10246
disabled={
103-
props.developerService.state.status !== "ready" ||
104-
props.validationState.status === ValidationStatus.RUNNING
47+
developerService.state.status !== "ready" ||
48+
validationState.status === ValidationStatus.RUNNING
10549
}
106-
onClick={props.conductValidation}
50+
onClick={conductValidation}
51+
variant="outline"
10752
>
53+
<CirclePlay />
10854
Run
10955
</Button>
11056
</div>
11157
);
11258
}
11359

114-
export function ValidationIcon(props: {
115-
small?: boolean;
60+
export function ValidationIcon({
61+
datastore,
62+
validationState,
63+
className,
64+
}: {
11665
datastore: DataStore;
11766
validationState: ValidationState;
67+
className: string;
11868
}) {
119-
const classes = useStyles();
12069
if (
121-
props.validationState.status === ValidationStatus.VALIDATED &&
122-
props.datastore.currentIndex() ===
123-
props.validationState.validationDatastoreIndex
70+
validationState.status === ValidationStatus.VALIDATED &&
71+
datastore.currentIndex() === validationState.validationDatastoreIndex
12472
) {
125-
return (
126-
<span className={classes.gcm}>
127-
<CheckCircleIcon />
128-
</span>
129-
);
73+
return <CheckCircle className={className} fill="green" />;
13074
}
13175

13276
if (
133-
props.validationState.status === ValidationStatus.VALIDATION_ERROR &&
134-
props.datastore.currentIndex() ===
135-
props.validationState.validationDatastoreIndex
77+
validationState.status === ValidationStatus.VALIDATION_ERROR &&
78+
datastore.currentIndex() === validationState.validationDatastoreIndex
13679
) {
137-
return (
138-
<span className={classes.rem}>
139-
<ErrorIcon />
140-
</span>
141-
);
80+
return <CircleX className={className} fill="red" />;
14281
}
14382

144-
return (
145-
<span className={classes.gray}>
146-
<CheckCircleOutlineIcon />
147-
</span>
148-
);
83+
return <CheckCircle className={className} />;
14984
}

0 commit comments

Comments
 (0)