From 59ee6f9ed4c29f4027806be422c7ebbb744e0a4e Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 16 Nov 2020 16:51:11 +0300 Subject: [PATCH 1/3] add additional lookup text field. --- .../TagHelpers/Form/AbpSelectTagHelper.cs | 4 ++++ .../Form/AbpSelectTagHelperService.cs | 12 +++++++++++- .../bootstrap/dom-event-handlers.js | 15 +++++++++++++++ .../CachedObjectExtensionsDtoService.cs | 3 +-- .../Modularity/EntityExtensionConfiguration.cs | 18 +++++++++++++++++- 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs index cc8abb6095..2f4440b904 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs @@ -31,6 +31,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public string AutocompleteFilterParamName { get; set; } + public string AutocompleteSelectedItemName { get; set; } + + public string AutocompleteSelectedItemValue { get; set; } + public AbpSelectTagHelper(AbpSelectTagHelperService tagHelperService) : base(tagHelperService) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 534801d126..7741807aae 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.Diagnostics; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; @@ -85,6 +86,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { selectTagHelper.Items = GetSelectItems(context, output); } + else + { + selectTagHelper.Items = new SelectListItem[] + { + new SelectListItem(TagHelper.AutocompleteSelectedItemName,TagHelper.AutocompleteSelectedItemValue,true) + }; + } var selectTagHelperOutput = await selectTagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "select", TagMode.StartTagAndEndTag); @@ -107,6 +115,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form output.Attributes.Add("data-autocomplete-display-property", TagHelper.AutocompleteDisplayPropertyName); output.Attributes.Add("data-autocomplete-value-property", TagHelper.AutocompleteValuePropertyName); output.Attributes.Add("data-autocomplete-filter-param-name", TagHelper.AutocompleteFilterParamName); + output.Attributes.Add("data-autocomplete-selected-item-name", TagHelper.AutocompleteSelectedItemName); + output.Attributes.Add("data-autocomplete-selected-item-value", TagHelper.AutocompleteSelectedItemValue); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js index 4489a234c1..431d9093f7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js @@ -80,6 +80,18 @@ var displayValue = $(this).data("autocompleteValueProperty"); var itemsPropertyName = $(this).data("autocompleteItemsProperty"); var filterParamName = $(this).data("autocompleteFilterParamName"); + var selectedText = $(this).data("autocompleteSelectedItemName"); + var name = $(this).attr("name"); + var selectedTextInputName = name.substring(0, name.length - 1) + "_Text]"; + var selectedTextInput = $('', { + type: 'hidden', + id: selectedTextInputName, + name: selectedTextInputName, + }); + if (selectedText != "") { + selectedTextInput.val(selectedText); + } + selectedTextInput.insertAfter($select); $select.select2({ ajax: { url: url, @@ -109,6 +121,9 @@ }, width: '100%' }); + $select.on('select2:select', function (e) { + selectedTextInput.val(e.params.data.text); + }); }); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs index 651f3ed93e..22102f82c5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs @@ -140,8 +140,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending }, OnTable = new ExtensionPropertyUiTableDto { - IsVisible = propertyConfig.UI.OnTable.IsVisible && - propertyConfig.UI.Lookup.Url.IsNullOrEmpty() + IsVisible = propertyConfig.UI.OnTable.IsVisible }, Lookup = new ExtensionPropertyUiLookupDto { diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs index d03696b642..384fc355f9 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using JetBrains.Annotations; +using Volo.Abp.Localization; namespace Volo.Abp.ObjectExtending.Modularity { @@ -47,14 +48,29 @@ namespace Volo.Abp.ObjectExtending.Modularity propertyName, () => new ExtensionPropertyConfiguration(this, propertyType, propertyName) ); - configureAction?.Invoke(propertyInfo); NormalizeProperty(propertyInfo); + AddLookupProperty(propertyInfo); + return this; } + private void AddLookupProperty(ExtensionPropertyConfiguration propertyInfo) + { + if (!propertyInfo.UI.Lookup.Url.IsNullOrEmpty()) + { + var lookupPropertyName = $"{propertyInfo.Name}_Text"; + var lookupPropertyInfo = Properties.GetOrAdd( + lookupPropertyName, + () => new ExtensionPropertyConfiguration(this, typeof(string), lookupPropertyName) + ); + lookupPropertyInfo.DisplayName = propertyInfo.DisplayName ?? new FixedLocalizableString(propertyInfo.Name); + propertyInfo.UI.OnTable.IsVisible = false; + } + } + [NotNull] public virtual ImmutableList GetProperties() { From 8ac5e85549442016a635fbac6eae020f12dc700b Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 16 Nov 2020 16:51:44 +0300 Subject: [PATCH 2/3] extra properties autocomplete text field added. --- .../Pages/Identity/Roles/CreateModal.cshtml | 37 +++++++++++-------- .../Pages/Identity/Roles/EditModal.cshtml | 37 +++++++++++-------- .../Pages/Identity/Users/CreateModal.cshtml | 37 +++++++++++-------- .../Pages/Identity/Users/EditModal.cshtml | 37 +++++++++++-------- .../Tenants/CreateModal.cshtml | 37 +++++++++++-------- .../TenantManagement/Tenants/EditModal.cshtml | 37 +++++++++++-------- 6 files changed, 126 insertions(+), 96 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml index 25857a407f..902b984ede 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml @@ -24,23 +24,28 @@ @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { - if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + if (!propertyInfo.Name.EndsWith("_Text")) { - - } - else - { - + if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml index 41b7ee2693..0e60b15733 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml @@ -35,23 +35,28 @@ @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { - if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + if (!propertyInfo.Name.EndsWith("_Text")) { - - } - else - { - + if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml index 1f3f8c3244..0f4eab328b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml @@ -29,23 +29,28 @@ @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { - if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + if (!propertyInfo.Name.EndsWith("_Text")) { - - } - else - { - + if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml index 34fc0547be..3a0bda16d2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml @@ -31,23 +31,28 @@ @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { - if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + if (!propertyInfo.Name.EndsWith("_Text")) { - - } - else - { - + if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + + } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml index 305aec2f34..99bd1f5cc4 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml @@ -24,23 +24,28 @@ @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { - if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + if (!propertyInfo.Name.EndsWith("_Text")) { - - } - else - { - + if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + + } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml index 50b434b3f7..06103d6d9f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml @@ -20,23 +20,28 @@ @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { - if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + if (!propertyInfo.Name.EndsWith("_Text")) { - - } - else - { - + if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + + } } } From 700f9884e65eb9fc338b8dbb1049d1ffb0d52757 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 16 Nov 2020 17:20:38 +0300 Subject: [PATCH 3/3] hide lookup property from Getoperation and refactoring. --- .../EntityExtensionConfiguration.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs index 384fc355f9..33dd44fbb0 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs @@ -52,23 +52,23 @@ namespace Volo.Abp.ObjectExtending.Modularity NormalizeProperty(propertyInfo); - AddLookupProperty(propertyInfo); - - return this; - } - - private void AddLookupProperty(ExtensionPropertyConfiguration propertyInfo) - { if (!propertyInfo.UI.Lookup.Url.IsNullOrEmpty()) { - var lookupPropertyName = $"{propertyInfo.Name}_Text"; - var lookupPropertyInfo = Properties.GetOrAdd( - lookupPropertyName, - () => new ExtensionPropertyConfiguration(this, typeof(string), lookupPropertyName) - ); - lookupPropertyInfo.DisplayName = propertyInfo.DisplayName ?? new FixedLocalizableString(propertyInfo.Name); + AddLookupTextProperty(propertyInfo); propertyInfo.UI.OnTable.IsVisible = false; + propertyInfo.Api.OnGet.IsAvailable = false; } + return this; + } + + private void AddLookupTextProperty(ExtensionPropertyConfiguration propertyInfo) + { + var lookupTextPropertyName = $"{propertyInfo.Name}_Text"; + var lookupTextPropertyInfo = Properties.GetOrAdd( + lookupTextPropertyName, + () => new ExtensionPropertyConfiguration(this, typeof(string), lookupTextPropertyName) + ); + lookupTextPropertyInfo.DisplayName = propertyInfo.DisplayName ?? new FixedLocalizableString(propertyInfo.Name); } [NotNull]