From 6f7a038c5e28087fc1c9532c54f4f6e517892966 Mon Sep 17 00:00:00 2001 From: danbulant Date: Sat, 15 Feb 2020 22:26:47 +0100 Subject: [PATCH] Show login page and hide it after 15 seconds of inactivity --- client/src/renderers/login.ts | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 client/src/renderers/login.ts diff --git a/client/src/renderers/login.ts b/client/src/renderers/login.ts new file mode 100644 index 0000000..3da4c87 --- /dev/null +++ b/client/src/renderers/login.ts @@ -0,0 +1,56 @@ +import RenderDef from '../defs/renderer'; +import RenderStates from '../defs/renderStates'; +import Welcome from './welcome'; +import './styles/login.css'; + +class Login implements RenderDef { + name = "login"; + state = RenderStates.Init; + removePrevious = true; + + element:HTMLElement = null; + listener:NodeJS.Timeout = null; + + keyListener() { + clearTimeout(this.listener); + this.listener = setTimeout(() => { this.showWelcome() }, 15000); + } + + render(){ + if(!this.element)throw new Error("Cannot render without preparing login"); + + console.log("Login renderer active"); + + this.listener = setTimeout(() => { this.showWelcome() }, 15000); + document.addEventListener('keypress', this.keyListener, false); + + document.body.appendChild(this.element); + } + + showWelcome(){ + var w = new Welcome(); + w.prepare().then(()=>{ + this.eject(); + w.render(); + }); + } + + async prepare(){ + this.element = document.createElement("div"); + var el = this.element; + + el.innerText = "Pls login"; + el.className = "login"; + + console.log("Login renderer prepared"); + } + eject(){ + console.log("Login renderer ejected"); + this.state = RenderStates.Ejected; + + document.body.removeChild(this.element); + document.removeEventListener('keypress', this.keyListener); + } +} + +export default Login; \ No newline at end of file