Skip to content

Conversation

@Mygod
Copy link
Collaborator

@Mygod Mygod commented Jan 17, 2026

No description provided.

Mygod and others added 22 commits December 9, 2025 11:58
## [1.40.2-develop.1](v1.40.1...v1.40.2-develop.1) (2025-12-10)

### Bug Fixes

* battle/raid filtering race condition ([2a9cbbf](2a9cbbf))
* ground raid/battle icons ([cd01a92](cd01a92))
* weather icon in pokemon background popup ([21b50f5](21b50f5))
# [1.41.0-develop.1](v1.40.2-develop.1...v1.41.0-develop.1) (2025-12-11)

### Bug Fixes

* battle/raid icon max height ([497f350](497f350))
* no scrollbars plz ([907ca33](907ca33))

### Features

* dynamic placed Pokemon dropdown height ([8a0447c](8a0447c))
* support stationed pokemon extras ([4f5aace](4f5aace))
# [1.41.0-develop.2](v1.41.0-develop.1...v1.41.0-develop.2) (2025-12-15)

### Bug Fixes

* remove extra Forms ([0f157ed](0f157ed))
Co-authored-by: Mygod <contact-git@mygod.be>
# [1.41.0-develop.3](v1.41.0-develop.2...v1.41.0-develop.3) (2025-12-16)

### Bug Fixes

