From ccc1c2b103bfd9521d72e73a22daa2483721bdb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Thu, 24 Aug 2023 11:10:14 -0400 Subject: [PATCH] Add primary_key option to search select for activeadmin_addons v1 --- app/assets/javascripts/activeadmin_addons/all.js | 9 ++++++--- app/inputs/nested_level_input.rb | 1 + app/inputs/search_select_input.rb | 1 + app/inputs/selected_list_input.rb | 1 + .../activeadmin_addons/inputs/nested-select.js | 3 ++- .../activeadmin_addons/inputs/search-select.js | 3 ++- .../activeadmin_addons/inputs/selected-list.js | 3 ++- docs/select2_search.md | 1 + docs/select2_selected_list.md | 1 + 9 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/activeadmin_addons/all.js b/app/assets/javascripts/activeadmin_addons/all.js index 0846df99..322a0f85 100644 --- a/app/assets/javascripts/activeadmin_addons/all.js +++ b/app/assets/javascripts/activeadmin_addons/all.js @@ -230,6 +230,7 @@ var responseRoot = element.data("response-root"); var minimumInputLength = element.data("minimum-input-length"); var order = element.data("order"); + var primaryKey = element.data("primary-key"); var selectOptions = { width: width, minimumInputLength: minimumInputLength, @@ -270,7 +271,7 @@ resource[displayName] = "No display name for id #" + resource.id.toString(); } return { - id: resource.id, + id: resource[primaryKey], text: resource[displayName].toString() }; }) @@ -352,6 +353,7 @@ var minimumInputLength = element.data("minimum-input-length"); var order = element.data("order"); var parentId = element.data("parent-id"); + var primaryKey = element.data("primary-key"); var selectInstance; var select2Config = { width: width, @@ -401,7 +403,7 @@ resource[displayName] = "No display name for id #" + resource.id.toString(); } return { - id: resource.id, + id: resource[primaryKey], text: resource[displayName].toString() }; }) @@ -520,6 +522,7 @@ var responseRoot = element.data("response-root"); var minimumInputLength = element.data("minimum-input-length"); var order = element.data("order"); + var primaryKey = element.data("primary-key"); var selectOptions = { minimumInputLength: minimumInputLength, allowClear: true, @@ -551,7 +554,7 @@ return { results: jQuery.map(data, function(resource) { return { - id: resource.id, + id: resource[primaryKey], text: resource[displayName].toString() }; }) diff --git a/app/inputs/nested_level_input.rb b/app/inputs/nested_level_input.rb index c5ae4ee9..20e366c9 100644 --- a/app/inputs/nested_level_input.rb +++ b/app/inputs/nested_level_input.rb @@ -24,6 +24,7 @@ def load_control_attributes load_data_attr(:url, default: url_from_method) load_data_attr(:response_root, default: tableize_method) load_data_attr(:width, default: "80%") + load_data_attr(:primary_key, default: "id") load_data_attr(:order, value: @options[:order_by], default: get_data_attr_value(:fields).first.to_s + "_desc") diff --git a/app/inputs/search_select_input.rb b/app/inputs/search_select_input.rb index 15a455d0..f2fadb5a 100644 --- a/app/inputs/search_select_input.rb +++ b/app/inputs/search_select_input.rb @@ -20,6 +20,7 @@ def load_control_attributes load_data_attr(:display_name, default: "name") load_data_attr(:minimum_input_length, default: 1) load_data_attr(:width, default: "80%") + load_data_attr(:primary_key, default: "id") load_data_attr( :order, value: @options[:order_by], diff --git a/app/inputs/selected_list_input.rb b/app/inputs/selected_list_input.rb index 0fc904ad..982cf0a8 100644 --- a/app/inputs/selected_list_input.rb +++ b/app/inputs/selected_list_input.rb @@ -15,6 +15,7 @@ def load_control_attributes load_data_attr(:display_name, default: "name") load_data_attr(:minimum_input_length, default: 1) load_data_attr(:width, default: "100%") + load_data_attr(:primary_key, default: "id") load_data_attr( :order, value: @options[:order_by], diff --git a/app/javascript/activeadmin_addons/inputs/nested-select.js b/app/javascript/activeadmin_addons/inputs/nested-select.js index a63c689d..5c44e09f 100644 --- a/app/javascript/activeadmin_addons/inputs/nested-select.js +++ b/app/javascript/activeadmin_addons/inputs/nested-select.js @@ -79,6 +79,7 @@ var initializer = function() { var minimumInputLength = element.data('minimum-input-length'); var order = element.data('order'); var parentId = element.data('parent-id'); + var primaryKey = element.data('primary-key'); var selectInstance; var select2Config = { @@ -133,7 +134,7 @@ var initializer = function() { resource[displayName] = 'No display name for id #' + resource.id.toString(); } return { - id: resource.id, + id: resource[primaryKey], text: resource[displayName].toString(), }; }), diff --git a/app/javascript/activeadmin_addons/inputs/search-select.js b/app/javascript/activeadmin_addons/inputs/search-select.js index 5c8b722f..2dd80980 100644 --- a/app/javascript/activeadmin_addons/inputs/search-select.js +++ b/app/javascript/activeadmin_addons/inputs/search-select.js @@ -16,6 +16,7 @@ var initializer = function() { var responseRoot = element.data('response-root'); var minimumInputLength = element.data('minimum-input-length'); var order = element.data('order'); + var primaryKey = element.data('primary-key'); var selectOptions = { width: width, @@ -58,7 +59,7 @@ var initializer = function() { resource[displayName] = 'No display name for id #' + resource.id.toString(); } return { - id: resource.id, + id: resource[primaryKey], text: resource[displayName].toString(), }; }), diff --git a/app/javascript/activeadmin_addons/inputs/selected-list.js b/app/javascript/activeadmin_addons/inputs/selected-list.js index 3613bd45..dba7356e 100644 --- a/app/javascript/activeadmin_addons/inputs/selected-list.js +++ b/app/javascript/activeadmin_addons/inputs/selected-list.js @@ -25,6 +25,7 @@ var initializer = function() { var responseRoot = element.data('response-root'); var minimumInputLength = element.data('minimum-input-length'); var order = element.data('order'); + var primaryKey = element.data('primary-key'); var selectOptions = { minimumInputLength: minimumInputLength, @@ -58,7 +59,7 @@ var initializer = function() { return { results: jQuery.map(data, function(resource) { return { - id: resource.id, + id: resource[primaryKey], text: resource[displayName].toString(), }; }), diff --git a/docs/select2_search.md b/docs/select2_search.md index 91e72ac5..d815debf 100644 --- a/docs/select2_search.md +++ b/docs/select2_search.md @@ -45,3 +45,4 @@ In case you need to filter with an attribute of another table you need to includ * `order_by`: **(optional)** Order (sort) results by a specific attribute, suffixed with `_desc` or `_asc`. Eg: `description_desc`. By **default** is used the first field in descending direction. * `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `cont`. * `method_model`: **(optional)** Use in case you need to search or filter an attribute of another table. +* `primary_key`: **(optional)** Use in case you need to search with another column. It **defaults to** `"id"`. diff --git a/docs/select2_selected_list.md b/docs/select2_selected_list.md index 8613824b..61bf738a 100644 --- a/docs/select2_selected_list.md +++ b/docs/select2_selected_list.md @@ -38,3 +38,4 @@ To get... * `width`: **(optional)** You can set the select input width (px or %). * `order_by`: **(optional)** Order (sort) results by a specific attribute, suffixed with `_desc` or `_asc`. Eg: `description_desc`. By **default** is used the first field in descending direction. * `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `cont` +* `primary_key`: **(optional)** You can change the default primary key. It **defaults to** `"id"`