Commit 7031c5e6 authored by Gabriel Mazetto's avatar Gabriel Mazetto

Merge branch '44140-remove-scoped-labels-feature-flag' into 'master'

Remove unused scoped labels feature flag

See merge request gitlab-org/gitlab!46964
parents 86d3dcae 00835e31
...@@ -28,7 +28,6 @@ import initUserPopovers from '~/user_popovers'; ...@@ -28,7 +28,6 @@ import initUserPopovers from '~/user_popovers';
import { mergeUrlParams } from '~/lib/utils/url_utility'; import { mergeUrlParams } from '~/lib/utils/url_utility';
import IssueAssignees from '~/vue_shared/components/issue/issue_assignees.vue'; import IssueAssignees from '~/vue_shared/components/issue/issue_assignees.vue';
import { isScopedLabel } from '~/lib/utils/common_utils'; import { isScopedLabel } from '~/lib/utils/common_utils';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { convertToCamelCase } from '~/lib/utils/text_utility'; import { convertToCamelCase } from '~/lib/utils/text_utility';
...@@ -37,6 +36,7 @@ export default { ...@@ -37,6 +36,7 @@ export default {
openedAgo: __('opened %{timeAgoString} by %{user}'), openedAgo: __('opened %{timeAgoString} by %{user}'),
openedAgoJira: __('opened %{timeAgoString} by %{user} in Jira'), openedAgoJira: __('opened %{timeAgoString} by %{user} in Jira'),
}, },
inject: ['scopedLabelsAvailable'],
components: { components: {
IssueAssignees, IssueAssignees,
GlLink, GlLink,
...@@ -50,7 +50,6 @@ export default { ...@@ -50,7 +50,6 @@ export default {
GlTooltip, GlTooltip,
SafeHtml, SafeHtml,
}, },
mixins: [glFeatureFlagsMixin()],
props: { props: {
issuable: { issuable: {
type: Object, type: Object,
...@@ -85,9 +84,6 @@ export default { ...@@ -85,9 +84,6 @@ export default {
return this.issuableLink({ milestone_title: title }); return this.issuableLink({ milestone_title: title });
}, },
scopedLabelsAvailable() {
return this.glFeatures.scopedLabels;
},
hasWeight() { hasWeight() {
return isNumber(this.issuable.weight); return isNumber(this.issuable.weight);
}, },
......
...@@ -41,10 +41,13 @@ function mountIssuablesListApp() { ...@@ -41,10 +41,13 @@ function mountIssuablesListApp() {
} }
document.querySelectorAll('.js-issuables-list').forEach(el => { document.querySelectorAll('.js-issuables-list').forEach(el => {
const { canBulkEdit, emptyStateMeta = {}, ...data } = el.dataset; const { canBulkEdit, emptyStateMeta = {}, scopedLabelsAvailable, ...data } = el.dataset;
return new Vue({ return new Vue({
el, el,
provide: {
scopedLabelsAvailable: parseBoolean(scopedLabelsAvailable),
},
render(createElement) { render(createElement) {
return createElement(IssuablesListApp, { return createElement(IssuablesListApp, {
props: { props: {
......
...@@ -8,9 +8,6 @@ module IssuableActions ...@@ -8,9 +8,6 @@ module IssuableActions
before_action :authorize_destroy_issuable!, only: :destroy before_action :authorize_destroy_issuable!, only: :destroy
before_action :check_destroy_confirmation!, only: :destroy before_action :check_destroy_confirmation!, only: :destroy
before_action :authorize_admin_issuable!, only: :bulk_update before_action :authorize_admin_issuable!, only: :bulk_update
before_action only: :show do
push_frontend_feature_flag(:scoped_labels, type: :licensed, default_enabled: true)
end
before_action do before_action do
push_frontend_feature_flag(:not_issuable_queries, @project, default_enabled: true) push_frontend_feature_flag(:not_issuable_queries, @project, default_enabled: true)
end end
......
...@@ -57,10 +57,6 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -57,10 +57,6 @@ class Projects::IssuesController < Projects::ApplicationController
record_experiment_user(:invite_members_version_b) record_experiment_user(:invite_members_version_b)
end end
before_action only: :index do
push_frontend_feature_flag(:scoped_labels, @project, type: :licensed)
end
around_action :allow_gitaly_ref_name_caching, only: [:discussions] around_action :allow_gitaly_ref_name_caching, only: [:discussions]
respond_to :html respond_to :html
......
...@@ -170,6 +170,11 @@ module IssuesHelper ...@@ -170,6 +170,11 @@ module IssuesHelper
submit_as_spam_path: mark_as_spam_project_issue_path(project, issuable) submit_as_spam_path: mark_as_spam_project_issue_path(project, issuable)
} }
end end
# Overridden in EE
def scoped_labels_available?(parent)
false
end
end end
IssuesHelper.prepend_if_ee('EE::IssuesHelper') IssuesHelper.prepend_if_ee('EE::IssuesHelper')
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
'can-bulk-edit': @can_bulk_update.to_json, 'can-bulk-edit': @can_bulk_update.to_json,
'empty-state-meta': { svg_path: image_path('illustrations/issues.svg') }, 'empty-state-meta': { svg_path: image_path('illustrations/issues.svg') },
'sort-key': @sort, 'sort-key': @sort,
type: 'issues' } } type: 'issues',
'scoped-labels-available': scoped_labels_available?(@group).to_json } }
- else - else
= render 'shared/issues' = render 'shared/issues'
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
'empty-state-meta': data_empty_state_meta.to_json, 'empty-state-meta': data_empty_state_meta.to_json,
'can-bulk-edit': @can_bulk_update.to_json, 'can-bulk-edit': @can_bulk_update.to_json,
'sort-key': @sort, 'sort-key': @sort,
type: type } } type: type,
'scoped-labels-available': scoped_labels_available?(@project).to_json } }
- else - else
- empty_state_path = local_assigns.fetch(:empty_state_path, 'shared/empty_states/issues') - empty_state_path = local_assigns.fetch(:empty_state_path, 'shared/empty_states/issues')
%ul.content-list.issues-list.issuable-list{ class: ("manual-ordering" if @sort == 'relative_position') } %ul.content-list.issues-list.issuable-list{ class: ("manual-ordering" if @sort == 'relative_position') }
......
...@@ -11,10 +11,6 @@ module EE ...@@ -11,10 +11,6 @@ module EE
before_action :ee_authorize_admin_group!, only: [:restore] before_action :ee_authorize_admin_group!, only: [:restore]
before_action only: :issues do
push_frontend_feature_flag(:scoped_labels, @group, type: :licensed)
end
feature_category :subgroups, [:restore] feature_category :subgroups, [:restore]
end end
......
...@@ -54,5 +54,10 @@ module EE ...@@ -54,5 +54,10 @@ module EE
def show_timeline_view_toggle?(issue) def show_timeline_view_toggle?(issue)
issue.incident? && issue.project.feature_available?(:incident_timeline_view) issue.incident? && issue.project.feature_available?(:incident_timeline_view)
end end
override :scoped_labels_available?
def scoped_labels_available?(parent)
parent.feature_available?(:scoped_labels)
end
end end
end end
...@@ -19,4 +19,5 @@ ...@@ -19,4 +19,5 @@
'empty-state-meta': { svg_path: image_path('illustrations/issues.svg') }, 'empty-state-meta': { svg_path: image_path('illustrations/issues.svg') },
'sort-key': @sort, 'sort-key': @sort,
type: 'jira', type: 'jira',
project_path: @project.full_path, } } 'project-path': @project.full_path,
'scoped-labels-available': scoped_labels_available?(@project).to_json } }
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
require "spec_helper" require "spec_helper"
RSpec.describe EE::IssuesHelper do RSpec.describe EE::IssuesHelper do
let(:project) { create(:project) } let(:group) { create :group }
let(:project) { create :project, group: group }
let(:issue) { create :issue, project: project } let(:issue) { create :issue, project: project }
describe '#issue_closed_link' do describe '#issue_closed_link' do
...@@ -89,4 +90,36 @@ RSpec.describe EE::IssuesHelper do ...@@ -89,4 +90,36 @@ RSpec.describe EE::IssuesHelper do
end end
end end
end end
describe '#scoped_labels_available?' do
shared_examples 'without license' do
before do
stub_licensed_features(scoped_labels: false)
end
it { is_expected.to be_falsy }
end
shared_examples 'with license' do
before do
stub_licensed_features(scoped_labels: true)
end
it { is_expected.to be_truthy }
end
context 'project' do
subject { helper.scoped_labels_available?(project) }
it_behaves_like 'without license'
it_behaves_like 'with license'
end
context 'group' do
subject { helper.scoped_labels_available?(group) }
it_behaves_like 'without license'
it_behaves_like 'with license'
end
end
end end
...@@ -38,7 +38,7 @@ describe('Issuable component', () => { ...@@ -38,7 +38,7 @@ describe('Issuable component', () => {
let DateOrig; let DateOrig;
let wrapper; let wrapper;
const factory = (props = {}, scopedLabels = false) => { const factory = (props = {}, scopedLabelsAvailable = false) => {
wrapper = shallowMount(Issuable, { wrapper = shallowMount(Issuable, {
propsData: { propsData: {
issuable: simpleIssue, issuable: simpleIssue,
...@@ -46,9 +46,7 @@ describe('Issuable component', () => { ...@@ -46,9 +46,7 @@ describe('Issuable component', () => {
...props, ...props,
}, },
provide: { provide: {
glFeatures: { scopedLabelsAvailable,
scopedLabels,
},
}, },
stubs: { stubs: {
'gl-sprintf': GlSprintf, 'gl-sprintf': GlSprintf,
......
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