/
kaws
/
ui-kit-ce
Обзор
Документация
Войти
/
kaws
/
ui-kit-ce
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
packages/tree/src/contexts/TreeNodeContext.tsx
75 строк
2 KB
Урядышев Павел Александрович
fix(tree): исправлено количество вызовов и очередность вызова свойства onNodeExpand
05 сен 2025, 13:28
05 сен 2025, 13:28
63569b9
Код
Авторство
О чём код?
'use client' import * as React from 'react' type TreeNodeHandlers = { handleMouseDown: ( event: React.MouseEvent<HTMLSpanElement, MouseEvent> ) => void handleItemClick: (event: React.MouseEvent<HTMLLIElement, MouseEvent>) => void } type TreeNodeHandlersByNodeKeyRef = Record<React.Key, TreeNodeHandlers> export type TreeNodeContextProps = { getTreeNodeHandlersById: (key: React.Key) => TreeNodeHandlers setTreeNodeHandlersById: (key: React.Key, handlers: TreeNodeHandlers) => void isNodeWasExpandedByClickRef: React.MutableRefObject<boolean> } const TreeNodeContext = React.createContext<TreeNodeContextProps>( {} as TreeNodeContextProps ) export const TreeNodeContextProvider = ({ children, }: React.PropsWithChildren< Record<string, unknown> >): React.ReactElement | null => { const Context = TreeNodeContext as unknown as React.Context<TreeNodeContextProps> const isNodeWasExpandedByClickRef = React.useRef(false) const treeNodeHandlersByNodeKeyRef = React.useRef<TreeNodeHandlersByNodeKeyRef>({}) const getTreeNodeHandlersById = (key: React.Key) => treeNodeHandlersByNodeKeyRef.current[key] const setTreeNodeHandlersById = ( key: React.Key, handlers: TreeNodeHandlers ) => { treeNodeHandlersByNodeKeyRef.current[key] = handlers } return ( <Context.Provider value={{ getTreeNodeHandlersById, setTreeNodeHandlersById, isNodeWasExpandedByClickRef, }} > {children} </Context.Provider> ) } /** * Хук для распределенного доступа к обработчикам узла дерева. * * @returns */ export const useTreeNodeContext = (): TreeNodeContextProps => { const treeNodeContext = React.useContext<TreeNodeContextProps>( TreeNodeContext as unknown as React.Context<TreeNodeContextProps> ) if (!treeNodeContext) { throw new Error( 'Hook useTreeNodeContext must be used within TreeNodeContextProvider!' ) } return treeNodeContext }