diff --git a/src/parser/classes/ClientSideToggleMenuItem.ts b/src/parser/classes/ClientSideToggleMenuItem.ts new file mode 100644 index 000000000..7540df1ba --- /dev/null +++ b/src/parser/classes/ClientSideToggleMenuItem.ts @@ -0,0 +1,46 @@ +import { YTNode } from '../helpers.js'; +import type { RawNode } from '../index.js'; +import NavigationEndpoint from './NavigationEndpoint.js'; +import Text from './misc/Text.js'; + +export default class ClientSideToggleMenuItem extends YTNode { + static type = 'ClientSideToggleMenuItem'; + + text: Text; + icon_type: string; + toggled_text: Text; + toggled_icon_type: string; + is_toggled?: boolean; + menu_item_identifier: string; + endpoint: NavigationEndpoint; + logging_directives?: { + visibility: { + types: string; + }, + enable_displaylogger_experiment: boolean; + }; + + constructor(data: RawNode) { + super(); + this.text = new Text(data.defaultText); + this.icon_type = data.defaultIcon.iconType; + this.toggled_text = new Text(data.toggledText); + this.toggled_icon_type = data.toggledIcon.iconType; + + if (Reflect.has(data, 'isToggled')) { + this.is_toggled = data.isToggled; + } + + this.menu_item_identifier = data.menuItemIdentifier; + this.endpoint = new NavigationEndpoint(data.command); + + if (Reflect.has(data, 'loggingDirectives')) { + this.logging_directives = { + visibility: { + types: data.loggingDirectives.visibility.types + }, + enable_displaylogger_experiment: data.loggingDirectives.enableDisplayloggerExperiment + }; + } + } +} diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index a23778d1d..f918eced6 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -64,6 +64,7 @@ export { default as ChipBarView } from './classes/ChipBarView.js'; export { default as ChipCloud } from './classes/ChipCloud.js'; export { default as ChipCloudChip } from './classes/ChipCloudChip.js'; export { default as ChipView } from './classes/ChipView.js'; +export { default as ClientSideToggleMenuItem } from './classes/ClientSideToggleMenuItem.js'; export { default as ClipAdState } from './classes/ClipAdState.js'; export { default as ClipCreation } from './classes/ClipCreation.js'; export { default as ClipCreationScrubber } from './classes/ClipCreationScrubber.js';