From 534dd093d20b1c2496a6edc5ae21729261cd6856 Mon Sep 17 00:00:00 2001 From: Tymoteusz Czech <2625371+Tymek@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:26:13 +0200 Subject: [PATCH] Additional environments confirmation dialog (#8407) --- .../EnvironmentTable/EnvironmentTable.tsx | 24 ++------- .../OrderEnvironments/OrderEnvironments.tsx | 53 +++++++++++++++++++ .../OrderEnvironmentsConfirmation.tsx | 29 ++++++++++ .../OrderEnvironmentsDialog.test.tsx | 0 .../OrderEnvironmentsDialog.tsx | 0 .../OrderEnvironmentsDialogPricing.tsx | 0 .../PurchasableFeature/PurchasableFeature.tsx | 0 7 files changed, 85 insertions(+), 21 deletions(-) create mode 100644 frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironments.tsx create mode 100644 frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsConfirmation/OrderEnvironmentsConfirmation.tsx rename frontend/src/component/environments/EnvironmentTable/{ => OrderEnvironments}/OrderEnvironmentsDialog/OrderEnvironmentsDialog.test.tsx (100%) rename frontend/src/component/environments/EnvironmentTable/{ => OrderEnvironments}/OrderEnvironmentsDialog/OrderEnvironmentsDialog.tsx (100%) rename frontend/src/component/environments/EnvironmentTable/{ => OrderEnvironments}/OrderEnvironmentsDialog/OrderEnvironmentsDialogPricing/OrderEnvironmentsDialogPricing.tsx (100%) rename frontend/src/component/environments/EnvironmentTable/{ => OrderEnvironments}/PurchasableFeature/PurchasableFeature.tsx (100%) diff --git a/frontend/src/component/environments/EnvironmentTable/EnvironmentTable.tsx b/frontend/src/component/environments/EnvironmentTable/EnvironmentTable.tsx index 99d3fdddb9..770f9f2f9a 100644 --- a/frontend/src/component/environments/EnvironmentTable/EnvironmentTable.tsx +++ b/frontend/src/component/environments/EnvironmentTable/EnvironmentTable.tsx @@ -8,7 +8,7 @@ import { Table, TablePlaceholder, } from 'component/common/Table'; -import { useCallback, useMemo, useState } from 'react'; +import { useCallback, useMemo } from 'react'; import { SearchHighlightProvider } from 'component/common/Table/SearchHighlightContext/SearchHighlightContext'; import { Alert, styled, TableBody } from '@mui/material'; import type { MoveListItem } from 'hooks/useDragItem'; @@ -27,11 +27,8 @@ import { HighlightCell } from 'component/common/Table/cells/HighlightCell/Highli import { TextCell } from 'component/common/Table/cells/TextCell/TextCell'; import type { IEnvironment } from 'interfaces/environments'; import { useUiFlag } from 'hooks/useUiFlag'; -import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature'; -import { PurchasableFeature } from './PurchasableFeature/PurchasableFeature'; -import { OrderEnvironmentsDialog } from './OrderEnvironmentsDialog/OrderEnvironmentsDialog'; - +import { OrderEnvironments } from './OrderEnvironments/OrderEnvironments'; const StyledAlert = styled(Alert)(({ theme }) => ({ marginBottom: theme.spacing(4), })); @@ -40,12 +37,10 @@ export const EnvironmentTable = () => { const { changeSortOrder } = useEnvironmentApi(); const { setToastApiError } = useToast(); const { environments, mutateEnvironments } = useEnvironments(); - const [purchaseDialogOpen, setPurchaseDialogOpen] = useState(false); const isFeatureEnabled = useUiFlag('EEA'); const isPurchaseAdditionalEnvironmentsEnabled = useUiFlag( 'purchaseAdditionalEnvironments', ); - const { isPro } = useUiConfig(); const moveListItem: MoveListItem = useCallback( async (dragIndex: number, dropIndex: number, save = false) => { @@ -131,20 +126,7 @@ export const EnvironmentTable = () => { return ( - {isPro() && isPurchaseAdditionalEnvironmentsEnabled ? ( - <> - setPurchaseDialogOpen(true)} - /> - setPurchaseDialogOpen(false)} - onSubmit={() => {}} // TODO: API call - /> - - ) : null} + This is the order of environments that you have today in each feature flag. Rearranging them here will change also the order diff --git a/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironments.tsx b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironments.tsx new file mode 100644 index 0000000000..c03cc12342 --- /dev/null +++ b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironments.tsx @@ -0,0 +1,53 @@ +import { useState, type FC } from 'react'; +import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; +import { useUiFlag } from 'hooks/useUiFlag'; +import { PurchasableFeature } from './PurchasableFeature/PurchasableFeature'; +import { OrderEnvironmentsDialog } from './OrderEnvironmentsDialog/OrderEnvironmentsDialog'; +import { OrderEnvironmentsConfirmation } from './OrderEnvironmentsConfirmation/OrderEnvironmentsConfirmation'; + +type OrderEnvironmentsProps = {}; + +export const OrderEnvironments: FC = () => { + const [purchaseDialogOpen, setPurchaseDialogOpen] = useState(false); + const [confirmationState, setConfirmationState] = useState<{ + isOpen: boolean; + environmentsCount?: number; + }>({ isOpen: false }); + const { isPro } = useUiConfig(); + const isPurchaseAdditionalEnvironmentsEnabled = useUiFlag( + 'purchaseAdditionalEnvironments', + ); + + if (!isPro() || !isPurchaseAdditionalEnvironmentsEnabled) { + return null; + } + + const onSubmit = (environments: string[]) => { + setPurchaseDialogOpen(false); + // TODO: API call + setConfirmationState({ + isOpen: true, + environmentsCount: environments.length, + }); + }; + + return ( + <> + setPurchaseDialogOpen(true)} + /> + setPurchaseDialogOpen(false)} + onSubmit={onSubmit} + /> + setConfirmationState({ isOpen: false })} + /> + + ); +}; diff --git a/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsConfirmation/OrderEnvironmentsConfirmation.tsx b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsConfirmation/OrderEnvironmentsConfirmation.tsx new file mode 100644 index 0000000000..ba666a5f34 --- /dev/null +++ b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsConfirmation/OrderEnvironmentsConfirmation.tsx @@ -0,0 +1,29 @@ +import type { FC } from 'react'; +import { Typography } from '@mui/material'; +import { Dialogue } from 'component/common/Dialogue/Dialogue'; + +type OrderEnvironmentsConfirmationProps = { + open: boolean; + orderedEnvironments: number; + onClose: () => void; +}; + +export const OrderEnvironmentsConfirmation: FC< + OrderEnvironmentsConfirmationProps +> = ({ open, orderedEnvironments, onClose }) => { + return ( + + + You have ordered {orderedEnvironments}{' '} + additional{' '} + {orderedEnvironments === 1 ? 'environment' : 'environments'}. It + may take up to 24 hours before you will get access. + + + ); +}; diff --git a/frontend/src/component/environments/EnvironmentTable/OrderEnvironmentsDialog/OrderEnvironmentsDialog.test.tsx b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsDialog/OrderEnvironmentsDialog.test.tsx similarity index 100% rename from frontend/src/component/environments/EnvironmentTable/OrderEnvironmentsDialog/OrderEnvironmentsDialog.test.tsx rename to frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsDialog/OrderEnvironmentsDialog.test.tsx diff --git a/frontend/src/component/environments/EnvironmentTable/OrderEnvironmentsDialog/OrderEnvironmentsDialog.tsx b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsDialog/OrderEnvironmentsDialog.tsx similarity index 100% rename from frontend/src/component/environments/EnvironmentTable/OrderEnvironmentsDialog/OrderEnvironmentsDialog.tsx rename to frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsDialog/OrderEnvironmentsDialog.tsx diff --git a/frontend/src/component/environments/EnvironmentTable/OrderEnvironmentsDialog/OrderEnvironmentsDialogPricing/OrderEnvironmentsDialogPricing.tsx b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsDialog/OrderEnvironmentsDialogPricing/OrderEnvironmentsDialogPricing.tsx similarity index 100% rename from frontend/src/component/environments/EnvironmentTable/OrderEnvironmentsDialog/OrderEnvironmentsDialogPricing/OrderEnvironmentsDialogPricing.tsx rename to frontend/src/component/environments/EnvironmentTable/OrderEnvironments/OrderEnvironmentsDialog/OrderEnvironmentsDialogPricing/OrderEnvironmentsDialogPricing.tsx diff --git a/frontend/src/component/environments/EnvironmentTable/PurchasableFeature/PurchasableFeature.tsx b/frontend/src/component/environments/EnvironmentTable/OrderEnvironments/PurchasableFeature/PurchasableFeature.tsx similarity index 100% rename from frontend/src/component/environments/EnvironmentTable/PurchasableFeature/PurchasableFeature.tsx rename to frontend/src/component/environments/EnvironmentTable/OrderEnvironments/PurchasableFeature/PurchasableFeature.tsx