mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-02 16:48:50 +01:00
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { useMemo, useEffect } from 'react';
|
|
import { Outlet, useParams, useNavigate } from 'react-router-dom';
|
|
import { PermissionTypes, Permissions } from 'librechat-data-provider';
|
|
import FilterPrompts from '~/components/Prompts/Groups/FilterPrompts';
|
|
import DashBreadcrumb from '~/routes/Layouts/DashBreadcrumb';
|
|
import GroupSidePanel from './Groups/GroupSidePanel';
|
|
import { PromptGroupsProvider } from '~/Providers';
|
|
import { useHasAccess } from '~/hooks';
|
|
import { cn } from '~/utils';
|
|
|
|
export default function PromptsView() {
|
|
const params = useParams();
|
|
const navigate = useNavigate();
|
|
const isDetailView = useMemo(() => !!(params.promptId || params['*'] === 'new'), [params]);
|
|
const hasAccess = useHasAccess({
|
|
permissionType: PermissionTypes.PROMPTS,
|
|
permission: Permissions.USE,
|
|
});
|
|
|
|
useEffect(() => {
|
|
let timeoutId: ReturnType<typeof setTimeout>;
|
|
if (!hasAccess) {
|
|
timeoutId = setTimeout(() => {
|
|
navigate('/c/new');
|
|
}, 1000);
|
|
}
|
|
return () => {
|
|
clearTimeout(timeoutId);
|
|
};
|
|
}, [hasAccess, navigate]);
|
|
|
|
if (!hasAccess) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<PromptGroupsProvider>
|
|
<div className="flex h-screen w-full flex-col bg-surface-primary p-0 lg:p-2">
|
|
<DashBreadcrumb />
|
|
<div className="flex w-full flex-grow flex-row divide-x overflow-hidden dark:divide-gray-600">
|
|
<GroupSidePanel isDetailView={isDetailView}>
|
|
<div className="mt-1 flex flex-row items-center justify-between px-2 md:px-2">
|
|
<FilterPrompts />
|
|
</div>
|
|
</GroupSidePanel>
|
|
<div
|
|
className={cn(
|
|
'scrollbar-gutter-stable w-full overflow-y-auto lg:w-3/4 xl:w-3/4',
|
|
isDetailView ? 'block' : 'hidden md:block',
|
|
)}
|
|
>
|
|
<Outlet />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</PromptGroupsProvider>
|
|
);
|
|
}
|