From 0183d0883c85fa2569cba70d268747536770a612 Mon Sep 17 00:00:00 2001 From: Cisco Guillaume Date: Mon, 7 Dec 2020 10:34:40 +0100 Subject: [PATCH] fix(smart-actions): transform legacy widgets in hooks (#395) --- .../forest_liana/actions_controller.rb | 11 +++- app/helpers/forest_liana/widgets_helper.rb | 59 +++++++++++++++++++ spec/requests/actions_controller_spec.rb | 5 +- 3 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 app/helpers/forest_liana/widgets_helper.rb diff --git a/app/controllers/forest_liana/actions_controller.rb b/app/controllers/forest_liana/actions_controller.rb index 5dcb1824..f04f248f 100644 --- a/app/controllers/forest_liana/actions_controller.rb +++ b/app/controllers/forest_liana/actions_controller.rb @@ -27,12 +27,19 @@ def get_record end def get_smart_action_load_ctx(fields) - fields = fields.reduce({}) {|p, c| p.update(c[:field] => c.merge!(value: nil))} + fields = fields.reduce({}) do |p, c| + ForestLiana::WidgetsHelper.set_field_widget(c) + p.update(c[:field] => c.merge!(value: nil)) + end {:record => get_record, :fields => fields} end def get_smart_action_change_ctx(fields) - fields = fields.reduce({}) {|p, c| p.update(c[:field] => c.permit!.to_h)} + fields = fields.reduce({}) do |p, c| + field = c.permit!.to_h.symbolize_keys + ForestLiana::WidgetsHelper.set_field_widget(field) + p.update(c[:field] => field) + end {:record => get_record, :fields => fields} end diff --git a/app/helpers/forest_liana/widgets_helper.rb b/app/helpers/forest_liana/widgets_helper.rb new file mode 100644 index 00000000..59f8f031 --- /dev/null +++ b/app/helpers/forest_liana/widgets_helper.rb @@ -0,0 +1,59 @@ +require 'set' + +module ForestLiana + module WidgetsHelper + + @widget_edit_list = [ + 'address editor', + 'belongsto typeahead', + 'belongsto dropdown', + 'boolean editor', + 'checkboxes', + 'color editor', + 'date editor', + 'dropdown', + 'embedded document editor', + 'file picker', + 'json code editor', + 'input array', + 'multiple select', + 'number input', + 'point editor', + 'price editor', + 'radio button', + 'rich text', + 'text area editor', + 'text editor', + 'time input', + ] + + @v1_to_v2_edit_widgets_mapping = { + address: 'address editor', + 'belongsto select': 'belongsto dropdown', + 'color picker': 'color editor', + 'date picker': 'date editor', + price: 'price editor', + 'JSON editor': 'json code editor', + 'rich text editor': 'rich text', + 'text area': 'text area editor', + 'text input': 'text editor', + } + + def self.set_field_widget(field) + + if field[:widget] + if @v1_to_v2_edit_widgets_mapping[field[:widget].to_sym] + field[:widgetEdit] = {name: @v1_to_v2_edit_widgets_mapping[field[:widget].to_sym], parameters: {}} + elsif @widget_edit_list.include?(field[:widget]) + field[:widgetEdit] = {name: field[:widget], parameters: {}} + end + end + + if !field.key?(:widgetEdit) + field[:widgetEdit] = nil + end + + field.delete(:widget) + end + end +end diff --git a/spec/requests/actions_controller_spec.rb b/spec/requests/actions_controller_spec.rb index f4b16b89..0e21fb3f 100644 --- a/spec/requests/actions_controller_spec.rb +++ b/spec/requests/actions_controller_spec.rb @@ -114,7 +114,10 @@ it 'should respond 200' do post '/forest/actions/my_action/hooks/change', JSON.dump(params), 'CONTENT_TYPE' => 'application/json' expect(response.status).to eq(200) - expect(JSON.parse(response.body)).to eq({'fields' => [updated_foo.merge({:value => 'baz'}).stringify_keys]}) + expected = updated_foo.merge({:value => 'baz'}) + expected[:widgetEdit] = nil + expected.delete(:widget) + expect(JSON.parse(response.body)).to eq({'fields' => [expected.stringify_keys]}) end it 'should respond 500 with bad params' do