-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathepisodes.tsx
66 lines (58 loc) · 1.87 KB
/
episodes.tsx
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
import React from 'react';
import { navigate } from 'gatsby';
import { Item } from 'semantic-ui-react';
import { Mission } from '../model/missions';
import { GlobalContext } from '../context/globalcontext';
import DataPageLayout from '../components/page/datapagelayout';
import { getEpisodeName } from '../utils/episodes';
const EpisodesPage = () => {
const globalContext = React.useContext(GlobalContext);
const theme = typeof window === 'undefined' ? 'dark' : window.localStorage.getItem('theme') ?? 'dark';
const foreColor = theme === 'dark' ? 'white' : 'black';
return (
<DataPageLayout
demands={['episodes']}
pageTitle='Episodes'
>
<React.Fragment>
<Item.Group>
{globalContext.core.episodes.sort(sortEpisodes).map(episode => (
<Item key={episode.symbol}>
<Item.Image
size="tiny"
src={`${process.env.GATSBY_ASSETS_URL}${episode.episode_portrait
? episode.episode_portrait.file.slice(1).replace('/', '_') + '.png'
: 'crew_full_body_cm_empty_full.png'
}`}
/>
<Item.Content>
<Item.Header as="a" onClick={() => navigate(`/episode/${episode.symbol}`)}>
{getEpisodeName(episode)}
</Item.Header>
<Item.Meta><span style={{color:foreColor}}>Total stars: {episode.total_stars}</span></Item.Meta>
<Item.Description>
<p>{episode.description}</p>
</Item.Description>
</Item.Content>
</Item>
))}
</Item.Group>
</React.Fragment>
</DataPageLayout>
);
function sortEpisodes(a: Mission, b: Mission): number {
if (a.episode === b.episode) {
if (a.cadet && !b.cadet)
return 1;
else if (!a.cadet && b.cadet)
return -1;
return a.id - b.id;
}
if (a.episode > 0 && b.episode === -1)
return -1;
else if (a.episode === -1 && b.episode > 0)
return 1;
return a.episode - b.episode;
}
};
export default EpisodesPage;