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 && (