SubjectAndSuggestionsInfo.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // End of third-party imports
  2. import { SupportCategories } from '@supabase/shared-types/out/constants'
  3. import { ExternalLink } from 'lucide-react'
  4. import Link from 'next/link'
  5. import type { UseFormReturn } from 'react-hook-form'
  6. import { FormControl, FormField, Input } from 'ui'
  7. import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
  8. import { DocsSuggestions } from './DocsSuggestions'
  9. import type { ExtendedSupportCategories } from './Support.constants'
  10. import type { SupportFormValues } from './SupportForm.schema'
  11. const INCLUDE_DISCUSSIONS: ExtendedSupportCategories[] = [
  12. SupportCategories.DATABASE_UNRESPONSIVE,
  13. SupportCategories.PROBLEM,
  14. ]
  15. interface SubjectAndSuggestionsInfoProps {
  16. form: UseFormReturn<SupportFormValues>
  17. category: ExtendedSupportCategories
  18. subject: string
  19. }
  20. export function SubjectAndSuggestionsInfo({
  21. form,
  22. category,
  23. subject,
  24. }: SubjectAndSuggestionsInfoProps) {
  25. return (
  26. <div className={'flex flex-col gap-y-2'}>
  27. <FormField
  28. name="subject"
  29. control={form.control}
  30. render={({ field }) => (
  31. <FormItemLayout layout="vertical" label="Subject">
  32. <FormControl>
  33. <Input {...field} placeholder="Summary of the problem you have" />
  34. </FormControl>
  35. </FormItemLayout>
  36. )}
  37. />
  38. <DocsSuggestions searchString={subject} />
  39. {subject && INCLUDE_DISCUSSIONS.includes(category) && (
  40. <GitHubDiscussionSuggestion subject={subject} />
  41. )}
  42. </div>
  43. )
  44. }
  45. interface GitHubDiscussionSuggestionProps {
  46. subject: string
  47. }
  48. function GitHubDiscussionSuggestion({ subject }: GitHubDiscussionSuggestionProps) {
  49. return (
  50. <p className="flex items-center gap-x-1 text-foreground-lighter text-sm">
  51. Check our
  52. <Link
  53. key="gh-discussions"
  54. href={`https://github.com/orgs/briven/discussions?discussions_q=${subject}`}
  55. target="_blank"
  56. rel="noreferrer"
  57. className="flex items-center gap-x-1 underline hover:text-foreground transition"
  58. >
  59. GitHub discussions
  60. <ExternalLink size={14} strokeWidth={2} />
  61. </Link>
  62. for a quick answer
  63. </p>
  64. )
  65. }