177 lines
5.3 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { Component } from "react";
import { NavLink } from "react-router-dom";
import Modal from "react-modal";
import "../assets/stylesheets/navbar.scss";
Modal.setAppElement("#root");
export default class NavBar extends Component {
constructor(props) {
super(props);
this.state = {
modalOpen_activeArm: false,
modalOpacity: 0,
};
this.openModal = this.openModal.bind(this);
this.closeModal = this.closeModal.bind(this);
}
componentDidMount() {
let path = window.location.pathname;
if (path.includes("statistics")) {
document.getElementById("statistics").style.backgroundColor = "#007CBE";
document.getElementById("statistics-s").style.color = "white";
} else if (path.includes("map")) {
document.getElementById("map").style.backgroundColor = "#007CBE";
document.getElementById("map-s").style.color = "white";
} else if (path.includes("cable")) {
document.getElementById("browse").style.backgroundColor = "#007CBE";
document.getElementById("browse-s").style.color = "white";
} else if (path.includes("settings")) {
document.getElementById("settings").style.backgroundColor = "#007CBE";
document.getElementById("settings-s").style.color = "white";
} else {
document.getElementById("browse").style.backgroundColor = "#007CBE";
document.getElementById("browse-s").style.color = "white";
}
this.props.socket.addEventListener("message", this.handleMessage);
}
componentWillUnmount() {
this.props.socket.removeEventListener("message", this.handleMessage);
}
handleMessage = (event) => {
try {
const message = JSON.parse(event.data);
if (message.type === "mode") {
let mode = JSON.parse(message.data).mode.toLowerCase();
console.log("Current Mode: " + mode);
if (mode === "idle") {
setTimeout(() => {
if (mode === "idle") {
this.closeModal("modalOpen_activeArm");
}
}, 3000);
} else {
this.openModal("modalOpen_activeArm");
}
}
} catch (error) {
console.error("");
}
};
openModal = (modal) => {
this.setState({ [modal]: true }, () => {
setTimeout(() => this.setState({ modalOpacity: 1 }), 10);
});
};
closeModal = (modal) => {
this.setState({ modalOpacity: 0 }, () => {
setTimeout(() => this.setState({ [modal]: false }), 300);
});
};
returnCable = () => {
this.props.socket.send(
`{"type": "cable_get","call": "send","data": {"tray": 0}}`
);
};
cancelAction = () => {
this.props.socket.send(
`{"type": "cancel_action","call": "request","data": {}}`
);
};
render() {
const { modalOpen_activeArm, modalOpacity } = this.state;
const modalStyle = {
content: {
opacity: modalOpacity,
transition: "opacity 300ms ease-in-out",
top: "50%",
left: "50%",
right: "auto",
bottom: "auto",
marginRight: "-50%",
width: "auto",
height: "auto",
transform: "translate(-50%, -50%)",
overflow: "hidden",
display: "flex",
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
borderRadius: "20px",
background:
"linear-gradient(-30deg, rgb(187, 194, 236) 0%, rgba(255, 255, 255, 1) 100%)",
boxShadow: "0 0 20px rgba(0, 0, 0, 0.5)",
minWidth: "30%",
minHeight: "30%",
},
overlay: {
opacity: modalOpacity,
transition: "opacity 300ms ease-in-out",
backgroundColor: "rgba(255, 255, 255, 0.15)",
backdropFilter: "blur(5px)",
},
};
return (
<div className="navbar">
<div className="navbar-top">
<div className="navbar-top-container">
<div className="navbar-top-hamburger"></div>
<NavLink className="navbar-settings" id="settings" to="/settings">
<span id="settings-s"></span>
</NavLink>
</div>
<h1>Jukebox</h1>
<ol className="navbar-list">
<NavLink className="navbar-list-item" id="browse" to="/browse">
<span id="browse-s">🛍 Browse</span>
</NavLink>
<NavLink className="navbar-list-item" id="map" to="/map">
<span id="map-s">🗺 Map</span>
</NavLink>
<NavLink
className="navbar-list-item"
id="statistics"
to="/statistics"
>
<span id="statistics-s">📊 Statistics</span>
</NavLink>
</ol>
</div>
<div className="navbar-return" onClick={() => this.returnCable()}>
<span id="browse-s">Return Cable</span>
</div>
<Modal
isOpen={modalOpen_activeArm}
contentLabel="show"
style={modalStyle}
>
<div className="modal-container">
<div className="modal-title">
<span></span>
<span>Arm in Motion</span>
</div>
<div className="modal-body">
<span>Please stay clear of the arm.</span>
</div>
<div className="modal-closeX" onClick={() => this.cancelAction()}>
<span>Cancel Action</span>
</div>
</div>
</Modal>
</div>
);
}
}