diff --git a/app/components/error_explanation.rb b/app/components/error_explanation.rb new file mode 100644 index 000000000..9235eb827 --- /dev/null +++ b/app/components/error_explanation.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Components + class ErrorExplanation < Components::Base + attr_accessor :errors + + def initialize(errors:) + super() + self.errors = errors + end + + def view_template + return if errors.none? + + div(class: "error-explanation") do + h2 { "Something went wrong" } + ul do + errors.full_messages.each { |message| li { message } } + end + end + end + end +end diff --git a/app/views/accounts/new.rb b/app/views/accounts/new.rb new file mode 100644 index 000000000..110a2b3cc --- /dev/null +++ b/app/views/accounts/new.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module Views + module Accounts + class New < Views::Base + attr_accessor :user + + def initialize(user:) + super() + self.user = user + end + + def view_template + h1 { "New Account" } + + form_with(model: user, url: account_path) do |form| + render(Components::ErrorExplanation.new(errors: user.errors)) + + div(class: "field") do + form.label(:email) + form.email_field(:email, required: true) + end + + div(class: "field") do + form.label(:password) + form.password_field(:password, required: true) + end + + div(class: "field") do + form.label(:password_confirmation) + form.password_field(:password_confirmation, required: true) + end + + div(class: "actions") do + form.submit("Create Account") + end + end + end + end + end +end diff --git a/app/views/accounts/show.rb b/app/views/accounts/show.rb new file mode 100644 index 000000000..befafc799 --- /dev/null +++ b/app/views/accounts/show.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Views + module Accounts + class Show < Views::Base + attr_accessor :user + + def initialize(user:) + super() + self.user = user + end + + def view_template + h1 { "My Account" } + + form_with(model: user, url: account_path) do |form| + render(Components::ErrorExplanation.new(errors: user.errors)) + + div(class: "field") do + form.label(:email) + form.email_field(:email, required: true) + end + + div(class: "actions") do + form.submit("Update Account") + end + end + + button_to("Delete Account", account_path, method: :delete) + end + end + end +end