Skip to content

Commit 05ecd6b

Browse files
Merge pull request #3608 from RedisInsight/CR-109-breadcrumbs-4
CR-109: Use env variable in feature flag component to selectively dis…
2 parents 86bcac3 + e14b697 commit 05ecd6b

File tree

10 files changed

+79
-112
lines changed

10 files changed

+79
-112
lines changed

redisinsight/api/config/features-config.json

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -89,26 +89,6 @@
8989
"data": {
9090
"strategy": "ioredis"
9191
}
92-
},
93-
"appSettings": {
94-
"flag": true,
95-
"perc": [[0,100]]
96-
},
97-
"profiler": {
98-
"flag": true,
99-
"perc": [[0,100]]
100-
},
101-
"dbAnalysis": {
102-
"flag": true,
103-
"perc": [[0,100]]
104-
},
105-
"appNotifications": {
106-
"flag": true,
107-
"perc": [[0,100]]
108-
},
109-
"triggersAndFunctions": {
110-
"flag": true,
111-
"perc": [[0,100]]
11292
}
11393
}
11494
}

redisinsight/api/src/modules/feature/constants/index.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ export enum KnownFeatures {
2525
CloudSsoRecommendedSettings = 'cloudSsoRecommendedSettings',
2626
RedisModuleFilter = 'redisModuleFilter',
2727
RedisClient = 'redisClient',
28-
appSettings = 'appSettings',
29-
profiler = 'profiler',
30-
dbAnalysis = 'dbAnalysis',
31-
appNotifications = 'appNotifications',
32-
triggersAndFunctions = 'triggersAndFunctions',
3328
DocumentationChat = 'documentationChat',
3429
DatabaseChat = 'databaseChat',
3530
}

redisinsight/api/src/modules/feature/constants/known-features.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,6 @@ export const knownFeatures: Record<KnownFeatures, IFeatureFlag> = {
2323
name: KnownFeatures.RedisClient,
2424
storage: FeatureStorage.Database,
2525
},
26-
[KnownFeatures.appSettings]: {
27-
name: KnownFeatures.appSettings,
28-
storage: FeatureStorage.Database,
29-
},
30-
[KnownFeatures.profiler]: {
31-
name: KnownFeatures.profiler,
32-
storage: FeatureStorage.Database,
33-
},
34-
[KnownFeatures.dbAnalysis]: {
35-
name: KnownFeatures.dbAnalysis,
36-
storage: FeatureStorage.Database,
37-
},
38-
[KnownFeatures.appNotifications]: {
39-
name: KnownFeatures.appNotifications,
40-
storage: FeatureStorage.Database,
41-
},
42-
[KnownFeatures.triggersAndFunctions]: {
43-
name: KnownFeatures.triggersAndFunctions,
44-
storage: FeatureStorage.Database,
45-
},
4626
[KnownFeatures.DocumentationChat]: {
4727
name: KnownFeatures.DocumentationChat,
4828
storage: FeatureStorage.Database,

redisinsight/api/src/modules/feature/providers/feature-flag/feature-flag.provider.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -52,26 +52,6 @@ export class FeatureFlagProvider {
5252
this.featuresConfigService,
5353
this.settingsService,
5454
));
55-
this.strategies.set(KnownFeatures.appSettings, new CommonFlagStrategy(
56-
this.featuresConfigService,
57-
this.settingsService,
58-
));
59-
this.strategies.set(KnownFeatures.profiler, new CommonFlagStrategy(
60-
this.featuresConfigService,
61-
this.settingsService,
62-
));
63-
this.strategies.set(KnownFeatures.dbAnalysis, new CommonFlagStrategy(
64-
this.featuresConfigService,
65-
this.settingsService,
66-
));
67-
this.strategies.set(KnownFeatures.appNotifications, new CommonFlagStrategy(
68-
this.featuresConfigService,
69-
this.settingsService,
70-
));
71-
this.strategies.set(KnownFeatures.triggersAndFunctions, new CommonFlagStrategy(
72-
this.featuresConfigService,
73-
this.settingsService,
74-
));
7555
}
7656

