import React, { useCallback } from 'react'
import styled from 'styled-components'
import { Button, SecondaryButton } from '../inputs/Button'
/**
* DialogContainer used as container element for DialogHeader, DialogContent and DialogBottomNav.
*
* @type {Styled component}
*/
const DialogContainer = styled.form`
display: flex;
flex-direction: column;
border-radius: 4px;
background-color: #282c31;
max-width: 800px;
min-width: 250px;
min-height: 150px;
max-height: 80vh;
`
/**
* DialogHeader used for providing styles to header text.
*
* @type {Styled component}
*/
const DialogHeader = (styled as any).div`
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 0 8px;
font-size: 12px;
overflow: hidden;
height: 32px;
background: black;
border-top-left-radius: inherit;
border-top-right-radius: inherit;
color: white;
> * {
display: flex;
align-items: center;
}
`
/**
* DialogContent used to provide styles for dialog body content.
*
* @type {Styled component}
*/
export const DialogContent = (styled as any).div`
color: var(--textColor);
display: flex;
flex: 1;
flex-direction: row;
/* This forces firefox to give the contents a proper height. */
overflow: hidden;
padding: 8px;
min-height: 100px;
h1 {
font-size: 2em;
color: var(--textColor);
margin-bottom: 16px;
}
p {
margin-bottom: 12px;
line-height: 1.5em;
}
`
/**
* DialogBottomNav used to provide styles for bottom nav of Dialog component.
*
* @type {Styled component}
*/
const DialogBottomNav = (styled as any).div`
display: flex;
padding: 8px;
margin: auto;
margin-bottom: 10px;
a {
color: var(--textColor);
}
button {
min-width: 84px;
}
& > * {
margin: 0 8px;
}
`
/**
* declaring props for Dialog component.
*
* @type {Props}
*/
interface Props {
tag?
title?
bottomNav?
children?
cancelLabel?
confirmLabel?
onCancel?
onConfirm?
}
/**
* Dialog used to render view for Dialog which contains form.
*
* @param {Props}
* @constructor
*/
const Dialog = ({ tag, bottomNav, children, cancelLabel, confirmLabel, onCancel, onConfirm }: Props) => {
// callback function used to handle form submit
const onSubmitForm = useCallback(
(e) => {
e.preventDefault()
if (onConfirm) {
onConfirm(e)
}
},
[onConfirm]
)
const button = (
)
// returning view for Dialog component
return (
{children}
{(onConfirm || onCancel || bottomNav) && (
{bottomNav}
{onCancel && {cancelLabel || 'Cancel'}}
{onConfirm && button}
)}
)
}
export default Dialog