rotation feature build

This commit is contained in:
Sendou
2019-05-14 15:39:38 +03:00
parent 2207683e78
commit 2a227b8e1a
39 changed files with 420 additions and 191 deletions

View File

@@ -1,23 +1,48 @@
{
"files": {
"main.js": "/static/js/main.da08d9e2.chunk.js",
"main.js.map": "/static/js/main.da08d9e2.chunk.js.map",
"main.js": "/static/js/main.63753ec6.chunk.js",
"main.js.map": "/static/js/main.63753ec6.chunk.js.map",
"runtime~main.js": "/static/js/runtime~main.a8a9905a.js",
"runtime~main.js.map": "/static/js/runtime~main.a8a9905a.js.map",
"static/js/2.1e06adcb.chunk.js": "/static/js/2.1e06adcb.chunk.js",
"static/js/2.1e06adcb.chunk.js.map": "/static/js/2.1e06adcb.chunk.js.map",
"static/js/2.6770ed2d.chunk.js": "/static/js/2.6770ed2d.chunk.js",
"static/js/2.6770ed2d.chunk.js.map": "/static/js/2.6770ed2d.chunk.js.map",
"index.html": "/index.html",
"precache-manifest.d365e923b865f382dc219adbf25448b8.js": "/precache-manifest.d365e923b865f382dc219adbf25448b8.js",
"precache-manifest.c82c5bc095303fa8636ad0a92df98310.js": "/precache-manifest.c82c5bc095303fa8636ad0a92df98310.js",
"service-worker.js": "/service-worker.js",
"static/media/ancho-v_games.png": "/static/media/ancho-v_games.07d5d0f6.png",
"static/media/arowana_mall.png": "/static/media/arowana_mall.26cf0823.png",
"static/media/blackbelly_skatepark.png": "/static/media/blackbelly_skatepark.a90313b1.png",
"static/media/bridge.png": "/static/media/bridge.fba72008.png",
"static/media/camp_triggerfish.png": "/static/media/camp_triggerfish.c698e702.png",
"static/media/depot.png": "/static/media/depot.c5459318.png",
"static/media/goby_arena.png": "/static/media/goby_arena.567a4ee9.png",
"static/media/heights.png": "/static/media/heights.7e33477e.png",
"static/media/humpback_pump_track.png": "/static/media/humpback_pump_track.fac19229.png",
"static/media/inkblot_art_academy.png": "/static/media/inkblot_art_academy.fdae0280.png",
"static/media/kelp_dome.png": "/static/media/kelp_dome.6610593e.png",
"static/media/league.png": "/static/media/league.7aa42d81.png",
"static/media/mahi.png": "/static/media/mahi.0e9369da.png",
"static/media/makomart.png": "/static/media/makomart.8a4f661e.png",
"static/media/manta_maria.png": "/static/media/manta_maria.38baf9f6.png",
"static/media/moray_towers.png": "/static/media/moray_towers.4f71cd0b.png",
"static/media/museum.png": "/static/media/museum.176394c2.png",
"static/media/musselforge_fitness.png": "/static/media/musselforge_fitness.a66323de.png",
"static/media/new_albacore_hotel.png": "/static/media/new_albacore_hotel.0c283c87.png",
"static/media/piranha_pit.png": "/static/media/piranha_pit.48621b6f.png",
"static/media/port_mackerel.png": "/static/media/port_mackerel.d73c53e5.png",
"static/media/ranked.png": "/static/media/ranked.415f6ad8.png",
"static/media/regular.png": "/static/media/regular.4848edcb.png",
"static/media/rig.png": "/static/media/rig.87b5e71c.png",
"static/media/rm.png": "/static/media/rm.ee623ae2.png",
"static/media/shellendorf_institute.png": "/static/media/shellendorf_institute.d6669767.png",
"static/media/skipper_pavilion.png": "/static/media/skipper_pavilion.1b3dbb2a.png",
"static/media/snapper_canal.png": "/static/media/snapper_canal.870cef8e.png",
"static/media/starfish_mainstage.png": "/static/media/starfish_mainstage.10fbda60.png",
"static/media/sturgeon_shipyard.png": "/static/media/sturgeon_shipyard.828ad6dd.png",
"static/media/sz.png": "/static/media/sz.563a7566.png",
"static/media/tc.png": "/static/media/tc.bd2d39a4.png",
"static/media/underpass.png": "/static/media/underpass.c55c527a.png"
"static/media/the_reef.png": "/static/media/the_reef.5b7355e7.png",
"static/media/underpass.png": "/static/media/underpass.c55c527a.png",
"static/media/wahoo_world.png": "/static/media/wahoo_world.27b4f7eb.png"
}
}

