Skip to content

Commit 1c1a1f4

Browse files
authored
[FEATURE] introducing wave info to expansion (#500)
* [FEATURE] introducing wave info to expansion Issue: #467 Phase 2: - Sort expansions by wave in Settings -> Expansions - Display expansion/wave language dependent in Randomizer -> Nemesis - Display expansion/wave language dependent in Randomizer -> Nemesis Cards - Display expansion/wave language dependent in Randomizer -> Mages - Display expansion/wave language dependent in Nemesis details - Display expansion/wave language dependent in Nemesis Card details - Display expansion/wave language dependent in Mage details * [FEATURE] introducing wave info to expansion Issue: #467 Small fixes in Pull Request
1 parent 2e5082c commit 1c1a1f4

File tree

13 files changed

+109
-76
lines changed

13 files changed

+109
-76
lines changed

src/Redux/Store/Settings/Expansions/Expansions/index.ts

+49-30
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { selectors as LanguageSelectors } from '../Languages'
66
import * as Content from './content'
77
import * as Selected from './selected'
88
import * as Ids from './ids'
9+
import * as types from 'aer-types/types'
910
import { createAction, ActionsUnion } from '@martin_hotell/rex-tils'
1011
import { EXPANSIONS_DB_KEY } from './constants'
1112
import { getContentWithLanguageFallback } from './content/selectors'
@@ -62,7 +63,7 @@ export const Reducer = reduceReducers(
6263
(state: State, action: Action) => {
6364
switch (action.type) {
6465
case ActionTypes.TOGGLE_ALL: {
65-
const allExpansionsSelected = state.ids.every(id =>
66+
const allExpansionsSelected = state.ids.every((id) =>
6667
state.selected.includes(id)
6768
)
6869

@@ -105,54 +106,38 @@ const getExpansionIds = (
105106

106107
const getExpansionsByIdList = createSelector(
107108
[Content.selectors.getContent, getExpansionIds],
108-
(content, ids) => ids.map(id => content.ENG[id])
109+
(content, ids) => ids.map((id) => content.ENG[id])
109110
)
110111

111112
const getExpansionNamesByIdList = createSelector(
112113
[getExpansionsByIdList],
113-
expansions => expansions.map(e => e.name)
114+
(expansions) => expansions.map((e) => e.name)
114115
)
115116

116117
const getAllExpansionsSelected = createSelector(
117118
[Ids.selectors.getIds, Selected.selectors.getSelected],
118-
(ids, selectedIds) => ids.every(id => selectedIds.includes(id))
119+
(ids, selectedIds) => ids.every((id) => selectedIds.includes(id))
119120
)
120121

121122
const getHasStandaloneExpansion = createSelector(
122123
[Selected.selectors.getSelected, Content.selectors.getContent],
123124
(selectedIds, content) =>
124-
selectedIds.some(id => content.ENG[id].type === 'standalone')
125+
selectedIds.some((id) => content.ENG[id].type === 'standalone')
125126
)
126127

127128
const getStandaloneExpansionIds = createSelector(
128129
[Ids.selectors.getIds, Content.selectors.getContent],
129-
(ids, content) => ids.filter(id => content.ENG[id].type === 'standalone')
130+
(ids, content) => ids.filter((id) => content.ENG[id].type === 'standalone')
130131
)
131132

132133
const getMiniExpansionIds = createSelector(
133134
[Ids.selectors.getIds, Content.selectors.getContent],
134-
(ids, content) => ids.filter(id => content.ENG[id].type === 'mini')
135+
(ids, content) => ids.filter((id) => content.ENG[id].type === 'mini')
135136
)
136137

137138
const getPromoIds = createSelector(
138139
[Ids.selectors.getIds, Content.selectors.getContent],
139-
(ids, content) =>
140-
ids
141-
.filter(id => content.ENG[id].type === 'promo')
142-
.sort((a, b) => {
143-
const promoA = content.ENG[a].name
144-
const promoB = content.ENG[b].name
145-
146-
if (promoA < promoB) {
147-
return -1
148-
}
149-
150-
if (promoA > promoB) {
151-
return 1
152-
}
153-
154-
return 0
155-
})
140+
(ids, content) => ids.filter((id) => content.ENG[id].type === 'promo')
156141
)
157142

158143
const getStandaloneExpansions = createSelector(
@@ -161,28 +146,62 @@ const getStandaloneExpansions = createSelector(
161146
getStandaloneExpansionIds,
162147
LanguageSelectors.getLanguagesByExpansion,
163148
],
164-
(content, ids, languages) =>
165-
ids.map(id => getContentWithLanguageFallback(languages, content, id))
149+
(content, ids, languages) => {
150+
const expansions = ids.map((id) =>
151+
getContentWithLanguageFallback(languages, content, id)
152+
)
153+
return sortExpansions(expansions)
154+
}
166155
)
167156
const getMiniExpansions = createSelector(
168157
[
169158
Content.selectors.getContent,
170159
getMiniExpansionIds,
171160
LanguageSelectors.getLanguagesByExpansion,
172161
],
173-
(content, ids, languages) =>
174-
ids.map(id => getContentWithLanguageFallback(languages, content, id))
162+
(content, ids, languages) => {
163+
const expansions = ids.map((id) =>
164+
getContentWithLanguageFallback(languages, content, id)
165+
)
166+
return sortExpansions(expansions)
167+
}
175168
)
176169
const getPromos = createSelector(
177170
[
178171
Content.selectors.getContent,
179172
getPromoIds,
180173
LanguageSelectors.getLanguagesByExpansion,
181174
],
182-
(content, ids, languages) =>
183-
ids.map(id => getContentWithLanguageFallback(languages, content, id))
175+
(content, ids, languages) => {
176+
const expansions = ids.map((id) =>
177+
getContentWithLanguageFallback(languages, content, id)
178+
)
179+
return sortExpansions(expansions)
180+
}
184181
)
185182

183+
function sortExpansions(expansions: types.Expansion[]): types.Expansion[] {
184+
return expansions.sort((e1, e2) => {
185+
if (e1.wave < e2.wave) {
186+
return -1
187+
}
188+
189+
if (e1.wave > e2.wave) {
190+
return 1
191+
}
192+
193+
if (e1.name < e2.name) {
194+
return -1
195+
}
196+
197+
if (e1.name > e2.name) {
198+
return 1
199+
}
200+
201+
return 0
202+
})
203+
}
204+
186205
export const selectors = {
187206
selected: Selected.selectors,
188207
ids: Ids.selectors,

src/components/molecules/BasicNemesisCardInformation/index.tsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ import AbilityText from 'components/atoms/AbilityText'
1111

1212
type Props = {
1313
card: types.BasicNemesisCard | types.UpgradedBasicNemesisCard
14-
expansionName: string
14+
expansion: types.Expansion
1515
theme: any
1616
}
1717

18-
const Body = ({ card, expansionName, theme }: Props) => (
18+
const Body = ({ card, expansion, theme }: Props) => (
1919
<React.Fragment>
20-
<InfoItem label="Expansion" info={expansionName} />
20+
<InfoItem label="Expansion" info={expansion.name} />
21+
<InfoItem label="Wave" info={expansion.wave || '-'} />
2122
<InfoItem label="Tier" info={card.tier.toString()} />
2223
{card.type && <InfoItem label="Type" info={card.type} />}
2324
{card.type === 'Minion' && (

src/components/molecules/BasicNemesisCardModal/index.tsx

+5-7
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ import ModalBodyWrapper from 'components/atoms/ModalBodyWrapper'
1515
import P from 'components/atoms/P'
1616

1717
const mapStateToProps = (state: RootState, _: any) => ({
18-
expansions: selectors.Settings.Expansions.Expansions.content.getContent(
19-
state
20-
),
18+
expansions:
19+
selectors.Settings.Expansions.Expansions.content.getExpansionsWithLanguageFallback(
20+
state
21+
),
2122
})
2223

2324
type Props = ReturnType<typeof mapStateToProps> & {
@@ -41,10 +42,7 @@ const BasicNemesisCardModal = ({
4142
<RenderModal titleColor={titleColor} titleLabel={titleLabel}>
4243
<ModalBodyWrapper>
4344
{card ? (
44-
<Body
45-
card={card}
46-
expansionName={expansions.ENG[card.expansion].name || ''}
47-
/>
45+
<Body card={card} expansion={expansions[card.expansion]} />
4846
) : (
4947
<P>No content</P>
5048
)}

src/components/molecules/MageInformation/index.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react'
22
import { withTheme } from 'styled-components/macro'
33

4-
import { Mage, ICard } from 'aer-types/types'
4+
import { Mage, ICard, Expansion } from 'aer-types/types'
55

66
import InfoItem from '../InfoItem'
77

@@ -21,7 +21,7 @@ const renderUniqueStarters = (uniqueStarters: ICard[]) => {
2121
type Props = {
2222
mage: Mage
2323
player: 'player1' | 'player2' | 'player3' | 'player4'
24-
expansionName: string
24+
expansion: Expansion
2525
theme: any
2626
}
2727

@@ -34,10 +34,11 @@ function formatCharges(
3434
}`
3535
}
3636

37-
const MageInformation = ({ mage, player, expansionName, theme }: Props) => (
37+
const MageInformation = ({ mage, player, expansion, theme }: Props) => (
3838
<React.Fragment>
3939
<InfoItem label="Title" info={mage.mageTitle} />
40-
<InfoItem label="Expansion" info={expansionName} />
40+
<InfoItem label="Expansion" info={expansion.name} />
41+
<InfoItem label="Wave" info={expansion.wave || '-'} />
4142
<InfoItem
4243
label="Charges"
4344
info={formatCharges(mage.numberOfCharges, mage.numberOfOvercharges)}

src/components/molecules/MageList/MageTile/Body.tsx

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
import React from 'react'
22

3-
import { Mage } from 'aer-types/types'
3+
import { Mage, Expansion } from 'aer-types/types'
4+
import { formatExpansionName } from 'helpers'
45

56
import ExpansionName from './ExpansionName'
67
import Name from './Name'
78
import Title from './Title'
89

910
type Props = {
1011
mage: Mage
11-
expansionName: string
12+
expansion: Expansion
1213
}
1314

14-
const Body = ({ mage, expansionName }: Props) => (
15+
const Body = ({ mage, expansion }: Props) => (
1516
<React.Fragment>
16-
<ExpansionName color="textSecondary">{expansionName}</ExpansionName>
17+
<ExpansionName color="textSecondary">
18+
{formatExpansionName(expansion)}
19+
</ExpansionName>
1720
<Name variant="h6" component="h2">
1821
{mage.name}
1922
</Name>

src/components/molecules/MageList/MageTile/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ type OwnProps = {
2323

2424
const mapStateToProps = (state: RootState, ownProps: OwnProps) => {
2525
return {
26-
expansion: selectors.Settings.Expansions.Expansions.content.getExpansionById(
27-
state,
28-
{ expansionId: ownProps.mage.expansion }
29-
),
26+
expansion:
27+
selectors.Settings.Expansions.Expansions.content.getExpansionById(state, {
28+
expansionId: ownProps.mage.expansion,
29+
}),
3030
}
3131
}
3232

@@ -53,7 +53,7 @@ const MageTile = ({ mage, playerNumber, theme, expansion }: Props) => {
5353
return (
5454
<Wrapper item xs={12} sm={6} md={3} data-test="mage-tile">
5555
<Tile
56-
body={<Body mage={mage} expansionName={expansion.name} />}
56+
body={<Body mage={mage} expansion={expansion} />}
5757
bgColor={bgColor}
5858
fontColor={theme.colors.white}
5959
icon={theme.icons.mage}

src/components/molecules/MageModal/index.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ import ModalBodyWrapper from '../../atoms/ModalBodyWrapper'
1313
import MageInformation from '../MageInformation'
1414

1515
const mapStateToProps = (state: RootState, _: any) => ({
16-
expansions: selectors.Settings.Expansions.Expansions.content.getContent(
17-
state
18-
),
16+
expansions:
17+
selectors.Settings.Expansions.Expansions.content.getExpansionsWithLanguageFallback(
18+
state
19+
),
1920
})
2021

2122
type Props = ReturnType<typeof mapStateToProps> & {
@@ -35,7 +36,7 @@ const MageModal = ({ player, mage, expansions, theme, RenderModal }: Props) => {
3536
<MageInformation
3637
mage={mage}
3738
player={player}
38-
expansionName={expansions.ENG[mage.expansion].name || ''}
39+
expansion={expansions[mage.expansion]}
3940
/>
4041
) : (
4142
'No content'

src/components/molecules/NemesisInformation/index.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const NemesisInformation = ({ nemesis, expansion, theme }: Props) => {
4242
return (
4343
<React.Fragment>
4444
<InfoItem label="Expansion" info={expansion.name} />
45+
<InfoItem label="Wave" info={expansion.wave || '-'} />
4546
<InfoItem label="Health" info={nemesis.health.toString()} />
4647
<InfoItem label="Difficulty" info={nemesis.difficulty.toString()} />
4748
<InfoItem

src/components/pages/Randomizer/BasicNemesisCards/BasicNemesisCardList/BasicNemesisCardTile/Body.tsx

+9-4
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ type OwnProps = {
1414
}
1515

1616
const mapStateToProps = (state: RootState) => ({
17-
expansions: selectors.Settings.Expansions.Expansions.content.getContent(
18-
state
19-
),
17+
expansions:
18+
selectors.Settings.Expansions.Expansions.content.getExpansionsWithLanguageFallback(
19+
state
20+
),
2021
})
2122

2223
const mapDispatchToProps = {}
@@ -31,7 +32,11 @@ const Body = ({ nemesisCard, expansions }: Props) => (
3132
<List>
3233
<InfoItem
3334
label="Set"
34-
info={expansions.ENG[nemesisCard.expansion]?.name || ''}
35+
info={expansions[nemesisCard.expansion]?.name || ''}
36+
/>
37+
<InfoItem
38+
label="Wave"
39+
info={expansions[nemesisCard.expansion]?.wave || ''}
3540
/>
3641
<InfoItem label="Tier" info={nemesisCard.tier.toString()} />
3742
{nemesisCard.type && <InfoItem label="Type" info={nemesisCard.type} />}

src/components/pages/Randomizer/Nemeses/NemesisTile/Body.tsx

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
import React from 'react'
2-
import { Nemesis } from 'aer-types/types'
2+
import { Nemesis, Expansion } from 'aer-types/types'
3+
import { formatExpansionName } from 'helpers'
34

45
import ExpansionName from './ExpansionName'
56
import Name from './Name'
67

78
type Props = {
89
nemesis: Nemesis
9-
expansionName: string
10+
expansion: Expansion
1011
}
1112

12-
const Body = ({ nemesis, expansionName }: Props) => (
13+
const Body = ({ nemesis, expansion }: Props) => (
1314
<React.Fragment>
14-
<ExpansionName color="textSecondary">{expansionName}</ExpansionName>
15+
<ExpansionName color="textSecondary">
16+
{formatExpansionName(expansion)}
17+
</ExpansionName>
1518
<Name variant="h6" component="h2">
1619
{nemesis['name']}
1720
</Name>

src/components/pages/Randomizer/Nemeses/NemesisTile/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ type OwnProps = {
1818

1919
const mapStateToProps = (state: RootState, ownProps: OwnProps) => {
2020
return {
21-
expansion: selectors.Settings.Expansions.Expansions.content.getExpansionById(
22-
state,
23-
{ expansionId: ownProps.nemesis.expansion }
24-
),
21+
expansion:
22+
selectors.Settings.Expansions.Expansions.content.getExpansionById(state, {
23+
expansionId: ownProps.nemesis.expansion,
24+
}),
2525
}
2626
}
2727

@@ -39,7 +39,7 @@ const NemesisTile = ({
3939
}: Props) => {
4040
return (
4141
<Tile
42-
body={<Body nemesis={nemesis} expansionName={expansion.name} />}
42+
body={<Body nemesis={nemesis} expansion={expansion} />}
4343
bgColor={theme.colors.turnOrderCards.nemesis.normal}
4444
fontColor={theme.colors.white}
4545
icon={theme.icons.nemesis}

src/components/pages/Settings/Expansions/ActiveSets/ExpansionList/Checkbox.tsx

+1-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useCallback } from 'react'
22
import { connect } from 'react-redux'
33

44
import * as types from 'aer-types/types'
5+
import { formatExpansionName } from 'helpers'
56

67
import CheckboxWithControls from '../../../../../molecules/CheckboxWithControls'
78

@@ -52,9 +53,3 @@ export default connect(
5253
mapStateToProps,
5354
mapDispatchToProps
5455
)(React.memo(Checkbox))
55-
56-
function formatExpansionName(expansion: types.Expansion): string {
57-
return expansion.wave
58-
? expansion.name + ' (' + expansion.wave + ')'
59-
: expansion.name + ' (-)'
60-
}

0 commit comments

Comments
 (0)