• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

DaniSomoza / galactic-commander / 12728621970

11 Jan 2025 11:55PM UTC coverage: 47.963% (-4.1%) from 52.086%
12728621970

Pull #12

github

web-flow
Merge e784abf9e into a8e301a23
Pull Request #12: [fleets] Explore planets

214 of 913 branches covered (23.44%)

Branch coverage included in aggregate %.

154 of 505 new or added lines in 55 files covered. (30.5%)

10 existing lines in 9 files now uncovered.

1564 of 2794 relevant lines covered (55.98%)

3.46 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

2.86
/packages/frontend/src/components/units-list/UnitsList.tsx
1
import { useState } from 'react'
2
import Paper from '@mui/material/Paper'
3
import Stack from '@mui/material/Stack'
4
import Typography from '@mui/material/Typography'
5
import Box from '@mui/material/Box'
6
import Button from '@mui/material/Button'
7

8
import { UnitType, UnitTypes } from 'game-api-microservice/src/types/Unit'
9
import checkUnitRequirements from 'game-engine/src/engine/units/checkUnitRequirements'
10
import isHeroAlreadyBuild from 'game-engine/src/engine/units/isHeroAlreadyBuild'
11
import { PlanetType } from 'game-api-microservice/src/types/Planet'
12

13
import { usePlayer } from '../../store/PlayerContext'
14
import { useTranslations } from '../../store/TranslationContext'
15
import Loader from '../../components/loader/Loader'
16
import UnitStats from '../../components/unit-stats/UnitStats'
17
import BuildUnitsDialog from '../../components/dialogs/BuildUnitsDialog'
18
import UnitRequirements from '../../components/unit-requirements/UnitRequirements'
19
import UnitBonus from '../../components/unit-bonus/UnitBonus'
20
import UnitCard from '../../components/unit-card/UnitCard'
21
import { useFleet } from '../../store/FleetContext'
22

23
type UnitsListProp = {
24
  unitType: UnitTypes
25
}
26

27
const path: Record<UnitTypes, keyof PlanetType['unitBuild']> = {
1✔
28
  TROOP: 'troops',
29
  SPACESHIP: 'spaceships',
30
  DEFENSE: 'defenses'
31
}
32

33
function UnitsList({ unitType }: UnitsListProp) {
34
  const { translate } = useTranslations()
×
35

36
  const [unitToBuild, setUnitToBuild] = useState<UnitType>()
×
37

38
  const { player, isPlayerLoading, selectedPlanet } = usePlayer()
×
NEW
39
  const { unitsInThePlanet } = useFleet()
×
40

41
  const units = player && selectedPlanet ? [...selectedPlanet.units, ...player.race.units] : []
×
42

43
  if (!player || isPlayerLoading || !selectedPlanet) {
×
44
    return <Loader isLoading />
×
45
  }
46

47
  const activeBuildUnits = selectedPlanet.unitBuild[path[unitType]].activeBuild
×
48

49
  return (
×
50
    <>
51
      <Stack direction={'column'} gap={2} marginTop={1}>
52
        {units
53
          .filter((unit) => unit.type === unitType)
×
54
          .map((unit) => {
55
            const unitRequirements = checkUnitRequirements(unit, player)
×
NEW
56
            const amount = unitsInThePlanet.find(({ unit }) => unit.name === unit.name)?.amount || 0
×
57

58
            return (
×
59
              <Paper key={unit.name} variant="outlined">
60
                <Stack direction={'row'}>
61
                  <Box>
62
                    {/* Image Part */}
63
                    <UnitCard
64
                      disableBorder
65
                      unit={unit}
66
                      amount={amount}
67
                      height={230}
68
                      width={230}
69
                      isAvailable={unitRequirements.isUnitAvailable}
70
                    />
71

72
                    {/* Unit bonus Part */}
73
                    {Object.keys(unit.bonus).length > 0 && (
×
74
                      <Box padding={1} paddingBottom={0}>
75
                        <UnitBonus bonus={unit.bonus} />
76
                      </Box>
77
                    )}
78
                  </Box>
79

80
                  {/* stats Part */}
81
                  <Stack alignItems={'flex-start'} gap={1} padding={1}>
82
                    <UnitStats unit={unit} player={player} />
83

84
                    <UnitRequirements unitRequirements={unitRequirements} unitName={unit.name} />
85
                  </Stack>
86
                </Stack>
87

88
                {/* description Part */}
89
                <Box padding={1}>
90
                  <Paper variant="outlined">
91
                    <Typography padding={1} fontSize={13}>
92
                      {translate(unit.description)}
93
                    </Typography>
94
                  </Paper>
95
                </Box>
96

97
                {/* action buttons Part */}
98
                <Stack
99
                  flexGrow={1}
100
                  direction={'row'}
101
                  justifyContent={'flex-end'}
102
                  alignItems={'flex-end'}
103
                  gap={1}
104
                  padding={1}
105
                  paddingTop={0}
106
                >
107
                  <Button variant="outlined" size="small">
108
                    {translate('GAME_BUILD_UNITS_PAGE_BUILD_UNITS_SCHEDULE_BUTTON')}
109
                  </Button>
110

111
                  {activeBuildUnits ? (
×
112
                    <Button variant="contained" size="small" onClick={() => setUnitToBuild(unit)}>
×
113
                      {translate('GAME_BUILD_UNITS_PAGE_BUILD_UNITS_QUEUE_BUTTON')}
114
                    </Button>
115
                  ) : (
116
                    <Button
117
                      variant="contained"
118
                      size="small"
119
                      disabled={
120
                        !unitRequirements.isUnitAvailable || isHeroAlreadyBuild(unit, player.units)
×
121
                      }
122
                      onClick={() => setUnitToBuild(unit)}
×
123
                    >
124
                      {translate('GAME_BUILD_UNITS_PAGE_START_BUILD_UNITS_BUTTON')}
125
                    </Button>
126
                  )}
127
                </Stack>
128
              </Paper>
129
            )
130
          })}
131
      </Stack>
132

133
      {unitToBuild && (
×
134
        <BuildUnitsDialog
135
          unitToBuild={unitToBuild}
136
          setUnitToBuild={setUnitToBuild}
137
          isOpen={!!unitToBuild}
138
        />
139
      )}
140
    </>
141
  )
142
}
143

144
export default UnitsList
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc