import React from "react"; import { Box, IconButton, HStack, Link as ChakraLink, Tooltip, useColorMode, } from "@chakra-ui/react"; import { EmailIcon, MoonIcon, SunIcon } from "@chakra-ui/icons"; import { SiGithub } from "react-icons/si"; import { Link as RouterLink, useRouteMatch } from "react-router-dom"; function GlobalFooter() { const classicDTIUrl = useClassicDTIUrl(); return ( <Box as="footer" display="flex" alignItems="flex-start"> <Box // This empty box grows at the same rate as the box on the right, so // the middle box will be centered, if there's space! flex="1 0 0" /> <Box textAlign="center" fontSize="xs"> <HStack spacing="4" justifyContent="center"> <ChakraLink href="https://impress.openneo.net/terms"> Terms of Use </ChakraLink> <ChakraLink as={RouterLink} to="/privacy"> Privacy Policy </ChakraLink> <ChakraLink href={classicDTIUrl}>Classic DTI</ChakraLink> </HStack> <Box as="p" opacity="0.75"> Images © 2000–{new Date().getFullYear()} Neopets, Inc. All Rights Reserved. Used With Permission. </Box> </Box> <HStack flex="1 0 0" spacing="2" marginLeft="3" justifyContent="flex-end" opacity="0.75" transition="opacity 0.2s" _hover={{ opacity: "1" }} _focusWithin={{ opacity: "1" }} // This will center our content against the top two lines of text to // our left, which ends up feeling like the right visual balance, even // when the text wraps to 3 lines on mobile. // 2 lines at 1.5 line height = 3em. fontSize="xs" minHeight="3em" > <Tooltip label="Email"> <IconButton as="a" href="mailto:matchu@openneo.net" size="sm" variant="outline" aria-label="Email" icon={<EmailIcon />} /> </Tooltip> <Tooltip label="GitHub"> <IconButton as="a" href="https://github.com/matchu/impress-2020" size="sm" variant="outline" aria-label="GitHub" icon={<SiGithub />} /> </Tooltip> <ColorModeButton /> </HStack> </Box> ); } function ColorModeButton() { const { colorMode, toggleColorMode } = useColorMode(); const label = colorMode === "light" ? "Dark mode" : "Light mode"; return ( <Tooltip label={label}> <IconButton size="sm" variant="outline" aria-label={label} icon={colorMode === "light" ? <MoonIcon /> : <SunIcon />} onClick={toggleColorMode} /> </Tooltip> ); } function useClassicDTIUrl() { const itemPageMatch = useRouteMatch("/items/:itemId"); const userItemsPageMatch = useRouteMatch("/user/:userId/items"); const modelingPageMatch = useRouteMatch("/modeling"); if (itemPageMatch) { const { itemId } = itemPageMatch.params; return `https://impress.openneo.net/items/${itemId}`; } if (userItemsPageMatch) { const { userId } = userItemsPageMatch.params; return `https://impress.openneo.net/user/${userId}/closet`; } if (modelingPageMatch) { return "https://impress.openneo.net/modeling"; } return "https://impress.openneo.net/"; } export default GlobalFooter;