import {React, Strings, WebpackModules, DiscordClasses} from "modules"; import Extension from "./icons/extension"; import ThemeIcon from "./icons/theme"; import Divider from "./divider"; const Parser = Object(WebpackModules.getByProps("defaultRules", "parse")).defaultRules; const joinClassNames = (...classNames) => classNames.filter(e => e).join(" "); class AddonError extends React.Component { constructor(props) { super(props); this.state = { expanded: false }; } toggle() { this.setState({expanded: !this.state.expanded}); } renderErrorBody(err) { const stack = err?.error?.stack ?? err.stack; if (!this.state.expanded || !stack) return null; return
{Parser ? Parser.codeBlock.react({content: stack, lang: "js"}, null, {}) : stack}
; } render() { const err = this.props.err; return
{this.toggle();}} >
{err.type == "plugin" ? : }

{err.name}

{err.message}
{this.renderErrorBody(err)}
; } } export default class AddonErrorModal extends React.Component { constructor(props) { super(props); const tabs = this.getTabs(); this.state = { selectedTab: tabs[0].id, }; } mergeErrors(errors1 = [], errors2 = []) { const list = []; const allErrors = [...errors2, ...errors1]; for (const error of allErrors) { if (list.find(e => e.file === error.file)) continue; list.push(error); } return list; } refreshTabs(pluginErrors, themeErrors) { this._tabs = null; this.props.pluginErrors = this.mergeErrors(this.props.pluginErrors, pluginErrors); this.props.themeErrors = this.mergeErrors(this.props.themeErrors, themeErrors); this.forceUpdate(); } generateTab(id, errors) { return { id: id, name: Strings.Panels[id], errors: errors }; } getTabs() { return this._tabs || (this._tabs = [ this.props.pluginErrors.length && this.generateTab("plugins", this.props.pluginErrors), this.props.themeErrors.length && this.generateTab("themes", this.props.themeErrors) ].filter(e => e)); } switchToTab(id) { this.setState({selectedTab: id}); } render() { const selectedTab = this.getTabs().find(e => this.state.selectedTab === e.id); const tabs = this.getTabs(); return <>

{Strings.Modals.addonErrors}

{tabs.map(tab =>
{this.switchToTab(tab.id);}} className={joinClassNames("bd-tab-item", tab.id === selectedTab.id && "selected")}>{tab.name}
)}
{selectedTab.errors.map((error, index) => )}
; } }