From 6518c8e7a4d2487c0e31bd7e5c03f6bea9b6ecfb Mon Sep 17 00:00:00 2001 From: Lordmau5 Date: Fri, 17 Aug 2018 04:38:39 +0200 Subject: [PATCH] Fixed: Add pagination support to the emote menu's data loader (#507) * Fix emote menu not loading more than 100 subscription benefits * Implement @last support in .get Modify `curr_cursor` to use the new get @last modifier --- .../twitch-twilight/modules/chat/emote_menu.jsx | 13 +++++++++++-- src/utilities/object.js | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/sites/twitch-twilight/modules/chat/emote_menu.jsx b/src/sites/twitch-twilight/modules/chat/emote_menu.jsx index 49edab54..06dd92be 100644 --- a/src/sites/twitch-twilight/modules/chat/emote_menu.jsx +++ b/src/sites/twitch-twilight/modules/chat/emote_menu.jsx @@ -1535,7 +1535,7 @@ export default class EmoteMenu extends Module { } - async getData(sets, force) { + async getData(sets, force, cursor = null, nodes = []) { if ( this._data ) { if ( ! force && set_equals(sets, this._data_sets) ) return this._data; @@ -1551,6 +1551,7 @@ export default class EmoteMenu extends Module { query: SUB_STATUS, variables: { first: 100, + after: cursor, criteria: { filter: 'ALL' } @@ -1564,7 +1565,15 @@ export default class EmoteMenu extends Module { } const out = {}, - nodes = get('data.currentUser.subscriptionBenefits.edges.@each.node', data); + curr_nodes = get('data.currentUser.subscriptionBenefits.edges.@each.node', data), + has_next_page = get('data.currentUser.subscriptionBenefits.pageInfo.hasNextPage', data), + curr_cursor = get('data.currentUser.subscriptionBenefits.edges.@last.cursor', data); + + nodes = nodes.concat(curr_nodes); + + if (has_next_page) { + return this.getData(sets, force, curr_cursor, nodes); + } if ( nodes && nodes.length ) for(const node of nodes) { diff --git a/src/utilities/object.js b/src/utilities/object.js index cf70ffa0..5ed914f4 100644 --- a/src/utilities/object.js +++ b/src/utilities/object.js @@ -201,7 +201,9 @@ export function get(path, object) { break; - } else + } else if ( part === '@last' ) + object = object[object.length - 1]; + else object = object[path[i]]; if ( ! object )