Skip to content

Commit 5fbe5bc

Browse files
committed
chore: refactor validation button
1 parent f8fa704 commit 5fbe5bc

File tree

1 file changed

+43
-112
lines changed

1 file changed

+43
-112
lines changed
Lines changed: 43 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,149 +1,80 @@
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
}) {
60-
const validated =
61-
props.validationState.status === ValidationStatus.VALIDATED ||
62-
props.validationState.status === ValidationStatus.VALIDATION_ERROR;
6318
const upToDate =
64-
validated &&
65-
props.validationState.validationDatastoreIndex ===
66-
props.datastore.currentIndex();
67-
68-
const classes = useStyles();
19+
validationState.validationDatastoreIndex === datastore.currentIndex();
20+
const valid =
21+
upToDate && validationState.status === ValidationStatus.VALIDATED;
22+
const invalid =
23+
upToDate && validationState.status === ValidationStatus.VALIDATION_ERROR;
24+
const loading = validationState.status === ValidationStatus.CALL_ERROR;
25+
const notRun =
26+
validationState.status !== ValidationStatus.CALL_ERROR && !upToDate;
6927

7028
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-
>
29+
<div className="flex flex-row justify-between">
30+
<div className="flex flex-row px-3 mr-2 w-48 items-center bg-zinc-700 rounded-xs">
8231
<ValidationIcon
83-
datastore={props.datastore}
84-
validationState={props.validationState}
32+
datastore={datastore}
33+
validationState={validationState}
34+
className="pr-2"
8535
/>
86-
{upToDate &&
87-
props.validationState.status === ValidationStatus.VALIDATED &&
88-
"Validated!"}
89-
{upToDate &&
90-
props.validationState.status === ValidationStatus.VALIDATION_ERROR &&
91-
"Failed to Validate"}
92-
{props.validationState.status === ValidationStatus.CALL_ERROR &&
93-
"Dev service loading"}
94-
{props.validationState.status !== ValidationStatus.CALL_ERROR &&
95-
!upToDate &&
96-
"Validation not run"}
36+
{valid && "Validated!"}
37+
{invalid && "Failed to Validate"}
38+
{loading && "Dev service loading"}
39+
{notRun && "Validation not run"}
9740
</div>
9841
<Button
99-
variant="contained"
100-
startIcon={<PlayCircleFilledIcon />}
101-
className={TourElementClass.run}
10242
disabled={
103-
props.developerService.state.status !== "ready" ||
104-
props.validationState.status === ValidationStatus.RUNNING
43+
developerService.state.status !== "ready" ||
44+
validationState.status === ValidationStatus.RUNNING
10545
}
106-
onClick={props.conductValidation}
46+
onClick={conductValidation}
47+
variant="outline"
10748
>
49+
<CirclePlay />
10850
Run
10951
</Button>
11052
</div>
11153
);
11254
}
11355

114-
export function ValidationIcon(props: {
115-
small?: boolean;
56+
export function ValidationIcon({
57+
datastore,
58+
validationState,
59+
className,
60+
}: {
11661
datastore: DataStore;
11762
validationState: ValidationState;
63+
className: string;
11864
}) {
119-
const classes = useStyles();
12065
if (
121-
props.validationState.status === ValidationStatus.VALIDATED &&
122-
props.datastore.currentIndex() ===
123-
props.validationState.validationDatastoreIndex
66+
validationState.status === ValidationStatus.VALIDATED &&
67+
datastore.currentIndex() === validationState.validationDatastoreIndex
12468
) {
125-
return (
126-
<span className={classes.gcm}>
127-
<CheckCircleIcon />
128-
</span>
129-
);
69+
return <CheckCircle className={className} fill="green" />;
13070
}
13171

13272
if (
133-
props.validationState.status === ValidationStatus.VALIDATION_ERROR &&
134-
props.datastore.currentIndex() ===
135-
props.validationState.validationDatastoreIndex
73+
validationState.status === ValidationStatus.VALIDATION_ERROR &&
74+
datastore.currentIndex() === validationState.validationDatastoreIndex
13675
) {
137-
return (
138-
<span className={classes.rem}>
139-
<ErrorIcon />
140-
</span>
141-
);
76+
return <CircleX className={className} fill="red" />;
14277
}
14378

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

0 commit comments

Comments
 (0)