diff options
author | Michael Muré <batolettre@gmail.com> | 2021-05-27 11:08:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-27 11:08:53 +0200 |
commit | 76bdac7d11fd4f5d9cb52cd520c6b81f8d12665f (patch) | |
tree | 764d9a460a6dc95fdb88569c1a87e1210ee5e10c /webui/src/components/CloseBugButton/index.tsx | |
parent | 2e9c83a08366ec20dd60e7cce3306650a0ec7e1f (diff) | |
parent | e867663bf01841684da6c74a7bcac478cf99655a (diff) | |
download | git-bug-76bdac7d11fd4f5d9cb52cd520c6b81f8d12665f.tar.gz |
Merge pull request #682 from GlancingMind/webui-comment-and-reopen-bug
WebUI: Support comment-and-reopen a bug in one step
Diffstat (limited to 'webui/src/components/CloseBugButton/index.tsx')
-rw-r--r-- | webui/src/components/CloseBugButton/index.tsx | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/webui/src/components/CloseBugButton/index.tsx b/webui/src/components/CloseBugButton/index.tsx new file mode 100644 index 00000000..bb154ea7 --- /dev/null +++ b/webui/src/components/CloseBugButton/index.tsx @@ -0,0 +1,67 @@ +import React from 'react'; + +import Button from '@material-ui/core/Button'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'; + +import { BugFragment } from 'src/pages/bug/Bug.generated'; +import { TimelineDocument } from 'src/pages/bug/TimelineQuery.generated'; + +import { useCloseBugMutation } from './CloseBug.generated'; + +const useStyles = makeStyles((theme: Theme) => ({ + closeIssueIcon: { + color: theme.palette.secondary.dark, + paddingTop: '0.1rem', + }, +})); + +interface Props { + bug: BugFragment; + disabled?: boolean; +} + +function CloseBugButton({ bug, disabled }: Props) { + const [closeBug, { loading, error }] = useCloseBugMutation(); + const classes = useStyles(); + + function closeBugAction() { + closeBug({ + variables: { + input: { + prefix: bug.id, + }, + }, + refetchQueries: [ + // TODO: update the cache instead of refetching + { + query: TimelineDocument, + variables: { + id: bug.id, + first: 100, + }, + }, + ], + awaitRefetchQueries: true, + }); + } + + if (loading) return <CircularProgress />; + if (error) return <div>Error</div>; + + return ( + <div> + <Button + variant="contained" + onClick={() => closeBugAction()} + disabled={bug.status === 'CLOSED' || disabled} + startIcon={<ErrorOutlineIcon className={classes.closeIssueIcon} />} + > + Close bug + </Button> + </div> + ); +} + +export default CloseBugButton; |