SimpleConfigurationDetails.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { Card } from 'ui'
  2. import { DESCRIPTIONS, LABELS, OPTION_ORDER } from './AnalyticsBucketDetails.constants'
  3. import { CopyEnvButton } from './CopyEnvButton'
  4. import { DecryptedReadOnlyInput } from './DecryptedReadOnlyInput'
  5. import { useAnalyticsBucketWrapperInstance } from './useAnalyticsBucketWrapperInstance'
  6. import { INTEGRATIONS } from '@/components/interfaces/Integrations/Landing/Integrations.constants'
  7. import { WrapperMeta } from '@/components/interfaces/Integrations/Wrappers/Wrappers.types'
  8. import { convertKVStringArrayToJson } from '@/components/interfaces/Integrations/Wrappers/Wrappers.utils'
  9. import {
  10. ScaffoldHeader,
  11. ScaffoldSection,
  12. ScaffoldSectionDescription,
  13. ScaffoldSectionTitle,
  14. } from '@/components/layouts/Scaffold'
  15. import { InlineLink } from '@/components/ui/InlineLink'
  16. import { DOCS_URL } from '@/lib/constants'
  17. export const SimpleConfigurationDetails = ({ bucketName }: { bucketName?: string }) => {
  18. const integration = INTEGRATIONS.find((i) => i.id === 'iceberg_wrapper' && i.type === 'wrapper')
  19. const wrapperMeta = (integration?.type === 'wrapper' && integration.meta) as WrapperMeta
  20. /** The wrapper instance is the wrapper that is installed for this Analytics bucket. */
  21. const { data: wrapperInstance } = useAnalyticsBucketWrapperInstance({ bucketId: bucketName })
  22. const wrapperValues = convertKVStringArrayToJson(wrapperInstance?.server_options ?? [])
  23. if (!wrapperInstance) return null
  24. return (
  25. <ScaffoldSection isFullWidth>
  26. <ScaffoldHeader className="flex flex-row justify-between items-end gap-x-8 pt-0">
  27. <div>
  28. <ScaffoldSectionTitle>Connection details</ScaffoldSectionTitle>
  29. <ScaffoldSectionDescription>
  30. Connect to this bucket from an Iceberg client.{' '}
  31. <InlineLink
  32. href={`${DOCS_URL}/guides/storage/analytics/connecting-to-analytics-bucket`}
  33. >
  34. Learn more
  35. </InlineLink>
  36. </ScaffoldSectionDescription>
  37. </div>
  38. <CopyEnvButton
  39. serverOptions={wrapperMeta.server.options.filter(
  40. (option) => !option.hidden && wrapperValues[option.name]
  41. )}
  42. values={wrapperValues}
  43. />
  44. </ScaffoldHeader>
  45. <Card>
  46. {wrapperMeta.server.options
  47. .filter((option) => !option.hidden && wrapperValues[option.name])
  48. .sort((a, b) => OPTION_ORDER.indexOf(a.name) - OPTION_ORDER.indexOf(b.name))
  49. .map((option) => {
  50. return (
  51. <DecryptedReadOnlyInput
  52. key={option.name}
  53. label={LABELS[option.name]}
  54. value={wrapperValues[option.name]}
  55. secureEntry={option.secureEntry}
  56. descriptionText={DESCRIPTIONS[option.name]}
  57. />
  58. )
  59. })}
  60. </Card>
  61. </ScaffoldSection>
  62. )
  63. }