View File

@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>sendou.ink</title></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.1e06adcb.chunk.js"></script><script src="/static/js/main.da08d9e2.chunk.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>sendou.ink</title></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.6770ed2d.chunk.js"></script><script src="/static/js/main.63753ec6.chunk.js"></script></body></html>

View File

@@ -0,0 +1,158 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "2ddfe4d44e57391b3ce76152cd014595",
"url": "/index.html"
},
{
"revision": "c4832d7b84459c1103b9",
"url": "/static/js/2.6770ed2d.chunk.js"
},
{
"revision": "6ad3612afd565a4d6322",
"url": "/static/js/main.63753ec6.chunk.js"
},
{
"revision": "42ac5946195a7306e2a5",
"url": "/static/js/runtime~main.a8a9905a.js"
},
{
"revision": "07d5d0f61430f1817edfe2dbb733da66",
"url": "/static/media/ancho-v_games.07d5d0f6.png"
},
{
"revision": "26cf082351f37127260252c125762568",
"url": "/static/media/arowana_mall.26cf0823.png"
},
{
"revision": "a90313b117226d46d73d170371878e4a",
"url": "/static/media/blackbelly_skatepark.a90313b1.png"
},
{
"revision": "fba720089b3644e959ae4d7d7f87e328",
"url": "/static/media/bridge.fba72008.png"
},
{
"revision": "c698e7024cbc51d209ca714ddf966b78",
"url": "/static/media/camp_triggerfish.c698e702.png"
},
{
"revision": "c5459318010bbec7ac0f9b4ed0625967",
"url": "/static/media/depot.c5459318.png"
},
{
"revision": "567a4ee9b0c771d28f94896429a2a92d",
"url": "/static/media/goby_arena.567a4ee9.png"
},
{
"revision": "7e33477e6270d5436d0e31069ce6ba75",
"url": "/static/media/heights.7e33477e.png"
},
{
"revision": "fac19229b892def33b3a7623e3395626",
"url": "/static/media/humpback_pump_track.fac19229.png"
},
{
"revision": "fdae0280f3033b34230bee6376b178e1",
"url": "/static/media/inkblot_art_academy.fdae0280.png"
},
{
"revision": "6610593ec2d587f95a48f82f3f31ab2c",
"url": "/static/media/kelp_dome.6610593e.png"
},
{
"revision": "7aa42d817869c09c604225434d0c09c1",
"url": "/static/media/league.7aa42d81.png"
},
{
"revision": "0e9369da56634efad39d159a7275d993",
"url": "/static/media/mahi.0e9369da.png"
},
{
"revision": "8a4f661e7ea2c4b7d40398ad02639f07",
"url": "/static/media/makomart.8a4f661e.png"
},
{
"revision": "38baf9f610b7ad757d64a65e4e7459ba",
"url": "/static/media/manta_maria.38baf9f6.png"
},
{
"revision": "4f71cd0b781714eab42fdffc7eaeba8d",
"url": "/static/media/moray_towers.4f71cd0b.png"
},
{
"revision": "176394c281c9142a8ac75444e740dd00",
"url": "/static/media/museum.176394c2.png"
},
{
"revision": "a66323de7045d3874bac6d701d6b2e31",
"url": "/static/media/musselforge_fitness.a66323de.png"
},
{
"revision": "0c283c87ddd2cc2841ca1dc4eee60942",
"url": "/static/media/new_albacore_hotel.0c283c87.png"
},
{
"revision": "48621b6fe27e7cface671a7302437888",
"url": "/static/media/piranha_pit.48621b6f.png"
},
{
"revision": "d73c53e5b66491368591b9beb0933daa",
"url": "/static/media/port_mackerel.d73c53e5.png"
},
{
"revision": "415f6ad807ea2b730558b437f1929043",
"url": "/static/media/ranked.415f6ad8.png"
},
{
"revision": "4848edcb5eba727112fc12301e9bf5cd",
"url": "/static/media/regular.4848edcb.png"
},
{
"revision": "87b5e71c29a70bc15a501002b4192517",
"url": "/static/media/rig.87b5e71c.png"
},
{
"revision": "ee623ae225822d4a257120c58516eb86",
"url": "/static/media/rm.ee623ae2.png"
},
{
"revision": "d6669767d9544a4826ded8279571e3bc",
"url": "/static/media/shellendorf_institute.d6669767.png"
},
{
"revision": "1b3dbb2a194816f6fd1c3c52237da7db",
"url": "/static/media/skipper_pavilion.1b3dbb2a.png"
},
{
"revision": "870cef8e7a4d93c7f4ff5dce02e62c45",
"url": "/static/media/snapper_canal.870cef8e.png"
},
{
"revision": "10fbda601f96dc32dc9204e13b33a12a",
"url": "/static/media/starfish_mainstage.10fbda60.png"
},
{
"revision": "828ad6dd7a731cbda68ff1f7b8af15ff",
"url": "/static/media/sturgeon_shipyard.828ad6dd.png"
},
{
"revision": "563a75668da994dc8c3a42e75daf038c",
"url": "/static/media/sz.563a7566.png"
},
{
"revision": "bd2d39a43fc0bcfae9955e647842571d",
"url": "/static/media/tc.bd2d39a4.png"
},
{
"revision": "5b7355e761ab75bb5d0f7eed36c0e2e3",
"url": "/static/media/the_reef.5b7355e7.png"
},
{
"revision": "c55c527ab9b1f079f606848b880b5f4c",
"url": "/static/media/underpass.c55c527a.png"
},
{
"revision": "27b4f7ebda451ca449c81ad69b4d0292",
"url": "/static/media/wahoo_world.27b4f7eb.png"
}
]);

