diff --git a/public/js/app.js b/public/js/app.js index 81a11de..dd04c87 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -67,7 +67,7 @@ const APP = { */ if (!document.body.dataset.channel || document.body.dataset.channel !== channel_id) { - const previous = document.body.dataset.channel; + const previous = typeof document.body.dataset.channel === 'string' ? document.body.dataset.channel : undefined; /* console.dir({ @@ -80,24 +80,38 @@ const APP = { }); */ - document.body.dataset.channel = channel_id; + if ( channel_id ) { + document.body.dataset.channel = channel_id; + } + else { + delete document.body.dataset.channel; + } - this._emit( 'channel_changed', { - previous, - channel_id - }); + const target_channel_id = channel_id ?? this.CHANNELS.CHANNEL_LIST[0]?.id; - if (!channel_id) { - const first_channel_id = this.CHANNELS.CHANNEL_LIST[0]?.id; - if (first_channel_id) { - window.location.hash = `/chat/channel/${first_channel_id}`; // TODO: allow a different default than chat + // TODO: allow a different default than chat + const hash_target = '/chat' + ( target_channel_id ? `/channel/${ target_channel_id }` : '' ); + + if ( window.location.hash?.slice( 1 ) !== hash_target ) { + if ( previous !== target_channel_id ) { + this._emit( 'channel_changed', { + previous, + channel_id: target_channel_id + }); } + + window.location.hash = hash_target; } } if (!document.body.dataset.view || document.body.dataset.view !== view) { - const previous = document.body.dataset.view; - document.body.dataset.view = view; + const previous = typeof document.body.dataset.view === 'string' ? document.body.dataset.view : undefined; + if ( view ) { + document.body.dataset.view = view; + } + else { + delete document.body.dataset.view; + } /* console.dir({ @@ -236,10 +250,11 @@ const APP = { _update_channels_timeout: undefined, CHANNEL_LIST: [], - update: async () => { + update: async ( force = false ) => { const now = new Date(); const time_since_last_update = now - (APP.CHANNELS._last_channel_update ?? 0); - if (time_since_last_update < UPDATE_CHANNELS_FREQUENCY / 2) { + const sufficient_time_has_passed_since_last_update = time_since_last_update > UPDATE_CHANNELS_FREQUENCY / 2; + if ( !force && !sufficient_time_has_passed_since_last_update ) { return; } diff --git a/public/tabs/chat/channel_sidebar.html b/public/tabs/chat/channel_sidebar.html index b289723..a22b793 100644 --- a/public/tabs/chat/channel_sidebar.html +++ b/public/tabs/chat/channel_sidebar.html @@ -165,6 +165,12 @@ overflow: hidden; transition: all 0.5s; " + on_reply="(new_channel) => { + APP.CHANNELS.update(true); + document.getElementById('new-channel-name-input').value = ''; + document.getElementById('channel-create').style['height'] = '0'; + window.location.hash = `/chat/channel/${new_channel.id}`; + }" > - diff --git a/public/tabs/chat/chat.html b/public/tabs/chat/chat.html index 4a7f543..a3789cb 100644 --- a/public/tabs/chat/chat.html +++ b/public/tabs/chat/chat.html @@ -21,8 +21,8 @@