From ac05d95d91f7adf9a830c487b366fd4670ba88b5 Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Mon, 8 Apr 2024 17:27:13 -0400 Subject: [PATCH 1/5] update gecko feature flag to object --- .../SelectRegionPanel/SelectRegionPanel.tsx | 4 +++- .../manager/src/dev-tools/FeatureFlagTool.tsx | 2 +- packages/manager/src/featureFlags.ts | 7 +++++++ .../Linodes/LinodesCreate/LinodeCreate.tsx | 2 +- .../TabbedContent/FromLinodeContent.tsx | 2 +- .../Linodes/LinodesLanding/LinodesLanding.tsx | 21 ++++++++++++------- .../Linodes/MigrateLinode/ConfigureForm.tsx | 4 +++- .../Linodes/MigrateLinode/MigrateLinode.tsx | 2 +- .../components/PlansPanel/PlansPanel.tsx | 2 +- 9 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx index 8bea877b099..7a89a20e1fa 100644 --- a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx +++ b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx @@ -78,7 +78,8 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { }); const hideEdgeRegions = - !flags.gecko || + !flags.gecko2?.enabled || + !flags.gecko2?.beta || !getIsLinodeCreateTypeEdgeSupported(params.type as LinodeCreateType); const showEdgeIconHelperText = Boolean( @@ -130,6 +131,7 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { ) : null} + {flags.gecko2?.enabled && flags.gecko2?.ga && 'Gecko GA'} ; export interface Flags { @@ -54,6 +60,7 @@ export interface Flags { disableLargestGbPlans: boolean; firewallNodebalancer: boolean; gecko: boolean; + gecko2: GeckoFlag; ipv6Sharing: boolean; linodeCloneUiChanges: boolean; linodeCreateRefactor: boolean; diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx index c83a7f7f317..4d8efbd6054 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx @@ -474,7 +474,7 @@ export class LinodeCreate extends React.PureComponent< (imageIsCloudInitCompatible || linodeIsCloudInitCompatible); const isEdgeRegionSelected = Boolean( - flags.gecko && + flags.gecko2?.enabled && getIsEdgeRegion(regionsData, this.props.selectedRegionID ?? '') ); diff --git a/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx b/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx index 84e32a98f12..21931f4e159 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx @@ -80,7 +80,7 @@ export const FromLinodeContent = (props: CombinedProps) => { (linode) => !getIsEdgeRegion(regionsData, linode.region) // Hide linodes that are in an edge region ); - const filteredLinodes = flags.gecko + const filteredLinodes = flags.gecko2?.enabled ? filterEdgeLinodes(linodesData) : linodesData; diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodesLanding.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodesLanding.tsx index 7f2dfb358ec..08996d093d4 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodesLanding.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodesLanding.tsx @@ -11,6 +11,10 @@ import OrderBy from 'src/components/OrderBy'; import { PreferenceToggle } from 'src/components/PreferenceToggle/PreferenceToggle'; import { ProductInformationBanner } from 'src/components/ProductInformationBanner/ProductInformationBanner'; import { TransferDisplay } from 'src/components/TransferDisplay/TransferDisplay'; +import { + WithFeatureFlagProps, + withFeatureFlags, +} from 'src/containers/flags.container'; import { WithProfileProps, withProfile, @@ -87,14 +91,15 @@ export interface LinodesLandingProps { someLinodesHaveScheduledMaintenance: boolean; } -interface ListLinodesProps - extends LinodesLandingProps, - RouteProps, - WithProfileProps {} +type CombinedProps = LinodesLandingProps & + RouteProps & + WithFeatureFlagProps & + WithProfileProps; -class ListLinodes extends React.Component { +class ListLinodes extends React.Component { render() { const { + flags, grants, linodesData, linodesInTransition, @@ -161,6 +166,7 @@ class ListLinodes extends React.Component { return ( + {flags.gecko2?.enabled && flags.gecko2?.ga && 'Gecko GA'} { sendGroupByTagEnabledEvent(eventCategory, value); }; -export const enhanced = compose( +export const enhanced = compose( withRouter, - withProfile + withProfile, + withFeatureFlags ); export default enhanced(ListLinodes); diff --git a/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx b/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx index 5895485233a..89c71f403f4 100644 --- a/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx +++ b/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx @@ -134,6 +134,9 @@ export const ConfigureForm = React.memo((props: Props) => { eachRegion.id !== currentRegion @@ -146,7 +149,6 @@ export const ConfigureForm = React.memo((props: Props) => { errorText={errorText} handleSelection={handleSelectRegion} label="New Region" - regionFilter={flags.gecko && linodeIsInEdgeRegion ? 'edge' : 'core'} selectedId={selectedRegion} /> {shouldDisplayPriceComparison && selectedRegion && ( diff --git a/packages/manager/src/features/Linodes/MigrateLinode/MigrateLinode.tsx b/packages/manager/src/features/Linodes/MigrateLinode/MigrateLinode.tsx index 9a83b193458..96ca7ad1700 100644 --- a/packages/manager/src/features/Linodes/MigrateLinode/MigrateLinode.tsx +++ b/packages/manager/src/features/Linodes/MigrateLinode/MigrateLinode.tsx @@ -151,7 +151,7 @@ export const MigrateLinode = React.memo((props: Props) => { ); const edgeRegionWarning = - flags.gecko && linodeIsInEdgeRegion + flags.gecko2?.enabled && linodeIsInEdgeRegion ? 'Edge sites may only be migrated to other Edge sites.' : undefined; diff --git a/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx b/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx index 851cc402dee..7c8a50641b6 100644 --- a/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx +++ b/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx @@ -87,7 +87,7 @@ export const PlansPanel = (props: Props) => { ); const hideEdgeRegions = - !flags.gecko || + !flags.gecko2?.enabled || !getIsLinodeCreateTypeEdgeSupported(params.type as LinodeCreateType); const showEdgePlanTable = From f35c2c2ce9957a55241191aa0c928014b46d0514 Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Mon, 8 Apr 2024 17:37:00 -0400 Subject: [PATCH 2/5] fix ga region display --- .../components/SelectRegionPanel/SelectRegionPanel.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx index 7a89a20e1fa..891e3761e73 100644 --- a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx +++ b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx @@ -77,11 +77,17 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { type, }); + // Gecko Beta const hideEdgeRegions = !flags.gecko2?.enabled || !flags.gecko2?.beta || !getIsLinodeCreateTypeEdgeSupported(params.type as LinodeCreateType); + const isGeckoGA = + flags.gecko2?.enabled && + flags.gecko2?.ga && + getIsLinodeCreateTypeEdgeSupported(params.type as LinodeCreateType); + const showEdgeIconHelperText = Boolean( !hideEdgeRegions && currentCapability && @@ -131,7 +137,7 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { ) : null} - {flags.gecko2?.enabled && flags.gecko2?.ga && 'Gecko GA'} + {isGeckoGA && 'Gecko GA'} Date: Mon, 8 Apr 2024 17:51:13 -0400 Subject: [PATCH 3/5] Added changeset: Update gecko feature flag to object --- .../.changeset/pr-10363-upcoming-features-1712613073120.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/manager/.changeset/pr-10363-upcoming-features-1712613073120.md diff --git a/packages/manager/.changeset/pr-10363-upcoming-features-1712613073120.md b/packages/manager/.changeset/pr-10363-upcoming-features-1712613073120.md new file mode 100644 index 00000000000..bfcb0abbf17 --- /dev/null +++ b/packages/manager/.changeset/pr-10363-upcoming-features-1712613073120.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Update gecko feature flag to object ([#10363](https://github.com/linode/manager/pull/10363)) From aee9093b150b049b735355c344e35a9a595bbbec Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Wed, 10 Apr 2024 11:26:56 -0400 Subject: [PATCH 4/5] clean up --- .../src/components/SelectRegionPanel/SelectRegionPanel.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx index 891e3761e73..0fb480ff6a7 100644 --- a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx +++ b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx @@ -77,10 +77,9 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { type, }); - // Gecko Beta const hideEdgeRegions = !flags.gecko2?.enabled || - !flags.gecko2?.beta || + flags.gecko2?.ga || !getIsLinodeCreateTypeEdgeSupported(params.type as LinodeCreateType); const isGeckoGA = From 05409e1e58bd5900d5868776a7eaab67c0cef603 Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Thu, 11 Apr 2024 13:36:44 -0400 Subject: [PATCH 5/5] address feedback --- packages/manager/src/featureFlags.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/manager/src/featureFlags.ts b/packages/manager/src/featureFlags.ts index 551ce0cb94f..8e2fc8fddf4 100644 --- a/packages/manager/src/featureFlags.ts +++ b/packages/manager/src/featureFlags.ts @@ -43,7 +43,6 @@ interface PlacementGroupsFlag { } interface GeckoFlag { - beta: boolean; enabled: boolean; ga: boolean; } @@ -59,7 +58,7 @@ export interface Flags { databases: boolean; disableLargestGbPlans: boolean; firewallNodebalancer: boolean; - gecko: boolean; + gecko: boolean; // @TODO gecko: delete this after next release gecko2: GeckoFlag; ipv6Sharing: boolean; linodeCloneUiChanges: boolean;