7757
getStrategy(name: string): FeatureFlagStrategy {

redisinsight/ui/src/components/bottom-group-components/components/bottom-group-minimized/BottomGroupMinimized.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ const BottomGroupMinimized = () => {
111111
<span>Command Helper</span>
112112
</EuiBadge>
113113
</EuiFlexItem>
114-
<FeatureFlagComponent name={FeatureFlags.profiler}>
114+
<FeatureFlagComponent name={FeatureFlags.disabledByEnv} enabledByDefault>
115115
<EuiFlexItem
116116
className={styles.componentBadgeItem}
117117
grow={false}

redisinsight/ui/src/components/feature-flag-component/FeatureFlagComponent.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ export interface Props {
88
name: FeatureFlags
99
children: JSX.Element | JSX.Element[]
1010
otherwise?: React.ReactElement
11+
enabledByDefault?: boolean
1112
}
1213

1314
const FeatureFlagComponent = (props: Props) => {
14-
const { children, name, otherwise } = props
15+
const { children, name, otherwise, enabledByDefault } = props
1516
const { [name]: feature } = useSelector(appFeatureFlagsFeaturesSelector)
16-
const { flag, variant } = feature ?? { flag: false }
17+
const { flag, variant } = feature ?? { flag: enabledByDefault }
18+
1719
if (!flag) {
1820
return otherwise ?? null
1921
}

redisinsight/ui/src/components/instance-header/InstanceHeader.tsx

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -101,27 +101,31 @@ const InstanceHeader = ({ onChangeDbIndex }: Props) => {
101101
<EuiFlexItem style={{ overflow: 'hidden' }}>
102102
<div className={styles.breadcrumbsContainer} data-testid="breadcrumbs-container">
103103
<div>
104-
<EuiToolTip
105-
position="bottom"
106-
content={server?.buildType === BuildType.RedisStack ? 'Edit database' : 'My Redis databases'}
107-
>
108-
<EuiText
109-
className={styles.breadCrumbLink}
110-
aria-label={server?.buildType === BuildType.RedisStack ? 'Edit database' : 'My Redis databases'}
111-
data-testid="my-redis-db-btn"
112-
onClick={goHome}
113-
onKeyDown={goHome}
104+
<FeatureFlagComponent name={FeatureFlags.disabledByEnv} enabledByDefault>
105+
<EuiToolTip
106+
position="bottom"
107+
content={server?.buildType === BuildType.RedisStack ? 'Edit database' : 'My Redis databases'}
114108
>
115-
Databases
116-
</EuiText>
117-
</EuiToolTip>
109+
<EuiText
110+
className={styles.breadCrumbLink}
111+
aria-label={server?.buildType === BuildType.RedisStack ? 'Edit database' : 'My Redis databases'}
112+
data-testid="my-redis-db-btn"
113+
onClick={goHome}
114+
onKeyDown={goHome}
115+
>
116+
Databases
117+
</EuiText>
118+
</EuiToolTip>
119+
</FeatureFlagComponent>
118120
</div>
119121
<div style={{ flex: 1, overflow: 'hidden' }}>
120122
<div style={{ maxWidth: '100%' }}>
121123
<EuiFlexGroup gutterSize="none" alignItems="center" responsive={false}>
122-
<EuiFlexItem grow={false}>
123-
<EuiText className={styles.divider}>&#62;</EuiText>
124-
</EuiFlexItem>
124+
<FeatureFlagComponent name={FeatureFlags.disabledByEnv} enabledByDefault>
125+
<EuiFlexItem grow={false}>
126+
<EuiText className={styles.divider}>&#62;</EuiText>
127+
</EuiFlexItem>
128+
</FeatureFlagComponent>
125129
<EuiFlexItem style={{ overflow: 'hidden' }}>
126130
<b className={styles.dbName}>{name}</b>
127131
</EuiFlexItem>

redisinsight/ui/src/components/navigation-menu/NavigationMenu.tsx

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,8 @@ import { ANALYTICS_ROUTES, TRIGGERED_FUNCTIONS_ROUTES } from 'uiSrc/components/m
1717

1818
import { FeatureFlags, PageNames, Pages } from 'uiSrc/constants'
1919
import { EXTERNAL_LINKS } from 'uiSrc/constants/links'
20-
import { getRouterLinkProps } from 'uiSrc/services'
2120
import { appFeaturePagesHighlightingSelector, removeFeatureFromHighlighting } from 'uiSrc/slices/app/features'
2221
import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
23-
import {
24-
appInfoSelector,
25-
} from 'uiSrc/slices/app/info'
26-
import LogoSVG from 'uiSrc/assets/img/logo_small.svg?react'
2722
import SettingsSVG from 'uiSrc/assets/img/sidebar/settings.svg'
2823
import SettingsActiveSVG from 'uiSrc/assets/img/sidebar/settings_active.svg'
2924
import BrowserSVG from 'uiSrc/assets/img/sidebar/browser.svg'
@@ -38,7 +33,6 @@ import TriggeredFunctionsSVG from 'uiSrc/assets/img/sidebar/gears.svg'
3833
import TriggeredFunctionsActiveSVG from 'uiSrc/assets/img/sidebar/gears_active.svg'
3934
import GithubSVG from 'uiSrc/assets/img/sidebar/github.svg'
4035
import Divider from 'uiSrc/components/divider/Divider'
41-
import { BuildType } from 'uiSrc/constants/env'
4236
import { renderOnboardingTourWithChild } from 'uiSrc/utils/onboarding'
4337
import { ONBOARDING_FEATURES } from 'uiSrc/components/onboarding-features'
4438
import { BUILD_FEATURES } from 'uiSrc/constants/featuresHighlighting'
@@ -47,6 +41,7 @@ import { FeatureFlagComponent } from 'uiSrc/components'
4741
import HelpMenu from './components/help-menu/HelpMenu'
4842
import NotificationMenu from './components/notifications-center'
4943

44+
import { RedisLogo } from './components/redis-logo/RedisLogo'
5045
import styles from './styles.module.scss'
5146

5247
const workbenchPath = `/${PageNames.workbench}`
@@ -66,6 +61,7 @@ interface INavigations {
6661
getIconType: () => string
6762
onboard?: any
6863
featureFlag?: FeatureFlags
64+
enabledByDefault?: boolean
6965
}
7066

7167
const NavigationMenu = () => {
@@ -76,7 +72,6 @@ const NavigationMenu = () => {
7672
const [activePage, setActivePage] = useState(Pages.home)
7773

7874
const { id: connectedInstanceId = '' } = useSelector(connectedInstanceSelector)
79-
const { server } = useSelector(appInfoSelector)
8075
const highlightedPages = useSelector(appFeaturePagesHighlightingSelector)
8176

8277
useEffect(() => {
@@ -146,7 +141,8 @@ const NavigationMenu = () => {
146141
dataTestId: 'analytics-page-btn',
147142
connectedInstanceId,
148143
isActivePage: isAnalyticsPath(activePage),
149-
featureFlag: FeatureFlags.dbAnalysis,
144+
featureFlag: FeatureFlags.disabledByEnv,
145+
enabledByDefault: true,
150146
getClassName() {
151147
return cx(styles.navigationButton, { [styles.active]: this.isActivePage })
152148
},
@@ -179,7 +175,8 @@ const NavigationMenu = () => {
179175
connectedInstanceId,
180176
isActivePage: isTriggeredFunctionsPath(activePage),
181177
isBeta: true,
182-
featureFlag: FeatureFlags.triggersAndFunctions,
178+
featureFlag: FeatureFlags.disabledByEnv,
179+
enabledByDefault: true,
183180
getClassName() {
184181
return cx(styles.navigationButton, { [styles.active]: this.isActivePage })
185182
},
@@ -198,7 +195,8 @@ const NavigationMenu = () => {
198195
onClick: () => handleGoPage(Pages.settings),
199196
dataTestId: 'settings-page-btn',
200197
isActivePage: activePage === Pages.settings,
201-
featureFlag: FeatureFlags.appSettings,
198+
featureFlag: FeatureFlags.disabledByEnv,
199+
enabledByDefault: true,
202200
getClassName() {
203201
return cx(styles.navigationButton, { [styles.active]: this.isActivePage })
204202
},
@@ -260,35 +258,30 @@ const NavigationMenu = () => {
260258
return (
261259
<EuiPageSideBar aria-label="Main navigation" className={cx(styles.navigation, 'eui-yScroll')}>
262260
<div className={styles.container}>
263-
<EuiToolTip
264-
content={server?.buildType === BuildType.RedisStack ? 'Edit database' : 'My Redis databases'}
265-
position="right"
266-
>
267-
<span className={cx(styles.iconNavItem, styles.homeIcon)}>
268-
<EuiLink {...getRouterLinkProps(Pages.home)} className={styles.logo} data-test-subj="home-page-btn">
269-
<EuiIcon aria-label="redisinsight home page" type={LogoSVG} />
270-
</EuiLink>
271-
</span>
272-
</EuiToolTip>
261+
<RedisLogo />
273262

274263
{connectedInstanceId && (
275264
privateRoutes.map((nav) => (
276265
nav.featureFlag ? (
277-
<FeatureFlagComponent name={nav.featureFlag} key={nav.tooltipText}>
266+
<FeatureFlagComponent
267+
name={nav.featureFlag}
268+
key={nav.tooltipText}
269+
enabledByDefault={nav.enabledByDefault}
270+
>
278271
{renderPrivateRouteButton(nav)}
279272
</FeatureFlagComponent>
280273
) : renderPrivateRouteButton(nav)
281274
))
282275
)}
283276
</div>
284277
<div className={styles.bottomContainer}>
285-
<FeatureFlagComponent name={FeatureFlags.appNotifications}>
278+
<FeatureFlagComponent name={FeatureFlags.disabledByEnv} enabledByDefault>
286279
<NotificationMenu />
287280
</FeatureFlagComponent>
288281
<HelpMenu />
289282
{publicRoutes.map((nav) => (
290283
nav.featureFlag ? (
291-
<FeatureFlagComponent name={nav.featureFlag} key={nav.tooltipText}>
284+
<FeatureFlagComponent name={nav.featureFlag} key={nav.tooltipText} enabledByDefault={nav.enabledByDefault}>
292285
{renderPublicRouteButton(nav)}
293286
</FeatureFlagComponent>
294287
) : renderPublicRouteButton(nav)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { EuiIcon, EuiLink, EuiToolTip } from '@elastic/eui'
2+
import cx from 'classnames'
3+
import React from 'react'
4+
import { useSelector } from 'react-redux'
5+
import { Pages } from 'uiSrc/constants'
6+
import { BuildType } from 'uiSrc/constants/env'
7+
import { getRouterLinkProps } from 'uiSrc/services'
8+
import { appInfoSelector } from 'uiSrc/slices/app/info'
9+
import LogoSVG from 'uiSrc/assets/img/logo_small.svg?react'
10+
import { appFeatureFlagsFeaturesSelector } from 'uiSrc/slices/app/features'
11+
import styles from '../../styles.module.scss'
12+
13+
export const RedisLogo = () => {
14+
const { disabledByEnv } = useSelector(appFeatureFlagsFeaturesSelector)
15+
const { server } = useSelector(appInfoSelector)
16+
17+
if (disabledByEnv) {
18+
return (
19+
<span className={cx(styles.iconNavItem, styles.homeIcon)}>
20+
<EuiIcon aria-label="redisinsight home page" type={LogoSVG} />
21+
</span>
22+
)
23+
}
24+
25+
return (
26+
<EuiToolTip
27+
content={server?.buildType === BuildType.RedisStack ? 'Edit database' : 'My Redis databases'}
28+
position="right"
29+
>
30+
<span className={cx(styles.iconNavItem, styles.homeIcon)}>
31+
<EuiLink {...getRouterLinkProps(Pages.home)} className={styles.logo} data-test-subj="home-page-btn">
32+
<EuiIcon aria-label="redisinsight home page" type={LogoSVG} />
33+
</EuiLink>
34+
</span>
35+
</EuiToolTip>
36+
)
37+
}

redisinsight/ui/src/constants/featureFlags.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,5 @@ export enum FeatureFlags {
44
cloudSsoRecommendedSettings = 'cloudSsoRecommendedSettings',
55
databaseChat = 'databaseChat',
66
documentationChat = 'documentationChat',
7-
appSettings = 'appSettings',
8-
profiler = 'profiler',
9-
dbAnalysis = 'dbAnalysis',
10-
appNotifications = 'appNotifications',
11-
triggersAndFunctions = 'triggersAndFunctions',
7+
disabledByEnv = 'disabledByEnv',
128
}

0 commit comments

Comments
 (0)