From eb83a52dd97f890b0650c51c0266975e4012b996 Mon Sep 17 00:00:00 2001 From: Daniel Campbell Date: Wed, 10 Jan 2024 09:37:09 -0800 Subject: [PATCH] feat(ui): Add product comparison page --- src/products/ProductComparisonTable.tsx | 461 +++++++++++++++++++++ src/products/ProductsPage.tsx | 33 ++ src/shared/containers/GetOrganizations.tsx | 5 +- src/shared/containers/index.tsx | 2 + 4 files changed, 500 insertions(+), 1 deletion(-) create mode 100644 src/products/ProductComparisonTable.tsx create mode 100644 src/products/ProductsPage.tsx diff --git a/src/products/ProductComparisonTable.tsx b/src/products/ProductComparisonTable.tsx new file mode 100644 index 0000000000..802945ba89 --- /dev/null +++ b/src/products/ProductComparisonTable.tsx @@ -0,0 +1,461 @@ +// Libraries +import React, {FC, Fragment} from 'react' + +// Components +import { + Table, + Button, + ComponentColor, + ComponentSize, + Heading, + HeadingElement, + Alignment, + Icon, + IconFont, + VerticalAlignment, +} from '@influxdata/clockface' + +export const ProductComparisonTable: FC = () => { + const comparisonTableContents = [ + { + groupDetails: { + title: 'Performance and scale', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + features: [ + { + feature: 'Writes', + serverless: <>5MB/5 mins (free) / 300MB/5 mins (paid), + dedicated: <>No applied service quota, + clustered: <>Scalable, + }, + { + feature: 'Queries (data read)', + serverless: <>300MB/5 mins (free) / 3000MB/5 mins (paid), + dedicated: <>No applied service quota, + clustered: <>Scalable, + }, + { + feature: 'Data retention', + serverless: <>30 days (free) / Unlimited (paid), + dedicated: <>Unlimited, + clustered: <>Unlimited, + }, + { + feature: 'Cardinality', + serverless: <>Contact sales about how to scale, + dedicated: <>Unlimited, + clustered: <>Unlimited, + }, + { + feature: 'Databases (buckets)', + serverless: <>2 (free) / Unlimited (paid), + dedicated: <>Unlimited, + clustered: <>Unlimited, + }, + { + feature: 'Notification rules', + serverless: <>2 (free) / Unlimited (paid), + dedicated: <>N/A, + clustered: <>N/A, + }, + { + feature: 'Multi-organization data access and management', + serverless: <>1 (free) / 3 (pay-as-you-go) / 20 (annual plan), + dedicated: <>N/A, + clustered: <>N/A, + }, + ], + }, + { + groupDetails: { + title: 'Operational efficiency', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + features: [ + { + feature: 'Storage costs', + serverless: <>90% lower than with InfluxDB OSS, + dedicated: <>90% lower than with InfluxDB OSS, + clustered: <>90% lower than with InfluxDB OSS, + }, + { + feature: 'Tiered storage', + serverless: , + dedicated: <>, + clustered: <>, + }, + ], + }, + { + groupDetails: { + title: 'Security and reliability', + serverless: ( + + See security details + + ), + dedicated: ( + + See details + + ), + clustered: ( + + See details + + ), + }, + features: [ + { + feature: 'End-to-end encryption', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'SOC 2 Certified', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'ISO 27001/27018', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Configurable for GDPR compliance', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Disaster recovery support', + serverless: <>, + dedicated: , + clustered: , + }, + { + feature: 'Technical support SLA', + serverless: <>, + dedicated: , + clustered: , + }, + { + feature: 'Private networking', + serverless: <>, + dedicated: <>Available as an add-on, + clustered: <>, + }, + { + feature: 'SAML/SSO', + serverless: <>, + dedicated: 'Available as an add-on', + clustered: , + }, + { + feature: 'OAuth', + serverless: , + dedicated: <>, + clustered: <>, + }, + { + feature: 'Secrets', + serverless: , + dedicated: <>, + clustered: <>, + }, + { + feature: 'IdP integration', + serverless: <>, + dedicated: <>, + clustered: , + }, + { + feature: 'Powerfull access control', + serverless: <>, + dedicated: <>, + clustered: , + }, + { + feature: 'Audit logging for compliance', + serverless: <>, + dedicated: <>, + clustered: , + }, + { + feature: 'High-available SLA guarantee', + serverless: , + dedicated: , + clustered: <>, + }, + ], + }, + { + groupDetails: { + title: 'Query languages', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + features: [ + { + feature: 'SQL', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'InfluxQL', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Flux', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + ], + }, + { + groupDetails: { + title: 'Integrations', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + features: [ + { + feature: 'Snowflake', + serverless: , + dedicated: <>, + clustered: <>, + }, + { + feature: 'Amazon AWS', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Google Cloud Platform', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + { + feature: 'Azure', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + { + feature: 'Tableau', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Superset', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Grafana', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Chronograf', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'Kapacitor', + serverless: , + dedicated: <>, + clustered: <>, + }, + { + feature: 'Telegraf', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'VS Code', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + ], + }, + { + groupDetails: { + title: 'APIs', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + features: [ + { + feature: 'v3 gRPC query', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'v1 HTTP write', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'v1 HTTP query', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'v2 HTTP write', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'v2 HTTP query', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + ], + }, + { + groupDetails: { + title: 'Storage', + serverless: <>, + dedicated: <>, + clustered: <>, + }, + features: [ + { + feature: 'Apache Parquet', + serverless: , + dedicated: , + clustered: , + }, + { + feature: 'S3 compatible object storage', + serverless: , + dedicated: , + clustered: , + }, + ], + }, + ] + + return ( + + + + + + + InfluxDB Cloud Serverless + + + Smaller workloads, multi-tenant service + +
+ ) +} diff --git a/src/products/ProductsPage.tsx b/src/products/ProductsPage.tsx new file mode 100644 index 0000000000..06ca492ae3 --- /dev/null +++ b/src/products/ProductsPage.tsx @@ -0,0 +1,33 @@ +// Libraries +import React, {FC} from 'react' + +// Components +import { + AppWrapper, + FunnelPage, + Heading, + HeadingElement, + InfluxColors, +} from '@influxdata/clockface' +import {ProductComparisonTable} from 'src/products/ProductComparisonTable' + +const ProductsPage: FC = () => ( + + + + Run InfluxDB 3.0 where you need it + + + Select the deployment option that works for you + + + + +) + +export default ProductsPage diff --git a/src/shared/containers/GetOrganizations.tsx b/src/shared/containers/GetOrganizations.tsx index a29d01af1c..e956d84ec5 100644 --- a/src/shared/containers/GetOrganizations.tsx +++ b/src/shared/containers/GetOrganizations.tsx @@ -6,7 +6,7 @@ import {identify} from 'rudder-sdk-js' // Components import PageSpinner from 'src/perf/components/PageSpinner' -import {CheckoutPage, OperatorPage} from 'src/shared/containers' +import {CheckoutPage, ProductsPage, OperatorPage} from 'src/shared/containers' const NoOrgsPage = lazy(() => import('src/organizations/containers/NoOrgsPage')) const NotebookTemplates = lazy( () => import('src/flows/components/FromTemplatePage') @@ -120,6 +120,9 @@ const GetOrganizations: FunctionComponent = () => { /> + {CLOUD && account.isUpgradeable === true && ( + + )} {CLOUD && account.isUpgradeable === true && ( )} diff --git a/src/shared/containers/index.tsx b/src/shared/containers/index.tsx index 9c5f517ef2..9b9ed169a1 100644 --- a/src/shared/containers/index.tsx +++ b/src/shared/containers/index.tsx @@ -92,6 +92,8 @@ export const OrgOverlay = lazy(() => import('src/operator/OrgOverlayWrapper')) export const CheckoutPage = lazy(() => import('src/checkout/CheckoutPage')) +export const ProductsPage = lazy(() => import('src/products/ProductsPage')) + export const SubscriptionsLanding = lazy( () => import('src/writeData/subscriptions/components/SubscriptionsLanding') )