use-command-provider.ts 592 B

123456789101112131415161718192021
  1. import { DependencyList, useEffect } from 'react'
  2. import {
  3. Command,
  4. useCommandRegistry,
  5. } from '../context/command-registry-context'
  6. export const useCommandProvider = (
  7. generateElements: () => Command[] | undefined,
  8. dependencies: DependencyList
  9. ) => {
  10. const { register, unregister } = useCommandRegistry()
  11. useEffect(() => {
  12. const elements = generateElements()
  13. if (!elements) return
  14. register(...elements)
  15. return () => {
  16. unregister(...elements.map(element => element.id))
  17. }
  18. // eslint-disable-next-line react-hooks/exhaustive-deps
  19. }, dependencies)
  20. }