From 6b1ef8d319dd4c2584c767f870a64b7c3e2cb27a Mon Sep 17 00:00:00 2001 From: versx Date: Wed, 22 Jun 2022 01:21:56 -0700 Subject: [PATCH] Update dashboard Pokemon filters --- .../components/Modals/AddPvpFilterModal.tsx | 179 ++++++++++++++++++ src/ClientApp/src/components/PvpFilter.tsx | 141 ++++++++++++++ src/ClientApp/src/pages/Alarms/EditAlarm.tsx | 10 + src/ClientApp/src/pages/Alarms/ListAlarms.tsx | 6 + src/ClientApp/src/pages/Alarms/NewAlarm.tsx | 10 + .../src/pages/Filters/EditFilter.tsx | 145 +++++++++----- src/ClientApp/src/pages/Filters/NewFilter.tsx | 134 +++++++------ src/Controllers/AdminApiController.cs | 3 + src/Services/Alarms/AlarmControllerService.cs | 12 ++ 9 files changed, 533 insertions(+), 107 deletions(-) create mode 100644 src/ClientApp/src/components/Modals/AddPvpFilterModal.tsx create mode 100644 src/ClientApp/src/components/PvpFilter.tsx diff --git a/src/ClientApp/src/components/Modals/AddPvpFilterModal.tsx b/src/ClientApp/src/components/Modals/AddPvpFilterModal.tsx new file mode 100644 index 00000000..dbd61ba2 --- /dev/null +++ b/src/ClientApp/src/components/Modals/AddPvpFilterModal.tsx @@ -0,0 +1,179 @@ +import React, { useState } from 'react'; +import { + Box, + Button, + Grid, + FormControl, + InputLabel, + MenuItem, + Modal, + Select, + TextField, + Typography, +} from '@mui/material'; + +interface AddPvpFilterProps { + embeds: string[]; + filters: string[]; + geofences: string[]; + open: boolean; + toggle: React.MouseEventHandler | undefined; + onSubmit: any; //React.ChangeEventHandler | undefined; +} + +export function AddPvpFilterModal(props: AddPvpFilterProps) { + const style = { + position: 'absolute' as 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + border: '2px solid #000', + boxShadow: 24, + p: 4, + }; + + const [state, setState] = useState({ + name: '', + description: '', + filters: '', + embeds: '', + geofences: [], + webhook: '', + }); + + const onInputChange = (e: any) => { + setState({ ...state, [e.target.name]: e.target.value }); + }; + + return ( +
+ + + + Add PVP League Filter + + + + + + + + + + + + Filters + + + + + + Embeds + + + + + + Geofences + + + + + + + + + + + + + +
+ ); +} \ No newline at end of file diff --git a/src/ClientApp/src/components/PvpFilter.tsx b/src/ClientApp/src/components/PvpFilter.tsx new file mode 100644 index 00000000..ad88692a --- /dev/null +++ b/src/ClientApp/src/components/PvpFilter.tsx @@ -0,0 +1,141 @@ +import React, { useState } from 'react'; +import { + FormControl, + Grid, + InputLabel, + MenuItem, + Select, + TextField, +} from '@mui/material'; + +export interface PvpFilterProps { + league: string; + min_rank: number; + max_rank: number; + min_cp: number; + max_cp: number; + min_percent: number; + max_percent: number; + gender: string; + + allLeagues: string[]; +} + +export function PvpFilter(props: PvpFilterProps) { + console.log('pvp filter props:', props); + const [state, setState] = useState({ + league: props.league ?? '', + min_rank: props.min_rank ?? '', + max_rank: props.max_rank ?? '', + min_cp: props.min_cp ?? '', + max_cp: props.max_cp ?? '', + min_percent: props.min_percent ?? '', + max_percent: props.max_percent ?? '', + gender: props.gender ?? '', + }); + + const onInputChange = (e: any) => { + setState({ ...state, [e.target.name]: e.target.value }); + }; + + return ( +
+ + + + Pvp League + + + + + + + + + + + + + + + + + + + + + + +
+ ); +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Alarms/EditAlarm.tsx b/src/ClientApp/src/pages/Alarms/EditAlarm.tsx index 816e6045..7b3eed71 100644 --- a/src/ClientApp/src/pages/Alarms/EditAlarm.tsx +++ b/src/ClientApp/src/pages/Alarms/EditAlarm.tsx @@ -38,6 +38,7 @@ class EditAlarm extends React.Component { enableRaids: false, enableQuests: false, enablePokestops: false, + enableInvasions: false, enableGyms: false, enableWeather: false, alarms: [], @@ -114,6 +115,7 @@ class EditAlarm extends React.Component { enableRaids: this.state.enableRaids, enableQuests: this.state.enableQuests, enablePokestops: this.state.enablePokestops, + enableInvasions: this.state.enableInvasions, enableGyms: this.state.enableGyms, enableWeather: this.state.enableWeather, alarms: this.state.alarms, @@ -266,6 +268,14 @@ class EditAlarm extends React.Component { label="Enable Pokestops" /> + + } + label="Enable Invasions" + /> + params.row.enable_pokestops ? 'Yes' : 'No', }, + { + field: 'enable_invasions', + headerName: 'Enable Invasions', + flex: 1, + renderCell: (params) => params.row.enable_invasions ? 'Yes' : 'No', + }, { field: 'enable_weather', headerName: 'Enable Weather', diff --git a/src/ClientApp/src/pages/Alarms/NewAlarm.tsx b/src/ClientApp/src/pages/Alarms/NewAlarm.tsx index 8696ad58..012c8086 100644 --- a/src/ClientApp/src/pages/Alarms/NewAlarm.tsx +++ b/src/ClientApp/src/pages/Alarms/NewAlarm.tsx @@ -34,6 +34,7 @@ class NewAlarm extends React.Component { enableRaids: false, enableQuests: false, enablePokestops: false, + enableInvasions: false, enableGyms: false, enableWeather: false, alarms: [], @@ -99,6 +100,7 @@ class NewAlarm extends React.Component { enableRaids: this.state.enableRaids, enableQuests: this.state.enableQuests, enablePokestops: this.state.enablePokestops, + enableInvasions: this.state.enableInvasions, enableGyms: this.state.enableGyms, enableWeather: this.state.enableWeather, alarms: this.state.alarms, @@ -251,6 +253,14 @@ class NewAlarm extends React.Component { label="Enable Pokestops" /> + + } + label="Enable Invasions" + /> + { max_lvl: 35, gender: '*', size: 'All', - great_league: false, - ultra_league: false, - min_rank: 0, - max_rank: 100, + pvp: { + little: [], + great: [], + ultra: [], + }, is_event: false, type: 'Include', ignore_missing: false, @@ -91,7 +94,9 @@ class EditFilter extends React.Component { enabled: false, lured: false, lure_types: [], - invasions: false, + }, + invasions: { + enabled: false, invasion_types: {}, }, gyms: { @@ -103,6 +108,8 @@ class EditFilter extends React.Component { enabled: false, types: [], }, + open: false, + allLeagues: [], }; this.onInputChange = this.onInputChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); @@ -127,6 +134,7 @@ class EditFilter extends React.Component { .then(data => { console.log('filter data:', data); //this.setState(data.data.filter); + this.setState({ ['allLeagues']: data.data.allLeagues }); const keys: string[] = Object.keys(data.data.filter); for (const key of keys) { //console.log('key:', key, 'data:', data.data.filter[key]); @@ -169,6 +177,7 @@ class EditFilter extends React.Component { eggs: this.state.eggs, quests: this.state.quests, pokestops: this.state.pokestops, + invasions: this.state.invasions, gyms: this.state.gyms, weather: this.state.weather, }, @@ -237,6 +246,13 @@ class EditFilter extends React.Component { selected: true, }]; + const toggleModal = () => { + this.setState({ ['open']: !this.state.open }); + if (!this.state.open) { + console.log('this.state:', this.state); + } + }; + return (
@@ -261,7 +277,7 @@ class EditFilter extends React.Component { onChange={this.onInputChange} style={{paddingBottom: '20px'}} /> - + }> Pokemon @@ -386,46 +402,6 @@ class EditFilter extends React.Component { onChange={this.onInputChange} /> - - } - label="Is Great League" - /> - - - } - label="Is Ultra League" - /> - - - - - - - { label="Ignore Pokemon Missing Stats" /> + + PVP Filtering + + + {Object.keys(this.state.pokemon.pvp).map((league: any) => { + const pvp = this.state.pokemon.pvp[league][0]; + console.log('pvp:', pvp); + const props: PvpFilterProps = { + ...pvp, + league: league.toString().toLowerCase(), + allLeagues: this.state.allLeagues, + }; + const handleDelete = (name: string) => { + const pvp = this.state.pokemon.pvp; + const newPvp = pvp.filter((item: any) => item.name !== name); + this.setState({ ['pokemon.pvp']: newPvp }); + }; + return ( +
+ + +
+ ); + })} +
+
- + }> Raids @@ -592,7 +600,7 @@ class EditFilter extends React.Component { - + }> Eggs @@ -660,7 +668,7 @@ class EditFilter extends React.Component { - + }> Quests @@ -714,7 +722,7 @@ class EditFilter extends React.Component { - + }> Pokestops @@ -783,7 +791,40 @@ class EditFilter extends React.Component { - + + }> + Team Rocket Invasions + + + + + } + label="Enabled" + /> + + + + Invasion Types + + + + + + + }> Gyms @@ -827,7 +868,7 @@ class EditFilter extends React.Component { - + }> Weather diff --git a/src/ClientApp/src/pages/Filters/NewFilter.tsx b/src/ClientApp/src/pages/Filters/NewFilter.tsx index 94515ed9..5dac8709 100644 --- a/src/ClientApp/src/pages/Filters/NewFilter.tsx +++ b/src/ClientApp/src/pages/Filters/NewFilter.tsx @@ -10,6 +10,7 @@ import { FormControlLabel, Grid, InputLabel, + List, MenuItem, Select, Slider, @@ -24,6 +25,7 @@ import { makeStyles } from '@mui/styles'; import config from '../../config.json'; import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { PvpFilter, PvpFilterProps } from '../../components/PvpFilter'; import withRouter from '../../hooks/WithRouter'; import { IGlobalProps } from '../../interfaces/IGlobalProps'; import { onNestedStateChange } from '../../utils/nestedStateHelper'; @@ -54,6 +56,11 @@ class NewFilter extends React.Component { ultra_league: false, min_rank: 0, max_rank: 100, + pvp: { + little: [], + great: [], + ultra: [], + }, is_event: false, type: 'Include', ignore_missing: false, @@ -87,7 +94,9 @@ class NewFilter extends React.Component { enabled: false, lured: false, lure_types: [], - invasions: false, + }, + invasions: { + enabled: false, invasion_types: {}, }, gyms: { @@ -99,6 +108,13 @@ class NewFilter extends React.Component { enabled: false, types: [], }, + open: false, + // TODO: Configurable + allLeagues: { + little: [], + great: [], + ultra: [], + }, }; this.onInputChange = this.onInputChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); @@ -133,6 +149,7 @@ class NewFilter extends React.Component { eggs: this.state.eggs, quests: this.state.quests, pokestops: this.state.pokestops, + invasions: this.state.invasions, gyms: this.state.gyms, weather: this.state.weather, }, @@ -206,6 +223,13 @@ class NewFilter extends React.Component { selected: true, }]; + const toggleModal = () => { + this.setState({ ['open']: !this.state.open }); + if (!this.state.open) { + console.log('this.state:', this.state); + } + }; + return (
@@ -229,7 +253,7 @@ class NewFilter extends React.Component { onChange={this.onInputChange} style={{paddingBottom: '20px'}} /> - + }> Pokemon @@ -366,46 +390,6 @@ class NewFilter extends React.Component { onChange={this.onInputChange} /> - - } - label="Is Great League" - /> - - - } - label="Is Ultra League" - /> - - - - - - - { label="Ignore Pokemon Missing Stats" /> + + PVP Filtering + + + {Object.keys(this.state.pokemon.pvp).map((league: any) => { + console.log('league:', league); + const pvp = this.state.pokemon.pvp[league]; + const props: PvpFilterProps = { + ...pvp, + allLeagues: this.state.allLeagues, + }; + const handleDelete = (name: string) => { + const pvp = this.state.pokemon.pvp; + const newPvp = pvp.filter((item: any) => item.name !== name); + this.setState({ ['pokemon.pvp']: newPvp }); + }; + return ( +
+ + +
+ ); + })} +
+
- + }> Raids @@ -572,7 +587,7 @@ class NewFilter extends React.Component { - + }> Eggs @@ -640,7 +655,7 @@ class NewFilter extends React.Component { - + }> Quests @@ -694,7 +709,7 @@ class NewFilter extends React.Component { - + }> Pokestops @@ -736,12 +751,21 @@ class NewFilter extends React.Component { + + + + + }> + Team Rocket Invasions + + + } - label="Is Invasion Pokestop" + id="invasions.enabled" + name="invasions.enabled" + control={} + label="Enabled" /> @@ -749,9 +773,9 @@ class NewFilter extends React.Component { Invasion Types