1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-07-05 10:38:30 +00:00

4.0.0-rc12.6

* Fixed: Socket server not joining the correct room when using the new channel layout, causing some metadata to work incorrectly.
* Fixed: Featured Follow buttons not disappearing correctly when they are removed from a channel.
This commit is contained in:
SirStendec 2018-08-07 21:14:42 -04:00
parent 7b8c3617dc
commit 9cded8480e
4 changed files with 30 additions and 8 deletions

View file

@ -100,7 +100,7 @@ class FrankerFaceZ extends Module {
FrankerFaceZ.Logger = Logger; FrankerFaceZ.Logger = Logger;
const VER = FrankerFaceZ.version_info = { const VER = FrankerFaceZ.version_info = {
major: 4, minor: 0, revision: 0, extra: '-rc12.5', major: 4, minor: 0, revision: 0, extra: '-rc12.6',
commit: __git_commit__, commit: __git_commit__,
build: __webpack_hash__, build: __webpack_hash__,
toString: () => toString: () =>

View file

@ -689,7 +689,23 @@ export default class Metadata extends Module {
if ( el._ffz_popup ) if ( el._ffz_popup )
return el._ffz_destroy(); return el._ffz_destroy();
const listeners = [],
add_listener = cb => listeners.push(cb);
const destroy = el._ffz_destroy = () => { const destroy = el._ffz_destroy = () => {
for(const cb of listeners) {
try {
cb();
} catch(err) {
this.log.capture(err, {
tags: {
metadata: key
}
});
this.log.error('Error when running a callback for pop-up destruction for metadata:', key, err);
}
}
if ( el._ffz_outside ) if ( el._ffz_outside )
el._ffz_outside.destroy(); el._ffz_outside.destroy();
@ -725,7 +741,7 @@ export default class Metadata extends Module {
} }
} }
}, },
content: (t, tip) => def.popup.call(this, el._ffz_data, tip, () => refresh_fn(key)), content: (t, tip) => def.popup.call(this, el._ffz_data, tip, () => refresh_fn(key), add_listener),
onShow: (t, tip) => onShow: (t, tip) =>
setTimeout(() => { setTimeout(() => {
el._ffz_outside = new ClickOutside(tip.outer, destroy); el._ffz_outside = new ClickOutside(tip.outer, destroy);

View file

@ -5,6 +5,7 @@
// ============================================================================ // ============================================================================
import Module from 'utilities/module'; import Module from 'utilities/module';
import { get } from 'utilities/object';
import CHANNEL_QUERY from './channel_bar_query.gql'; import CHANNEL_QUERY from './channel_bar_query.gql';
@ -51,7 +52,7 @@ export default class ChannelBar extends Module {
updateChannelBar(inst) { updateChannelBar(inst) {
const login = inst.props.channelLogin; const login = get('props.data.user.login', inst);
if ( login !== inst._ffz_old_login ) { if ( login !== inst._ffz_old_login ) {
if ( inst._ffz_old_login ) if ( inst._ffz_old_login )
this.socket.unsubscribe(inst, `channel.${inst._ffz_old_login}`); this.socket.unsubscribe(inst, `channel.${inst._ffz_old_login}`);

View file

@ -50,7 +50,7 @@ export default class FeaturedFollow extends Module {
order: 150, order: 150,
button: true, button: true,
popup: async (data, tip) => { popup: async (data, tip, refresh_fn, add_callback) => {
const vue = this.resolve('vue'), const vue = this.resolve('vue'),
_featured_follow_vue = import(/* webpackChunkName: "featured-follow" */ './featured-follow.vue'), _featured_follow_vue = import(/* webpackChunkName: "featured-follow" */ './featured-follow.vue'),
_follows = this.getFollowsForLogin(data.channel.login); _follows = this.getFollowsForLogin(data.channel.login);
@ -61,7 +61,7 @@ export default class FeaturedFollow extends Module {
tip.element.classList.remove('tw-pd-1'); tip.element.classList.remove('tw-pd-1');
tip.element.classList.add('tw-balloon--lg'); tip.element.classList.add('tw-balloon--lg');
vue.component('featured-follow', featured_follows_vue.default); vue.component('featured-follow', featured_follows_vue.default);
return this.buildFeaturedFollowMenu(vue, data.channel.login, follows); return this.buildFeaturedFollowMenu(vue, data.channel.login, follows, add_callback);
}, },
label: data => { label: data => {
@ -71,7 +71,7 @@ export default class FeaturedFollow extends Module {
const follows = this.follow_data[data.channel.login]; const follows = this.follow_data[data.channel.login];
if (!follows || !Object.keys(follows).length) { if (!follows || !Object.keys(follows).length) {
if (!this.vueFeaturedFollow || !this.vueFeaturedFollow.data.hasUpdate) { if (!this.vueFeaturedFollow || !this.vueFeaturedFollow.data.hasUpdate) {
return ''; return null;
} }
} }
@ -127,7 +127,7 @@ export default class FeaturedFollow extends Module {
return follows; return follows;
} }
buildFeaturedFollowMenu(vue, login, follows) { buildFeaturedFollowMenu(vue, login, follows, add_close_callback) {
const vueEl = new vue.Vue({ const vueEl = new vue.Vue({
el: createElement('div'), el: createElement('div'),
render: h => this.vueFeaturedFollow = h('featured-follow', { render: h => this.vueFeaturedFollow = h('featured-follow', {
@ -139,7 +139,8 @@ export default class FeaturedFollow extends Module {
unfollowUser: id => this.unfollowUser(follows, id), unfollowUser: id => this.unfollowUser(follows, id),
updateNotificationStatus: (id, oldStatus) => this.updateNotificationStatus(follows, id, oldStatus), updateNotificationStatus: (id, oldStatus) => this.updateNotificationStatus(follows, id, oldStatus),
refresh: async () => { refresh: async () => {
if (!this.vueFeaturedFollow.data.hasUpdate) return; if ( ! this.vueFeaturedFollow || ! this.vueFeaturedFollow.data.hasUpdate )
return;
this.vueFeaturedFollow.data.follows = await this.getFollowsForLogin(login); this.vueFeaturedFollow.data.follows = await this.getFollowsForLogin(login);
this.vueFeaturedFollow.data.hasUpdate = false; this.vueFeaturedFollow.data.hasUpdate = false;
@ -151,6 +152,10 @@ export default class FeaturedFollow extends Module {
}), }),
}); });
add_close_callback(() => {
this.vueFeaturedFollow = null;
})
return vueEl.$el; return vueEl.$el;
} }