Add an animation to the register/cancel button
Hopefully this will stop people mashing the button and DoS'ing shittyserver
This commit is contained in:
parent
2ae1cbae84
commit
5f373571af
5 changed files with 41 additions and 4 deletions
|
@ -95,6 +95,7 @@
|
||||||
"strict-event-emitter-types": "^2.0.0",
|
"strict-event-emitter-types": "^2.0.0",
|
||||||
"style-loader": "1.0.0",
|
"style-loader": "1.0.0",
|
||||||
"terser-webpack-plugin": "1.4.1",
|
"terser-webpack-plugin": "1.4.1",
|
||||||
|
"three-dots": "^0.2.0",
|
||||||
"ts-pnp": "1.1.4",
|
"ts-pnp": "1.1.4",
|
||||||
"typescript": "3.7.2",
|
"typescript": "3.7.2",
|
||||||
"url-loader": "2.1.0",
|
"url-loader": "2.1.0",
|
||||||
|
|
|
@ -110,6 +110,7 @@ export class WebRTCStreamer extends Streamer {
|
||||||
const data = JSON.parse(evt.data);
|
const data = JSON.parse(evt.data);
|
||||||
switch (data.kind) {
|
switch (data.kind) {
|
||||||
case "HELLO":
|
case "HELLO":
|
||||||
|
this.onStateChange("CONNECTING");
|
||||||
console.log("WS HELLO, our client ID is " + data.connectionId);
|
console.log("WS HELLO, our client ID is " + data.connectionId);
|
||||||
this.dispatch(BroadcastState.setWsID(data.connectionId));
|
this.dispatch(BroadcastState.setWsID(data.connectionId));
|
||||||
if (this.state !== "HELLO") {
|
if (this.state !== "HELLO") {
|
||||||
|
@ -258,6 +259,11 @@ export class WebRTCStreamer extends Streamer {
|
||||||
return "NOT_CONNECTED";
|
return "NOT_CONNECTED";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log(
|
||||||
|
"Relevant values: ",
|
||||||
|
this.pc?.iceConnectionState,
|
||||||
|
this.ws?.readyState
|
||||||
|
);
|
||||||
switch (this.pc.iceConnectionState) {
|
switch (this.pc.iceConnectionState) {
|
||||||
case "connected":
|
case "connected":
|
||||||
case "completed":
|
case "completed":
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useRef, useEffect } from "react";
|
import React, { useRef, useEffect, useState } from "react";
|
||||||
import { useDispatch, useSelector } from "react-redux";
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import Clock from "react-live-clock";
|
import Clock from "react-live-clock";
|
||||||
|
|
||||||
|
@ -40,6 +40,17 @@ export function NavBar() {
|
||||||
const broadcastState = useSelector((state: RootState) => state.broadcast);
|
const broadcastState = useSelector((state: RootState) => state.broadcast);
|
||||||
const settings = useSelector((state: RootState) => state.settings);
|
const settings = useSelector((state: RootState) => state.settings);
|
||||||
const redirect_url = encodeURIComponent(window.location.toString());
|
const redirect_url = encodeURIComponent(window.location.toString());
|
||||||
|
|
||||||
|
const [connectButtonAnimating, setConnectButtonAnimating] = useState(false);
|
||||||
|
|
||||||
|
const prevRegistrationStage = useRef(broadcastState.stage);
|
||||||
|
useEffect(() => {
|
||||||
|
if (broadcastState.stage !== prevRegistrationStage.current) {
|
||||||
|
setConnectButtonAnimating(false);
|
||||||
|
}
|
||||||
|
prevRegistrationStage.current = broadcastState.stage;
|
||||||
|
}, [broadcastState.stage]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="navbar-nav navbar-left">
|
<div className="navbar-nav navbar-left">
|
||||||
|
@ -77,8 +88,9 @@ export function NavBar() {
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li
|
<li
|
||||||
className="btn btn-outline-light rounded-0 pt-2 pb-1 nav-item nav-link"
|
className="btn btn-outline-light rounded-0 pt-2 pb-1 nav-item nav-link connect"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
setConnectButtonAnimating(true);
|
||||||
switch (broadcastState.stage) {
|
switch (broadcastState.stage) {
|
||||||
case "NOT_REGISTERED":
|
case "NOT_REGISTERED":
|
||||||
dispatch(BroadcastState.goOnAir());
|
dispatch(BroadcastState.goOnAir());
|
||||||
|
@ -89,8 +101,14 @@ export function NavBar() {
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{broadcastState.stage === "NOT_REGISTERED" && "Register for show"}
|
{connectButtonAnimating ? (
|
||||||
{broadcastState.stage === "REGISTERED" && "Cancel registration"}
|
<span className="dot-pulse" />
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
{broadcastState.stage === "NOT_REGISTERED" && "Register for show"}
|
||||||
|
{broadcastState.stage === "REGISTERED" && "Cancel registration"}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</li>
|
</li>
|
||||||
{settings.enableRecording && (
|
{settings.enableRecording && (
|
||||||
<li className="nav-item nav-link">
|
<li className="nav-item nav-link">
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
/* Stuff to get the nav to collapse at 991px (when the menu collapses)
|
/* Stuff to get the nav to collapse at 991px (when the menu collapses)
|
||||||
* Taken from http://stackoverflow.com/a/36289507/995325 */
|
* Taken from http://stackoverflow.com/a/36289507/995325 */
|
||||||
|
|
||||||
|
$dot-color: #fff;
|
||||||
|
@import "~three-dots/sass/three-dots";
|
||||||
|
|
||||||
@media (max-width: 991px) {
|
@media (max-width: 991px) {
|
||||||
.navbar-header {
|
.navbar-header {
|
||||||
float: none;
|
float: none;
|
||||||
|
@ -251,3 +254,7 @@
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-link.connect {
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
|
|
|
@ -10427,6 +10427,11 @@ text-table@0.2.0, text-table@^0.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||||
|
|
||||||
|
three-dots@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/three-dots/-/three-dots-0.2.0.tgz#a854461cfdcaae829587a72d7693b0a774da05cb"
|
||||||
|
integrity sha512-UIbDvl8F1qjoBigeEjcl2h101Frx+CaWCJSr7xabRh6BjFUkkJU1GW2jzmt0IQP7yVAOKW9q5bMj7Tafz0pP1g==
|
||||||
|
|
||||||
throat@^4.0.0:
|
throat@^4.0.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
|
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
|
||||||
|
|
Loading…
Reference in a new issue