DocView.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { useParams } from 'common'
  2. import type { ShowApiKey } from '../../Docs/Docs.types'
  3. import { GeneralContent } from '@/components/interfaces/Docs/GeneralContent'
  4. import { ResourceContent } from '@/components/interfaces/Docs/ResourceContent'
  5. import { RpcContent } from '@/components/interfaces/Docs/RpcContent'
  6. import { buildEntityMaps } from '@/components/interfaces/Integrations/DataApi/DataApi.utils'
  7. import { DocViewError } from '@/components/interfaces/Integrations/DataApi/DocViewError'
  8. import { DocViewLoading } from '@/components/interfaces/Integrations/DataApi/DocViewLoading'
  9. import { useProjectSettingsV2Query } from '@/data/config/project-settings-v2-query'
  10. import { useProjectJsonSchemaQuery } from '@/data/docs/project-json-schema-query'
  11. interface DocViewProps {
  12. selectedLang: 'js' | 'bash'
  13. selectedApiKey: ShowApiKey
  14. }
  15. export const DocView = ({ selectedLang, selectedApiKey }: DocViewProps) => {
  16. const { ref: projectRef, page, resource, rpc } = useParams()
  17. const { data: settings, error: settingsError } = useProjectSettingsV2Query({ projectRef })
  18. const {
  19. data: jsonSchema,
  20. error: jsonSchemaError,
  21. isPending: isLoading,
  22. refetch,
  23. } = useProjectJsonSchemaQuery({ projectRef })
  24. const { paths } = jsonSchema || {}
  25. const PAGE_KEY = resource || rpc || page || 'index'
  26. const { resources, rpcs } = buildEntityMaps(paths)
  27. if (settingsError || jsonSchemaError) {
  28. return <DocViewError error={settingsError || jsonSchemaError} />
  29. }
  30. if (isLoading || !settings || !jsonSchema) {
  31. return <DocViewLoading />
  32. }
  33. return (
  34. <div className="w-full h-full overflow-y-auto flex flex-col" key={PAGE_KEY}>
  35. <div className="flex-1 flex flex-col">
  36. {resource ? (
  37. <ResourceContent
  38. selectedLang={selectedLang}
  39. resourceId={resource}
  40. resources={resources}
  41. showApiKey={selectedApiKey.key}
  42. refreshDocs={refetch}
  43. />
  44. ) : rpc ? (
  45. <RpcContent
  46. selectedLang={selectedLang}
  47. rpcId={rpc}
  48. paths={paths}
  49. rpcs={rpcs}
  50. showApiKey={selectedApiKey.key}
  51. refreshDocs={refetch}
  52. />
  53. ) : (
  54. <GeneralContent selectedLang={selectedLang} showApiKey={selectedApiKey.key} page={page} />
  55. )}
  56. </div>
  57. </div>
  58. )
  59. }