diff --git a/app/frontend/styles/_accessible-autocomplete.scss b/app/frontend/styles/_accessible-autocomplete.scss index 3ffd9adaf..28e1b7e25 100644 --- a/app/frontend/styles/_accessible-autocomplete.scss +++ b/app/frontend/styles/_accessible-autocomplete.scss @@ -1,9 +1,27 @@ -.autocomplete__wrapper, -.autocomplete__input, -.autocomplete__hint { +// Ensure the autocomplete uses the correct typeface +.autocomplete__wrapper { font-family: $govuk-font-family; } +.autocomplete__input { + font-family: inherit; +} + +.autocomplete__option__append { + font-weight: bold; +} + +.autocomplete__option__hint { + display: block; + color: $govuk-secondary-text-colour; + + .autocomplete__option--focused &, + .autocomplete__option:hover & { + color: govuk-colour("white"); + } +} + +// Style the autocomplete if there’s an error .govuk-form-group--error { .autocomplete__input { border-color: $govuk-error-colour; @@ -15,6 +33,9 @@ } .autocomplete__dropdown-arrow-down { + // Ensure dropdown arrow can be clicked + // https://github.com/alphagov/accessible-autocomplete/issues/202 pointer-events: none; + // Ensure dropdown arrow can be seen z-index: 0; } diff --git a/app/models/form/setup/pages/location.rb b/app/models/form/setup/pages/location.rb new file mode 100644 index 000000000..149d59d18 --- /dev/null +++ b/app/models/form/setup/pages/location.rb @@ -0,0 +1,20 @@ +class Form::Setup::Pages::Location < ::Form::Page + def initialize(id, hsh, subsection) + super("location", hsh, subsection) + @header = "" + @description = "" + @questions = questions + # Only display if there is more than one location + @depends_on = [{ + "supported_housing_schemes_enabled?" => true, + scheme.locations.size > 1 => true + }] + @derived = true + end + + def questions + [ + Form::Setup::Questions::SchemeId.new(nil, nil, self) + ] + end +end diff --git a/app/models/form/setup/pages/rent_type.rb b/app/models/form/setup/pages/rent_type.rb index c467efff5..d72502139 100644 --- a/app/models/form/setup/pages/rent_type.rb +++ b/app/models/form/setup/pages/rent_type.rb @@ -1,13 +1,11 @@ class Form::Setup::Pages::RentType < ::Form::Page def initialize(id, hsh, subsection) - super - @id = "rent_type" + super("rent_type", hsh, subsection) @header = "" @description = "" @questions = questions @depends_on = [{ "supported_housing_schemes_enabled?" => true }] @derived = true - @subsection = subsection end def questions diff --git a/app/models/form/setup/pages/scheme.rb b/app/models/form/setup/pages/scheme.rb new file mode 100644 index 000000000..7b46edc90 --- /dev/null +++ b/app/models/form/setup/pages/scheme.rb @@ -0,0 +1,17 @@ +class Form::Setup::Pages::Scheme < ::Form::Page + def initialize(id, hsh, subsection) + super("scheme", hsh, subsection) + @header = "" + @description = "" + @questions = questions + + @depends_on = [{ "supported_housing_schemes_enabled?" => true }] + @derived = true + end + + def questions + [ + Form::Setup::Questions::SchemeId.new(nil, nil, self) + ] + end +end diff --git a/app/models/form/setup/questions/needs_type.rb b/app/models/form/setup/questions/needs_type.rb index eb59fa675..4222cbb37 100644 --- a/app/models/form/setup/questions/needs_type.rb +++ b/app/models/form/setup/questions/needs_type.rb @@ -7,7 +7,7 @@ class Form::Setup::Questions::NeedsType < ::Form::Question @hint_text = "General needs housing includes both self-contained and shared housing without support or specific adaptations. Supported housing can include direct access hostels, group homes, residential care and nursing homes." @type = "radio" @answer_options = ANSWER_OPTIONS - @derived = true + @derived = true unless FeatureToggle.supported_housing_schemes_enabled? @page = page end diff --git a/app/models/form/setup/questions/scheme_id.rb b/app/models/form/setup/questions/scheme_id.rb new file mode 100644 index 000000000..2df8219c6 --- /dev/null +++ b/app/models/form/setup/questions/scheme_id.rb @@ -0,0 +1,25 @@ +class Form::Setup::Questions::SchemeId < ::Form::Question + def initialize(id, hsh, page) + super("scheme_id", hsh, page) + @header = "What scheme is this log for?" + @hint_text = "Enter scheme name or postcode" + @type = "select" + @answer_options = answer_options + end + + def answer_options + answer_opts = {} + return answer_opts unless ActiveRecord::Base.connected? + + Scheme.select(:id, :service_name).each_with_object(answer_opts) do |scheme, hsh| + hsh[scheme.id] = scheme.service_name + hsh + end + end + +private + + def selected_answer_option_is_derived?(_case_log) + false + end +end diff --git a/app/models/form/setup/subsections/setup.rb b/app/models/form/setup/subsections/setup.rb index 04974c44d..5fcf1d3e1 100644 --- a/app/models/form/setup/subsections/setup.rb +++ b/app/models/form/setup/subsections/setup.rb @@ -12,6 +12,7 @@ class Form::Subsections::Setup < ::Form::Subsection Form::Setup::Pages::Organisation.new(nil, nil, self), Form::Setup::Pages::CreatedBy.new(nil, nil, self), Form::Setup::Pages::NeedsType.new(nil, nil, self), + Form::Setup::Pages::Scheme.new(nil, nil, self), Form::Setup::Pages::Renewal.new(nil, nil, self), Form::Setup::Pages::TenancyStartDate.new(nil, nil, self), Form::Setup::Pages::RentType.new(nil, nil, self), diff --git a/spec/models/form/setup/pages/scheme_spec.rb b/spec/models/form/setup/pages/scheme_spec.rb new file mode 100644 index 000000000..e95caea64 --- /dev/null +++ b/spec/models/form/setup/pages/scheme_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Setup::Pages::Scheme, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[scheme]) + end + + it "has the correct id" do + expect(page.id).to eq("scheme") + end + + it "has the correct header" do + expect(page.header).to eq("") + end + + it "has the correct description" do + expect(page.description).to eq("") + end + + it "has the correct depends_on" do + expect(page.depends_on).to eq([{ "supported_housing_schemes_enabled?" => true }]) + end +end diff --git a/spec/models/form/setup/questions/scheme_id_spec.rb b/spec/models/form/setup/questions/scheme_id_spec.rb new file mode 100644 index 000000000..75bfd827a --- /dev/null +++ b/spec/models/form/setup/questions/scheme_id_spec.rb @@ -0,0 +1,52 @@ +require "rails_helper" + +RSpec.describe Form::Setup::Questions::SchemeId, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("scheme_id") + end + + it "has the correct header" do + expect(question.header).to eq("What scheme is this log for?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Rent type") + end + + it "has the correct type" do + expect(question.type).to eq("select") + end + + it "has the correct hint_text" do + expect(question.hint_text).to eq("Enter scheme name or postcode") + end + + it "has the correct conditional_for" do + expect(question.conditional_for).to be_nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "Affordable Rent" }, + "2" => { "value" => "London Affordable Rent" }, + "4" => { "value" => "London Living Rent" }, + "3" => { "value" => "Rent to Buy" }, + "0" => { "value" => "Social Rent" }, + "5" => { "value" => "Other intermediate rent product" }, + }) + end + + it "is not marked as derived" do + expect(question.derived?).to be false + end +end