Implement info message

This commit is contained in:
Dennis Schoepf 2021-07-30 13:48:05 +02:00
parent 001a074c54
commit acdecc6e85
6 changed files with 150 additions and 9234 deletions

62
src/ui/info.ts Normal file
View file

@ -0,0 +1,62 @@
import store from '../store';
export interface InfoMessageType {
headline: string;
innerHTML: string;
}
export class InfoMessage {
infoMessage: HTMLElement;
infoMessageHeadline: HTMLElement;
infoMessageContents: HTMLElement;
infoMessageClose: HTMLElement;
backdrop: HTMLElement;
constructor() {
this.infoMessage = document.getElementById('info-message');
this.infoMessageHeadline = document.getElementById('info-message-headline');
this.infoMessageContents = document.getElementById('info-message-contents');
this.infoMessageClose = document.getElementById('info-message-close');
this.backdrop = document.getElementById('backdrop');
this.backdrop.addEventListener('click', this.onBackdropClick);
this.infoMessageClose.addEventListener('click', this.onCloseClick);
store.subscribe((state, prevState) => {
if (state.infoMessageShown) {
this.show();
} else {
this.hide();
}
if (state.infoMessages.length > prevState.infoMessages.length) {
const newMessage = state.infoMessages[state.infoMessages.length - 1];
this.setContents(newMessage.headline, newMessage.innerHTML);
store.setState({ infoMessageShown: true });
}
});
}
private setContents(headline: string, innerHTML: string) {
this.infoMessageHeadline.innerText = headline;
this.infoMessageContents.innerHTML = innerHTML;
}
private show() {
this.infoMessage.style.display = 'block';
this.backdrop.style.display = 'block';
}
private hide() {
this.infoMessage.style.display = 'none';
this.backdrop.style.display = 'none';
}
private onBackdropClick() {
store.setState({ infoMessageShown: false });
}
private onCloseClick() {
store.setState({ infoMessageShown: false });
}
}