Commit 878732b4 authored by Robert Speicher's avatar Robert Speicher

Add a form field to customize the dashboard preference

cherry-picked
parent 5e0a8126
# Helper methods for per-User preferences
module PreferencesHelper
# 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
end
- page_title "Design" - page_title 'Preferences'
%h3.page-title %h3.page-title
= page_title = page_title
%p.light %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 %hr
= form_for @user, url: profile_preferences_path, remote: true, method: :put, html: {class: 'js-preferences-form'} do |f| = form_for @user, url: profile_preferences_path, remote: true, method: :put, html: {class: 'js-preferences-form'} do |f|
...@@ -52,3 +54,16 @@ ...@@ -52,3 +54,16 @@
.preview= image_tag "#{color_scheme}-scheme-preview.png" .preview= image_tag "#{color_scheme}-scheme-preview.png"
= f.radio_button :color_scheme_id, color_scheme_id = f.radio_button :color_scheme_id, color_scheme_id
= color_scheme.tr('-_', ' ').titleize = 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'
require 'spec_helper'
describe PreferencesHelper do
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
end
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