import cls from 'classnames';
import React, { useCallback, useEffect, useMemo } from 'react';
import {
ComponentRegistryInfo,
SlotLocation,
useAutorun,
useContextMenus,
useInjectable,
} from '@opensumi/ide-core-browser';
import { EDirection } from '@opensumi/ide-core-browser/lib/components';
import {
EnhanceIcon,
EnhanceIconWithCtxMenu,
EnhancePopover,
HorizontalVertical,
} from '@opensumi/ide-core-browser/lib/components/ai-native';
import { DesignLayoutConfig } from '@opensumi/ide-core-browser/lib/layout/constants';
import { IMenu } from '@opensumi/ide-core-browser/lib/menu/next';
import { localize } from '@opensumi/ide-core-common';
import { DesignLeftTabRenderer, DesignRightTabRenderer } from '@opensumi/ide-design/lib/browser/layout/tabbar.view';
import { IMainLayoutService } from '@opensumi/ide-main-layout';
import {
ChatTabbarRenderer2,
IconElipses,
IconTabView,
LeftTabbarRenderer,
RightTabbarRenderer,
TabbarViewBase,
} from '@opensumi/ide-main-layout/lib/browser/tabbar/bar.view';
import { BaseTabPanelView, ContainerView } from '@opensumi/ide-main-layout/lib/browser/tabbar/panel.view';
import { TabRendererBase, TabbarConfig } from '@opensumi/ide-main-layout/lib/browser/tabbar/renderer.view';
import { TabbarService, TabbarServiceFactory } from '@opensumi/ide-main-layout/lib/browser/tabbar/tabbar.service';
import { AI_CHAT_VIEW_ID } from '../../common';
import styles from './layout.module.less';
const ChatTabbarRenderer: React.FC = () => {
const { side } = React.useContext(TabbarConfig);
const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(side);
useEffect(() => {
tabbarService.setIsLatter(true);
}, [tabbarService]);
return (
);
};
export const AIChatTabRenderer = ({
className,
components,
}: {
className: string;
components: ComponentRegistryInfo[];
}) => (
}
TabpanelView={() => (
)}
/>
);
export const AIChatTabRendererWithTab = ({
className,
components,
}: {
className: string;
components: ComponentRegistryInfo[];
}) => (
}
TabpanelView={() => (
)}
/>
);
export const AILeftTabRenderer = ({
className,
components,
}: {
className: string;
components: ComponentRegistryInfo[];
}) => ;
const AILeftTabbarRenderer: React.FC = () => {
const layoutService = useInjectable(IMainLayoutService);
const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(SlotLocation.right);
const currentContainerId = useAutorun(tabbarService.currentContainerId);
const extraMenus = React.useMemo(() => layoutService.getExtraMenu(), [layoutService]);
const [navMenu] = useContextMenus(extraMenus);
const renderOtherVisibleContainers = useCallback(
({ renderContainers }) => {
const visibleContainers = tabbarService.visibleContainers.filter((container) => !container.options?.hideTab);
return (
<>
{visibleContainers.length > 0 && }
{visibleContainers.map((component) => renderContainers(component, tabbarService, currentContainerId))}
>
);
},
[currentContainerId, tabbarService],
);
return (
{navMenu.length >= 0
? navMenu.map((menu) => (
))
: null}
}
/>
);
};
export const AIRightTabRenderer = ({
className,
components,
}: {
className: string;
components: ComponentRegistryInfo[];
}) => {
const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(SlotLocation.right);
const designLayoutConfig = useInjectable(DesignLayoutConfig);
const handleClose = useCallback(() => {
tabbarService.updateCurrentContainerId('');
}, []);
const ContainerViewFn = useCallback((props: { component: ComponentRegistryInfo; side: string; titleMenu: IMenu }) => {
const { component } = props;
const { options } = component;
return (
{options && options.title}
}
renderContainerWrap={({ children }) => (
)}
/>
);
}, []);
const rightTabRenderClassName = useMemo(
() => (designLayoutConfig.useMergeRightWithLeftPanel ? styles.right_tab_renderer : ''),
[designLayoutConfig],
);
return (
}
tabpanelView={() => }
/>
);
};