Commit 1eb9a02f authored by Robert Speicher's avatar Robert Speicher

Add a form field to customize the dashboard preference

parent 6de39583
......@@ -20,6 +20,25 @@ module PreferencesHelper
COLOR_SCHEMES.freeze
end
# Populates the dashboard preference select field with more user-friendly
# values.
def dashboard_choices
orig = User.dashboards.keys
choices = [
['Projects (default)', orig[0]],
['Starred Projects', orig[1]]
]
if orig.size != choices.size
# Assure that anyone adding new options updates this method too
raise RuntimeError, "`User` defines #{orig.size} dashboard choices," +
" but #{__method__} defined #{choices.size}"
else
choices
end
end
def user_application_theme
theme = Gitlab::Themes.by_id(current_user.try(:theme_id))
theme.css_class
......
- page_title "Design"
- page_title 'Preferences'
%h3.page-title
= page_title
%p.light
Appearance settings will be saved to your profile and made available across all devices.
These settings allow you to customize the appearance and behavior of the site.
They are saved with your account and will persist to any device you use to
access the site.
%hr
= form_for @user, url: profile_preferences_path, remote: true, method: :put, html: {class: 'js-preferences-form'} do |f|
......@@ -25,3 +27,16 @@
.preview= image_tag "#{color_scheme}-scheme-preview.png"
= f.radio_button :color_scheme_id, color_scheme_id
= color_scheme.tr('-_', ' ').titleize
.panel.panel-default
.panel-heading
Behavior
.panel-body
.form-group
= f.label :dashboard, class: 'control-label'
.col-sm-10
= f.select :dashboard, dashboard_choices, {}, class: 'form-control'
%p.help-block.hint
This setting allows you to customize the default Dashboard page.
.panel-footer
= f.submit 'Save', class: 'btn btn-save'
......@@ -30,6 +30,23 @@ describe PreferencesHelper do
end
end
describe 'dashboard_choices' do
it 'raises an exception when defined choices may be missing' do
dashboards = User.dashboards
expect(User).to receive(:dashboards).
and_return(dashboards.merge(foo: 'foo'))
expect { dashboard_choices }.to raise_error
end
it 'provides better option descriptions' do
choices = dashboard_choices
expect(choices[0]).to eq ['Projects (default)', 'projects']
expect(choices[1]).to eq ['Starred Projects', 'stars']
end
end
describe 'user_color_scheme_class' do
context 'with current_user is nil' do
it 'should return a string' do
......
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