Add a form field to customize the dashboard preference
This commit is contained in:
parent
6de3958364
commit
1eb9a02f21
3 changed files with 53 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
- 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
|
||||
|
|
Loading…
Reference in a new issue