diff --git a/src/parser/classes/Tab.ts b/src/parser/classes/Tab.ts index 1e813260f..869aae9c0 100644 --- a/src/parser/classes/Tab.ts +++ b/src/parser/classes/Tab.ts @@ -18,6 +18,22 @@ export default class Tab extends YTNode { this.title = data.title || 'N/A'; this.selected = !!data.selected; this.endpoint = new NavigationEndpoint(data.endpoint); - this.content = Parser.parseItem(data.content, [ SectionList, MusicQueue, RichGrid ]); + const contents = Parser.parseItems(data.content, [ SectionList, MusicQueue, RichGrid ]); + this.content = null; + if (contents !== null && contents.length > 0) { + for (const item of contents) { + if (item.is(SectionList) && item.contents.length > 0) { + this.content = item; + } else if (item.is(RichGrid) && item.contents.length > 0) { + this.content = item; + } else if (item.is(MusicQueue)) { + this.content = item; + } + } + + if (this.content === null) { + this.content = contents[0]; + } + } } } \ No newline at end of file diff --git a/src/parser/parser.ts b/src/parser/parser.ts index d1c6e6183..f943da322 100644 --- a/src/parser/parser.ts +++ b/src/parser/parser.ts @@ -587,6 +587,29 @@ export function parseItem(data?: RawNode, validTypes?: YTNodeConstructor | YTNod return null; } +/** + * Parses multiple items in an object as an array of items. + * @param data - The data to parse. + * @param validTypes - YTNode types that are allowed to be parsed. + */ +export function parseItems[]>(data: RawNode | undefined, validTypes: K): InstanceType[] | null; +export function parseItems(data: RawNode | undefined, validTypes: YTNodeConstructor): T[] | null; +export function parseItems(data?: RawNode): YTNode[]; +export function parseItems(data?: RawNode, validTypes?: YTNodeConstructor | YTNodeConstructor[]) { + if (!data) return null; + const keys = Object.keys(data); + const results: YTNode[] = []; + for (const key of keys) { + const temp_data = { [key]: data[key] }; + + const result = parseItem(temp_data, validTypes as YTNodeConstructor); + if (result) { + results.push(result); + } + } + return results; +} + /** * Parses an array of items. * @param data - The data to parse.