UNPKG

higlass

Version:

HiGlass Hi-C / genomic / large data viewer

92 lines (84 loc) 2.11 kB
// @ts-nocheck import clsx from 'clsx'; import PropTypes from 'prop-types'; import React from 'react'; import Button from './Button'; import Cross from './Cross'; import Modal from './Modal'; import withModal from './hocs/with-modal'; import classes from '../styles/Dialog.module.scss'; function Dialog({ cancelTitle = 'Cancel', hide = false, maxHeight = false, okayOnly = false, okayTitle = 'Ok', modal, onCancel, onOkay, title, cancelShortcut, okayShortcut, children, }) { const handleCancel = () => { modal.close(); if (onCancel) onCancel(); }; const handleOkay = () => { modal.close(); if (onOkay) onOkay(); }; return ( <Modal closeButton={false} hide={hide} maxHeight={maxHeight}> <> <header className={classes['dialog-header']}> <h3>{title}</h3> <Button onClick={handleCancel}> <Cross /> </Button> </header> {maxHeight ? ( <main className={clsx(maxHeight && classes['dialog-main-max-height'])} > {children} </main> ) : ( <main>{children}</main> )} <footer className={ classes[maxHeight ? 'dialog-footer-max-height' : 'dialog-footer'] } > {okayOnly ? ( <div /> ) : ( <Button onClick={handleCancel} shortcut={cancelShortcut}> {cancelTitle} </Button> )} <Button onClick={handleOkay} shortcut={okayShortcut}> {okayTitle} </Button> </footer> </> </Modal> ); } Dialog.propTypes = { cancelShortcut: PropTypes.string, cancelTitle: PropTypes.string, children: PropTypes.object, hide: PropTypes.bool, maxHeight: PropTypes.bool, modal: PropTypes.object.isRequired, okayShortcut: PropTypes.string, okayTitle: PropTypes.string, okayOnly: PropTypes.bool, onCancel: PropTypes.func.isRequired, onOkay: PropTypes.func.isRequired, title: PropTypes.string.isRequired, }; export default withModal(Dialog);