rotation feature build
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
158
build/precache-manifest.c82c5bc095303fa8636ad0a92df98310.js
Normal 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"
|
||||
}
|
||||
]);
|
||||
@@ -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"
|
||||
}
|
||||
]);
|
||||
@@ -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) => {
|
||||
|
||||
2
build/static/js/2.6770ed2d.chunk.js
Normal file
1
build/static/js/2.6770ed2d.chunk.js.map
Normal file
2
build/static/js/main.63753ec6.chunk.js
Normal file
1
build/static/js/main.63753ec6.chunk.js.map
Normal file
BIN
build/static/media/ancho-v_games.07d5d0f6.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/arowana_mall.26cf0823.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
build/static/media/blackbelly_skatepark.a90313b1.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/camp_triggerfish.c698e702.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/goby_arena.567a4ee9.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/humpback_pump_track.fac19229.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/inkblot_art_academy.fdae0280.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
build/static/media/kelp_dome.6610593e.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
build/static/media/league.7aa42d81.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
build/static/media/makomart.8a4f661e.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
build/static/media/manta_maria.38baf9f6.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/moray_towers.4f71cd0b.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
build/static/media/musselforge_fitness.a66323de.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
build/static/media/new_albacore_hotel.0c283c87.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
build/static/media/piranha_pit.48621b6f.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
build/static/media/port_mackerel.d73c53e5.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/ranked.415f6ad8.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
build/static/media/regular.4848edcb.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
build/static/media/shellendorf_institute.d6669767.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/skipper_pavilion.1b3dbb2a.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
build/static/media/snapper_canal.870cef8e.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/starfish_mainstage.10fbda60.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
build/static/media/sturgeon_shipyard.828ad6dd.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
build/static/media/the_reef.5b7355e7.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
build/static/media/wahoo_world.27b4f7eb.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
342
react-ui/src/components/Tools/Rotations.js
vendored
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||