AwsMarketplaceCreateNewOrg.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import Link from 'next/link'
  2. import { useRouter } from 'next/router'
  3. import { SubmitHandler } from 'react-hook-form'
  4. import { toast } from 'sonner'
  5. import { Button } from 'ui'
  6. import AwsMarketplaceAutoRenewalWarning from './AwsMarketplaceAutoRenewalWarning'
  7. import AwsMarketplaceOnboardingPlaceholder from './AwsMarketplaceOnboardingPlaceholder'
  8. import { useCloudMarketplaceOnboardingInfoQuery } from './cloud-marketplace-query'
  9. import NewAwsMarketplaceOrgForm, {
  10. CREATE_AWS_MANAGED_ORG_FORM_ID,
  11. NewMarketplaceOrgForm,
  12. } from './NewAwsMarketplaceOrgForm'
  13. import {
  14. ScaffoldSection,
  15. ScaffoldSectionContent,
  16. ScaffoldSectionDetail,
  17. } from '@/components/layouts/Scaffold'
  18. import { useAwsManagedOrganizationCreateMutation } from '@/data/organizations/organization-create-mutation'
  19. import { DOCS_URL } from '@/lib/constants'
  20. const AwsMarketplaceCreateNewOrg = () => {
  21. const router = useRouter()
  22. const {
  23. query: { buyer_id: buyerId },
  24. } = router
  25. const { data: onboardingInfo, isPending: isLoadingOnboardingInfo } =
  26. useCloudMarketplaceOnboardingInfoQuery({
  27. buyerId: buyerId as string,
  28. })
  29. const { mutate: createOrganization, isPending: isCreatingOrganization } =
  30. useAwsManagedOrganizationCreateMutation({
  31. onSuccess: (org) => {
  32. //TODO(thomas): send tracking event?
  33. router.push(`/org/${org.slug}`)
  34. },
  35. onError: (res) => {
  36. toast.error(res.message, {
  37. duration: 7_000,
  38. })
  39. },
  40. })
  41. const onSubmit: SubmitHandler<NewMarketplaceOrgForm> = async (values) => {
  42. createOrganization({ ...values, buyerId: buyerId as string })
  43. }
  44. return (
  45. <>
  46. {onboardingInfo &&
  47. !onboardingInfo.aws_contract_auto_renewal &&
  48. !onboardingInfo.aws_contract_is_private_offer && (
  49. <AwsMarketplaceAutoRenewalWarning
  50. awsContractEndDate={onboardingInfo.aws_contract_end_date}
  51. awsContractSettingsUrl={onboardingInfo.aws_contract_settings_url}
  52. />
  53. )}
  54. {isLoadingOnboardingInfo ? (
  55. <AwsMarketplaceOnboardingPlaceholder />
  56. ) : (
  57. <ScaffoldSection>
  58. <ScaffoldSectionDetail className="text-base">
  59. <p>
  60. You’ve subscribed to the Briven {onboardingInfo?.plan_name_selected_on_marketplace}{' '}
  61. Plan via the AWS Marketplace. As a final step, you need to create a Briven
  62. organization. That organization will be managed and billed through AWS Marketplace.
  63. </p>
  64. <p>
  65. You can read more on billing through AWS in our {''}
  66. <Link
  67. href={`${DOCS_URL}/guides/platform/aws-marketplace`}
  68. target="_blank"
  69. className="underline"
  70. >
  71. Billing Docs.
  72. </Link>
  73. </p>
  74. </ScaffoldSectionDetail>
  75. <ScaffoldSectionContent className="lg:ml-10">
  76. <div className="border-l px-10 pt-10">
  77. <NewAwsMarketplaceOrgForm onSubmit={onSubmit} />
  78. <div className="flex justify-end mt-10">
  79. <Button
  80. form={CREATE_AWS_MANAGED_ORG_FORM_ID}
  81. htmlType="submit"
  82. loading={isCreatingOrganization}
  83. size="medium"
  84. >
  85. Create organization
  86. </Button>
  87. </div>
  88. </div>
  89. </ScaffoldSectionContent>
  90. </ScaffoldSection>
  91. )}
  92. </>
  93. )
  94. }
  95. export default AwsMarketplaceCreateNewOrg