From ea82beaa10f6c877d6dd3102e10f6ae382560e0f Mon Sep 17 00:00:00 2001 From: LuanRT Date: Mon, 29 Apr 2024 08:24:13 -0300 Subject: [PATCH] feat(Parser): Add `MusicResponsiveHeader` node --- src/parser/classes/MusicResponsiveHeader.ts | 43 +++++++++++++++++++++ src/parser/nodes.ts | 1 + 2 files changed, 44 insertions(+) create mode 100644 src/parser/classes/MusicResponsiveHeader.ts diff --git a/src/parser/classes/MusicResponsiveHeader.ts b/src/parser/classes/MusicResponsiveHeader.ts new file mode 100644 index 00000000..46d01f05 --- /dev/null +++ b/src/parser/classes/MusicResponsiveHeader.ts @@ -0,0 +1,43 @@ +import { Parser, type RawNode } from '../index.js'; +import { YTNode } from '../helpers.js'; +import MusicThumbnail from './MusicThumbnail.js'; +import MusicDescriptionShelf from './MusicDescriptionShelf.js'; +import MusicInlineBadge from './MusicInlineBadge.js'; +import MusicPlayButton from './MusicPlayButton.js'; +import ToggleButton from './ToggleButton.js'; +import Menu from './menus/Menu.js'; + +import type { ObservedArray } from '../helpers.js'; + +export default class MusicResponsiveHeader extends YTNode { + static type = 'MusicResponsiveHeader'; + + thumbnail: MusicThumbnail | null; + buttons: ObservedArray | null; + title: Text; + subtitle: Text; + strapline_text_one: Text; + strapline_thumbnail: MusicThumbnail | null; + second_subtitle: Text; + subtitle_badge?: ObservedArray | null; + description?: MusicDescriptionShelf | null; + + constructor(data: RawNode) { + super(); + this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail); + this.buttons = Parser.parseArray(data.buttons, [ ToggleButton, MusicPlayButton, Menu ]); + this.title = new Text(data.title); + this.subtitle = new Text(data.subtitle); + this.strapline_text_one = new Text(data.straplineTextOne); + this.strapline_thumbnail = Parser.parseItem(data.straplineThumbnail, MusicThumbnail); + this.second_subtitle = new Text(data.secondSubtitle); + + if (Reflect.has(data, 'subtitleBadge')) { + this.subtitle_badge = Parser.parseArray(data.subtitleBadge, MusicInlineBadge); + } + + if (Reflect.has(data, 'description')) { + this.description = Parser.parseItem(data.description, MusicDescriptionShelf); + } + } +} \ No newline at end of file diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index 728073bb..41f40e90 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -263,6 +263,7 @@ export { default as MusicNavigationButton } from './classes/MusicNavigationButto export { default as MusicPlayButton } from './classes/MusicPlayButton.js'; export { default as MusicPlaylistShelf } from './classes/MusicPlaylistShelf.js'; export { default as MusicQueue } from './classes/MusicQueue.js'; +export { default as MusicResponsiveHeader } from './classes/MusicResponsiveHeader.js'; export { default as MusicResponsiveListItem } from './classes/MusicResponsiveListItem.js'; export { default as MusicResponsiveListItemFixedColumn } from './classes/MusicResponsiveListItemFixedColumn.js'; export { default as MusicResponsiveListItemFlexColumn } from './classes/MusicResponsiveListItemFlexColumn.js';