mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-30 09:55:18 +00:00
feat: add MusicSortFilterButton (#151)
This commit is contained in:
12
src/parser/classes/menus/MusicMenuItemDivider.ts
Normal file
12
src/parser/classes/menus/MusicMenuItemDivider.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { YTNode } from '../../helpers';
|
||||
|
||||
class MusicMenuItemDivider extends YTNode {
|
||||
static type = 'MusicMenuItemDivider';
|
||||
|
||||
// eslint-disable-next-line
|
||||
constructor(data: any) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
export default MusicMenuItemDivider;
|
||||
21
src/parser/classes/menus/MusicMultiSelectMenu.ts
Normal file
21
src/parser/classes/menus/MusicMultiSelectMenu.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import MusicMultiSelectMenuItem from './MusicMultiSelectMenuItem';
|
||||
import MusicMenuItemDivider from './MusicMenuItemDivider';
|
||||
import { YTNode } from '../../helpers';
|
||||
import Text from '../misc/Text';
|
||||
import Parser from '../..';
|
||||
|
||||
class MusicMultiSelectMenu extends YTNode {
|
||||
static type = 'MusicMultiSelectMenu';
|
||||
|
||||
title: string;
|
||||
options: Array<MusicMultiSelectMenuItem | MusicMenuItemDivider>;
|
||||
|
||||
constructor(data: any) {
|
||||
super();
|
||||
|
||||
this.title = new Text(data.title.musicMenuTitleRenderer?.primaryText).text;
|
||||
this.options = Parser.parseArray(data.options, [ MusicMultiSelectMenuItem, MusicMenuItemDivider ]);
|
||||
}
|
||||
}
|
||||
|
||||
export default MusicMultiSelectMenu;
|
||||
37
src/parser/classes/menus/MusicMultiSelectMenuItem.ts
Normal file
37
src/parser/classes/menus/MusicMultiSelectMenuItem.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { YTNode } from '../../helpers';
|
||||
import Text from '../misc/Text';
|
||||
import NavigationEndpoint from '../NavigationEndpoint';
|
||||
|
||||
class MusicMultiSelectMenuItem extends YTNode {
|
||||
static type = 'MusicMultiSelectMenuItem';
|
||||
|
||||
title: string;
|
||||
form_item_entity_key: string;
|
||||
selected_icon_type: string;
|
||||
endpoint?: NavigationEndpoint;
|
||||
selected: boolean;
|
||||
|
||||
constructor(data: any) {
|
||||
super();
|
||||
|
||||
this.title = new Text(data.title).text;
|
||||
this.form_item_entity_key = data.formItemEntityKey;
|
||||
this.selected_icon_type = data.selectedIcon?.iconType || null;
|
||||
const command = data.selectedCommand?.commandExecutorCommand?.commands?.find((command: any) => command.musicBrowseFormBinderCommand?.browseEndpoint);
|
||||
if (command) {
|
||||
/**
|
||||
* At this point, endpoint will still be missing `form_data` field which is required for
|
||||
* selection to take effect. This can only be obtained from the response data which
|
||||
* we don't have here. We shall delegate this task back to `Parser`.
|
||||
*/
|
||||
this.endpoint = new NavigationEndpoint(command.musicBrowseFormBinderCommand);
|
||||
}
|
||||
/**
|
||||
* Inferring selected state from existence of endpoint. `Parser` shall
|
||||
* update this with the definitive value obtained from response data.
|
||||
*/
|
||||
this.selected = !!this.endpoint;
|
||||
}
|
||||
}
|
||||
|
||||
export default MusicMultiSelectMenuItem;
|
||||
Reference in New Issue
Block a user