View File

@@ -1,58 +0,0 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "cfeb39c1831eba0efcf366a06bc6baec",
"url": "/index.html"
},
{
"revision": "950de206b3ef3d8ff151",
"url": "/static/js/2.1e06adcb.chunk.js"
},
{
"revision": "d211156ce3a47a22d4d2",
"url": "/static/js/main.da08d9e2.chunk.js"
},
{
"revision": "42ac5946195a7306e2a5",
"url": "/static/js/runtime~main.a8a9905a.js"
},
{
"revision": "fba720089b3644e959ae4d7d7f87e328",
"url": "/static/media/bridge.fba72008.png"
},
{
"revision": "c5459318010bbec7ac0f9b4ed0625967",
"url": "/static/media/depot.c5459318.png"
},
{
"revision": "7e33477e6270d5436d0e31069ce6ba75",
"url": "/static/media/heights.7e33477e.png"
},
{
"revision": "0e9369da56634efad39d159a7275d993",
"url": "/static/media/mahi.0e9369da.png"
},
{
"revision": "176394c281c9142a8ac75444e740dd00",
"url": "/static/media/museum.176394c2.png"
},
{
"revision": "87b5e71c29a70bc15a501002b4192517",
"url": "/static/media/rig.87b5e71c.png"
},
{
"revision": "ee623ae225822d4a257120c58516eb86",
"url": "/static/media/rm.ee623ae2.png"
},
{
"revision": "563a75668da994dc8c3a42e75daf038c",
"url": "/static/media/sz.563a7566.png"
},
{
"revision": "bd2d39a43fc0bcfae9955e647842571d",
"url": "/static/media/tc.bd2d39a4.png"
},
{
"revision": "c55c527ab9b1f079f606848b880b5f4c",
"url": "/static/media/underpass.c55c527a.png"
}
]);

View File

