diff --git a/.eslintignore b/.eslintignore index e8f73169c..ee37d83e1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,4 +4,4 @@ public/missing-locales public/images/custom public/images/uicons server/src/configs/ -packages/types/**/*.d.ts +packages/**/*.d.ts diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index d5cf949ef..8f4244f60 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -2,22 +2,20 @@ name: Config on: workflow_call jobs: - config: - if: ${{ github.ref_name == 'main' || github.ref_name == 'develop'}} - name: Config Sync + sync: runs-on: ubuntu-latest + env: + changes_exist: 'false' steps: - name: Checkout code id: checkout-code - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 with: fetch-depth: 2 - name: Run script - run: | - yarn config:check + run: yarn config:check - name: Generate latest env vars - run: | - yarn config:env + run: yarn config:env - name: Configure git run: | git config --global user.name "turtlesocks-bot" @@ -33,5 +31,5 @@ jobs: if: ${{ env.changes_exist == 'true' }} run: | git add --all - git commit --message "chore: Sync Config [skip ci]" + git commit --message "chore: Sync Config" git push diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a0f539a3b..dc6dcf2ba 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -6,16 +6,16 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: - Docker: + release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4.1.1 - name: Set .gitsha if: github.event_name == 'push' - run: 'echo ${{github.sha}} > .gitsha' + run: 'echo ${{ github.sha }} > .gitsha' - name: Set .gitref if: github.event_name == 'push' - run: 'echo ${{github.ref}} > .gitref' + run: 'echo ${{ github.ref }} > .gitref' - name: Log in to the Container registry uses: docker/login-action@v2 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 78067df92..3f1dddf2f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,22 +1,20 @@ name: Lint -on: [push, pull_request] +on: workflow_call jobs: - lint: - if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository - name: Lint Check + run: runs-on: ubuntu-latest steps: - name: Checkout Code id: checkout-code - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 with: fetch-depth: 2 - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v4.0.2 with: node-version: 20 - cache: 'yarn' + cache: yarn - name: Install Dependencies run: yarn diff --git a/.github/workflows/locales.yml b/.github/workflows/locales.yml index a41ba4a44..0d15df175 100644 --- a/.github/workflows/locales.yml +++ b/.github/workflows/locales.yml @@ -4,24 +4,23 @@ on: workflow_call permissions: write-all jobs: - locales: + sync: if: ${{ github.ref_name == 'main' }} - name: Locales Sync runs-on: ubuntu-latest + env: + changes_exist: 'false' steps: - name: Checkout code id: checkout-code - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 with: fetch-depth: 2 - name: Install dependencies - run: | - yarn + run: yarn - name: Run generating script - run: | - yarn locales:generate + run: yarn locales:generate env: - OPENAI_API_KEY: ${{secrets.OPENAI_API_KEY}} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - name: Configure git run: | git config --global user.name "turtlesocks-bot" @@ -39,7 +38,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | git add --all - git commit --message "chore: sync locales [skip ci]" + git commit --message "chore: sync locales" git push git checkout develop git merge main diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0e2de55b1..c846f5023 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,16 +1,22 @@ name: Main CI -on: [push, pull_request] +on: + push: + branches: + - main + - develop jobs: + lint: + uses: ./.github/workflows/lint.yml config: uses: ./.github/workflows/config.yml locales: uses: ./.github/workflows/locales.yml release: - uses: ./.github/workflows/release.yml - needs: [config, locales] if: always() + uses: ./.github/workflows/release.yml + needs: [config, locales, lint] docker: - if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository) && always() + if: always() uses: ./.github/workflows/docker.yml - needs: [config, locales] + needs: [config, locales, lint] diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 000000000..3b8f1ba77 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,9 @@ +name: Pull Request +on: pull_request + +jobs: + lint: + uses: ./.github/workflows/lint.yml + docker: + if: github.event.pull_request.head.repo.full_name == github.repository + uses: ./.github/workflows/docker.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dd99f8f25..933bf5fe9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,13 +4,12 @@ on: workflow_call permissions: write-all jobs: - release: + run: if: ${{ github.ref_name == 'main' || github.ref_name == 'develop'}} - name: GitHub Release runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 with: fetch-depth: 0 - name: Install Volta diff --git a/.github/workflows/sentry.yml b/.github/workflows/sentry.yml index 0621220c0..c049438b6 100644 --- a/.github/workflows/sentry.yml +++ b/.github/workflows/sentry.yml @@ -1,23 +1,22 @@ name: Sentry on: release: - types: [created, published] + types: [created, published, prereleased, released] jobs: - sentry: - name: Sentry + release: runs-on: ubuntu-latest steps: - name: Checkout Code id: checkout-code - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 with: fetch-depth: 2 - name: Setup Node.js environment - uses: actions/setup-node@v3 + uses: actions/setup-node@v4.0.2 with: - node-version: 18 - cache: 'yarn' + node-version: 20 + cache: yarn - name: Install Dependencies run: yarn @@ -25,7 +24,7 @@ jobs: - name: Sentry Build run: yarn release env: - SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} - SENTRY_DSN: ${{secrets.SENTRY_DSN}} - SENTRY_ORG: ${{secrets.SENTRY_ORG}} - SENTRY_PROJECT: ${{secrets.SENTRY_PROJECT}} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0071d6434..2f09779cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,178 @@ +# [1.30.0-develop.17](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.16...v1.30.0-develop.17) (2024-03-05) + + +### Bug Fixes + +* attempt to keep available/masterfile more in sync ([1961af3](https://github.com/WatWowMap/ReactMap/commit/1961af3e3f1953c19f330bec3d191a3b6ef5dca3)) + +# [1.30.0-develop.16](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.15...v1.30.0-develop.16) (2024-03-04) + + +### Bug Fixes + +* 0iv/100iv overrides in a specific scenario ([aebebf1](https://github.com/WatWowMap/ReactMap/commit/aebebf10f86a0562fd4eb098fbe0cf364453dc4b)) + +# [1.30.0-develop.15](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.14...v1.30.0-develop.15) (2024-03-02) + + +### Bug Fixes + +* oops, swap ternary ([bdcfaf4](https://github.com/WatWowMap/ReactMap/commit/bdcfaf4d92fc64d1776e6f87e11713736621874d)) + +# [1.30.0-develop.14](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.13...v1.30.0-develop.14) (2024-03-02) + + +### Bug Fixes + +* adjust wayfarer line weights ([e6c0696](https://github.com/WatWowMap/ReactMap/commit/e6c0696159c1feceda41aea12b9e16b2a5cd7838)) + + +### Features + +* spacial rend range ([374c5eb](https://github.com/WatWowMap/ReactMap/commit/374c5eb09986307fb5e2e59930e18a066b22df47)) + +# [1.30.0-develop.13](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.12...v1.30.0-develop.13) (2024-03-01) + + +### Bug Fixes + +* add missing `key` prop & simplify ([05be65c](https://github.com/WatWowMap/ReactMap/commit/05be65c93537c061c91db870f9f39a59da2684d1)) + +# [1.30.0-develop.12](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.11...v1.30.0-develop.12) (2024-02-29) + + +### Bug Fixes + +* improved jsdocs for search method ([5dcf288](https://github.com/WatWowMap/ReactMap/commit/5dcf28810be5ad1063abee7ae234993a3c42be57)) + +# [1.30.0-develop.11](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.10...v1.30.0-develop.11) (2024-02-27) + + +### Bug Fixes + +* various text fixes ([6eb9c6a](https://github.com/WatWowMap/ReactMap/commit/6eb9c6aed1d0ba557220799560ec498fc6f7e6dc)), closes [#967](https://github.com/WatWowMap/ReactMap/issues/967) + +# [1.30.0-develop.10](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.9...v1.30.0-develop.10) (2024-02-27) + + +### Bug Fixes + +* pokemon ui inconsistency ([0cb334c](https://github.com/WatWowMap/ReactMap/commit/0cb334c44748dbbe2a591cc5b61c466b7487f3bf)) + +# [1.30.0-develop.9](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.8...v1.30.0-develop.9) (2024-02-27) + + +### Bug Fixes + +* various small things ([ada7947](https://github.com/WatWowMap/ReactMap/commit/ada7947313300864da5a524c0233bb8c31d5c1bc)) + +# [1.30.0-develop.8](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.7...v1.30.0-develop.8) (2024-02-27) + + +### Bug Fixes + +* 0s in gym popup ([2d9bdc1](https://github.com/WatWowMap/ReactMap/commit/2d9bdc1665715d7d3dfa6bd3b6f05b9471b12abe)) +* map dependency checks ([85c992d](https://github.com/WatWowMap/ReactMap/commit/85c992dc499f0c25dff2ba00ec75e4bb20911bab)) + +# [1.30.0-develop.7](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.6...v1.30.0-develop.7) (2024-02-27) + + +### Bug Fixes + +* importing ([89b7fce](https://github.com/WatWowMap/ReactMap/commit/89b7fcebca0a58959ecc29418db4a75390072ffd)) +* less strict searching for `'` ([ca08a69](https://github.com/WatWowMap/ReactMap/commit/ca08a690fca54f90132b4688b5700532958b60f5)) +* Merge pull request [#963](https://github.com/WatWowMap/ReactMap/issues/963) from ReuschelCGN/translation ([cbc0160](https://github.com/WatWowMap/ReactMap/commit/cbc0160f6820a68fed04c9b7b57a287cfaf66f58)) +* safe 0 fallback ([45795a8](https://github.com/WatWowMap/ReactMap/commit/45795a80d114f7b638ff6a7a0d0438811dd86511)) + + +### Features + +* data management page ([561c031](https://github.com/WatWowMap/ReactMap/commit/561c031e0f290d7c63e17b6a645e8b145cf2e4d1)) + +# [1.30.0-develop.6](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.5...v1.30.0-develop.6) (2024-02-23) + + +### Bug Fixes + +* refine ci ([515de64](https://github.com/WatWowMap/ReactMap/commit/515de64e6a7275b6b7afbdb287e18be15f373e4d)) + +# [1.30.0-develop.5](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.4...v1.30.0-develop.5) (2024-02-23) + + +### Features + +* pkmn filter diagram ([a40b201](https://github.com/WatWowMap/ReactMap/commit/a40b20123a78f3d565a47ed9266c16da3b979bdb)) + +# [1.30.0-develop.4](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.3...v1.30.0-develop.4) (2024-02-21) + + +### Bug Fixes + +* try/catch on expert filter just in case ([4e430e6](https://github.com/WatWowMap/ReactMap/commit/4e430e6e1e1729ef56095b7a414f9521c6d27d75)) + +# [1.30.0-develop.3](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.2...v1.30.0-develop.3) (2024-02-21) + + +### Bug Fixes + +* normal form check ([47e358b](https://github.com/WatWowMap/ReactMap/commit/47e358b5cc01d75eb49cfa3b4654adf09b23af28)) + +# [1.30.0-develop.2](https://github.com/WatWowMap/ReactMap/compare/v1.30.0-develop.1...v1.30.0-develop.2) (2024-02-21) + + +### Bug Fixes + +* early version check ([c9d1295](https://github.com/WatWowMap/ReactMap/commit/c9d129597d00fbcc19b4f164f4ea1ca468f09fed)) + +# [1.30.0-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.29.7-develop.5...v1.30.0-develop.1) (2024-02-21) + + +### Features + +* update polish locales ([#959](https://github.com/WatWowMap/ReactMap/issues/959)) ([d28dc0a](https://github.com/WatWowMap/ReactMap/commit/d28dc0af8445002f0f9b52e87f6eb08966182d24)) + +## [1.29.7-develop.5](https://github.com/WatWowMap/ReactMap/compare/v1.29.7-develop.4...v1.29.7-develop.5) (2024-02-12) + + +### Bug Fixes + +* more consistent gender filtering ([a3b24cb](https://github.com/WatWowMap/ReactMap/commit/a3b24cb6d4625c23d8d341c4b7cad62846b184c3)) + +## [1.29.7-develop.4](https://github.com/WatWowMap/ReactMap/compare/v1.29.7-develop.3...v1.29.7-develop.4) (2024-02-12) + + +### Bug Fixes + +* respect quest layer when searching ([4b0e0cc](https://github.com/WatWowMap/ReactMap/commit/4b0e0cc273b0e3c4988d4d3f0ded13053e3c75b6)), closes [#950](https://github.com/WatWowMap/ReactMap/issues/950) + +## [1.29.7-develop.3](https://github.com/WatWowMap/ReactMap/compare/v1.29.7-develop.2...v1.29.7-develop.3) (2024-02-12) + + +### Bug Fixes + +* `onlyShowAvailable` for nests selector ([068dac2](https://github.com/WatWowMap/ReactMap/commit/068dac25f7ffbb0594619202b85fa64801c835c8)) +* nest name memoization ([ec56d7d](https://github.com/WatWowMap/ReactMap/commit/ec56d7d79e0a5d53599307e2e3768b8dddce7852)) + +## [1.29.7-develop.2](https://github.com/WatWowMap/ReactMap/compare/v1.29.7-develop.1...v1.29.7-develop.2) (2024-02-10) + + +### Bug Fixes + +* **nest:** make it compatible with previous tools ([9d97481](https://github.com/WatWowMap/ReactMap/commit/9d97481039356de2c1e6165abbb207a7d7af6cce)) +* **nest:** query only active nests ([ebb5295](https://github.com/WatWowMap/ReactMap/commit/ebb529578207e1d6a11f40a99e942030ec95c3e0)) + +## [1.29.7-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.29.6...v1.29.7-develop.1) (2024-02-08) + + +### Bug Fixes + +* cache most things at process exit instead ([56eb47e](https://github.com/WatWowMap/ReactMap/commit/56eb47eca6e05f78e4b0b518b6d7fb6a5c901bc2)) +* config getters ([494639a](https://github.com/WatWowMap/ReactMap/commit/494639a28289fac90e0898cf2d443ba7a2c5c41d)) +* dont log golbat 404 pokemon id errors ([7292d13](https://github.com/WatWowMap/ReactMap/commit/7292d13f9b7460a7b40d1b3bcb45c751d183b953)) +* express session augmentation ([35533e9](https://github.com/WatWowMap/ReactMap/commit/35533e9b86518d496e71ff6a3fb93f54ad51864c)) +* favicon error catching for dummies ([b6c0fae](https://github.com/WatWowMap/ReactMap/commit/b6c0fae43ef8e4312bc61c265c8c16cd4a0c1ee5)) +* more client ts checks ([5028cb2](https://github.com/WatWowMap/ReactMap/commit/5028cb2221ac44e65620927bd69a10f4958f6d9c)) + ## [1.29.6](https://github.com/WatWowMap/ReactMap/compare/v1.29.5...v1.29.6) (2024-02-06) @@ -21,649 +196,608 @@ ## [1.29.3](https://github.com/WatWowMap/ReactMap/compare/v1.29.2...v1.29.3) (2024-02-06) - ### Bug Fixes -* test ([cb71760](https://github.com/WatWowMap/ReactMap/commit/cb71760dfb149e82837f2d9cecda742099495750)) +- test ([cb71760](https://github.com/WatWowMap/ReactMap/commit/cb71760dfb149e82837f2d9cecda742099495750)) -## [1.29.2](https://github.com/WatWowMap/ReactMap/compare/v1.29.1...v1.29.2) (2024-02-06) +## [1.29.2-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.29.1...v1.29.2-develop.1) (2024-02-06) +## [1.29.2](https://github.com/WatWowMap/ReactMap/compare/v1.29.1...v1.29.2) (2024-02-06) ### Bug Fixes -* simply ci ([ff0f718](https://github.com/WatWowMap/ReactMap/commit/ff0f718bf8d018226b72d0d324fe3916a6d5628b)) +- simply ci ([ff0f718](https://github.com/WatWowMap/ReactMap/commit/ff0f718bf8d018226b72d0d324fe3916a6d5628b)) ## [1.29.1](https://github.com/WatWowMap/ReactMap/compare/v1.29.0...v1.29.1) (2024-02-05) - ### Bug Fixes -* ci stuff ([7525855](https://github.com/WatWowMap/ReactMap/commit/752585576ceb066ae86bef271931551447513d77)) +- ci stuff ([7525855](https://github.com/WatWowMap/ReactMap/commit/752585576ceb066ae86bef271931551447513d77)) # [1.29.0](https://github.com/WatWowMap/ReactMap/compare/v1.28.0...v1.29.0) (2024-02-05) - ### Bug Fixes -* `this.refetch` check ([e57f1b0](https://github.com/WatWowMap/ReactMap/commit/e57f1b0235401a3dd90725003fb94b11c33869d3)) -* active weather ([6541aa8](https://github.com/WatWowMap/ReactMap/commit/6541aa852a6747912994f733fbe613d355c0b2ab)) -* add search log tag ([fbb781a](https://github.com/WatWowMap/ReactMap/commit/fbb781add772d3d91acc039d82264523d8e55f21)) -* add time log ([3acfef4](https://github.com/WatWowMap/ReactMap/commit/3acfef4bf14ddcaec7163dde943abdcf239f7371)) -* adjust expert description ([d6f04e0](https://github.com/WatWowMap/ReactMap/commit/d6f04e06918342f4820c6f44d7b9cc6a5ec9595c)) -* admin items ([7e6a62e](https://github.com/WatWowMap/ReactMap/commit/7e6a62e678a384359374efcc751158b99d8485eb)) -* adv filter options on mobile ([93234c3](https://github.com/WatWowMap/ReactMap/commit/93234c37193f612d856153e5d8ab9f2348b84b82)) -* alignment uicons by id ([b17753f](https://github.com/WatWowMap/ReactMap/commit/b17753f8ac8ffaddbbf4fdb9ab9041dfd6159002)) -* also show types in quick select ([c3f35dc](https://github.com/WatWowMap/ReactMap/commit/c3f35dc2aa9e21d9bb8b228ed36c07afd90700c9)) -* always save new masterfile ([2f80d2c](https://github.com/WatWowMap/ReactMap/commit/2f80d2cff04df027d6bbef065c4a1bcc79ce2c35)) -* apply to all btns ([19997aa](https://github.com/WatWowMap/ReactMap/commit/19997aae6031b2f4b4b1bf528f24147a08eab137)) -* available for other permissions ([425ab3a](https://github.com/WatWowMap/ReactMap/commit/425ab3a8f614fe46e28c333f422f2f1bc17efb7a)) -* better regex for mapping minified errors ([cd0c28b](https://github.com/WatWowMap/ReactMap/commit/cd0c28b63d809d7c4acb08c58588c6449543c982)) -* better slide/input behaviors ([98686b8](https://github.com/WatWowMap/ReactMap/commit/98686b8645d20115953904f270c6f741aa390f54)) -* bunch of poracle webhook stuff ([fa4e628](https://github.com/WatWowMap/ReactMap/commit/fa4e628beb142e5dd8153abde054d4217126697c)) -* caching ([bb74b24](https://github.com/WatWowMap/ReactMap/commit/bb74b2409db441031884d1959e6a1030b592c316)) -* ci commit messages ([ca42361](https://github.com/WatWowMap/ReactMap/commit/ca42361aa56b6e5438134656eb475a2a089dc1db)) -* circular ref ([0a212dd](https://github.com/WatWowMap/ReactMap/commit/0a212dd093e11bc9c0def5d5296bd9608511e715)) -* cleanup from slot selection changes ([57ae335](https://github.com/WatWowMap/ReactMap/commit/57ae33519f0e692e3f1c48bcc527d7496b1efdad)) -* cleanups ([52690be](https://github.com/WatWowMap/ReactMap/commit/52690be10a3accae108c02803c51b14cee2b0111)) -* cleanups ([9ac88ca](https://github.com/WatWowMap/ReactMap/commit/9ac88ca6c18019eae2f7d0f5869ddacfab2719fd)) -* compare array sizes before updating ([b088b7b](https://github.com/WatWowMap/ReactMap/commit/b088b7b2d2af2aaccbcd9b9808772b0b2e6eb312)) -* couple of fixes ([ac2a1c5](https://github.com/WatWowMap/ReactMap/commit/ac2a1c536f9d473c0ba27e96246b1a66a9b8fb74)) -* disable prop for multiselector ([1cf4955](https://github.com/WatWowMap/ReactMap/commit/1cf4955c843253e9429155a3ba3a785808f40160)) -* disable prop for size & gender ([33c6df7](https://github.com/WatWowMap/ReactMap/commit/33c6df7204ea8bd7655fec70640ebe423d84c579)) -* disable sandbox ([fe93cfc](https://github.com/WatWowMap/ReactMap/commit/fe93cfc6166808f8616528cf18fe65d1a4dc16e2)) -* ditto filtering ([2f6ddaa](https://github.com/WatWowMap/ReactMap/commit/2f6ddaab3e1c1fe973446a7a326e1911998d884a)) -* don't always have to hit the limit ([39ac769](https://github.com/WatWowMap/ReactMap/commit/39ac7690806dbedf5424515870beda64c0cb229a)) -* dont show showcase mon if null ([e49b885](https://github.com/WatWowMap/ReactMap/commit/e49b885e277a6c6ffbab513c35f16cdfa9fe4c47)) -* dyslexia? ([3c25864](https://github.com/WatWowMap/ReactMap/commit/3c25864b85f4ec712fc08caad50369d1b62c661c)) -* enabled/all/disabled logic ([fc6c8ac](https://github.com/WatWowMap/ReactMap/commit/fc6c8ac7e82015d5f3d018814439fb0b1cd6f8d0)) -* entering 0 on sliders ([0cb103c](https://github.com/WatWowMap/ReactMap/commit/0cb103cd297dd3e3b3baba362c60961bdacbf598)) -* export settings ([315508d](https://github.com/WatWowMap/ReactMap/commit/315508d841d2289c5096581c8d5afe0582516ff2)) -* ez mode checks ([e2bb1f0](https://github.com/WatWowMap/ReactMap/commit/e2bb1f0d118ce3751cd5209be74f98ea920e9800)) -* ez mode filter behavior ([0b0dd7d](https://github.com/WatWowMap/ReactMap/commit/0b0dd7dee74e1d1602514ec673c48ca646ec408d)) -* fallback state ([5ea5d15](https://github.com/WatWowMap/ReactMap/commit/5ea5d15659d21a77f49496a3aea70d3d0ec29a3d)) -* favicon in dev ([353a7aa](https://github.com/WatWowMap/ReactMap/commit/353a7aa5e21c01d2ae5a4a59e3a1f7f8afb490ba)) -* fetch available in menus too ([55d2fc8](https://github.com/WatWowMap/ReactMap/commit/55d2fc8bdbb64d8977049b3e3d26c0028ff83394)) -* filtering edge cases ([a1b1580](https://github.com/WatWowMap/ReactMap/commit/a1b15806af30314dd90712f10180508ab75f7ebd)) -* force ci? ([5026661](https://github.com/WatWowMap/ReactMap/commit/5026661dd5546ab1125482372e490d9bb570ccea)) -* forgot my own type i18n keys ([d74f239](https://github.com/WatWowMap/ReactMap/commit/d74f2398fd099817ad12a624fd53a737eb7bd45d)) -* fr showcase translation ([c0f74fb](https://github.com/WatWowMap/ReactMap/commit/c0f74fbd003230fe3da162e9520b93e24657a42c)) -* further dnf refinements ([da08236](https://github.com/WatWowMap/ReactMap/commit/da08236f869be56e1a21f4b8a108f78be1cfa834)) -* global 0/100 iv toggles ([272d80d](https://github.com/WatWowMap/ReactMap/commit/272d80df4c07d858cfb29b3ceef5ad6472c12216)) -* gql types ([e1e499a](https://github.com/WatWowMap/ReactMap/commit/e1e499a52239d091e52f779e5149d8808d395be6)) -* gym badge fixes ([1cadea0](https://github.com/WatWowMap/ReactMap/commit/1cadea0e4c4bfa3894ffd2629ef09c7ba2e2ed79)) -* gym badge menu from popup ([8cea2fb](https://github.com/WatWowMap/ReactMap/commit/8cea2fb47d786f1a74dcb03087f13cacb0645dfa)) -* gym badge page styling ([7016369](https://github.com/WatWowMap/ReactMap/commit/7016369f146f2aae52e72cc79db5725c43101c4c)) -* hide all logic in adv menu for some items ([0561829](https://github.com/WatWowMap/ReactMap/commit/05618292589dc60118eaa9f2f3cf90234722c475)) -* hmm ([58d1ece](https://github.com/WatWowMap/ReactMap/commit/58d1ece97ddf4098b1217e2101d2b4b7dbb93237)) -* id when searching ([1802ca6](https://github.com/WatWowMap/ReactMap/commit/1802ca6cac9215581a6097bb1cfa9ea6bfc3cdf8)) -* invasion quick selector ([ad4471a](https://github.com/WatWowMap/ReactMap/commit/ad4471a67ccb88020757c899fcf8ab5e266b9ffc)) -* issue in webhook adv menu ([190289a](https://github.com/WatWowMap/ReactMap/commit/190289a109184ad2c5678f2951986d6b525c8254)), closes [#926](https://github.com/WatWowMap/ReactMap/issues/926) -* lift version of ci ([4fd4bb6](https://github.com/WatWowMap/ReactMap/commit/4fd4bb6e8e3388bd1370375ea3a357feb1cfa0e3)) -* locale dest ([8dd94c9](https://github.com/WatWowMap/ReactMap/commit/8dd94c90b112194c37403b9823171890c4d8580f)) -* make `allForms` false by default for usability ([cff0e23](https://github.com/WatWowMap/ReactMap/commit/cff0e234a1d9a4069da8a4cd12b5f8a0d3f9c6a0)) -* make showcase icons smaller by default ([b0c587a](https://github.com/WatWowMap/ReactMap/commit/b0c587aecd8126c1644a01c0fc459bc17dca0af2)) -* make the selector more generic friendly for other categories ([6259bc2](https://github.com/WatWowMap/ReactMap/commit/6259bc2101029c367300ebe98df082ad7c15a124)) -* mega energy icons by id ([ced7d7c](https://github.com/WatWowMap/ReactMap/commit/ced7d7c51401c96e2264e7028f83abe59f2c7fd7)) -* missing label on search ([36f2bd8](https://github.com/WatWowMap/ReactMap/commit/36f2bd8662a12a5c4260e4d144e897acf86571b8)) -* missing translations ([4d6d5ec](https://github.com/WatWowMap/ReactMap/commit/4d6d5eccf28f35794e7d660d0dd25f9475cb36e0)) -* more filter tweaks ([a4c4eee](https://github.com/WatWowMap/ReactMap/commit/a4c4eee7cba6dee004af0ab31ccba84a52273d17)) -* more limit adjustments ([6e6bbff](https://github.com/WatWowMap/ReactMap/commit/6e6bbffc162df7bbc54c9c98b546bfe3698d25a0)) -* more pokemon search refinements ([8fa91e1](https://github.com/WatWowMap/ReactMap/commit/8fa91e1691b8c52f83e7a9ce39aaafab5a5822a8)) -* only show catchable shadow pokes ([fd519de](https://github.com/WatWowMap/ReactMap/commit/fd519de58b1cb3ad5f436387851bd3dbea5d7981)) -* only show edit adv for all for pokemon ([622f179](https://github.com/WatWowMap/ReactMap/commit/622f17933dfed9a9b78647a4fcc7c4df3b105fdd)) -* opening adv mode from drawer ([5c2f080](https://github.com/WatWowMap/ReactMap/commit/5c2f080dda691b3f80572ad21e2757117e9c3855)) -* pokemon zoom ([9bbc70d](https://github.com/WatWowMap/ReactMap/commit/9bbc70d54bd21763b00e4cd396ab6669a592a198)) -* pokestop marker adjustments ([c81340c](https://github.com/WatWowMap/ReactMap/commit/c81340c4c1aab378af9e04dfae23677c4b3a1bd0)) -* poracle manager with new state fixes ([f4564ef](https://github.com/WatWowMap/ReactMap/commit/f4564efe7ca578599756ddead77b957ad28e085f)) -* poracle saving/closing ([6251b5c](https://github.com/WatWowMap/ReactMap/commit/6251b5c77a9285bb9944d1a8adfd7c32881a2361)) -* possible fix for leaflet location issue ([4aefb90](https://github.com/WatWowMap/ReactMap/commit/4aefb90d85db6a1e873355e032c03281b7b13b56)) -* prop cleanups ([8b7d25d](https://github.com/WatWowMap/ReactMap/commit/8b7d25d0f8a862ec50d1a91675fa67c5a7f7364a)) -* pvp mons with no iv perm ([fce7eb9](https://github.com/WatWowMap/ReactMap/commit/fce7eb91e6cb1ed6ee387807b27de8584dafbb14)) -* quest conditions ([92af316](https://github.com/WatWowMap/ReactMap/commit/92af31602e6cf79ba345734a25f4ba098d2f53ef)) -* refine dnf filter generation ([875b961](https://github.com/WatWowMap/ReactMap/commit/875b961dd9bc4cb17ab297f8e2da517e21f04baa)) -* release workflows ([6e8fa3c](https://github.com/WatWowMap/ReactMap/commit/6e8fa3cafe146dc6de085d3eea83c9257626fe51)) -* remove `clear` icon for now ([58aed37](https://github.com/WatWowMap/ReactMap/commit/58aed3764b8c01df9f12dff680be8ec6a72380f2)) -* remove `excludeList` - no longer needed ([bc3adba](https://github.com/WatWowMap/ReactMap/commit/bc3adbafd16fd01000cbd2a6779244a2725615e2)) -* remove blue from types ([33ffc13](https://github.com/WatWowMap/ReactMap/commit/33ffc13bc5e4c366f74ccc1d3c1de05ea5e12e2f)) -* remove log ([e572b3b](https://github.com/WatWowMap/ReactMap/commit/e572b3b6f405d87cfd553797f8b081cbd6812b2d)) -* remove old eslint heading ([768affc](https://github.com/WatWowMap/ReactMap/commit/768affc24ac06edaffdd109ce39042dfc46a732e)) -* remove showcase on kecleon ([c42c9f4](https://github.com/WatWowMap/ReactMap/commit/c42c9f486ac1cab75cc34e93805fed746aa22f47)) -* remove unnecessary r filters from quick select ([f0a3b28](https://github.com/WatWowMap/ReactMap/commit/f0a3b2853bbe5970cd84917fece6980f2828022a)) -* remove unused ([a0d1e6c](https://github.com/WatWowMap/ReactMap/commit/a0d1e6c18f2533ac2220618ef6dce31f57949c9a)) -* revert ([54d97fe](https://github.com/WatWowMap/ReactMap/commit/54d97fe28b801db7027870cf99dd2cf7b76f9b8b)) -* revert updating leaflet locate control ([97d9e07](https://github.com/WatWowMap/ReactMap/commit/97d9e076330135f521371b002b23f19f8e941904)) -* rework ci/cd ([c6c7ed4](https://github.com/WatWowMap/ReactMap/commit/c6c7ed42c64dab39725f37cb00d00162c7252a54)) -* s2 cells ([2048b73](https://github.com/WatWowMap/ReactMap/commit/2048b73961f740e13affe66bc5291dedde6cf8f8)) -* saving and closing webhooks while editing ([ce9eb43](https://github.com/WatWowMap/ReactMap/commit/ce9eb438e0d755076e799211d9d3c57b4c2ee175)) -* search case sensitive in adv menu ([be5846d](https://github.com/WatWowMap/ReactMap/commit/be5846d087ecec3af3e44c61297e1b2cab5a3179)) -* search fields ([581949c](https://github.com/WatWowMap/ReactMap/commit/581949c686a47abd9c8f50c78e027ab80bc354f7)) -* search translations in webhook tracked ([5ef29ee](https://github.com/WatWowMap/ReactMap/commit/5ef29ee53855fc0065b465dc53915ea21efb91ab)) -* search value clear ([05ae312](https://github.com/WatWowMap/ReactMap/commit/05ae312c9db7cf2c642940c2c5cc48adb2a9e039)) -* search/setting filtered behavior ([a30c286](https://github.com/WatWowMap/ReactMap/commit/a30c2869a5642cc4061970e4ef6b1fcbb1bc9fff)) -* searchable ([8f11741](https://github.com/WatWowMap/ReactMap/commit/8f117412c5f4e9ef5588332472d21d6f20169e76)) -* seeing if this helps ([044cd70](https://github.com/WatWowMap/ReactMap/commit/044cd70b822031d355266530c4bbe2daa66ebb73)) -* show confirm switch if enabled ([2e03c50](https://github.com/WatWowMap/ReactMap/commit/2e03c500f3e6428d925dad301221c734f397171c)) -* showcase filtering ([8c9d08a](https://github.com/WatWowMap/ReactMap/commit/8c9d08a561d39e0891fc02a1d7e3d8c20e420fd0)) -* showing feedback ([50b06c3](https://github.com/WatWowMap/ReactMap/commit/50b06c3553d69539bab59e7a5c7e449984151dbe)) -* skip `h` filters on backend ([2020c40](https://github.com/WatWowMap/ReactMap/commit/2020c40e3f30196ca5effb9fb78d4115e3ccdd7b)) -* slider states when disabled ([4d88c1a](https://github.com/WatWowMap/ReactMap/commit/4d88c1a04ca9b3babbb88093327df3cc8ad4a9be)) -* slight optimization for query requests ([706581b](https://github.com/WatWowMap/ReactMap/commit/706581b28a29c2a09982051c53f29c862c045252)) -* slightly more aggressive additions when there's 0 ([d062e52](https://github.com/WatWowMap/ReactMap/commit/d062e5219830039e1ae381e879c890293dd67f3f)) -* some pokestop filtering ([ef6be7f](https://github.com/WatWowMap/ReactMap/commit/ef6be7f96422b136e846c3a9d53cd30e573b0c6f)) -* some state bugs ([2daf109](https://github.com/WatWowMap/ReactMap/commit/2daf1091019e8c0f757df4b466c7db099ed1fc98)) -* standard filter backup ([5a0cdf5](https://github.com/WatWowMap/ReactMap/commit/5a0cdf5150e9e168898f1da6536d613f45d38350)) -* state bug & consolidate translations ([d6e6a79](https://github.com/WatWowMap/ReactMap/commit/d6e6a79cc5472f773fd632a2b0fec47d4a7bd337)) -* state filter stuff ([70c958e](https://github.com/WatWowMap/ReactMap/commit/70c958ec97b8e8875c4850720775fd164e2614e6)) -* stop crashing leaflet when map crashes ([45349be](https://github.com/WatWowMap/ReactMap/commit/45349be24075723909ee59dcfb64e14e83674a70)) -* string fallback ([11ce4ca](https://github.com/WatWowMap/ReactMap/commit/11ce4ca61094ebcb24a7457c97c79349c72513b6)) -* submission cell menu items ([01c6350](https://github.com/WatWowMap/ReactMap/commit/01c6350a2fffc1b810d8d5d949d7906844cf3b5c)) -* support for `all` in pokestop model ([cb57574](https://github.com/WatWowMap/ReactMap/commit/cb57574ad8502175ee7b18fd159eb3ce765c5833)) -* title check ([7f10790](https://github.com/WatWowMap/ReactMap/commit/7f10790ed15868677bc4ea1cc99a00a5fb34c9c2)) -* top level state changes ([f401bbe](https://github.com/WatWowMap/ReactMap/commit/f401bbe457ecfbb07b42554528c42fad55bd7d75)) -* tut welcome page ([3c9e40c](https://github.com/WatWowMap/ReactMap/commit/3c9e40c7300d06420a83fb0e7292c14c79e050b0)) -* types ([360f87c](https://github.com/WatWowMap/ReactMap/commit/360f87c8c03077ef6da583dc36ddb98600ad04ee)) -* uid for editing ([818a958](https://github.com/WatWowMap/ReactMap/commit/818a9584e4c385ec841d97beff7dee37369d40c8)) -* unknown shocases ([99cf89b](https://github.com/WatWowMap/ReactMap/commit/99cf89b911dbd7032e08f9f2bc524151ec110d7c)), closes [#941](https://github.com/WatWowMap/ReactMap/issues/941) -* unmount scanAreas section ([49ec133](https://github.com/WatWowMap/ReactMap/commit/49ec1334f217c49532cd85cb4bce5d496fd5dec7)) -* updating robust timeout refetch fn ([ff84870](https://github.com/WatWowMap/ReactMap/commit/ff84870c994136a15da7af2fe31bf947eb830e63)) -* user fields ([15ad84d](https://github.com/WatWowMap/ReactMap/commit/15ad84df882d363a55ccd50fec17ee4372bdb837)) -* username fallback ([05261c1](https://github.com/WatWowMap/ReactMap/commit/05261c108236225d7e3b01d609cfbef02e769ed3)) -* various webhook things ([a4b7db5](https://github.com/WatWowMap/ReactMap/commit/a4b7db515e991e0af3be8d5d42de4b4ce9cfbed4)) -* vite config for `yarn start` ([1b1ea4a](https://github.com/WatWowMap/ReactMap/commit/1b1ea4a874d1828c8f672275f85ab26accae38b6)) -* vite prod build ([ed93946](https://github.com/WatWowMap/ReactMap/commit/ed93946c653e391210ae6a34f3b968437e249fef)) -* xxs/xxl names ([d6a8906](https://github.com/WatWowMap/ReactMap/commit/d6a890621a84242264ae35b79e204c5fc9e2bc96)) - +- `this.refetch` check ([e57f1b0](https://github.com/WatWowMap/ReactMap/commit/e57f1b0235401a3dd90725003fb94b11c33869d3)) +- active weather ([6541aa8](https://github.com/WatWowMap/ReactMap/commit/6541aa852a6747912994f733fbe613d355c0b2ab)) +- add search log tag ([fbb781a](https://github.com/WatWowMap/ReactMap/commit/fbb781add772d3d91acc039d82264523d8e55f21)) +- add time log ([3acfef4](https://github.com/WatWowMap/ReactMap/commit/3acfef4bf14ddcaec7163dde943abdcf239f7371)) +- adjust expert description ([d6f04e0](https://github.com/WatWowMap/ReactMap/commit/d6f04e06918342f4820c6f44d7b9cc6a5ec9595c)) +- admin items ([7e6a62e](https://github.com/WatWowMap/ReactMap/commit/7e6a62e678a384359374efcc751158b99d8485eb)) +- adv filter options on mobile ([93234c3](https://github.com/WatWowMap/ReactMap/commit/93234c37193f612d856153e5d8ab9f2348b84b82)) +- alignment uicons by id ([b17753f](https://github.com/WatWowMap/ReactMap/commit/b17753f8ac8ffaddbbf4fdb9ab9041dfd6159002)) +- also show types in quick select ([c3f35dc](https://github.com/WatWowMap/ReactMap/commit/c3f35dc2aa9e21d9bb8b228ed36c07afd90700c9)) +- always save new masterfile ([2f80d2c](https://github.com/WatWowMap/ReactMap/commit/2f80d2cff04df027d6bbef065c4a1bcc79ce2c35)) +- apply to all btns ([19997aa](https://github.com/WatWowMap/ReactMap/commit/19997aae6031b2f4b4b1bf528f24147a08eab137)) +- available for other permissions ([425ab3a](https://github.com/WatWowMap/ReactMap/commit/425ab3a8f614fe46e28c333f422f2f1bc17efb7a)) +- better regex for mapping minified errors ([cd0c28b](https://github.com/WatWowMap/ReactMap/commit/cd0c28b63d809d7c4acb08c58588c6449543c982)) +- better slide/input behaviors ([98686b8](https://github.com/WatWowMap/ReactMap/commit/98686b8645d20115953904f270c6f741aa390f54)) +- bunch of poracle webhook stuff ([fa4e628](https://github.com/WatWowMap/ReactMap/commit/fa4e628beb142e5dd8153abde054d4217126697c)) +- caching ([bb74b24](https://github.com/WatWowMap/ReactMap/commit/bb74b2409db441031884d1959e6a1030b592c316)) +- ci commit messages ([ca42361](https://github.com/WatWowMap/ReactMap/commit/ca42361aa56b6e5438134656eb475a2a089dc1db)) +- circular ref ([0a212dd](https://github.com/WatWowMap/ReactMap/commit/0a212dd093e11bc9c0def5d5296bd9608511e715)) +- cleanup from slot selection changes ([57ae335](https://github.com/WatWowMap/ReactMap/commit/57ae33519f0e692e3f1c48bcc527d7496b1efdad)) +- cleanups ([52690be](https://github.com/WatWowMap/ReactMap/commit/52690be10a3accae108c02803c51b14cee2b0111)) +- cleanups ([9ac88ca](https://github.com/WatWowMap/ReactMap/commit/9ac88ca6c18019eae2f7d0f5869ddacfab2719fd)) +- compare array sizes before updating ([b088b7b](https://github.com/WatWowMap/ReactMap/commit/b088b7b2d2af2aaccbcd9b9808772b0b2e6eb312)) +- couple of fixes ([ac2a1c5](https://github.com/WatWowMap/ReactMap/commit/ac2a1c536f9d473c0ba27e96246b1a66a9b8fb74)) +- disable prop for multiselector ([1cf4955](https://github.com/WatWowMap/ReactMap/commit/1cf4955c843253e9429155a3ba3a785808f40160)) +- disable prop for size & gender ([33c6df7](https://github.com/WatWowMap/ReactMap/commit/33c6df7204ea8bd7655fec70640ebe423d84c579)) +- disable sandbox ([fe93cfc](https://github.com/WatWowMap/ReactMap/commit/fe93cfc6166808f8616528cf18fe65d1a4dc16e2)) +- ditto filtering ([2f6ddaa](https://github.com/WatWowMap/ReactMap/commit/2f6ddaab3e1c1fe973446a7a326e1911998d884a)) +- don't always have to hit the limit ([39ac769](https://github.com/WatWowMap/ReactMap/commit/39ac7690806dbedf5424515870beda64c0cb229a)) +- dont show showcase mon if null ([e49b885](https://github.com/WatWowMap/ReactMap/commit/e49b885e277a6c6ffbab513c35f16cdfa9fe4c47)) +- dyslexia? ([3c25864](https://github.com/WatWowMap/ReactMap/commit/3c25864b85f4ec712fc08caad50369d1b62c661c)) +- enabled/all/disabled logic ([fc6c8ac](https://github.com/WatWowMap/ReactMap/commit/fc6c8ac7e82015d5f3d018814439fb0b1cd6f8d0)) +- entering 0 on sliders ([0cb103c](https://github.com/WatWowMap/ReactMap/commit/0cb103cd297dd3e3b3baba362c60961bdacbf598)) +- export settings ([315508d](https://github.com/WatWowMap/ReactMap/commit/315508d841d2289c5096581c8d5afe0582516ff2)) +- ez mode checks ([e2bb1f0](https://github.com/WatWowMap/ReactMap/commit/e2bb1f0d118ce3751cd5209be74f98ea920e9800)) +- ez mode filter behavior ([0b0dd7d](https://github.com/WatWowMap/ReactMap/commit/0b0dd7dee74e1d1602514ec673c48ca646ec408d)) +- fallback state ([5ea5d15](https://github.com/WatWowMap/ReactMap/commit/5ea5d15659d21a77f49496a3aea70d3d0ec29a3d)) +- favicon in dev ([353a7aa](https://github.com/WatWowMap/ReactMap/commit/353a7aa5e21c01d2ae5a4a59e3a1f7f8afb490ba)) +- fetch available in menus too ([55d2fc8](https://github.com/WatWowMap/ReactMap/commit/55d2fc8bdbb64d8977049b3e3d26c0028ff83394)) +- filtering edge cases ([a1b1580](https://github.com/WatWowMap/ReactMap/commit/a1b15806af30314dd90712f10180508ab75f7ebd)) +- force ci? ([5026661](https://github.com/WatWowMap/ReactMap/commit/5026661dd5546ab1125482372e490d9bb570ccea)) +- forgot my own type i18n keys ([d74f239](https://github.com/WatWowMap/ReactMap/commit/d74f2398fd099817ad12a624fd53a737eb7bd45d)) +- fr showcase translation ([c0f74fb](https://github.com/WatWowMap/ReactMap/commit/c0f74fbd003230fe3da162e9520b93e24657a42c)) +- further dnf refinements ([da08236](https://github.com/WatWowMap/ReactMap/commit/da08236f869be56e1a21f4b8a108f78be1cfa834)) +- global 0/100 iv toggles ([272d80d](https://github.com/WatWowMap/ReactMap/commit/272d80df4c07d858cfb29b3ceef5ad6472c12216)) +- gql types ([e1e499a](https://github.com/WatWowMap/ReactMap/commit/e1e499a52239d091e52f779e5149d8808d395be6)) +- gym badge fixes ([1cadea0](https://github.com/WatWowMap/ReactMap/commit/1cadea0e4c4bfa3894ffd2629ef09c7ba2e2ed79)) +- gym badge menu from popup ([8cea2fb](https://github.com/WatWowMap/ReactMap/commit/8cea2fb47d786f1a74dcb03087f13cacb0645dfa)) +- gym badge page styling ([7016369](https://github.com/WatWowMap/ReactMap/commit/7016369f146f2aae52e72cc79db5725c43101c4c)) +- hide all logic in adv menu for some items ([0561829](https://github.com/WatWowMap/ReactMap/commit/05618292589dc60118eaa9f2f3cf90234722c475)) +- hmm ([58d1ece](https://github.com/WatWowMap/ReactMap/commit/58d1ece97ddf4098b1217e2101d2b4b7dbb93237)) +- id when searching ([1802ca6](https://github.com/WatWowMap/ReactMap/commit/1802ca6cac9215581a6097bb1cfa9ea6bfc3cdf8)) +- invasion quick selector ([ad4471a](https://github.com/WatWowMap/ReactMap/commit/ad4471a67ccb88020757c899fcf8ab5e266b9ffc)) +- issue in webhook adv menu ([190289a](https://github.com/WatWowMap/ReactMap/commit/190289a109184ad2c5678f2951986d6b525c8254)), closes [#926](https://github.com/WatWowMap/ReactMap/issues/926) +- lift version of ci ([4fd4bb6](https://github.com/WatWowMap/ReactMap/commit/4fd4bb6e8e3388bd1370375ea3a357feb1cfa0e3)) +- locale dest ([8dd94c9](https://github.com/WatWowMap/ReactMap/commit/8dd94c90b112194c37403b9823171890c4d8580f)) +- make `allForms` false by default for usability ([cff0e23](https://github.com/WatWowMap/ReactMap/commit/cff0e234a1d9a4069da8a4cd12b5f8a0d3f9c6a0)) +- make showcase icons smaller by default ([b0c587a](https://github.com/WatWowMap/ReactMap/commit/b0c587aecd8126c1644a01c0fc459bc17dca0af2)) +- make the selector more generic friendly for other categories ([6259bc2](https://github.com/WatWowMap/ReactMap/commit/6259bc2101029c367300ebe98df082ad7c15a124)) +- mega energy icons by id ([ced7d7c](https://github.com/WatWowMap/ReactMap/commit/ced7d7c51401c96e2264e7028f83abe59f2c7fd7)) +- missing label on search ([36f2bd8](https://github.com/WatWowMap/ReactMap/commit/36f2bd8662a12a5c4260e4d144e897acf86571b8)) +- missing translations ([4d6d5ec](https://github.com/WatWowMap/ReactMap/commit/4d6d5eccf28f35794e7d660d0dd25f9475cb36e0)) +- more filter tweaks ([a4c4eee](https://github.com/WatWowMap/ReactMap/commit/a4c4eee7cba6dee004af0ab31ccba84a52273d17)) +- more limit adjustments ([6e6bbff](https://github.com/WatWowMap/ReactMap/commit/6e6bbffc162df7bbc54c9c98b546bfe3698d25a0)) +- more pokemon search refinements ([8fa91e1](https://github.com/WatWowMap/ReactMap/commit/8fa91e1691b8c52f83e7a9ce39aaafab5a5822a8)) +- only show catchable shadow pokes ([fd519de](https://github.com/WatWowMap/ReactMap/commit/fd519de58b1cb3ad5f436387851bd3dbea5d7981)) +- only show edit adv for all for pokemon ([622f179](https://github.com/WatWowMap/ReactMap/commit/622f17933dfed9a9b78647a4fcc7c4df3b105fdd)) +- opening adv mode from drawer ([5c2f080](https://github.com/WatWowMap/ReactMap/commit/5c2f080dda691b3f80572ad21e2757117e9c3855)) +- pokemon zoom ([9bbc70d](https://github.com/WatWowMap/ReactMap/commit/9bbc70d54bd21763b00e4cd396ab6669a592a198)) +- pokestop marker adjustments ([c81340c](https://github.com/WatWowMap/ReactMap/commit/c81340c4c1aab378af9e04dfae23677c4b3a1bd0)) +- poracle manager with new state fixes ([f4564ef](https://github.com/WatWowMap/ReactMap/commit/f4564efe7ca578599756ddead77b957ad28e085f)) +- poracle saving/closing ([6251b5c](https://github.com/WatWowMap/ReactMap/commit/6251b5c77a9285bb9944d1a8adfd7c32881a2361)) +- possible fix for leaflet location issue ([4aefb90](https://github.com/WatWowMap/ReactMap/commit/4aefb90d85db6a1e873355e032c03281b7b13b56)) +- prop cleanups ([8b7d25d](https://github.com/WatWowMap/ReactMap/commit/8b7d25d0f8a862ec50d1a91675fa67c5a7f7364a)) +- pvp mons with no iv perm ([fce7eb9](https://github.com/WatWowMap/ReactMap/commit/fce7eb91e6cb1ed6ee387807b27de8584dafbb14)) +- quest conditions ([92af316](https://github.com/WatWowMap/ReactMap/commit/92af31602e6cf79ba345734a25f4ba098d2f53ef)) +- refine dnf filter generation ([875b961](https://github.com/WatWowMap/ReactMap/commit/875b961dd9bc4cb17ab297f8e2da517e21f04baa)) +- release workflows ([6e8fa3c](https://github.com/WatWowMap/ReactMap/commit/6e8fa3cafe146dc6de085d3eea83c9257626fe51)) +- remove `clear` icon for now ([58aed37](https://github.com/WatWowMap/ReactMap/commit/58aed3764b8c01df9f12dff680be8ec6a72380f2)) +- remove `excludeList` - no longer needed ([bc3adba](https://github.com/WatWowMap/ReactMap/commit/bc3adbafd16fd01000cbd2a6779244a2725615e2)) +- remove blue from types ([33ffc13](https://github.com/WatWowMap/ReactMap/commit/33ffc13bc5e4c366f74ccc1d3c1de05ea5e12e2f)) +- remove log ([e572b3b](https://github.com/WatWowMap/ReactMap/commit/e572b3b6f405d87cfd553797f8b081cbd6812b2d)) +- remove old eslint heading ([768affc](https://github.com/WatWowMap/ReactMap/commit/768affc24ac06edaffdd109ce39042dfc46a732e)) +- remove showcase on kecleon ([c42c9f4](https://github.com/WatWowMap/ReactMap/commit/c42c9f486ac1cab75cc34e93805fed746aa22f47)) +- remove unnecessary r filters from quick select ([f0a3b28](https://github.com/WatWowMap/ReactMap/commit/f0a3b2853bbe5970cd84917fece6980f2828022a)) +- remove unused ([a0d1e6c](https://github.com/WatWowMap/ReactMap/commit/a0d1e6c18f2533ac2220618ef6dce31f57949c9a)) +- revert ([54d97fe](https://github.com/WatWowMap/ReactMap/commit/54d97fe28b801db7027870cf99dd2cf7b76f9b8b)) +- revert updating leaflet locate control ([97d9e07](https://github.com/WatWowMap/ReactMap/commit/97d9e076330135f521371b002b23f19f8e941904)) +- rework ci/cd ([c6c7ed4](https://github.com/WatWowMap/ReactMap/commit/c6c7ed42c64dab39725f37cb00d00162c7252a54)) +- s2 cells ([2048b73](https://github.com/WatWowMap/ReactMap/commit/2048b73961f740e13affe66bc5291dedde6cf8f8)) +- saving and closing webhooks while editing ([ce9eb43](https://github.com/WatWowMap/ReactMap/commit/ce9eb438e0d755076e799211d9d3c57b4c2ee175)) +- search case sensitive in adv menu ([be5846d](https://github.com/WatWowMap/ReactMap/commit/be5846d087ecec3af3e44c61297e1b2cab5a3179)) +- search fields ([581949c](https://github.com/WatWowMap/ReactMap/commit/581949c686a47abd9c8f50c78e027ab80bc354f7)) +- search translations in webhook tracked ([5ef29ee](https://github.com/WatWowMap/ReactMap/commit/5ef29ee53855fc0065b465dc53915ea21efb91ab)) +- search value clear ([05ae312](https://github.com/WatWowMap/ReactMap/commit/05ae312c9db7cf2c642940c2c5cc48adb2a9e039)) +- search/setting filtered behavior ([a30c286](https://github.com/WatWowMap/ReactMap/commit/a30c2869a5642cc4061970e4ef6b1fcbb1bc9fff)) +- searchable ([8f11741](https://github.com/WatWowMap/ReactMap/commit/8f117412c5f4e9ef5588332472d21d6f20169e76)) +- seeing if this helps ([044cd70](https://github.com/WatWowMap/ReactMap/commit/044cd70b822031d355266530c4bbe2daa66ebb73)) +- show confirm switch if enabled ([2e03c50](https://github.com/WatWowMap/ReactMap/commit/2e03c500f3e6428d925dad301221c734f397171c)) +- showcase filtering ([8c9d08a](https://github.com/WatWowMap/ReactMap/commit/8c9d08a561d39e0891fc02a1d7e3d8c20e420fd0)) +- showing feedback ([50b06c3](https://github.com/WatWowMap/ReactMap/commit/50b06c3553d69539bab59e7a5c7e449984151dbe)) +- skip `h` filters on backend ([2020c40](https://github.com/WatWowMap/ReactMap/commit/2020c40e3f30196ca5effb9fb78d4115e3ccdd7b)) +- slider states when disabled ([4d88c1a](https://github.com/WatWowMap/ReactMap/commit/4d88c1a04ca9b3babbb88093327df3cc8ad4a9be)) +- slight optimization for query requests ([706581b](https://github.com/WatWowMap/ReactMap/commit/706581b28a29c2a09982051c53f29c862c045252)) +- slightly more aggressive additions when there's 0 ([d062e52](https://github.com/WatWowMap/ReactMap/commit/d062e5219830039e1ae381e879c890293dd67f3f)) +- some pokestop filtering ([ef6be7f](https://github.com/WatWowMap/ReactMap/commit/ef6be7f96422b136e846c3a9d53cd30e573b0c6f)) +- some state bugs ([2daf109](https://github.com/WatWowMap/ReactMap/commit/2daf1091019e8c0f757df4b466c7db099ed1fc98)) +- standard filter backup ([5a0cdf5](https://github.com/WatWowMap/ReactMap/commit/5a0cdf5150e9e168898f1da6536d613f45d38350)) +- state bug & consolidate translations ([d6e6a79](https://github.com/WatWowMap/ReactMap/commit/d6e6a79cc5472f773fd632a2b0fec47d4a7bd337)) +- state filter stuff ([70c958e](https://github.com/WatWowMap/ReactMap/commit/70c958ec97b8e8875c4850720775fd164e2614e6)) +- stop crashing leaflet when map crashes ([45349be](https://github.com/WatWowMap/ReactMap/commit/45349be24075723909ee59dcfb64e14e83674a70)) +- string fallback ([11ce4ca](https://github.com/WatWowMap/ReactMap/commit/11ce4ca61094ebcb24a7457c97c79349c72513b6)) +- submission cell menu items ([01c6350](https://github.com/WatWowMap/ReactMap/commit/01c6350a2fffc1b810d8d5d949d7906844cf3b5c)) +- support for `all` in pokestop model ([cb57574](https://github.com/WatWowMap/ReactMap/commit/cb57574ad8502175ee7b18fd159eb3ce765c5833)) +- title check ([7f10790](https://github.com/WatWowMap/ReactMap/commit/7f10790ed15868677bc4ea1cc99a00a5fb34c9c2)) +- top level state changes ([f401bbe](https://github.com/WatWowMap/ReactMap/commit/f401bbe457ecfbb07b42554528c42fad55bd7d75)) +- tut welcome page ([3c9e40c](https://github.com/WatWowMap/ReactMap/commit/3c9e40c7300d06420a83fb0e7292c14c79e050b0)) +- types ([360f87c](https://github.com/WatWowMap/ReactMap/commit/360f87c8c03077ef6da583dc36ddb98600ad04ee)) +- uid for editing ([818a958](https://github.com/WatWowMap/ReactMap/commit/818a9584e4c385ec841d97beff7dee37369d40c8)) +- unknown shocases ([99cf89b](https://github.com/WatWowMap/ReactMap/commit/99cf89b911dbd7032e08f9f2bc524151ec110d7c)), closes [#941](https://github.com/WatWowMap/ReactMap/issues/941) +- unmount scanAreas section ([49ec133](https://github.com/WatWowMap/ReactMap/commit/49ec1334f217c49532cd85cb4bce5d496fd5dec7)) +- updating robust timeout refetch fn ([ff84870](https://github.com/WatWowMap/ReactMap/commit/ff84870c994136a15da7af2fe31bf947eb830e63)) +- user fields ([15ad84d](https://github.com/WatWowMap/ReactMap/commit/15ad84df882d363a55ccd50fec17ee4372bdb837)) +- username fallback ([05261c1](https://github.com/WatWowMap/ReactMap/commit/05261c108236225d7e3b01d609cfbef02e769ed3)) +- various webhook things ([a4b7db5](https://github.com/WatWowMap/ReactMap/commit/a4b7db515e991e0af3be8d5d42de4b4ce9cfbed4)) +- vite config for `yarn start` ([1b1ea4a](https://github.com/WatWowMap/ReactMap/commit/1b1ea4a874d1828c8f672275f85ab26accae38b6)) +- vite prod build ([ed93946](https://github.com/WatWowMap/ReactMap/commit/ed93946c653e391210ae6a34f3b968437e249fef)) +- xxs/xxl names ([d6a8906](https://github.com/WatWowMap/ReactMap/commit/d6a890621a84242264ae35b79e204c5fc9e2bc96)) ### Features -* add searching ([356c01b](https://github.com/WatWowMap/ReactMap/commit/356c01bb4d0754548e4dbb54dfdb9eaef6833a67)) -* cache all remote data for quicker startup ([befbc13](https://github.com/WatWowMap/ReactMap/commit/befbc13994a93c407dd4632c035758bcd0e5a64d)) -* dev settings in sidebar ([6a2651f](https://github.com/WatWowMap/ReactMap/commit/6a2651fcc8ef36066efcda1b5e9be72993c212da)) -* gym quick selector ([93c8fab](https://github.com/WatWowMap/ReactMap/commit/93c8fab22f7b6554ba6e03cc9e1c3411c70877a5)) -* invasion searching ([63549eb](https://github.com/WatWowMap/ReactMap/commit/63549eb284c72ac71e4201dff4efd84b3614e6f7)) -* invasions quick select ([c638225](https://github.com/WatWowMap/ReactMap/commit/c63822561add83b6067cad620d654ba615871a30)) -* literal easy mode ([5298676](https://github.com/WatWowMap/ReactMap/commit/52986760bc537ced305b8d43dca91c124da21076)) -* lure quick selector ([98ee717](https://github.com/WatWowMap/ReactMap/commit/98ee7178129c594f335aaa143bc3b5ca4d8be63a)) -* Merge pull request [#942](https://github.com/WatWowMap/ReactMap/issues/942) from kamieniarz/patch-1 ([cc54b12](https://github.com/WatWowMap/ReactMap/commit/cc54b122a87d963c6cf1c42b9c0e4afc98cc6a40)) -* nest quick select menu ([37761d7](https://github.com/WatWowMap/ReactMap/commit/37761d7b46e803b1d33f81319108a6dec785f91e)) -* pokemon filter mode selector ([be846fc](https://github.com/WatWowMap/ReactMap/commit/be846fcbf9203fa5ae53557fa67f093eeba13f9e)) -* quest quick select menu ([02d8d65](https://github.com/WatWowMap/ReactMap/commit/02d8d65719576ce3992019fa0751e4dd56813a3b)) -* quick select pkmn filters ([ee1010b](https://github.com/WatWowMap/ReactMap/commit/ee1010bde398e3fc8d8c7a7d6983d6484fda7221)) -* raids quick select menu ([dc3e10a](https://github.com/WatWowMap/ReactMap/commit/dc3e10a07fd4da042d434dc9a915dd77583d2629)) -* respect global if no pkmn are active in basic mode ([c96c99f](https://github.com/WatWowMap/ReactMap/commit/c96c99fd85e7d426b41675e9494d5e4850594109)) -* rework how often available is updated ([ed35dcd](https://github.com/WatWowMap/ReactMap/commit/ed35dcdf325becfdf408b70dfc968137c82ada36)) -* show event stop markers if no quests/invasions ([32df5e9](https://github.com/WatWowMap/ReactMap/commit/32df5e9bcfc5180a6afa4b5a14b6b69d7a1237b6)) -* showcase quick select ([1ae5fab](https://github.com/WatWowMap/ReactMap/commit/1ae5fab836d1bf7f70495541088a7685cdb9b859)) -* showcase type id support ([45e5b1b](https://github.com/WatWowMap/ReactMap/commit/45e5b1baa73780b94bbc95e386fca924c44b989d)) -* tooltip ([a3777dd](https://github.com/WatWowMap/ReactMap/commit/a3777dd04bd371c7464525113a5ebf64e619c7d6)) -* useTranslateById AIO hook for ez key translations ([20dd65d](https://github.com/WatWowMap/ReactMap/commit/20dd65d67c51d3310ffac462184d0ac59fb5095d)) - +- add searching ([356c01b](https://github.com/WatWowMap/ReactMap/commit/356c01bb4d0754548e4dbb54dfdb9eaef6833a67)) +- cache all remote data for quicker startup ([befbc13](https://github.com/WatWowMap/ReactMap/commit/befbc13994a93c407dd4632c035758bcd0e5a64d)) +- dev settings in sidebar ([6a2651f](https://github.com/WatWowMap/ReactMap/commit/6a2651fcc8ef36066efcda1b5e9be72993c212da)) +- gym quick selector ([93c8fab](https://github.com/WatWowMap/ReactMap/commit/93c8fab22f7b6554ba6e03cc9e1c3411c70877a5)) +- invasion searching ([63549eb](https://github.com/WatWowMap/ReactMap/commit/63549eb284c72ac71e4201dff4efd84b3614e6f7)) +- invasions quick select ([c638225](https://github.com/WatWowMap/ReactMap/commit/c63822561add83b6067cad620d654ba615871a30)) +- literal easy mode ([5298676](https://github.com/WatWowMap/ReactMap/commit/52986760bc537ced305b8d43dca91c124da21076)) +- lure quick selector ([98ee717](https://github.com/WatWowMap/ReactMap/commit/98ee7178129c594f335aaa143bc3b5ca4d8be63a)) +- Merge pull request [#942](https://github.com/WatWowMap/ReactMap/issues/942) from kamieniarz/patch-1 ([cc54b12](https://github.com/WatWowMap/ReactMap/commit/cc54b122a87d963c6cf1c42b9c0e4afc98cc6a40)) +- nest quick select menu ([37761d7](https://github.com/WatWowMap/ReactMap/commit/37761d7b46e803b1d33f81319108a6dec785f91e)) +- pokemon filter mode selector ([be846fc](https://github.com/WatWowMap/ReactMap/commit/be846fcbf9203fa5ae53557fa67f093eeba13f9e)) +- quest quick select menu ([02d8d65](https://github.com/WatWowMap/ReactMap/commit/02d8d65719576ce3992019fa0751e4dd56813a3b)) +- quick select pkmn filters ([ee1010b](https://github.com/WatWowMap/ReactMap/commit/ee1010bde398e3fc8d8c7a7d6983d6484fda7221)) +- raids quick select menu ([dc3e10a](https://github.com/WatWowMap/ReactMap/commit/dc3e10a07fd4da042d434dc9a915dd77583d2629)) +- respect global if no pkmn are active in basic mode ([c96c99f](https://github.com/WatWowMap/ReactMap/commit/c96c99fd85e7d426b41675e9494d5e4850594109)) +- rework how often available is updated ([ed35dcd](https://github.com/WatWowMap/ReactMap/commit/ed35dcdf325becfdf408b70dfc968137c82ada36)) +- show event stop markers if no quests/invasions ([32df5e9](https://github.com/WatWowMap/ReactMap/commit/32df5e9bcfc5180a6afa4b5a14b6b69d7a1237b6)) +- showcase quick select ([1ae5fab](https://github.com/WatWowMap/ReactMap/commit/1ae5fab836d1bf7f70495541088a7685cdb9b859)) +- showcase type id support ([45e5b1b](https://github.com/WatWowMap/ReactMap/commit/45e5b1baa73780b94bbc95e386fca924c44b989d)) +- tooltip ([a3777dd](https://github.com/WatWowMap/ReactMap/commit/a3777dd04bd371c7464525113a5ebf64e619c7d6)) +- useTranslateById AIO hook for ez key translations ([20dd65d](https://github.com/WatWowMap/ReactMap/commit/20dd65d67c51d3310ffac462184d0ac59fb5095d)) ### Performance Improvements -* improve pokestop querying perf by 10x ([f696b67](https://github.com/WatWowMap/ReactMap/commit/f696b6722436bd3145b59766f3f81a08dd6151e7)) +- improve pokestop querying perf by 10x ([f696b67](https://github.com/WatWowMap/ReactMap/commit/f696b6722436bd3145b59766f3f81a08dd6151e7)) # [1.29.0-develop.20](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.19...v1.29.0-develop.20) (2024-02-05) - ### Bug Fixes -* fallback state ([5ea5d15](https://github.com/WatWowMap/ReactMap/commit/5ea5d15659d21a77f49496a3aea70d3d0ec29a3d)) -* show confirm switch if enabled ([2e03c50](https://github.com/WatWowMap/ReactMap/commit/2e03c500f3e6428d925dad301221c734f397171c)) +- fallback state ([5ea5d15](https://github.com/WatWowMap/ReactMap/commit/5ea5d15659d21a77f49496a3aea70d3d0ec29a3d)) +- show confirm switch if enabled ([2e03c50](https://github.com/WatWowMap/ReactMap/commit/2e03c500f3e6428d925dad301221c734f397171c)) # [1.29.0-develop.19](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.18...v1.29.0-develop.19) (2024-01-30) - ### Features -* Merge pull request [#942](https://github.com/WatWowMap/ReactMap/issues/942) from kamieniarz/patch-1 ([cc54b12](https://github.com/WatWowMap/ReactMap/commit/cc54b122a87d963c6cf1c42b9c0e4afc98cc6a40)) +- Merge pull request [#942](https://github.com/WatWowMap/ReactMap/issues/942) from kamieniarz/patch-1 ([cc54b12](https://github.com/WatWowMap/ReactMap/commit/cc54b122a87d963c6cf1c42b9c0e4afc98cc6a40)) # [1.29.0-develop.18](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.17...v1.29.0-develop.18) (2024-01-29) - ### Bug Fixes -* stop crashing leaflet when map crashes ([45349be](https://github.com/WatWowMap/ReactMap/commit/45349be24075723909ee59dcfb64e14e83674a70)) -* uid for editing ([818a958](https://github.com/WatWowMap/ReactMap/commit/818a9584e4c385ec841d97beff7dee37369d40c8)) -* unknown shocases ([99cf89b](https://github.com/WatWowMap/ReactMap/commit/99cf89b911dbd7032e08f9f2bc524151ec110d7c)), closes [#941](https://github.com/WatWowMap/ReactMap/issues/941) +- stop crashing leaflet when map crashes ([45349be](https://github.com/WatWowMap/ReactMap/commit/45349be24075723909ee59dcfb64e14e83674a70)) +- uid for editing ([818a958](https://github.com/WatWowMap/ReactMap/commit/818a9584e4c385ec841d97beff7dee37369d40c8)) +- unknown shocases ([99cf89b](https://github.com/WatWowMap/ReactMap/commit/99cf89b911dbd7032e08f9f2bc524151ec110d7c)), closes [#941](https://github.com/WatWowMap/ReactMap/issues/941) # [1.29.0-develop.17](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.16...v1.29.0-develop.17) (2024-01-28) - ### Bug Fixes -* bunch of poracle webhook stuff ([fa4e628](https://github.com/WatWowMap/ReactMap/commit/fa4e628beb142e5dd8153abde054d4217126697c)) -* circular ref ([0a212dd](https://github.com/WatWowMap/ReactMap/commit/0a212dd093e11bc9c0def5d5296bd9608511e715)) -* disable sandbox ([fe93cfc](https://github.com/WatWowMap/ReactMap/commit/fe93cfc6166808f8616528cf18fe65d1a4dc16e2)) -* fetch available in menus too ([55d2fc8](https://github.com/WatWowMap/ReactMap/commit/55d2fc8bdbb64d8977049b3e3d26c0028ff83394)) -* force ci? ([5026661](https://github.com/WatWowMap/ReactMap/commit/5026661dd5546ab1125482372e490d9bb570ccea)) -* poracle saving/closing ([6251b5c](https://github.com/WatWowMap/ReactMap/commit/6251b5c77a9285bb9944d1a8adfd7c32881a2361)) -* quest conditions ([92af316](https://github.com/WatWowMap/ReactMap/commit/92af31602e6cf79ba345734a25f4ba098d2f53ef)) -* revert updating leaflet locate control ([97d9e07](https://github.com/WatWowMap/ReactMap/commit/97d9e076330135f521371b002b23f19f8e941904)) -* saving and closing webhooks while editing ([ce9eb43](https://github.com/WatWowMap/ReactMap/commit/ce9eb438e0d755076e799211d9d3c57b4c2ee175)) -* showcase filtering ([8c9d08a](https://github.com/WatWowMap/ReactMap/commit/8c9d08a561d39e0891fc02a1d7e3d8c20e420fd0)) -* username fallback ([05261c1](https://github.com/WatWowMap/ReactMap/commit/05261c108236225d7e3b01d609cfbef02e769ed3)) +- bunch of poracle webhook stuff ([fa4e628](https://github.com/WatWowMap/ReactMap/commit/fa4e628beb142e5dd8153abde054d4217126697c)) +- circular ref ([0a212dd](https://github.com/WatWowMap/ReactMap/commit/0a212dd093e11bc9c0def5d5296bd9608511e715)) +- disable sandbox ([fe93cfc](https://github.com/WatWowMap/ReactMap/commit/fe93cfc6166808f8616528cf18fe65d1a4dc16e2)) +- fetch available in menus too ([55d2fc8](https://github.com/WatWowMap/ReactMap/commit/55d2fc8bdbb64d8977049b3e3d26c0028ff83394)) +- force ci? ([5026661](https://github.com/WatWowMap/ReactMap/commit/5026661dd5546ab1125482372e490d9bb570ccea)) +- poracle saving/closing ([6251b5c](https://github.com/WatWowMap/ReactMap/commit/6251b5c77a9285bb9944d1a8adfd7c32881a2361)) +- quest conditions ([92af316](https://github.com/WatWowMap/ReactMap/commit/92af31602e6cf79ba345734a25f4ba098d2f53ef)) +- revert updating leaflet locate control ([97d9e07](https://github.com/WatWowMap/ReactMap/commit/97d9e076330135f521371b002b23f19f8e941904)) +- saving and closing webhooks while editing ([ce9eb43](https://github.com/WatWowMap/ReactMap/commit/ce9eb438e0d755076e799211d9d3c57b4c2ee175)) +- showcase filtering ([8c9d08a](https://github.com/WatWowMap/ReactMap/commit/8c9d08a561d39e0891fc02a1d7e3d8c20e420fd0)) +- username fallback ([05261c1](https://github.com/WatWowMap/ReactMap/commit/05261c108236225d7e3b01d609cfbef02e769ed3)) # [1.29.0-develop.16](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.15...v1.29.0-develop.16) (2024-01-25) - ### Bug Fixes -* always save new masterfile ([2f80d2c](https://github.com/WatWowMap/ReactMap/commit/2f80d2cff04df027d6bbef065c4a1bcc79ce2c35)) +- always save new masterfile ([2f80d2c](https://github.com/WatWowMap/ReactMap/commit/2f80d2cff04df027d6bbef065c4a1bcc79ce2c35)) # [1.29.0-develop.15](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.14...v1.29.0-develop.15) (2024-01-25) - ### Bug Fixes -* types ([360f87c](https://github.com/WatWowMap/ReactMap/commit/360f87c8c03077ef6da583dc36ddb98600ad04ee)) - +- types ([360f87c](https://github.com/WatWowMap/ReactMap/commit/360f87c8c03077ef6da583dc36ddb98600ad04ee)) ### Features -* cache all remote data for quicker startup ([befbc13](https://github.com/WatWowMap/ReactMap/commit/befbc13994a93c407dd4632c035758bcd0e5a64d)) +- cache all remote data for quicker startup ([befbc13](https://github.com/WatWowMap/ReactMap/commit/befbc13994a93c407dd4632c035758bcd0e5a64d)) # [1.29.0-develop.14](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.13...v1.29.0-develop.14) (2024-01-25) - ### Bug Fixes -* vite config for `yarn start` ([1b1ea4a](https://github.com/WatWowMap/ReactMap/commit/1b1ea4a874d1828c8f672275f85ab26accae38b6)) +- vite config for `yarn start` ([1b1ea4a](https://github.com/WatWowMap/ReactMap/commit/1b1ea4a874d1828c8f672275f85ab26accae38b6)) # [1.29.0-develop.13](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.12...v1.29.0-develop.13) (2024-01-24) - ### Bug Fixes -* favicon in dev ([353a7aa](https://github.com/WatWowMap/ReactMap/commit/353a7aa5e21c01d2ae5a4a59e3a1f7f8afb490ba)) -* locale dest ([8dd94c9](https://github.com/WatWowMap/ReactMap/commit/8dd94c90b112194c37403b9823171890c4d8580f)) +- favicon in dev ([353a7aa](https://github.com/WatWowMap/ReactMap/commit/353a7aa5e21c01d2ae5a4a59e3a1f7f8afb490ba)) +- locale dest ([8dd94c9](https://github.com/WatWowMap/ReactMap/commit/8dd94c90b112194c37403b9823171890c4d8580f)) # [1.29.0-develop.12](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.11...v1.29.0-develop.12) (2024-01-24) - ### Bug Fixes -* add search log tag ([fbb781a](https://github.com/WatWowMap/ReactMap/commit/fbb781add772d3d91acc039d82264523d8e55f21)) -* add time log ([3acfef4](https://github.com/WatWowMap/ReactMap/commit/3acfef4bf14ddcaec7163dde943abdcf239f7371)) -* caching ([bb74b24](https://github.com/WatWowMap/ReactMap/commit/bb74b2409db441031884d1959e6a1030b592c316)) -* compare array sizes before updating ([b088b7b](https://github.com/WatWowMap/ReactMap/commit/b088b7b2d2af2aaccbcd9b9808772b0b2e6eb312)) -* don't always have to hit the limit ([39ac769](https://github.com/WatWowMap/ReactMap/commit/39ac7690806dbedf5424515870beda64c0cb229a)) -* more limit adjustments ([6e6bbff](https://github.com/WatWowMap/ReactMap/commit/6e6bbffc162df7bbc54c9c98b546bfe3698d25a0)) -* more pokemon search refinements ([8fa91e1](https://github.com/WatWowMap/ReactMap/commit/8fa91e1691b8c52f83e7a9ce39aaafab5a5822a8)) -* remove unused ([a0d1e6c](https://github.com/WatWowMap/ReactMap/commit/a0d1e6c18f2533ac2220618ef6dce31f57949c9a)) -* searchable ([8f11741](https://github.com/WatWowMap/ReactMap/commit/8f117412c5f4e9ef5588332472d21d6f20169e76)) -* showing feedback ([50b06c3](https://github.com/WatWowMap/ReactMap/commit/50b06c3553d69539bab59e7a5c7e449984151dbe)) -* slightly more aggressive additions when there's 0 ([d062e52](https://github.com/WatWowMap/ReactMap/commit/d062e5219830039e1ae381e879c890293dd67f3f)) - +- add search log tag ([fbb781a](https://github.com/WatWowMap/ReactMap/commit/fbb781add772d3d91acc039d82264523d8e55f21)) +- add time log ([3acfef4](https://github.com/WatWowMap/ReactMap/commit/3acfef4bf14ddcaec7163dde943abdcf239f7371)) +- caching ([bb74b24](https://github.com/WatWowMap/ReactMap/commit/bb74b2409db441031884d1959e6a1030b592c316)) +- compare array sizes before updating ([b088b7b](https://github.com/WatWowMap/ReactMap/commit/b088b7b2d2af2aaccbcd9b9808772b0b2e6eb312)) +- don't always have to hit the limit ([39ac769](https://github.com/WatWowMap/ReactMap/commit/39ac7690806dbedf5424515870beda64c0cb229a)) +- more limit adjustments ([6e6bbff](https://github.com/WatWowMap/ReactMap/commit/6e6bbffc162df7bbc54c9c98b546bfe3698d25a0)) +- more pokemon search refinements ([8fa91e1](https://github.com/WatWowMap/ReactMap/commit/8fa91e1691b8c52f83e7a9ce39aaafab5a5822a8)) +- remove unused ([a0d1e6c](https://github.com/WatWowMap/ReactMap/commit/a0d1e6c18f2533ac2220618ef6dce31f57949c9a)) +- searchable ([8f11741](https://github.com/WatWowMap/ReactMap/commit/8f117412c5f4e9ef5588332472d21d6f20169e76)) +- showing feedback ([50b06c3](https://github.com/WatWowMap/ReactMap/commit/50b06c3553d69539bab59e7a5c7e449984151dbe)) +- slightly more aggressive additions when there's 0 ([d062e52](https://github.com/WatWowMap/ReactMap/commit/d062e5219830039e1ae381e879c890293dd67f3f)) ### Features -* invasion searching ([63549eb](https://github.com/WatWowMap/ReactMap/commit/63549eb284c72ac71e4201dff4efd84b3614e6f7)) +- invasion searching ([63549eb](https://github.com/WatWowMap/ReactMap/commit/63549eb284c72ac71e4201dff4efd84b3614e6f7)) # [1.29.0-develop.11](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.10...v1.29.0-develop.11) (2024-01-19) - ### Bug Fixes -* issue in webhook adv menu ([190289a](https://github.com/WatWowMap/ReactMap/commit/190289a109184ad2c5678f2951986d6b525c8254)), closes [#926](https://github.com/WatWowMap/ReactMap/issues/926) +- issue in webhook adv menu ([190289a](https://github.com/WatWowMap/ReactMap/commit/190289a109184ad2c5678f2951986d6b525c8254)), closes [#926](https://github.com/WatWowMap/ReactMap/issues/926) # [1.29.0-develop.10](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.9...v1.29.0-develop.10) (2024-01-18) - ### Bug Fixes -* remove `excludeList` - no longer needed ([bc3adba](https://github.com/WatWowMap/ReactMap/commit/bc3adbafd16fd01000cbd2a6779244a2725615e2)) +- remove `excludeList` - no longer needed ([bc3adba](https://github.com/WatWowMap/ReactMap/commit/bc3adbafd16fd01000cbd2a6779244a2725615e2)) # [1.29.0-develop.9](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.8...v1.29.0-develop.9) (2024-01-17) - ### Bug Fixes -* gym badge fixes ([1cadea0](https://github.com/WatWowMap/ReactMap/commit/1cadea0e4c4bfa3894ffd2629ef09c7ba2e2ed79)) +- gym badge fixes ([1cadea0](https://github.com/WatWowMap/ReactMap/commit/1cadea0e4c4bfa3894ffd2629ef09c7ba2e2ed79)) # [1.29.0-develop.8](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.7...v1.29.0-develop.8) (2024-01-17) - ### Bug Fixes -* mega energy icons by id ([ced7d7c](https://github.com/WatWowMap/ReactMap/commit/ced7d7c51401c96e2264e7028f83abe59f2c7fd7)) +- mega energy icons by id ([ced7d7c](https://github.com/WatWowMap/ReactMap/commit/ced7d7c51401c96e2264e7028f83abe59f2c7fd7)) # [1.29.0-develop.7](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.6...v1.29.0-develop.7) (2024-01-17) - ### Performance Improvements -* improve pokestop querying perf by 10x ([f696b67](https://github.com/WatWowMap/ReactMap/commit/f696b6722436bd3145b59766f3f81a08dd6151e7)) +- improve pokestop querying perf by 10x ([f696b67](https://github.com/WatWowMap/ReactMap/commit/f696b6722436bd3145b59766f3f81a08dd6151e7)) # [1.29.0-develop.6](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.5...v1.29.0-develop.6) (2024-01-17) - ### Bug Fixes -* remove old eslint heading ([768affc](https://github.com/WatWowMap/ReactMap/commit/768affc24ac06edaffdd109ce39042dfc46a732e)) - +- remove old eslint heading ([768affc](https://github.com/WatWowMap/ReactMap/commit/768affc24ac06edaffdd109ce39042dfc46a732e)) ### Features -* rework how often available is updated ([ed35dcd](https://github.com/WatWowMap/ReactMap/commit/ed35dcdf325becfdf408b70dfc968137c82ada36)) +- rework how often available is updated ([ed35dcd](https://github.com/WatWowMap/ReactMap/commit/ed35dcdf325becfdf408b70dfc968137c82ada36)) # [1.29.0-develop.5](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.4...v1.29.0-develop.5) (2024-01-16) - ### Bug Fixes -* apply to all btns ([19997aa](https://github.com/WatWowMap/ReactMap/commit/19997aae6031b2f4b4b1bf528f24147a08eab137)) -* fr showcase translation ([c0f74fb](https://github.com/WatWowMap/ReactMap/commit/c0f74fbd003230fe3da162e9520b93e24657a42c)) -* gym badge page styling ([7016369](https://github.com/WatWowMap/ReactMap/commit/7016369f146f2aae52e72cc79db5725c43101c4c)) +- apply to all btns ([19997aa](https://github.com/WatWowMap/ReactMap/commit/19997aae6031b2f4b4b1bf528f24147a08eab137)) +- fr showcase translation ([c0f74fb](https://github.com/WatWowMap/ReactMap/commit/c0f74fbd003230fe3da162e9520b93e24657a42c)) +- gym badge page styling ([7016369](https://github.com/WatWowMap/ReactMap/commit/7016369f146f2aae52e72cc79db5725c43101c4c)) # [1.29.0-develop.4](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.3...v1.29.0-develop.4) (2024-01-16) - ### Bug Fixes -* export settings ([315508d](https://github.com/WatWowMap/ReactMap/commit/315508d841d2289c5096581c8d5afe0582516ff2)) -* remove log ([e572b3b](https://github.com/WatWowMap/ReactMap/commit/e572b3b6f405d87cfd553797f8b081cbd6812b2d)) +- export settings ([315508d](https://github.com/WatWowMap/ReactMap/commit/315508d841d2289c5096581c8d5afe0582516ff2)) +- remove log ([e572b3b](https://github.com/WatWowMap/ReactMap/commit/e572b3b6f405d87cfd553797f8b081cbd6812b2d)) # [1.29.0-develop.3](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.2...v1.29.0-develop.3) (2024-01-15) - ### Bug Fixes -* also show types in quick select ([c3f35dc](https://github.com/WatWowMap/ReactMap/commit/c3f35dc2aa9e21d9bb8b228ed36c07afd90700c9)) -* dyslexia? ([3c25864](https://github.com/WatWowMap/ReactMap/commit/3c25864b85f4ec712fc08caad50369d1b62c661c)) -* entering 0 on sliders ([0cb103c](https://github.com/WatWowMap/ReactMap/commit/0cb103cd297dd3e3b3baba362c60961bdacbf598)) -* forgot my own type i18n keys ([d74f239](https://github.com/WatWowMap/ReactMap/commit/d74f2398fd099817ad12a624fd53a737eb7bd45d)) -* gql types ([e1e499a](https://github.com/WatWowMap/ReactMap/commit/e1e499a52239d091e52f779e5149d8808d395be6)) -* id when searching ([1802ca6](https://github.com/WatWowMap/ReactMap/commit/1802ca6cac9215581a6097bb1cfa9ea6bfc3cdf8)) -* make showcase icons smaller by default ([b0c587a](https://github.com/WatWowMap/ReactMap/commit/b0c587aecd8126c1644a01c0fc459bc17dca0af2)) -* pokestop marker adjustments ([c81340c](https://github.com/WatWowMap/ReactMap/commit/c81340c4c1aab378af9e04dfae23677c4b3a1bd0)) -* remove `clear` icon for now ([58aed37](https://github.com/WatWowMap/ReactMap/commit/58aed3764b8c01df9f12dff680be8ec6a72380f2)) -* remove blue from types ([33ffc13](https://github.com/WatWowMap/ReactMap/commit/33ffc13bc5e4c366f74ccc1d3c1de05ea5e12e2f)) -* skip `h` filters on backend ([2020c40](https://github.com/WatWowMap/ReactMap/commit/2020c40e3f30196ca5effb9fb78d4115e3ccdd7b)) -* various webhook things ([a4b7db5](https://github.com/WatWowMap/ReactMap/commit/a4b7db515e991e0af3be8d5d42de4b4ce9cfbed4)) - +- also show types in quick select ([c3f35dc](https://github.com/WatWowMap/ReactMap/commit/c3f35dc2aa9e21d9bb8b228ed36c07afd90700c9)) +- dyslexia? ([3c25864](https://github.com/WatWowMap/ReactMap/commit/3c25864b85f4ec712fc08caad50369d1b62c661c)) +- entering 0 on sliders ([0cb103c](https://github.com/WatWowMap/ReactMap/commit/0cb103cd297dd3e3b3baba362c60961bdacbf598)) +- forgot my own type i18n keys ([d74f239](https://github.com/WatWowMap/ReactMap/commit/d74f2398fd099817ad12a624fd53a737eb7bd45d)) +- gql types ([e1e499a](https://github.com/WatWowMap/ReactMap/commit/e1e499a52239d091e52f779e5149d8808d395be6)) +- id when searching ([1802ca6](https://github.com/WatWowMap/ReactMap/commit/1802ca6cac9215581a6097bb1cfa9ea6bfc3cdf8)) +- make showcase icons smaller by default ([b0c587a](https://github.com/WatWowMap/ReactMap/commit/b0c587aecd8126c1644a01c0fc459bc17dca0af2)) +- pokestop marker adjustments ([c81340c](https://github.com/WatWowMap/ReactMap/commit/c81340c4c1aab378af9e04dfae23677c4b3a1bd0)) +- remove `clear` icon for now ([58aed37](https://github.com/WatWowMap/ReactMap/commit/58aed3764b8c01df9f12dff680be8ec6a72380f2)) +- remove blue from types ([33ffc13](https://github.com/WatWowMap/ReactMap/commit/33ffc13bc5e4c366f74ccc1d3c1de05ea5e12e2f)) +- skip `h` filters on backend ([2020c40](https://github.com/WatWowMap/ReactMap/commit/2020c40e3f30196ca5effb9fb78d4115e3ccdd7b)) +- various webhook things ([a4b7db5](https://github.com/WatWowMap/ReactMap/commit/a4b7db515e991e0af3be8d5d42de4b4ce9cfbed4)) ### Features -* showcase type id support ([45e5b1b](https://github.com/WatWowMap/ReactMap/commit/45e5b1baa73780b94bbc95e386fca924c44b989d)) +- showcase type id support ([45e5b1b](https://github.com/WatWowMap/ReactMap/commit/45e5b1baa73780b94bbc95e386fca924c44b989d)) # [1.29.0-develop.2](https://github.com/WatWowMap/ReactMap/compare/v1.29.0-develop.1...v1.29.0-develop.2) (2024-01-13) - ### Bug Fixes -* title check ([7f10790](https://github.com/WatWowMap/ReactMap/commit/7f10790ed15868677bc4ea1cc99a00a5fb34c9c2)) +- title check ([7f10790](https://github.com/WatWowMap/ReactMap/commit/7f10790ed15868677bc4ea1cc99a00a5fb34c9c2)) # [1.29.0-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.28.0...v1.29.0-develop.1) (2024-01-13) - ### Bug Fixes -* `this.refetch` check ([e57f1b0](https://github.com/WatWowMap/ReactMap/commit/e57f1b0235401a3dd90725003fb94b11c33869d3)) -* active weather ([6541aa8](https://github.com/WatWowMap/ReactMap/commit/6541aa852a6747912994f733fbe613d355c0b2ab)) -* adjust expert description ([d6f04e0](https://github.com/WatWowMap/ReactMap/commit/d6f04e06918342f4820c6f44d7b9cc6a5ec9595c)) -* admin items ([7e6a62e](https://github.com/WatWowMap/ReactMap/commit/7e6a62e678a384359374efcc751158b99d8485eb)) -* adv filter options on mobile ([93234c3](https://github.com/WatWowMap/ReactMap/commit/93234c37193f612d856153e5d8ab9f2348b84b82)) -* alignment uicons by id ([b17753f](https://github.com/WatWowMap/ReactMap/commit/b17753f8ac8ffaddbbf4fdb9ab9041dfd6159002)) -* available for other permissions ([425ab3a](https://github.com/WatWowMap/ReactMap/commit/425ab3a8f614fe46e28c333f422f2f1bc17efb7a)) -* better regex for mapping minified errors ([cd0c28b](https://github.com/WatWowMap/ReactMap/commit/cd0c28b63d809d7c4acb08c58588c6449543c982)) -* better slide/input behaviors ([98686b8](https://github.com/WatWowMap/ReactMap/commit/98686b8645d20115953904f270c6f741aa390f54)) -* ci commit messages ([ca42361](https://github.com/WatWowMap/ReactMap/commit/ca42361aa56b6e5438134656eb475a2a089dc1db)) -* cleanup from slot selection changes ([57ae335](https://github.com/WatWowMap/ReactMap/commit/57ae33519f0e692e3f1c48bcc527d7496b1efdad)) -* cleanups ([52690be](https://github.com/WatWowMap/ReactMap/commit/52690be10a3accae108c02803c51b14cee2b0111)) -* cleanups ([9ac88ca](https://github.com/WatWowMap/ReactMap/commit/9ac88ca6c18019eae2f7d0f5869ddacfab2719fd)) -* couple of fixes ([ac2a1c5](https://github.com/WatWowMap/ReactMap/commit/ac2a1c536f9d473c0ba27e96246b1a66a9b8fb74)) -* disable prop for multiselector ([1cf4955](https://github.com/WatWowMap/ReactMap/commit/1cf4955c843253e9429155a3ba3a785808f40160)) -* disable prop for size & gender ([33c6df7](https://github.com/WatWowMap/ReactMap/commit/33c6df7204ea8bd7655fec70640ebe423d84c579)) -* ditto filtering ([2f6ddaa](https://github.com/WatWowMap/ReactMap/commit/2f6ddaab3e1c1fe973446a7a326e1911998d884a)) -* dont show showcase mon if null ([e49b885](https://github.com/WatWowMap/ReactMap/commit/e49b885e277a6c6ffbab513c35f16cdfa9fe4c47)) -* enabled/all/disabled logic ([fc6c8ac](https://github.com/WatWowMap/ReactMap/commit/fc6c8ac7e82015d5f3d018814439fb0b1cd6f8d0)) -* ez mode checks ([e2bb1f0](https://github.com/WatWowMap/ReactMap/commit/e2bb1f0d118ce3751cd5209be74f98ea920e9800)) -* ez mode filter behavior ([0b0dd7d](https://github.com/WatWowMap/ReactMap/commit/0b0dd7dee74e1d1602514ec673c48ca646ec408d)) -* filtering edge cases ([a1b1580](https://github.com/WatWowMap/ReactMap/commit/a1b15806af30314dd90712f10180508ab75f7ebd)) -* further dnf refinements ([da08236](https://github.com/WatWowMap/ReactMap/commit/da08236f869be56e1a21f4b8a108f78be1cfa834)) -* global 0/100 iv toggles ([272d80d](https://github.com/WatWowMap/ReactMap/commit/272d80df4c07d858cfb29b3ceef5ad6472c12216)) -* gym badge menu from popup ([8cea2fb](https://github.com/WatWowMap/ReactMap/commit/8cea2fb47d786f1a74dcb03087f13cacb0645dfa)) -* hide all logic in adv menu for some items ([0561829](https://github.com/WatWowMap/ReactMap/commit/05618292589dc60118eaa9f2f3cf90234722c475)) -* hmm ([58d1ece](https://github.com/WatWowMap/ReactMap/commit/58d1ece97ddf4098b1217e2101d2b4b7dbb93237)) -* invasion quick selector ([ad4471a](https://github.com/WatWowMap/ReactMap/commit/ad4471a67ccb88020757c899fcf8ab5e266b9ffc)) -* make `allForms` false by default for usability ([cff0e23](https://github.com/WatWowMap/ReactMap/commit/cff0e234a1d9a4069da8a4cd12b5f8a0d3f9c6a0)) -* make the selector more generic friendly for other categories ([6259bc2](https://github.com/WatWowMap/ReactMap/commit/6259bc2101029c367300ebe98df082ad7c15a124)) -* missing label on search ([36f2bd8](https://github.com/WatWowMap/ReactMap/commit/36f2bd8662a12a5c4260e4d144e897acf86571b8)) -* missing translations ([4d6d5ec](https://github.com/WatWowMap/ReactMap/commit/4d6d5eccf28f35794e7d660d0dd25f9475cb36e0)) -* more filter tweaks ([a4c4eee](https://github.com/WatWowMap/ReactMap/commit/a4c4eee7cba6dee004af0ab31ccba84a52273d17)) -* only show catchable shadow pokes ([fd519de](https://github.com/WatWowMap/ReactMap/commit/fd519de58b1cb3ad5f436387851bd3dbea5d7981)) -* only show edit adv for all for pokemon ([622f179](https://github.com/WatWowMap/ReactMap/commit/622f17933dfed9a9b78647a4fcc7c4df3b105fdd)) -* opening adv mode from drawer ([5c2f080](https://github.com/WatWowMap/ReactMap/commit/5c2f080dda691b3f80572ad21e2757117e9c3855)) -* pokemon zoom ([9bbc70d](https://github.com/WatWowMap/ReactMap/commit/9bbc70d54bd21763b00e4cd396ab6669a592a198)) -* poracle manager with new state fixes ([f4564ef](https://github.com/WatWowMap/ReactMap/commit/f4564efe7ca578599756ddead77b957ad28e085f)) -* possible fix for leaflet location issue ([4aefb90](https://github.com/WatWowMap/ReactMap/commit/4aefb90d85db6a1e873355e032c03281b7b13b56)) -* prop cleanups ([8b7d25d](https://github.com/WatWowMap/ReactMap/commit/8b7d25d0f8a862ec50d1a91675fa67c5a7f7364a)) -* pvp mons with no iv perm ([fce7eb9](https://github.com/WatWowMap/ReactMap/commit/fce7eb91e6cb1ed6ee387807b27de8584dafbb14)) -* refine dnf filter generation ([875b961](https://github.com/WatWowMap/ReactMap/commit/875b961dd9bc4cb17ab297f8e2da517e21f04baa)) -* remove showcase on kecleon ([c42c9f4](https://github.com/WatWowMap/ReactMap/commit/c42c9f486ac1cab75cc34e93805fed746aa22f47)) -* remove unnecessary r filters from quick select ([f0a3b28](https://github.com/WatWowMap/ReactMap/commit/f0a3b2853bbe5970cd84917fece6980f2828022a)) -* s2 cells ([2048b73](https://github.com/WatWowMap/ReactMap/commit/2048b73961f740e13affe66bc5291dedde6cf8f8)) -* search case sensitive in adv menu ([be5846d](https://github.com/WatWowMap/ReactMap/commit/be5846d087ecec3af3e44c61297e1b2cab5a3179)) -* search fields ([581949c](https://github.com/WatWowMap/ReactMap/commit/581949c686a47abd9c8f50c78e027ab80bc354f7)) -* search translations in webhook tracked ([5ef29ee](https://github.com/WatWowMap/ReactMap/commit/5ef29ee53855fc0065b465dc53915ea21efb91ab)) -* search value clear ([05ae312](https://github.com/WatWowMap/ReactMap/commit/05ae312c9db7cf2c642940c2c5cc48adb2a9e039)) -* search/setting filtered behavior ([a30c286](https://github.com/WatWowMap/ReactMap/commit/a30c2869a5642cc4061970e4ef6b1fcbb1bc9fff)) -* slider states when disabled ([4d88c1a](https://github.com/WatWowMap/ReactMap/commit/4d88c1a04ca9b3babbb88093327df3cc8ad4a9be)) -* slight optimization for query requests ([706581b](https://github.com/WatWowMap/ReactMap/commit/706581b28a29c2a09982051c53f29c862c045252)) -* some pokestop filtering ([ef6be7f](https://github.com/WatWowMap/ReactMap/commit/ef6be7f96422b136e846c3a9d53cd30e573b0c6f)) -* some state bugs ([2daf109](https://github.com/WatWowMap/ReactMap/commit/2daf1091019e8c0f757df4b466c7db099ed1fc98)) -* standard filter backup ([5a0cdf5](https://github.com/WatWowMap/ReactMap/commit/5a0cdf5150e9e168898f1da6536d613f45d38350)) -* state bug & consolidate translations ([d6e6a79](https://github.com/WatWowMap/ReactMap/commit/d6e6a79cc5472f773fd632a2b0fec47d4a7bd337)) -* state filter stuff ([70c958e](https://github.com/WatWowMap/ReactMap/commit/70c958ec97b8e8875c4850720775fd164e2614e6)) -* string fallback ([11ce4ca](https://github.com/WatWowMap/ReactMap/commit/11ce4ca61094ebcb24a7457c97c79349c72513b6)) -* submission cell menu items ([01c6350](https://github.com/WatWowMap/ReactMap/commit/01c6350a2fffc1b810d8d5d949d7906844cf3b5c)) -* support for `all` in pokestop model ([cb57574](https://github.com/WatWowMap/ReactMap/commit/cb57574ad8502175ee7b18fd159eb3ce765c5833)) -* top level state changes ([f401bbe](https://github.com/WatWowMap/ReactMap/commit/f401bbe457ecfbb07b42554528c42fad55bd7d75)) -* tut welcome page ([3c9e40c](https://github.com/WatWowMap/ReactMap/commit/3c9e40c7300d06420a83fb0e7292c14c79e050b0)) -* unmount scanAreas section ([49ec133](https://github.com/WatWowMap/ReactMap/commit/49ec1334f217c49532cd85cb4bce5d496fd5dec7)) -* updating robust timeout refetch fn ([ff84870](https://github.com/WatWowMap/ReactMap/commit/ff84870c994136a15da7af2fe31bf947eb830e63)) -* user fields ([15ad84d](https://github.com/WatWowMap/ReactMap/commit/15ad84df882d363a55ccd50fec17ee4372bdb837)) -* vite prod build ([ed93946](https://github.com/WatWowMap/ReactMap/commit/ed93946c653e391210ae6a34f3b968437e249fef)) -* xxs/xxl names ([d6a8906](https://github.com/WatWowMap/ReactMap/commit/d6a890621a84242264ae35b79e204c5fc9e2bc96)) - +- `this.refetch` check ([e57f1b0](https://github.com/WatWowMap/ReactMap/commit/e57f1b0235401a3dd90725003fb94b11c33869d3)) +- active weather ([6541aa8](https://github.com/WatWowMap/ReactMap/commit/6541aa852a6747912994f733fbe613d355c0b2ab)) +- adjust expert description ([d6f04e0](https://github.com/WatWowMap/ReactMap/commit/d6f04e06918342f4820c6f44d7b9cc6a5ec9595c)) +- admin items ([7e6a62e](https://github.com/WatWowMap/ReactMap/commit/7e6a62e678a384359374efcc751158b99d8485eb)) +- adv filter options on mobile ([93234c3](https://github.com/WatWowMap/ReactMap/commit/93234c37193f612d856153e5d8ab9f2348b84b82)) +- alignment uicons by id ([b17753f](https://github.com/WatWowMap/ReactMap/commit/b17753f8ac8ffaddbbf4fdb9ab9041dfd6159002)) +- available for other permissions ([425ab3a](https://github.com/WatWowMap/ReactMap/commit/425ab3a8f614fe46e28c333f422f2f1bc17efb7a)) +- better regex for mapping minified errors ([cd0c28b](https://github.com/WatWowMap/ReactMap/commit/cd0c28b63d809d7c4acb08c58588c6449543c982)) +- better slide/input behaviors ([98686b8](https://github.com/WatWowMap/ReactMap/commit/98686b8645d20115953904f270c6f741aa390f54)) +- ci commit messages ([ca42361](https://github.com/WatWowMap/ReactMap/commit/ca42361aa56b6e5438134656eb475a2a089dc1db)) +- cleanup from slot selection changes ([57ae335](https://github.com/WatWowMap/ReactMap/commit/57ae33519f0e692e3f1c48bcc527d7496b1efdad)) +- cleanups ([52690be](https://github.com/WatWowMap/ReactMap/commit/52690be10a3accae108c02803c51b14cee2b0111)) +- cleanups ([9ac88ca](https://github.com/WatWowMap/ReactMap/commit/9ac88ca6c18019eae2f7d0f5869ddacfab2719fd)) +- couple of fixes ([ac2a1c5](https://github.com/WatWowMap/ReactMap/commit/ac2a1c536f9d473c0ba27e96246b1a66a9b8fb74)) +- disable prop for multiselector ([1cf4955](https://github.com/WatWowMap/ReactMap/commit/1cf4955c843253e9429155a3ba3a785808f40160)) +- disable prop for size & gender ([33c6df7](https://github.com/WatWowMap/ReactMap/commit/33c6df7204ea8bd7655fec70640ebe423d84c579)) +- ditto filtering ([2f6ddaa](https://github.com/WatWowMap/ReactMap/commit/2f6ddaab3e1c1fe973446a7a326e1911998d884a)) +- dont show showcase mon if null ([e49b885](https://github.com/WatWowMap/ReactMap/commit/e49b885e277a6c6ffbab513c35f16cdfa9fe4c47)) +- enabled/all/disabled logic ([fc6c8ac](https://github.com/WatWowMap/ReactMap/commit/fc6c8ac7e82015d5f3d018814439fb0b1cd6f8d0)) +- ez mode checks ([e2bb1f0](https://github.com/WatWowMap/ReactMap/commit/e2bb1f0d118ce3751cd5209be74f98ea920e9800)) +- ez mode filter behavior ([0b0dd7d](https://github.com/WatWowMap/ReactMap/commit/0b0dd7dee74e1d1602514ec673c48ca646ec408d)) +- filtering edge cases ([a1b1580](https://github.com/WatWowMap/ReactMap/commit/a1b15806af30314dd90712f10180508ab75f7ebd)) +- further dnf refinements ([da08236](https://github.com/WatWowMap/ReactMap/commit/da08236f869be56e1a21f4b8a108f78be1cfa834)) +- global 0/100 iv toggles ([272d80d](https://github.com/WatWowMap/ReactMap/commit/272d80df4c07d858cfb29b3ceef5ad6472c12216)) +- gym badge menu from popup ([8cea2fb](https://github.com/WatWowMap/ReactMap/commit/8cea2fb47d786f1a74dcb03087f13cacb0645dfa)) +- hide all logic in adv menu for some items ([0561829](https://github.com/WatWowMap/ReactMap/commit/05618292589dc60118eaa9f2f3cf90234722c475)) +- hmm ([58d1ece](https://github.com/WatWowMap/ReactMap/commit/58d1ece97ddf4098b1217e2101d2b4b7dbb93237)) +- invasion quick selector ([ad4471a](https://github.com/WatWowMap/ReactMap/commit/ad4471a67ccb88020757c899fcf8ab5e266b9ffc)) +- make `allForms` false by default for usability ([cff0e23](https://github.com/WatWowMap/ReactMap/commit/cff0e234a1d9a4069da8a4cd12b5f8a0d3f9c6a0)) +- make the selector more generic friendly for other categories ([6259bc2](https://github.com/WatWowMap/ReactMap/commit/6259bc2101029c367300ebe98df082ad7c15a124)) +- missing label on search ([36f2bd8](https://github.com/WatWowMap/ReactMap/commit/36f2bd8662a12a5c4260e4d144e897acf86571b8)) +- missing translations ([4d6d5ec](https://github.com/WatWowMap/ReactMap/commit/4d6d5eccf28f35794e7d660d0dd25f9475cb36e0)) +- more filter tweaks ([a4c4eee](https://github.com/WatWowMap/ReactMap/commit/a4c4eee7cba6dee004af0ab31ccba84a52273d17)) +- only show catchable shadow pokes ([fd519de](https://github.com/WatWowMap/ReactMap/commit/fd519de58b1cb3ad5f436387851bd3dbea5d7981)) +- only show edit adv for all for pokemon ([622f179](https://github.com/WatWowMap/ReactMap/commit/622f17933dfed9a9b78647a4fcc7c4df3b105fdd)) +- opening adv mode from drawer ([5c2f080](https://github.com/WatWowMap/ReactMap/commit/5c2f080dda691b3f80572ad21e2757117e9c3855)) +- pokemon zoom ([9bbc70d](https://github.com/WatWowMap/ReactMap/commit/9bbc70d54bd21763b00e4cd396ab6669a592a198)) +- poracle manager with new state fixes ([f4564ef](https://github.com/WatWowMap/ReactMap/commit/f4564efe7ca578599756ddead77b957ad28e085f)) +- possible fix for leaflet location issue ([4aefb90](https://github.com/WatWowMap/ReactMap/commit/4aefb90d85db6a1e873355e032c03281b7b13b56)) +- prop cleanups ([8b7d25d](https://github.com/WatWowMap/ReactMap/commit/8b7d25d0f8a862ec50d1a91675fa67c5a7f7364a)) +- pvp mons with no iv perm ([fce7eb9](https://github.com/WatWowMap/ReactMap/commit/fce7eb91e6cb1ed6ee387807b27de8584dafbb14)) +- refine dnf filter generation ([875b961](https://github.com/WatWowMap/ReactMap/commit/875b961dd9bc4cb17ab297f8e2da517e21f04baa)) +- remove showcase on kecleon ([c42c9f4](https://github.com/WatWowMap/ReactMap/commit/c42c9f486ac1cab75cc34e93805fed746aa22f47)) +- remove unnecessary r filters from quick select ([f0a3b28](https://github.com/WatWowMap/ReactMap/commit/f0a3b2853bbe5970cd84917fece6980f2828022a)) +- s2 cells ([2048b73](https://github.com/WatWowMap/ReactMap/commit/2048b73961f740e13affe66bc5291dedde6cf8f8)) +- search case sensitive in adv menu ([be5846d](https://github.com/WatWowMap/ReactMap/commit/be5846d087ecec3af3e44c61297e1b2cab5a3179)) +- search fields ([581949c](https://github.com/WatWowMap/ReactMap/commit/581949c686a47abd9c8f50c78e027ab80bc354f7)) +- search translations in webhook tracked ([5ef29ee](https://github.com/WatWowMap/ReactMap/commit/5ef29ee53855fc0065b465dc53915ea21efb91ab)) +- search value clear ([05ae312](https://github.com/WatWowMap/ReactMap/commit/05ae312c9db7cf2c642940c2c5cc48adb2a9e039)) +- search/setting filtered behavior ([a30c286](https://github.com/WatWowMap/ReactMap/commit/a30c2869a5642cc4061970e4ef6b1fcbb1bc9fff)) +- slider states when disabled ([4d88c1a](https://github.com/WatWowMap/ReactMap/commit/4d88c1a04ca9b3babbb88093327df3cc8ad4a9be)) +- slight optimization for query requests ([706581b](https://github.com/WatWowMap/ReactMap/commit/706581b28a29c2a09982051c53f29c862c045252)) +- some pokestop filtering ([ef6be7f](https://github.com/WatWowMap/ReactMap/commit/ef6be7f96422b136e846c3a9d53cd30e573b0c6f)) +- some state bugs ([2daf109](https://github.com/WatWowMap/ReactMap/commit/2daf1091019e8c0f757df4b466c7db099ed1fc98)) +- standard filter backup ([5a0cdf5](https://github.com/WatWowMap/ReactMap/commit/5a0cdf5150e9e168898f1da6536d613f45d38350)) +- state bug & consolidate translations ([d6e6a79](https://github.com/WatWowMap/ReactMap/commit/d6e6a79cc5472f773fd632a2b0fec47d4a7bd337)) +- state filter stuff ([70c958e](https://github.com/WatWowMap/ReactMap/commit/70c958ec97b8e8875c4850720775fd164e2614e6)) +- string fallback ([11ce4ca](https://github.com/WatWowMap/ReactMap/commit/11ce4ca61094ebcb24a7457c97c79349c72513b6)) +- submission cell menu items ([01c6350](https://github.com/WatWowMap/ReactMap/commit/01c6350a2fffc1b810d8d5d949d7906844cf3b5c)) +- support for `all` in pokestop model ([cb57574](https://github.com/WatWowMap/ReactMap/commit/cb57574ad8502175ee7b18fd159eb3ce765c5833)) +- top level state changes ([f401bbe](https://github.com/WatWowMap/ReactMap/commit/f401bbe457ecfbb07b42554528c42fad55bd7d75)) +- tut welcome page ([3c9e40c](https://github.com/WatWowMap/ReactMap/commit/3c9e40c7300d06420a83fb0e7292c14c79e050b0)) +- unmount scanAreas section ([49ec133](https://github.com/WatWowMap/ReactMap/commit/49ec1334f217c49532cd85cb4bce5d496fd5dec7)) +- updating robust timeout refetch fn ([ff84870](https://github.com/WatWowMap/ReactMap/commit/ff84870c994136a15da7af2fe31bf947eb830e63)) +- user fields ([15ad84d](https://github.com/WatWowMap/ReactMap/commit/15ad84df882d363a55ccd50fec17ee4372bdb837)) +- vite prod build ([ed93946](https://github.com/WatWowMap/ReactMap/commit/ed93946c653e391210ae6a34f3b968437e249fef)) +- xxs/xxl names ([d6a8906](https://github.com/WatWowMap/ReactMap/commit/d6a890621a84242264ae35b79e204c5fc9e2bc96)) ### Features -* add searching ([356c01b](https://github.com/WatWowMap/ReactMap/commit/356c01bb4d0754548e4dbb54dfdb9eaef6833a67)) -* dev settings in sidebar ([6a2651f](https://github.com/WatWowMap/ReactMap/commit/6a2651fcc8ef36066efcda1b5e9be72993c212da)) -* gym quick selector ([93c8fab](https://github.com/WatWowMap/ReactMap/commit/93c8fab22f7b6554ba6e03cc9e1c3411c70877a5)) -* invasions quick select ([c638225](https://github.com/WatWowMap/ReactMap/commit/c63822561add83b6067cad620d654ba615871a30)) -* literal easy mode ([5298676](https://github.com/WatWowMap/ReactMap/commit/52986760bc537ced305b8d43dca91c124da21076)) -* lure quick selector ([98ee717](https://github.com/WatWowMap/ReactMap/commit/98ee7178129c594f335aaa143bc3b5ca4d8be63a)) -* nest quick select menu ([37761d7](https://github.com/WatWowMap/ReactMap/commit/37761d7b46e803b1d33f81319108a6dec785f91e)) -* pokemon filter mode selector ([be846fc](https://github.com/WatWowMap/ReactMap/commit/be846fcbf9203fa5ae53557fa67f093eeba13f9e)) -* quest quick select menu ([02d8d65](https://github.com/WatWowMap/ReactMap/commit/02d8d65719576ce3992019fa0751e4dd56813a3b)) -* quick select pkmn filters ([ee1010b](https://github.com/WatWowMap/ReactMap/commit/ee1010bde398e3fc8d8c7a7d6983d6484fda7221)) -* raids quick select menu ([dc3e10a](https://github.com/WatWowMap/ReactMap/commit/dc3e10a07fd4da042d434dc9a915dd77583d2629)) -* respect global if no pkmn are active in basic mode ([c96c99f](https://github.com/WatWowMap/ReactMap/commit/c96c99fd85e7d426b41675e9494d5e4850594109)) -* show event stop markers if no quests/invasions ([32df5e9](https://github.com/WatWowMap/ReactMap/commit/32df5e9bcfc5180a6afa4b5a14b6b69d7a1237b6)) -* showcase quick select ([1ae5fab](https://github.com/WatWowMap/ReactMap/commit/1ae5fab836d1bf7f70495541088a7685cdb9b859)) -* tooltip ([a3777dd](https://github.com/WatWowMap/ReactMap/commit/a3777dd04bd371c7464525113a5ebf64e619c7d6)) -* useTranslateById AIO hook for ez key translations ([20dd65d](https://github.com/WatWowMap/ReactMap/commit/20dd65d67c51d3310ffac462184d0ac59fb5095d)) +- add searching ([356c01b](https://github.com/WatWowMap/ReactMap/commit/356c01bb4d0754548e4dbb54dfdb9eaef6833a67)) +- dev settings in sidebar ([6a2651f](https://github.com/WatWowMap/ReactMap/commit/6a2651fcc8ef36066efcda1b5e9be72993c212da)) +- gym quick selector ([93c8fab](https://github.com/WatWowMap/ReactMap/commit/93c8fab22f7b6554ba6e03cc9e1c3411c70877a5)) +- invasions quick select ([c638225](https://github.com/WatWowMap/ReactMap/commit/c63822561add83b6067cad620d654ba615871a30)) +- literal easy mode ([5298676](https://github.com/WatWowMap/ReactMap/commit/52986760bc537ced305b8d43dca91c124da21076)) +- lure quick selector ([98ee717](https://github.com/WatWowMap/ReactMap/commit/98ee7178129c594f335aaa143bc3b5ca4d8be63a)) +- nest quick select menu ([37761d7](https://github.com/WatWowMap/ReactMap/commit/37761d7b46e803b1d33f81319108a6dec785f91e)) +- pokemon filter mode selector ([be846fc](https://github.com/WatWowMap/ReactMap/commit/be846fcbf9203fa5ae53557fa67f093eeba13f9e)) +- quest quick select menu ([02d8d65](https://github.com/WatWowMap/ReactMap/commit/02d8d65719576ce3992019fa0751e4dd56813a3b)) +- quick select pkmn filters ([ee1010b](https://github.com/WatWowMap/ReactMap/commit/ee1010bde398e3fc8d8c7a7d6983d6484fda7221)) +- raids quick select menu ([dc3e10a](https://github.com/WatWowMap/ReactMap/commit/dc3e10a07fd4da042d434dc9a915dd77583d2629)) +- respect global if no pkmn are active in basic mode ([c96c99f](https://github.com/WatWowMap/ReactMap/commit/c96c99fd85e7d426b41675e9494d5e4850594109)) +- show event stop markers if no quests/invasions ([32df5e9](https://github.com/WatWowMap/ReactMap/commit/32df5e9bcfc5180a6afa4b5a14b6b69d7a1237b6)) +- showcase quick select ([1ae5fab](https://github.com/WatWowMap/ReactMap/commit/1ae5fab836d1bf7f70495541088a7685cdb9b859)) +- tooltip ([a3777dd](https://github.com/WatWowMap/ReactMap/commit/a3777dd04bd371c7464525113a5ebf64e619c7d6)) +- useTranslateById AIO hook for ez key translations ([20dd65d](https://github.com/WatWowMap/ReactMap/commit/20dd65d67c51d3310ffac462184d0ac59fb5095d)) # [1.28.0-develop.10](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.9...v1.28.0-develop.10) (2024-01-12) - ### Bug Fixes -* better regex for mapping minified errors ([cd0c28b](https://github.com/WatWowMap/ReactMap/commit/cd0c28b63d809d7c4acb08c58588c6449543c982)) -* search translations in webhook tracked ([5ef29ee](https://github.com/WatWowMap/ReactMap/commit/5ef29ee53855fc0065b465dc53915ea21efb91ab)) +- better regex for mapping minified errors ([cd0c28b](https://github.com/WatWowMap/ReactMap/commit/cd0c28b63d809d7c4acb08c58588c6449543c982)) +- search translations in webhook tracked ([5ef29ee](https://github.com/WatWowMap/ReactMap/commit/5ef29ee53855fc0065b465dc53915ea21efb91ab)) # [1.28.0-develop.9](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.8...v1.28.0-develop.9) (2024-01-12) - ### Bug Fixes -* `this.refetch` check ([e57f1b0](https://github.com/WatWowMap/ReactMap/commit/e57f1b0235401a3dd90725003fb94b11c33869d3)) +- `this.refetch` check ([e57f1b0](https://github.com/WatWowMap/ReactMap/commit/e57f1b0235401a3dd90725003fb94b11c33869d3)) # [1.28.0-develop.8](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.7...v1.28.0-develop.8) (2024-01-12) - ### Bug Fixes -* xxs/xxl names ([d6a8906](https://github.com/WatWowMap/ReactMap/commit/d6a890621a84242264ae35b79e204c5fc9e2bc96)) +- xxs/xxl names ([d6a8906](https://github.com/WatWowMap/ReactMap/commit/d6a890621a84242264ae35b79e204c5fc9e2bc96)) # [1.28.0-develop.7](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.6...v1.28.0-develop.7) (2024-01-12) - ### Bug Fixes -* updating robust timeout refetch fn ([ff84870](https://github.com/WatWowMap/ReactMap/commit/ff84870c994136a15da7af2fe31bf947eb830e63)) +- updating robust timeout refetch fn ([ff84870](https://github.com/WatWowMap/ReactMap/commit/ff84870c994136a15da7af2fe31bf947eb830e63)) # [1.28.0-develop.6](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.5...v1.28.0-develop.6) (2024-01-11) - ### Bug Fixes -* active weather ([6541aa8](https://github.com/WatWowMap/ReactMap/commit/6541aa852a6747912994f733fbe613d355c0b2ab)) -* adjust expert description ([d6f04e0](https://github.com/WatWowMap/ReactMap/commit/d6f04e06918342f4820c6f44d7b9cc6a5ec9595c)) -* admin items ([7e6a62e](https://github.com/WatWowMap/ReactMap/commit/7e6a62e678a384359374efcc751158b99d8485eb)) -* adv filter options on mobile ([93234c3](https://github.com/WatWowMap/ReactMap/commit/93234c37193f612d856153e5d8ab9f2348b84b82)) -* alignment uicons by id ([b17753f](https://github.com/WatWowMap/ReactMap/commit/b17753f8ac8ffaddbbf4fdb9ab9041dfd6159002)) -* available for other permissions ([425ab3a](https://github.com/WatWowMap/ReactMap/commit/425ab3a8f614fe46e28c333f422f2f1bc17efb7a)) -* better slide/input behaviors ([98686b8](https://github.com/WatWowMap/ReactMap/commit/98686b8645d20115953904f270c6f741aa390f54)) -* cleanup from slot selection changes ([57ae335](https://github.com/WatWowMap/ReactMap/commit/57ae33519f0e692e3f1c48bcc527d7496b1efdad)) -* cleanups ([52690be](https://github.com/WatWowMap/ReactMap/commit/52690be10a3accae108c02803c51b14cee2b0111)) -* cleanups ([9ac88ca](https://github.com/WatWowMap/ReactMap/commit/9ac88ca6c18019eae2f7d0f5869ddacfab2719fd)) -* couple of fixes ([ac2a1c5](https://github.com/WatWowMap/ReactMap/commit/ac2a1c536f9d473c0ba27e96246b1a66a9b8fb74)) -* disable prop for multiselector ([1cf4955](https://github.com/WatWowMap/ReactMap/commit/1cf4955c843253e9429155a3ba3a785808f40160)) -* disable prop for size & gender ([33c6df7](https://github.com/WatWowMap/ReactMap/commit/33c6df7204ea8bd7655fec70640ebe423d84c579)) -* ditto filtering ([2f6ddaa](https://github.com/WatWowMap/ReactMap/commit/2f6ddaab3e1c1fe973446a7a326e1911998d884a)) -* dont show showcase mon if null ([e49b885](https://github.com/WatWowMap/ReactMap/commit/e49b885e277a6c6ffbab513c35f16cdfa9fe4c47)) -* enabled/all/disabled logic ([fc6c8ac](https://github.com/WatWowMap/ReactMap/commit/fc6c8ac7e82015d5f3d018814439fb0b1cd6f8d0)) -* ez mode checks ([e2bb1f0](https://github.com/WatWowMap/ReactMap/commit/e2bb1f0d118ce3751cd5209be74f98ea920e9800)) -* ez mode filter behavior ([0b0dd7d](https://github.com/WatWowMap/ReactMap/commit/0b0dd7dee74e1d1602514ec673c48ca646ec408d)) -* filtering edge cases ([a1b1580](https://github.com/WatWowMap/ReactMap/commit/a1b15806af30314dd90712f10180508ab75f7ebd)) -* further dnf refinements ([da08236](https://github.com/WatWowMap/ReactMap/commit/da08236f869be56e1a21f4b8a108f78be1cfa834)) -* global 0/100 iv toggles ([272d80d](https://github.com/WatWowMap/ReactMap/commit/272d80df4c07d858cfb29b3ceef5ad6472c12216)) -* gym badge menu from popup ([8cea2fb](https://github.com/WatWowMap/ReactMap/commit/8cea2fb47d786f1a74dcb03087f13cacb0645dfa)) -* hide all logic in adv menu for some items ([0561829](https://github.com/WatWowMap/ReactMap/commit/05618292589dc60118eaa9f2f3cf90234722c475)) -* hmm ([58d1ece](https://github.com/WatWowMap/ReactMap/commit/58d1ece97ddf4098b1217e2101d2b4b7dbb93237)) -* invasion quick selector ([ad4471a](https://github.com/WatWowMap/ReactMap/commit/ad4471a67ccb88020757c899fcf8ab5e266b9ffc)) -* make the selector more generic friendly for other categories ([6259bc2](https://github.com/WatWowMap/ReactMap/commit/6259bc2101029c367300ebe98df082ad7c15a124)) -* missing label on search ([36f2bd8](https://github.com/WatWowMap/ReactMap/commit/36f2bd8662a12a5c4260e4d144e897acf86571b8)) -* missing translations ([4d6d5ec](https://github.com/WatWowMap/ReactMap/commit/4d6d5eccf28f35794e7d660d0dd25f9475cb36e0)) -* more filter tweaks ([a4c4eee](https://github.com/WatWowMap/ReactMap/commit/a4c4eee7cba6dee004af0ab31ccba84a52273d17)) -* only show catchable shadow pokes ([fd519de](https://github.com/WatWowMap/ReactMap/commit/fd519de58b1cb3ad5f436387851bd3dbea5d7981)) -* only show edit adv for all for pokemon ([622f179](https://github.com/WatWowMap/ReactMap/commit/622f17933dfed9a9b78647a4fcc7c4df3b105fdd)) -* opening adv mode from drawer ([5c2f080](https://github.com/WatWowMap/ReactMap/commit/5c2f080dda691b3f80572ad21e2757117e9c3855)) -* pokemon zoom ([9bbc70d](https://github.com/WatWowMap/ReactMap/commit/9bbc70d54bd21763b00e4cd396ab6669a592a198)) -* poracle manager with new state fixes ([f4564ef](https://github.com/WatWowMap/ReactMap/commit/f4564efe7ca578599756ddead77b957ad28e085f)) -* possible fix for leaflet location issue ([4aefb90](https://github.com/WatWowMap/ReactMap/commit/4aefb90d85db6a1e873355e032c03281b7b13b56)) -* prop cleanups ([8b7d25d](https://github.com/WatWowMap/ReactMap/commit/8b7d25d0f8a862ec50d1a91675fa67c5a7f7364a)) -* pvp mons with no iv perm ([fce7eb9](https://github.com/WatWowMap/ReactMap/commit/fce7eb91e6cb1ed6ee387807b27de8584dafbb14)) -* refine dnf filter generation ([875b961](https://github.com/WatWowMap/ReactMap/commit/875b961dd9bc4cb17ab297f8e2da517e21f04baa)) -* remove showcase on kecleon ([c42c9f4](https://github.com/WatWowMap/ReactMap/commit/c42c9f486ac1cab75cc34e93805fed746aa22f47)) -* remove unnecessary r filters from quick select ([f0a3b28](https://github.com/WatWowMap/ReactMap/commit/f0a3b2853bbe5970cd84917fece6980f2828022a)) -* s2 cells ([2048b73](https://github.com/WatWowMap/ReactMap/commit/2048b73961f740e13affe66bc5291dedde6cf8f8)) -* search case sensitive in adv menu ([be5846d](https://github.com/WatWowMap/ReactMap/commit/be5846d087ecec3af3e44c61297e1b2cab5a3179)) -* search fields ([581949c](https://github.com/WatWowMap/ReactMap/commit/581949c686a47abd9c8f50c78e027ab80bc354f7)) -* search value clear ([05ae312](https://github.com/WatWowMap/ReactMap/commit/05ae312c9db7cf2c642940c2c5cc48adb2a9e039)) -* search/setting filtered behavior ([a30c286](https://github.com/WatWowMap/ReactMap/commit/a30c2869a5642cc4061970e4ef6b1fcbb1bc9fff)) -* slider states when disabled ([4d88c1a](https://github.com/WatWowMap/ReactMap/commit/4d88c1a04ca9b3babbb88093327df3cc8ad4a9be)) -* slight optimization for query requests ([706581b](https://github.com/WatWowMap/ReactMap/commit/706581b28a29c2a09982051c53f29c862c045252)) -* some pokestop filtering ([ef6be7f](https://github.com/WatWowMap/ReactMap/commit/ef6be7f96422b136e846c3a9d53cd30e573b0c6f)) -* some state bugs ([2daf109](https://github.com/WatWowMap/ReactMap/commit/2daf1091019e8c0f757df4b466c7db099ed1fc98)) -* standard filter backup ([5a0cdf5](https://github.com/WatWowMap/ReactMap/commit/5a0cdf5150e9e168898f1da6536d613f45d38350)) -* state bug & consolidate translations ([d6e6a79](https://github.com/WatWowMap/ReactMap/commit/d6e6a79cc5472f773fd632a2b0fec47d4a7bd337)) -* state filter stuff ([70c958e](https://github.com/WatWowMap/ReactMap/commit/70c958ec97b8e8875c4850720775fd164e2614e6)) -* string fallback ([11ce4ca](https://github.com/WatWowMap/ReactMap/commit/11ce4ca61094ebcb24a7457c97c79349c72513b6)) -* submission cell menu items ([01c6350](https://github.com/WatWowMap/ReactMap/commit/01c6350a2fffc1b810d8d5d949d7906844cf3b5c)) -* support for `all` in pokestop model ([cb57574](https://github.com/WatWowMap/ReactMap/commit/cb57574ad8502175ee7b18fd159eb3ce765c5833)) -* top level state changes ([f401bbe](https://github.com/WatWowMap/ReactMap/commit/f401bbe457ecfbb07b42554528c42fad55bd7d75)) -* tut welcome page ([3c9e40c](https://github.com/WatWowMap/ReactMap/commit/3c9e40c7300d06420a83fb0e7292c14c79e050b0)) -* unmount scanAreas section ([49ec133](https://github.com/WatWowMap/ReactMap/commit/49ec1334f217c49532cd85cb4bce5d496fd5dec7)) -* user fields ([15ad84d](https://github.com/WatWowMap/ReactMap/commit/15ad84df882d363a55ccd50fec17ee4372bdb837)) -* vite prod build ([ed93946](https://github.com/WatWowMap/ReactMap/commit/ed93946c653e391210ae6a34f3b968437e249fef)) - +- active weather ([6541aa8](https://github.com/WatWowMap/ReactMap/commit/6541aa852a6747912994f733fbe613d355c0b2ab)) +- adjust expert description ([d6f04e0](https://github.com/WatWowMap/ReactMap/commit/d6f04e06918342f4820c6f44d7b9cc6a5ec9595c)) +- admin items ([7e6a62e](https://github.com/WatWowMap/ReactMap/commit/7e6a62e678a384359374efcc751158b99d8485eb)) +- adv filter options on mobile ([93234c3](https://github.com/WatWowMap/ReactMap/commit/93234c37193f612d856153e5d8ab9f2348b84b82)) +- alignment uicons by id ([b17753f](https://github.com/WatWowMap/ReactMap/commit/b17753f8ac8ffaddbbf4fdb9ab9041dfd6159002)) +- available for other permissions ([425ab3a](https://github.com/WatWowMap/ReactMap/commit/425ab3a8f614fe46e28c333f422f2f1bc17efb7a)) +- better slide/input behaviors ([98686b8](https://github.com/WatWowMap/ReactMap/commit/98686b8645d20115953904f270c6f741aa390f54)) +- cleanup from slot selection changes ([57ae335](https://github.com/WatWowMap/ReactMap/commit/57ae33519f0e692e3f1c48bcc527d7496b1efdad)) +- cleanups ([52690be](https://github.com/WatWowMap/ReactMap/commit/52690be10a3accae108c02803c51b14cee2b0111)) +- cleanups ([9ac88ca](https://github.com/WatWowMap/ReactMap/commit/9ac88ca6c18019eae2f7d0f5869ddacfab2719fd)) +- couple of fixes ([ac2a1c5](https://github.com/WatWowMap/ReactMap/commit/ac2a1c536f9d473c0ba27e96246b1a66a9b8fb74)) +- disable prop for multiselector ([1cf4955](https://github.com/WatWowMap/ReactMap/commit/1cf4955c843253e9429155a3ba3a785808f40160)) +- disable prop for size & gender ([33c6df7](https://github.com/WatWowMap/ReactMap/commit/33c6df7204ea8bd7655fec70640ebe423d84c579)) +- ditto filtering ([2f6ddaa](https://github.com/WatWowMap/ReactMap/commit/2f6ddaab3e1c1fe973446a7a326e1911998d884a)) +- dont show showcase mon if null ([e49b885](https://github.com/WatWowMap/ReactMap/commit/e49b885e277a6c6ffbab513c35f16cdfa9fe4c47)) +- enabled/all/disabled logic ([fc6c8ac](https://github.com/WatWowMap/ReactMap/commit/fc6c8ac7e82015d5f3d018814439fb0b1cd6f8d0)) +- ez mode checks ([e2bb1f0](https://github.com/WatWowMap/ReactMap/commit/e2bb1f0d118ce3751cd5209be74f98ea920e9800)) +- ez mode filter behavior ([0b0dd7d](https://github.com/WatWowMap/ReactMap/commit/0b0dd7dee74e1d1602514ec673c48ca646ec408d)) +- filtering edge cases ([a1b1580](https://github.com/WatWowMap/ReactMap/commit/a1b15806af30314dd90712f10180508ab75f7ebd)) +- further dnf refinements ([da08236](https://github.com/WatWowMap/ReactMap/commit/da08236f869be56e1a21f4b8a108f78be1cfa834)) +- global 0/100 iv toggles ([272d80d](https://github.com/WatWowMap/ReactMap/commit/272d80df4c07d858cfb29b3ceef5ad6472c12216)) +- gym badge menu from popup ([8cea2fb](https://github.com/WatWowMap/ReactMap/commit/8cea2fb47d786f1a74dcb03087f13cacb0645dfa)) +- hide all logic in adv menu for some items ([0561829](https://github.com/WatWowMap/ReactMap/commit/05618292589dc60118eaa9f2f3cf90234722c475)) +- hmm ([58d1ece](https://github.com/WatWowMap/ReactMap/commit/58d1ece97ddf4098b1217e2101d2b4b7dbb93237)) +- invasion quick selector ([ad4471a](https://github.com/WatWowMap/ReactMap/commit/ad4471a67ccb88020757c899fcf8ab5e266b9ffc)) +- make the selector more generic friendly for other categories ([6259bc2](https://github.com/WatWowMap/ReactMap/commit/6259bc2101029c367300ebe98df082ad7c15a124)) +- missing label on search ([36f2bd8](https://github.com/WatWowMap/ReactMap/commit/36f2bd8662a12a5c4260e4d144e897acf86571b8)) +- missing translations ([4d6d5ec](https://github.com/WatWowMap/ReactMap/commit/4d6d5eccf28f35794e7d660d0dd25f9475cb36e0)) +- more filter tweaks ([a4c4eee](https://github.com/WatWowMap/ReactMap/commit/a4c4eee7cba6dee004af0ab31ccba84a52273d17)) +- only show catchable shadow pokes ([fd519de](https://github.com/WatWowMap/ReactMap/commit/fd519de58b1cb3ad5f436387851bd3dbea5d7981)) +- only show edit adv for all for pokemon ([622f179](https://github.com/WatWowMap/ReactMap/commit/622f17933dfed9a9b78647a4fcc7c4df3b105fdd)) +- opening adv mode from drawer ([5c2f080](https://github.com/WatWowMap/ReactMap/commit/5c2f080dda691b3f80572ad21e2757117e9c3855)) +- pokemon zoom ([9bbc70d](https://github.com/WatWowMap/ReactMap/commit/9bbc70d54bd21763b00e4cd396ab6669a592a198)) +- poracle manager with new state fixes ([f4564ef](https://github.com/WatWowMap/ReactMap/commit/f4564efe7ca578599756ddead77b957ad28e085f)) +- possible fix for leaflet location issue ([4aefb90](https://github.com/WatWowMap/ReactMap/commit/4aefb90d85db6a1e873355e032c03281b7b13b56)) +- prop cleanups ([8b7d25d](https://github.com/WatWowMap/ReactMap/commit/8b7d25d0f8a862ec50d1a91675fa67c5a7f7364a)) +- pvp mons with no iv perm ([fce7eb9](https://github.com/WatWowMap/ReactMap/commit/fce7eb91e6cb1ed6ee387807b27de8584dafbb14)) +- refine dnf filter generation ([875b961](https://github.com/WatWowMap/ReactMap/commit/875b961dd9bc4cb17ab297f8e2da517e21f04baa)) +- remove showcase on kecleon ([c42c9f4](https://github.com/WatWowMap/ReactMap/commit/c42c9f486ac1cab75cc34e93805fed746aa22f47)) +- remove unnecessary r filters from quick select ([f0a3b28](https://github.com/WatWowMap/ReactMap/commit/f0a3b2853bbe5970cd84917fece6980f2828022a)) +- s2 cells ([2048b73](https://github.com/WatWowMap/ReactMap/commit/2048b73961f740e13affe66bc5291dedde6cf8f8)) +- search case sensitive in adv menu ([be5846d](https://github.com/WatWowMap/ReactMap/commit/be5846d087ecec3af3e44c61297e1b2cab5a3179)) +- search fields ([581949c](https://github.com/WatWowMap/ReactMap/commit/581949c686a47abd9c8f50c78e027ab80bc354f7)) +- search value clear ([05ae312](https://github.com/WatWowMap/ReactMap/commit/05ae312c9db7cf2c642940c2c5cc48adb2a9e039)) +- search/setting filtered behavior ([a30c286](https://github.com/WatWowMap/ReactMap/commit/a30c2869a5642cc4061970e4ef6b1fcbb1bc9fff)) +- slider states when disabled ([4d88c1a](https://github.com/WatWowMap/ReactMap/commit/4d88c1a04ca9b3babbb88093327df3cc8ad4a9be)) +- slight optimization for query requests ([706581b](https://github.com/WatWowMap/ReactMap/commit/706581b28a29c2a09982051c53f29c862c045252)) +- some pokestop filtering ([ef6be7f](https://github.com/WatWowMap/ReactMap/commit/ef6be7f96422b136e846c3a9d53cd30e573b0c6f)) +- some state bugs ([2daf109](https://github.com/WatWowMap/ReactMap/commit/2daf1091019e8c0f757df4b466c7db099ed1fc98)) +- standard filter backup ([5a0cdf5](https://github.com/WatWowMap/ReactMap/commit/5a0cdf5150e9e168898f1da6536d613f45d38350)) +- state bug & consolidate translations ([d6e6a79](https://github.com/WatWowMap/ReactMap/commit/d6e6a79cc5472f773fd632a2b0fec47d4a7bd337)) +- state filter stuff ([70c958e](https://github.com/WatWowMap/ReactMap/commit/70c958ec97b8e8875c4850720775fd164e2614e6)) +- string fallback ([11ce4ca](https://github.com/WatWowMap/ReactMap/commit/11ce4ca61094ebcb24a7457c97c79349c72513b6)) +- submission cell menu items ([01c6350](https://github.com/WatWowMap/ReactMap/commit/01c6350a2fffc1b810d8d5d949d7906844cf3b5c)) +- support for `all` in pokestop model ([cb57574](https://github.com/WatWowMap/ReactMap/commit/cb57574ad8502175ee7b18fd159eb3ce765c5833)) +- top level state changes ([f401bbe](https://github.com/WatWowMap/ReactMap/commit/f401bbe457ecfbb07b42554528c42fad55bd7d75)) +- tut welcome page ([3c9e40c](https://github.com/WatWowMap/ReactMap/commit/3c9e40c7300d06420a83fb0e7292c14c79e050b0)) +- unmount scanAreas section ([49ec133](https://github.com/WatWowMap/ReactMap/commit/49ec1334f217c49532cd85cb4bce5d496fd5dec7)) +- user fields ([15ad84d](https://github.com/WatWowMap/ReactMap/commit/15ad84df882d363a55ccd50fec17ee4372bdb837)) +- vite prod build ([ed93946](https://github.com/WatWowMap/ReactMap/commit/ed93946c653e391210ae6a34f3b968437e249fef)) ### Features -* add searching ([356c01b](https://github.com/WatWowMap/ReactMap/commit/356c01bb4d0754548e4dbb54dfdb9eaef6833a67)) -* dev settings in sidebar ([6a2651f](https://github.com/WatWowMap/ReactMap/commit/6a2651fcc8ef36066efcda1b5e9be72993c212da)) -* gym quick selector ([93c8fab](https://github.com/WatWowMap/ReactMap/commit/93c8fab22f7b6554ba6e03cc9e1c3411c70877a5)) -* invasions quick select ([c638225](https://github.com/WatWowMap/ReactMap/commit/c63822561add83b6067cad620d654ba615871a30)) -* literal easy mode ([5298676](https://github.com/WatWowMap/ReactMap/commit/52986760bc537ced305b8d43dca91c124da21076)) -* lure quick selector ([98ee717](https://github.com/WatWowMap/ReactMap/commit/98ee7178129c594f335aaa143bc3b5ca4d8be63a)) -* nest quick select menu ([37761d7](https://github.com/WatWowMap/ReactMap/commit/37761d7b46e803b1d33f81319108a6dec785f91e)) -* pokemon filter mode selector ([be846fc](https://github.com/WatWowMap/ReactMap/commit/be846fcbf9203fa5ae53557fa67f093eeba13f9e)) -* quest quick select menu ([02d8d65](https://github.com/WatWowMap/ReactMap/commit/02d8d65719576ce3992019fa0751e4dd56813a3b)) -* quick select pkmn filters ([ee1010b](https://github.com/WatWowMap/ReactMap/commit/ee1010bde398e3fc8d8c7a7d6983d6484fda7221)) -* raids quick select menu ([dc3e10a](https://github.com/WatWowMap/ReactMap/commit/dc3e10a07fd4da042d434dc9a915dd77583d2629)) -* respect global if no pkmn are active in basic mode ([c96c99f](https://github.com/WatWowMap/ReactMap/commit/c96c99fd85e7d426b41675e9494d5e4850594109)) -* show event stop markers if no quests/invasions ([32df5e9](https://github.com/WatWowMap/ReactMap/commit/32df5e9bcfc5180a6afa4b5a14b6b69d7a1237b6)) -* showcase quick select ([1ae5fab](https://github.com/WatWowMap/ReactMap/commit/1ae5fab836d1bf7f70495541088a7685cdb9b859)) -* tooltip ([a3777dd](https://github.com/WatWowMap/ReactMap/commit/a3777dd04bd371c7464525113a5ebf64e619c7d6)) -* useTranslateById AIO hook for ez key translations ([20dd65d](https://github.com/WatWowMap/ReactMap/commit/20dd65d67c51d3310ffac462184d0ac59fb5095d)) +- add searching ([356c01b](https://github.com/WatWowMap/ReactMap/commit/356c01bb4d0754548e4dbb54dfdb9eaef6833a67)) +- dev settings in sidebar ([6a2651f](https://github.com/WatWowMap/ReactMap/commit/6a2651fcc8ef36066efcda1b5e9be72993c212da)) +- gym quick selector ([93c8fab](https://github.com/WatWowMap/ReactMap/commit/93c8fab22f7b6554ba6e03cc9e1c3411c70877a5)) +- invasions quick select ([c638225](https://github.com/WatWowMap/ReactMap/commit/c63822561add83b6067cad620d654ba615871a30)) +- literal easy mode ([5298676](https://github.com/WatWowMap/ReactMap/commit/52986760bc537ced305b8d43dca91c124da21076)) +- lure quick selector ([98ee717](https://github.com/WatWowMap/ReactMap/commit/98ee7178129c594f335aaa143bc3b5ca4d8be63a)) +- nest quick select menu ([37761d7](https://github.com/WatWowMap/ReactMap/commit/37761d7b46e803b1d33f81319108a6dec785f91e)) +- pokemon filter mode selector ([be846fc](https://github.com/WatWowMap/ReactMap/commit/be846fcbf9203fa5ae53557fa67f093eeba13f9e)) +- quest quick select menu ([02d8d65](https://github.com/WatWowMap/ReactMap/commit/02d8d65719576ce3992019fa0751e4dd56813a3b)) +- quick select pkmn filters ([ee1010b](https://github.com/WatWowMap/ReactMap/commit/ee1010bde398e3fc8d8c7a7d6983d6484fda7221)) +- raids quick select menu ([dc3e10a](https://github.com/WatWowMap/ReactMap/commit/dc3e10a07fd4da042d434dc9a915dd77583d2629)) +- respect global if no pkmn are active in basic mode ([c96c99f](https://github.com/WatWowMap/ReactMap/commit/c96c99fd85e7d426b41675e9494d5e4850594109)) +- show event stop markers if no quests/invasions ([32df5e9](https://github.com/WatWowMap/ReactMap/commit/32df5e9bcfc5180a6afa4b5a14b6b69d7a1237b6)) +- showcase quick select ([1ae5fab](https://github.com/WatWowMap/ReactMap/commit/1ae5fab836d1bf7f70495541088a7685cdb9b859)) +- tooltip ([a3777dd](https://github.com/WatWowMap/ReactMap/commit/a3777dd04bd371c7464525113a5ebf64e619c7d6)) +- useTranslateById AIO hook for ez key translations ([20dd65d](https://github.com/WatWowMap/ReactMap/commit/20dd65d67c51d3310ffac462184d0ac59fb5095d)) # [1.28.0-develop.5](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.4...v1.28.0-develop.5) (2024-01-07) - ### Bug Fixes -* make `allForms` false by default for usability ([cff0e23](https://github.com/WatWowMap/ReactMap/commit/cff0e234a1d9a4069da8a4cd12b5f8a0d3f9c6a0)) +- make `allForms` false by default for usability ([cff0e23](https://github.com/WatWowMap/ReactMap/commit/cff0e234a1d9a4069da8a4cd12b5f8a0d3f9c6a0)) # [1.28.0-develop.4](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.3...v1.28.0-develop.4) (2024-01-07) - ### Bug Fixes -* subcategory viewing ([3ed2e8f](https://github.com/WatWowMap/ReactMap/commit/3ed2e8f53d59913138d23eb117a5340316866df1)) +- subcategory viewing ([3ed2e8f](https://github.com/WatWowMap/ReactMap/commit/3ed2e8f53d59913138d23eb117a5340316866df1)) # [1.28.0-develop.3](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.2...v1.28.0-develop.3) (2024-01-06) - ### Bug Fixes -* rockruff form name issues ([188c63a](https://github.com/WatWowMap/ReactMap/commit/188c63a7e61e96f807458981e822f646c1c037d8)) +- rockruff form name issues ([188c63a](https://github.com/WatWowMap/ReactMap/commit/188c63a7e61e96f807458981e822f646c1c037d8)) # [1.28.0-develop.2](https://github.com/WatWowMap/ReactMap/compare/v1.28.0-develop.1...v1.28.0-develop.2) (2024-01-03) - ### Bug Fixes -* motd index setter ([f68153a](https://github.com/WatWowMap/ReactMap/commit/f68153a141ec038d48e37945772bb8da85f26a28)) -* motd types ([c4ad276](https://github.com/WatWowMap/ReactMap/commit/c4ad276f303357ac2c9b3698b7c6a07314d339c1)) +- motd index setter ([f68153a](https://github.com/WatWowMap/ReactMap/commit/f68153a141ec038d48e37945772bb8da85f26a28)) +- motd types ([c4ad276](https://github.com/WatWowMap/ReactMap/commit/c4ad276f303357ac2c9b3698b7c6a07314d339c1)) # [1.28.0-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.27.2...v1.28.0-develop.1) (2024-01-02) - ### Bug Fixes -* `Notification` API checks ([22bb9ea](https://github.com/WatWowMap/ReactMap/commit/22bb9eab2e5da0ec0780206fd059d1cfe8f5c666)) -* active scanNext/scanZone btns ([5d5f8bb](https://github.com/WatWowMap/ReactMap/commit/5d5f8bbc9f1f419a75b32dcf6bf654da9836c13c)) -* add permission status to notif options menu ([c44a75c](https://github.com/WatWowMap/ReactMap/commit/c44a75c7aa5cfff504782aabe1bc102a5a6bdfa3)) -* also if map perm is missing ([6abc14e](https://github.com/WatWowMap/ReactMap/commit/6abc14e95ba80f09a26873231c4e79d2ea13782b)) -* catch bad play attempts ([5c68483](https://github.com/WatWowMap/ReactMap/commit/5c6848383111b06a7d188dacec5786112c795f84)) -* category toggles ([151ce50](https://github.com/WatWowMap/ReactMap/commit/151ce50f212479fa1569f5586a7faac34d7e652f)) -* ci stuff ([f960d91](https://github.com/WatWowMap/ReactMap/commit/f960d91c13a0863f6bcee5c2d9400e478473593a)) -* code organization ([7ced12e](https://github.com/WatWowMap/ReactMap/commit/7ced12e3d9c8762ceb410f0e6f01be8ec60939a6)) -* force popup open on click ([7c9f045](https://github.com/WatWowMap/ReactMap/commit/7c9f0454dbdeb9c62f44cc0861571e43127cb9ad)) -* generalize fallback ext ([8979d92](https://github.com/WatWowMap/ReactMap/commit/8979d92133a42145bb4fdb60f009a95fa3768811)) -* icon user settings ([4381817](https://github.com/WatWowMap/ReactMap/commit/43818171a385e6882f68f6c62365e124a6df793e)) -* let it be configurable too ([268f7d8](https://github.com/WatWowMap/ReactMap/commit/268f7d811fbb3e5b1ca0c5baa18b14db5bf096aa)) -* locales ([6a4ba6b](https://github.com/WatWowMap/ReactMap/commit/6a4ba6bb04fe07cc716f0d4aa4325f8c0e449390)) -* make sure window is focused on click ([c18f746](https://github.com/WatWowMap/ReactMap/commit/c18f746e93190ae12d56aea8b0ff5032059938e3)) -* missing join translation ([e532995](https://github.com/WatWowMap/ReactMap/commit/e532995285012313c42adab7904037dc84a3161e)) -* only show if customizable length > 0 ([0b6c89c](https://github.com/WatWowMap/ReactMap/commit/0b6c89cae2d926652e80db28d51c0666c1949202)) -* prompt user on options open ([f2c40fd](https://github.com/WatWowMap/ReactMap/commit/f2c40fdb89f17955150061e2093630bf85dd7e0a)) -* return early if in cache ([238edbd](https://github.com/WatWowMap/ReactMap/commit/238edbdc8231856d78dec503d0f6c366fd67ede1)) -* tilelayer background ([4ad64ca](https://github.com/WatWowMap/ReactMap/commit/4ad64cad5a571c27edcd1c687783fdd7560ac7e6)) -* volta versions ([ba829db](https://github.com/WatWowMap/ReactMap/commit/ba829dbd2726db5ebdf115cacdcb33b0a6a22fa9)) - +- `Notification` API checks ([22bb9ea](https://github.com/WatWowMap/ReactMap/commit/22bb9eab2e5da0ec0780206fd059d1cfe8f5c666)) +- active scanNext/scanZone btns ([5d5f8bb](https://github.com/WatWowMap/ReactMap/commit/5d5f8bbc9f1f419a75b32dcf6bf654da9836c13c)) +- add permission status to notif options menu ([c44a75c](https://github.com/WatWowMap/ReactMap/commit/c44a75c7aa5cfff504782aabe1bc102a5a6bdfa3)) +- also if map perm is missing ([6abc14e](https://github.com/WatWowMap/ReactMap/commit/6abc14e95ba80f09a26873231c4e79d2ea13782b)) +- catch bad play attempts ([5c68483](https://github.com/WatWowMap/ReactMap/commit/5c6848383111b06a7d188dacec5786112c795f84)) +- category toggles ([151ce50](https://github.com/WatWowMap/ReactMap/commit/151ce50f212479fa1569f5586a7faac34d7e652f)) +- ci stuff ([f960d91](https://github.com/WatWowMap/ReactMap/commit/f960d91c13a0863f6bcee5c2d9400e478473593a)) +- code organization ([7ced12e](https://github.com/WatWowMap/ReactMap/commit/7ced12e3d9c8762ceb410f0e6f01be8ec60939a6)) +- force popup open on click ([7c9f045](https://github.com/WatWowMap/ReactMap/commit/7c9f0454dbdeb9c62f44cc0861571e43127cb9ad)) +- generalize fallback ext ([8979d92](https://github.com/WatWowMap/ReactMap/commit/8979d92133a42145bb4fdb60f009a95fa3768811)) +- icon user settings ([4381817](https://github.com/WatWowMap/ReactMap/commit/43818171a385e6882f68f6c62365e124a6df793e)) +- let it be configurable too ([268f7d8](https://github.com/WatWowMap/ReactMap/commit/268f7d811fbb3e5b1ca0c5baa18b14db5bf096aa)) +- locales ([6a4ba6b](https://github.com/WatWowMap/ReactMap/commit/6a4ba6bb04fe07cc716f0d4aa4325f8c0e449390)) +- make sure window is focused on click ([c18f746](https://github.com/WatWowMap/ReactMap/commit/c18f746e93190ae12d56aea8b0ff5032059938e3)) +- missing join translation ([e532995](https://github.com/WatWowMap/ReactMap/commit/e532995285012313c42adab7904037dc84a3161e)) +- only show if customizable length > 0 ([0b6c89c](https://github.com/WatWowMap/ReactMap/commit/0b6c89cae2d926652e80db28d51c0666c1949202)) +- prompt user on options open ([f2c40fd](https://github.com/WatWowMap/ReactMap/commit/f2c40fdb89f17955150061e2093630bf85dd7e0a)) +- return early if in cache ([238edbd](https://github.com/WatWowMap/ReactMap/commit/238edbdc8231856d78dec503d0f6c366fd67ede1)) +- tilelayer background ([4ad64ca](https://github.com/WatWowMap/ReactMap/commit/4ad64cad5a571c27edcd1c687783fdd7560ac7e6)) +- volta versions ([ba829db](https://github.com/WatWowMap/ReactMap/commit/ba829dbd2726db5ebdf115cacdcb33b0a6a22fa9)) ### Features -* base notification implementation ([42de1e9](https://github.com/WatWowMap/ReactMap/commit/42de1e927f71757ea8a242185d8c1edc6cbb02bb)) -* ci for github releases ([4015be6](https://github.com/WatWowMap/ReactMap/commit/4015be68dcc6be7c248e1e93ccb3973e433b7ae9)) -* commit hooks ([945c572](https://github.com/WatWowMap/ReactMap/commit/945c572bee182c9c3ea7352d5320c22e9bcc06e5)) -* pokemon notifs ([adf7429](https://github.com/WatWowMap/ReactMap/commit/adf74293d3fcefed63e851a75a95e04151f8ec32)) -* raids ([9fc1b04](https://github.com/WatWowMap/ReactMap/commit/9fc1b0487aff1d7a6eea66e22eb8fa043df374d0)) -* show signed in info when blocked ([59b20cb](https://github.com/WatWowMap/ReactMap/commit/59b20cbcc7ef4254b803f66bb36a9fbe988c92ad)) -* support for uaudio ([1f30c7c](https://github.com/WatWowMap/ReactMap/commit/1f30c7c0aa4acf061849ec059d1b1db1ad9b302a)) +- base notification implementation ([42de1e9](https://github.com/WatWowMap/ReactMap/commit/42de1e927f71757ea8a242185d8c1edc6cbb02bb)) +- ci for github releases ([4015be6](https://github.com/WatWowMap/ReactMap/commit/4015be68dcc6be7c248e1e93ccb3973e433b7ae9)) +- commit hooks ([945c572](https://github.com/WatWowMap/ReactMap/commit/945c572bee182c9c3ea7352d5320c22e9bcc06e5)) +- pokemon notifs ([adf7429](https://github.com/WatWowMap/ReactMap/commit/adf74293d3fcefed63e851a75a95e04151f8ec32)) +- raids ([9fc1b04](https://github.com/WatWowMap/ReactMap/commit/9fc1b0487aff1d7a6eea66e22eb8fa043df374d0)) +- show signed in info when blocked ([59b20cb](https://github.com/WatWowMap/ReactMap/commit/59b20cbcc7ef4254b803f66bb36a9fbe988c92ad)) +- support for uaudio ([1f30c7c](https://github.com/WatWowMap/ReactMap/commit/1f30c7c0aa4acf061849ec059d1b1db1ad9b302a)) diff --git a/jsconfig.json b/jsconfig.json index 88e79d180..eee01f5e6 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,29 +1,20 @@ { "compilerOptions": { "target": "ESNext", - "module": "CommonJS", + "module": "ESNext", + "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, + "allowSyntheticDefaultImports": true, "baseUrl": ".", - "jsx": "react", + "lib": ["ESNext", "dom"], + "jsx": "react-jsx", "paths": { - "@assets/*": [ - "./src/assets/*" - ], - "@components/*": [ - "./src/components/*" - ], - "@services/*": [ - "./src/services/*" - ], - "@hooks/*": [ - "./src/hooks/*" - ], + "@assets/*": ["./src/assets/*"], + "@components/*": ["./src/components/*"], + "@services/*": ["./src/services/*"], + "@hooks/*": ["./src/hooks/*"] } }, - "exclude": [ - "node_modules", - "**/node_modules/*", - "dist" - ] -} \ No newline at end of file + "exclude": ["node_modules", "**/node_modules/*", "dist"] +} diff --git a/package.json b/package.json index 85e160f72..b83c0f31f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reactmap", - "version": "1.29.6", + "version": "1.30.0-develop.17", "private": true, "description": "React based frontend map.", "license": "MIT", @@ -10,6 +10,7 @@ "packages/*" ], "scripts": { + "postinstall": "yarn masterfile", "build": "vite build", "config:check": "yarn workspace @rm/config run check", "config:env": "yarn workspace @rm/config run generate", @@ -45,7 +46,7 @@ }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ - "eslint --fix" + "eslint \"**/*.{js,jsx}\" --fix" ], "**/*": [ "prettier --write --ignore-unknown" @@ -155,7 +156,7 @@ "morgan": "^1.10.0", "mysql2": "^3.4.0", "node-cache": "^5.1.2", - "node-fetch": "2", + "node-fetch": "2.6.7", "node-geocoder": "^4.2.0", "nodes2ts": "^2.0.0", "objection": "^3.0.1", @@ -186,6 +187,7 @@ "@sentry/vite-plugin": "2.10.3", "@types/dlv": "^1.1.2", "@types/node": "^18", + "@types/node-fetch": "2.6.1", "@types/react": "^18.2.20", "@types/react-dom": "^18.0.9", "@vitejs/plugin-react": "4.2.1", @@ -206,8 +208,9 @@ "prettier": "^2.8.8", "rollup-plugin-delete": "^2.0.0", "semantic-release": "^19.0.5", + "typescript": "^5.3.3", "vite": "5.0.12", - "vite-plugin-checker": "0.6.0" + "vite-plugin-checker": "0.6.4" }, "engines": { "node": ">=18", diff --git a/packages/config/.configref b/packages/config/.configref index e0b0f9a28..549ed5e07 100644 --- a/packages/config/.configref +++ b/packages/config/.configref @@ -1 +1 @@ -24051 \ No newline at end of file +24124 \ No newline at end of file diff --git a/packages/config/lib/scripts/genEnvConfig.js b/packages/config/lib/scripts/genEnvConfig.js index 49c9f4915..7e063c58c 100644 --- a/packages/config/lib/scripts/genEnvConfig.js +++ b/packages/config/lib/scripts/genEnvConfig.js @@ -1,5 +1,6 @@ const fs = require('fs') const { resolve } = require('path') + const sourceConfig = require('../../../../server/src/configs/default.json') const camelToSnake = (str) => diff --git a/packages/locales/lib/create.js b/packages/locales/lib/create.js index f613f652e..ff74b16d7 100644 --- a/packages/locales/lib/create.js +++ b/packages/locales/lib/create.js @@ -1,4 +1,6 @@ // @ts-check +const { default: fetch } = require('node-fetch') + const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') diff --git a/packages/locales/lib/human/de.json b/packages/locales/lib/human/de.json index 061f038ac..b985b1d0e 100644 --- a/packages/locales/lib/human/de.json +++ b/packages/locales/lib/human/de.json @@ -695,5 +695,44 @@ "extra": "Extra", "select": "Auswählen", "searching": "suche...", - "no_options": "Keine Treffer..." + "no_options": "Keine Treffer...", + "and": "UND", + "or": "ODER", + "only_global": "nur Globale", + "global_caption": "Ignoriert alle anderen Filter", + "global_and_individual": "Globale & Individuelle Filter", + "gender_filters_all": "Geschlecht gilt für alle", + "and_caption": "miteinander verbunden", + "or_caption": "filtert unabhängig", + "filter_help": "Filter Hilfe", + "kilometers": "Kilometer", + "miles": "Meilen", + "distance_unit": "Maßeinheit", + "data_management": "Einstellungsverwaltung", + "reset_or_manage_text": "Filter komplett zurücksetzen, oder die Einstellungsverwaltung anzeigen lassen, auf der einzelne Kategorien zurückgesetzt werden können.", + "reset_audio": "Töne zurücksetzen", + "reset_all": "Alles zurücksetzen", + "reset_icons": "Icons zurücksetzen", + "reset_position": "Position zurücksetzen", + "reset_ui": "UI zurücksetzen", + "reset_options": "Optionen zurücksetzen", + "reset_menus": "Menüs zurücksetzen", + "reset_settings": "Einstellungen zurücksetzen", + "reset_general_title": "Allgemein", + "reset_assets": "Styles", + "reset_filters_title": "Filter", + "reset_pokemon": "Pokémon zurücksetzen", + "reset_pokestops": "PokéStops zurücksetzen", + "reset_gyms": "Arenen zurücksetzen", + "reset_nests": "Nester zurücksetzen", + "reset_portals": "Portale zurücksetzen", + "reset_routes": "Routen zurücksetzen", + "reset_scan_areas": "Scangebiete zurücksetzen", + "reset_scan_cells": "Scanzellen zurücksetzen", + "reset_devices": "Geräte zurücksetzen", + "reset_weather": "Wetter zurücksetzen", + "reset_s2cells": "S2 Zellen zurücksetzen", + "reset_spawnpoints": "Spawnpoints zurücksetzen", + "reset_submission_cells": "Submission Zellen zurücksetzen", + "hisuian": "Hisui" } diff --git a/packages/locales/lib/human/en.json b/packages/locales/lib/human/en.json index 8411d5cf5..884c273cc 100644 --- a/packages/locales/lib/human/en.json +++ b/packages/locales/lib/human/en.json @@ -563,6 +563,8 @@ "session_expired_body": "Your session has expired", "old_client_title": "Outdated", "old_client_body": "A new version of this map is available", + "early_old_client_title": "Outdated", + "early_old_client_body": "An old version of this app might be cached in your browser, you will need to clear your cache before you can use this app.", "refresh": "Refresh", "points": "Points", "day": "Day", @@ -723,5 +725,45 @@ "extra": "Extra", "select": "Select", "searching": "searching...", - "no_options": "No Options..." + "no_options": "No Options...", + "and": "AND", + "or": "OR", + "only_global": "Only Global", + "global_caption": "Ignores All Other Filters", + "global_and_individual": "Global & Individual Filters", + "gender_filters_all": "Gender Applies to All", + "and_caption": "Linked Together", + "or_caption": "Filters Independently", + "filter_help": "Filter Help", + "kilometers": "Kilometers", + "miles": "Miles", + "distance_unit": "Distance Unit", + "data_management": "Data Management", + "reset_or_manage_text": "You can either hard reset your filters or you can view the data management page which will allow you to reset individual categories.", + "reset_audio": "Reset Audio", + "reset_all": "Reset All", + "reset_icons": "Reset Icons", + "reset_position": "Reset Position", + "reset_ui": "Reset UI", + "reset_options": "Reset Options", + "reset_menus": "Reset Menus", + "reset_settings": "Reset Settings", + "reset_general_title": "General", + "reset_filters_title": "Filters", + "reset_assets": "Assets", + "reset_pokemon": "Reset Pokémon", + "reset_pokestops": "Reset PokéStops", + "reset_gyms": "Reset Gyms", + "reset_nests": "Reset Nests", + "reset_portals": "Reset Portals", + "reset_routes": "Reset Routes", + "reset_scan_areas": "Reset Scan Areas", + "reset_scan_cells": "Reset Scan Cells", + "reset_devices": "Reset Devices", + "reset_weather": "Reset Weather", + "reset_s2cells": "Reset S2 Cells", + "reset_spawnpoints": "Reset Spawnpoints", + "reset_submission_cells": "Reset Submission Cells", + "hisuian": "Hisuian", + "spacial_rend_range": "Spacial Rend Range" } diff --git a/packages/locales/lib/human/fr.json b/packages/locales/lib/human/fr.json index 9e57e865b..d4088b951 100644 --- a/packages/locales/lib/human/fr.json +++ b/packages/locales/lib/human/fr.json @@ -694,5 +694,47 @@ "search_rocket_pokemon": "Recherche Pokémon de Sbire", "main": "Principal", "extra": "Extra", - "select": "Sélection" + "select": "Sélection", + "searching": "recherche...", + "no_options": "Pas d'options...", + "and": "ET", + "or": "OU", + "only_global": "Seulement Global", + "global_caption": "Ignore tous les autres filtres", + "global_and_individual": "Filtres Global & Individuel", + "gender_filters_all": "Les genres s'appliquent à tous", + "and_caption": "Filtres combinés", + "or_caption": "Filtres indépendants", + "filter_help": "Aide des filtres", + "kilometers": "Kilomètres", + "miles": "Miles", + "distance_unit": "Unité de Distance", + "data_management": "Gestion des données", + "reset_or_manage_text": "Vous pouvez soit réinitialiser tous vos filtres, soit accéder à la gestion des données pour réinitialiser les filtres de certaines catégories seulement.", + "reset_audio": "Réinitialiser Audio", + "reset_all": "Réinitialiser Tout", + "reset_icons": "Réinitialiser Icônes", + "reset_position": "Réinitialiser Position", + "reset_ui": "Réinitialiser UI", + "reset_options": "Réinitialiser Options", + "reset_menus": "Réinitialiser Menus", + "reset_settings": "Réinitialiser Paramètres", + "reset_general_title": "Général", + "reset_filters_title": "Filtres", + "reset_assets": "Assets", + "reset_pokemon": "Réinitialiser Pokémon", + "reset_pokestops": "Réinitialiser PokéStops", + "reset_gyms": "Réinitialiser Arènes", + "reset_nests": "Réinitialiser Nids", + "reset_portals": "Réinitialiser Portails", + "reset_routes": "Réinitialiser Routes", + "reset_scan_areas": "Réinitialiser Villes", + "reset_scan_cells": "Réinitialiser Cellules de Scan", + "reset_devices": "Réinitialiser Appareils", + "reset_weather": "Réinitialiser Météo", + "reset_s2cells": "Réinitialiser Cellules S2", + "reset_spawnpoints": "Réinitialiser Points d'apparition", + "reset_submission_cells": "Réinitialiser Wayfarer", + "hisuian": "de Hisui", + "spacial_rend_range": "Portée Spatio-Rift" } diff --git a/packages/locales/lib/human/pl.json b/packages/locales/lib/human/pl.json index cd59fcd63..700e0e817 100644 --- a/packages/locales/lib/human/pl.json +++ b/packages/locales/lib/human/pl.json @@ -1,5 +1,73 @@ { "signed_in_as": "Zalogowano jako", "missing_map_perm": "Nie masz uprawnień by wyświetlić mapę.", - "access_denied": "Brak dostępu" + "access_denied": "Brak dostępu", + "raid_override": "Nadpisz", + "show_ar_badge": "Pokaż odznaki AR", + "show_ex_badge": "Pokaż odznaki EX", + "set_all": "Ustaw wszystkie", + "spawns_per_hour": "Spawny/h", + "event_stops": "Eventowe", + "power_up": "PowerUp", + "enabled": "Włączone", + "route_tags": "Etykiety scieżek", + "routes": "Scieżki", + "route_type": "Typ scieżki", + "admin": "Inne", + "tth_0": "Wszystkie", + "quick_select": "Szybkie filtry globalne", + "include_sponsored": "Pokaż Sponsorowane", + "routes_subtitle": "Wyświetl scieżki w grze i związane z nimi informacje na mapie", + "pokemon_filters": "Ustawienia filtrów Pokémonów", + "gyms_filters": "Ustawienia filtrów gymów", + "pokestops_filters": "Ustawienia filtrów Pokéstopów", + "search_pokemon": "Szukaj Pokémonów", + "search_pokestops": "Szukaj Pokéstopów", + "pokestops": "Pokéstopy", + "pokemon": "Pokémony", + "unknown_pokestop": "Nieznana nazwa Pokéstopu", + "pokemon_options": "Opcje Pokémonów", + "pokestops_options": "Opcje Pokéstopów", + "tutorial_sliders_1": "Pokémony pomiędzy:", + "tutorial_tune": "Ustawia filtr zaawansowany dla wszystkich Pokémonów obecnie filtrowanych w menu", + "tutorial_save": "Zapisuje wybrane Pokémony i zamyka okno", + "tutorial_show_all_view": "Przełącza Pokéstopy i gymy", + "tutorial_show_pokemon_view": "Przełącza Pokémony", + "tutorial_pokemon_caption": "Ta ikona pozwala na ustawienie filtrów dla konkretnego Pokémona", + "tutorial_closing_1": "Ogólne suwaki Pokémonów na pasku bocznym działają oddzielnie od menu zaawansowanego i nie mają na siebie wpływu", + "invasions_subtitle": "Pokazuje informacje o inwazji Zespołu R, włącznie z Pokémonami wystawionymi do walki oraz nagrodami, które możesz otrzymać", + "nests_subtitle": "Pokazuje obecnie nestujące Pokémony oraz powierzchnie nestów", + "pokemon_subtitle": "Pokazuje lokalizacje Pokémonów oraz czas ich zniknięcia", + "pokestops_subtitle": "Pokazuje lokalizacje wszystkich Pokéstopów", + "pvp_subtitle": "Pokazuje rangę PVP/CP/informację o poziomie każdego Pokémona", + "stats_subtitle": "Pokazuje statystyki i poziomy Pokémona", + "global_search_pokestops": "Wprowadź nazwę Pokéstopa...", + "global_search_nests": "Wprowadź nazwę nestującego Pokémona...", + "pokemon_icons": "Ikony Pokémonów", + "pokestop_icons": "Ikony Pokéstopów", + "pokemon_timers": "Licznik czasu wszystkich Pokémonów", + "show_dex_num_in_popup": "Pokaż Pokédex # w Popupie", + "has_quest_indicator": "Alternatywny kolor dla Pokéstopów z zadaniami", + "pokestop": "Pokéstop", + "pokemon_cell": "Lokalizacja Pokémona może się różnić", + "pokemon_filter_mode": "Tryb filtru Pokémonów", + "search_rocket_pokemon": "Wyszukaj Pokémony Rocket", + "fast": "Szybki", + "charged": "Ładowany", + "first_seen": "Pierwotnie widziany", + "last_seen": "Ostatnio widziany", + "last_modified": "Ostatnio zmodyfikowany", + "last_updated": "Ostatnio zaktualizowany", + "webhooks": "Powiadomienia", + "everything_individually": "Dodaj indywidualne powiadomienia", + "submit_nest_name": "Prześlij nazwę nesta", + "nest_submissions": "Przesyłanie nestów", + "nest_submissions_subtitle": "Pozwala na przesyłanie nowych nazw dla nestów", + "ar_quest_true": "Z AR", + "ar_quest_false": "Bez AR", + "with_ar": "Z AR", + "without_ar": "Bez AR", + "both": "Obydwa", + "all_pokestops": "Wszystkie Pokéstopy", + "all_gyms": "Wszystkie Gymy" } diff --git a/packages/locales/lib/utils.js b/packages/locales/lib/utils.js index df322f834..93e54e31d 100644 --- a/packages/locales/lib/utils.js +++ b/packages/locales/lib/utils.js @@ -1,6 +1,7 @@ // @ts-check const { promises: fs, readdirSync } = require('fs') const { resolve } = require('path') +const { default: fetch } = require('node-fetch') const { log, HELPERS } = require('@rm/logger') diff --git a/packages/locales/package.json b/packages/locales/package.json index 794e288c9..53417e4c3 100644 --- a/packages/locales/package.json +++ b/packages/locales/package.json @@ -18,6 +18,10 @@ "@rm/config": "*", "@rm/logger": "*", "dotenv": "^16.3.1", + "node-fetch": "2.6.7", "openai": "^4.24.1" + }, + "devDependencies": { + "@types/node-fetch": "2.6.1" } } diff --git a/packages/logger/lib/index.js b/packages/logger/lib/index.js index a7ef4c0eb..e360ab640 100644 --- a/packages/logger/lib/index.js +++ b/packages/logger/lib/index.js @@ -39,6 +39,7 @@ const HELPERS = /** @type {const} */ ({ fetch: chalk.hex('#880e4f')('[FETCH]'), scanner: chalk.hex('#b39ddb')('[SCANNER]'), build: chalk.hex('#ef6c00')('[BUILD]'), + ReactMap: chalk.hex('#ff3d00')('[ReactMap]'), pokemon: chalk.hex('#f44336')('[POKEMON]'), pokestops: chalk.hex('#e91e63')('[POKESTOPS]'), diff --git a/packages/masterfile/lib/index.d.ts b/packages/masterfile/lib/index.d.ts new file mode 100644 index 000000000..90937bc2d --- /dev/null +++ b/packages/masterfile/lib/index.d.ts @@ -0,0 +1,86 @@ +import type { AdvCategories, Rarity } from '@rm/types' + +export interface MasterfileForm { + name: string + rarity?: string + isCostume?: boolean + category?: AdvCategories + types?: number[] +} + +export interface MasterfilePokemon { + name: string + pokedexId: number + defaultFormId: number + types: number[] + quickMoves: number[] + chargedMoves: number[] + genId: number + forms: { + [formId: string]: MasterfileForm + } + height?: number + weight?: number + family?: number + legendary?: boolean + mythical?: boolean + ultraBeast?: boolean + rarity?: string + historic?: string + tempEvolutions?: { + [evolutionId: string]: {} + } +} + +export interface MasterfileObject { + [typeId: string]: string +} + +export interface MasterfileMove { + name: string + type: number +} + +export interface InvasionPokemon { + id: number + form: number +} + +export interface InvasionRewards { + first: InvasionPokemon[] + second: InvasionPokemon[] + third: InvasionPokemon[] +} + +export interface Invasion { + type: string + gender: number + grunt: string + firstReward: boolean + secondReward: boolean + thirdReward: boolean + encounters: InvasionRewards +} + +export interface MasterfileWeather { + name: string + types: number[] +} + +export interface Masterfile { + pokemon: Record + types: MasterfileObject + items: MasterfileObject + questRewardTypes: MasterfileObject + moves: Record + invasions: Record + weather: Record +} + +export declare function generate( + save?: boolean, + historicRarity?: Rarity, + dbRarity?: Rarity, +): Promise + +export declare function read(): Masterfile diff --git a/packages/masterfile/lib/index.js b/packages/masterfile/lib/index.js index 9f0dca0ea..518226d60 100644 --- a/packages/masterfile/lib/index.js +++ b/packages/masterfile/lib/index.js @@ -1,6 +1,7 @@ // @ts-check const fs = require('fs') const { resolve } = require('path') +const { default: fetch } = require('node-fetch') const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') @@ -20,13 +21,7 @@ Object.entries(defaultRarity).forEach(([tier, pokemon]) => { } }) -/** - * - * @param {boolean} save - * @param {import('@rm/types').Rarity} historicRarity - * @param {import('@rm/types').Rarity} dbRarity - * @returns - */ +/** @type {import('.').generate} */ const generate = async (save = false, historicRarity = {}, dbRarity = {}) => { log.info(HELPERS.masterfile, 'generating masterfile') try { @@ -91,6 +86,7 @@ if (require.main === module) { generate(true).then(() => log.info(HELPERS.masterfile, 'OK')) } +/** @type {import('.').read} */ const read = () => { try { return JSON.parse( @@ -101,7 +97,7 @@ const read = () => { HELPERS.masterfile, 'Unable to read masterfile, generating a new one for you now', ) - return generate(true) + generate(true) } } diff --git a/packages/masterfile/package.json b/packages/masterfile/package.json index f48d18381..9c5dfb769 100644 --- a/packages/masterfile/package.json +++ b/packages/masterfile/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "main": "./lib/index.js", + "types": "./lib/index.d.ts", "scripts": { "generate": "node ./lib", "sort": "npx sort-package-json", @@ -15,6 +16,10 @@ "dependencies": { "@rm/config": "*", "@rm/logger": "*", - "@rm/types": "*" + "@rm/types": "*", + "node-fetch": "2.6.7" + }, + "devDependencies": { + "@types/node-fetch": "2.6.1" } } diff --git a/packages/types/lib/augmentations.d.ts b/packages/types/lib/augmentations.d.ts index 14b781e41..1ea6c14ed 100644 --- a/packages/types/lib/augmentations.d.ts +++ b/packages/types/lib/augmentations.d.ts @@ -1,6 +1,6 @@ import { ButtonProps } from '@mui/material' import { Config, GetSafeConfig } from './config' -import { ExpressUser } from './server' +import { ExpressUser, Permissions } from './server' import { Request } from 'express' declare module 'config' { @@ -50,6 +50,13 @@ declare module '@mui/material/styles' { } } +declare module 'express-session' { + interface SessionData { + cooldown?: number + perms?: Permissions + } +} + // TODO // declare module '@mui/material/Button' { // interface ExtendButtonTypeMap { diff --git a/packages/types/lib/general.d.ts b/packages/types/lib/general.d.ts index 434de68db..779808f1f 100644 --- a/packages/types/lib/general.d.ts +++ b/packages/types/lib/general.d.ts @@ -27,12 +27,9 @@ export type RMGeoJSON = { features: RMFeature[] } -import masterfile = require('packages/masterfile/lib/data/masterfile.json') import { Config } from './config' import { SliderProps } from '@mui/material' -export type Masterfile = typeof masterfile - export type Strategy = 'discord' | 'telegram' | 'local' export type S2Polygon = [number, number][] @@ -88,9 +85,7 @@ export interface UICONS { egg: UiconImage[] } reward: { - [ - key: Masterfile['questRewardTypes'][keyof Masterfile['questRewardTypes']] - ]: UiconImage[] + [key: string]: UiconImage[] } spawnpoint: UiconImage[] team: UiconImage[] diff --git a/packages/types/lib/server.d.ts b/packages/types/lib/server.d.ts index ce9cf387f..71b8a97c7 100644 --- a/packages/types/lib/server.d.ts +++ b/packages/types/lib/server.d.ts @@ -24,6 +24,7 @@ import Pokestop = require('server/src/models/Pokestop') import { ModelReturn, OnlyType } from './utility' import { Profile } from 'passport-discord' import { User } from './models' +import { Config } from '@rm/types' export interface DbContext { isMad: boolean @@ -102,7 +103,6 @@ export interface DbCheckClass { historical: Rarity questConditions: { [key: string]: string[] } rarityPercents: RarityPercents - distanceUnit: 'km' | 'mi' reactMapDb: null | number filterContext: { Route: { maxDistance: number; maxDuration: number } @@ -254,3 +254,16 @@ export type AdvCategories = 'pokemon' | 'gyms' | 'pokestops' | 'nests' export type UIObject = ReturnType< typeof import('server/src/services/ui/primary') > + +export interface PokemonGlow + extends Partial> { + glow: boolean + Hundo?: string + Nundo?: string + 'Top PVP Rank'?: string + Multiple?: string +} +export interface ClientOptions + extends Partial> { + pokemon: PokemonGlow +} diff --git a/packages/vite-plugins/lib/favicon.js b/packages/vite-plugins/lib/favicon.js index ee6ce515b..108d1c4d1 100644 --- a/packages/vite-plugins/lib/favicon.js +++ b/packages/vite-plugins/lib/favicon.js @@ -2,36 +2,43 @@ const { resolve } = require('path') const fs = require('fs') +const { log, HELPERS } = require('@rm/logger') + /** * @param {boolean} isDevelopment * @returns {import('vite').Plugin} */ const faviconPlugin = (isDevelopment) => { - const favicon = fs.existsSync( - resolve(__dirname, '../../../public/favicon/favicon.ico'), - ) - ? resolve(__dirname, '../../../public/favicon/favicon.ico') - : resolve(__dirname, '../../../public/favicon/fallback.ico') - return { - name: 'vite-plugin-locales', - generateBundle() { - if (isDevelopment) return - this.emitFile({ - type: 'asset', - fileName: 'favicon.ico', - source: fs.readFileSync(favicon), - }) - }, - configureServer(server) { - server.middlewares.use((req, res, next) => { - if (req.url === '/favicon.ico') { - res.writeHead(200, { 'Content-Type': 'image/x-icon' }) - res.end(fs.readFileSync(favicon)) - return - } - next() - }) - }, + try { + const favicon = fs.existsSync( + resolve(__dirname, '../../../public/favicon/favicon.ico'), + ) + ? resolve(__dirname, '../../../public/favicon/favicon.ico') + : resolve(__dirname, '../../../public/favicon/fallback.ico') + return { + name: 'vite-plugin-favicon', + generateBundle() { + if (isDevelopment) return + this.emitFile({ + type: 'asset', + fileName: 'favicon.ico', + source: fs.readFileSync(favicon), + }) + }, + configureServer(server) { + server.middlewares.use((req, res, next) => { + if (req.url === '/favicon.ico') { + res.writeHead(200, { 'Content-Type': 'image/x-icon' }) + res.end(fs.readFileSync(favicon)) + return + } + next() + }) + }, + } + } catch (e) { + log.error(HELPERS.build, 'Error loading favicon', e) + return { name: 'vite-plugin-favicon' } } } diff --git a/packages/vite-plugins/lib/muteWarnings.js b/packages/vite-plugins/lib/muteWarnings.js index b8ba65013..79036fcc9 100644 --- a/packages/vite-plugins/lib/muteWarnings.js +++ b/packages/vite-plugins/lib/muteWarnings.js @@ -7,7 +7,7 @@ const muteWarningsPlugin = (warningsToIgnore) => { const mutedMessages = new Set() return { - name: 'mute-warnings', + name: 'vite-mute-warnings', enforce: 'pre', config: (userConfig) => ({ build: { diff --git a/packages/vite-plugins/package.json b/packages/vite-plugins/package.json index 37a252f39..798668a17 100644 --- a/packages/vite-plugins/package.json +++ b/packages/vite-plugins/package.json @@ -12,7 +12,8 @@ "prettier:fix": "prettier --write \"**/*.{css,html,js,jsx,yml}\"" }, "dependencies": { - "@rm/locales": "*" + "@rm/locales": "*", + "@rm/logger": "*" }, "devDependencies": { "vite": "5.0.12" diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 5aa8b5afc..6bf665442 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -796,6 +796,10 @@ "__name": "CLIENT_SIDE_OPTIONS_POKEMON_ENABLE_POKEMON_POPUP_COORDS", "__format": "boolean" }, + "spacialRendRange": { + "__name": "CLIENT_SIDE_OPTIONS_POKEMON_SPACIAL_REND_RANGE", + "__format": "boolean" + }, "glow": { "__name": "CLIENT_SIDE_OPTIONS_POKEMON_GLOW", "__format": "json" @@ -950,6 +954,10 @@ "__name": "DEFAULT_FILTERS_NESTS_ALL_POKEMON", "__format": "boolean" }, + "onlyShowAvailable": { + "__name": "DEFAULT_FILTERS_NESTS_ONLY_SHOW_AVAILABLE", + "__format": "boolean" + }, "avgFilter": { "__name": "DEFAULT_FILTERS_NESTS_AVG_FILTER", "__format": "json" diff --git a/server/src/configs/default.json b/server/src/configs/default.json index a689c431c..fdc81766d 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -239,7 +239,7 @@ "permImageDir": "images/perms", "permArrayImages": false, "clientTimeoutMinutes": 30, - "distanceUnit": "km", + "distanceUnit": "kilometers", "enablePokemonPopupCoordsSelector": false, "enableGymPopupCoordsSelector": false, "enablePokestopPopupCoordsSelector": false, @@ -369,6 +369,7 @@ "linkGlobalAndAdvanced": false, "showSizeIndicator": false, "enablePokemonPopupCoords": false, + "spacialRendRange": false, "glow": [ { "name": "Hundo", @@ -467,6 +468,7 @@ "polygons": false, "pokemon": false, "allPokemon": true, + "onlyShowAvailable": true, "avgFilter": [ 0, 100 @@ -1022,4 +1024,4 @@ "tracesSampleRate": 0.1 } } -} +} \ No newline at end of file diff --git a/server/src/graphql/resolvers.js b/server/src/graphql/resolvers.js index 7351fd43a..1d58dea88 100644 --- a/server/src/graphql/resolvers.js +++ b/server/src/graphql/resolvers.js @@ -390,48 +390,46 @@ const resolvers = { }, search: async (_, args, { Event, perms, Db }) => { const { category, webhookName, search } = args - if (perms?.[category] && /^[0-9\s\p{L}]+$/u.test(search)) { - if (!search || !search.trim()) { - return [] - } - switch (args.category) { - case 'pokemon': - return Db.search('Pokemon', perms, args) - case 'pokestops': - return Db.search('Pokestop', perms, args) - case 'raids': - return Db.search('Gym', perms, args, 'searchRaids') - case 'gyms': { - const results = await Db.search('Gym', perms, args) - const webhook = webhookName ? Event.webhookObj[webhookName] : null - if (webhook && results.length) { - const withFormatted = await Promise.all( - results.map(async (result) => ({ - ...result, - formatted: await geocoder( - webhook.nominatimUrl, - { lat: result.lat, lon: result.lon }, - true, - ), - })), - ) - return withFormatted - } - return results + if (!search || !search.trim()) { + return [] + } + switch (category) { + case 'pokemon': + return perms.pokemon ? Db.search('Pokemon', perms, args) : [] + case 'pokestops': + return perms.pokestops ? Db.search('Pokestop', perms, args) : [] + case 'raids': + return perms.raids ? Db.search('Gym', perms, args, 'searchRaids') : [] + case 'gyms': { + if (!perms.gyms) return [] + const results = await Db.search('Gym', perms, args) + const webhook = webhookName ? Event.webhookObj[webhookName] : null + if (webhook && results.length) { + const withFormatted = await Promise.all( + results.map(async (result) => ({ + ...result, + formatted: await geocoder( + webhook.nominatimUrl, + { lat: result.lat, lon: result.lon }, + true, + ), + })), + ) + return withFormatted } - case 'portals': - return Db.search('Portal', perms, args) - case 'nests': - return Db.search('Nest', perms, args) - default: - return [] + return results } + case 'portals': + return perms.portals ? Db.search('Portal', perms, args) : [] + case 'nests': + return perms.nests ? Db.search('Nest', perms, args) : [] + default: + return [] } - return [] }, searchInvasion: (_, args, { perms, Db }) => { - const { category, search } = args - if (perms?.[category] && /^[0-9\s\p{L}]+$/u.test(search)) { + const { search } = args + if (perms?.invasions) { if (!search || !search.trim()) { return [] } @@ -440,8 +438,8 @@ const resolvers = { return [] }, searchLure: (_, args, { perms, Db }) => { - const { category, search } = args - if (perms?.[category] && /^[0-9\s\p{L}]+$/u.test(search)) { + const { search } = args + if (perms.lures) { if (!search || !search.trim()) { return [] } @@ -450,8 +448,8 @@ const resolvers = { return [] }, searchQuest: (_, args, { perms, Db }) => { - const { category, search } = args - if (perms?.[category] && /^[0-9\s\p{L}]+$/u.test(search)) { + const { search } = args + if (perms.quests) { if (!search || !search.trim()) { return [] } @@ -497,7 +495,7 @@ const resolvers = { category, status, ) - if (category === 'pokemon') { + if (category === 'pokemon' && result.pokemon) { result.pokemon = result.pokemon.map((x) => ({ ...x, allForms: !x.form, @@ -506,13 +504,13 @@ const resolvers = { xl: x.min_weight !== 0, })) } - if (category === 'invasion') { + if (category === 'invasion' && result.invasion) { result.invasion = result.invasion.map((x) => ({ ...x, real_grunt_id: PoracleAPI.getRealGruntId(x, Event.invasions), })) } - if (category === 'raid') { + if (category === 'raid' && result.raid) { result.raid = result.raid.map((x) => ({ ...x, allMoves: x.move === 9000, @@ -656,7 +654,7 @@ const resolvers = { status, data, ) - if (category === 'pokemon') { + if (category === 'pokemon' && result.pokemon) { result.pokemon = result.pokemon.map((x) => ({ ...x, allForms: !x.form, @@ -665,13 +663,13 @@ const resolvers = { xl: x.min_weight !== 0, })) } - if (category === 'invasion') { + if (category === 'invasion' && result.invasion) { result.invasion = result.invasion.map((x) => ({ ...x, real_grunt_id: PoracleAPI.getRealGruntId(x, Event.invasions), })) } - if (category === 'raid') { + if (category === 'raid' && result.raid) { result.raid = result.raid.map((x) => ({ ...x, allMoves: x.move === 9000, diff --git a/server/src/graphql/typeDefs/index.graphql b/server/src/graphql/typeDefs/index.graphql index c9471fff3..db050f00c 100644 --- a/server/src/graphql/typeDefs/index.graphql +++ b/server/src/graphql/typeDefs/index.graphql @@ -106,6 +106,7 @@ type Query { lon: Float locale: String onlyAreas: [String] + questLayer: String ): [SearchQuest] spawnpoints( minLat: Float diff --git a/server/src/index.js b/server/src/index.js index 15ececc5d..973b8da26 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -304,6 +304,12 @@ connection.migrate .then(() => Db.getDbContext()) .then(async () => { httpServer.listen(config.getSafe('port'), config.getSafe('interface')) + log.info( + HELPERS.ReactMap, + `Server is now listening at http://${config.getSafe( + 'interface', + )}:${config.getSafe('port')}`, + ) await Promise.all([ Db.historicalRarity(), Db.getFilterContext(), @@ -325,11 +331,7 @@ connection.migrate .toISOString() .split('.')[0] .split('T') - .join( - ' ', - )} [ReactMap] Server is now listening at http://${config.getSafe( - 'interface', - )}:${config.getSafe('port')}`, + .join(' ')} [ReactMap] has fully started`, ) setTimeout(() => text.stop(), 1_000) }) diff --git a/server/src/models/Gym.js b/server/src/models/Gym.js index 69f394f25..f05089286 100644 --- a/server/src/models/Gym.js +++ b/server/src/models/Gym.js @@ -461,7 +461,7 @@ class Gym extends Model { static async search(perms, args, { isMad }, distance, bbox) { const { areaRestrictions } = perms - const { onlyAreas = [], search } = args + const { onlyAreas = [], search = '' } = args const query = this.query() .select([ 'name', @@ -473,7 +473,7 @@ class Gym extends Model { ]) .whereBetween(isMad ? 'latitude' : 'lat', [bbox.minLat, bbox.maxLat]) .andWhereBetween(isMad ? 'longitude' : 'lon', [bbox.minLon, bbox.maxLon]) - .whereRaw(`LOWER(name) LIKE '%${search}%'`) + .whereILike('name', `%${search}%`) .limit(searchResultsLimit) .orderBy('distance') if (isMad) { diff --git a/server/src/models/Nest.js b/server/src/models/Nest.js index 24a03d983..8d7900d91 100644 --- a/server/src/models/Nest.js +++ b/server/src/models/Nest.js @@ -67,8 +67,11 @@ class Nest extends Model { /** @type {(FullNest & { submitted_by?: string })[]} */ const withNames = results.map((x) => { - x.name = submittedNameMap[x.id]?.name || x.name - x.submitted_by = submittedNameMap[x.id]?.submitted_by + const submitted = submittedNameMap[x.id]?.name + if (submitted && submitted !== x.name) { + x.name = submittedNameMap[x.id]?.name || x.name + x.submitted_by = submittedNameMap[x.id]?.submitted_by + } return x }) @@ -116,6 +119,7 @@ class Nest extends Model { const results = /** @type {FullNest[]} */ ( await this.query() .select(['pokemon_id', 'pokemon_form']) + .where('pokemon_id', '!=', 0) .whereNotNull('pokemon_id') .groupBy('pokemon_id', 'pokemon_form') .orderBy('pokemon_id', 'asc') diff --git a/server/src/models/Pokemon.js b/server/src/models/Pokemon.js index a54387127..f3e37b87f 100644 --- a/server/src/models/Pokemon.js +++ b/server/src/models/Pokemon.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ /* eslint-disable no-restricted-syntax */ const { Model, raw, ref } = require('objection') const i18next = require('i18next') @@ -24,7 +23,6 @@ const { } = require('../services/filters/pokemon/constants') const PkmnFilter = require('../services/filters/pokemon/Backend') -const distanceUnit = config.getSafe('map.misc.distanceUnit') const searchResultsLimit = config.getSafe('api.searchResultsLimit') const queryLimits = config.getSafe('api.queryLimits') const queryDebug = config.getSafe('devOptions.queryDebug') @@ -638,7 +636,7 @@ class Pokemon extends Model { 'POST', secret, ) - if (!results) return [] + if (!results || !Array.isArray(results)) return [] return results .filter( (item) => !mem || filterRTree(item, perms.areaRestrictions, onlyAreas), @@ -652,11 +650,7 @@ class Pokemon extends Model { point([poke.lon, poke.lat]), point([args.lon, args.lat]), { - units: - distanceUnit.toLowerCase() === 'km' || - distanceUnit.toLowerCase() === 'kilometers' - ? 'kilometers' - : 'miles', + units: 'meters', }, ).toFixed(2), })) diff --git a/server/src/models/Pokestop.js b/server/src/models/Pokestop.js index 5c9067986..43d9fc99c 100644 --- a/server/src/models/Pokestop.js +++ b/server/src/models/Pokestop.js @@ -1612,7 +1612,7 @@ class Pokestop extends Model { } static async search(perms, args, { isMad }, distance, bbox) { - const { onlyAreas = [], search } = args + const { onlyAreas = [], search = '' } = args const query = this.query() .select([ 'name', @@ -1624,7 +1624,7 @@ class Pokestop extends Model { ]) .whereBetween(isMad ? 'latitude' : 'lat', [bbox.minLat, bbox.maxLat]) .andWhereBetween(isMad ? 'longitude' : 'lon', [bbox.minLon, bbox.maxLon]) - .whereRaw(`LOWER(name) LIKE '%${search}%'`) + .whereILike('name', `%${search}%`) .limit(searchResultsLimit) .orderBy('distance') if (!getAreaSql(query, perms.areaRestrictions, onlyAreas, isMad)) { @@ -1640,7 +1640,7 @@ class Pokestop extends Model { distance, bbox, ) { - const { search, onlyAreas = [], locale, lat, lon } = args + const { search, onlyAreas = [], locale, lat, lon, questLayer } = args const midnight = getUserMidnight({ lat, lon }) const pokemonIds = Object.keys(Event.masterfile.pokemon).filter((pkmn) => i18next @@ -1671,56 +1671,62 @@ class Pokestop extends Model { if (!pokemonIds.length && !itemIds.length && !rewardTypes.length) { return [] } - const query = this.query() - .select([ - isMad ? 'pokestop_id AS id' : 'id', - isMad ? 'latitude AS lat' : 'lat', - isMad ? 'longitude AS lon' : 'lon', - isMad ? 'quest_reward AS quest_rewards' : 'quest_rewards', - distance, - 'name', - 'quest_pokemon_id', - 'quest_item_id', - 'quest_reward_type', - 'quest_title', - 'quest_target', - ]) - .whereBetween(isMad ? 'latitude' : 'lat', [bbox.minLat, bbox.maxLat]) - .andWhereBetween(isMad ? 'longitude' : 'lon', [bbox.minLon, bbox.maxLon]) - .andWhere('quest_timestamp', '>=', midnight || 0) - .andWhere((quests) => { - if (pokemonIds.length === 1) { - quests.where('quest_pokemon_id', pokemonIds[0]) - } else if (pokemonIds.length > 1) { - quests.whereIn('quest_pokemon_id', pokemonIds) - } - if (itemIds.length === 1) { - quests.orWhere('quest_item_id', itemIds[0]) - } else if (itemIds.length > 1) { - quests.orWhereIn('quest_item_id', itemIds) - } - if (rewardTypes.length === 1) { - quests.orWhere('quest_reward_type', rewardTypes[0]) - } else if (rewardTypes.length > 1) { - quests.orWhereIn('quest_reward_type', rewardTypes) - } - }) - .limit(searchResultsLimit) - .orderBy('distance') - if (isMad) { - query - .leftJoin('trs_quest', 'pokestop.pokestop_id', 'trs_quest.GUID') + const queries = [] + if (questLayer !== 'without_ar') { + const query = this.query() .select([ - 'quest_stardust AS stardust_amount', - 'quest_pokemon_form_id AS quest_form_id', - 'quest_pokemon_costume_id AS quest_costume_id', + isMad ? 'pokestop_id AS id' : 'id', + isMad ? 'latitude AS lat' : 'lat', + isMad ? 'longitude AS lon' : 'lon', + isMad ? 'quest_reward AS quest_rewards' : 'quest_rewards', + distance, + 'name', + 'quest_pokemon_id', + 'quest_item_id', + 'quest_reward_type', + 'quest_title', + 'quest_target', ]) + .whereBetween(isMad ? 'latitude' : 'lat', [bbox.minLat, bbox.maxLat]) + .andWhereBetween(isMad ? 'longitude' : 'lon', [ + bbox.minLon, + bbox.maxLon, + ]) + .andWhere('quest_timestamp', '>=', midnight || 0) + .andWhere((quests) => { + if (pokemonIds.length === 1) { + quests.where('quest_pokemon_id', pokemonIds[0]) + } else if (pokemonIds.length > 1) { + quests.whereIn('quest_pokemon_id', pokemonIds) + } + if (itemIds.length === 1) { + quests.orWhere('quest_item_id', itemIds[0]) + } else if (itemIds.length > 1) { + quests.orWhereIn('quest_item_id', itemIds) + } + if (rewardTypes.length === 1) { + quests.orWhere('quest_reward_type', rewardTypes[0]) + } else if (rewardTypes.length > 1) { + quests.orWhereIn('quest_reward_type', rewardTypes) + } + }) + .limit(searchResultsLimit) + .orderBy('distance') + if (isMad) { + query + .leftJoin('trs_quest', 'pokestop.pokestop_id', 'trs_quest.GUID') + .select([ + 'quest_stardust AS stardust_amount', + 'quest_pokemon_form_id AS quest_form_id', + 'quest_pokemon_costume_id AS quest_costume_id', + ]) + } + if (!getAreaSql(query, perms.areaRestrictions, onlyAreas, isMad)) { + return [] + } + queries.push(query) } - if (!getAreaSql(query, perms.areaRestrictions, onlyAreas, isMad)) { - return [] - } - const queries = [query] - if (hasAltQuests) { + if (hasAltQuests && questLayer !== 'with_ar') { const altQuestQuery = this.query() .select([ 'id', @@ -1765,23 +1771,21 @@ class Pokestop extends Model { queries.push(altQuestQuery) } - const [withAr, withoutAr] = await Promise.all(queries) - - const mapped = withAr.map((q) => ({ ...q, with_ar: q.with_ar ?? true })) - if (withoutAr) { - const remapped = withoutAr.map((result) => ({ - ...result, - quest_rewards: result.alternative_quest_rewards, - quest_reward_type: result.alternative_quest_reward_type, - quest_pokemon_id: result.alternative_quest_pokemon_id, - quest_item_id: result.alternative_quest_item_id, - quest_title: result.alternative_quest_title, - quest_target: result.alternative_quest_target, - with_ar: false, - })) - mapped.push(...remapped) - } - + const rawResults = await Promise.all(queries) + const mapped = rawResults.flat().map((result) => + result.alternative_quest_target + ? { + ...result, + quest_rewards: result.alternative_quest_rewards, + quest_reward_type: result.alternative_quest_reward_type, + quest_pokemon_id: result.alternative_quest_pokemon_id, + quest_item_id: result.alternative_quest_item_id, + quest_title: result.alternative_quest_title, + quest_target: result.alternative_quest_target, + with_ar: false, + } + : { ...result, with_ar: result.with_ar ?? true }, + ) mapped.sort((a, b) => a.distance - b.distance) if (mapped.length > searchResultsLimit) mapped.length = searchResultsLimit diff --git a/server/src/models/Portal.js b/server/src/models/Portal.js index b3e9813de..043aa6f6c 100644 --- a/server/src/models/Portal.js +++ b/server/src/models/Portal.js @@ -54,10 +54,10 @@ class Portal extends Model { */ static async search(perms, args, { isMad }, distance, bbox) { const { areaRestrictions } = perms - const { onlyAreas = [], search } = args + const { onlyAreas = [], search = '' } = args const query = this.query() .select(['name', 'id', 'lat', 'lon', 'url', distance]) - .whereRaw(`LOWER(name) LIKE '%${search}%'`) + .whereILike('name', `%${search}%`) .whereBetween(isMad ? 'latitude' : 'lat', [bbox.minLat, bbox.maxLat]) .andWhereBetween(isMad ? 'longitude' : 'lon', [bbox.minLon, bbox.maxLon]) .andWhere( diff --git a/server/src/routes/api/v1/config.js b/server/src/routes/api/v1/config.js index 372209d88..b246f21cd 100644 --- a/server/src/routes/api/v1/config.js +++ b/server/src/routes/api/v1/config.js @@ -1,29 +1,31 @@ +// @ts-check const path = require('path') const router = require('express').Router() const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') +const api = config.getSafe('api') + router.get('/', (req, res) => { try { if ( - config.api.reactMapSecret && - req.headers['react-map-secret'] === config.api.reactMapSecret + api.reactMapSecret && + req.headers['react-map-secret'] === api.reactMapSecret ) { res.status(200).json({ + ...config, api: { - ...config.api, + ...api, reactMapSecret: undefined, }, ...config, database: { ...config.database, - schemas: config.api.showSchemasInConfigApi - ? config.database.schemas - : [], + schemas: api.showSchemasInConfigApi ? config.database.schemas : [], }, authentication: { ...config.authentication, - strategies: config.api.showStrategiesInConfigApi + strategies: api.showStrategiesInConfigApi ? config.authentication.strategies : [], }, diff --git a/server/src/routes/rootRouter.js b/server/src/routes/rootRouter.js index 4cafdaac2..ec383b4c4 100644 --- a/server/src/routes/rootRouter.js +++ b/server/src/routes/rootRouter.js @@ -11,6 +11,9 @@ const { version } = require('../../../package.json') const areaPerms = require('../services/functions/areaPerms') const getServerSettings = require('../services/functions/getServerSettings') +const scanner = config.getSafe('scanner') +const api = config.getSafe('api') + const rootRouter = express.Router() rootRouter.use('/', clientRouter) @@ -116,10 +119,7 @@ rootRouter.post('/api/error/client', async (req, res) => { rootRouter.get('/area/:area/:zoom?', (req, res) => { const { area, zoom } = req.params try { - const { scanAreas } = config.areas - const validScanAreas = scanAreas[req.headers.host.replaceAll('.', '_')] - ? scanAreas[req.headers.host.replaceAll('.', '_')] - : scanAreas.main + const validScanAreas = config.getAreas(req, 'scanAreas') if (validScanAreas.features.length) { const foundArea = validScanAreas.features.find( (a) => a.properties.name.toLowerCase() === area.toLowerCase(), @@ -137,30 +137,32 @@ rootRouter.get('/area/:area/:zoom?', (req, res) => { }) rootRouter.get('/api/settings', async (req, res, next) => { + const authentication = config.getSafe('authentication') + const mapConfig = config.getMapConfig(req) try { if ( - config.authentication.alwaysEnabledPerms.length || - !config.authentication.methods.length + authentication.alwaysEnabledPerms.length || + !authentication.methods.length ) { if (req.session.tutorial === undefined) { - req.session.tutorial = !config.map.forceTutorial + req.session.tutorial = !mapConfig.forceTutorial } req.session.perms = { ...Object.fromEntries( - Object.keys(config.authentication.perms).map((p) => [p, false]), + Object.keys(authentication.perms).map((p) => [p, false]), ), areaRestrictions: areaPerms(['none']), webhooks: [], - scanner: Object.keys(config.scanner).filter( + scanner: Object.keys(scanner).filter( (key) => key !== 'backendConfig' && - config.scanner[key].enabled && - !config.scanner[key].discordRoles.length && - !config.scanner[key].telegramGroups.length, + scanner[key].enabled && + !scanner[key].discordRoles.length && + !scanner[key].telegramGroups.length, ), } - config.authentication.alwaysEnabledPerms.forEach((perm) => { - if (config.authentication.perms[perm]) { + authentication.alwaysEnabledPerms.forEach((perm) => { + if (authentication.perms[perm]) { req.session.perms[perm] = true } else { log.warn( @@ -175,7 +177,7 @@ rootRouter.get('/api/settings', async (req, res, next) => { } req.session.save() - if (config.authentication.methods.length && req.user) { + if (authentication.methods.length && req.user) { try { const user = await Db.query('User', 'getOne', req.user.id) if (user) { @@ -202,20 +204,17 @@ rootRouter.get('/api/settings', async (req, res, next) => { const settings = getServerSettings(req) if ('perms' in settings.user) { - if ( - settings.user.perms.pokemon && - config.api.queryOnSessionInit.pokemon - ) { + if (settings.user.perms.pokemon && api.queryOnSessionInit.pokemon) { Event.setAvailable('pokemon', 'Pokemon', Db, false) } if ( - config.api.queryOnSessionInit.raids && + api.queryOnSessionInit.raids && (settings.user.perms.raids || settings.user.perms.gyms) ) { Event.setAvailable('gyms', 'Gym', Db, false) } if ( - config.api.queryOnSessionInit.quests && + api.queryOnSessionInit.quests && (settings.user.perms.quests || settings.user.perms.pokestops || settings.user.perms.invasions || @@ -223,12 +222,9 @@ rootRouter.get('/api/settings', async (req, res, next) => { ) { Event.setAvailable('pokestops', 'Pokestop', Db, false) } - if (settings.user.perms.nests && config.api.queryOnSessionInit.nests) { + if (settings.user.perms.nests && api.queryOnSessionInit.nests) { Event.setAvailable('nests', 'Nest', Db, false) } - if (Object.values(config.api.queryOnSessionInit).some(Boolean)) { - Event.addAvailable() - } } res.status(200).json(settings) diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js index 598c0bdd8..6a3c57b93 100644 --- a/server/src/services/DbCheck.js +++ b/server/src/services/DbCheck.js @@ -3,10 +3,10 @@ const { knex } = require('knex') const { raw } = require('objection') const extend = require('extend') const config = require('@rm/config') - const { log, HELPERS } = require('@rm/logger') + const { getBboxFromCenter } = require('./functions/getBbox') -const { setCache, getCache } = require('./cache') +const { getCache } = require('./cache') const softLimit = config.getSafe('api.searchSoftKmLimit') const hardLimit = config.getSafe('api.searchHardKmLimit') @@ -107,7 +107,6 @@ module.exports = class DbCheck { ) process.exit(0) } - this.distanceUnit = config.getSafe('map.misc.distanceUnit') } /** @@ -115,13 +114,11 @@ module.exports = class DbCheck { * @param {boolean} isMad * @returns {ReturnType} */ - getDistance(args, isMad) { + static getDistance(args, isMad) { const radLat = args.lat * (Math.PI / 180) const radLon = args.lon * (Math.PI / 180) return raw( - `ROUND(( ${ - this.distanceUnit === 'mi' ? '3959' : '6371' - } * acos( cos( ${radLat} ) * cos( radians( ${ + `ROUND(( 6371000 * acos( cos( ${radLat} ) * cos( radians( ${ isMad ? 'latitude' : 'lat' } ) ) * cos( radians( ${ isMad ? 'longitude' : 'lon' @@ -248,7 +245,7 @@ module.exports = class DbCheck { * @param {boolean} historical * @returns {void} */ - async setRarity(results, historical = false) { + setRarity(results, historical = false) { const base = {} const mapKey = historical ? 'historical' : 'rarity' let total = 0 @@ -279,7 +276,6 @@ module.exports = class DbCheck { this[mapKey][id] = 'common' } }) - await setCache(`${mapKey}.json`, this[mapKey]) } async historicalRarity() { @@ -295,7 +291,7 @@ module.exports = class DbCheck { .groupBy('pokemon_id'), ), ) - await this.setRarity( + this.setRarity( results.map((result) => Object.fromEntries( result.map((pkmn) => [`${pkmn.pokemon_id}`, +pkmn.total]), @@ -435,10 +431,16 @@ module.exports = class DbCheck { /** * @template {import("@rm/types").BaseRecord} T - * @param {import("../models").ScannerModelKeys} model + * @template {import("../models").ScannerModelKeys} U + * @param {U} model * @param {import("@rm/types").Permissions} perms * @param {object} args - * @param {'search' | string} method + * @param {U extends 'Gym' ? 'searchRaids' | 'search' + * : U extends 'Pokestop' ? 'searchInvasions' | 'searchQuests' | 'searchLures' | 'search' + * : U extends 'Pokemon' ? 'search' + * : U extends 'Portal' ? 'search' + * : U extends 'Nest' ? 'search' + * : never} method * @returns {Promise} */ async search(model, perms, args, method = 'search') { @@ -457,7 +459,7 @@ module.exports = class DbCheck { perms, args, source, - this.getDistance(args, source.isMad), + DbCheck.getDistance(args, source.isMad), bbox, ), ), @@ -595,10 +597,9 @@ module.exports = class DbCheck { Object.values(titles), ]), ) - await setCache('questConditions.json', this.questConditions) } if (model === 'Pokemon') { - await this.setRarity(results, false) + this.setRarity(results, false) } if (results.length === 1) return results[0].available if (results.length > 1) { @@ -642,7 +643,6 @@ module.exports = class DbCheck { ...results.map((result) => result.max_duration), ) log.info(HELPERS.db, 'Updating filter context for routes') - await setCache('filterContext.json', this.filterContext) } catch (e) { log.error( HELPERS.db, diff --git a/server/src/services/EventManager.js b/server/src/services/EventManager.js index ef8e13260..598bf678c 100644 --- a/server/src/services/EventManager.js +++ b/server/src/services/EventManager.js @@ -3,19 +3,19 @@ const { promises: fs } = require('fs') const path = require('path') const Ohbem = require('ohbem') const { default: fetch } = require('node-fetch') -const config = require('@rm/config') +const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') const { generate, read } = require('@rm/masterfile') const PoracleAPI = require('./api/Poracle') -const { getCache, setCache } = require('./cache') +const { getCache } = require('./cache') class EventManager { constructor() { - /** @type {import("@rm/types").Masterfile} */ + /** @type {import("@rm/masterfile").Masterfile} */ this.masterfile = read() - /** @type {import("@rm/types").Masterfile['invasions'] | {}} */ + /** @type {import("@rm/masterfile").Masterfile['invasions'] | {}} */ this.invasions = 'invasions' in this.masterfile ? this.masterfile.invasions : {} @@ -104,7 +104,7 @@ class EventManager { return 0 }) - await setCache('available.json', this.available) + this.addAvailable(category) } /** @@ -313,7 +313,6 @@ class EventManager { } } this[type] = Object.values(this[`${type}Backup`]) - await setCache(`${type}.json`, this[type]) } /** @@ -344,41 +343,51 @@ class EventManager { try { const newMf = await generate(true, historical, dbRarity) this.masterfile = newMf ?? this.masterfile - this.addAvailable() + this.addAllAvailable() } catch (e) { log.warn(HELPERS.event, 'Failed to generate latest masterfile:\n', e) } } - addAvailable() { - Object.entries(this.available).forEach(([category, entries]) => { - entries.forEach((item) => { - if (!Number.isNaN(parseInt(item.charAt(0)))) { - const [id, form] = item.split('-') - if (!this.masterfile.pokemon[id]) { - this.masterfile.pokemon[id] = { - pokedexId: +id, - types: [], - quickMoves: [], - chargeMoves: [], - } - log.info(HELPERS.event, `Added ${id} to Pokemon`) - } - if (!this.masterfile.pokemon[id].forms) { - this.masterfile.pokemon[id].forms = {} - } - if (!this.masterfile.pokemon[id].forms[form]) { - this.masterfile.pokemon[id].forms[form] = { name: '*', category } - log.info( - HELPERS.event, - `Added ${this.masterfile.pokemon[id].name} Key: ${item} to masterfile. (${category})`, - ) + /** @param {keyof EventManager['available']} category */ + addAvailable(category) { + this.available[category].forEach((item) => { + if (!Number.isNaN(parseInt(item.charAt(0)))) { + const [id, form] = item.split('-') + if (!this.masterfile.pokemon[id]) { + this.masterfile.pokemon[id] = { + name: '', + pokedexId: +id, + types: [], + quickMoves: [], + chargedMoves: [], + defaultFormId: +form, + forms: {}, + genId: 0, } + log.warn(HELPERS.event, `Added ${id} to Pokemon, seems suspicious`) } - }) + if (!this.masterfile.pokemon[id].forms) { + this.masterfile.pokemon[id].forms = {} + } + if (!this.masterfile.pokemon[id].forms[form]) { + this.masterfile.pokemon[id].forms[form] = { name: '*', category } + log.info( + HELPERS.event, + `Added ${this.masterfile.pokemon[id].name} Key: ${item} to masterfile. (${category})`, + ) + } + } }) } + addAllAvailable() { + Object.keys(this.available).forEach( + (/** @type {keyof EventManager['available']} */ category) => + this.addAvailable(category), + ) + } + async getWebhooks() { const apis = await Promise.allSettled( config diff --git a/server/src/services/api/Poracle.js b/server/src/services/api/Poracle.js index 1ca622c53..c45d3ea2a 100644 --- a/server/src/services/api/Poracle.js +++ b/server/src/services/api/Poracle.js @@ -1235,7 +1235,7 @@ class PoracleAPI { /** * * @param {import('@rm/types').PoracleInvasion} item - * @param {import('@rm/types').Masterfile['invasions']} invasions + * @param {import('@rm/masterfile').Masterfile['invasions']} invasions */ static getRealGruntId(item, invasions) { return ( diff --git a/server/src/services/api/fetchJson.js b/server/src/services/api/fetchJson.js index 5f7ed839c..dc18f02e9 100644 --- a/server/src/services/api/fetchJson.js +++ b/server/src/services/api/fetchJson.js @@ -2,7 +2,7 @@ const fs = require('fs') const { resolve } = require('path') -const { default: fetch } = require('node-fetch') +const { default: fetch, Response } = require('node-fetch') const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') @@ -31,6 +31,12 @@ async function fetchJson(url, options = undefined) { return response.json() } catch (e) { if (e instanceof Error) { + if ( + e.cause instanceof Response && + e.cause.status === 404 && + url.includes('/api/pokemon/id') + ) + return e.cause log.error(HELPERS.fetch, `Unable to fetch ${url}`, '\n', e) if (options) { fs.writeFileSync( diff --git a/server/src/services/api/scannerApi.js b/server/src/services/api/scannerApi.js index 38053d748..e72b8ae88 100644 --- a/server/src/services/api/scannerApi.js +++ b/server/src/services/api/scannerApi.js @@ -1,11 +1,10 @@ // @ts-check const { default: fetch } = require('node-fetch') -const NodeCache = require('node-cache') const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') -const { getCache, setCache } = require('../cache') +const { userCache } = require('../initialization') const Clients = require('../Clients') const TelegramClient = require('../TelegramClient') const DiscordClient = require('../DiscordClient') @@ -15,37 +14,7 @@ const scannerQueue = { scanZone: {}, } -const userCache = new NodeCache({ stdTTL: 60 * 60 * 24 }) - -const onShutdown = async () => { - const cacheObj = {} - userCache.keys().forEach((key) => { - cacheObj[key] = userCache.get(key) - }) - await setCache('scanUserHistory.json', cacheObj) -} -process.on('SIGINT', async () => { - await onShutdown() - process.exit(0) -}) -process.on('SIGTERM', async () => { - await onShutdown() - process.exit(0) -}) -process.on('SIGUSR1', async () => { - await onShutdown() - process.exit(0) -}) -process.on('SIGUSR2', async () => { - await onShutdown() - process.exit(0) -}) - -Object.entries(getCache('scanUserHistory.json', {})).forEach(([k, v]) => - userCache.set(k, v), -) - -const backendConfig = config.getSafe('scanner.backendConfig') +const { backendConfig, ...scanModes } = config.getSafe('scanner') const scanNextOptions = { routes: config.getSafe('scanner.scanNext.routes'), @@ -84,7 +53,7 @@ async function scannerApi( const timeout = setTimeout(() => { controller.abort() - }, config.api.fetchTimeoutMs) + }, config.getSafe('api.fetchTimeoutMs')) const coords = backendConfig.platform === 'mad' @@ -161,9 +130,9 @@ async function scannerApi( url: `${ backendConfig.apiEndpoint }/send_gps?origin=${encodeURIComponent( - config.scanner.scanNext.scanNextDevice, + scanModes.scanNext.scanNextDevice, )}&coords=${JSON.stringify(coords)}&sleeptime=${ - config.scanner.scanNext.scanNextSleeptime + scanModes.scanNext.scanNextSleeptime }`, options: { method, headers }, }) @@ -173,7 +142,7 @@ async function scannerApi( url: `${ backendConfig.apiEndpoint }/set_data?scan_next=true&instance=${encodeURIComponent( - config.scanner.scanNext.scanNextInstance, + scanModes.scanNext.scanNextInstance, )}&coords=${JSON.stringify(coords)}`, options: { method, headers }, }) @@ -249,7 +218,7 @@ async function scannerApi( url: `${ backendConfig.apiEndpoint }/set_data?scan_next=true&instance=${encodeURIComponent( - config.scanner.scanZone.scanZoneInstance, + scanModes.scanZone.scanZoneInstance, )}&coords=${JSON.stringify(coords)}`, options: { method, headers }, }) @@ -283,7 +252,7 @@ async function scannerApi( url: `${backendConfig.apiEndpoint}/get_data?${ data.type }=true&queue_size=true&instance=${encodeURIComponent( - config.scanner[data.typeName][`${data.typeName}Instance`], + scanModes[data.typeName][`${data.typeName}Instance`], )}`, options: { method, headers }, }) @@ -395,9 +364,10 @@ async function scannerApi( }, thumbnail: { url: - config.authentication.strategies.find( - (strategy) => strategy.name === user.rmStrategy, - )?.thumbnailUrl ?? + config + .getSafe('authentication.strategies') + .find((strategy) => strategy.name === user.rmStrategy) + ?.thumbnailUrl ?? `https://user-images.githubusercontent.com/58572875/167069223-745a139d-f485-45e3-a25c-93ec4d09779c.png`, }, description: `<@${user.discordId}>\n${capitalized} Size: ${data.scanSize}\nCoordinates: ${coords.length}\n`, @@ -413,10 +383,10 @@ async function scannerApi( name: 'Instance', value: `${ backendConfig.platform === 'mad' - ? `Device: ${config.scanner.scanNext.scanNextDevice}` + ? `Device: ${scanModes.scanNext.scanNextDevice}` : '' }\nName: ${ - config.scanner[category]?.[`${category}Instance`] || '-' + scanModes[category]?.[`${category}Instance`] || '-' }\nQueue: ${scannerQueue[category]?.queue || 0}`, inline: true, }, @@ -454,7 +424,7 @@ async function scannerApi( log.info( HELPERS.scanner, `Error: instance ${ - config.scanner[category]?.[`${category}Instance`] + scanModes[category]?.[`${category}Instance`] } does not exist`, ) return { status: 'error', message: 'scanner_no_instance' } @@ -462,7 +432,7 @@ async function scannerApi( log.info( HELPERS.scanner, `Error: instance ${ - config.scanner[category]?.[`${category}Instance`] + scanModes[category]?.[`${category}Instance`] } has no device assigned`, ) return { status: 'error', message: 'scanner_no_device_assigned' } @@ -470,7 +440,7 @@ async function scannerApi( log.info( HELPERS.scanner, `Error: device ${ - config.scanner[category]?.[`${category}Device`] + scanModes[category]?.[`${category}Device`] } does not exist`, ) return { status: 'error', message: 'scanner_no_device' } diff --git a/server/src/services/areas.js b/server/src/services/areas.js index fd3798646..cbed30be7 100644 --- a/server/src/services/areas.js +++ b/server/src/services/areas.js @@ -38,6 +38,27 @@ const manualGeojson = { }), } +/** + * @param {string} fileName + * @returns {import("@rm/types").RMGeoJSON} + */ +const loadFromFile = (fileName) => { + try { + if (fileName.startsWith('http')) { + return getCache(fileName, DEFAULT_RETURN) + } + if (fs.existsSync(resolve(__dirname, `../configs/${fileName}`))) { + return JSON.parse( + fs.readFileSync(resolve(__dirname, `../configs/${fileName}`), 'utf-8'), + ) + } + return DEFAULT_RETURN + } catch (e) { + log.warn(HELPERS.areas, `Failed to load ${fileName} from file system`, e) + return DEFAULT_RETURN + } +} + /** * @param {string} location * @returns {Promise} @@ -57,7 +78,7 @@ const getGeojson = async (location) => { .then(async (res) => { if (res?.data) { log.info(HELPERS.areas, 'Caching', location, 'from Kōji') - await setCache(`${location.replace(/\//g, '__')}.json`, res.data) + await setCache(location, res.data) return res.data } return DEFAULT_RETURN @@ -68,7 +89,7 @@ const getGeojson = async (location) => { 'Failed to fetch Kōji geojson, attempting to read from backup', err, ) - const cached = getCache(`${location.replace(/\//g, '__')}.json`) + const cached = getCache(location) if (cached) { log.info(HELPERS.areas, 'Reading from koji_backups for', location) return cached @@ -77,11 +98,7 @@ const getGeojson = async (location) => { return DEFAULT_RETURN }) } - if (fs.existsSync(resolve(__dirname, `../configs/${location}`))) { - return JSON.parse( - fs.readFileSync(resolve(__dirname, `../configs/${location}`), 'utf-8'), - ) - } + return loadFromFile(location) } catch (e) { log.warn(HELPERS.areas, 'Issue with getting the geojson', e) } @@ -111,7 +128,7 @@ const loadScanPolygons = async (fileName, domain) => { ? `${f.properties.parent}-${f.properties.name}` : f.properties.name, center: /** @type {[number,number]} */ ( - center(f).geometry.coordinates.reverse() + center(f).geometry.coordinates.slice().reverse() ), }, })), @@ -335,13 +352,13 @@ const loadCachedAreas = () => { /** @type {Record} */ const scanAreas = { - main: getCache(`${fileName.replace(/\//g, '__')}.json`, DEFAULT_RETURN), + main: loadFromFile(fileName), ...Object.fromEntries( config .getSafe('multiDomains') .map((d) => [ d.general?.geoJsonFileName ? d.domain.replaceAll('.', '_') : 'main', - getCache(d.general?.geoJsonFileName || fileName, DEFAULT_RETURN), + loadFromFile(d.general?.geoJsonFileName || fileName), ]), ), } diff --git a/server/src/services/cache.js b/server/src/services/cache.js index e8b1e6d1b..648bf0de6 100644 --- a/server/src/services/cache.js +++ b/server/src/services/cache.js @@ -1,3 +1,4 @@ +// @ts-check const fs = require('fs') const path = require('path') @@ -5,13 +6,18 @@ const { log, HELPERS } = require('@rm/logger') const CACHE_DIR = path.join(__dirname, '../../.cache') +/** @param {string} str */ +const fsFriendlyName = (str) => + str.startsWith('http') ? `${str.replace(/\//g, '__')}.json` : str + /** * @template T - * @param {string} fileName + * @param {string} unsafeName * @param {T} [fallback] * @returns {T} */ -const getCache = (fileName, fallback = null) => { +const getCache = (unsafeName, fallback = null) => { + const fileName = fsFriendlyName(unsafeName) try { if (!fs.existsSync(path.resolve(CACHE_DIR, fileName))) return fallback const data = JSON.parse( @@ -30,10 +36,11 @@ const getCache = (fileName, fallback = null) => { } /** - * @param {string} fileName + * @param {string} unsafeName * @param {object | string} data */ -const setCache = async (fileName, data) => { +const setCache = async (unsafeName, data) => { + const fileName = fsFriendlyName(unsafeName) try { if (!fs.existsSync(CACHE_DIR)) await fs.promises.mkdir(CACHE_DIR) await fs.promises.writeFile( diff --git a/server/src/services/config.js b/server/src/services/config.js index ab902d50b..b8aeef982 100644 --- a/server/src/services/config.js +++ b/server/src/services/config.js @@ -173,7 +173,22 @@ const mergeMapConfig = (input = {}) => { /** @type {import('@rm/types').Config['map']} */ const merged = config.util.extendDeep({}, base, input) - + if ( + merged.misc.distanceUnit !== 'kilometers' && + merged.misc.distanceUnit !== 'miles' + ) { + log.warn( + HELPERS.config, + `Invalid distanceUnit: ${merged.misc.distanceUnit}, only 'kilometers' OR 'miles' are allowed.`, + ) + if (merged.misc.distance === 'km') { + merged.misc.distanceUnit = 'kilometers' + } else if (merged.misc.distance === 'mi') { + merged.misc.distanceUnit = 'miles' + } else { + merged.misc.distanceUnit = 'kilometers' + } + } merged.general.menuOrder = merged?.general?.menuOrder ? merged.general.menuOrder.filter((x) => allowedMenuItems.includes(x)) : [] diff --git a/server/src/services/filters/builder/base.js b/server/src/services/filters/builder/base.js index 1475f494f..119f8f9e3 100644 --- a/server/src/services/filters/builder/base.js +++ b/server/src/services/filters/builder/base.js @@ -64,6 +64,7 @@ function buildDefaultFilters(perms) { perms.nests && Db.models.Nest ? { enabled: defaultFilters.nests.enabled, + onlyShowAvailable: defaultFilters.nests.onlyShowAvailable, pokemon: defaultFilters.nests.pokemon, polygons: defaultFilters.nests.polygons, avgFilter: defaultFilters.nests.avgFilter, diff --git a/server/src/services/filters/pokemon/Backend.js b/server/src/services/filters/pokemon/Backend.js index b204f6ec2..c7d33ca9c 100644 --- a/server/src/services/filters/pokemon/Backend.js +++ b/server/src/services/filters/pokemon/Backend.js @@ -1,7 +1,7 @@ /* eslint-disable no-unused-vars */ const config = require('@rm/config') const { log, HELPERS } = require('@rm/logger') -const { KEYS, STANDARD, LEAGUES } = require('./constants') +const { KEYS, AND_KEYS, STANDARD, LEAGUES } = require('./constants') const { deepCompare, between, @@ -60,7 +60,7 @@ module.exports = class PkmnBackend { this.expertFilter = this.getCallback(id === 'global') this.expertGlobal = this.getCallback(true) this.isEqualToGlobal = - this.expertFilter.toString() === this.expertGlobal.toString() + this.expertFilter?.toString() === this.expertGlobal?.toString() } get keyArray() { @@ -122,17 +122,6 @@ module.exports = class PkmnBackend { orStr += `LC${filter.little.join('-')}` } } - if (this.perms.iv) { - if (this.mods.onlyZeroIv) { - if (orStr) orStr += '|' - orStr += `0` - } - if (this.mods.onlyHundoIv) { - if (orStr) orStr += '|' - orStr += `100` - } - } - if (andStr && !(andStr.startsWith('(') && andStr.endsWith(')')) && orStr) { andStr = `(${andStr})` } @@ -149,7 +138,6 @@ module.exports = class PkmnBackend { orStr, merged, }) - return merged } @@ -299,10 +287,9 @@ module.exports = class PkmnBackend { } const results = /** @type {import('@rm/types').DnfFilter[]} */ ([]) if ( - ['iv', 'atk_iv', 'def_iv', 'sta_iv', 'cp', 'level', 'gender'].some((k) => - this.filterKeys.has(k), - ) && - this.perms.iv + this.perms.iv && + ((this.filterKeys.has('gender') && this.filterKeys.size === 1) || + AND_KEYS.some((k) => this.filterKeys.has(k))) ) { results.push({ pokemon, @@ -330,20 +317,37 @@ module.exports = class PkmnBackend { if (this.perms.pvp) { Object.entries(rest).forEach(([league, values]) => { if (Array.isArray(values) && this.filterKeys.has(league)) { - results.push({ + /** @type {import('@rm/types').DnfFilter} */ + const pvpFilter = { pokemon, [`pvp_${league}`]: PkmnBackend.ensureSafe( values, STANDARD[league]?.[1], ), - }) + } + if (this.filterKeys.has('gender')) { + pvpFilter.gender = { min: gender, max: gender } + } + results.push(pvpFilter) } }) } - if (this.filterKeys.has('xxs')) - results.push({ pokemon, size: { min: 1, max: 1 } }) - if (this.filterKeys.has('xxl')) - results.push({ pokemon, size: { min: 5, max: 5 } }) + if (this.filterKeys.has('xxs')) { + /** @type {import('@rm/types').DnfFilter} */ + const xxsFilter = { pokemon, size: { min: 1, max: 1 } } + if (this.filterKeys.has('gender')) { + xxsFilter.gender = { min: gender, max: gender } + } + results.push(xxsFilter) + } + if (this.filterKeys.has('xxl')) { + /** @type {import('@rm/types').DnfFilter} */ + const xxlFilter = { pokemon, size: { min: 5, max: 5 } } + if (this.filterKeys.has('gender')) { + xxlFilter.gender = { min: gender, max: gender } + } + results.push(xxlFilter) + } return results } @@ -357,9 +361,12 @@ module.exports = class PkmnBackend { filterRTree(pokemon, this.perms.areaRestrictions, this.mods.onlyAreas) ) { if ( - !this.mods.onlyLinkGlobal || (this.mods.onlyHundoIv && pokemon.iv === 100) || - (this.mods.onlyZeroIv && pokemon.iv === 0) || + (this.mods.onlyZeroIv && pokemon.iv === 0) + ) + return true + if ( + !this.mods.onlyLinkGlobal || (this.pokemon === pokemon.pokemon_id && this.form === pokemon.form) ) { if (!this.expertFilter || !this.expertGlobal) return true @@ -371,6 +378,7 @@ module.exports = class PkmnBackend { } } } + log.trace(pokemon) return false } diff --git a/server/src/services/filters/pokemon/constants.js b/server/src/services/filters/pokemon/constants.js index 2af0eb93e..6e31cab74 100644 --- a/server/src/services/filters/pokemon/constants.js +++ b/server/src/services/filters/pokemon/constants.js @@ -18,18 +18,17 @@ const LEVELS = config .slice() .sort((a, b) => a - b) -const BASE_KEYS = /** @type {const} */ ([ +const AND_KEYS = /** @type {const} */ ([ 'iv', - 'cp', - 'level', 'atk_iv', 'def_iv', 'sta_iv', - 'gender', - 'xxs', - 'xxl', + 'cp', + 'level', ]) +const BASE_KEYS = /** @type {const} */ ([...AND_KEYS, 'gender', 'xxs', 'xxl']) + const KEYS = /** @type {const} */ ([...BASE_KEYS, ...LEAGUES]) const MAD_KEY_MAP = /** @type {const} */ ({ @@ -47,6 +46,7 @@ const STANDARD = new PokemonFilter() module.exports = { LEVELS, KEYS, + AND_KEYS, IV_CALC, LEAGUES, LEVEL_CALC, diff --git a/server/src/services/functions/getServerSettings.js b/server/src/services/functions/getServerSettings.js index 7acf10629..0761721e8 100644 --- a/server/src/services/functions/getServerSettings.js +++ b/server/src/services/functions/getServerSettings.js @@ -1,3 +1,4 @@ +// @ts-check const config = require('@rm/config') const clientOptions = require('../ui/clientOptions') @@ -17,43 +18,48 @@ function getServerSettings(req) { const { clientValues, clientMenus } = clientOptions(user.perms) - const validConfig = config.getMapConfig(req) + const mapConfig = config.getMapConfig(req) + const api = config.getSafe('api') + const authentication = config.getSafe('authentication') + const database = config.getSafe('database') + const serverSettings = { api: { - polling: config.api.polling, - gymValidDataLimit: - Date.now() / 1000 - config.api.gymValidDataLimit * 86400, + polling: api.polling, + gymValidDataLimit: Date.now() / 1000 - api.gymValidDataLimit * 86400, }, user, authReferences: { - areaRestrictions: config.authentication.areaRestrictions.length, - webhooks: config.webhooks.filter((w) => w.enabled).length, - scanner: Object.values(config.scanner).filter((s) => s.enabled).length, + areaRestrictions: authentication.areaRestrictions.length, + webhooks: config.getSafe('webhooks').filter((w) => w.enabled).length, + scanner: Object.values(config.getSafe('scanner')).filter( + (s) => 'enabled' in s && s.enabled, + ).length, }, map: { - ...validConfig, + ...mapConfig, general: { - ...validConfig.general, + ...mapConfig.general, geoJsonFileName: undefined, }, - loginPage: !!config.map.loginPage.components.length, + loginPage: !!mapConfig.loginPage.components.length, donationPage: undefined, messageOfTheDay: undefined, customFloatingIcons: undefined, }, authentication: { loggedIn: !!req.user, - excludeList: config.authentication.excludeFromTutorial, - methods: config.authentication.methods, + excludeList: authentication.excludeFromTutorial, + methods: authentication.methods, }, database: { settings: { - extraUserFields: config.database.settings.extraUserFields, - userBackupLimits: config.database.settings.userBackupLimits, + extraUserFields: database.settings.extraUserFields, + userBackupLimits: database.settings.userBackupLimits, }, }, - tileServers: config.tileServers, - navigation: config.navigation, + tileServers: config.getSafe('tileServers'), + navigation: config.getSafe('navigation'), menus: advMenus(), userSettings: clientValues, clientMenus, diff --git a/server/src/services/initialization.js b/server/src/services/initialization.js index 4eeb3b33c..094b99154 100644 --- a/server/src/services/initialization.js +++ b/server/src/services/initialization.js @@ -1,9 +1,13 @@ // @ts-check +const NodeCache = require('node-cache') + const config = require('@rm/config') +const { log, HELPERS } = require('@rm/logger') const DbCheck = require('./DbCheck') const EventManager = require('./EventManager') const PvpWrapper = require('./PvpWrapper') +const { getCache, setCache } = require('./cache') const Db = new DbCheck() const Pvp = config.getSafe('api.pvp.reactMapHandlesPvp') @@ -11,10 +15,58 @@ const Pvp = config.getSafe('api.pvp.reactMapHandlesPvp') : null const Event = new EventManager() +const userCache = new NodeCache({ stdTTL: 60 * 60 * 24 }) + +Object.entries(getCache('scanUserHistory.json', {})).forEach(([k, v]) => + userCache.set(k, v), +) + Event.setTimers(Db, Pvp) +/** @param {NodeJS.Signals} e */ +const onShutdown = async (e) => { + log.info(HELPERS.ReactMap, 'received signal', e, 'writing cache...') + const cacheObj = {} + userCache.keys().forEach((key) => { + cacheObj[key] = userCache.get(key) + }) + await Promise.all([ + setCache('scanUserHistory.json', cacheObj), + setCache('rarity.json', Db.rarity), + setCache('historical.json', Db.historical), + setCache('available.json', Event.available), + setCache('filterContext.json', Db.filterContext), + setCache('questConditions.json', Db.questConditions), + setCache('uaudio.json', Event.uaudio), + setCache('uicons.json', Event.uicons), + ]) + log.info(HELPERS.ReactMap, 'exiting...') +} + +process.on('SIGINT', async (e) => { + await onShutdown(e) + process.exit(0) +}) +process.on('SIGTERM', async (e) => { + await onShutdown(e) + process.exit(0) +}) +process.on('SIGUSR1', async (e) => { + await onShutdown(e) + process.exit(0) +}) +process.on('SIGUSR2', async (e) => { + await onShutdown(e) + process.exit(0) +}) +process.on('uncaughtException', async () => { + await onShutdown('SIGBREAK') + process.exit(99) +}) + module.exports = { Db, Pvp, Event, + userCache, } diff --git a/server/src/services/logUserAuth.js b/server/src/services/logUserAuth.js index 302686057..7d7ea282e 100644 --- a/server/src/services/logUserAuth.js +++ b/server/src/services/logUserAuth.js @@ -50,18 +50,18 @@ async function getAuthInfo(req, user, strategy = 'custom', hidePii = false) { /[0-9]+.[0-9].+[0-9]+.[0-9]+$/, )[0] - const geo = await fetch( - `http://ip-api.com/json/${ip}?fields=66846719&lang=en`, - ) - .then((res) => res.json()) - .catch((err) => { - log.warn( - HELPERS.custom(strategy, '#7289da'), - 'failed to fetch user information', - err, - ) - return {} - }) + const geo = hidePii + ? {} + : await fetch(`http://ip-api.com/json/${ip}?fields=66846719&lang=en`) + .then((res) => res.json()) + .catch((err) => { + log.warn( + HELPERS.custom(strategy, '#7289da'), + 'failed to fetch user information', + err, + ) + return {} + }) const embed = { color: 0xff0000, diff --git a/server/src/services/ui/advMenus.js b/server/src/services/ui/advMenus.js index 088aa056e..8f73fd8b2 100644 --- a/server/src/services/ui/advMenus.js +++ b/server/src/services/ui/advMenus.js @@ -21,64 +21,115 @@ const CATEGORIES = /** @type {const} */ ({ nests: ['pokemon'], }) -const BASE_RARITY = /** @type {const} */ ([ - 'common', - 'uncommon', - 'rare', - 'ultraRare', - 'regional', - 'ultraBeast', - 'legendary', - 'mythical', - 'never', -]) - function buildMenus() { - const menuFilters = {} - const returnedItems = {} - const rarityTiers = new Set( Object.values(Event.masterfile.pokemon).map((val) => val.rarity), ) const historicalTiers = new Set( Object.values(Event.masterfile.pokemon).map((val) => val.historic), ) + const generations = [ + ...new Set( + Object.values(Event.masterfile.pokemon).map( + (val) => `generation_${val.genId}`, + ), + ), + ].filter((val) => val !== undefined) + const types = Object.keys(Event.masterfile.types) + .map((key) => `poke_type_${key}`) + .filter((val) => val !== 'poke_type_0') + + const forms = Object.entries( + Object.values(Event.masterfile.pokemon).reduce((acc, val) => { + Object.values(val.forms || {}).forEach((form) => { + if (acc[form.name]) { + acc[form.name] += 1 + } else { + acc[form.name] = 1 + } + }) + return acc + }, /** @type {Record} */ ({})), + ).filter(([key, count]) => count > 10 && key !== 'Normal' && key !== 'Unset') const pokemonFilters = { - generations: [ - ...new Set( - Object.values(Event.masterfile.pokemon).map( - (val) => `generation_${val.genId}`, - ), - ), - ].filter((val) => val !== undefined), - types: Object.keys(Event.masterfile.types) - .map((key) => `poke_type_${key}`) - .filter((val) => val !== 'poke_type_0'), - rarity: BASE_RARITY.filter((tier) => rarityTiers.has(tier)), - historicRarity: BASE_RARITY.filter((tier) => historicalTiers.has(tier)), - forms: ['normalForms', 'altForms', 'Alola', 'Galarian'], - others: ['reverse', 'selected', 'unselected', 'onlyAvailable'], + generations: Object.fromEntries(generations.map((gen) => [gen, false])), + types: Object.fromEntries(types.map((type) => [type, false])), + rarity: Object.fromEntries( + Array.from(rarityTiers).map((tier) => [tier, false]), + ), + historicRarity: Object.fromEntries( + Array.from(historicalTiers).map((tier) => [tier, false]), + ), + forms: { + normalForms: false, + altForms: false, + ...Object.fromEntries(forms.map((form) => [form[0], false])), + }, + others: { + reverse: false, + selected: false, + unselected: false, + onlyAvailable: false, + }, } - Object.entries(pokemonFilters).forEach(([key, items]) => { - menuFilters[key] = Object.fromEntries(items.map((item) => [item, false])) - }) - - Object.entries(CATEGORIES).forEach(([key, items]) => { - returnedItems[key] = { - categories: items, + const returnObj = { + gyms: { + categories: CATEGORIES.gyms, + filters: { + ...pokemonFilters, + others: { + ...pokemonFilters.others, + onlyAvailable: true, + }, + categories: Object.fromEntries( + CATEGORIES.gyms.map((item) => [item, false]), + ), + }, + }, + pokestops: { + categories: CATEGORIES.pokestops, + filters: { + ...pokemonFilters, + others: { + ...pokemonFilters.others, + onlyAvailable: true, + }, + categories: Object.fromEntries( + CATEGORIES.pokestops.map((item) => [item, false]), + ), + }, + }, + pokemon: { + categories: CATEGORIES.pokemon, + filters: { + ...pokemonFilters, + others: { + ...pokemonFilters.others, + onlyAvailable: true, + }, + categories: Object.fromEntries( + CATEGORIES.pokemon.map((item) => [item, false]), + ), + }, + }, + nests: { + categories: CATEGORIES.nests, filters: { - ...menuFilters, + ...pokemonFilters, others: { - ...menuFilters.others, + ...pokemonFilters.others, onlyAvailable: true, }, - categories: Object.fromEntries(items.map((item) => [item, false])), + categories: Object.fromEntries( + CATEGORIES.nests.map((item) => [item, false]), + ), }, - } - }) - return returnedItems + }, + } + + return returnObj } module.exports = buildMenus diff --git a/server/src/services/ui/clientOptions.js b/server/src/services/ui/clientOptions.js index 5337aed6f..93169a153 100644 --- a/server/src/services/ui/clientOptions.js +++ b/server/src/services/ui/clientOptions.js @@ -31,6 +31,9 @@ function clientOptions(perms) { opacityTenMinutes: { type: 'number', perm: ['raids'] }, opacityFiveMinutes: { type: 'number', perm: ['raids'] }, opacityOneMinute: { type: 'number', perm: ['raids'] }, + enableGymPopupCoords: map.misc.enableGymPopupCoordsSelector + ? { type: 'bool', perm: ['gyms'] } + : undefined, }, pokestops: { clustering: { type: 'bool', perm: ['pokestops', 'quests', 'invasions'] }, @@ -51,6 +54,9 @@ function clientOptions(perms) { opacityTenMinutes: { type: 'number', perm: ['invasions'] }, opacityFiveMinutes: { type: 'number', perm: ['invasions'] }, opacityOneMinute: { type: 'number', perm: ['invasions'] }, + enablePokestopPopupCoords: map.misc.enablePokestopPopupCoordsSelector + ? { type: 'bool', perm: ['pokestops'] } + : undefined, }, pokemon: { clustering: { type: 'bool', perm: ['pokemon'] }, @@ -61,6 +67,7 @@ function clientOptions(perms) { levelCircles: { type: 'bool', perm: ['iv'] }, minLevelCircle: { type: 'number', perm: ['iv'] }, interactionRanges: { type: 'bool', perm: ['pokemon'] }, + spacialRendRange: { type: 'bool', perm: ['pokemon'] }, showDexNumInPopup: { type: 'bool', perm: ['pokemon'] }, weatherIndicator: { type: 'bool', perm: ['pokemon'] }, pvpMega: { type: 'bool', perm: ['pvp'] }, @@ -70,6 +77,27 @@ function clientOptions(perms) { opacityTenMinutes: { type: 'number', perm: ['pokemon'] }, opacityFiveMinutes: { type: 'number', perm: ['pokemon'] }, opacityOneMinute: { type: 'number', perm: ['pokemon'] }, + ...Object.fromEntries( + levels.map((level) => [`pvp${level}`, { type: 'bool', perm: ['pvp'] }]), + ), + legacyFilter: map.misc.enableMapJsFilter + ? { type: 'bool', perm: ['iv'] } + : undefined, + glow: clientSideOptions.pokemon.glow.length + ? { + type: 'bool', + perm: ['pokemon'], + sub: Object.fromEntries( + clientSideOptions.pokemon.glow.map(({ name, ...glow }) => [ + name, + { ...glow, disabled: !perms[glow.perm], type: 'color' }, + ]), + ), + } + : undefined, + enablePokemonPopupCoords: map.misc.enablePokemonPopupCoordsSelector + ? { type: 'bool', perm: ['pokemon'] } + : undefined, }, wayfarer: { clustering: { type: 'bool', perm: ['portals'] }, @@ -84,6 +112,9 @@ function clientOptions(perms) { poiColor: { type: 'color', perm: ['submissionCells'] }, partnerColor: { type: 'color', perm: ['submissionCells'] }, showcaseColor: { type: 'color', perm: ['submissionCells'] }, + enablePortalPopupCoords: map.misc.enablePortalPopupCoordsSelector + ? { type: 'bool', perm: ['portals'] } + : undefined, }, s2cells: { lightMapBorder: { type: 'color', perm: ['s2cells'] }, @@ -104,10 +135,10 @@ function clientOptions(perms) { perm: [ 'pokemon', 'raids', - 'invasions', - 'quests', - 'eventStops', - 'lures', + // 'invasions', + // 'quests', + // 'eventStops', + // 'lures', ], }, audio: { @@ -115,10 +146,10 @@ function clientOptions(perms) { perm: [ 'pokemon', 'raids', - 'invasions', - 'quests', - 'eventStops', - 'lures', + // 'invasions', + // 'quests', + // 'eventStops', + // 'lures', ], }, audioAlwaysOn: { @@ -126,10 +157,10 @@ function clientOptions(perms) { perm: [ 'pokemon', 'raids', - 'invasions', - 'quests', - 'eventStops', - 'lures', + // 'invasions', + // 'quests', + // 'eventStops', + // 'lures', ], }, volumeLevel: { @@ -137,10 +168,10 @@ function clientOptions(perms) { perm: [ 'pokemon', 'raids', - 'invasions', - 'quests', - 'eventStops', - 'lures', + // 'invasions', + // 'quests', + // 'eventStops', + // 'lures', ], min: 0, max: 100, @@ -153,72 +184,30 @@ function clientOptions(perms) { // lures: { type: 'bool', perm: ['lures'] }, }, } - - levels.forEach((level) => { - clientMenus.pokemon[`pvp${level}`] = { - type: 'bool', - perm: ['pvp'], - value: true, - } - }) - - // special case options that require additional checks - if (map.misc.enableMapJsFilter) { - clientMenus.pokemon.legacyFilter = { type: 'bool', perm: ['iv', 'pvp'] } - } - if (clientSideOptions.pokemon.glow.length) { - clientMenus.pokemon.glow = { type: 'bool', sub: {}, perm: ['pokemon'] } - } - if (map.misc.enableGymPopupCoordsSelector) { - clientMenus.gyms.enableGymPopupCoords = { - type: 'bool', - perm: ['gyms'], - } - } - if (map.misc.enablePokestopPopupCoordsSelector) { - clientMenus.pokestops.enablePokestopPopupCoords = { - type: 'bool', - perm: ['pokestops'], - } - } - if (map.misc.enablePokemonPopupCoordsSelector) { - clientMenus.pokemon.enablePokemonPopupCoords = { - type: 'bool', - perm: ['pokemon'], - } - } - if (map.misc.enablePortalPopupCoordsSelector) { - clientMenus.wayfarer.enablePortalPopupCoords = { - type: 'bool', - perm: ['portals'], - } + /** @type {import('@rm/types').ClientOptions} */ + const clientValues = { + pokemon: { + glow: true, + ...Object.fromEntries( + clientSideOptions.pokemon.glow.map((glow) => [glow.name, glow.value]), + ), + }, } - // only the keys & values are stored locally - const clientValues = {} - - Object.entries(clientMenus).forEach((category) => { - const [key, options] = category - clientValues[key] = {} - Object.entries(options).forEach((option) => { - const [name, meta] = option + Object.entries(clientMenus).forEach(([key, options]) => { + if (!clientValues[key]) clientValues[key] = {} + Object.entries(options).forEach(([name, meta]) => { + if (!meta) return clientMenus[key][name].value = clientSideOptions[key][name] || meta.value || false clientMenus[key][name].disabled = !meta.perm.some((x) => perms[x]) clientValues[key][name] = meta.value - if (meta.sub) clientMenus[key][name].sub = {} delete clientMenus[key][name].perm }) }) clientMenus.pokemon.glow.value = true clientValues.pokemon.glow = true - clientSideOptions.pokemon.glow.forEach((option) => { - clientMenus.pokemon.glow.sub[option.name] = { ...option } - clientMenus.pokemon.glow.sub[option.name].disabled = !perms[option.perm] - clientMenus.pokemon.glow.sub[option.name].type = 'color' - clientValues.pokemon[option.name] = option.value - }) return { clientValues, clientMenus } } diff --git a/src/assets/mui/global.jsx b/src/assets/mui/global.jsx index 327cb5017..df39a0e2e 100644 --- a/src/assets/mui/global.jsx +++ b/src/assets/mui/global.jsx @@ -1,3 +1,4 @@ +// @ts-check import * as React from 'react' import GlobalStyles from '@mui/material/GlobalStyles' import { darken, lighten } from '@mui/material/styles' diff --git a/src/assets/mui/theme.js b/src/assets/mui/theme.js index 543d02959..c56cd60a5 100644 --- a/src/assets/mui/theme.js +++ b/src/assets/mui/theme.js @@ -152,8 +152,7 @@ const components = { * @returns {import('@mui/material').Theme} */ export default function useCustomTheme() { - const primary = useMemory((s) => s.theme.primary) - const secondary = useMemory((s) => s.theme.secondary) + const { primary, secondary } = useMemory((s) => s.theme) const darkMode = useStorage((s) => s.darkMode) if (darkMode) { @@ -177,6 +176,10 @@ export default function useCustomTheme() { main: secondary, contrastText: '#fff', }, + info: { + main: '#2AB5F6', + contrastText: '#fff', + }, discord: { main: '#5865F2', green: '#57F287', diff --git a/src/components/App.jsx b/src/components/App.jsx index 80e4e94b5..0e8f581c5 100644 --- a/src/components/App.jsx +++ b/src/components/App.jsx @@ -19,9 +19,7 @@ import '@services/events' import ErrorBoundary from './ErrorBoundary' import ReactRouter from './ReactRouter' import HolidayEffects from './HolidayEffects' -/** - * @type {Record} - */ + const LOADING_LOCALES = { de: 'Übersetzungen werden geladen', en: 'Loading Translations', diff --git a/src/components/ClearStorage.jsx b/src/components/ClearStorage.jsx deleted file mode 100644 index 1a9b744ec..000000000 --- a/src/components/ClearStorage.jsx +++ /dev/null @@ -1,25 +0,0 @@ -// @ts-check -import * as React from 'react' -import { Navigate } from 'react-router-dom' - -import { useMemory } from '@hooks/useMemory' -import { useStorage } from '@hooks/useStorage' - -export default function ClearStorage() { - localStorage.clear() - sessionStorage.clear() - - React.useEffect(() => { - useStorage.setState({ - filters: {}, - menus: {}, - location: [ - CONFIG.map.general.startLat || 0, - CONFIG.map.general.startLon || 0, - ], - zoom: CONFIG.map.general.startZoom, - }) - useMemory.setState({ Icons: null }) - }, []) - return -} diff --git a/src/components/Config.jsx b/src/components/Config.jsx index 6dc15b306..fc58e674e 100644 --- a/src/components/Config.jsx +++ b/src/components/Config.jsx @@ -11,6 +11,8 @@ import { deepMerge } from '@services/functions/deepMerge' import { Navigate } from 'react-router-dom' import { checkHoliday } from '@services/functions/checkHoliday' import { useHideElement } from '@hooks/useHideElement' +import { getGlowRules } from '@services/functions/getGlowRules' + import { useScannerSessionStorage } from './layout/dialogs/scanner/store' export default function Config({ children }) { @@ -87,6 +89,10 @@ export default function Config({ children }) { tileServers: Object.fromEntries( data.tileServers.map((item) => [item.name, item]), ), + distanceUnit: { + kilometers: { name: 'kilometers' }, + miles: { name: 'miles' }, + }, } useScannerSessionStorage.setState((prev) => ({ @@ -115,7 +121,9 @@ export default function Config({ children }) { ui: data.ui, menus: data.menus, extraUserFields: data.database.settings.extraUserFields, - userSettings: data.clientMenus, + userSettings: data.userSettings, + clientMenus: data.clientMenus, + glowRules: getGlowRules(data.clientMenus.pokemon.glow.sub), timeOfDay: Utility.timeCheck(...location), config: { ...data.map, diff --git a/src/components/QueryData.jsx b/src/components/QueryData.jsx index e4fc0bec5..cd15d1cd7 100644 --- a/src/components/QueryData.jsx +++ b/src/components/QueryData.jsx @@ -162,13 +162,11 @@ function QueryData({ category, timeout }) { } }, [filters, userSettings, onlyAreas, timeout.current.refetch]) - if (error) { - // @ts-ignore + if (error && 'statusCode' in error.networkError) { if (error.networkError?.statusCode === 464) { useMemory.setState({ clientError: 'old_client' }) return null } - // @ts-ignore if (error.networkError?.statusCode === 511) { useMemory.setState({ clientError: 'session_expired' }) return null diff --git a/src/components/ReactRouter.jsx b/src/components/ReactRouter.jsx index 699c01a90..6981b81c6 100644 --- a/src/components/ReactRouter.jsx +++ b/src/components/ReactRouter.jsx @@ -3,11 +3,12 @@ import * as React from 'react' import { Route, Routes } from 'react-router-dom' import Auth from './layout/auth/Auth' -import Login from './layout/auth/Login' +import LoginPage from '../features/login' import Blocked from './layout/auth/Blocked' import Errors from './Errors' -import ClearStorage from './ClearStorage' +import DataManagement from '../features/data' import Config from './Config' +import ResetAll from './Reset' const Playground = React.lazy(() => import('../features/playground')) @@ -18,16 +19,26 @@ const authRoute = ( ) const loginRoute = ( - + + +) +const dataRoute = ( + + ) -const resetRoute = const blockedRoute = ( ) +const playgroundRoute = ( + + + +) const errorRoute = +const resetRoute = export default function ReactRouter() { return ( @@ -35,14 +46,8 @@ export default function ReactRouter() { - - - - } - /> + + diff --git a/src/components/Reset.jsx b/src/components/Reset.jsx new file mode 100644 index 000000000..a67888b32 --- /dev/null +++ b/src/components/Reset.jsx @@ -0,0 +1,10 @@ +// @ts-check +import * as React from 'react' +import { Navigate } from 'react-router-dom' + +import { hardReset } from '@services/functions/resetState' + +export default function ResetAll() { + hardReset() + return +} diff --git a/src/components/layout/Nav.jsx b/src/components/layout/Nav.jsx index 72410283f..6b2b740fc 100644 --- a/src/components/layout/Nav.jsx +++ b/src/components/layout/Nav.jsx @@ -22,33 +22,38 @@ import BadgeSelection from './dialogs/BadgeSelection' import WebhookAdvanced from './dialogs/webhooks/WebhookAdv' import SlotSelection from './dialogs/filters/SlotSelection' import { HelpDialog } from './dialogs/Help' +import { PkmnFilterHelp } from './dialogs/filters/PkmnFilterHelp' export const Nav = React.memo( () => { const iconsIsReady = useMemory((s) => !!s.Icons) - if (!iconsIsReady) return null return ( <> - - - - - - - - - - - - - - - - - - - + {iconsIsReady && ( + <> + + + + + + + + + + + + + + + + + + + + + + )} ) }, diff --git a/src/components/layout/auth/Blocked.jsx b/src/components/layout/auth/Blocked.jsx index b30ceb83c..548b26f1f 100644 --- a/src/components/layout/auth/Blocked.jsx +++ b/src/components/layout/auth/Blocked.jsx @@ -17,7 +17,7 @@ import ListItemText from '@mui/material/ListItemText' import { useMemory } from '@hooks/useMemory' -import DiscordLogin from './Discord' +import DiscordButton from './Discord' import ThemeToggle from '../general/ThemeToggle' import { I } from '../general/I' @@ -98,9 +98,9 @@ export default function Blocked() { {t('go_back')} {discordInvite && ( - + {t('join')} - + )} diff --git a/src/components/layout/auth/Discord.jsx b/src/components/layout/auth/Discord.jsx index 934d376e7..0e608b751 100644 --- a/src/components/layout/auth/Discord.jsx +++ b/src/components/layout/auth/Discord.jsx @@ -9,7 +9,7 @@ import { I } from '../general/I' * @param {{ children?: string, bgcolor?: string } & import('@mui/material/Button').ButtonProps} props * @returns {JSX.Element} */ -export default function DiscordLogin({ +export default function DiscordButton({ href = '/auth/discord/callback', children = 'login', size = 'large', diff --git a/src/components/layout/auth/Local.jsx b/src/components/layout/auth/Local.jsx index e2e2a18ce..85d41a75b 100644 --- a/src/components/layout/auth/Local.jsx +++ b/src/components/layout/auth/Local.jsx @@ -59,9 +59,15 @@ export default function LocalLogin({ href, sx, style }) { return (
- + - + {t('local_username')} - + {t('local_password')} e.preventDefault()} - size="large" > {user.showPassword ? : } @@ -116,7 +121,6 @@ export default function LocalLogin({ href, sx, style }) { + + - -
- -