/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ import { ContentSection } from "content-src/components/CustomizeMenu/ContentSection/ContentSection"; import { connect } from "react-redux"; import React from "react"; const PREF_NOVA_ENABLED = "nova.enabled"; // eslint-disable-next-line no-shadow import { CSSTransition } from "react-transition-group"; export class _CustomizeMenu extends React.PureComponent { constructor(props) { super(props); this.onEntered = this.onEntered.bind(this); this.onExited = this.onExited.bind(this); this.onSubpanelToggle = this.onSubpanelToggle.bind(this); this.onCancel = this.onCancel.bind(this); this.onDialogClick = this.onDialogClick.bind(this); this.personalizeButtonRef = React.createRef(); this.dialogRef = React.createRef(); this.closeButtonRef = React.createRef(); this.state = { subpanelOpen: false, }; } onSubpanelToggle(isOpen) { this.setState({ subpanelOpen: isOpen }); } componentDidUpdate(prevProps) { if (this.props.showing && !prevProps.showing) { if (!this.dialogRef.current?.open) { this.dialogRef.current?.showModal(); } } } onCancel(e) { e.preventDefault(); this.props.onClose(); } onDialogClick(e) { if (e.target === this.dialogRef.current) { this.props.onClose(); } } onEntered() { if (this.closeButtonRef.current) { this.closeButtonRef.current.focus(); } } onExited() { if (this.dialogRef.current?.open) { this.dialogRef.current.close(); } if (this.props.showWidgetsManagementPanel) { this.props.toggleWidgetsManagementPanel(); } if (this.props.showSectionsMgmtPanel) { this.props.toggleSectionsMgmtPanel(); } if (this.personalizeButtonRef.current) { this.personalizeButtonRef.current.focus(); } } render() { const activationWindowVariant = this.props.Prefs.values["activationWindow.variant"]; const activationWindowClass = activationWindowVariant ? `activation-window-variant-${activationWindowVariant}` : ""; // @nova-cleanup(remove-pref): remove nova pref const novaEnabled = this.props.Prefs.values[PREF_NOVA_ENABLED]; return ( { // @nova-cleanup(remove-conditional): replace with moz-button only novaEnabled ? ( this.props.onOpen()} iconsrc="chrome://global/skin/icons/edit-outline.svg" iconposition="end" type="default" > ) : ( ) }
this.props.onClose()} id="close-button" type="icon ghost" data-l10n-id="newtab-custom-close-menu-button" iconsrc="chrome://global/skin/icons/close.svg" ref={this.closeButtonRef} >
); } } export const CustomizeMenu = connect(state => ({ DiscoveryStream: state.DiscoveryStream, Prefs: state.Prefs, }))(_CustomizeMenu);