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 {useState, useCallback, useMemo} = React; const joinClassNames = (...classNames) => classNames.filter(e => e).join(" "); function AddonError({err, index}) { const [expanded, setExpanded] = useState(false); const toggle = useCallback(() => setExpanded(!expanded), [expanded]); function renderErrorBody() { const stack = err?.error?.stack ?? err.stack; if (!expanded || !stack) return null; return
{Parser ? Parser.codeBlock.react({content: stack, lang: "js"}, null, {}) : stack}
; } return
{err.type == "plugin" ? : }

{err.name}

{err.message}
{renderErrorBody(err)}
; } function generateTab(id, errors) { return {id, errors, name: Strings.Panels[id]}; } export default function AddonErrorModal({pluginErrors, themeErrors}) { const tabs = useMemo(() => { return [ pluginErrors.length && generateTab("plugins", pluginErrors), themeErrors.length && generateTab("themes", themeErrors) ].filter(e => e); }, [pluginErrors, themeErrors]); const [tabId, setTab] = useState(tabs[0].id); const switchToTab = useCallback((id) => setTab(id), []); const selectedTab = tabs.find(e => e.id === tabId); return <>

{Strings.Modals.addonErrors}

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