HttpRequestSection.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { UseFormReturn } from 'react-hook-form'
  2. import {
  3. FormControl,
  4. FormField,
  5. FormItem,
  6. FormLabel,
  7. FormMessage,
  8. Input,
  9. InputGroup,
  10. InputGroupAddon,
  11. InputGroupInput,
  12. InputGroupText,
  13. Select,
  14. SelectContent,
  15. SelectItem,
  16. SelectTrigger,
  17. SelectValue,
  18. SheetSection,
  19. } from 'ui'
  20. import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
  21. import { CreateCronJobForm } from './CreateCronJobSheet/CreateCronJobSheet.constants'
  22. interface HttpRequestSectionProps {
  23. form: UseFormReturn<CreateCronJobForm>
  24. }
  25. export const HttpRequestSection = ({ form }: HttpRequestSectionProps) => {
  26. return (
  27. <SheetSection className="flex flex-col gap-3">
  28. <FormField
  29. control={form.control}
  30. name="values.method"
  31. render={({ field }) => (
  32. <FormItem>
  33. <FormLabel>Method</FormLabel>
  34. <Select onValueChange={field.onChange} value={field.value}>
  35. <FormControl>
  36. <SelectTrigger>
  37. <SelectValue placeholder="Select a method for the HTTP request" />
  38. </SelectTrigger>
  39. </FormControl>
  40. <SelectContent>
  41. <SelectItem value="GET">GET</SelectItem>
  42. <SelectItem value="POST">POST</SelectItem>
  43. </SelectContent>
  44. </Select>
  45. <FormMessage />
  46. </FormItem>
  47. )}
  48. />
  49. <FormField
  50. control={form.control}
  51. name="values.endpoint"
  52. render={({ field: { ref, ...rest } }) => (
  53. <FormItemLayout label="Endpoint URL" className="gap-1">
  54. <FormControl>
  55. <Input {...rest} placeholder="https://api.example.com/endpoint" />
  56. </FormControl>
  57. </FormItemLayout>
  58. )}
  59. />
  60. <FormField
  61. control={form.control}
  62. name="values.timeoutMs"
  63. render={({ field: { ref, ...rest } }) => (
  64. <FormItemLayout label="Timeout" className="gap-1">
  65. <InputGroup>
  66. <InputGroupInput {...rest} type="number" placeholder="1000" />
  67. <InputGroupAddon align="inline-end">
  68. <InputGroupText> ms</InputGroupText>
  69. </InputGroupAddon>
  70. </InputGroup>
  71. </FormItemLayout>
  72. )}
  73. />
  74. </SheetSection>
  75. )
  76. }