From 691aff50e778f66a6e1ff8ea86d08d6c04abe644 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Thu, 5 Dec 2024 00:03:32 +0200 Subject: [PATCH 01/20] feature: shift select multiple records --- app/assets/stylesheets/avo.base.css | 10 ++ .../avo/index/resource_table_component.rb | 5 +- .../avo/index/table_row_component.html.erb | 5 +- .../avo/index/table_row_component.rb | 1 + .../avo/items/panel_component.html.erb | 5 + .../avo/row_selector_component.html.erb | 7 +- app/components/avo/row_selector_component.rb | 1 + .../views/resource_show_component.html.erb | 3 + app/javascript/avo.base.js | 21 +++ app/javascript/js/controllers.js | 2 + .../controllers/item_selector_controller.js | 6 + .../controllers/record_selector_controller.js | 133 ++++++++++++++++++ .../js/controllers/table_row_controller.js | 8 +- lib/avo.rb | 1 + .../has_resource_stimulus_controllers.rb | 2 +- spec/dummy/app/avo/resources/project.rb | 2 + spec/dummy/app/avo/resources/user.rb | 22 ++- .../app/views/avo/tools/custom_tool.html.erb | 72 +++++++--- tailwind.preset.js | 2 + 19 files changed, 278 insertions(+), 30 deletions(-) create mode 100644 app/javascript/js/controllers/record_selector_controller.js diff --git a/app/assets/stylesheets/avo.base.css b/app/assets/stylesheets/avo.base.css index 67fa61f8d3..c1ccbc3a83 100644 --- a/app/assets/stylesheets/avo.base.css +++ b/app/assets/stylesheets/avo.base.css @@ -92,3 +92,13 @@ trix-editor { dialog#turbo-confirm { @apply bg-transparent; } + +.shift-pressed { + & .highlighted-row { + @apply !bg-slate-200; + } +} + +.selected-row { + @apply !bg-slate-100; +} diff --git a/app/components/avo/index/resource_table_component.rb b/app/components/avo/index/resource_table_component.rb index 68f0afcd67..d4803960b4 100644 --- a/app/components/avo/index/resource_table_component.rb +++ b/app/components/avo/index/resource_table_component.rb @@ -67,7 +67,7 @@ def generate_table_row_components table_row_components = [] # Loop through each resource in @resources - @resources.each do |resource| + @resources.each_with_index do |resource, index| # Get fields for the current resource and concat them to the @header_fields row_fields = resource.get_fields(reflection: @reflection, only_root: true) header_fields.concat row_fields @@ -79,7 +79,8 @@ def generate_table_row_components reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, - actions: @actions + actions: @actions, + index: ) end diff --git a/app/components/avo/index/table_row_component.html.erb b/app/components/avo/index/table_row_component.html.erb index 1f682ab548..5668ae53e6 100644 --- a/app/components/avo/index/table_row_component.html.erb +++ b/app/components/avo/index/table_row_component.html.erb @@ -4,6 +4,7 @@ id: "#{self.class.to_s.underscore}_#{@resource.record.to_param}", class: class_names("bg-white hover:bg-gray-50 hover:shadow-row z-21 border-b", {"cursor-pointer": click_row_to_view_record}), data: { + index: @index, component_name: self.class.to_s.underscore, resource_name: @resource.class.to_s, record_id: @resource.record.id, @@ -15,9 +16,9 @@ **(try(:drag_reorder_item_data_attributes) || {}), } do %> <% if @resource.record_selector %> - +
- <%= render Avo::RowSelectorComponent.new floating: false %> + <%= render Avo::RowSelectorComponent.new floating: false, index: @index %>
<% end %> diff --git a/app/components/avo/index/table_row_component.rb b/app/components/avo/index/table_row_component.rb index 82cac0896e..3add2dbdfa 100644 --- a/app/components/avo/index/table_row_component.rb +++ b/app/components/avo/index/table_row_component.rb @@ -13,6 +13,7 @@ class Avo::Index::TableRowComponent < Avo::BaseComponent prop :actions prop :fields prop :header_fields + prop :index def resource_controls_component Avo::Index::ResourceControlsComponent.new( diff --git a/app/components/avo/items/panel_component.html.erb b/app/components/avo/items/panel_component.html.erb index 290546c852..759166d117 100644 --- a/app/components/avo/items/panel_component.html.erb +++ b/app/components/avo/items/panel_component.html.erb @@ -1,5 +1,10 @@ <%= render Avo::PanelComponent.new(**args) do |c| %> <% if @is_main_panel %> + <% c.with_after_description_slot do %> + <% if Avo.plugin_manager.installed?("avo_collaborate") %> + <%#= render Avo::Collaborate::ReactionPickerComponent.new(target: @resource.record, resource: @resource) %> + <% end %> + <% end %> <% c.with_tools do %> <% controls.each do |control| %> <%= render_control control %> diff --git a/app/components/avo/row_selector_component.html.erb b/app/components/avo/row_selector_component.html.erb index 196014a317..9eafd752c1 100644 --- a/app/components/avo/row_selector_component.html.erb +++ b/app/components/avo/row_selector_component.html.erb @@ -11,7 +11,12 @@ "w-4 h-4": @size.to_sym != :lg, }), data: { - action: "input->item-selector#toggle input->item-select-all#selectRow", + index: @index, + action: " + input->item-selector#toggle + input->item-select-all#selectRow + click->record-selector#toggleMultiple + ", item_select_all_target: "itemCheckbox", tippy: "tooltip" } diff --git a/app/components/avo/row_selector_component.rb b/app/components/avo/row_selector_component.rb index 734e309bd2..e0f65d4122 100644 --- a/app/components/avo/row_selector_component.rb +++ b/app/components/avo/row_selector_component.rb @@ -3,4 +3,5 @@ class Avo::RowSelectorComponent < Avo::BaseComponent prop :floating, default: false prop :size, default: :md + prop :index end diff --git a/app/components/avo/views/resource_show_component.html.erb b/app/components/avo/views/resource_show_component.html.erb index a51bf0dff4..316d7b766b 100644 --- a/app/components/avo/views/resource_show_component.html.erb +++ b/app/components/avo/views/resource_show_component.html.erb @@ -23,6 +23,9 @@ )%> <% end %> <% end %> +
+ <%#= render Avo::Collaborate::TimelineComponent.new(resource: @resource) %> +
<% if should_display_invalid_fields_errors? %>