1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-23 00:22:19 +01:00

feat: Open-Source Strategy Constraints (#2112)

This commits lift the flags and makes Strategy Constraints
available to all users of Unleash.

Read more in the docs:
https://docs.getunleash.io/advanced/strategy_constraints

Enjoy!

@ivarconr
Author and maintainer
This commit is contained in:
Ivar Conradi Østhus 2022-09-30 10:45:34 +02:00 committed by GitHub
parent 9ba441b9cf
commit ef965d66de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 45 deletions

View File

@ -141,23 +141,13 @@ export const FeatureStrategyForm = ({
/> />
} }
/> />
<ConditionallyRender <FeatureStrategyConstraints
condition={Boolean(uiConfig.flags.C || uiConfig.flags.CO)} projectId={feature.project}
show={ environmentId={environmentId}
<FeatureStrategyConstraints strategy={strategy}
projectId={feature.project} setStrategy={setStrategy}
environmentId={environmentId}
strategy={strategy}
setStrategy={setStrategy}
/>
}
/>
<ConditionallyRender
condition={Boolean(
uiConfig.flags.SE || uiConfig.flags.C || uiConfig.flags.CO
)}
show={<hr className={styles.hr} />}
/> />
<hr className={styles.hr} />
<FeatureStrategyType <FeatureStrategyType
strategy={strategy} strategy={strategy}
strategyDefinition={strategyDefinition} strategyDefinition={strategyDefinition}

View File

@ -147,7 +147,6 @@ exports[`returns all baseRoutes 1`] = `
}, },
{ {
"component": [Function], "component": [Function],
"flag": "C",
"menu": {}, "menu": {},
"parent": "/context", "parent": "/context",
"path": "/context/create", "path": "/context/create",
@ -156,7 +155,6 @@ exports[`returns all baseRoutes 1`] = `
}, },
{ {
"component": [Function], "component": [Function],
"flag": "C",
"menu": {}, "menu": {},
"parent": "/context", "parent": "/context",
"path": "/context/edit/:name", "path": "/context/edit/:name",
@ -165,7 +163,6 @@ exports[`returns all baseRoutes 1`] = `
}, },
{ {
"component": [Function], "component": [Function],
"flag": "C",
"menu": { "menu": {
"advanced": true, "advanced": true,
"mobile": true, "mobile": true,

View File

@ -9,7 +9,7 @@ import AdminUsers from 'component/admin/users/UsersAdmin';
import { GroupsAdmin } from 'component/admin/groups/GroupsAdmin'; import { GroupsAdmin } from 'component/admin/groups/GroupsAdmin';
import { AuthSettings } from 'component/admin/auth/AuthSettings'; import { AuthSettings } from 'component/admin/auth/AuthSettings';
import Login from 'component/user/Login/Login'; import Login from 'component/user/Login/Login';
import { C, EEA, P, RE, SE, UG } from 'component/common/flags'; import { EEA, P, RE, SE, UG } from 'component/common/flags';
import { NewUser } from 'component/user/NewUser/NewUser'; import { NewUser } from 'component/user/NewUser/NewUser';
import ResetPassword from 'component/user/ResetPassword/ResetPassword'; import ResetPassword from 'component/user/ResetPassword/ResetPassword';
import ForgottenPassword from 'component/user/ForgottenPassword/ForgottenPassword'; import ForgottenPassword from 'component/user/ForgottenPassword/ForgottenPassword';
@ -203,7 +203,6 @@ export const routes: IRoute[] = [
title: 'Create', title: 'Create',
component: CreateUnleashContextPage, component: CreateUnleashContextPage,
type: 'protected', type: 'protected',
flag: C,
menu: {}, menu: {},
}, },
{ {
@ -212,7 +211,6 @@ export const routes: IRoute[] = [
title: ':name', title: ':name',
component: EditContext, component: EditContext,
type: 'protected', type: 'protected',
flag: C,
menu: {}, menu: {},
}, },
{ {
@ -220,7 +218,6 @@ export const routes: IRoute[] = [
title: 'Context fields', title: 'Context fields',
component: ContextList, component: ContextList,
type: 'protected', type: 'protected',
flag: C,
menu: { mobile: true, advanced: true }, menu: { mobile: true, advanced: true },
}, },

View File

@ -2,7 +2,6 @@ import { useAuthSplash } from 'hooks/api/getters/useAuth/useAuthSplash';
import { useLocation, Navigate } from 'react-router-dom'; import { useLocation, Navigate } from 'react-router-dom';
import { matchPath } from 'react-router'; import { matchPath } from 'react-router';
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
import { IFlags } from 'interfaces/uiConfig';
import { IAuthSplash } from 'hooks/api/getters/useAuth/useAuthEndpoint'; import { IAuthSplash } from 'hooks/api/getters/useAuth/useAuthEndpoint';
import { activeSplashIds, SplashId } from 'component/splash/splash'; import { activeSplashIds, SplashId } from 'component/splash/splash';
import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser'; import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
@ -31,10 +30,7 @@ export const SplashPageRedirect = () => {
// Find the splash page to show (if any). // Find the splash page to show (if any).
const showSplashId = activeSplashIds.find(splashId => { const showSplashId = activeSplashIds.find(splashId => {
return ( return !hasSeenSplashId(splashId, splash);
isSplashRelevant(splashId, uiConfig.flags) &&
!hasSeenSplashId(splashId, splash)
);
}); });
if (!showSplashId) { if (!showSplashId) {
@ -47,11 +43,3 @@ export const SplashPageRedirect = () => {
const hasSeenSplashId = (splashId: SplashId, splash: IAuthSplash): boolean => { const hasSeenSplashId = (splashId: SplashId, splash: IAuthSplash): boolean => {
return Boolean(splash[splashId]); return Boolean(splash[splashId]);
}; };
const isSplashRelevant = (splashId: SplashId, flags: IFlags): boolean => {
if (splashId === 'operators') {
return Boolean(flags.C || flags.CO);
}
return true;
};

View File

@ -3070,15 +3070,10 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001317: caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001332:
version "1.0.30001325" version "1.0.30001414"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz"
integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ== integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==
caniuse-lite@^1.0.30001332:
version "1.0.30001339"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz#f9aece4ea8156071613b27791547ba0b33f176cf"
integrity sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ==
caseless@~0.12.0: caseless@~0.12.0:
version "0.12.0" version "0.12.0"