Commit d3ec621d authored by Enrique Alcántara's avatar Enrique Alcántara

Merge branch 'alert-users-of-upcoming-new-feature-flags' into 'master'

Alert Users that Feature Flags will be Changing

See merge request gitlab-org/gitlab!32177
parents c72dd0ea 5574a8cb
...@@ -3,7 +3,7 @@ import { GlAlert, GlLoadingIcon, GlToggle } from '@gitlab/ui'; ...@@ -3,7 +3,7 @@ import { GlAlert, GlLoadingIcon, GlToggle } from '@gitlab/ui';
import { createNamespacedHelpers } from 'vuex'; import { createNamespacedHelpers } from 'vuex';
import { sprintf, s__ } from '~/locale'; import { sprintf, s__ } from '~/locale';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { LEGACY_FLAG } from '../constants'; import { LEGACY_FLAG, NEW_FLAG_ALERT } from '../constants';
import store from '../store/index'; import store from '../store/index';
import FeatureFlagForm from './form.vue'; import FeatureFlagForm from './form.vue';
...@@ -36,6 +36,7 @@ export default { ...@@ -36,6 +36,7 @@ export default {
legacyFlagAlert: s__( legacyFlagAlert: s__(
'FeatureFlags|GitLab is moving to a new way of managing feature flags, and in 13.4, this feature flag will become read-only. Please create a new feature flag.', 'FeatureFlags|GitLab is moving to a new way of managing feature flags, and in 13.4, this feature flag will become read-only. Please create a new feature flag.',
), ),
newFlagAlert: NEW_FLAG_ALERT,
}, },
computed: { computed: {
...mapState([ ...mapState([
...@@ -56,7 +57,10 @@ export default { ...@@ -56,7 +57,10 @@ export default {
: sprintf(s__('Edit %{name}'), { name: this.name }); : sprintf(s__('Edit %{name}'), { name: this.name });
}, },
deprecated() { deprecated() {
return this.glFeatures.featureFlagsNewVersion && this.version === LEGACY_FLAG; return this.hasNewVersionFlags && this.version === LEGACY_FLAG;
},
hasNewVersionFlags() {
return this.glFeatures.featureFlagsNewVersion;
}, },
}, },
created() { created() {
...@@ -76,6 +80,9 @@ export default { ...@@ -76,6 +80,9 @@ export default {
</script> </script>
<template> <template>
<div> <div>
<gl-alert v-if="!hasNewVersionFlags" variant="warning" :dismissible="false" class="gl-my-5">
{{ $options.translations.newFlagAlert }}
</gl-alert>
<gl-loading-icon v-if="isLoading" /> <gl-loading-icon v-if="isLoading" />
<template v-else-if="!isLoading && !hasError"> <template v-else-if="!isLoading && !hasError">
......
<script> <script>
import { createNamespacedHelpers } from 'vuex'; import { createNamespacedHelpers } from 'vuex';
import { GlAlert } from '@gitlab/ui';
import store from '../store/index'; import store from '../store/index';
import FeatureFlagForm from './form.vue'; import FeatureFlagForm from './form.vue';
import { LEGACY_FLAG, NEW_VERSION_FLAG } from '../constants'; import { LEGACY_FLAG, NEW_VERSION_FLAG, NEW_FLAG_ALERT } from '../constants';
import { createNewEnvironmentScope } from '../store/modules/helpers'; import { createNewEnvironmentScope } from '../store/modules/helpers';
import featureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import featureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
...@@ -12,6 +13,7 @@ const { mapState, mapActions } = createNamespacedHelpers('new'); ...@@ -12,6 +13,7 @@ const { mapState, mapActions } = createNamespacedHelpers('new');
export default { export default {
store, store,
components: { components: {
GlAlert,
FeatureFlagForm, FeatureFlagForm,
}, },
mixins: [featureFlagsMixin()], mixins: [featureFlagsMixin()],
...@@ -29,6 +31,9 @@ export default { ...@@ -29,6 +31,9 @@ export default {
required: true, required: true,
}, },
}, },
translations: {
newFlagAlert: NEW_FLAG_ALERT,
},
computed: { computed: {
...mapState(['error']), ...mapState(['error']),
scopes() { scopes() {
...@@ -43,7 +48,10 @@ export default { ...@@ -43,7 +48,10 @@ export default {
]; ];
}, },
version() { version() {
return this.glFeatures.featureFlagsNewVersion ? NEW_VERSION_FLAG : LEGACY_FLAG; return this.hasNewVersionFlags ? NEW_VERSION_FLAG : LEGACY_FLAG;
},
hasNewVersionFlags() {
return this.glFeatures.featureFlagsNewVersion;
}, },
strategies() { strategies() {
return [{ name: '', parameters: {}, scopes: [] }]; return [{ name: '', parameters: {}, scopes: [] }];
...@@ -60,6 +68,9 @@ export default { ...@@ -60,6 +68,9 @@ export default {
</script> </script>
<template> <template>
<div> <div>
<gl-alert v-if="!hasNewVersionFlags" variant="warning" :dismissible="false" class="gl-my-5">
{{ $options.translations.newFlagAlert }}
</gl-alert>
<h3 class="page-title">{{ s__('FeatureFlags|New feature flag') }}</h3> <h3 class="page-title">{{ s__('FeatureFlags|New feature flag') }}</h3>
<div v-if="error.length" class="alert alert-danger"> <div v-if="error.length" class="alert alert-danger">
......
import { property } from 'lodash'; import { property } from 'lodash';
import { s__ } from '~/locale';
export const ROLLOUT_STRATEGY_ALL_USERS = 'default'; export const ROLLOUT_STRATEGY_ALL_USERS = 'default';
export const ROLLOUT_STRATEGY_PERCENT_ROLLOUT = 'gradualRolloutUserId'; export const ROLLOUT_STRATEGY_PERCENT_ROLLOUT = 'gradualRolloutUserId';
...@@ -17,3 +18,7 @@ export const fetchUserIdParams = property(['parameters', 'userIds']); ...@@ -17,3 +18,7 @@ export const fetchUserIdParams = property(['parameters', 'userIds']);
export const NEW_VERSION_FLAG = 'new_version_flag'; export const NEW_VERSION_FLAG = 'new_version_flag';
export const LEGACY_FLAG = 'legacy_flag'; export const LEGACY_FLAG = 'legacy_flag';
export const NEW_FLAG_ALERT = s__(
'FeatureFlags|Feature Flags will look different in the next milestone. No action is needed, but you may notice the functionality was changed to improve the workflow.',
);
---
title: Alert Users that Feature Flags will be Changing
merge_request: 32177
author:
type: added
import Vuex from 'vuex'; import Vuex from 'vuex';
import { createLocalVue, shallowMount } from '@vue/test-utils'; import { createLocalVue, shallowMount } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter'; import MockAdapter from 'axios-mock-adapter';
import { GlToggle } from '@gitlab/ui'; import { GlToggle, GlAlert } from '@gitlab/ui';
import { LEGACY_FLAG, NEW_VERSION_FLAG } from 'ee/feature_flags/constants'; import { LEGACY_FLAG, NEW_VERSION_FLAG, NEW_FLAG_ALERT } from 'ee/feature_flags/constants';
import Form from 'ee/feature_flags/components/form.vue'; import Form from 'ee/feature_flags/components/form.vue';
import editModule from 'ee/feature_flags/store/modules/edit'; import editModule from 'ee/feature_flags/store/modules/edit';
import EditFeatureFlag from 'ee/feature_flags/components/edit_feature_flag.vue'; import EditFeatureFlag from 'ee/feature_flags/components/edit_feature_flag.vue';
...@@ -22,7 +22,7 @@ describe('Edit feature flag form', () => { ...@@ -22,7 +22,7 @@ describe('Edit feature flag form', () => {
}, },
}); });
const factory = () => { const factory = (opts = {}) => {
if (wrapper) { if (wrapper) {
wrapper.destroy(); wrapper.destroy();
wrapper = null; wrapper = null;
...@@ -40,6 +40,7 @@ describe('Edit feature flag form', () => { ...@@ -40,6 +40,7 @@ describe('Edit feature flag form', () => {
featureFlagsNewVersion: true, featureFlagsNewVersion: true,
}, },
}, },
...opts,
}); });
}; };
...@@ -90,6 +91,10 @@ describe('Edit feature flag form', () => { ...@@ -90,6 +91,10 @@ describe('Edit feature flag form', () => {
expect(wrapper.find(GlToggle).props('value')).toBe(true); expect(wrapper.find(GlToggle).props('value')).toBe(true);
}); });
it('should not alert users that feature flags are changing soon', () => {
expect(wrapper.find(GlAlert).text()).not.toBe(NEW_FLAG_ALERT);
});
describe('with error', () => { describe('with error', () => {
it('should render the error', () => { it('should render the error', () => {
store.dispatch('edit/receiveUpdateFeatureFlagError', { message: ['The name is required'] }); store.dispatch('edit/receiveUpdateFeatureFlagError', { message: ['The name is required'] });
...@@ -136,4 +141,11 @@ describe('Edit feature flag form', () => { ...@@ -136,4 +141,11 @@ describe('Edit feature flag form', () => {
}); });
}); });
}); });
describe('without new version flags', () => {
beforeEach(() => factory({ provide: { glFeatures: { featureFlagsNewVersion: false } } }));
it('should alert users that feature flags are changing soon', () => {
expect(wrapper.find(GlAlert).text()).toBe(NEW_FLAG_ALERT);
});
});
}); });
import Vuex from 'vuex'; import Vuex from 'vuex';
import { shallowMount } from '@vue/test-utils'; import { shallowMount } from '@vue/test-utils';
import { GlAlert } from '@gitlab/ui';
import Form from 'ee/feature_flags/components/form.vue'; import Form from 'ee/feature_flags/components/form.vue';
import newModule from 'ee/feature_flags/store/modules/new'; import newModule from 'ee/feature_flags/store/modules/new';
import NewFeatureFlag from 'ee/feature_flags/components/new_feature_flag.vue'; import NewFeatureFlag from 'ee/feature_flags/components/new_feature_flag.vue';
import { ROLLOUT_STRATEGY_ALL_USERS, DEFAULT_PERCENT_ROLLOUT } from 'ee/feature_flags/constants'; import {
ROLLOUT_STRATEGY_ALL_USERS,
DEFAULT_PERCENT_ROLLOUT,
NEW_FLAG_ALERT,
} from 'ee/feature_flags/constants';
describe('New feature flag form', () => { describe('New feature flag form', () => {
let wrapper; let wrapper;
...@@ -64,4 +69,7 @@ describe('New feature flag form', () => { ...@@ -64,4 +69,7 @@ describe('New feature flag form', () => {
expect(wrapper.find(Form).props('scopes')).toContainEqual(defaultScope); expect(wrapper.find(Form).props('scopes')).toContainEqual(defaultScope);
}); });
it('should alert users that feature flags are changing soon', () => {
expect(wrapper.find(GlAlert).text()).toBe(NEW_FLAG_ALERT);
});
}); });
...@@ -9266,6 +9266,9 @@ msgstr "" ...@@ -9266,6 +9266,9 @@ msgstr ""
msgid "FeatureFlags|Feature Flags" msgid "FeatureFlags|Feature Flags"
msgstr "" msgstr ""
msgid "FeatureFlags|Feature Flags will look different in the next milestone. No action is needed, but you may notice the functionality was changed to improve the workflow."
msgstr ""
msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?" msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr "" msgstr ""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment