From 38322584ab2f040fb2eba84b7fa20e3e12b18fa5 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 3 Jul 2022 23:32:03 -0400 Subject: [PATCH 1/4] Split up Wayfarer - Let users select s14/s17/rings - Cleanup primary ui fn a bit Resolve #506 --- public/base-locales/en.json | 3 +- server/src/configs/default.json | 5 +- server/src/graphql/resolvers.js | 4 +- .../defaultFilters/buildDefaultFilters.js | 3 + .../services/functions/getPlacementCells.js | 2 +- server/src/services/ui/primary.js | 169 +++++++++--------- src/components/layout/drawer/WithSubItems.jsx | 38 +++- 7 files changed, 132 insertions(+), 92 deletions(-) diff --git a/public/base-locales/en.json b/public/base-locales/en.json index cd3acd484..37d55edeb 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -546,5 +546,6 @@ "poi_color": "POI Color", "quest_condition": "Quest Condition", "always_show_labels": "Always Show Labels", - "scan_areas_options": "Scan Areas Options" + "scan_areas_options": "Scan Areas Options", + "poi": "Points of Interest" } diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 718171d47..f80890ff1 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -417,7 +417,10 @@ "enabled": false }, "submissionCells": { - "enabled": false + "enabled": false, + "rings": true, + "s17Cells": true, + "s14Cells": true }, "weather": { "enabled": true diff --git a/server/src/graphql/resolvers.js b/server/src/graphql/resolvers.js index d0be2763f..c97179794 100644 --- a/server/src/graphql/resolvers.js +++ b/server/src/graphql/resolvers.js @@ -299,10 +299,10 @@ module.exports = { return [ { placementCells: - args.zoom >= config.map.submissionZoom + args.zoom >= config.map.submissionZoom && args.filters.onlyS17Cells ? Utility.getPlacementCells(args, pokestops, gyms) : [], - typeCells: Utility.getTypeCells(args, pokestops, gyms), + typeCells: args.filters.onlyS14Cells ? Utility.getTypeCells(args, pokestops, gyms) : [], }, ] } diff --git a/server/src/services/defaultFilters/buildDefaultFilters.js b/server/src/services/defaultFilters/buildDefaultFilters.js index 92ff1c658..715ed5009 100644 --- a/server/src/services/defaultFilters/buildDefaultFilters.js +++ b/server/src/services/defaultFilters/buildDefaultFilters.js @@ -106,6 +106,9 @@ module.exports = function buildDefault(perms, available) { submissionCells: perms.submissionCells ? { enabled: defaultFilters.submissionCells.enabled, + rings: defaultFilters.submissionCells.rings, + s17Cells: defaultFilters.submissionCells.s17Cells, + s14Cells: defaultFilters.submissionCells.s14Cells, filter: { global: new GenericFilter() }, } : undefined, diff --git a/server/src/services/functions/getPlacementCells.js b/server/src/services/functions/getPlacementCells.js index 8805ebbee..f507071a5 100644 --- a/server/src/services/functions/getPlacementCells.js +++ b/server/src/services/functions/getPlacementCells.js @@ -46,7 +46,7 @@ module.exports = function getPlacementCells(bounds, pokestops, gyms) { cell.blocked = true } } - const rings = allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) + const rings = bounds.filters.onlyRings ? allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) : [] return { cells: Object.values(indexedCells), diff --git a/server/src/services/ui/primary.js b/server/src/services/ui/primary.js index 10d327e18..8e753e577 100644 --- a/server/src/services/ui/primary.js +++ b/server/src/services/ui/primary.js @@ -1,100 +1,98 @@ -/* eslint-disable no-restricted-syntax */ const { api: { pvp: { leagues }, }, defaultFilters: { - nests: { avgSliderStep }, + nests: { avgSliderStep, avgFilter }, }, } = require('../config') +const refSliders = { + pokemon: { + primary: [ + { + name: 'iv', + label: '%', + min: 0, + max: 100, + perm: 'iv', + color: 'secondary', + }, + ], + secondary: [ + { + name: 'level', + label: '', + min: 1, + max: 35, + perm: 'iv', + }, + { + name: 'atk_iv', + label: '', + min: 0, + max: 15, + perm: 'iv', + }, + { + name: 'def_iv', + label: '', + min: 0, + max: 15, + perm: 'iv', + }, + { + name: 'sta_iv', + label: '', + min: 0, + max: 15, + perm: 'iv', + }, + ], + }, + nests: { + secondary: [ + { + name: 'avgFilter', + i18nKey: 'spawns_per_hour', + label: '', + min: avgFilter[0], + max: avgFilter[1], + perm: 'nests', + step: avgSliderStep, + }, + ], + }, +} + +leagues.forEach((league) => + refSliders.pokemon.primary.push({ + name: league.name, + label: 'rank', + min: league.minRank || 1, + max: league.maxRank || 100, + perm: 'pvp', + color: 'primary', + }), +) + +const ignoredKeys = [ + 'enabled', + 'filter', + 'showQuestSet', + 'badge', + 'avgFilter', + 'raidTier', +] + module.exports = function generateUi(filters, perms) { const ui = {} - const ignoredKeys = [ - 'enabled', - 'filter', - 'showQuestSet', - 'badge', - 'avgFilter', - 'raidTier', - ] // builds the initial categories - for (const [key, value] of Object.entries(filters)) { + Object.entries(filters).forEach(([key, value]) => { let sliders if (value) { switch (key) { - case 'nests': - ui[key] = {} - sliders = { - secondary: [ - { - name: 'avgFilter', - i18nKey: 'spawns_per_hour', - label: '', - min: filters.nests.avgFilter[0], - max: filters.nests.avgFilter[1], - perm: 'nests', - step: avgSliderStep, - }, - ], - } - break - case 'pokemon': - ui[key] = {} - sliders = { - primary: [ - { - name: 'iv', - label: '%', - min: 0, - max: 100, - perm: 'iv', - color: 'secondary', - }, - ], - secondary: [ - { - name: 'level', - label: '', - min: 1, - max: 35, - perm: 'iv', - }, - { - name: 'atk_iv', - label: '', - min: 0, - max: 15, - perm: 'iv', - }, - { - name: 'def_iv', - label: '', - min: 0, - max: 15, - perm: 'iv', - }, - { - name: 'sta_iv', - label: '', - min: 0, - max: 15, - perm: 'iv', - }, - ], - } - leagues.forEach((league) => - sliders.primary.push({ - name: league.name, - label: 'rank', - min: league.minRank || 1, - max: league.maxRank || 100, - perm: 'pvp', - color: 'primary', - }), - ) - break case 'submissionCells': case 'portals': if (!ui.wayfarer) ui.wayfarer = {} @@ -108,10 +106,11 @@ module.exports = function generateUi(filters, perms) { break default: ui[key] = {} + sliders = refSliders[key] break } // builds each subcategory - for (const [subKey, subValue] of Object.entries(value)) { + Object.entries(value).forEach(([subKey, subValue]) => { if ( (!ignoredKeys.includes(subKey) && subValue !== undefined) || key === 'weather' || @@ -136,7 +135,7 @@ module.exports = function generateUi(filters, perms) { break } } - } + }) // adds any sliders present if (sliders) { ui[key].sliders = sliders @@ -150,7 +149,7 @@ module.exports = function generateUi(filters, perms) { }) } } - } + }) // deletes any menus that do not have any items/perms Object.keys(ui).forEach((category) => { diff --git a/src/components/layout/drawer/WithSubItems.jsx b/src/components/layout/drawer/WithSubItems.jsx index 50c668dc8..5a720ca67 100644 --- a/src/components/layout/drawer/WithSubItems.jsx +++ b/src/components/layout/drawer/WithSubItems.jsx @@ -1,6 +1,6 @@ -import React from 'react' +import React, { Fragment } from 'react' import { Grid, Typography, Switch, Select, MenuItem } from '@material-ui/core' -import { useTranslation } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import Utility from '@services/Utility' @@ -148,6 +148,40 @@ export default function WithSubItems({ )} + {category === 'wayfarer' && subItem === 'submissionCells' && ( + <> + {['rings', 's14Cells', 's17Cells'].map((item, i) => ( + + + + {i ? ( + + {{ level: i === 1 ? 14 : 17 }} + + ) : ( + t('poi') + )} + + + + { + setFilters({ + ...filters, + [subItem]: { + ...filters[subItem], + [item]: !filters[subItem][item], + }, + }) + }} + disabled={!filters[subItem].enabled} + /> + + + ))} + + )} ) } From 4169d36293434e8dde9b6674cf9d010a7ea05423 Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Mon, 4 Jul 2022 03:32:41 +0000 Subject: [PATCH 2/4] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 0efb11b23..e787f5f57 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -868,6 +868,18 @@ "enabled": { "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_ENABLED", "__format": "boolean" + }, + "rings": { + "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_RINGS", + "__format": "boolean" + }, + "s17Cells": { + "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_S17CELLS", + "__format": "boolean" + }, + "s14Cells": { + "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_S14CELLS", + "__format": "boolean" } }, "weather": { From 414d39e7df6536599fc1b97f0cd58bc7bcb4575f Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:23:46 -0400 Subject: [PATCH 3/4] Update WithSubItems.jsx --- src/components/layout/drawer/WithSubItems.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/layout/drawer/WithSubItems.jsx b/src/components/layout/drawer/WithSubItems.jsx index 5a720ca67..527c93d77 100644 --- a/src/components/layout/drawer/WithSubItems.jsx +++ b/src/components/layout/drawer/WithSubItems.jsx @@ -156,7 +156,7 @@ export default function WithSubItems({ {i ? ( - {{ level: i === 1 ? 14 : 17 }} + {{ level: item.substring(1, 3) }} ) : ( t('poi') From 09efcc1dcdd7820ed4d16f936060861cc899384e Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:24:52 -0400 Subject: [PATCH 4/4] Linting --- server/src/graphql/resolvers.js | 7 +++++-- server/src/services/functions/getPlacementCells.js | 4 +++- server/src/services/ui/clientOptions.js | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/graphql/resolvers.js b/server/src/graphql/resolvers.js index c97179794..3eceb79b9 100644 --- a/server/src/graphql/resolvers.js +++ b/server/src/graphql/resolvers.js @@ -299,10 +299,13 @@ module.exports = { return [ { placementCells: - args.zoom >= config.map.submissionZoom && args.filters.onlyS17Cells + args.zoom >= config.map.submissionZoom && + args.filters.onlyS17Cells ? Utility.getPlacementCells(args, pokestops, gyms) : [], - typeCells: args.filters.onlyS14Cells ? Utility.getTypeCells(args, pokestops, gyms) : [], + typeCells: args.filters.onlyS14Cells + ? Utility.getTypeCells(args, pokestops, gyms) + : [], }, ] } diff --git a/server/src/services/functions/getPlacementCells.js b/server/src/services/functions/getPlacementCells.js index f507071a5..05120f14a 100644 --- a/server/src/services/functions/getPlacementCells.js +++ b/server/src/services/functions/getPlacementCells.js @@ -46,7 +46,9 @@ module.exports = function getPlacementCells(bounds, pokestops, gyms) { cell.blocked = true } } - const rings = bounds.filters.onlyRings ? allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) : [] + const rings = bounds.filters.onlyRings + ? allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) + : [] return { cells: Object.values(indexedCells), diff --git a/server/src/services/ui/clientOptions.js b/server/src/services/ui/clientOptions.js index b6eaad6e6..6e8e44045 100644 --- a/server/src/services/ui/clientOptions.js +++ b/server/src/services/ui/clientOptions.js @@ -17,7 +17,7 @@ module.exports = function clientOptions(perms) { clustering: { type: 'bool', perm: ['gyms', 'raids'] }, raidTimers: { type: 'bool', perm: ['raids'] }, interactionRanges: { type: 'bool', perm: ['gyms', 'raids'] }, - "300mRange": { type: 'bool', perm: ['raids'] }, + '300mRange': { type: 'bool', perm: ['raids'] }, showExBadge: { type: 'bool', perm: ['gyms'] }, showArBadge: { type: 'bool', perm: ['gyms'] }, raidLevelBadges: { type: 'bool', perm: ['raids'] },