@@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.0/workbox-sw.js");
importScripts(
"/precache-manifest.d365e923b865f382dc219adbf25448b8.js"
"/precache-manifest.c82c5bc095303fa8636ad0a92df98310.js"
);
self.addEventListener('message', (event) => {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,7 +1,8 @@
import React, { useEffect, useState } from 'react'
import { useQuery } from 'react-apollo-hooks'
import { rotationData } from '../../graphql/queries/rotationData'
import { Loader, Segment, Header, Grid, Image, Popup } from 'semantic-ui-react'
import { maplists } from '../../graphql/queries/maplists'
import { Loader, Segment, Header, Grid, Image, Popup, Button, Checkbox } from 'semantic-ui-react'
import arowana_mall from '../img/mapIcons/arowana_mall.png'
import anchov_games from '../img/mapIcons/ancho-v_games.png'
@@ -68,25 +69,32 @@ const modeIcons = {
}
const modeShort = {
"Splat Zones": "SZ",
"Tower Control": "TC",
"Rainmaker": "RM",
"Clam Blitz": "CB"
"Splat Zones": "sz",
"Tower Control": "tc",
"Rainmaker": "rm",
"Clam Blitz": "cb"
}
const Rotations = ({ setMenuSelection }) => {
const { data, error, loading } = useQuery(rotationData)
const monthly = useQuery(maplists)
const [ rotation, setRotation ] = useState([])
const [ preferences, setPreferences ] = useState({sz: {}, tc: {}, rm: {}, cb: {}})
const [ show, setShow ] = useState(false)
const [ currentTime, setCurrentTime ] = useState(new Date(Math.floor(Date.now() / 1000)))
useEffect(() => {
if (loading) {
if (loading || monthly.loading) {
return
}
setMenuSelection('rotations')
document.title = 'Maplist Generator - sendou.ink'
setRotation(JSON.parse(data.rotationData))
const rotationPreferencesFromDb = window.localStorage.getItem('rotationPreferences')
if (rotationPreferencesFromDb) {
setPreferences(JSON.parse(rotationPreferencesFromDb))
}
}, [data, loading, setMenuSelection])
setRotation(JSON.parse(data.rotationData))
}, [data, loading, monthly.loading])
useEffect(() => {
const timeout = setTimeout(() => {
@@ -97,126 +105,222 @@ const Rotations = ({ setMenuSelection }) => {
}
}, [currentTime])
if (loading || rotation.length === 0) {
useEffect(() => {
setMenuSelection('rotations')
document.title = 'Maplist Generator - sendou.ink'
}, [setMenuSelection])
if (loading || monthly.loading || rotation.length === 0) {
return <div style={{"paddingTop": "25px", "paddingBottom": "20000px"}} ><Loader active inline='centered' /></div>
}
if (error) {
return <div style={{"color": "red"}}>{error.message}</div>
if (error || monthly.error) {
return <div style={{"color": "red"}}>{error ? error.message : null} {monthly.error? monthly.error.message : null}</div>
}
console.log(rotation)
console.log(currentTime)
const monthlyMaps = monthly.data.maplists[0]
console.log('prefs', preferences)
return (
<div>
{rotation.gachi.map((r, i) => { //league maps references like so: rotation.league[i] - turf: rotation.normal[i]
if (r.end_time < currentTime) {
return null
}
const timeUntil = r.start_time - currentTime
const hours = Math.floor(timeUntil / 3600)
const minutes = Math.floor((timeUntil % 3600) / 60)
const seconds = timeUntil % 3600 % 60
let header = 'Current'
if (hours >= 2) {
header = `In ${hours} hours ${minutes} minutes (${new Date(r.start_time * 1000).toLocaleString('en-GB')})`
} else if (hours > 0) {
header = `In ${hours} hours ${minutes} minutes ${seconds} seconds`
} else if (minutes > 0) {
header = `In ${minutes} minutes ${seconds} seconds`
}
return (
<div key={r.start_time} style={{"paddingTop": "25px"}}>
<Header size='small' disabled={r.rule.name === 'Clam Blitz'}>{header}</Header>
<Segment inverted disabled={r.rule.name === 'Clam Blitz'}>
<Grid columns={3} stackable>
<Grid.Row>
<Grid.Column>
<Header textAlign='center' inverted>
<Image src={leagueIcon} style={{"paddingBottom": "10px"}}/> LEAGUE
<Header.Subheader style={{"paddingTop": "10px"}}><Image size="mini" src={modeIcons[rotation.league[i].rule.name]} avatar/>{rotation.league[i].rule.name}</Header.Subheader>
</Header>
</Grid.Column>
<Grid.Column>
<Header textAlign='center' inverted>
<Image src={rankedIcon} style={{"paddingBottom": "10px"}}/> RANKED
<Header.Subheader style={{"paddingTop": "10px"}}><Image size="mini" src={modeIcons[r.rule.name]} avatar/>{r.rule.name}</Header.Subheader>
</Header>
</Grid.Column>
<Grid.Column>
<Header textAlign='center' inverted>
<Image src={regularIcon} style={{"paddingBottom": "10px"}}/>REGULAR
<Header.Subheader style={{"paddingTop": "10px"}}></Header.Subheader> {/*this is needed for formatting reasons.*/}
</Header>
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column>
<div style={{display: 'flex', justifyContent:'center', alignItems:'center'}}>
<Popup
<div>
<Button icon='cog' onClick={() => setShow(!show)}/>
{show ?
<div>
Uncheck a map in the ranked rotation to mark it as a disliked map.
<Grid relaxed columns={4}>
<Grid.Column>
<b>Splat Zones</b>
{monthlyMaps.sz.map(m => {
return (
<div key={m}>
<Checkbox
label={m}
checked={!preferences.sz[m]}
onChange={() => {
preferences.sz[m] = !preferences.sz[m]
window.localStorage.setItem(
'rotationPreferences', JSON.stringify(preferences)
)
}}
/><br/>
</div>
)
})}
</Grid.Column>
<Grid.Column>
<b>Tower Control</b>
{monthlyMaps.tc.map(m => {
return (
<div key={m}>
<Checkbox
label={m}
checked={!preferences.tc[m]}
onChange={() => {
preferences.tc[m] = !preferences.tc[m]
window.localStorage.setItem(
'rotationPreferences', JSON.stringify(preferences)
)
}}
/><br/>
</div>
)
})}
</Grid.Column>
<Grid.Column>
<b>Rainmaker</b>
{monthlyMaps.rm.map(m => {
return (
<div key={m}>
<Checkbox
label={m}
checked={!preferences.rm[m]}
onChange={() => {
preferences.rm[m] = !preferences.rm[m]
window.localStorage.setItem(
'rotationPreferences', JSON.stringify(preferences)
)
}}
/><br/>
</div>
)
})}
</Grid.Column>
<Grid.Column>
<b>Clam Blitz</b>
{monthlyMaps.cb.map(m => {
return (
<div key={m}>
<Checkbox
label={m}
checked={!preferences.cb[m]}
onChange={() => {
preferences.cb[m] = !preferences.cb[m]
window.localStorage.setItem(
'rotationPreferences', JSON.stringify(preferences)
)
}}
/><br/>
</div>
)
})}
</Grid.Column>
</Grid>
</div>
: null}
</div>
<div>
{rotation.gachi.map((r, i) => { //league maps references like so: rotation.league[i] - turf: rotation.normal[i]
if (r.end_time < currentTime) {
return null
}
const timeUntil = r.start_time - currentTime
const hours = Math.floor(timeUntil / 3600)
const minutes = Math.floor((timeUntil % 3600) / 60)
const seconds = timeUntil % 3600 % 60
let header = 'Current'
if (hours >= 2) {
header = `In ${hours} hours ${minutes} minutes (${new Date(r.start_time * 1000).toLocaleString('en-GB')})`
} else if (hours > 0) {
header = `In ${hours} hours ${minutes} minutes ${seconds} seconds`
} else if (minutes > 0) {
header = `In ${minutes} minutes ${seconds} seconds`
}
return (
<div key={r.start_time} style={{"paddingTop": "25px"}}>
<Header size='small' disabled={preferences[modeShort[r.rule.name]][r.stage_a.name] && preferences[modeShort[r.rule.name]][r.stage_b.name]}>{header}</Header>
<Segment inverted disabled={preferences[modeShort[r.rule.name]][r.stage_a.name] && preferences[modeShort[r.rule.name]][r.stage_b.name]}>
<Grid columns={3} stackable>
<Grid.Row>
<Grid.Column>
<Header textAlign='center' inverted>
<Image src={leagueIcon} style={{"paddingBottom": "10px"}}/> LEAGUE
<Header.Subheader style={{"paddingTop": "10px"}}><Image size="mini" src={modeIcons[rotation.league[i].rule.name]} avatar/>{rotation.league[i].rule.name}</Header.Subheader>
</Header>
</Grid.Column>
<Grid.Column>
<Header textAlign='center' inverted>
<Image src={rankedIcon} style={{"paddingBottom": "10px"}}/> RANKED
<Header.Subheader style={{"paddingTop": "10px"}}><Image size="mini" src={modeIcons[r.rule.name]} avatar/>{r.rule.name}</Header.Subheader>
</Header>
</Grid.Column>
<Grid.Column>
<Header textAlign='center' inverted>
<Image src={regularIcon} style={{"paddingBottom": "10px"}}/>REGULAR
<Header.Subheader style={{"paddingTop": "10px"}}></Header.Subheader> {/*this is needed for formatting reasons.*/}
</Header>
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column>
<div style={{display: 'flex', justifyContent:'center', alignItems:'center'}}>
<Popup
trigger={<Image
src={mapIcons[rotation.league[i].stage_a.name]}
rounded
/>}
content={rotation.league[i].stage_a.name}
basic
/>
<Popup
trigger={<Image
src={mapIcons[rotation.league[i].stage_b.name]}
rounded
/>}
content={rotation.league[i].stage_b.name}
basic
/>
</div>
</Grid.Column>
<Grid.Column>
<div style={{display: 'flex', justifyContent:'center', alignItems:'center'}}>
<Popup
trigger={<Image
src={mapIcons[r.stage_a.name]}
rounded
disabled={preferences[modeShort[r.rule.name]][r.stage_a.name]}
/>}
content={r.stage_a.name}
basic
/>
<Popup
trigger={<Image
src={mapIcons[r.stage_b.name]}
rounded
disabled={preferences[modeShort[r.rule.name]][r.stage_b.name]}
/>}
content={r.stage_b.name}
basic
/>
</div>
</Grid.Column>
<Grid.Column>
<div style={{display: 'flex', justifyContent:'center', alignItems:'center'}}>
<Popup
trigger={<Image
src={mapIcons[rotation.regular[i].stage_a.name]}
rounded
/>}
content={rotation.regular[i].stage_a.name}
basic
/>
<Popup
trigger={<Image
src={mapIcons[rotation.league[i].stage_a.name]}
src={mapIcons[rotation.regular[i].stage_b.name]}
rounded
/>}
content={rotation.league[i].stage_a.name}
content={rotation.regular[i].stage_b.name}
basic
/>
<Popup
trigger={<Image
src={mapIcons[rotation.league[i].stage_b.name]}
rounded
/>}
content={rotation.league[i].stage_b.name}
basic
/>
</div>
</Grid.Column>
<Grid.Column>
<div style={{display: 'flex', justifyContent:'center', alignItems:'center'}}>
<Popup
trigger={<Image
src={mapIcons[r.stage_a.name]}
rounded
/>}
content={r.stage_a.name}
basic
/>
<Popup
trigger={<Image
src={mapIcons[r.stage_b.name]}
rounded
/>}
content={r.stage_b.name}
basic
/>
</div>
</Grid.Column>
<Grid.Column>
<div style={{display: 'flex', justifyContent:'center', alignItems:'center'}}>
<Popup
trigger={<Image
src={mapIcons[rotation.regular[i].stage_a.name]}
rounded
/>}
content={rotation.regular[i].stage_a.name}
basic
/>
<Popup
trigger={<Image
src={mapIcons[rotation.regular[i].stage_b.name]}
rounded
/>}
content={rotation.regular[i].stage_b.name}
basic
/>
</div>
</Grid.Column>
</Grid.Row>
</Grid>
</Segment>
</div>
)
})}
</div>
</Grid.Column>
</Grid.Row>
</Grid>
</Segment>
</div>
)
})}
</div>
</div>
)
}