mirror of
https://github.com/arc53/DocsGPT.git
synced 2025-11-29 16:43:16 +00:00
- Removed API Keys tab from SettingsBar and adjusted tab layout. - Improved styling for tab scrolling buttons and gradient indicators. - Introduced AgentDetailsModal for displaying agent access details. - Updated Analytics component to fetch agent data and handle analytics for selected agent. - Refactored Logs component to accept agentId as a prop for filtering logs. - Enhanced type definitions for InputProps to include textSize. - Cleaned up unused imports and optimized component structure across various files.
106 lines
3.6 KiB
TypeScript
106 lines
3.6 KiB
TypeScript
import React, { useCallback, useRef, useState } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
import ArrowLeft from '../assets/arrow-left.svg';
|
|
import ArrowRight from '../assets/arrow-right.svg';
|
|
|
|
type HiddenGradientType = 'left' | 'right' | undefined;
|
|
|
|
const useTabs = () => {
|
|
const { t } = useTranslation();
|
|
const tabs = [
|
|
t('settings.general.label'),
|
|
t('settings.documents.label'),
|
|
t('settings.analytics.label'),
|
|
t('settings.logs.label'),
|
|
t('settings.tools.label'),
|
|
];
|
|
return tabs;
|
|
};
|
|
|
|
interface SettingsBarProps {
|
|
setActiveTab: React.Dispatch<React.SetStateAction<string>>;
|
|
activeTab: string;
|
|
}
|
|
|
|
const SettingsBar = ({ setActiveTab, activeTab }: SettingsBarProps) => {
|
|
const [hiddenGradient, setHiddenGradient] =
|
|
useState<HiddenGradientType>('left');
|
|
const containerRef = useRef<null | HTMLDivElement>(null);
|
|
const tabs = useTabs();
|
|
const scrollTabs = useCallback(
|
|
(direction: number) => {
|
|
if (containerRef.current) {
|
|
const container = containerRef.current;
|
|
container.scrollLeft += direction * 100; // Adjust the scroll amount as needed
|
|
if (container.scrollLeft === 0) {
|
|
setHiddenGradient('left');
|
|
} else if (
|
|
container.scrollLeft + container.offsetWidth ===
|
|
container.scrollWidth
|
|
) {
|
|
setHiddenGradient('right');
|
|
} else {
|
|
setHiddenGradient(undefined);
|
|
}
|
|
}
|
|
},
|
|
[containerRef.current],
|
|
);
|
|
return (
|
|
<div className="relative mt-6 flex flex-row items-center space-x-1 overflow-auto md:space-x-0">
|
|
<div
|
|
className={`${hiddenGradient === 'left' ? 'hidden' : ''} pointer-events-none absolute inset-y-0 left-6 w-14 bg-gradient-to-r from-white dark:from-raisin-black md:hidden`}
|
|
></div>
|
|
<div
|
|
className={`${hiddenGradient === 'right' ? 'hidden' : ''} pointer-events-none absolute inset-y-0 right-6 w-14 bg-gradient-to-l from-white dark:from-raisin-black md:hidden`}
|
|
></div>
|
|
|
|
<div className="z-10 md:hidden">
|
|
<button
|
|
onClick={() => scrollTabs(-1)}
|
|
className="flex h-6 w-6 items-center justify-center rounded-full transition-all hover:bg-gray-200 dark:hover:bg-gray-700"
|
|
aria-label="Scroll tabs left"
|
|
>
|
|
<img src={ArrowLeft} alt="left-arrow" className="h-3" />
|
|
</button>
|
|
</div>
|
|
<div
|
|
ref={containerRef}
|
|
className="no-scrollbar flex snap-x flex-nowrap overflow-x-auto scroll-smooth md:space-x-4"
|
|
role="tablist"
|
|
aria-label="Settings tabs"
|
|
>
|
|
{tabs.map((tab, index) => (
|
|
<button
|
|
key={index}
|
|
onClick={() => setActiveTab(tab)}
|
|
className={`h-9 snap-start rounded-3xl px-4 font-bold transition-colors ${
|
|
activeTab === tab
|
|
? 'bg-[#F4F4F5] text-neutral-900 dark:bg-dark-charcoal dark:text-white'
|
|
: 'text-neutral-700 hover:text-neutral-900 dark:text-neutral-300 dark:hover:text-white'
|
|
}`}
|
|
role="tab"
|
|
aria-selected={activeTab === tab}
|
|
aria-controls={`${tab.toLowerCase()}-panel`}
|
|
id={`${tab.toLowerCase()}-tab`}
|
|
>
|
|
{tab}
|
|
</button>
|
|
))}
|
|
</div>
|
|
<div className="z-10 md:hidden">
|
|
<button
|
|
onClick={() => scrollTabs(1)}
|
|
className="flex h-6 w-6 items-center justify-center rounded-full hover:bg-gray-200 dark:hover:bg-gray-700"
|
|
aria-label="Scroll tabs right"
|
|
>
|
|
<img src={ArrowRight} alt="right-arrow" className="h-3" />
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SettingsBar;
|