123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- import React, { useEffect } from 'react';
- import {
- makeStyles,
- Theme,
- createStyles,
- Typography,
- Button,
- IconButton,
- Dialog,
- DialogActions,
- DialogContent,
- DialogTitle,
- } from '@material-ui/core';
- import CloseIcon from '@material-ui/icons/Close';
- import CachedIcon from '@material-ui/icons/Cached';
- import ConditionGroup from './ConditionGroup';
- import CopyBtn from './CopyButton';
- import DialogTemplate from '../customDialog/DialogTemplate';
- import { DialogProps } from './Types';
- const AdvancedDialog = (props: DialogProps) => {
- const {
- open,
- onClose,
- onSubmit,
- onReset,
- onCancel,
- handleConditions,
- conditions: flatConditions,
- isLegal,
- expression: filterExpression,
- title,
- fields,
- ...others
- } = props;
- const { addCondition } = handleConditions;
- const classes = useStyles();
- useEffect(() => {
- flatConditions.length === 0 && addCondition();
- // Only need add one condition after dialog's first mount.
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
- // const childRef: any = useRef();
- return (
- <>
- {/* <Dialog
- onClose={onClose}
- aria-labelledby="customized-dialog-title"
- open={open}
- maxWidth="xl"
- className={classes.wrapper}
- {...others}
- >
- <DialogTitle className={classes.dialogTitle} disableTypography>
- <Typography variant="h5" component="h2">
- {title}
- </Typography>
- <IconButton
- aria-label="close"
- className={classes.closeButton}
- onClick={onCancel}
- size="small"
- >
- <CloseIcon />
- </IconButton>
- </DialogTitle>
- <DialogContent>
- <div
- className={`${classes.expResult} ${
- !isLegal && 'disable-exp'
- } testcopy`}
- >
- {`${isLegal ? filterExpression : 'Filter Expression'}`}
- {isLegal && (
- <CopyBtn label="copy expression" value={filterExpression} />
- )}
- </div>
- <div className={classes.expWrapper}>
- <ConditionGroup
- // ref={childRef}
- fields={fields}
- handleConditions={handleConditions}
- conditions={flatConditions}
- />
- </div>
- </DialogContent>
- <DialogActions className={classes.dialogActions}>
- <Button
- onClick={onReset}
- color="primary"
- className={classes.resetBtn}
- size="small"
- >
- <CachedIcon />
- Reset
- </Button>
- <div>
- <Button
- autoFocus
- onClick={onCancel}
- color="primary"
- className={classes.cancelBtn}
- >
- Cancel
- </Button>
- <Button
- onClick={onSubmit}
- variant="contained"
- color="primary"
- className={classes.applyBtn}
- disabled={!isLegal}
- >
- Apply Filters
- </Button>
- </div>
- </DialogActions>
- </Dialog> */}
- <DialogTemplate
- title={title}
- handleClose={onClose}
- showCloseIcon
- handleConfirm={onSubmit}
- confirmLabel="Apply Filters"
- confirmDisabled={!isLegal}
- handleCancel={onCancel}
- cancelLabel="Cancel"
- leftActions={
- <Button
- onClick={onReset}
- color="primary"
- className={classes.resetBtn}
- size="small"
- >
- <CachedIcon />
- Reset
- </Button>
- }
- >
- <div
- className={`${classes.expResult} ${
- !isLegal && 'disable-exp'
- } testcopy`}
- >
- {`${isLegal ? filterExpression : 'Filter Expression'}`}
- {isLegal && (
- <CopyBtn label="copy expression" value={filterExpression} />
- )}
- </div>
- <div className={classes.expWrapper}>
- <ConditionGroup
- // ref={childRef}
- fields={fields}
- handleConditions={handleConditions}
- conditions={flatConditions}
- />
- </div>
- </DialogTemplate>
- </>
- );
- };
- AdvancedDialog.defaultProps = {
- open: false,
- onClose: () => {},
- onSubmit: () => {},
- title: 'Advanced Filter',
- fields: [],
- onReset: () => {},
- onCancel: () => {},
- handleConditions: {},
- conditions: [],
- isLegal: false,
- expression: '',
- };
- AdvancedDialog.displayName = 'AdvancedDialog';
- const useStyles = makeStyles((theme: Theme) =>
- createStyles({
- root: {},
- wrapper: {
- '& .disable-exp': {
- userSelect: 'none',
- color: '#AEAEBB',
- },
- },
- closeButton: {
- color: 'black',
- },
- dialogTitle: {
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'space-between',
- },
- dialogActions: {
- justifyContent: 'space-between',
- },
- resetBtn: {},
- cancelBtn: {
- marginRight: '32px',
- },
- applyBtn: {
- backgroundColor: '#06AFF2',
- color: 'white',
- },
- copyButton: {
- borderRadius: '0',
- },
- expResult: {
- background: '#F9F9F9',
- borderRadius: '8px',
- display: 'flex',
- justifyContent: 'space-between',
- alignItems: 'center',
- minHeight: '40px',
- marginBottom: '16px',
- padding: '0 16px',
- fontFamily: 'Source Code Pro',
- fontStyle: 'normal',
- fontWeight: 'normal',
- fontSize: '16px',
- lineHeight: '24px',
- },
- expWrapper: {
- background: '#F9F9F9',
- borderRadius: '8px',
- minWidth: '480px',
- minHeight: '104px',
- padding: '12px',
- },
- })
- );
- export default AdvancedDialog;
|