From 28be9caa6405491f06c198ea90fe35e06bc796f7 Mon Sep 17 00:00:00 2001 From: Matt D'Angelo Date: Tue, 21 Oct 2025 14:23:40 +1030 Subject: [PATCH 1/2] Unify checks for consolidated list in model helpers --- app/controllers/groups/work_items_controller.rb | 4 ++-- app/controllers/projects/issues_controller.rb | 4 ++-- app/controllers/projects/work_items_controller.rb | 4 ++-- app/helpers/nav/new_dropdown_helper.rb | 4 ++-- app/helpers/sidebars_helper.rb | 4 ++-- app/models/group.rb | 5 +++++ app/models/project.rb | 6 ++++++ ee/app/helpers/ee/nav/new_dropdown_helper.rb | 2 +- ee/lib/ee/sidebars/groups/panel.rb | 2 +- lib/sidebars/groups/panel.rb | 2 +- lib/sidebars/projects/panel.rb | 2 +- 11 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/controllers/groups/work_items_controller.rb b/app/controllers/groups/work_items_controller.rb index 484f6ab492240e..8bfdae48260b7a 100644 --- a/app/controllers/groups/work_items_controller.rb +++ b/app/controllers/groups/work_items_controller.rb @@ -15,7 +15,7 @@ class WorkItemsController < Groups::ApplicationController !!group&.create_group_level_work_items_feature_flag_enabled?) push_force_frontend_feature_flag(:glql_load_on_click, !!group&.glql_load_on_click_feature_flag_enabled?) push_frontend_feature_flag(:issues_list_drawer, group) - push_frontend_feature_flag(:work_item_planning_view, group) + push_force_frontend_feature_flag(:work_item_planning_view, !!group&.work_items_consolidated_list_enabled?) end before_action :handle_new_work_item_path, only: [:show] @@ -29,7 +29,7 @@ class WorkItemsController < Groups::ApplicationController urgency :low, [:rss, :calendar] def index - not_found unless ::Feature.enabled?(:work_item_planning_view, group) + not_found unless group&.work_items_consolidated_list_enabled? end def show diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index a72638cb26ff62..2fc6f03d1d2c50 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -52,7 +52,7 @@ class Projects::IssuesController < Projects::ApplicationController push_frontend_feature_flag(:issues_list_create_modal, project) push_frontend_feature_flag(:issues_list_drawer, project) push_frontend_feature_flag(:notifications_todos_buttons, current_user) - push_frontend_feature_flag(:work_item_planning_view, project&.group) + push_force_frontend_feature_flag(:work_item_planning_view, !!project&.work_items_consolidated_list_enabled?) push_force_frontend_feature_flag(:glql_load_on_click, !!project&.glql_load_on_click_feature_flag_enabled?) push_force_frontend_feature_flag(:work_items_beta, !!project&.work_items_beta_feature_flag_enabled?) push_force_frontend_feature_flag(:work_items_alpha, !!project&.work_items_alpha_feature_flag_enabled?) @@ -481,7 +481,7 @@ def redirect_if_work_item end def redirect_index_to_work_items - return unless index_html_request? && ::Feature.enabled?(:work_item_planning_view, project.group) + return unless index_html_request? && project&.work_items_consolidated_list_enabled? params = request.query_parameters.except("type").merge('type[]' => 'issue') redirect_to project_work_items_path(project, params: params) diff --git a/app/controllers/projects/work_items_controller.rb b/app/controllers/projects/work_items_controller.rb index 9e3a00fd64a4bf..94306ad7e2c6fa 100644 --- a/app/controllers/projects/work_items_controller.rb +++ b/app/controllers/projects/work_items_controller.rb @@ -13,7 +13,7 @@ class Projects::WorkItemsController < Projects::ApplicationController push_force_frontend_feature_flag(:work_items_beta, !!project&.work_items_beta_feature_flag_enabled?) push_force_frontend_feature_flag(:work_items_alpha, !!project&.work_items_alpha_feature_flag_enabled?) push_force_frontend_feature_flag(:glql_load_on_click, !!project&.glql_load_on_click_feature_flag_enabled?) - push_frontend_feature_flag(:work_item_planning_view, project&.group) + push_force_frontend_feature_flag(:work_item_planning_view, !!project&.work_items_consolidated_list_enabled?) end before_action :check_search_rate_limit!, if: ->(c) do @@ -41,7 +41,7 @@ def import_csv end def index - not_found unless ::Feature.enabled?(:work_item_planning_view, project&.group, type: :wip) + not_found unless project&.work_items_consolidated_list_enabled? end def show diff --git a/app/helpers/nav/new_dropdown_helper.rb b/app/helpers/nav/new_dropdown_helper.rb index 2b402c35f8c794..916525dc8a47ca 100644 --- a/app/helpers/nav/new_dropdown_helper.rb +++ b/app/helpers/nav/new_dropdown_helper.rb @@ -56,7 +56,7 @@ def group_menu_section(group) ) end - if can?(current_user, :create_work_item, group) && ::Feature.enabled?(:work_item_planning_view, group) + if can?(current_user, :create_work_item, group) && group&.work_items_consolidated_list_enabled? menu_items.push( ::Gitlab::Nav::TopNavMenuItem.build( id: 'new_group_work_item', @@ -89,7 +89,7 @@ def project_menu_section(project) merge_project = merge_request_source_project_for_project(project) if show_new_issue_link?(project) - if ::Feature.enabled?(:work_item_planning_view, project.group) + if project&.work_items_consolidated_list_enabled? menu_items.push( ::Gitlab::Nav::TopNavMenuItem.build( id: 'new_work_item', diff --git a/app/helpers/sidebars_helper.rb b/app/helpers/sidebars_helper.rb index 28fc7d09ef29c9..0d4dd17895ccd3 100644 --- a/app/helpers/sidebars_helper.rb +++ b/app/helpers/sidebars_helper.rb @@ -146,7 +146,7 @@ def work_items_modal_data(group, project) can_admin_label: can?(current_user, :admin_label, project).to_s, has_issue_weights_feature: project.licensed_feature_available?(:issue_weights).to_s, has_iterations_feature: project.licensed_feature_available?(:iterations).to_s, - work_item_planning_view_enabled: ::Feature.enabled?(:work_item_planning_view, project.group).to_s + work_item_planning_view_enabled: project.work_items_consolidated_list_enabled?.to_s } end @@ -159,7 +159,7 @@ def work_items_modal_data(group, project) labels_manage_path: group_labels_path(group), can_admin_label: can?(current_user, :admin_label, group).to_s, has_issue_weights_feature: group.licensed_feature_available?(:issue_weights).to_s, - work_item_planning_view_enabled: ::Feature.enabled?(:work_item_planning_view, group).to_s + work_item_planning_view_enabled: group.work_items_consolidated_list_enabled?.to_s } end diff --git a/app/models/group.rb b/app/models/group.rb index 77f99fe84aa798..27fbbfa6adc039 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -1174,6 +1174,11 @@ def allow_iframes_in_markdown_feature_flag_enabled? feature_flag_enabled_for_self_or_ancestor?(:allow_iframes_in_markdown, type: :wip) end + def work_items_consolidated_list_enabled? + # work_item_planning_view is the feature flag used to determine whether the consolidated list is enabled or not + feature_flag_enabled_for_self_or_ancestor?(:work_item_planning_view, type: :wip) + end + # overriden in EE def supports_group_work_items? false diff --git a/app/models/project.rb b/app/models/project.rb index 7cf16e85208b79..0f34ed1283ddb6 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -3519,6 +3519,12 @@ def allow_iframes_in_markdown_feature_flag_enabled? group&.allow_iframes_in_markdown_feature_flag_enabled? || Feature.enabled?(:allow_iframes_in_markdown, self, type: :wip) end + def work_items_consolidated_list_enabled? + # work_item_planning_view is the feature flag used to determine whether the consolidated list is enabled or not + # The global check is required for projects which do not have an associated group (i.e. from a user namespace) + group&.work_items_consolidated_list_enabled? || Feature.enabled?(:work_item_planning_view, type: :wip) + end + def enqueue_record_project_target_platforms return unless Gitlab.com? diff --git a/ee/app/helpers/ee/nav/new_dropdown_helper.rb b/ee/app/helpers/ee/nav/new_dropdown_helper.rb index e839fc755b31b9..35696004fec45f 100644 --- a/ee/app/helpers/ee/nav/new_dropdown_helper.rb +++ b/ee/app/helpers/ee/nav/new_dropdown_helper.rb @@ -9,7 +9,7 @@ module NewDropdownHelper override :create_epic_menu_item def create_epic_menu_item(group) - return if ::Feature.enabled?(:work_item_planning_view, group) + return if group&.work_items_consolidated_list_enabled? if can?(current_user, :create_epic, group) ::Gitlab::Nav::TopNavMenuItem.build( diff --git a/ee/lib/ee/sidebars/groups/panel.rb b/ee/lib/ee/sidebars/groups/panel.rb index 62ffe433c1c2e9..3a06cb247b880e 100644 --- a/ee/lib/ee/sidebars/groups/panel.rb +++ b/ee/lib/ee/sidebars/groups/panel.rb @@ -10,7 +10,7 @@ module Panel def configure_menus super - if ::Feature.enabled?(:work_item_planning_view, context.group) + if context.group&.work_items_consolidated_list_enabled? insert_menu_after( context.is_super_sidebar ? ::Sidebars::Groups::Menus::SettingsMenu : ::Sidebars::Groups::Menus::GroupInformationMenu, ::Sidebars::Groups::Menus::WorkItemEpicsMenu.new(context) diff --git a/lib/sidebars/groups/panel.rb b/lib/sidebars/groups/panel.rb index 3d7028d87cc5f6..3645890f9dbc22 100644 --- a/lib/sidebars/groups/panel.rb +++ b/lib/sidebars/groups/panel.rb @@ -9,7 +9,7 @@ def configure_menus add_menu(Sidebars::Groups::Menus::GroupInformationMenu.new(context)) - if ::Feature.enabled?(:work_item_planning_view, context.group) + if context.group&.work_items_consolidated_list_enabled? add_menu(Sidebars::Groups::Menus::WorkItemsMenu.new(context)) else add_menu(Sidebars::Groups::Menus::IssuesMenu.new(context)) diff --git a/lib/sidebars/projects/panel.rb b/lib/sidebars/projects/panel.rb index 3a6bc0d11a2163..b4bd22ef1043c1 100644 --- a/lib/sidebars/projects/panel.rb +++ b/lib/sidebars/projects/panel.rb @@ -21,7 +21,7 @@ def add_menus add_menu(Sidebars::Projects::Menus::ProjectInformationMenu.new(context)) add_menu(Sidebars::Projects::Menus::RepositoryMenu.new(context)) - if ::Feature.enabled?(:work_item_planning_view, context.project.group) + if context.project&.work_items_consolidated_list_enabled? add_menu(Sidebars::Projects::Menus::WorkItemsMenu.new(context)) else add_menu(Sidebars::Projects::Menus::IssuesMenu.new(context)) -- GitLab From 44359f6c74a3190186b947f0e52f5d224f5c347b Mon Sep 17 00:00:00 2001 From: Matt D'Angelo Date: Tue, 21 Oct 2025 14:35:16 +1030 Subject: [PATCH 2/2] Add spec for work_items_consolidated_list_enabled? --- spec/models/group_spec.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 6dd4e641127d05..3eb8bf2549289f 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -4348,6 +4348,13 @@ def define_cache_expectations(cache_key) end end + describe '#work_items_consolidated_list_enabled?' do + it_behaves_like 'checks self and root ancestor feature flag' do + let(:feature_flag) { :work_item_planning_view } + let(:feature_flag_method) { :work_items_consolidated_list_enabled? } + end + end + describe '#supports_group_work_items?' do let(:group) { build(:group) } -- GitLab