Recently at work I needed to implement a message queue. I like the pattern and I think I will need it more often in the future. I recreated the message queue with a class for personal reference and study purposes.
I absolutely like some of the new features: for example proper ‘this’ binding with the arrow functions and parameter defaults in function.
Code
you can see the full code below, or get the example from my github account
/**
* MessageQueue create notification messages
*/
class MessageQueue {
/**
* constructor optional container and delay
*/
constructor(container = document.getElementById('messageContainer'), delay = 5000) {
this.messageQueue = [];
this.container = container;
this.delay = delay;
}
clearMessages() {
this.container.innerHTML = '';
}
displayMessages() {
let messageFrag = document.createElement('div');
// clear
this.clearMessages();
for (let index = 0; index < this.messageQueue.length; index++) {
let message = document.createTextNode(this.messageQueue[index].text);
let flash = document.createElement('div');
flash.classList.add('flash-message');
flash.classList.add(this.messageQueue[index].msgType);
flash.appendChild(message);
messageFrag.appendChild(flash);
}
this.container.appendChild(messageFrag);
}
remove() {
this.messageQueue.shift();
this.displayMessages();
}
/**
* add messages optional type (CSS class)
*/
add(message, type = 'error') {
let msg = {
text: message,
index: this.messageQueue.length,
msgType: type,
};
setTimeout(() => this.remove(), this.delay);
this.messageQueue.push(msg);
this.displayMessages();
}
}
Feel free to modify and extend the code, to run the code you need to install babel-cli and run the following watch statement
babel messagequeue.js --watch --out-file messagequeue-compiled.js

