diff --git a/app/assets/stylesheets/colors.scss b/app/assets/stylesheets/colors.scss index 7430e630..b518aacd 100644 --- a/app/assets/stylesheets/colors.scss +++ b/app/assets/stylesheets/colors.scss @@ -8,6 +8,7 @@ $white: #FFFFFF; $blue: #01788E; $red: #C93047; $light-blue: #FAFCFD; +$dark-blue: #004D61; $teal: #00B0B3; $mint: #B2D236; @@ -42,6 +43,12 @@ $ideal: #C0FF73; background-color: $light-blue; } +.nav-tabs { + .bg-color-dark-blue { + background-color: $dark-blue; + } +} + .bg-color-blue { background-color: $blue; } diff --git a/app/assets/stylesheets/dashboard.scss b/app/assets/stylesheets/dashboard.scss index d66a5f97..b432c727 100644 --- a/app/assets/stylesheets/dashboard.scss +++ b/app/assets/stylesheets/dashboard.scss @@ -1,4 +1,3 @@ -@import 'fonts'; @import 'bootstrap'; @import 'fonts'; diff --git a/app/assets/stylesheets/navigation.scss b/app/assets/stylesheets/navigation.scss new file mode 100644 index 00000000..c9678df3 --- /dev/null +++ b/app/assets/stylesheets/navigation.scss @@ -0,0 +1,12 @@ +.nav-tabs { + margin-bottom: -1rem; + border-bottom: 1px solid transparent; + .nav-link { + color: white; + border-top-left-radius: 15px; + border-top-right-radius: 15px; + } +} +.nav-item { + margin-right: 1px; +} diff --git a/app/assets/stylesheets/sqm_application.scss b/app/assets/stylesheets/sqm_application.scss index 0ed0027a..24952106 100644 --- a/app/assets/stylesheets/sqm_application.scss +++ b/app/assets/stylesheets/sqm_application.scss @@ -5,6 +5,7 @@ @import "fonts"; @import "borders"; @import "dashboard"; +@import "navigation"; @import "buttons"; @import "scss/fontawesome.scss" ; @import "scss/solid.scss"; diff --git a/app/controllers/sqm_categories_controller.rb b/app/controllers/sqm_categories_controller.rb index 05717b4b..627b6251 100644 --- a/app/controllers/sqm_categories_controller.rb +++ b/app/controllers/sqm_categories_controller.rb @@ -1,8 +1,16 @@ class SqmCategoriesController < SqmApplicationController def show + @categories = SqmCategory.all.order(:sort_index).map do |category| + CategoryPresenter.new( + category: category, + academic_year: academic_year, + school: school, + ) + end + @category = CategoryPresenter.new( - category: SqmCategory.find_by_name('Teachers & Leadership'), + category: SqmCategory.find_by_slug(params[:id]), academic_year: academic_year, school: school, ) diff --git a/app/models/sqm_category.rb b/app/models/sqm_category.rb index f07b455a..503820ca 100644 --- a/app/models/sqm_category.rb +++ b/app/models/sqm_category.rb @@ -1,3 +1,7 @@ class SqmCategory < ActiveRecord::Base + include FriendlyId + + friendly_id :name, use: [:slugged] + has_many :subcategories end diff --git a/app/presenters/category_presenter.rb b/app/presenters/category_presenter.rb index 6528f4ab..99c1f4d6 100644 --- a/app/presenters/category_presenter.rb +++ b/app/presenters/category_presenter.rb @@ -37,4 +37,8 @@ class CategoryPresenter ) end end + + def to_model + @category + end end diff --git a/app/views/layouts/sqm/_header.html.erb b/app/views/layouts/sqm/_header.html.erb index c6663c2e..8eb08c5f 100644 --- a/app/views/layouts/sqm/_header.html.erb +++ b/app/views/layouts/sqm/_header.html.erb @@ -30,7 +30,7 @@
-
+
<% if content_for?(:navigation) %> <%= yield(:navigation) %> <% end %> diff --git a/app/views/sqm_categories/show.html.erb b/app/views/sqm_categories/show.html.erb index d45b77ce..7a6aaec9 100644 --- a/app/views/sqm_categories/show.html.erb +++ b/app/views/sqm_categories/show.html.erb @@ -1,3 +1,15 @@ +<% content_for :navigation do %> + +<% end %> +

<%= @category.name %>

<%= @category.description %>

@@ -19,7 +31,7 @@

<%= measure_presenter.name %>

- <%= render partial: "gauge_graph", locals: { gauge: measure_presenter.gauge_presenter, gauge_class: 'gauge-graph-sm', font_class: 'font-cabin'} %> + <%= render partial: "gauge_graph", locals: { gauge: measure_presenter.gauge_presenter, gauge_class: 'gauge-graph-sm', font_class: 'font-cabin' } %>

<%= measure_presenter.description %>

