-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathToggleReleaseButton.js
75 lines (69 loc) · 2.15 KB
/
ToggleReleaseButton.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import {Button, CircularProgress, Typography} from "@material-ui/core";
import {Check, History} from "@mui/icons-material";
import PropTypes from "prop-types";
import React from "react";
import {RELEASE_STATES} from "../../../utils/releaseStates";
import useStyles from "./styles";
const toggleIsDisabled = {
[RELEASE_STATES.SCHEDULED]: true,
[RELEASE_STATES.CODE_FREEZE]: false,
[RELEASE_STATES.RELEASE_DAY]: false,
[RELEASE_STATES.RELEASED]: false,
[RELEASE_STATES.DELAYED]: false,
[RELEASE_STATES.ERROR]: true,
};
/**
* A button that toggles the release state between released and delayed.
*
* @param {Object} release - Release object
* @param {string} release.state - Release state.
* @param {boolean} toggling - Whether the release state is being toggled.
* @param {Function} handleReleasedToggle - Function to handle released toggle
* @return {JSX.Element} Rendered component.
*/
function ToggleReleaseButton({release, toggling, handleReleasedToggle}) {
const classes = useStyles();
let buttonText; let buttonIcon; let buttonClass;
switch (release.state) {
case RELEASE_STATES.RELEASED:
buttonText = "Mark as Delayed";
buttonIcon = <History />;
buttonClass = classes.unemphasizedButton;
break;
default:
buttonText = "Mark as Released";
buttonIcon = <Check />;
buttonClass = classes.emphasizedButton;
break;
}
return (
<Button
size={"small"}
variant={"contained"}
disabled={toggleIsDisabled[release.state]}
onClick={() => handleReleasedToggle(release)}
className={buttonClass}
startIcon={
toggling ?
<CircularProgress
size={20}
color="white"
className={classes.releaseButtonIcon}
/> :
buttonIcon
}
>
<Typography className={classes.releaseButtonText}>
{buttonText}
</Typography>
</Button>
);
}
ToggleReleaseButton.propTypes = {
release: PropTypes.shape({
state: PropTypes.string.isRequired,
}).isRequired,
toggling: PropTypes.bool.isRequired,
handleReleasedToggle: PropTypes.func.isRequired,
};
export default ToggleReleaseButton;