151 lines
4.8 KiB
TypeScript
151 lines
4.8 KiB
TypeScript
/*
|
|
* Copyright (c) All respective contributors to the Peridot Project. All rights reserved.
|
|
* Copyright (c) 2021-2022 Rocky Enterprise Software Foundation, Inc. All rights reserved.
|
|
* Copyright (c) 2021-2022 Ctrl IQ, Inc. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
import { MoonIcon, SunIcon } from '@chakra-ui/icons';
|
|
import {
|
|
Box,
|
|
HStack,
|
|
Text,
|
|
Link as ChakraLink,
|
|
useColorMode,
|
|
IconButton,
|
|
useColorModeValue,
|
|
DarkMode,
|
|
} from '@chakra-ui/react';
|
|
import { RESFLogo } from 'common/ui/RESFLogo';
|
|
import React from 'react';
|
|
import { Route, Switch } from 'react-router';
|
|
import { Link } from 'react-router-dom';
|
|
|
|
import { COLOR_RESF_BLUE, COLOR_RESF_GREEN } from '../styles';
|
|
import { Overview } from './Overview';
|
|
import { ShowErrata } from './ShowErrata';
|
|
|
|
export const Root = () => {
|
|
const { colorMode, toggleColorMode } = useColorMode();
|
|
|
|
const SwitchIcon = useColorModeValue(MoonIcon, SunIcon);
|
|
const bodyBg = useColorModeValue('gray.100', 'gray.900');
|
|
|
|
return (
|
|
<Box
|
|
display="flex"
|
|
width="100%"
|
|
minHeight="100vh"
|
|
flexDirection="column"
|
|
alignItems="stretch"
|
|
>
|
|
<Box
|
|
as="header"
|
|
background={`linear-gradient(to bottom right, ${COLOR_RESF_GREEN}, ${COLOR_RESF_BLUE})`}
|
|
display="flex"
|
|
flexDirection="row"
|
|
alignItems="center"
|
|
justifyContent="space-between"
|
|
py="1"
|
|
px={4}
|
|
>
|
|
<Link to="/" className="no-underline text-white">
|
|
<HStack flexGrow={1} height="90%" spacing="2">
|
|
<RESFLogo className="fill-current text-white" />
|
|
<Text
|
|
as="h1"
|
|
borderLeft="1px solid"
|
|
pl="2"
|
|
lineHeight="30px"
|
|
fontSize="xl"
|
|
fontWeight="300"
|
|
color="white"
|
|
whiteSpace="nowrap"
|
|
>
|
|
Product Errata
|
|
</Text>
|
|
</HStack>
|
|
</Link>
|
|
<DarkMode>
|
|
<IconButton
|
|
size="md"
|
|
fontSize="lg"
|
|
aria-label={`Switch to ${
|
|
colorMode === 'light' ? 'dark' : 'light'
|
|
} mode`}
|
|
variant="ghost"
|
|
onClick={toggleColorMode}
|
|
icon={<SwitchIcon />}
|
|
/>
|
|
</DarkMode>
|
|
</Box>
|
|
<Box as="main" flexGrow={1} overflow="auto" background={bodyBg}>
|
|
<Switch>
|
|
<Route path="/" exact component={Overview} />
|
|
<Route path="/:id" component={ShowErrata} />
|
|
</Switch>
|
|
</Box>
|
|
<Box
|
|
as="footer"
|
|
px="4"
|
|
// backgroundColor="#10859E"
|
|
background={`linear-gradient(to top left, ${COLOR_RESF_GREEN}, ${COLOR_RESF_BLUE})`}
|
|
color="white"
|
|
display="flex"
|
|
height="50px"
|
|
>
|
|
<ChakraLink
|
|
href="/api/v2/advisories:rss"
|
|
isExternal
|
|
display="flex"
|
|
alignItems="center"
|
|
my="auto"
|
|
>
|
|
<Box
|
|
as="svg"
|
|
viewBox="0 0 24 24"
|
|
width="18px"
|
|
height="18px"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
strokeWidth="2"
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
display="block"
|
|
mr={1.5}
|
|
>
|
|
<path d="M4 11a9 9 0 019 9M4 4a16 16 0 0116 16" />
|
|
<circle cx="5" cy="19" r="1" />
|
|
</Box>
|
|
<span>RSS</span>
|
|
</ChakraLink>
|
|
</Box>
|
|
</Box>
|
|
);
|
|
};
|