Param.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { noop } from 'lodash'
  2. import { Badge } from 'ui'
  3. import Description from '@/components/interfaces/Docs/Description'
  4. function getColumnType(type: string, format: string) {
  5. // json and jsonb both have type=undefined, so check format instead
  6. if (type === undefined && (format === 'jsonb' || format === 'json')) return 'json'
  7. switch (type) {
  8. case 'string':
  9. return 'string'
  10. case 'integer':
  11. return 'number'
  12. case 'json':
  13. return 'json'
  14. case 'number':
  15. return 'number'
  16. case 'boolean':
  17. return 'boolean'
  18. default:
  19. return ''
  20. }
  21. }
  22. interface ParamProps {
  23. name: string
  24. type: string
  25. format: string
  26. required: boolean
  27. description: boolean
  28. metadata?: any
  29. onDesciptionUpdated?: () => void
  30. }
  31. const Param = ({
  32. name,
  33. type,
  34. format,
  35. required,
  36. description,
  37. metadata = {},
  38. onDesciptionUpdated = noop,
  39. }: ParamProps) => {
  40. return (
  41. <div className="not-prose">
  42. <div className="mb-4 flex items-center gap-4">
  43. <h3 className="heading-default text-foreground mb-0 mt-0">{name}</h3>
  44. <Badge variant={required ? 'warning' : 'default'}>
  45. {required ? 'Required' : 'Optional'}
  46. </Badge>
  47. </div>
  48. {format && (
  49. <div className="grid grid-cols-[auto_1fr] gap-y-2 gap-x-10 text-sm">
  50. <label className="text-foreground-lighter">Type</label>
  51. <div className="text-foreground">{getColumnType(type, format)}</div>
  52. <label className="text-foreground-lighter">Format</label>
  53. <div className="text-foreground">{format}</div>
  54. {description !== false && (
  55. <>
  56. <label className="text-foreground-lighter">Description</label>
  57. <div className="text-foreground pt-1">
  58. <Description
  59. content={description?.toString()}
  60. metadata={metadata}
  61. onChange={onDesciptionUpdated}
  62. />
  63. </div>
  64. </>
  65. )}
  66. </div>
  67. )}
  68. </div>
  69. )
  70. }
  71. export default Param