diff --git a/app/javascript/containers/GeneralSiteSettings.tsx b/app/javascript/containers/GeneralSiteSettings.tsx
index 40f8f4d4..c5833e1f 100644
--- a/app/javascript/containers/GeneralSiteSettings.tsx
+++ b/app/javascript/containers/GeneralSiteSettings.tsx
@@ -3,7 +3,7 @@ import { connect } from "react-redux";
import GeneralSiteSettingsP from "../components/SiteSettings/General/GeneralSiteSettingsP";
import { updateTenant } from "../actions/Tenant/updateTenant";
import { State } from "../reducers/rootReducer";
-import { TenantSettingBrandDisplay } from "../interfaces/ITenantSetting";
+import { TenantSettingBrandDisplay, TenantSettingCollapseBoardsInHeader } from "../interfaces/ITenantSetting";
const mapStateToProps = (state: State) => ({
areUpdating: state.siteSettings.general.areUpdating,
@@ -17,6 +17,8 @@ const mapDispatchToProps = (dispatch: any) => ({
brandDisplaySetting: TenantSettingBrandDisplay,
locale: string,
rootBoardId: number,
+ showRoadmapInHeader: boolean,
+ collapseBoardsInHeader: TenantSettingCollapseBoardsInHeader,
showVoteCount: boolean,
showVoteButtonInBoard: boolean,
authenticityToken: string
@@ -29,6 +31,8 @@ const mapDispatchToProps = (dispatch: any) => ({
show_vote_count: showVoteCount,
show_vote_button_in_board: showVoteButtonInBoard,
root_board_id: rootBoardId,
+ show_roadmap_in_header: showRoadmapInHeader,
+ collapse_boards_in_header: collapseBoardsInHeader,
},
locale,
authenticityToken,
diff --git a/app/javascript/interfaces/ITenantSetting.ts b/app/javascript/interfaces/ITenantSetting.ts
index e71dbcba..41be457d 100644
--- a/app/javascript/interfaces/ITenantSetting.ts
+++ b/app/javascript/interfaces/ITenantSetting.ts
@@ -10,11 +10,22 @@ export type TenantSettingBrandDisplay =
typeof TENANT_SETTING_BRAND_DISPLAY_LOGO_ONLY |
typeof TENANT_SETTING_BRAND_DISPLAY_NONE;
+// Collapse boards in header
+export const TENANT_SETTING_COLLAPSE_BOARDS_IN_HEADER_NO_COLLAPSE = 'no_collapse';
+export const TENANT_SETTING_COLLAPSE_BOARDS_IN_HEADER_ALWAYS_COLLAPSE = 'always_collapse';
+
+export type TenantSettingCollapseBoardsInHeader =
+ typeof TENANT_SETTING_COLLAPSE_BOARDS_IN_HEADER_NO_COLLAPSE |
+ typeof TENANT_SETTING_COLLAPSE_BOARDS_IN_HEADER_ALWAYS_COLLAPSE;
+
+
interface ITenantSetting {
brand_display?: TenantSettingBrandDisplay;
root_board_id?: number;
show_vote_count?: boolean;
show_vote_button_in_board?: boolean;
+ show_roadmap_in_header?: boolean;
+ collapse_boards_in_header?: TenantSettingCollapseBoardsInHeader;
}
export default ITenantSetting;
\ No newline at end of file
diff --git a/app/models/tenant_setting.rb b/app/models/tenant_setting.rb
index 2620ca45..3f9f9d3f 100644
--- a/app/models/tenant_setting.rb
+++ b/app/models/tenant_setting.rb
@@ -9,4 +9,9 @@ class TenantSetting < ApplicationRecord
:logo_only,
:no_name_no_logo
]
+
+ enum collapse_boards_in_header: [
+ :no_collapse,
+ :always_collapse
+ ]
end
diff --git a/app/policies/tenant_setting_policy.rb b/app/policies/tenant_setting_policy.rb
index 7f6c592c..b11c49e5 100644
--- a/app/policies/tenant_setting_policy.rb
+++ b/app/policies/tenant_setting_policy.rb
@@ -1,7 +1,14 @@
class TenantSettingPolicy < ApplicationPolicy
def permitted_attributes_for_update
if user.admin?
- [:brand_display, :root_board_id, :show_vote_count, :show_vote_button_in_board]
+ [
+ :brand_display,
+ :root_board_id,
+ :show_vote_count,
+ :show_vote_button_in_board,
+ :show_roadmap_in_header,
+ :collapse_boards_in_header
+ ]
else
[]
end
diff --git a/app/views/layouts/_boards_nav_section.html.erb b/app/views/layouts/_boards_nav_section.html.erb
index 1d4423f2..70ddc326 100644
--- a/app/views/layouts/_boards_nav_section.html.erb
+++ b/app/views/layouts/_boards_nav_section.html.erb
@@ -1,5 +1,19 @@
-<% boards.each do |board| %>
-
- <%= link_to board.name, board_path(board), class: 'nav-link' %>
-
+<% if @tenant_setting.collapse_boards_in_header == 'always_collapse' %>
+
+
+ Boards
+
+
+<% else %>
+ <% boards.each do |board| %>
+
+ <%= link_to board.name, board_path(board), class: 'nav-link' %>
+
+ <% end %>
<% end %>
\ No newline at end of file
diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb
index 70909dcd..c8831dec 100644
--- a/app/views/layouts/_header.html.erb
+++ b/app/views/layouts/_header.html.erb
@@ -29,6 +29,12 @@
+ <% if @tenant_setting.show_roadmap_in_header %>
+ -
+ <%= link_to "Roadmap", roadmap_path, class: 'nav-link' %>
+
+ <% end %>
+
<%= render 'layouts/boards_nav_section', boards: @boards unless @boards.nil? %>
diff --git a/app/views/site_settings/general.html.erb b/app/views/site_settings/general.html.erb
index 889a8138..fcfd8879 100644
--- a/app/views/site_settings/general.html.erb
+++ b/app/views/site_settings/general.html.erb
@@ -12,6 +12,8 @@
showVoteCount: @tenant_setting.show_vote_count,
showVoteButtonInBoard: @tenant_setting.show_vote_button_in_board,
rootBoardId: @tenant_setting.root_board_id.to_s,
+ showRoadmapInHeader: @tenant_setting.show_roadmap_in_header,
+ collapseBoardsInHeader: @tenant_setting.collapse_boards_in_header,
locale: @tenant.locale
},
boards: @tenant.boards.order(order: :asc),
diff --git a/config/locales/backend/backend.en.yml b/config/locales/backend/backend.en.yml
index 9e47cdb5..135b79bc 100644
--- a/config/locales/backend/backend.en.yml
+++ b/config/locales/backend/backend.en.yml
@@ -119,6 +119,8 @@ en:
show_vote_count: 'Show vote count to users'
show_vote_button_in_board: 'Show vote buttons in board page'
root_board_id: 'Root page'
+ show_roadmap_in_header: 'Show roadmap link in header'
+ collapse_boards_in_header: 'Collapse boards in header'
user:
email: 'Email'
full_name: 'Full name'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 625c9854..75f44188 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -153,6 +153,10 @@ en:
brand_setting_name: 'Name only'
brand_setting_logo: 'Logo only'
brand_setting_none: 'None'
+ subtitle_header: 'Header'
+ collapse_boards_in_header_no_collapse: 'Never'
+ collapse_boards_in_header_always_collapse: 'Always'
+ subtitle_visibility: 'Visibility'
show_vote_count_help: 'If you enable this setting, users will be able to see the vote count of posts. This may incentivize users to vote on already popular posts, leading to a snowball effect.'
show_vote_button_in_board_help: 'If you enable this setting, users will be able to vote posts from the board page. This may incentivize users to vote on more posts, leading to a higher number of votes but of lower significance.'
boards:
diff --git a/db/migrate/20230207201354_add_show_roadmap_in_header_to_tenant_settings.rb b/db/migrate/20230207201354_add_show_roadmap_in_header_to_tenant_settings.rb
new file mode 100644
index 00000000..53964907
--- /dev/null
+++ b/db/migrate/20230207201354_add_show_roadmap_in_header_to_tenant_settings.rb
@@ -0,0 +1,5 @@
+class AddShowRoadmapInHeaderToTenantSettings < ActiveRecord::Migration[6.0]
+ def change
+ add_column :tenant_settings, :show_roadmap_in_header, :boolean, null: false, default: true
+ end
+end
diff --git a/db/migrate/20230211095500_add_collapse_boards_in_header_to_tenant_settings.rb b/db/migrate/20230211095500_add_collapse_boards_in_header_to_tenant_settings.rb
new file mode 100644
index 00000000..e2cb4990
--- /dev/null
+++ b/db/migrate/20230211095500_add_collapse_boards_in_header_to_tenant_settings.rb
@@ -0,0 +1,5 @@
+class AddCollapseBoardsInHeaderToTenantSettings < ActiveRecord::Migration[6.0]
+ def change
+ add_column :tenant_settings, :collapse_boards_in_header, :integer, null: false, default: 0
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index d323a47b..b5360dd1 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2023_02_04_171748) do
+ActiveRecord::Schema.define(version: 2023_02_11_095500) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -132,6 +132,8 @@ ActiveRecord::Schema.define(version: 2023_02_04_171748) do
t.boolean "show_vote_count", default: false, null: false
t.boolean "show_vote_button_in_board", default: false, null: false
t.integer "root_board_id", default: 0, null: false
+ t.boolean "show_roadmap_in_header", default: true, null: false
+ t.integer "collapse_boards_in_header", default: 0, null: false
t.index ["tenant_id"], name: "index_tenant_settings_on_tenant_id"
end
diff --git a/spec/models/tenant_setting_spec.rb b/spec/models/tenant_setting_spec.rb
index 84240918..65a1f98c 100644
--- a/spec/models/tenant_setting_spec.rb
+++ b/spec/models/tenant_setting_spec.rb
@@ -31,4 +31,15 @@ RSpec.describe TenantSetting, type: :model do
it 'has a setting that contains the board id of the root page' do
expect(tenant_setting.root_board_id).to eq(0)
end
+
+ it 'has a setting to show/hide roadmap link in header' do
+ expect(tenant_setting.show_roadmap_in_header).to be_truthy
+ end
+
+ it 'has a setting to collapse boards in header' do
+ expect(tenant_setting.collapse_boards_in_header).to eq('no_collapse')
+
+ tenant_setting.collapse_boards_in_header = 'always_collapse'
+ expect(tenant_setting).to be_valid
+ end
end