From cf6b277ca3f22e575b059a8d8029163ddcee86db Mon Sep 17 00:00:00 2001 From: hellekin Date: Tue, 6 Oct 2020 21:59:13 +0200 Subject: Fix form, add flash --- app/assets/stylesheets/application/_flash.scss | 22 ++++++++++++ app/controllers/resources_controller.rb | 50 ++++++++++++++++++++++++++ app/views/application/_flash.html.erb | 3 ++ app/views/layouts/application.html.erb | 1 + app/views/resources/edit.html.erb | 15 ++++++-- 5 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 app/assets/stylesheets/application/_flash.scss create mode 100644 app/views/application/_flash.html.erb diff --git a/app/assets/stylesheets/application/_flash.scss b/app/assets/stylesheets/application/_flash.scss new file mode 100644 index 0000000..37d27b2 --- /dev/null +++ b/app/assets/stylesheets/application/_flash.scss @@ -0,0 +1,22 @@ +/* + FLASH +*/ + +#flash { + position: absolute; + bottom: 2rem; + margin: 0 auto; + width: 50%; + min-width: 24rem; + max-width: 64rem; + max-height: 10rem; + overflow: scroll; + padding: 1rem; + + &.alert { + background-color: var(--danger-medium); + } + &.notice { + background-color: var(--highlight-low); + } +} diff --git a/app/controllers/resources_controller.rb b/app/controllers/resources_controller.rb index 75fcedf..fdb69cc 100644 --- a/app/controllers/resources_controller.rb +++ b/app/controllers/resources_controller.rb @@ -35,6 +35,52 @@ class ResourcesController < ApplicationController # 1. Compare records for changes # 2. Validate each change # 3. Moderate queue or save + + updated_properties = @resource.feature['properties'] + updated_geometry = @resource.feature['geometry'] + + updated = false + + flash.now[:notice] = updated_geometry.inspect + + if @resource.uuid.present? && params[:resource][:uuid].present? && params[:resource][:uuid] != @resource.uuid + flash.now[:error] = "UUID cannot be changed." + render :edit, status: :unprocessable_entity and return + end + + params[:resource].each do |prop| + next if %w(longitude latitude).include?(prop.first.to_s) + if prop.last.present? && prop.last != @resource.send("#{prop.first.to_s}") + updated = true + updated_properties[prop.first.to_s] = prop.last + end + end + + lon, lat = updated_geometry['coordinates'] + flash.now.notice = "lon #{lon} => #{params[:resource][:longitude]}, lat #{lat} =>#{params[:resource][:latitude]}" + if params[:resource][:longitude].present? && params[:resource][:longitude] != lon + updated = true + updated_geometry['coordinates'][0] = params[:resource][:longitude] + Rails.logger.info "UPDATED LON TO #{params[:resource][:longitude]} /// #{updated_geometry.inspect}" + end + if params[:resource][:latitude].present? && params[:resource][:latitude] != lat + updated = true + updated_geometry['coordinates'][1] = params[:resource][:latitude] + end + + if updated == true + Rails.logger.info "Got a Resource update..." + @resource.feature['properties'] = updated_properties + @resource.feature['geometry'] = updated_geometry + if @resource.save + flash.notice = "Good! It worked! #{@resource.feature['geometry']}" + redirect_to resource_url(@resource) and return + else + flash.now[:notice] = @resource.errors.inspect + end + end + flash.now[:alert] = "Update failed!" + render :edit end # GET /resources/:id/delete @@ -49,6 +95,10 @@ class ResourcesController < ApplicationController private + def resource_params + params.require(:resource).permit(:uuid, :name, :summary, :description, :email, :city, :postal_code, :phone_number, :website, :entry_number, :categories, :latitude, :longitude) + end + def set_resource @resource = Resource.find_by(uuid: params[:id]) || Resource.new end diff --git a/app/views/application/_flash.html.erb b/app/views/application/_flash.html.erb new file mode 100644 index 0000000..0b5cc5f --- /dev/null +++ b/app/views/application/_flash.html.erb @@ -0,0 +1,3 @@ +
<% flash.each do |type, msg| %> + <%= msg %> +<% end %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 4aae3ea..38dcf46 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -26,5 +26,6 @@ + <%= render partial: 'flash' %> diff --git a/app/views/resources/edit.html.erb b/app/views/resources/edit.html.erb index 7e9799f..fa61a0a 100644 --- a/app/views/resources/edit.html.erb +++ b/app/views/resources/edit.html.erb @@ -1,6 +1,15 @@ -<%= form_with model: @resource do |f| %> - <%= f.label :name, "Name of this Resource" %> - <%= f.text_field :name %> +<%= form_with model: @resource, local: true do |f| %> + <%= f.label :name %> + <%= f.text_field :name, value: @resource.name %> + + + <%= tag.legend "Geographic Position" %> + <%= f.label :longitude %> + <%= f.text_field :longitude, value: @resource.lon %> + <%= f.label :latitude %> + <%= f.text_field :latitude, value: @resource.lat %> + + <%= f.submit 'Save' %> <% end %> -- cgit v1.2.3