* logic bug in loading non-clustered elements ([#1161](#1161)) ([a2c7f17](a2c7f17))
* more robust discord handling ([#1181](#1181)) ([b579ded](b579ded))

### Features

* default clientPrompt to none to skip permission reapproval ([d3ea283](d3ea283))
# [1.41.0-develop.4](v1.41.0-develop.3...v1.41.0-develop.4) (2025-12-31)

### Bug Fixes

* area reload ([cea3141](cea3141))
* Escapes XML in GPX route data

Ensures route names and descriptions are properly escaped
when generating GPX files, preventing potential XML parsing issues.
Sanitizes the filename to be downloaded.

* Prettier

* fix: filename sanitizer to also strip backslashes for Windows safety

---------

Co-authored-by: Mygod <contact-git@mygod.be>
# [1.41.0-develop.5](v1.41.0-develop.4...v1.41.0-develop.5) (2026-01-08)

### Bug Fixes

* escape gpx xml ([#1186](#1186)) ([7bd5ce1](7bd5ce1))
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request syncs the development branch to main, bringing together accumulated features and bug fixes from the 1.41.0 development cycle. The changes include support for additional Pokémon display attributes at stations, improvements to UI components, security enhancements for GPX export, and Discord client robustness improvements.

Changes:

  • Added support for stationed Pokémon extras (shiny, temp evolution, alignment, badge, background)
  • Introduced reusable overlay icon rendering utility for map markers
  • Enhanced form display options with configurable suffix appending
  • Improved GPX export with XML escaping and filename sanitization
  • Enhanced Discord client error handling for missing members
  • Dynamic sizing for stationed Pokémon grid display

Reviewed changes

Copilot reviewed 25 out of 26 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/utils/renderOverlayIcon.js New utility function for rendering standardized overlay icons on map markers
src/utils/getFormDisplay.js Added appendFormSuffix option to control form suffix display
src/services/queries/station.js Extended GraphQL query to fetch additional Pokémon display fields
src/services/Assets.js Updated getPokemonByDisplay to handle new display properties including temp evolution
src/pages/map/components/Clustering.jsx Fixed clustering logic to respect IGNORE_CLUSTERING category setting
src/hooks/useTranslateById.js Added omitFormSuffix option for translation customization
src/features/station/useStationMarker.js Refactored battle icon rendering to use new renderOverlayIcon utility
src/features/station/StationPopup.jsx Implemented dynamic grid sizing and background visuals for stationed Pokémon display
src/features/route/RoutePopup.jsx Added XML escaping and filename sanitization for GPX export security
src/features/pokemon/PokemonPopup.jsx Enhanced weather icon rendering with background visual support
src/features/gym/gymMarker.js Refactored raid icon rendering to use new renderOverlayIcon utility
src/features/drawer/gyms/Raids.jsx Improved raid tier filtering to preserve unavailable stored tiers
src/features/drawer/components/SelectorList.jsx Applied omitFormSuffix option to selector list translations
src/features/drawer/Stations.jsx Improved battle tier filtering to preserve unavailable stored tiers
src/components/virtual/VirtualGrid.jsx Added scrollerRef prop support for external scroll container access
src/components/virtual/SelectorItem.jsx Applied omitFormSuffix option to selector item translations
src/components/filters/Advanced.jsx Applied omitFormSuffix option to advanced filter titles
src/assets/css/main.css Added CSS for marker overlay icons and consolidated pokestop marker styles
server/src/utils/reloadConfig.js Fixed config reload to prime areas early preventing getSafe failures
server/src/services/DiscordClient.js Enhanced error handling with specific logging for member not found errors
server/src/graphql/typeDefs/scanner.graphql Extended StationPokemon type with additional display fields
packages/types/lib/scanner.d.ts Updated StationPokemon interface to extend PokemonDisplay
packages/config/.configref Updated config reference version
package.json Bumped version to 1.41.0-develop.5
config/default.json Changed Discord clientPrompt default from "consent" to "none"
CHANGELOG.md Added changelog entries for develop releases
Comments suppressed due to low confidence (1)

src/features/route/RoutePopup.jsx:423

  • The waypoint data in the GPX output is not properly escaped. While route.name and route.description are now escaped, the waypoint.lat_degrees, waypoint.lng_degrees, and waypoint.elevation_in_meters values are inserted directly into XML attributes without escaping. If these values could contain special XML characters, they should also be escaped.
    ${route.waypoints
      .map(
        (waypoint) =>
          `<rtept lat="${waypoint.lat_degrees}" lon="${waypoint.lng_degrees}"><ele>${waypoint.elevation_in_meters}</ele></rtept>`,
      )

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

bread_mode,
} = pokemonDisplay || {}
const evolution =
temp_evolution_finish_ms && Date.now() > temp_evolution_finish_ms
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logic for checking temp_evolution_finish_ms has a potential issue. When temp_evolution_finish_ms is 0 (falsy), the condition will short-circuit and return temp_evolution, even though 0 might be a valid timestamp. The condition should check for null/undefined explicitly rather than relying on truthiness. Consider using: temp_evolution_finish_ms != null && Date.now() > temp_evolution_finish_ms

Suggested change
temp_evolution_finish_ms && Date.now() > temp_evolution_finish_ms
temp_evolution_finish_ms != null &&
Date.now() > temp_evolution_finish_ms

Copilot uses AI. Check for mistakes.
@@ -1 +1 @@
26702 No newline at end of file
26699 No newline at end of file
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The config reference is being changed from 26702 to 26699, which appears to be going backwards in version/reference number. This seems unusual for a sync operation and may indicate an unintended downgrade or incorrect merge.

Suggested change
26699
26702

Copilot uses AI. Check for mistakes.
},
[recomputeIconSize],
)

Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ResizeObserver created in handleScrollerRef is not properly cleaned up when the component unmounts. While it disconnects when the ref changes, there should be a useEffect cleanup function to disconnect the observer when the component unmounts to prevent memory leaks.

Suggested change
React.useEffect(() => {
return () => {
if (resizeObserver.current) {
resizeObserver.current.disconnect()
resizeObserver.current = null
}
}
}, [])

Copilot uses AI. Check for mistakes.
const perColumn = Math.floor(el.clientWidth / columns)
const nextSize = Math.min(40, perColumn || 40)
setIconSize((prev) => (prev === nextSize ? prev : nextSize))
}, [columns])
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The recomputeIconSize callback depends on the 'columns' variable (line 492), but 'columns' is defined as a constant within the component body. This dependency is unnecessary since 'columns' never changes. Either move 'columns' outside the component or remove it from the dependency array to avoid potential issues.

Suggested change
}, [columns])
}, [])

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants