2020-11-29 18:26:42 -07:00
|
|
|
import {
|
|
|
|
Modal,
|
|
|
|
Button,
|
|
|
|
ModalBody,
|
|
|
|
ModalHeader,
|
|
|
|
ModalFooter,
|
|
|
|
ModalOverlay,
|
|
|
|
ModalContent,
|
|
|
|
useDisclosure,
|
|
|
|
ModalCloseButton,
|
|
|
|
} from '@chakra-ui/react';
|
|
|
|
import { If, Markdown } from '~/components';
|
|
|
|
import { useConfig, useColorValue } from '~/context';
|
2020-12-20 01:21:24 -07:00
|
|
|
import { useGreeting, useOpposingColor } from '~/hooks';
|
2020-11-29 18:26:42 -07:00
|
|
|
|
|
|
|
import type { TGreeting } from './types';
|
|
|
|
|
|
|
|
export const Greeting = (props: TGreeting) => {
|
|
|
|
const { web, content } = useConfig();
|
|
|
|
const { isOpen, onClose } = useDisclosure();
|
2020-12-20 01:21:24 -07:00
|
|
|
const [greetingAck, setGreetingAck] = useGreeting();
|
2020-11-29 18:26:42 -07:00
|
|
|
|
2020-12-20 01:21:24 -07:00
|
|
|
const bg = useColorValue('white', 'gray.800');
|
|
|
|
const color = useOpposingColor(bg);
|
2020-11-29 18:26:42 -07:00
|
|
|
|
2020-12-20 01:21:24 -07:00
|
|
|
function handleClose(ack: boolean = false): void {
|
|
|
|
if (web.greeting.required && !greetingAck && !ack) {
|
|
|
|
setGreetingAck(false);
|
|
|
|
} else if (web.greeting.required && !greetingAck && ack) {
|
|
|
|
setGreetingAck();
|
|
|
|
onClose();
|
|
|
|
} else if (web.greeting.required && greetingAck) {
|
|
|
|
onClose();
|
|
|
|
} else if (!web.greeting.required) {
|
|
|
|
setGreetingAck();
|
|
|
|
onClose();
|
|
|
|
}
|
2020-11-29 18:26:42 -07:00
|
|
|
}
|
|
|
|
return (
|
|
|
|
<Modal
|
2020-12-20 01:21:24 -07:00
|
|
|
size="lg"
|
2020-11-29 18:26:42 -07:00
|
|
|
isCentered
|
2020-12-20 01:21:24 -07:00
|
|
|
onClose={handleClose}
|
|
|
|
motionPreset="slideInBottom"
|
|
|
|
closeOnEsc={web.greeting.required}
|
|
|
|
isOpen={!greetingAck ? true : isOpen}
|
|
|
|
closeOnOverlayClick={web.greeting.required}>
|
2020-11-29 18:26:42 -07:00
|
|
|
<ModalOverlay />
|
|
|
|
<ModalContent
|
|
|
|
py={4}
|
|
|
|
bg={bg}
|
|
|
|
color={color}
|
|
|
|
borderRadius="md"
|
|
|
|
maxW={{ base: '95%', md: '75%' }}
|
2020-12-20 01:21:24 -07:00
|
|
|
{...props}>
|
2020-11-29 18:26:42 -07:00
|
|
|
<ModalHeader>{web.greeting.title}</ModalHeader>
|
|
|
|
<If c={!web.greeting.required}>
|
|
|
|
<ModalCloseButton />
|
|
|
|
</If>
|
|
|
|
<ModalBody>
|
|
|
|
<Markdown content={content.greeting} />
|
|
|
|
</ModalBody>
|
|
|
|
<ModalFooter>
|
2020-12-20 01:21:24 -07:00
|
|
|
<Button colorScheme="primary" onClick={() => handleClose(true)}>
|
2020-11-29 18:26:42 -07:00
|
|
|
{web.greeting.button}
|
|
|
|
</Button>
|
|
|
|
</ModalFooter>
|
|
|
|
</ModalContent>
|
|
|
|
</Modal>
|
|
|
|
);
|
|
|
|
};
|