From 0bdbcbf156f53be9397a13ec11dbc873025e3268 Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Tue, 6 May 2025 09:56:12 +0200 Subject: [PATCH] Highlight errors --- app/assets/stylesheets/terminals.css | 4 ++++ app/controllers/commands_controller.rb | 9 ++++++--- app/views/commands/_form.html.erb | 20 ++++++++++++++++++++ app/views/commands/_terminal.html.erb | 18 +----------------- 4 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 app/views/commands/_form.html.erb diff --git a/app/assets/stylesheets/terminals.css b/app/assets/stylesheets/terminals.css index 69a66da23..b947fabe6 100644 --- a/app/assets/stylesheets/terminals.css +++ b/app/assets/stylesheets/terminals.css @@ -54,4 +54,8 @@ display: flex; } } + + .has-error .terminal__input { + border: 2px solid red; + } } diff --git a/app/controllers/commands_controller.rb b/app/controllers/commands_controller.rb index 4575be7f7..89da9e4ea 100644 --- a/app/controllers/commands_controller.rb +++ b/app/controllers/commands_controller.rb @@ -3,10 +3,14 @@ class CommandsController < ApplicationController @commands = Current.user.commands.order(created_at: :desc).limit(20) end + def new + + end + def create command = parse_command(params[:command]) - if command + if command&.valid? result = command.execute case result @@ -16,7 +20,7 @@ class CommandsController < ApplicationController redirect_back_or_to root_path end else - raise "Pending to handle invalid commands" + render turbo_stream: turbo_stream.replace("commands_form", partial: "commands/form", locals: { error: true }) end end @@ -24,7 +28,6 @@ class CommandsController < ApplicationController def parse_command(string) Command::Parser.new(parsing_context).parse(string).tap do |command| Current.user.commands << command - command.validate! end end diff --git a/app/views/commands/_form.html.erb b/app/views/commands/_form.html.erb new file mode 100644 index 000000000..c179c65ca --- /dev/null +++ b/app/views/commands/_form.html.erb @@ -0,0 +1,20 @@ +<% has_error = local_assigns.fetch(:error, false) %> + +<%= form_tag commands_path, + id: "commands_form", + class: [ "flex align-center gap-half", { "has-error" => has_error } ], + data: { controller: "form", action: "turbo:submit-end->form#reset" } do %> + + + <%= text_field_tag "command", has_error ? params[:command] : nil, + autocomplete: "off", + autocorrect: "off", + autocapitalize: "off", + class: "terminal__input input fill-transparent unpad", + data: { + commands_target: "input", + action: "keydown.up->toggle-class#add:prevent keydown.down->toggle-class#remove:prevent" + }, + placeholder: "Search or type commands…" %> +<% end %> + diff --git a/app/views/commands/_terminal.html.erb b/app/views/commands/_terminal.html.erb index 2a4c40669..f90a92bce 100644 --- a/app/views/commands/_terminal.html.erb +++ b/app/views/commands/_terminal.html.erb @@ -3,22 +3,6 @@ toggle_class_toggle_class: "terminal--open" } do %> <%= turbo_frame_tag :recent_commands, src: commands_path, refresh: "morph" %> - <%= form_tag commands_path, - class: "flex align-center gap-half", - data: { controller: "form", action: "turbo:submit-end->form#reset" } do %> - - - <%= text_field_tag "command", nil, - autocomplete: "off", - autocorrect: "off", - autocapitalize: "off", - class: "terminal__input input fill-transparent unpad", - data: { - turbo_permanent: true, - commands_target: "input", - action: "keydown.up->toggle-class#add:prevent keydown.down->toggle-class#remove:prevent" - }, - placeholder: "Search or type commands…" %> - <% end %> + <%= render "commands/form" %> <% end %>