mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-02-13 13:04:24 +01:00
* fix: Prevent parsing 'undefined' string in useLocalStorage initialization * feat: first pass, code interpreter badge * feat: Integrate API key authentication and default checked value in Code Interpreter Badge * refactor: Rename showMCPServers to showEphemeralBadges and update related components, memoize values in useChatBadges * refactor: Enhance AttachFileChat to support ephemeral agents in file attachment logic * fix: Add baseURL configuration option to legacy function call * refactor: Update dependency array in useDragHelpers to include handleFiles * refactor: Update isEphemeralAgent function to accept optional endpoint parameter * refactor: Update file handling to support ephemeral agents in AttachFileMenu and useDragHelpers * fix: improve compatibility issues with OpenAI usage field handling in createRun function * refactor: usage field compatibility * fix: ensure mcp servers are no longer "selected" if mcp servers are now unavailable
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useRecoilCallback } from 'recoil';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { MessageCircleDashed, Box } from 'lucide-react';
|
|
import type { BadgeItem } from '~/common';
|
|
import { useLocalize, TranslationKeys } from '~/hooks';
|
|
import store from '~/store';
|
|
|
|
interface ChatBadgeConfig {
|
|
id: string;
|
|
icon: typeof Box;
|
|
label: string;
|
|
atom?: any;
|
|
}
|
|
|
|
const badgeConfig: ReadonlyArray<ChatBadgeConfig> = [
|
|
// {
|
|
// id: '1',
|
|
// icon: Box,
|
|
// label: 'com_ui_artifacts',
|
|
// atom: store.codeArtifacts,
|
|
// },
|
|
// TODO: add more badges here (missing store atoms)
|
|
];
|
|
|
|
export default function useChatBadges(): BadgeItem[] {
|
|
const localize = useLocalize();
|
|
const activeBadges = useRecoilValue(store.chatBadges) as Array<{ id: string }>;
|
|
const activeBadgeIds = useMemo(
|
|
() => new Set(activeBadges.map((badge) => badge.id)),
|
|
[activeBadges],
|
|
);
|
|
const allBadges = useMemo(() => {
|
|
return (
|
|
badgeConfig.map((cfg) => ({
|
|
id: cfg.id,
|
|
label: localize(cfg.label as TranslationKeys),
|
|
icon: cfg.icon,
|
|
atom: cfg.atom,
|
|
isAvailable: activeBadgeIds.has(cfg.id),
|
|
})) || []
|
|
);
|
|
}, [activeBadgeIds, localize]);
|
|
return allBadges;
|
|
}
|
|
|
|
export function useResetChatBadges() {
|
|
return useRecoilCallback(
|
|
({ reset }) =>
|
|
() => {
|
|
badgeConfig.forEach(({ atom }) => reset(atom));
|
|
reset(store.chatBadges);
|
|
},
|
|
[],
|
|
);
|
|
}
|