diff --git a/package.json b/package.json
index f058b10ba..047ec4a6f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "reactmap",
- "version": "1.3.1",
+ "version": "1.3.2",
"description": "React based frontend map.",
"main": "ReactMap.mjs",
"author": "TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com>",
diff --git a/public/base-locales/en.json b/public/base-locales/en.json
index 8199a4a10..7695d4dc0 100644
--- a/public/base-locales/en.json
+++ b/public/base-locales/en.json
@@ -551,5 +551,6 @@
"poi": "Points of Interest",
"300m_range": "300m Range",
"lure_range": "Lure Range",
- "tap_to_toggle": "Tap To Toggle"
+ "tap_to_toggle": "Tap To Toggle",
+ "power_up": "Power Up"
}
diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json
index 108be64c4..157c8b357 100644
--- a/server/src/configs/custom-environment-variables.json
+++ b/server/src/configs/custom-environment-variables.json
@@ -684,6 +684,7 @@
"__name": "DEFAULT_FILTERS_GYMS_ALL_GYMS",
"__format": "boolean"
},
+ "levels": "DEFAULT_FILTERS_GYMS_LEVELS",
"exEligible": {
"__name": "DEFAULT_FILTERS_GYMS_EX_ELIGIBLE",
"__format": "boolean"
@@ -752,6 +753,7 @@
"__name": "DEFAULT_FILTERS_POKESTOPS_ENABLED",
"__format": "boolean"
},
+ "levels": "DEFAULT_FILTERS_POKESTOPS_LEVELS",
"lures": {
"__name": "DEFAULT_FILTERS_POKESTOPS_LURES",
"__format": "boolean"
diff --git a/server/src/configs/default.json b/server/src/configs/default.json
index aae9bbf16..f92f97cc1 100644
--- a/server/src/configs/default.json
+++ b/server/src/configs/default.json
@@ -316,6 +316,7 @@
"gyms": {
"enabled": true,
"allGyms": true,
+ "levels": "all",
"exEligible": false,
"inBattle": false,
"raids": true,
@@ -356,6 +357,7 @@
},
"pokestops": {
"enabled": false,
+ "levels": "all",
"lures": true,
"quests": true,
"questSet": "both",
diff --git a/server/src/models/Gym.js b/server/src/models/Gym.js
index 265614c49..ceebd50c0 100644
--- a/server/src/models/Gym.js
+++ b/server/src/models/Gym.js
@@ -61,6 +61,7 @@ module.exports = class Gym extends Model {
gymBadges,
} = perms
const {
+ onlyLevels,
onlyAllGyms,
onlyRaids,
onlyExEligible,
@@ -211,6 +212,9 @@ module.exports = class Gym extends Model {
}
}
+ if (onlyAllGyms && onlyLevels !== 'all' && !isMad) {
+ query.andWhere('power_up_level', onlyLevels)
+ }
query.andWhere((gym) => {
if (onlyExEligible && gymPerms) {
gym.orWhere((ex) => {
@@ -403,10 +407,12 @@ module.exports = class Gym extends Model {
.then((r) => {
const unique = new Set()
r.forEach((result) => {
- if (result.slots) {
- unique.add(`g${result.team}-${result.slots}`)
- } else {
- unique.add(`t${result.team}-0`)
+ if (result.team) {
+ if (result.slots) {
+ unique.add(`g${result.team}-${result.slots}`)
+ } else {
+ unique.add(`t${result.team}-0`)
+ }
}
})
return [...unique]
diff --git a/server/src/models/Pokestop.js b/server/src/models/Pokestop.js
index 1f57edc08..3dc6a02c8 100644
--- a/server/src/models/Pokestop.js
+++ b/server/src/models/Pokestop.js
@@ -63,6 +63,7 @@ module.exports = class Pokestop extends Model {
) {
const {
filters: {
+ onlyLevels,
onlyLures,
onlyQuests,
onlyInvasions,
@@ -462,6 +463,8 @@ module.exports = class Pokestop extends Model {
})
}
})
+ } else if (onlyLevels !== 'all' && !isMad) {
+ query.andWhere('power_up_level', onlyLevels)
}
const results = await query
const normalized = isMad
diff --git a/server/src/services/defaultFilters/buildDefaultFilters.js b/server/src/services/defaultFilters/buildDefaultFilters.js
index 715ed5009..e5308af07 100644
--- a/server/src/services/defaultFilters/buildDefaultFilters.js
+++ b/server/src/services/defaultFilters/buildDefaultFilters.js
@@ -26,6 +26,7 @@ module.exports = function buildDefault(perms, available) {
? {
enabled: defaultFilters.gyms.enabled,
allGyms: perms.gyms ? defaultFilters.gyms.enabled : undefined,
+ levels: perms.gyms ? defaultFilters.gyms.levels : undefined,
raids: perms.raids ? defaultFilters.gyms.raids : undefined,
exEligible: perms.gyms ? defaultFilters.gyms.exEligible : undefined,
inBattle: perms.gyms ? defaultFilters.gyms.exEligible : undefined,
@@ -56,6 +57,7 @@ module.exports = function buildDefault(perms, available) {
allPokestops: perms.pokestops
? defaultFilters.pokestops.enabled
: undefined,
+ levels: perms.pokestops ? defaultFilters.pokestops.levels : undefined,
lures: perms.lures ? defaultFilters.pokestops.lures : undefined,
quests: perms.quests ? defaultFilters.pokestops.quests : undefined,
showQuestSet: defaultFilters.pokestops.questSet,
diff --git a/server/src/services/ui/primary.js b/server/src/services/ui/primary.js
index 8e753e577..21e9b40da 100644
--- a/server/src/services/ui/primary.js
+++ b/server/src/services/ui/primary.js
@@ -83,6 +83,7 @@ const ignoredKeys = [
'badge',
'avgFilter',
'raidTier',
+ 'levels',
]
module.exports = function generateUi(filters, perms) {
diff --git a/src/components/layout/drawer/WithSubItems.jsx b/src/components/layout/drawer/WithSubItems.jsx
index 527c93d77..319ea96e8 100644
--- a/src/components/layout/drawer/WithSubItems.jsx
+++ b/src/components/layout/drawer/WithSubItems.jsx
@@ -98,6 +98,24 @@ export default function WithSubItems({
/>
)}
+ {((category === 'pokestops' && subItem === 'allPokestops') ||
+ (category === 'gyms' && subItem === 'allGyms')) &&
+ filters[category][subItem] === true && (
+ <>
+
+ {t('power_up')}
+
+
+
+
+ >
+ )}
{category === 'gyms' &&
subItem === 'gymBadges' &&
filters[category].gymBadges === true && (