202202
203203// AJAX Helpers
204204
205+ let filter = false ;
206+
205207function deleteMessage ( id ) {
206208 return fetch ( `/messages/${ id } ` , {
207209 method : 'DELETE'
@@ -230,9 +232,12 @@ function updateMessage(message, id) {
230232
231233function renderMessages ( messages = [ ] ) {
232234 return messages
235+ . filter ( message => ! filter || message . flagged )
236+ // sort by id, desc. to sort asc, m1.id - m2.id
237+ . sort ( ( m1 , m2 ) => m2 . id - m1 . id )
233238 . map (
234239 message => `
235- <li>
240+ <li class=" ${ message . flagged ? "flagged" : "" } " >
236241 <p>
237242 <strong>${ message . id } </strong>
238243 ${ message . username } -
@@ -259,6 +264,7 @@ function refreshMessages(node) {
259264document . addEventListener ( 'DOMContentLoaded' , ( ) => {
260265 const messagesUl = document . querySelector ( '#messages' ) ;
261266 const newMessageForm = document . querySelector ( '#new-message' ) ;
267+ const filterButton = document . querySelector ( '#filter-messages' ) ;
262268
263269 // Every second, re-render the messages inside
264270 // of the ul#message node
@@ -274,6 +280,13 @@ document.addEventListener('DOMContentLoaded', () => {
274280 } ) . then ( ( ) => refreshMessages ( messagesUl ) ) ;
275281 } ) ;
276282
283+ filterButton . addEventListener ( 'click' , event => {
284+ event . preventDefault ( ) ;
285+ filter = ! filter ;
286+ filterButton . innerHTML = `View ${ filter ? "All" : "Flagged" } Messages` ;
287+ refreshMessages ( messagesUl )
288+ } )
289+
277290 // The `.delete-button`s are not on the page initially
278291 // or event after the dom content is loaded. Once they
279292 // appear, they're constantly replaced every second.
0 commit comments