mirror of
https://github.com/mue/mue.git
synced 2026-07-13 04:02:32 +02:00
110 lines
3.0 KiB
JavaScript
110 lines
3.0 KiB
JavaScript
import variables from 'config/variables';
|
|
import React, { useState, useEffect } from 'react';
|
|
import {
|
|
MdSettings,
|
|
MdOutlineShoppingBasket,
|
|
MdOutlineExtension,
|
|
MdRefresh,
|
|
MdClose,
|
|
} from 'react-icons/md';
|
|
import Tab from './Tab';
|
|
import { Button } from 'components/Elements';
|
|
import ErrorBoundary from '../../../../features/misc/modals/ErrorBoundary';
|
|
|
|
const Tabs = (props) => {
|
|
const [currentTab, setCurrentTab] = useState(props.children[0].props.label);
|
|
const [currentName, setCurrentName] = useState(props.children[0].props.name);
|
|
|
|
const onClick = (tab, name) => {
|
|
if (name !== currentName) {
|
|
variables.stats.postEvent('tab', `Opened ${name}`);
|
|
}
|
|
|
|
setCurrentTab(tab);
|
|
setCurrentName(name);
|
|
};
|
|
|
|
const hideReminder = () => {
|
|
localStorage.setItem('showReminder', false);
|
|
document.querySelector('.reminder-info').style.display = 'none';
|
|
};
|
|
|
|
const navbarButtons = [
|
|
{
|
|
tab: 'settings',
|
|
icon: <MdSettings />,
|
|
},
|
|
{
|
|
tab: 'addons',
|
|
icon: <MdOutlineExtension />,
|
|
},
|
|
{
|
|
tab: 'marketplace',
|
|
icon: <MdOutlineShoppingBasket />,
|
|
},
|
|
];
|
|
|
|
const reminderInfo = (
|
|
<div
|
|
className="reminder-info"
|
|
style={{ display: localStorage.getItem('showReminder') === 'true' ? 'flex' : 'none' }}
|
|
>
|
|
<div className="shareHeader">
|
|
<span className="title">{variables.getMessage('modals.main.settings.reminder.title')}</span>
|
|
<span className="closeModal" onClick={hideReminder}>
|
|
<MdClose />
|
|
</span>
|
|
</div>
|
|
<span className="subtitle">
|
|
{variables.getMessage('modals.main.settings.reminder.message')}
|
|
</span>
|
|
<button onClick={() => window.location.reload()}>
|
|
<MdRefresh />
|
|
{variables.getMessage('modals.main.error_boundary.refresh')}
|
|
</button>
|
|
</div>
|
|
);
|
|
|
|
return (
|
|
<div style={{ display: 'flex', width: '100%', minHeight: '100%' }}>
|
|
<div className="modalSidebar">
|
|
{props.children.map((tab, index) => (
|
|
<Tab
|
|
currentTab={currentTab}
|
|
key={index}
|
|
label={tab.props.label}
|
|
onClick={(nextTab) => onClick(nextTab, tab.props.name)}
|
|
navbarTab={props.navbar || false}
|
|
/>
|
|
))}
|
|
{reminderInfo}
|
|
</div>
|
|
<div className="modalTabContent">
|
|
<div className="modalNavbar">
|
|
{navbarButtons.map(({ tab, icon }, index) => (
|
|
<Button
|
|
type="navigation"
|
|
onClick={() => props.changeTab(tab)}
|
|
icon={icon}
|
|
label={variables.getMessage(`modals.main.navbar.${tab}`)}
|
|
active={props.current === tab}
|
|
key={`${tab}-${index}`}
|
|
/>
|
|
))}
|
|
</div>
|
|
{props.children.map((tab, index) => {
|
|
if (tab.props.label !== currentTab) {
|
|
return undefined;
|
|
}
|
|
|
|
return (
|
|
<ErrorBoundary key={`error-boundary-${index}`}>{tab.props.children}</ErrorBoundary>
|
|
);
|
|
})}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Tabs;
|