Conversation
# [1.41.0-develop.12](v1.41.0-develop.11...v1.41.0-develop.12) (2026-03-15) ### Bug Fixes * weather icon uses wrong time of day for wild ([5944452](5944452))
…popups Normalize pokestop incident state into shared marker and popup views so showcases, gold stops, Kecleon, and invasions follow the same precedence rules across rendering paths. Add blocker metadata and showcase expiry to the GraphQL payload, then use that state on the client to: - derive marker-visible vs popup-visible incidents - keep timers and base marker display in sync with filtered incidents - gate showcase range on visible showcase markers - show explicit blocked reasons in the popup for hidden incidents Also add the missing gold stop blocker locale string.
# Conflicts: # CHANGELOG.md # package.json
## [1.41.2-develop.1](v1.41.1...v1.41.2-develop.1) (2026-03-26) ### Bug Fixes * change scan-on-demand dialog to notification ([b77145d](b77145d)) * **pokestops:** align incident blocker visibility across markers and popups ([8acf245](8acf245)) * weather icon uses wrong time of day for wild ([5944452](5944452))
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.3 to 3.4.2. - [Commits](WebReflection/flatted@v3.3.3...v3.4.2) --- updated-dependencies: - dependency-name: flatted dependency-version: 3.4.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mygod <contact-git@mygod.be>
Bumps [handlebars](https://github.com/handlebars-lang/handlebars.js) from 4.7.8 to 4.7.9. - [Release notes](https://github.com/handlebars-lang/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md) - [Commits](handlebars-lang/handlebars.js@v4.7.8...v4.7.9) --- updated-dependencies: - dependency-name: handlebars dependency-version: 4.7.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [handlebars](https://github.com/handlebars-lang/handlebars.js) from 4.7.8 to 4.7.9. - [Release notes](https://github.com/handlebars-lang/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md) - [Commits](handlebars-lang/handlebars.js@v4.7.8...v4.7.9) --- updated-dependencies: - dependency-name: handlebars dependency-version: 4.7.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@apollo/server](https://github.com/apollographql/apollo-server/tree/HEAD/packages/server) from 5.4.0 to 5.5.0. - [Release notes](https://github.com/apollographql/apollo-server/releases) - [Changelog](https://github.com/apollographql/apollo-server/blob/main/packages/server/CHANGELOG.md) - [Commits](https://github.com/apollographql/apollo-server/commits/@apollo/server@5.5.0/packages/server) --- updated-dependencies: - dependency-name: "@apollo/server" dependency-version: 5.5.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.23...4.18.1) --- updated-dependencies: - dependency-name: lodash-es dependency-version: 4.18.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## [1.41.2-develop.2](v1.41.2-develop.1...v1.41.2-develop.2) (2026-04-03) ### Bug Fixes * keep drawer scroll position ([a242e84](a242e84)) * properly set default discord auth as none ([3670810](3670810))
## [1.41.2-develop.3](v1.41.2-develop.2...v1.41.2-develop.3) (2026-04-03) ### Bug Fixes * weather update consistency ([184ac2f](184ac2f))
## [1.41.2-develop.4](v1.41.2-develop.3...v1.41.2-develop.4) (2026-04-04) ### Bug Fixes * restore drawer sublist scroll positions ([8950dd5](8950dd5))
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.1 to 6.4.2. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.4.2/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.4.2/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 6.4.2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR syncs develop back into main, bringing in several recent UI/UX bug fixes (drawer scroll persistence, scan-on-demand notifications, weather consistency), updated Pokéstop incident-blocking behavior across markers/popups, a Discord auth prompt retry improvement, and a handful of dependency / CI workflow updates.
Changes:
- Align Pokéstop marker + popup incident visibility by introducing incident blocker state and additional Pokéstop fields in GraphQL/client logic.
- Improve map UI behavior: persist drawer sublist scroll/grid state, render ActiveWeather from weather query data, and swap scan-on-demand dialog to notifications.
- Update Discord auth prompt handling (default prompt + retry on silent auth failure), CI linting, and bump a few dependencies.
Reviewed changes
Copilot reviewed 30 out of 34 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| yarn.lock | Dependency lock updates (Apollo server, Vite, etc.). |
| package.json | Version bump, lint-staged uses eslint cache, Vite/Apollo bumps. |
| packages/vite-plugins/package.json | Bump Vite devDependency. |
| .gitignore | Ignore .eslintcache. |
| .github/workflows/lint.yml | Use yarn lint in CI. |
| .github/workflows/release.yml | Add yarn lint step before build/release. |
| CHANGELOG.md | Changelog entries for the develop prereleases. |
| src/services/queries/pokestop.js | Request new Pokéstop fields needed for incident blocker logic. |
| server/src/graphql/typeDefs/scanner.graphql | Add new Pokéstop fields to GraphQL schema. |
| server/src/models/Pokestop.js | Compute/return showcase_expiry + incident blocker fields and normalize incident display type. |
| packages/types/lib/scanner.d.ts | Add incident blocker fields to Pokéstop type. |
| src/features/pokestop/incidentPriority.js | New shared incident priority/blocking logic used by marker/popup. |
| src/features/pokestop/PokestopTile.jsx | Use incident state to decide marker/popup visibility, timers, and blocker info. |
| src/features/pokestop/usePokestopMarker.js | Render event/invasion badges based on “visible” incidents after blocking. |
| src/features/pokestop/PokestopPopup.jsx | Use incident blocker to disable rows and explain blocking reason. |
| packages/locales/lib/human/en.json | Add gold_stop_block label. |
| src/pages/map/components/QueryData.jsx | Render ActiveWeather only when querying weather data. |
| src/pages/map/components/Container.jsx | Remove global ActiveWeather rendering. |
| src/features/weather/ActiveWeather.jsx | Derive active weather from provided query data instead of Apollo cache scanning. |
| src/features/weather/WeatherPopup.jsx | Fix timer update loop by using an interval with correct cleanup/deps. |
| src/features/pokemon/PokemonPopup.jsx | Fix weather icon rendering (time-of-day + color handling). |
| src/components/Notification.jsx | Add autoHideDuration, ignoreClickaway, closable controls. |
| src/features/scanner/ScanDialog.jsx | Replace MUI dialog UX with Notification-based UX. |
| src/features/drawer/index.jsx | Persist drawer scroll position across open/close. |
| src/features/drawer/hooks/useScrollMemory.js | Add reusable scroll/grid-state memory utilities for drawer sublists. |
| src/features/drawer/components/SelectorList.jsx | Persist selector sublist scroll + virtuoso grid state; pass visibility into tabbed children. |
| src/features/drawer/areas/AreaTable.jsx | Persist scan areas table scroll position. |
| src/components/virtual/VirtualGrid.jsx | Thread virtuoso restoreStateFrom/stateChanged/scrollerRef through wrapper. |
| server/src/routes/authRouter.js | Add Discord silent-auth retry behavior and session flag. |
| packages/types/lib/augmentations.d.ts | Type session augmentation for discordPromptRetry. |
| packages/config/lib/mutations.js | Default Discord clientPrompt to 'none'. |
| config/local.example.json | Add clientPrompt to Discord strategy example. |
| config/multi-domain-example/local.json | Add clientPrompt to Discord strategy example. |
| server/src/ui/drawer.js | Minor ordering change in pokestop drawer config fields. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
## [1.41.2-develop.5](v1.41.2-develop.4...v1.41.2-develop.5) (2026-04-19) ### Bug Fixes * perms cleanup ([c513936](c513936))
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 30 out of 34 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| default: | ||
| return event?.display_type | ||
| ? INCIDENT_PRIORITY_SETTINGS.INVASION_EVENT_NPC | ||
| : 0 | ||
| } |
There was a problem hiding this comment.
getEventIncidentPriority uses a truthiness check on event.display_type in the default case. If display_type is the string "0" (allowed by the declared number | string | null type), it is truthy and will incorrectly return INVASION_EVENT_NPC instead of 0. Consider basing this branch on the numeric value (e.g., Number(event?.display_type ?? 0) > 0) so "0"/0 are treated consistently.
| (event) => getEventIncidentPriority(event) >= blocker.priority, | ||
| ) | ||
| : popupEvents | ||
| const markerInvasions = blocker ? [] : popupInvasions |
There was a problem hiding this comment.
getPokestopIncidentState currently sets markerInvasions to [] whenever any blocker exists. This makes markers hide all invasions even when the blocker is a gold stop (priority INVASION_GENERIC) and an invasion has equal/higher priority, which also conflicts with isIncidentBlockedBy (uses >). Consider only suppressing invasions when the blocker is actually stronger than the strongest invasion priority (or otherwise align the marker suppression rule with the popup disabling rule).
| const markerInvasions = blocker ? [] : popupInvasions | |
| const strongestInvasionPriority = popupInvasions.reduce( | |
| (maxPriority, invasion) => | |
| Math.max(maxPriority, getInvasionIncidentPriority(invasion)), | |
| 0, | |
| ) | |
| const markerInvasions = | |
| blocker && blocker.priority > strongestInvasionPriority | |
| ? [] | |
| : popupInvasions |
| /** | ||
| * @param {{ display_type?: number | string | null, event_expire_timestamp?: number | string | null }} event | ||
| * @returns {boolean} | ||
| */ | ||
| export function isActiveEvent(event, ts) { | ||
| return Number(event?.event_expire_timestamp ?? 0) > ts | ||
| } | ||
|
|
||
| /** | ||
| * @param {{ grunt_type?: number | string | null, incident_expire_timestamp?: number | string | null }} invasion | ||
| * @returns {boolean} | ||
| */ | ||
| export function isActiveInvasion(invasion, ts) { | ||
| return ( | ||
| Number(invasion?.grunt_type ?? 0) > 0 && | ||
| Number(invasion?.incident_expire_timestamp ?? 0) > ts | ||
| ) |
There was a problem hiding this comment.
The JSDoc for isActiveEvent/isActiveInvasion does not document the ts parameter even though the functions require it. With // @ts-check enabled, adding @param {number} ts (and similarly for both functions) will improve type checking and prevent accidental calls without a timestamp.
|
🎉 This PR is included in version 1.41.2 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
🫡