Skip to content

Commit 5fd4609

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

File tree

1 file changed

+43
-113
lines changed

1 file changed

+43
-113
lines changed
Lines changed: 43 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,149 +1,79 @@
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";
6+
import { cn } from "@/lib/utils";
147

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: {
8+
export function ValidateButton({
9+
conductValidation,
10+
datastore,
11+
validationState,
12+
developerService,
13+
}: {
5514
conductValidation: () => void;
5615
datastore: DataStore;
5716
validationState: ValidationState;
5817
developerService: DeveloperService;
5918
}) {
60-
const validated =
61-
props.validationState.status === ValidationStatus.VALIDATED ||
62-
props.validationState.status === ValidationStatus.VALIDATION_ERROR;
63-
const upToDate =
64-
validated &&
65-
props.validationState.validationDatastoreIndex ===
66-
props.datastore.currentIndex();
67-
68-
const classes = useStyles();
19+
const upToDate = validationState.validationDatastoreIndex === datastore.currentIndex();
20+
const valid = upToDate && validationState.status === ValidationStatus.VALIDATED
21+
const invalid = upToDate && validationState.status === ValidationStatus.VALIDATION_ERROR;
22+
const loading = validationState.status === ValidationStatus.CALL_ERROR
23+
const notRun = validationState.status !== ValidationStatus.CALL_ERROR && !upToDate
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 justify-between">
27+
<div className={cn("flex flex-row px-3 mr-2 w-48 items-center bg-zinc-700 rounded-xs",
28+
{"bg-emerald-900": valid,
29+
"bg-pink-900": invalid})}>
8230
<ValidationIcon
83-
datastore={props.datastore}
84-
validationState={props.validationState}
31+
datastore={datastore}
32+
validationState={validationState}
33+
className="pr-2"
8534
/>
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"}
35+
{valid && "Validated!"}
36+
{invalid && "Failed to Validate"}
37+
{loading && "Dev service loading"}
38+
{notRun && "Validation not run"}
9739
</div>
9840
<Button
99-
variant="contained"
100-
startIcon={<PlayCircleFilledIcon />}
101-
className={TourElementClass.run}
10241
disabled={
103-
props.developerService.state.status !== "ready" ||
104-
props.validationState.status === ValidationStatus.RUNNING
42+
developerService.state.status !== "ready" ||
43+
validationState.status === ValidationStatus.RUNNING
10544
}
106-
onClick={props.conductValidation}
45+
onClick={conductValidation}
46+
variant="outline"
10747
>
48+
<CirclePlay />
10849
Run
10950
</Button>
11051
</div>
11152
);
11253
}
11354

114-
export function ValidationIcon(props: {
115-
small?: boolean;
55+
export function ValidationIcon({
56+
datastore,
57+
validationState,
58+
className,
59+
}: {
11660
datastore: DataStore;
11761
validationState: ValidationState;
62+
className: string;
11863
}) {
119-
const classes = useStyles();
12064
if (
121-
props.validationState.status === ValidationStatus.VALIDATED &&
122-
props.datastore.currentIndex() ===
123-
props.validationState.validationDatastoreIndex
65+
validationState.status === ValidationStatus.VALIDATED &&
66+
datastore.currentIndex() === validationState.validationDatastoreIndex
12467
) {
125-
return (
126-
<span className={classes.gcm}>
127-
<CheckCircleIcon />
128-
</span>
129-
);
68+
return <CheckCircle className={className} fill="green" />;
13069
}
13170

13271
if (
133-
props.validationState.status === ValidationStatus.VALIDATION_ERROR &&
134-
props.datastore.currentIndex() ===
135-
props.validationState.validationDatastoreIndex
72+
validationState.status === ValidationStatus.VALIDATION_ERROR &&
73+
datastore.currentIndex() === validationState.validationDatastoreIndex
13674
) {
137-
return (
138-
<span className={classes.rem}>
139-
<ErrorIcon />
140-
</span>
141-
);
75+
return <CircleX className={className} fill="red" />;
14276
}
14377

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

0 commit comments

Comments
 (0)