import React, { useEffect, useRef, useState } from 'react';
import './Sidebar.less';
import ReactTooltip from 'react-tooltip';
import { AiOutlineFund, AiOutlineSetting } from 'react-icons/ai';
interface SidebarProps {
width?: number;
height?: number;
onAppSelected: (appId: string) => void;
currentApp: string;
layout: 'horizontal' | 'vertical';
}
//SettingOutlined
const mainApps = [
{
id: 'explore',
icon: 'icon-fontastic-search',
name: 'Explore',
subApps: [
{ id: 'mat-explore', name: 'Materials Explorer', icon: 'icon-fontastic-search' },
{ id: 'mol-explore', icon: 'icon-fontastic-phase-diagram', name: 'Molecule Explorer' },
{ id: 'porus-explore', icon: 'icon-fontastic-nanoporous', name: 'Nanoporous Explorer' },
{
id: 'battery-explore',
icon: 'icon-fontastic-battery',
name: 'Battery Explorer',
svg:
}
]
},
{
id: 'analzye',
name: 'Analyze',
svg: ,
subApps: [
{ id: 'phase-diagram', icon: 'icon-fontastic-phase-diagram', name: 'Phase Diagram' },
{ id: 'pourbaix-diagram', icon: 'icon-fontastic-pourbaix-diagram', name: 'Pourbaix Diagram' },
{ id: 'reaction-calc', icon: 'icon-fontastic-reaction', name: 'Reaction Calculator' }
]
},
{
id: 'char',
icon: 'icon-fontastic-xas',
name: 'Characterize',
subApps: [{ name: 'XAS Matcher', id: 'xas', icon: 'icon-fontastic-xas' }]
},
{
id: 'design',
icon: 'icon-fontastic-toolkit',
name: 'Design',
subApps: [
{ id: 'crystal', icon: 'icon-fontastic-toolkit', name: 'Crystal toolkit' },
{
id: 'Structure Predictor',
icon: 'icon-fontastic-struct-predictor',
name: 'Structure Predictor'
}
]
},
{ id: 'apply', name: 'Apply', svg: , subApps: [] }
];
function build_dico(dico, apps, parentId: string | null) {
return apps.reduce((acc, app) => {
acc[app.id] = app;
parentId && (dico[app.id].parentId = parentId);
app.subApps && build_dico(acc, app.subApps, app.id);
return acc;
}, dico);
}
const APP_DICO = build_dico({}, mainApps, null);
const AppItem = ({ name, idx, icon, svg, selectedAppId }) => {
let subApp: string | null = null;
const selectedParentAppId = !!selectedAppId.length ? APP_DICO[selectedAppId].parentId : '';
if (!!selectedAppId.length && selectedParentAppId === idx) {
icon = APP_DICO[selectedAppId].icon;
svg = APP_DICO[selectedAppId].svg;
subApp = APP_DICO[selectedAppId].name;
}
return (
{icon ? (
) : (
{svg}
)}
{name}
{subApp && {subApp} }
);
};
export const Sidebar: React.FC = ({
width,
currentApp,
onAppSelected,
layout,
height
}) => {
const [currentAppId, setCurrentAppId] = useState('');
const tooltip = useRef(null);
const isFirst = useRef(false);
const sidebar = useRef(null);
useEffect(() => {
setCurrentAppId(currentApp ? currentApp : '');
}, [currentApp]);
const setApp = (id) => {
const app = APP_DICO[id];
if (app) {
setCurrentAppId(app.id);
tooltip.current!.state.show = false;
isFirst.current = app.parentId === mainApps[0].id;
ReactTooltip.hide();
onAppSelected(app.id);
} else {
console.error('incorrect app id', id);
}
};
return (
);
};