sync highlight on map and in list

master
gtitov 3 years ago
parent 68a7b39120
commit 72ce122880

@ -14,25 +14,36 @@ const useStyles = createStyles((theme) => ({
body: { body: {
padding: theme.spacing.md, padding: theme.spacing.md,
}, },
address: {
"&:hover": {
color: "red",
cursor: "pointer"
}
}
})); }));
interface ArticleCardVerticalProps { interface ArticleCardVerticalProps {
id: number;
image: string; image: string;
category: string; category: string;
title: string; title: string;
date: string; address: string;
author: { // author: {
name: string; // name: string;
avatar: string; // avatar: string;
}; // };
} }
export function ArticleCardVertical({ export function ArticleCardVertical({
id,
image, image,
category, category,
title, title,
date, address,
author, // author,
selected,
setSelected
}: ArticleCardVerticalProps) { }: ArticleCardVerticalProps) {
const { classes } = useStyles(); const { classes } = useStyles();
return ( return (
@ -43,21 +54,12 @@ export function ArticleCardVertical({
<Text transform="uppercase" color="dimmed" weight={700} size="xs"> <Text transform="uppercase" color="dimmed" weight={700} size="xs">
{category} {category}
</Text> </Text>
<Text className={classes.title} mt="xs" mb="md"> <Text className={classes.title} mt="xs" mb="md" color={id === selected ? 'red' : 'black'}>
{title} {title}
</Text> </Text>
<Group noWrap spacing="xs"> <Text size="xs" color="dimmed" onClick={() => setSelected(id)} className={classes.address}>
<Group spacing="xs" noWrap> {address}
<Avatar size={20} src={author.avatar} /> </Text>
<Text size="xs">{author.name}</Text>
</Group>
<Text size="xs" color="dimmed">
</Text>
<Text size="xs" color="dimmed">
{date}
</Text>
</Group>
</div> </div>
</Group> </Group>
</Card> </Card>

@ -65,8 +65,8 @@ export function KartaPage() {
mapStyle={mapstyle} mapStyle={mapstyle}
interactiveLayerIds={['points-layer']} interactiveLayerIds={['points-layer']}
onClick={e => e.features[0] ? setSelected(e.features[0].properties.id) : setSelected(-1)} onClick={e => e.features[0] ? setSelected(e.features[0].properties.id) : setSelected(-1)}
onMouseEnter={e => setCursor('pointer')} onMouseEnter={() => setCursor('pointer')}
onMouseLeave={e => setCursor('grab')} onMouseLeave={() => setCursor('grab')}
> >
<Source <Source
id='points' id='points'
@ -116,14 +116,17 @@ export function KartaPage() {
> >
{articles !== null && articles.length > 0 && articles.map(article => { {articles !== null && articles.length > 0 && articles.map(article => {
const articleInfo = { const articleInfo = {
"id": article.id,
// "image": article.attributes.cover.data !== null ? "http://strapi.wg.gateway.ts" + article.attributes.cover.data.attributes.url : "https://images.unsplash.com/photo-1628890923662-2cb23c2e0cfe?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=200&q=80", // "image": article.attributes.cover.data !== null ? "http://strapi.wg.gateway.ts" + article.attributes.cover.data.attributes.url : "https://images.unsplash.com/photo-1628890923662-2cb23c2e0cfe?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=200&q=80",
"category": "technology", "category": "technology",
"title": article.attributes.title, "title": article.attributes.title,
"date": new Date(article.attributes.publishedAt).toLocaleDateString("ru-RU"), "address": new Date(article.attributes.publishedAt).toLocaleDateString("ru-RU"),
"author": { // "author": {
"name": "Elsa Brown", // "name": "Elsa Brown",
"avatar": "https://images.unsplash.com/photo-1628890923662-2cb23c2e0cfe?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=200&q=80" // "avatar": "https://images.unsplash.com/photo-1628890923662-2cb23c2e0cfe?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=200&q=80"
} // },
"selected": selected,
"setSelected": setSelected
} }
return <ArticleCardVertical key={article.id} {...articleInfo} /> return <ArticleCardVertical key={article.id} {...articleInfo} />

Loading…
Cancel
Save