| 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> |
| ); |
| } |
|
|