-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathMainStoryGrid.jsx
125 lines (105 loc) · 2.72 KB
/
MainStoryGrid.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import React from 'react';
import styled from 'styled-components';
import {
MAIN_STORY,
OPINION_STORIES,
SECONDARY_STORIES,
} from '../../data';
import SectionTitle from '../SectionTitle';
import MainStory from '../MainStory';
import SecondaryStory from '../SecondaryStory';
import OpinionStory from '../OpinionStory';
import Advertisement from '../Advertisement';
import { COLORS, QUERIES } from '../../constants';
const MainStoryGrid = () => {
return (
<Wrapper>
<MainStorySection>
<MainStory {...MAIN_STORY} />
</MainStorySection>
<SecondaryStorySection>
<StoryList>
{SECONDARY_STORIES.map((story, index) => (
<SecondaryStory key={story.id} {...story} />
))}
</StoryList>
</SecondaryStorySection>
<OpinionSection>
<SectionTitle>Opinion</SectionTitle>
<StoryList>
{OPINION_STORIES.map((story, index) => (
<OpinionStory key={story.id} {...story} />
))}
</StoryList>
</OpinionSection>
<AdvertisementSection>
<Advertisement />
</AdvertisementSection>
</Wrapper>
);
};
const Wrapper = styled.div`
display: grid;
grid-template-columns: 1fr;
grid-template-areas:
'main-story'
'secondary-stories'
'opinion-stories'
'advertisement';
gap: 16px;
margin-bottom: 48px;
@media ${QUERIES.tabletAndUp} {
grid-template-columns: 2fr 1fr;
grid-template-areas:
'main-story secondary-stories'
'advertisement advertisement'
'opinion-stories opinion-stories';
}
@media ${QUERIES.laptopAndUp} {
grid-template-columns: 3fr 2fr 2fr;
grid-template-areas:
'main-story secondary-stories opinion-stories'
'main-story advertisement advertisement'
}
`;
const MainStorySection = styled.section`
grid-area: main-story;
`;
const SecondaryStorySection = styled.section`
grid-area: secondary-stories;
@media ${QUERIES.tabletAndUp} {
border-left: 1px solid ${COLORS.gray[300]};
padding-left: 24px;
margin-left: 24px;
}
`;
const StoryList = styled.div`
display: flex;
flex-direction: column;
// @media ${QUERIES.tabletOnly} {
// flex-direction: row;
// }
`;
const OpinionSection = styled.section`
grid-area: opinion-stories;
@media ${QUERIES.laptopAndUp} {
border-left: 1px solid ${COLORS.gray[300]};
padding-left: 24px;
margin-left: 24px;
}
@media ${QUERIES.tabletOnly} {
flex: 1;
& > *:nth-child(2) {
flex-direction: row;
}
}
`;
const AdvertisementSection = styled.section`
grid-area: advertisement;
@media ${QUERIES.laptopAndUp} {
border-top: 1px solid ${COLORS.gray[300]};
padding-left: 24px;
margin-left: 24px;
}
`;
export default MainStoryGrid;