import React from "@modules/react";
import Strings from "@modules/strings";
import DiscordClasses from "@modules/discordclasses";
import WebpackModules from "@modules/webpackmodules";
import Extension from "@ui/icons/extension";
import ThemeIcon from "@ui/icons/theme";
import Divider from "@ui/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" ? : }
{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) =>
)}
>;
}