From d51df64b3ad131d6a7719bd396dabf75ff4170b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 6 Oct 2017 12:37:13 +0300 Subject: [PATCH] Method overloading support for jquery script generation. --- .../AspNetCoreApiDescriptionModelProvider.cs | 1 + .../Modeling/ActionApiDescriptionModel.cs | 6 ++- .../JQuery/JQueryProxyScriptGenerator.cs | 37 +++++++++++++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs index 4ddfa24f45..1d1dc7d252 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs @@ -80,6 +80,7 @@ namespace Volo.Abp.AspNetCore.Mvc } var actionModel = controllerModel.AddAction(uniqueMethodName, ActionApiDescriptionModel.Create( + uniqueMethodName, method, apiDescription.RelativePath, apiDescription.HttpMethod, diff --git a/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs b/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs index 86d903f97f..7e9d375d06 100644 --- a/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs +++ b/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs @@ -10,6 +10,8 @@ namespace Volo.Abp.Http.Modeling [Serializable] public class ActionApiDescriptionModel { + public string UniqueName { get; set; } + public string Name { get; set; } public string HttpMethod { get; set; } @@ -29,8 +31,9 @@ namespace Volo.Abp.Http.Modeling } - public static ActionApiDescriptionModel Create([NotNull] MethodInfo method, [NotNull] string url, [NotNull] string httpMethod, [NotNull] IList supportedVersions) + public static ActionApiDescriptionModel Create([NotNull] string uniqueName, [NotNull] MethodInfo method, [NotNull] string url, [NotNull] string httpMethod, [NotNull] IList supportedVersions) { + Check.NotNull(uniqueName, nameof(uniqueName)); Check.NotNull(method, nameof(method)); Check.NotNull(url, nameof(url)); Check.NotNull(httpMethod, nameof(httpMethod)); @@ -38,6 +41,7 @@ namespace Volo.Abp.Http.Modeling return new ActionApiDescriptionModel { + UniqueName = uniqueName, Name = method.Name, Url = url, HttpMethod = httpMethod, diff --git a/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs b/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs index d910109caa..00aceb6c0b 100644 --- a/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs +++ b/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs @@ -63,21 +63,23 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery script.AppendLine($" abp.utils.createNamespace(window, '{controllerName}');"); + var normalizedActionNames = CalculateNormalizedActionNames(controller.Actions); + foreach (var action in controller.Actions.Values) { script.AppendLine(); - AddActionScript(script, module, controllerName, controller, action); + AddActionScript(script, module, controllerName, controller, action, normalizedActionNames[action]); } script.AppendLine(); script.AppendLine(" })();"); } - private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, string controllerName, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action) + private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, string controllerName, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action, string normalizedActionName) { var parameterList = ProxyScriptingJsFuncHelper.GenerateJsFuncParameterList(action, "ajaxParams"); - script.AppendLine($" {controllerName}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(action.Name.RemovePostFix("Async").ToCamelCase())} = function({parameterList}) {{"); + script.AppendLine($" {controllerName}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(normalizedActionName.RemovePostFix("Async").ToCamelCase())} = function({parameterList}) {{"); script.AppendLine(" return abp.ajax($.extend(true, {"); AddAjaxCallParameters(script, controller, action); @@ -125,6 +127,35 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery script.AppendLine(); } + private static Dictionary CalculateNormalizedActionNames(Dictionary actions) + { + var result = new Dictionary(); + + var actionsByName = new Dictionary>(); + + foreach (var action in actions.Values) + { + var actionName = action.Name.RemovePostFix("Async").ToCamelCase(); + result[action] = actionName; + actionsByName.GetOrAdd(actionName, () => new List()).Add(action); + } + + foreach (var actionByName in actionsByName) + { + if (actionByName.Value.Count <= 1) + { + continue; + } + + foreach (var action in actionByName.Value) + { + result[action] = action.UniqueName; + } + } + + return result; + } + private static string GetNormalizedTypeName(string typeWithAssemblyName) { return CamelCaseWithNamespace(