Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

context.tsx 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. 'use client'
  2. import type { ReactNode } from 'react'
  3. import React, { createContext, useContext, useEffect, useState } from 'react'
  4. import { usePathname } from 'next/navigation'
  5. /**
  6. * Interface for the GotoAnything context
  7. */
  8. type GotoAnythingContextType = {
  9. /**
  10. * Whether the current page is a workflow page
  11. */
  12. isWorkflowPage: boolean
  13. /**
  14. * Whether the current page is a RAG pipeline page
  15. */
  16. isRagPipelinePage: boolean
  17. }
  18. // Create context with default values
  19. const GotoAnythingContext = createContext<GotoAnythingContextType>({
  20. isWorkflowPage: false,
  21. isRagPipelinePage: false,
  22. })
  23. /**
  24. * Hook to use the GotoAnything context
  25. */
  26. export const useGotoAnythingContext = () => useContext(GotoAnythingContext)
  27. type GotoAnythingProviderProps = {
  28. children: ReactNode
  29. }
  30. /**
  31. * Provider component for GotoAnything context
  32. */
  33. export const GotoAnythingProvider: React.FC<GotoAnythingProviderProps> = ({ children }) => {
  34. const [isWorkflowPage, setIsWorkflowPage] = useState(false)
  35. const [isRagPipelinePage, setIsRagPipelinePage] = useState(false)
  36. const pathname = usePathname()
  37. // Update context based on current pathname using more robust route matching
  38. useEffect(() => {
  39. if (!pathname) {
  40. setIsWorkflowPage(false)
  41. setIsRagPipelinePage(false)
  42. return
  43. }
  44. // Workflow pages: /app/[appId]/workflow or /workflow/[token] (shared)
  45. const isWorkflow = /^\/app\/[^/]+\/workflow$/.test(pathname) || /^\/workflow\/[^/]+$/.test(pathname)
  46. // RAG Pipeline pages: /datasets/[datasetId]/pipeline
  47. const isRagPipeline = /^\/datasets\/[^/]+\/pipeline$/.test(pathname)
  48. setIsWorkflowPage(isWorkflow)
  49. setIsRagPipelinePage(isRagPipeline)
  50. }, [pathname])
  51. return (
  52. <GotoAnythingContext.Provider value={{ isWorkflowPage, isRagPipelinePage }}>
  53. {children}
  54. </GotoAnythingContext.Provider>
  55. )
  56. }