mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-24 12:20:14 +01:00
* refactor: expand container * chore: bump @codesandbox/sandpack-react to latest * WIP: first pass, show editor * feat: implement ArtifactCodeEditor and ArtifactTabs components for enhanced artifact management * refactor: fileKey * refactor: auto scrolling code editor and add messageId to artifact * feat: first pass, editing artifact * feat: first pass, robust artifact replacement * fix: robust artifact replacement & re-render when expected * feat: Download Artifacts * refactor: improve artifact editing UX * fix: layout shift of new download button * fix: enhance missing output checks and logging in StreamRunManager
32 lines
893 B
TypeScript
32 lines
893 B
TypeScript
import { createContext, useContext, ReactNode, useCallback, useRef } from 'react';
|
|
|
|
type TCodeBlockContext = {
|
|
getNextIndex: (skip: boolean) => number;
|
|
resetCounter: () => void;
|
|
};
|
|
|
|
export const CodeBlockContext = createContext<TCodeBlockContext>({} as TCodeBlockContext);
|
|
export const useCodeBlockContext = () => useContext(CodeBlockContext);
|
|
|
|
export function CodeBlockProvider({ children }: { children: ReactNode }) {
|
|
const counterRef = useRef(0);
|
|
|
|
const getNextIndex = useCallback((skip: boolean) => {
|
|
if (skip) {
|
|
return counterRef.current;
|
|
}
|
|
const nextIndex = counterRef.current;
|
|
counterRef.current += 1;
|
|
return nextIndex;
|
|
}, []);
|
|
|
|
const resetCounter = useCallback(() => {
|
|
counterRef.current = 0;
|
|
}, []);
|
|
|
|
return (
|
|
<CodeBlockContext.Provider value={{ getNextIndex, resetCounter }}>
|
|
{children}
|
|
</CodeBlockContext.Provider>
|
|
);
|
|
}
|