dify/web/context/mitt-context.tsx
yyh f05d43d26f
feat(web): migrate from es-toolkit/compat to native es-toolkit (#30244)
Migrate 172 files from es-toolkit/compat to native es-toolkit.

Migrated:
- noop → es-toolkit/function
- cloneDeep, omit, clone, pick → es-toolkit/object
- uniq, intersection → es-toolkit/array
- capitalize, camelCase, kebabCase, escape → es-toolkit/string
- isEqual → es-toolkit/predicate

Kept in compat (API differences):
- uniqueId, isEmpty
- get, merge, flow, curry, debounce - different APIs
- uniqBy, groupBy, intersectionBy - property string support
- flatten - undefined handling

Benefits: 2-3x faster, smaller bundle

Part of #30243
Fixes #30244
2025-12-27 20:31:22 +08:00

28 lines
748 B
TypeScript

import { noop } from 'es-toolkit/function'
import { createContext, useContext, useContextSelector } from 'use-context-selector'
import { useMitt } from '@/hooks/use-mitt'
type ContextValueType = ReturnType<typeof useMitt>
export const MittContext = createContext<ContextValueType>({
emit: noop,
useSubscribe: noop,
})
export const MittProvider = ({ children }: { children: React.ReactNode }) => {
const mitt = useMitt()
return (
<MittContext.Provider value={mitt}>
{children}
</MittContext.Provider>
)
}
export const useMittContext = () => {
return useContext(MittContext)
}
export function useMittContextSelector<T>(selector: (value: ContextValueType) => T): T {
return useContextSelector(MittContext, selector)
}