123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- import { useEffect } from 'react';
- import { useTranslation } from 'react-i18next';
- import {
- makeStyles,
- Theme,
- createStyles,
- Typography,
- IconButton,
- Dialog,
- DialogActions,
- DialogContent,
- DialogTitle,
- } from '@material-ui/core';
- import CustomButton from '../customButton/CustomButton';
- import ConditionGroup from './ConditionGroup';
- import icons from '../icons/Icons';
- import CopyBtn from './CopyButton';
- // import DialogTemplate from '../customDialog/DialogTemplate';
- import { DialogProps } from './Types';
- const AdvancedDialog = (props: DialogProps) => {
- // i18n
- const { t: searchTrans } = useTranslation('search');
- const { t: btnTrans } = useTranslation('btn');
- const {
- open = false,
- onClose,
- onSubmit,
- onReset,
- onCancel,
- handleConditions = {},
- conditions: flatConditions = [],
- isLegal = false,
- expression: filterExpression = '',
- title = searchTrans('advancedFilter'),
- fields = [],
- ...others
- } = props;
- const { addCondition } = handleConditions;
- const classes = useStyles();
- const ResetIcon = icons.refresh;
- const CloseIcon = icons.clear;
- useEffect(() => {
- flatConditions.length === 0 && addCondition();
- // Only need add one condition after dialog's first mount.
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
- const shouldSowPlaceholder: boolean = !isLegal || !filterExpression;
- 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>
- <div
- className={`${classes.expResult} ${
- shouldSowPlaceholder && 'disable-exp'
- }`}
- >
- {`${shouldSowPlaceholder ? 'Filter Expression' : filterExpression}`}
- {!shouldSowPlaceholder && (
- <CopyBtn label="copy expression" value={filterExpression} />
- )}
- </div>
- <DialogContent>
- <div className={classes.expWrapper}>
- <ConditionGroup
- fields={fields}
- handleConditions={handleConditions}
- conditions={flatConditions}
- />
- </div>
- </DialogContent>
- <DialogActions className={classes.dialogActions}>
- <CustomButton
- onClick={onReset}
- color="primary"
- className={classes.resetBtn}
- size="small"
- startIcon={<ResetIcon />}
- >
- <Typography variant="button"> {btnTrans('reset')}</Typography>
- </CustomButton>
- <div>
- <CustomButton
- autoFocus
- onClick={onCancel}
- color="primary"
- className={classes.cancelBtn}
- >
- <Typography variant="button"> {btnTrans('cancel')}</Typography>
- </CustomButton>
- <CustomButton
- onClick={onSubmit}
- variant="contained"
- color="primary"
- className={classes.applyBtn}
- disabled={!isLegal}
- >
- {btnTrans('applyFilter')}
- </CustomButton>
- </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
- fields={fields}
- handleConditions={handleConditions}
- conditions={flatConditions}
- />
- </div>
- </DialogTemplate> */}
- </>
- );
- };
- AdvancedDialog.displayName = 'AdvancedDialog';
- const useStyles = makeStyles((theme: Theme) =>
- createStyles({
- root: {},
- wrapper: {
- '& .disable-exp': {
- userSelect: 'none',
- color: theme.palette.attuGrey.main,
- },
- },
- closeButton: {
- color: 'black',
- },
- dialogTitle: {
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'space-between',
- },
- dialogActions: {
- justifyContent: 'space-between',
- },
- resetBtn: {},
- cancelBtn: {
- marginRight: theme.spacing(1),
- },
- applyBtn: {
- backgroundColor: theme.palette.primary.main,
- color: 'white',
- },
- copyButton: {},
- expResult: {
- background: '#F9F9F9',
- display: 'flex',
- justifyContent: 'space-between',
- alignItems: 'center',
- minHeight: '40px',
- margin: theme.spacing(1, 4),
- padding: theme.spacing(0, 2),
- fontStyle: 'normal',
- fontWeight: 'normal',
- fontSize: '16px',
- lineHeight: '24px',
- },
- expWrapper: {
- background: '#F9F9F9',
- minWidth: '480px',
- minHeight: '104px',
- padding: theme.spacing(1.5),
- },
- })
- );
- export default AdvancedDialog;
|