fix: hide search in mobile version

master
gman 2 years ago
parent 84f7187375
commit 684392e85b

@ -9,10 +9,6 @@ import { CustomFonts } from './CustomFonts';
import { KartaPage } from "./KartaPage"; import { KartaPage } from "./KartaPage";
import { Landing } from "./Landing"; import { Landing } from "./Landing";
import { Article } from "./Article"; import { Article } from "./Article";
import { HeaderSimple } from "./Header";
import { FooterLinks } from "./Footer";
import headerLinks from "./assets/header.json";
import footerLinks from "./assets/footer.json";
const router = createBrowserRouter([ const router = createBrowserRouter([
{ {
@ -42,9 +38,7 @@ function App() {
}}> }}>
<CustomFonts /> <CustomFonts />
<Box pos={"absolute"} w={"100%"} top={0}> <Box pos={"absolute"} w={"100%"} top={0}>
<HeaderSimple links={headerLinks.links} />
<RouterProvider router={router} /> <RouterProvider router={router} />
<FooterLinks data={footerLinks.data} />
</Box> </Box>
</MantineProvider> </MantineProvider>
); );

@ -1,11 +1,23 @@
import { Title, Container, rem, createStyles, TypographyStylesProvider, Image } from '@mantine/core'; import {
import { Carousel } from '@mantine/carousel'; Title,
import { useLoaderData } from 'react-router-dom'; Container,
import Markdown from 'react-markdown'; rem,
createStyles,
TypographyStylesProvider,
Image,
} from "@mantine/core";
import { Carousel } from "@mantine/carousel";
import { useLoaderData } from "react-router-dom";
import Markdown from "react-markdown";
import { HeaderSimple } from "./Header";
import { FooterLinks } from "./Footer";
import headerLinks from "./assets/header.json";
import footerLinks from "./assets/footer.json";
const useStyles = createStyles((theme) => ({ const useStyles = createStyles((theme) => ({
content: { content: {
padding: rem(30) padding: rem(30),
}, },
title: { title: {
@ -13,41 +25,55 @@ const useStyles = createStyles((theme) => ({
lineHeight: 1.2, lineHeight: 1.2,
fontWeight: 900, fontWeight: 900,
paddingBottom: rem(20), paddingBottom: rem(20),
[theme.fn.smallerThan('xs')]: { [theme.fn.smallerThan("xs")]: {
fontSize: rem(28), fontSize: rem(28),
}, },
} },
})); }));
export function Article() { export function Article() {
const articleData = useLoaderData(); const articleData = useLoaderData();
const { classes } = useStyles(); const { classes } = useStyles();
const article = articleData.data[0].attributes const article = articleData.data[0].attributes;
// console.log(articleData) // console.log(articleData)
const generateCarousel = () => { const generateCarousel = () => {
if (articleData.data[0].attributes.carousel.data) { if (articleData.data[0].attributes.carousel.data) {
return ( return (
<Carousel slideSize="70%" mih={200} mah={500} slideGap="md" loop> <Carousel slideSize="70%" mih={200} mah={500} slideGap="md" loop>
{articleData.data[0].attributes.carousel.data.map(image => <Carousel.Slide key={image.attributes.url}><Image fit='fill' mih={200} mah={500} mx="auto" radius="md" src={`https://strapi.litmusmap.ru${image.attributes.url}`} alt="Random image" /></Carousel.Slide>)} {articleData.data[0].attributes.carousel.data.map((image) => (
<Carousel.Slide key={image.attributes.url}>
<Image
fit="fill"
mih={200}
mah={500}
mx="auto"
radius="md"
src={`https://strapi.litmusmap.ru${image.attributes.url}`}
alt="Random image"
/>
</Carousel.Slide>
))}
</Carousel> </Carousel>
) );
}
} }
};
return ( return (
<>
<HeaderSimple links={headerLinks.links} />
<Container className={classes.content}> <Container className={classes.content}>
<Title order={1} className={classes.title}> <Title order={1} className={classes.title}>
{article.title} {article.title}
</Title> </Title>
<TypographyStylesProvider sx={{ '@media (prefers-color-scheme: dark)': { color: "#C1C2C5" } }}> <TypographyStylesProvider
sx={{ "@media (prefers-color-scheme: dark)": { color: "#C1C2C5" } }}
>
<Markdown>{article.content}</Markdown> <Markdown>{article.content}</Markdown>
</TypographyStylesProvider> </TypographyStylesProvider>
{generateCarousel()} {generateCarousel()}
</Container> </Container>
<FooterLinks data={footerLinks.data} />
</>
); );
} }

@ -8,7 +8,7 @@ import {
rem, rem,
Image, Image,
Menu, Menu,
Dialog, Paper,
Stack, Stack,
} from "@mantine/core"; } from "@mantine/core";
import { IconExternalLink } from "@tabler/icons-react"; import { IconExternalLink } from "@tabler/icons-react";
@ -35,7 +35,7 @@ const useStyles = createStyles((theme) => ({
}, },
}, },
warning: { mobilemenu: {
[theme.fn.largerThan("md")]: { [theme.fn.largerThan("md")]: {
display: "none", display: "none",
}, },
@ -79,8 +79,8 @@ interface HeaderSimpleProps {
links: { link: string; label: string }[]; links: { link: string; label: string }[];
} }
export function HeaderSimple({ links }: HeaderSimpleProps) { export function HeaderSimple({ links, openedMenuKarta, menuactionskarta }: HeaderSimpleProps) {
const [openedMenu, menuactions] = useDisclosure(false); const [openedMenu, menuactions] = menuactionskarta ? [openedMenuKarta, menuactionskarta] : useDisclosure(false);
const [active, setActive] = useState(""); const [active, setActive] = useState("");
const { classes, cx } = useStyles(); const { classes, cx } = useStyles();
@ -106,22 +106,12 @@ export function HeaderSimple({ links }: HeaderSimpleProps) {
return ( return (
<Header height={60}> <Header height={60}>
<Container className={classes.header}> <Container className={classes.header}>
{/* <Title order={3}><Anchor href='/' inherit={true} color='black' underline={false}>Литературные музеи России</Anchor></Title> */}
{/* <MantineLogo size={28} /> */}
<Image maw={150} src={logo} component="a" href="/" /> <Image maw={150} src={logo} component="a" href="/" />
{/* Menu for mobile */}
<Dialog {/* Menu for pc */}
opened={openedMenu} <Group spacing={5} className={classes.links}>
withCloseButton={false}
onClose={menuactions.close}
size="xs"
radius="md"
position={{ top: 70, right: 20 }}
className={classes.warning}
>
<Stack spacing={5} className={classes.linksmobile}>
<Menu shadow="md" width={200}> <Menu shadow="md" width={200}>
<Menu.Target> <Menu.Target>
<a <a
@ -179,11 +169,31 @@ export function HeaderSimple({ links }: HeaderSimpleProps) {
</Menu.Dropdown> </Menu.Dropdown>
</Menu> </Menu>
{items} {items}
</Stack> </Group>
</Dialog>
{/* Menu for pc */} <Burger
<Group spacing={5} className={classes.links}> opened={openedMenu}
onClick={menuactions.toggle}
className={classes.burger}
size="sm"
/>
</Container>
{/* Menu for mobile */}
<Paper
display={!openedMenu && 'none'}
radius={0}
style={{
position: "absolute",
top: 60,
left: 0,
right: 0,
opacity: "95%",
padding: "10px 0 10px 1rem",
zIndex: 10
}}
className={classes.mobilemenu}
>
<Group spacing={5} className={classes.linksmobile}>
<Menu shadow="md" width={200}> <Menu shadow="md" width={200}>
<Menu.Target> <Menu.Target>
<a <a
@ -242,14 +252,7 @@ export function HeaderSimple({ links }: HeaderSimpleProps) {
</Menu> </Menu>
{items} {items}
</Group> </Group>
</Paper>
<Burger
opened={openedMenu}
onClick={menuactions.toggle}
className={classes.burger}
size="sm"
/>
</Container>
</Header> </Header>
); );
} }

@ -1,4 +1,9 @@
import { Paper, Flex, ScrollArea, Autocomplete, Title } from "@mantine/core"; import { Paper, Flex, ScrollArea, Autocomplete, Title } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { HeaderSimple } from "./Header";
import { FooterLinks } from "./Footer";
import headerLinks from "./assets/header.json";
import footerLinks from "./assets/footer.json";
import { ArticleCardVertical } from "./ArticleCard"; import { ArticleCardVertical } from "./ArticleCard";
import { ArticleCardMobile } from "./ArticleCardMobile"; import { ArticleCardMobile } from "./ArticleCardMobile";
import Map, { import Map, {
@ -18,7 +23,6 @@ import plus from "./assets/plus.png";
import minus from "./assets/minus.png"; import minus from "./assets/minus.png";
import pin from "./assets/pin.png"; import pin from "./assets/pin.png";
export function KartaPage() { export function KartaPage() {
const mapRef = useRef(null); const mapRef = useRef(null);
const [initial, setInitial] = useState(null); const [initial, setInitial] = useState(null);
@ -27,6 +31,8 @@ export function KartaPage() {
const [selected, setSelected] = useState(-1); const [selected, setSelected] = useState(-1);
const [cursor, setCursor] = useState("grab"); const [cursor, setCursor] = useState("grab");
const [popupInfo, setPopupInfo] = useState(null); const [popupInfo, setPopupInfo] = useState(null);
const [openedMenu, menuactions] = useDisclosure(false);
const host = "https://strapi.litmusmap.ru"; const host = "https://strapi.litmusmap.ru";
@ -37,11 +43,12 @@ export function KartaPage() {
pinImage.onload = () => mapRef.current.addImage("pin-marker", pinImage); pinImage.onload = () => mapRef.current.addImage("pin-marker", pinImage);
const icons = initial ? ["prishvin", "ostrovskiy", "brusov"] : []; const icons = initial ? ["prishvin", "ostrovskiy", "brusov"] : [];
icons.map(i => { icons.map((i) => {
const iconImage = new Image(); const iconImage = new Image();
iconImage.src = `./markers/${i}.png` iconImage.src = `./markers/${i}.png`;
iconImage.onload = () => mapRef.current.addImage(`${i}-marker`, iconImage); iconImage.onload = () =>
}) mapRef.current.addImage(`${i}-marker`, iconImage);
});
}; };
// Load articles // Load articles
@ -49,7 +56,7 @@ export function KartaPage() {
fetch(`${host}/api/articles?populate=*`) fetch(`${host}/api/articles?populate=*`)
.then((r) => r.json()) .then((r) => r.json())
.then((d) => { .then((d) => {
console.log(d.data) console.log(d.data);
setInitial(d.data); setInitial(d.data);
setArticles(d.data); setArticles(d.data);
}); });
@ -138,6 +145,8 @@ export function KartaPage() {
}; };
return ( return (
<>
<HeaderSimple links={headerLinks.links} openedMenuKarta={openedMenu} menuactionskarta={menuactions}/>
<div style={{ position: "relative" }}> <div style={{ position: "relative" }}>
<Map <Map
ref={mapRef} ref={mapRef}
@ -232,7 +241,15 @@ export function KartaPage() {
} }
layout={{ layout={{
"icon-image": "pin-marker", "icon-image": "pin-marker",
"icon-size": ["interpolate", ["linear"], ["zoom"], 7, 0.5, 12, 1], "icon-size": [
"interpolate",
["linear"],
["zoom"],
7,
0.5,
12,
1,
],
}} }}
minzoom={7} minzoom={7}
maxzoom={12} maxzoom={12}
@ -289,14 +306,15 @@ export function KartaPage() {
<Paper <Paper
shadow={"md"} shadow={"md"}
radius={0} radius={0}
display={!openedMenu && 'none'}
style={{ style={{
position: "absolute", position: "absolute",
top: 0, top: 0,
left: 0, left: 0,
right: 0, right: 0,
height: "300px", height: "340px",
opacity: "95%", opacity: "95%",
padding: "1rem 0 1rem 1rem", padding: "55px 0 1rem 1rem"
}} }}
sx={{ sx={{
"@media (min-width: 60em)": { "@media (min-width: 60em)": {
@ -412,5 +430,7 @@ export function KartaPage() {
</ScrollArea> </ScrollArea>
</Paper> </Paper>
</div> </div>
<FooterLinks data={footerLinks.data} />
</>
); );
} }

@ -6,6 +6,11 @@ import {
TypographyStylesProvider, TypographyStylesProvider,
} from "@mantine/core"; } from "@mantine/core";
import { HeaderSimple } from "./Header";
import { FooterLinks } from "./Footer";
import headerLinks from "./assets/header.json";
import footerLinks from "./assets/footer.json";
const useStyles = createStyles((theme) => ({ const useStyles = createStyles((theme) => ({
content: { content: {
padding: rem(30), padding: rem(30),
@ -31,6 +36,8 @@ export function Landing() {
const { classes } = useStyles(); const { classes } = useStyles();
return ( return (
<>
<HeaderSimple links={headerLinks.links} />
<Container className={classes.content}> <Container className={classes.content}>
<Title order={1} className={classes.title}> <Title order={1} className={classes.title}>
О проекте О проекте
@ -98,5 +105,8 @@ export function Landing() {
</p> </p>
</TypographyStylesProvider> </TypographyStylesProvider>
</Container> </Container>
<FooterLinks data={footerLinks.data} />
</>
); );
} }

Loading…
Cancel
Save