diff --git a/db/migrate/20211007190742_add_slug_to_sqm_category.rb b/db/migrate/20211007190742_add_slug_to_sqm_category.rb new file mode 100644 index 00000000..b8f7e5e3 --- /dev/null +++ b/db/migrate/20211007190742_add_slug_to_sqm_category.rb @@ -0,0 +1,6 @@ +class AddSlugToSqmCategory < ActiveRecord::Migration[5.1] + def change + add_column :sqm_categories, :slug, :string + add_index :sqm_categories, :slug, unique: true + end +end diff --git a/db/migrate/20211007204840_add_sort_index_to_sqm_category.rb b/db/migrate/20211007204840_add_sort_index_to_sqm_category.rb new file mode 100644 index 00000000..65d1a947 --- /dev/null +++ b/db/migrate/20211007204840_add_sort_index_to_sqm_category.rb @@ -0,0 +1,5 @@ +class AddSortIndexToSqmCategory < ActiveRecord::Migration[5.1] + def change + add_column :sqm_categories, :sort_index, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index c95e5e30..f9270b55 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: 20211006174717) do +ActiveRecord::Schema.define(version: 20211007204840) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -207,6 +207,9 @@ ActiveRecord::Schema.define(version: 20211006174717) do create_table "sqm_categories", id: :serial, force: :cascade do |t| t.string "name" t.text "description" + t.string "slug" + t.integer "sort_index" + t.index ["slug"], name: "index_sqm_categories_on_slug", unique: true end create_table "students", id: :serial, force: :cascade do |t| diff --git a/db/seeds.rb b/db/seeds.rb index b88b5fd9..d10a9a19 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -37,9 +37,18 @@ CSV.parse(measure_key_2021, headers: true).each do |row| category = SqmCategory.find_or_create_by(name: category_name) - if category.description.nil? - category.update(description: row['Category Description']) - end + category_slugs = { + 'Teachers & Leadership' => 'teachers-and-leadership', + 'School Culture' => 'school-culture', + 'Resources' => 'resources', + 'Academic Learning' => 'academic-learning', + 'Citizenship & Wellbeing' => 'citizenship-and-wellbeing', + } + + category.description = row['Category Description'] + category.slug = category_slugs[category_name] + category.sort_index = category_slugs.keys.index(category_name) + category.save subcategory_name = row['Subcategory'] diff --git a/spec/factories.rb b/spec/factories.rb index cc2d6eb8..6bae32f6 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,7 +1,25 @@ FactoryBot.define do + + factory :district do + name { "#{rand} District" } + slug { name.parameterize } + end + + factory :school do + name { "#{rand} School" } + slug { name.parameterize } + district + end + + factory :academic_year do + range { '2050-51' } + end + factory :sqm_category do name { "A category" } description { "A description of a category" } + slug { 'a-category' } + sort_index { 1 } end factory :subcategory do @@ -34,14 +52,6 @@ FactoryBot.define do measure end - factory :academic_year do - range { '2050-51' } - end - - factory :school do - name { "#{rand} School" } - end - factory :survey_item_response do likert_score { 3 } response_id { rand.to_s } diff --git a/spec/features/school_dashboard_feature_spec.rb b/spec/features/school_dashboard_feature_spec.rb index 3c8038da..3dc82535 100644 --- a/spec/features/school_dashboard_feature_spec.rb +++ b/spec/features/school_dashboard_feature_spec.rb @@ -104,6 +104,9 @@ feature 'School dashboard', type: feature do expect(page).to have_text('Teachers & Leadership') expect(page).to have_text('Approval') + click_on 'School Culture' + + expect(page).to have_text('This category measures the degree to which the school environment is safe, caring, and academically-oriented.') end scenario 'user sees schools in the same district' do diff --git a/spec/views/sqm_categories/show.html.erb_spec.rb b/spec/views/sqm_categories/show.html.erb_spec.rb index 4f6a7d5f..46b7067b 100644 --- a/spec/views/sqm_categories/show.html.erb_spec.rb +++ b/spec/views/sqm_categories/show.html.erb_spec.rb @@ -6,6 +6,7 @@ describe 'sqm_categories/show.html.erb' do school = create(:school, name: 'Best School') category = create(:sqm_category, name: 'Some Category', description: 'Some description of the category') + category_presenter = CategoryPresenter.new(category: category, academic_year: academic_year, school: school) subcategory1 = create(:subcategory, sqm_category: category, name: 'A subcategory', description: 'Some description of the subcategory') subcategory2 = create(:subcategory_with_measures, sqm_category: category, name: 'Another subcategory', description: 'Another description of the subcategory') @@ -18,7 +19,12 @@ describe 'sqm_categories/show.html.erb' do survey_item2 = create(:survey_item, measure: measure2) create(:survey_item_response, survey_item: survey_item2, academic_year: academic_year, school: school, likert_score: 5) - assign :category, CategoryPresenter.new(category: category, academic_year: academic_year, school: school) + assign :category, category_presenter + + assign :categories, [category_presenter] + assign :school, school + assign :district, create(:district) + assign :academic_year, academic_year render end