diff --git a/app/components/cms/feedback_banner_component.rb b/app/components/cms/feedback_banner_component.rb new file mode 100644 index 0000000000..194f4ca5cf --- /dev/null +++ b/app/components/cms/feedback_banner_component.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class Cms::FeedbackBannerComponent < ViewComponent::Base + def initialize(title:, button:) + @title = title + @button = button + end +end diff --git a/app/components/cms/feedback_banner_component/feedback_banner_component.html.erb b/app/components/cms/feedback_banner_component/feedback_banner_component.html.erb new file mode 100644 index 0000000000..0fbc3a90fa --- /dev/null +++ b/app/components/cms/feedback_banner_component/feedback_banner_component.html.erb @@ -0,0 +1,11 @@ +<%= render GovGridRowComponent.new do |row| %> + <%= row.with_column("full") do %> +
+ <% end %> +<% end %> diff --git a/app/components/cms/feedback_banner_component/feedback_banner_component.scss b/app/components/cms/feedback_banner_component/feedback_banner_component.scss new file mode 100644 index 0000000000..7eabc22b39 --- /dev/null +++ b/app/components/cms/feedback_banner_component/feedback_banner_component.scss @@ -0,0 +1,10 @@ +.cms-feedback-banner-component { + border: 3px solid $hyper-link-blue; + padding: 32px; + + .govuk-button { + @include govuk-media-query($until: desktop) { + margin-bottom: 16px; + } + } +} diff --git a/app/services/cms/dynamic_components/blocks/feedback_banner.rb b/app/services/cms/dynamic_components/blocks/feedback_banner.rb new file mode 100644 index 0000000000..ab5e679442 --- /dev/null +++ b/app/services/cms/dynamic_components/blocks/feedback_banner.rb @@ -0,0 +1,18 @@ +module Cms + module DynamicComponents + module Blocks + class FeedbackBanner + attr_accessor :title, :button + + def initialize(title:, button:) + @title = title + @button = button + end + + def render + Cms::FeedbackBannerComponent.new(title:, button:) + end + end + end + end +end diff --git a/app/services/cms/providers/strapi/factories/blocks_factory.rb b/app/services/cms/providers/strapi/factories/blocks_factory.rb index 5214a3dc2a..ea108d0ba2 100644 --- a/app/services/cms/providers/strapi/factories/blocks_factory.rb +++ b/app/services/cms/providers/strapi/factories/blocks_factory.rb @@ -67,9 +67,18 @@ def self.generate_component(component_name, strapi_data) DynamicComponents::SecondaryQuestionBank.new(title: strapi_data[:title]) when "button-block" to_button_block(strapi_data) + when "feedback-banner" + to_feedback_banner(strapi_data) end end + def self.to_feedback_banner(strapi_data) + DynamicComponents::Blocks::FeedbackBanner.new( + title: strapi_data[:title], + button: to_ncce_button(strapi_data[:button]) + ) + end + def self.to_button_block(strapi_data) DynamicComponents::Blocks::ButtonBlock.new( buttons: strapi_data[:buttons].map { to_ncce_button(_1) }, diff --git a/app/services/cms/providers/strapi/mocks/dynamic_components/blocks/feedback_banner.rb b/app/services/cms/providers/strapi/mocks/dynamic_components/blocks/feedback_banner.rb new file mode 100644 index 0000000000..8ff3d54e86 --- /dev/null +++ b/app/services/cms/providers/strapi/mocks/dynamic_components/blocks/feedback_banner.rb @@ -0,0 +1,18 @@ +module Cms + module Providers + module Strapi + module Mocks + module DynamicComponents + module Blocks + class FeedbackBanner < StrapiMock + strapi_component "blocks.feedback-banner" + + attribute(:title) { Faker::Lorem.sentence } + attribute(:button) { Cms::Mocks::NcceButton.generate_data } + end + end + end + end + end + end +end diff --git a/app/services/cms/providers/strapi/queries/components/blocks/feedback_banner.rb b/app/services/cms/providers/strapi/queries/components/blocks/feedback_banner.rb new file mode 100644 index 0000000000..84a2088ac0 --- /dev/null +++ b/app/services/cms/providers/strapi/queries/components/blocks/feedback_banner.rb @@ -0,0 +1,22 @@ +module Cms + module Providers + module Strapi + module Queries + module Components + module Blocks + class FeedbackBanner < BaseComponentQuery + def self.name = "ComponentBlocksFeedbackBanner" + + def self.base_fields + <<~GRAPHQL.freeze + fbb__title: title + fbb__button: #{Buttons::NcceButton.embed(:button)} + GRAPHQL + end + end + end + end + end + end + end +end diff --git a/app/services/cms/providers/strapi/queries/dynamic_zone.rb b/app/services/cms/providers/strapi/queries/dynamic_zone.rb index 184a0338b0..95b9c5f423 100644 --- a/app/services/cms/providers/strapi/queries/dynamic_zone.rb +++ b/app/services/cms/providers/strapi/queries/dynamic_zone.rb @@ -9,6 +9,7 @@ class DynamicZone Components::Blocks::CourseCardsSection, Components::Blocks::EnrolmentSplitCourseCard, Components::Blocks::EnrolmentTestimonial, + Components::Blocks::FeedbackBanner, Components::Blocks::FullWidthBanner, Components::Blocks::FullWidthImageBanner, Components::Blocks::FullWidthText, diff --git a/previews/components/cms/feedback_banner_component_preview.rb b/previews/components/cms/feedback_banner_component_preview.rb new file mode 100644 index 0000000000..e4f038c9e7 --- /dev/null +++ b/previews/components/cms/feedback_banner_component_preview.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class Cms::FeedbackBannerComponentPreview < ViewComponent::Preview + def default + render(Cms::FeedbackBannerComponent.new( + title: "title", + button: Cms::Mocks::NcceButton.as_model + )) + end +end diff --git a/spec/components/cms/feedback_banner_component_spec.rb b/spec/components/cms/feedback_banner_component_spec.rb new file mode 100644 index 0000000000..0d9016e840 --- /dev/null +++ b/spec/components/cms/feedback_banner_component_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require "rails_helper" + +RSpec.describe Cms::FeedbackBannerComponent, type: :component do + before do + render_inline(described_class.new( + title: "Help us make these resources better", + button: Cms::Mocks::NcceButton.as_model + )) + end + + it "renders the title" do + expect(page).to have_text("Help us make these resources better") + end + + it "renders the ncce button" do + expect(page).to have_css(".govuk-button") + end +end diff --git a/spec/services/cms/dynamic_components/blocks/feedback_banner_spec.rb b/spec/services/cms/dynamic_components/blocks/feedback_banner_spec.rb new file mode 100644 index 0000000000..125e9bd96e --- /dev/null +++ b/spec/services/cms/dynamic_components/blocks/feedback_banner_spec.rb @@ -0,0 +1,13 @@ +require "rails_helper" + +RSpec.describe Cms::DynamicComponents::Blocks::FeedbackBanner do + before do + @comp = Cms::Providers::Strapi::Factories::ComponentFactory.process_component( + Cms::Mocks::DynamicComponents::Blocks::FeedbackBanner.generate_raw_data + ) + end + + it "should render as Cms::FeedbackBannerComponent" do + expect(@comp.render).to be_a(Cms::FeedbackBannerComponent) + end +end diff --git a/spec/services/cms/providers/strapi/queries/components/blocks/feedback_banner_spec.rb b/spec/services/cms/providers/strapi/queries/components/blocks/feedback_banner_spec.rb new file mode 100644 index 0000000000..d3ac46b689 --- /dev/null +++ b/spec/services/cms/providers/strapi/queries/components/blocks/feedback_banner_spec.rb @@ -0,0 +1,9 @@ +require "rails_helper" + +RSpec.describe Cms::Providers::Strapi::Queries::Components::Blocks::FeedbackBanner do + it_should_behave_like "a strapi graphql component", + %w[ + title + button + ] +end