From b88c9290a894eb756c491be5f8b9cdaa56e1bde0 Mon Sep 17 00:00:00 2001 From: davidgisbey Date: Fri, 9 Sep 2022 12:32:08 +0100 Subject: [PATCH 1/3] Add View Component gem --- Gemfile | 1 + Gemfile.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Gemfile b/Gemfile index bb751e2d14..5a5b2d157d 100644 --- a/Gemfile +++ b/Gemfile @@ -58,6 +58,7 @@ gem "sprockets-rails" gem "transitions", require: ["transitions", "active_record/transitions"] gem "uglifier" gem "validates_email_format_of" +gem "view_component" gem "whenever", require: false group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index d8b1379a5b..e8e8863b5a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -717,6 +717,10 @@ GEM validates_email_format_of (1.7.2) i18n version_gem (1.1.0) + view_component (2.71.0) + activesupport (>= 5.0.0, < 8.0) + concurrent-ruby (~> 1.0) + method_source (~> 1.0) warden (1.2.9) rack (>= 2.0.9) warden-oauth2 (0.0.1) @@ -828,6 +832,7 @@ DEPENDENCIES transitions uglifier validates_email_format_of + view_component webmock whenever From d980aefc606b8c4c33f32bc6bb666708fc88b32e Mon Sep 17 00:00:00 2001 From: davidgisbey Date: Mon, 12 Sep 2022 09:18:02 +0100 Subject: [PATCH 2/3] Exclude MissingSuper rule for components --- .rubocop.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.rubocop.yml b/.rubocop.yml index 99d15bb5e7..f253edae99 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -39,3 +39,7 @@ Rails/LexicallyScopedActionFilter: Style/OptionalBooleanParameter: Exclude: - 'app/workers/*.rb' + +Lint/MissingSuper: + Exclude: + - 'app/components/*/*.rb' From 0bf361e23b9dac752447b34a9818def0da399654 Mon Sep 17 00:00:00 2001 From: Daniel Karaj Date: Tue, 25 Oct 2022 17:28:46 +0100 Subject: [PATCH 3/3] Introduce Form Cancel ViewComponent Introduces a common ViewComponent to be used across forms to render a cancel link. In the bootstrap UI the path logic was present in the form builder. For the design system we're moving away from that. --- .../admin/form_cancel_component.html.erb | 1 + app/components/admin/form_cancel_component.rb | 31 +++++++++++++++++++ .../admin/form_cancel_component_test.rb | 12 +++++++ 3 files changed, 44 insertions(+) create mode 100644 app/components/admin/form_cancel_component.html.erb create mode 100644 app/components/admin/form_cancel_component.rb create mode 100644 test/components/admin/form_cancel_component_test.rb diff --git a/app/components/admin/form_cancel_component.html.erb b/app/components/admin/form_cancel_component.html.erb new file mode 100644 index 0000000000..bd46bf80c7 --- /dev/null +++ b/app/components/admin/form_cancel_component.html.erb @@ -0,0 +1 @@ +Cancel diff --git a/app/components/admin/form_cancel_component.rb b/app/components/admin/form_cancel_component.rb new file mode 100644 index 0000000000..8408bc715d --- /dev/null +++ b/app/components/admin/form_cancel_component.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class Admin::FormCancelComponent < ViewComponent::Base + + def initialize(object:) + @url_maker = Whitehall::UrlMaker.new(host: Plek.find("whitehall")) + @object = object + end + +private + + def path + if @object.new_record? + case @object + when CorporateInformationPage + @url_maker.polymorphic_path([:admin, @object.owning_organisation, CorporateInformationPage]) + when Edition + @url_maker.admin_editions_path + else + @url_maker.polymorphic_path([:admin, @object.class]) + end + else + case @object + when CorporateInformationPage, Edition + @url_maker.admin_edition_path(@object) + else + @url_maker.polymorphic_path([:admin, object]) + end + end + end +end diff --git a/test/components/admin/form_cancel_component_test.rb b/test/components/admin/form_cancel_component_test.rb new file mode 100644 index 0000000000..60a4a5484b --- /dev/null +++ b/test/components/admin/form_cancel_component_test.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require "test_helper" + +class Admin::FormCancelComponentTest < ViewComponent::TestCase + def test_component_renders_something_useful + # assert_equal( + # %(Hello, components!), + # render_inline(Admin::FormCancelComponent.new(message: "Hello, components!")).css("span").to_html + # ) + end +end