mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-09-30 07:12:36 -05:00
free agent feature done
This commit is contained in:
8
index.js
8
index.js
@@ -95,6 +95,14 @@ const server = new ApolloServer({
|
||||
twitch_name: "sendou",
|
||||
twitter_name: "sendouc",
|
||||
username: "Sendou",
|
||||
weapons: [
|
||||
"Tenta Brella",
|
||||
"Range Blaster",
|
||||
"Kensa Sloshing Machine",
|
||||
"Custom Blaster",
|
||||
],
|
||||
country: "fi",
|
||||
top500: true,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
31
package-lock.json
generated
31
package-lock.json
generated
@@ -1556,9 +1556,9 @@
|
||||
}
|
||||
},
|
||||
"mongoose": {
|
||||
"version": "5.7.14",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.7.14.tgz",
|
||||
"integrity": "sha512-fF+7+7Xl856VQRwRl1/pc/sL3eblWnaYO1K0Yp3d7v+53e5dMJDg3b1Iz61Fk1PBbJF2Z39yGyxakj59lLoj0w==",
|
||||
"version": "5.8.1",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.1.tgz",
|
||||
"integrity": "sha512-8Cffl52cMK2iBlpLipoRKW/RdrhkxvVzXsy+xVsfbKHQBCWkFiS0T0jU4smYzomTMP4gW0sReJoRA7Gu/7VVgQ==",
|
||||
"requires": {
|
||||
"bson": "~1.1.1",
|
||||
"kareem": "2.3.1",
|
||||
@@ -1647,9 +1647,9 @@
|
||||
"integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
|
||||
},
|
||||
"nodemon": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.1.tgz",
|
||||
"integrity": "sha512-UC6FVhNLXjbbV4UzaXA3wUdbEkUZzLGgMGzmxvWAex5nzib/jhcSHVFlQODdbuUHq8SnnZ4/EABBAbC3RplvPg==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz",
|
||||
"integrity": "sha512-GWhYPMfde2+M0FsHnggIHXTqPDHXia32HRhh6H0d75Mt9FKUoCBvumNHr7LdrpPBTKxsWmIEOjoN+P4IU6Hcaw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chokidar": "^3.2.2",
|
||||
@@ -1776,9 +1776,9 @@
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
|
||||
},
|
||||
"passport": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz",
|
||||
"integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=",
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
|
||||
"integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
|
||||
"requires": {
|
||||
"passport-strategy": "1.x.x",
|
||||
"pause": "0.0.1"
|
||||
@@ -2095,6 +2095,11 @@
|
||||
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
|
||||
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
|
||||
},
|
||||
"snekfetch": {
|
||||
"version": "3.6.4",
|
||||
"resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz",
|
||||
"integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw=="
|
||||
},
|
||||
"sparse-bitfield": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||
@@ -2352,6 +2357,14 @@
|
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||
},
|
||||
"webhook-discord": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/webhook-discord/-/webhook-discord-3.5.1.tgz",
|
||||
"integrity": "sha512-kktwGzj9e/v7aBhtb9rN1ZZY0EADxQFX7a1p2v9tatrBBS21oh/xiKzDd3fk/NdxdSQ0eIErrL2bHbMfunJspA==",
|
||||
"requires": {
|
||||
"snekfetch": "^3.6.4"
|
||||
}
|
||||
},
|
||||
"which": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||
|
||||
@@ -22,13 +22,14 @@
|
||||
"express-session": "^1.17.0",
|
||||
"graphql": "^14.5.8",
|
||||
"lodash": "^4.17.15",
|
||||
"mongoose": "^5.7.14",
|
||||
"mongoose": "^5.8.1",
|
||||
"mongoose-unique-validator": "^2.0.3",
|
||||
"node-fetch": "^2.6.0",
|
||||
"passport": "^0.4.0",
|
||||
"passport-discord": "^0.1.3"
|
||||
"passport": "^0.4.1",
|
||||
"passport-discord": "^0.1.3",
|
||||
"webhook-discord": "^3.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.0"
|
||||
"nodemon": "^2.0.2"
|
||||
}
|
||||
}
|
||||
|
||||
146
react-ui/package-lock.json
generated
146
react-ui/package-lock.json
generated
@@ -1915,54 +1915,54 @@
|
||||
}
|
||||
},
|
||||
"apollo-boost": {
|
||||
"version": "0.4.4",
|
||||
"resolved": "https://registry.npmjs.org/apollo-boost/-/apollo-boost-0.4.4.tgz",
|
||||
"integrity": "sha512-ASngBvazmp9xNxXfJ2InAzfDwz65o4lswlEPrWoN35scXmCz8Nz4k3CboUXbrcN/G0IExkRf/W7o9Rg0cjEBqg==",
|
||||
"version": "0.4.7",
|
||||
"resolved": "https://registry.npmjs.org/apollo-boost/-/apollo-boost-0.4.7.tgz",
|
||||
"integrity": "sha512-jfc3aqO0vpCV+W662EOG5gq4AH94yIsvSgAUuDvS3o/Z+8Joqn4zGC9CgLCDHusK30mFgtsEgwEe0pZoedohsQ==",
|
||||
"requires": {
|
||||
"apollo-cache": "^1.3.2",
|
||||
"apollo-cache-inmemory": "^1.6.3",
|
||||
"apollo-client": "^2.6.4",
|
||||
"apollo-cache": "^1.3.4",
|
||||
"apollo-cache-inmemory": "^1.6.5",
|
||||
"apollo-client": "^2.6.7",
|
||||
"apollo-link": "^1.0.6",
|
||||
"apollo-link-error": "^1.0.3",
|
||||
"apollo-link-http": "^1.3.1",
|
||||
"graphql-tag": "^2.4.2",
|
||||
"ts-invariant": "^0.4.0",
|
||||
"tslib": "^1.9.3"
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"apollo-cache": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.2.tgz",
|
||||
"integrity": "sha512-+KA685AV5ETEJfjZuviRTEImGA11uNBp/MJGnaCvkgr+BYRrGLruVKBv6WvyFod27WEB2sp7SsG8cNBKANhGLg==",
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.4.tgz",
|
||||
"integrity": "sha512-7X5aGbqaOWYG+SSkCzJNHTz2ZKDcyRwtmvW4mGVLRqdQs+HxfXS4dUS2CcwrAj449se6tZ6NLUMnjko4KMt3KA==",
|
||||
"requires": {
|
||||
"apollo-utilities": "^1.3.2",
|
||||
"tslib": "^1.9.3"
|
||||
"apollo-utilities": "^1.3.3",
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"apollo-cache-inmemory": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.3.tgz",
|
||||
"integrity": "sha512-S4B/zQNSuYc0M/1Wq8dJDTIO9yRgU0ZwDGnmlqxGGmFombOZb9mLjylewSfQKmjNpciZ7iUIBbJ0mHlPJTzdXg==",
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.5.tgz",
|
||||
"integrity": "sha512-koB76JUDJaycfejHmrXBbWIN9pRKM0Z9CJGQcBzIOtmte1JhEBSuzsOUu7NQgiXKYI4iGoMREcnaWffsosZynA==",
|
||||
"requires": {
|
||||
"apollo-cache": "^1.3.2",
|
||||
"apollo-utilities": "^1.3.2",
|
||||
"apollo-cache": "^1.3.4",
|
||||
"apollo-utilities": "^1.3.3",
|
||||
"optimism": "^0.10.0",
|
||||
"ts-invariant": "^0.4.0",
|
||||
"tslib": "^1.9.3"
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"apollo-client": {
|
||||
"version": "2.6.4",
|
||||
"resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.4.tgz",
|
||||
"integrity": "sha512-oWOwEOxQ9neHHVZrQhHDbI6bIibp9SHgxaLRVPoGvOFy7OH5XUykZE7hBQAVxq99tQjBzgytaZffQkeWo1B4VQ==",
|
||||
"version": "2.6.8",
|
||||
"resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.8.tgz",
|
||||
"integrity": "sha512-0zvJtAcONiozpa5z5zgou83iEKkBaXhhSSXJebFHRXs100SecDojyUWKjwTtBPn9HbM6o5xrvC5mo9VQ5fgAjw==",
|
||||
"requires": {
|
||||
"@types/zen-observable": "^0.8.0",
|
||||
"apollo-cache": "1.3.2",
|
||||
"apollo-cache": "1.3.4",
|
||||
"apollo-link": "^1.0.0",
|
||||
"apollo-utilities": "1.3.2",
|
||||
"apollo-utilities": "1.3.3",
|
||||
"symbol-observable": "^1.0.2",
|
||||
"ts-invariant": "^0.4.0",
|
||||
"tslib": "^1.9.3",
|
||||
"tslib": "^1.10.0",
|
||||
"zen-observable": "^0.8.0"
|
||||
}
|
||||
},
|
||||
@@ -2008,14 +2008,14 @@
|
||||
}
|
||||
},
|
||||
"apollo-utilities": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz",
|
||||
"integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==",
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.3.tgz",
|
||||
"integrity": "sha512-F14aX2R/fKNYMvhuP2t9GD9fggID7zp5I96MF5QeKYWDWTrkRdHRp4+SVfXUVN+cXOaB/IebfvRtzPf25CM0zw==",
|
||||
"requires": {
|
||||
"@wry/equality": "^0.1.2",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"ts-invariant": "^0.4.0",
|
||||
"tslib": "^1.9.3"
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"aproba": {
|
||||
@@ -2601,11 +2601,6 @@
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
|
||||
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
|
||||
},
|
||||
"bluebird": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
|
||||
},
|
||||
"bn.js": {
|
||||
"version": "4.11.8",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
|
||||
@@ -8837,23 +8832,6 @@
|
||||
"minipass": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"mississippi": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
|
||||
"integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
|
||||
"requires": {
|
||||
"concat-stream": "^1.5.0",
|
||||
"duplexify": "^3.4.2",
|
||||
"end-of-stream": "^1.1.0",
|
||||
"flush-write-stream": "^1.0.0",
|
||||
"from2": "^2.1.0",
|
||||
"parallel-transform": "^1.1.0",
|
||||
"pump": "^3.0.0",
|
||||
"pumpify": "^1.3.3",
|
||||
"stream-each": "^1.1.0",
|
||||
"through2": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"mixin-deep": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
|
||||
@@ -12763,9 +12741,9 @@
|
||||
}
|
||||
},
|
||||
"stream-shift": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
|
||||
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
|
||||
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
|
||||
},
|
||||
"strict-uri-encode": {
|
||||
"version": "1.1.0",
|
||||
@@ -13755,6 +13733,30 @@
|
||||
"ssri": "^6.0.1",
|
||||
"unique-filename": "^1.1.1",
|
||||
"y18n": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bluebird": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
|
||||
},
|
||||
"mississippi": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
|
||||
"integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
|
||||
"requires": {
|
||||
"concat-stream": "^1.5.0",
|
||||
"duplexify": "^3.4.2",
|
||||
"end-of-stream": "^1.1.0",
|
||||
"flush-write-stream": "^1.0.0",
|
||||
"from2": "^2.1.0",
|
||||
"parallel-transform": "^1.1.0",
|
||||
"pump": "^3.0.0",
|
||||
"pumpify": "^1.3.3",
|
||||
"stream-each": "^1.1.0",
|
||||
"through2": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-scope": {
|
||||
@@ -13777,9 +13779,9 @@
|
||||
}
|
||||
},
|
||||
"serialize-javascript": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
|
||||
"integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A=="
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
|
||||
"integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
@@ -13795,19 +13797,29 @@
|
||||
}
|
||||
},
|
||||
"terser-webpack-plugin": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
|
||||
"integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
|
||||
"integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
|
||||
"requires": {
|
||||
"cacache": "^12.0.2",
|
||||
"find-cache-dir": "^2.1.0",
|
||||
"is-wsl": "^1.1.0",
|
||||
"schema-utils": "^1.0.0",
|
||||
"serialize-javascript": "^1.7.0",
|
||||
"serialize-javascript": "^2.1.2",
|
||||
"source-map": "^0.6.1",
|
||||
"terser": "^4.1.2",
|
||||
"webpack-sources": "^1.4.0",
|
||||
"worker-farm": "^1.7.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"worker-farm": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
|
||||
"integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
|
||||
"requires": {
|
||||
"errno": "~0.1.7"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14306,14 +14318,6 @@
|
||||
"workbox-core": "^4.3.1"
|
||||
}
|
||||
},
|
||||
"worker-farm": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
|
||||
"integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
|
||||
"requires": {
|
||||
"errno": "~0.1.7"
|
||||
}
|
||||
},
|
||||
"worker-rpc": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
|
||||
@@ -14477,9 +14481,9 @@
|
||||
}
|
||||
},
|
||||
"zen-observable": {
|
||||
"version": "0.8.14",
|
||||
"resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz",
|
||||
"integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g=="
|
||||
"version": "0.8.15",
|
||||
"resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz",
|
||||
"integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ=="
|
||||
},
|
||||
"zen-observable-ts": {
|
||||
"version": "0.8.20",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"dependencies": {
|
||||
"@apollo/react-hooks": "^3.1.3",
|
||||
"@sendou/react-sketch": "^0.5.2",
|
||||
"apollo-boost": "^0.4.4",
|
||||
"apollo-boost": "^0.4.7",
|
||||
"graphql": "^14.5.8",
|
||||
"jstz": "^2.1.1",
|
||||
"react": "^16.12.0",
|
||||
|
||||
@@ -2,17 +2,18 @@ import React from "react"
|
||||
import { TextArea } from "semantic-ui-react"
|
||||
|
||||
const TextAreaWithLimit = ({ value, setValue, limit, style = {} }) => {
|
||||
const inputLength = value ? value.length : 0
|
||||
return (
|
||||
<>
|
||||
<TextArea
|
||||
value={value}
|
||||
value={value ?? ""}
|
||||
onChange={e =>
|
||||
e.target.value.length <= limit && setValue(e.target.value)
|
||||
}
|
||||
rows={5}
|
||||
style={style}
|
||||
/>
|
||||
{value.length}/{limit}
|
||||
{inputLength}/{limit}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,16 +9,18 @@ const WeaponDropdown = ({
|
||||
value,
|
||||
onChange,
|
||||
multiple = false,
|
||||
clearable = false,
|
||||
showImages = true,
|
||||
nonMultiplePlaceholder = "Choose a weapon",
|
||||
nonMultiplePlaceholder = "Choose weapon",
|
||||
style = {},
|
||||
}) => {
|
||||
return (
|
||||
<Dropdown
|
||||
placeholder={multiple ? "Choose a comp" : nonMultiplePlaceholder}
|
||||
placeholder={multiple ? "Choose comp" : nonMultiplePlaceholder}
|
||||
search
|
||||
selection
|
||||
closeOnEscape
|
||||
clearable={clearable}
|
||||
multiple={multiple}
|
||||
onChange={onChange}
|
||||
value={value}
|
||||
|
||||
@@ -188,7 +188,12 @@ const FAPostForm = ({
|
||||
/>
|
||||
</Form.Field>
|
||||
<Form.Field>
|
||||
<Button type="submit">Submit</Button>
|
||||
<Button
|
||||
type="submit"
|
||||
disabled={!form.can_vc || form.playstyles.length === 0}
|
||||
>
|
||||
Submit
|
||||
</Button>
|
||||
<span style={{ marginLeft: "0.3em" }}>
|
||||
<Button type="button" negative onClick={hideForm}>
|
||||
Cancel
|
||||
|
||||
@@ -1,19 +1,37 @@
|
||||
import React, { useState } from "react"
|
||||
import { useQuery, useMutation } from "@apollo/react-hooks"
|
||||
import { Message, Button, Modal, Header, Dropdown } from "semantic-ui-react"
|
||||
import {
|
||||
Message,
|
||||
Button,
|
||||
Modal,
|
||||
Header,
|
||||
Dropdown,
|
||||
Form,
|
||||
Grid,
|
||||
} from "semantic-ui-react"
|
||||
import Loading from "../common/Loading"
|
||||
import Error from "../common/Error"
|
||||
import FreeAgentTable from "./FreeAgentTable"
|
||||
import FAPostForm from "./FAPostForm"
|
||||
|
||||
import WeaponDropdown from "../common/WeaponDropdown"
|
||||
import { continents } from "../../utils/lists"
|
||||
import { freeAgentPosts } from "../../graphql/queries/freeAgentPosts"
|
||||
import { userLean } from "../../graphql/queries/userLean"
|
||||
import { hideFreeAgentPost } from "../../graphql/mutations/hideFreeAgentPost"
|
||||
import useWindowDimensions from "../../hooks/useWindowDimensions"
|
||||
|
||||
const FreeAgentBrowser = () => {
|
||||
const [successMsg, setSuccessMsg] = useState(null)
|
||||
const [errorMsg, setErrorMsg] = useState(null)
|
||||
const [showForm, setShowForm] = useState(false)
|
||||
const [filter, setFilter] = useState({
|
||||
weapon: "",
|
||||
playstyle: "",
|
||||
region: "",
|
||||
})
|
||||
|
||||
const { containerWidth } = useWindowDimensions()
|
||||
|
||||
const {
|
||||
data: postsData,
|
||||
@@ -62,12 +80,7 @@ const FreeAgentBrowser = () => {
|
||||
const millisecondsToHours = milliseconds =>
|
||||
Math.ceil(milliseconds / (1000 * 60 * 60))
|
||||
|
||||
const freeAgentPostArray = postsData.freeAgentPosts.filter(
|
||||
post => !post.hidden
|
||||
)
|
||||
|
||||
const ButtonHeader = () => {
|
||||
if (showForm) return null
|
||||
if (!userData.user)
|
||||
return <Message>Please log in to submit your own free agent post</Message>
|
||||
|
||||
@@ -93,91 +106,188 @@ const FreeAgentBrowser = () => {
|
||||
: "New free agent post"
|
||||
|
||||
return (
|
||||
<div style={{ float: "right" }}>
|
||||
<Button.Group widths="1">
|
||||
<Button onClick={() => setShowForm(true)}>{buttonText}</Button>
|
||||
{ownFAPost && (
|
||||
<span style={{ marginLeft: "0.3em" }}>
|
||||
<Modal
|
||||
basic
|
||||
size="small"
|
||||
closeIcon
|
||||
trigger={<Button negative>Delete your post</Button>}
|
||||
>
|
||||
<Header
|
||||
icon="trash alternate"
|
||||
content="Delete your free agent post?"
|
||||
/>
|
||||
<Modal.Content>
|
||||
<p>
|
||||
Please note you can't submit a new one before a week has
|
||||
passed.
|
||||
</p>
|
||||
</Modal.Content>
|
||||
<Modal.Actions>
|
||||
<Button
|
||||
inverted
|
||||
color="red"
|
||||
onClick={() => hideFreeAgentPostMutation()}
|
||||
>
|
||||
Yes
|
||||
</Button>
|
||||
</Modal.Actions>
|
||||
</Modal>
|
||||
</span>
|
||||
<Modal
|
||||
basic
|
||||
size="small"
|
||||
closeIcon
|
||||
trigger={<Button negative>Delete your post</Button>}
|
||||
>
|
||||
<Header
|
||||
icon="trash alternate"
|
||||
content="Delete your free agent post?"
|
||||
/>
|
||||
<Modal.Content>
|
||||
<p>
|
||||
Please note you can't submit a new one before a week has passed.
|
||||
</p>
|
||||
</Modal.Content>
|
||||
<Modal.Actions>
|
||||
<Button
|
||||
inverted
|
||||
color="red"
|
||||
onClick={() => hideFreeAgentPostMutation()}
|
||||
>
|
||||
Yes
|
||||
</Button>
|
||||
</Modal.Actions>
|
||||
</Modal>
|
||||
)}
|
||||
</div>
|
||||
</Button.Group>
|
||||
)
|
||||
}
|
||||
|
||||
const FilterDropdowns = () => {
|
||||
const playstyleOptions = [
|
||||
{ key: "ALL", text: "all", value: "ALL" },
|
||||
{ key: "FRONTLINE", text: "Frontline/Slayer", value: "FRONTLINE" },
|
||||
{ key: "MIDLINE", text: "Midline/Support", value: "MIDLINE" },
|
||||
{ key: "BACKLINE", text: "Backline/Anchor", value: "BACKLINE" },
|
||||
]
|
||||
const regionOptions = [
|
||||
{ key: "EUROPE", text: "Europe", value: "EUROPE" },
|
||||
{ key: "AMERICAS", text: "The Americas", value: "AMERICAS" },
|
||||
{ key: "AU/NZ", text: "Oceania", value: "AU/NZ" },
|
||||
{ key: "OTHER", text: "Other", value: "OTHER" },
|
||||
]
|
||||
|
||||
return (
|
||||
<>
|
||||
Show posts by{" "}
|
||||
<Dropdown
|
||||
upward
|
||||
floating
|
||||
inline
|
||||
options={playstyleOptions}
|
||||
defaultValue="ALL"
|
||||
/>{" "}
|
||||
roles.
|
||||
<Header>Filter free agents</Header>
|
||||
<Form>
|
||||
<Form.Field>
|
||||
<label>Weapon</label>
|
||||
<WeaponDropdown
|
||||
clearable
|
||||
value={filter.weapon}
|
||||
onChange={(e, { value }) =>
|
||||
setFilter({ ...filter, weapon: value })
|
||||
}
|
||||
/>
|
||||
</Form.Field>
|
||||
<Form.Field>
|
||||
<label>Playstyle</label>
|
||||
<Dropdown
|
||||
options={playstyleOptions}
|
||||
placeholder="Choose playstyle"
|
||||
selection
|
||||
closeOnEscape
|
||||
clearable
|
||||
value={filter.playstyle}
|
||||
onChange={(e, { value }) =>
|
||||
setFilter({ ...filter, playstyle: value })
|
||||
}
|
||||
style={{ width: "270px" }}
|
||||
/>
|
||||
</Form.Field>
|
||||
<Form.Field>
|
||||
<label>Region</label>
|
||||
<Dropdown
|
||||
options={regionOptions}
|
||||
placeholder="Choose region"
|
||||
selection
|
||||
closeOnEscape
|
||||
clearable
|
||||
value={filter.region}
|
||||
onChange={(e, { value }) =>
|
||||
setFilter({ ...filter, region: value })
|
||||
}
|
||||
style={{ width: "270px" }}
|
||||
/>
|
||||
</Form.Field>
|
||||
</Form>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const NoPostsText = () => {
|
||||
if (showForm) return null
|
||||
|
||||
if (
|
||||
filter.weapon === "" &&
|
||||
filter.playstyle === "" &&
|
||||
filter.region === ""
|
||||
) {
|
||||
return <>No free agents at the moment. Be the first one!</>
|
||||
}
|
||||
|
||||
return <>No free agents found matching the criteria.</>
|
||||
}
|
||||
|
||||
const freeAgentPostArray = postsData.freeAgentPosts.filter(post => {
|
||||
if (post.hidden) return false
|
||||
|
||||
if (filter.weapon) {
|
||||
if (post.discord_user.weapons.indexOf(filter.weapon) === -1) return false
|
||||
}
|
||||
|
||||
if (filter.playstyle) {
|
||||
if (post.playstyles.indexOf(filter.playstyle) === -1) return false
|
||||
}
|
||||
|
||||
if (filter.region) {
|
||||
if (!post.discord_user.country) {
|
||||
if (filter.region === "OTHER") return true
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
const continentCode = continents[post.discord_user.country]
|
||||
|
||||
if (filter.region === "EUROPE" && continentCode !== "EU") return false
|
||||
else if (
|
||||
filter.region === "AMERICAS" &&
|
||||
continentCode !== "NA" &&
|
||||
continentCode !== "SA"
|
||||
)
|
||||
return false
|
||||
else if (filter.region === "AU/NZ" && continentCode !== "OC") return false
|
||||
else if (
|
||||
filter.region === "OTHER" &&
|
||||
continentCode !== "AF" &&
|
||||
continentCode !== "AN" &&
|
||||
continentCode !== "AS" &&
|
||||
continentCode !== "OC"
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
return (
|
||||
<>
|
||||
{successMsg && <Message success>{successMsg}</Message>}
|
||||
{errorMsg && <Message error>{errorMsg}</Message>}
|
||||
<ButtonHeader />
|
||||
{showForm && (
|
||||
{showForm ? (
|
||||
<FAPostForm
|
||||
handleSuccess={handleSuccess}
|
||||
handleError={handleError}
|
||||
hideForm={() => setShowForm(false)}
|
||||
existingFAPost={ownFAPost}
|
||||
/>
|
||||
) : (
|
||||
<Grid stackable>
|
||||
<Grid.Column floated={"left"} width={8}>
|
||||
{!showForm && <FilterDropdowns />}
|
||||
</Grid.Column>
|
||||
<Grid.Column
|
||||
floated={containerWidth < 723 ? null : "right"}
|
||||
width={8}
|
||||
>
|
||||
<ButtonHeader />
|
||||
</Grid.Column>
|
||||
</Grid>
|
||||
)}
|
||||
<>
|
||||
{freeAgentPostArray.length > 0 ? (
|
||||
<>
|
||||
<FilterDropdowns />
|
||||
{/*<FreeAgentTable FAArray={freeAgentPostArray} />*/}
|
||||
<div style={{ marginTop: "1em" }}>
|
||||
<FreeAgentTable
|
||||
FAArray={Array(100).fill(freeAgentPostArray[0])}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<>No free agents at the moment. Be the first one!</>
|
||||
)}
|
||||
<div style={{ marginTop: "2em" }}>
|
||||
{freeAgentPostArray.length > 0 ? (
|
||||
<FreeAgentTable FAArray={freeAgentPostArray} />
|
||||
) : (
|
||||
<NoPostsText />
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
</>
|
||||
)
|
||||
|
||||
242
react-ui/src/utils/lists.js
vendored
242
react-ui/src/utils/lists.js
vendored
@@ -240,6 +240,248 @@ export const countries = [
|
||||
{ code: "zw", name: "Zimbabwe" },
|
||||
]
|
||||
|
||||
export const continents = {
|
||||
af: "AS",
|
||||
ax: "EU",
|
||||
al: "EU",
|
||||
dz: "AF",
|
||||
as: "OC",
|
||||
ad: "EU",
|
||||
ao: "AF",
|
||||
ai: "NA",
|
||||
ag: "NA",
|
||||
ar: "SA",
|
||||
am: "AS",
|
||||
aw: "NA",
|
||||
au: "OC",
|
||||
at: "EU",
|
||||
az: "AS",
|
||||
bs: "NA",
|
||||
bh: "AS",
|
||||
bd: "AS",
|
||||
bb: "NA",
|
||||
by: "EU",
|
||||
be: "EU",
|
||||
bz: "NA",
|
||||
bj: "AF",
|
||||
bm: "NA",
|
||||
bt: "AS",
|
||||
bo: "SA",
|
||||
ba: "EU",
|
||||
bw: "AF",
|
||||
bv: "AN",
|
||||
br: "SA",
|
||||
io: "AS",
|
||||
bn: "AS",
|
||||
bg: "EU",
|
||||
bf: "AF",
|
||||
bi: "AF",
|
||||
kh: "AS",
|
||||
cm: "AF",
|
||||
ca: "NA",
|
||||
cv: "AF",
|
||||
ky: "NA",
|
||||
cf: "AF",
|
||||
td: "AF",
|
||||
cl: "SA",
|
||||
cn: "AS",
|
||||
cx: "AS",
|
||||
cc: "AS",
|
||||
co: "SA",
|
||||
km: "AF",
|
||||
cg: "AF",
|
||||
cd: "AF",
|
||||
ck: "OC",
|
||||
cr: "NA",
|
||||
ci: "AF",
|
||||
hr: "EU",
|
||||
cu: "NA",
|
||||
cy: "EU",
|
||||
cz: "EU",
|
||||
dk: "EU",
|
||||
dj: "AF",
|
||||
dm: "NA",
|
||||
do: "NA",
|
||||
ec: "SA",
|
||||
eg: "AF",
|
||||
sv: "NA",
|
||||
gq: "AF",
|
||||
er: "AF",
|
||||
ee: "EU",
|
||||
et: "AF",
|
||||
fk: "SA",
|
||||
fo: "EU",
|
||||
fj: "OC",
|
||||
fi: "EU",
|
||||
fr: "EU",
|
||||
gf: "SA",
|
||||
pf: "OC",
|
||||
tf: "AN",
|
||||
ga: "AF",
|
||||
gm: "AF",
|
||||
ge: "AS",
|
||||
de: "EU",
|
||||
gh: "AF",
|
||||
gi: "EU",
|
||||
gr: "EU",
|
||||
gl: "NA",
|
||||
gd: "NA",
|
||||
gp: "NA",
|
||||
gu: "OC",
|
||||
gt: "NA",
|
||||
gn: "AF",
|
||||
gw: "AF",
|
||||
gy: "SA",
|
||||
ht: "NA",
|
||||
hm: "AN",
|
||||
va: "EU",
|
||||
hn: "NA",
|
||||
hk: "AS",
|
||||
hu: "EU",
|
||||
is: "EU",
|
||||
in: "AS",
|
||||
id: "AS",
|
||||
ir: "AS",
|
||||
iq: "AS",
|
||||
ie: "EU",
|
||||
il: "AS",
|
||||
it: "EU",
|
||||
jm: "NA",
|
||||
jp: "AS",
|
||||
jo: "AS",
|
||||
kz: "AS",
|
||||
ke: "AF",
|
||||
ki: "OC",
|
||||
kp: "AS",
|
||||
kr: "AS",
|
||||
kw: "AS",
|
||||
kg: "AS",
|
||||
la: "AS",
|
||||
lv: "EU",
|
||||
lb: "AS",
|
||||
ls: "AF",
|
||||
lr: "AF",
|
||||
ly: "AF",
|
||||
li: "EU",
|
||||
lt: "EU",
|
||||
lu: "EU",
|
||||
mo: "AS",
|
||||
mk: "EU",
|
||||
mg: "AF",
|
||||
mw: "AF",
|
||||
my: "AS",
|
||||
mv: "AS",
|
||||
ml: "AF",
|
||||
mt: "EU",
|
||||
mh: "OC",
|
||||
mq: "NA",
|
||||
mr: "AF",
|
||||
mu: "AF",
|
||||
yt: "AF",
|
||||
mx: "NA",
|
||||
fm: "OC",
|
||||
md: "EU",
|
||||
mc: "EU",
|
||||
mn: "AS",
|
||||
me: "EU",
|
||||
ms: "NA",
|
||||
ma: "AF",
|
||||
mz: "AF",
|
||||
mm: "AS",
|
||||
na: "AF",
|
||||
nr: "OC",
|
||||
np: "AS",
|
||||
nl: "EU",
|
||||
nc: "OC",
|
||||
nz: "OC",
|
||||
ni: "NA",
|
||||
ne: "AF",
|
||||
ng: "AF",
|
||||
nu: "OC",
|
||||
nf: "OC",
|
||||
mp: "OC",
|
||||
no: "EU",
|
||||
om: "AS",
|
||||
pk: "AS",
|
||||
pw: "OC",
|
||||
ps: "AS",
|
||||
pa: "NA",
|
||||
pg: "OC",
|
||||
py: "SA",
|
||||
pe: "SA",
|
||||
ph: "AS",
|
||||
pn: "OC",
|
||||
pl: "EU",
|
||||
pt: "EU",
|
||||
pr: "NA",
|
||||
qa: "AS",
|
||||
re: "AF",
|
||||
ro: "EU",
|
||||
ru: "EU",
|
||||
rw: "AF",
|
||||
sh: "AF",
|
||||
kn: "NA",
|
||||
lc: "NA",
|
||||
pm: "NA",
|
||||
vc: "NA",
|
||||
ws: "OC",
|
||||
sm: "EU",
|
||||
st: "AF",
|
||||
sa: "AS",
|
||||
sn: "AF",
|
||||
rs: "EU",
|
||||
sc: "AF",
|
||||
sl: "AF",
|
||||
sg: "AS",
|
||||
sk: "EU",
|
||||
si: "EU",
|
||||
sb: "OC",
|
||||
so: "AF",
|
||||
za: "AF",
|
||||
gs: "AN",
|
||||
es: "EU",
|
||||
lk: "AS",
|
||||
sd: "AF",
|
||||
sr: "SA",
|
||||
sj: "EU",
|
||||
sz: "AF",
|
||||
se: "EU",
|
||||
ch: "EU",
|
||||
sy: "AS",
|
||||
tw: "AS",
|
||||
tj: "AS",
|
||||
tz: "AF",
|
||||
th: "AS",
|
||||
tl: "OC",
|
||||
tg: "AF",
|
||||
tk: "OC",
|
||||
to: "OC",
|
||||
tt: "NA",
|
||||
tn: "AF",
|
||||
tr: "AS",
|
||||
tm: "AS",
|
||||
tc: "NA",
|
||||
tv: "OC",
|
||||
ug: "AF",
|
||||
ua: "EU",
|
||||
ae: "AS",
|
||||
gb: "EU",
|
||||
us: "NA",
|
||||
um: "OC",
|
||||
uy: "SA",
|
||||
uz: "AS",
|
||||
vu: "OC",
|
||||
ve: "SA",
|
||||
vn: "AS",
|
||||
vg: "NA",
|
||||
vi: "NA",
|
||||
wf: "OC",
|
||||
eh: "AF",
|
||||
ye: "AS",
|
||||
zm: "AF",
|
||||
zw: "AF",
|
||||
}
|
||||
|
||||
export const modes = [
|
||||
"",
|
||||
"Splat Zones",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { UserInputError, gql } = require("apollo-server-express")
|
||||
const FAPost = require("../models/fapost")
|
||||
const sendFAPostToDiscord = require("../utils/webhook")
|
||||
|
||||
const canVCValues = ["YES", "USUALLY", "SOMETIMES", "NO"]
|
||||
const playstyleValues = ["FRONTLINE", "MIDLINE", "BACKLINE"]
|
||||
@@ -149,6 +150,13 @@ const resolvers = {
|
||||
})
|
||||
})
|
||||
|
||||
args.user = ctx.user
|
||||
try {
|
||||
await sendFAPostToDiscord(args)
|
||||
} catch (error) {
|
||||
throw new UserInputError(error.error)
|
||||
}
|
||||
|
||||
return true
|
||||
},
|
||||
updateFreeAgentPost: async (root, args, ctx) => {
|
||||
|
||||
@@ -177,6 +177,7 @@ maps = [
|
||||
|
||||
abilities = {
|
||||
"": None,
|
||||
"-": None,
|
||||
"Last-Ditch Effort": "LDE",
|
||||
"Last Ditch Effort": "LDE",
|
||||
"Ink Saver (Sub)": "ISS",
|
||||
|
||||
57
utils/webhook.js
Normal file
57
utils/webhook.js
Normal file
@@ -0,0 +1,57 @@
|
||||
const webhook = require("webhook-discord")
|
||||
|
||||
function sendFAPostToDiscord(args) {
|
||||
const Hook = new webhook.Webhook(process.env.FA_WEBHOOK_URL)
|
||||
|
||||
const msg = new webhook.MessageBuilder()
|
||||
.setName(args.user.username)
|
||||
.setColor("#2c5364")
|
||||
.addField("", `<@${args.user.discord_id}>`)
|
||||
|
||||
if (args.can_vc) {
|
||||
const can_vc = args.can_vc.toLowerCase()
|
||||
msg.addField("Voice Chat", can_vc[0].toUpperCase() + can_vc.slice(1))
|
||||
}
|
||||
|
||||
if (args.playstyles) {
|
||||
msg.addField(
|
||||
"Playstyle",
|
||||
args.playstyles.map(playstyle => playstyle.toLowerCase()).join(", ")
|
||||
)
|
||||
}
|
||||
|
||||
if (args.user.weapons) {
|
||||
msg.addField("Weapons", args.user.weapons.join(", "))
|
||||
}
|
||||
|
||||
if (args.past_experience) {
|
||||
msg.addField("Past experience", args.past_experience)
|
||||
}
|
||||
|
||||
if (args.activity) {
|
||||
msg.addField("Activity", args.activity)
|
||||
}
|
||||
|
||||
if (args.looking_for) {
|
||||
msg.addField("Looking for", args.looking_for)
|
||||
}
|
||||
|
||||
if (args.description) {
|
||||
msg.addField("Description", args.description)
|
||||
}
|
||||
|
||||
if (args.user.twitter_name) {
|
||||
msg.setAvatar(`https://avatars.io/twitter/${args.user.twitter_name}`)
|
||||
}
|
||||
|
||||
if (args.user.country) {
|
||||
msg.setText(
|
||||
`:flag_${args.user.country}:${args.user.top500 &&
|
||||
" <:top500:594551830764191763>"}`
|
||||
)
|
||||
}
|
||||
|
||||
return Hook.send(msg)
|
||||
}
|
||||
|
||||
module.exports = sendFAPostToDiscord
|
||||
Reference in New Issue
Block a user