Skip to content

Commit 6be1d5d

Browse files
committed
feat: add rsvps to gym popup
1 parent 39726eb commit 6be1d5d

5 files changed

Lines changed: 76 additions & 0 deletions

File tree

packages/types/lib/scanner.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ export interface Defender extends PokemonDisplay {
5252
cp_now: number
5353
}
5454

55+
export interface Rsvp {
56+
timeslot: number
57+
going_count: number
58+
maybe_count: number
59+
}
60+
5561
export interface Gym {
5662
id: string
5763
lat: number
@@ -67,6 +73,7 @@ export interface Gym {
6773
guarding_pokemon_id: number
6874
guarding_pokemon_display: PokemonDisplay
6975
defenders: Defender[]
76+
rsvps: Rsvp[]
7077
available_slots: number
7178
team_id: number
7279
raid_level: number

server/src/graphql/typeDefs/scanner.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type Gym {
2424
guarding_pokemon_id: Int
2525
guarding_pokemon_display: JSON
2626
defenders: JSON
27+
rsvps: JSON
2728
available_slots: Int
2829
team_id: Int
2930
raid_level: Int

server/src/models/Gym.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const gymFields = [
2828
'guarding_pokemon_id',
2929
'guarding_pokemon_display',
3030
'defenders',
31+
'rsvps',
3132
'total_cp',
3233
'power_up_points',
3334
'power_up_level',
@@ -313,6 +314,9 @@ class Gym extends Model {
313314
if (typeof gym.defenders === 'string' && gym.defenders) {
314315
newGym.defenders = JSON.parse(gym.defenders)
315316
}
317+
if (typeof gym.rsvps === 'string' && gym.rsvps) {
318+
newGym.rsvps = JSON.parse(gym.rsvps)
319+
}
316320
}
317321
if (
318322
onlyRaids &&

src/features/gym/GymPopup.jsx

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,26 @@ export function GymPopup({ hasRaid, hasHatched, raidIconUrl, ...gym }) {
6969
)
7070
}
7171

72+
const formatTime = (timestamp) => {
73+
const locale = localStorage.getItem('i18nextLng') || 'en'
74+
return new Date(timestamp).toLocaleTimeString(locale, {
75+
hour: '2-digit',
76+
minute: '2-digit',
77+
})
78+
}
79+
80+
const now = Date.now()
81+
82+
const filteredRsvps =
83+
gym.rsvps?.filter((entry) => {
84+
const ets = entry.timeslot
85+
return (
86+
ets > now &&
87+
ets / 1000 > gym.raid_spawn_timestamp &&
88+
ets / 1000 < gym.raid_end_timestamp
89+
)
90+
}) || []
91+
7292
return (
7393
<ErrorBoundary noRefresh style={{}} variant="h5">
7494
<Grid
@@ -121,6 +141,49 @@ export function GymPopup({ hasRaid, hasHatched, raidIconUrl, ...gym }) {
121141
{Boolean(
122142
gym.raid_pokemon_id && gym.raid_battle_timestamp >= ts,
123143
) && <Timer start {...gym} hasHatched={hasHatched} />}
144+
{filteredRsvps?.length > 0 && (
145+
<Grid xs={12}>
146+
<Grid
147+
container
148+
direction="column"
149+
alignItems="center"
150+
style={{ margin: '2px 0' }}
151+
>
152+
<small
153+
style={{
154+
fontWeight: 'bold',
155+
fontSize: '0.9rem',
156+
marginBottom: 4,
157+
}}
158+
>
159+
RSVP (Going / Maybe)
160+
</small>
161+
<Grid container justifyContent="center" spacing={1}>
162+
{filteredRsvps.slice(0, 3).map((entry) => (
163+
<Grid
164+
key={entry.timeslot}
165+
xs="auto"
166+
style={{
167+
display: 'flex',
168+
flexDirection: 'column',
169+
alignItems: 'center',
170+
borderRadius: '6px',
171+
paddingTop: '4px',
172+
fontSize: '0.80rem',
173+
minWidth: 50,
174+
textAlign: 'center',
175+
}}
176+
>
177+
<div>{formatTime(entry.timeslot)}</div>
178+
<div style={{ fontSize: '0.75rem', opacity: 0.8 }}>
179+
{entry.going_count} / {entry.maybe_count}
180+
</div>
181+
</Grid>
182+
))}
183+
</Grid>
184+
</Grid>
185+
</Grid>
186+
)}
124187
<Timer {...gym} hasHatched={hasHatched} />
125188
</Grid>
126189
</Collapse>

src/services/queries/gym.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const gym = gql`
2424
guarding_pokemon_id
2525
guarding_pokemon_display
2626
defenders
27+
rsvps
2728
total_cp
2829
badge
2930
power_up_level

0 commit comments

Comments
 (0)