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' 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 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