Ejemplo n.º 1
0
        protected virtual void WriteMethod(ParsedApiDesc desc, CustomIndentedTextWriter writer)
        {
            string returnString;

            if (desc.Action.ReturnType == null)
            {
                returnString = "any";
            }
            else
            {
                returnString = _converter.GetTypeScriptName(desc.Action.ReturnType);
            }

            var paramString = desc.ParamString;

            if (!string.IsNullOrWhiteSpace(paramString))
            {
                paramString += ", ";
            }

            string filesString = "";

            if (desc.PostParameter != null && desc.PostParameter.ParameterType.Name == "IFormCollection")
            {
                filesString = "_files?: File[], ";
            }

            var modifier = "public";

            if (_options.HideActionsWithNoReturn && returnString.StartsWith("any"))
            {
                writer.WriteLine("// This method is hidden because it's return type is not specified and HideActionsWithNoReturn=True");
                writer.WriteLine("// Either add a return type (check [ProducesResponseType]) or set HideActionsWithNoReturn to False");
                modifier = "protected";
            }

            writer.WriteLine($"{modifier} {desc.NameString}({paramString}{filesString}{optionsVariableName}?: {_options.OptionsClassName}): {_options.PromiseType}<{returnString}> {{");
            writer.Indent++;

            if (desc.PostParameter != null)
            {
                if (String.IsNullOrWhiteSpace(filesString))
                {
                    var pinit = this.CreateTypeInitializerMethod(desc.PostParameter.ParameterType);
                    if (!String.IsNullOrWhiteSpace(pinit))
                    {
                        writer.WriteLine($"{desc.PostParameter.ParameterName} = from_{pinit}({desc.PostParameter.ParameterName});");
                    }
                }
                else
                {
                    writer.WriteLine($"if ({checkRealFn}(_files))");
                    writer.Indent++;
                    writer.WriteLine($"for (const _f of _files) {{ {desc.PostParameter.ParameterName}.append(\"files[]\", _f); }}");
                    writer.Indent--;
                }
            }

            var excParams = desc.ModelParameter == null ? desc.GetParameters : new[] { desc.ModelParameter };

            writer.WriteLine($"var url = this.endpoints.{desc.NameString}({String.Join(", ", excParams.Select(p => p.ParameterName))});");

            var ajaxCtx = new AjaxExecContext {
                Ajax = ajaxVariableName, HttpMethod = desc.Action.Method.ToString().ToLower(), Options = optionsVariableName, Post = desc.PostParameter?.ParameterName ?? "null", Url = "url"
            };

            writer.Write("return " + _options.FnAjaxExecute(ajaxCtx).TrimEnd(';'));

            var initializer = this.CreateTypeInitializerMethod(desc.Action.ReturnType);

            if (String.IsNullOrWhiteSpace(initializer))
            {
                writer.WriteLine(";");
            }
            else
            {
                writer.WriteLine($".then(to_{initializer});");
            }

            writer.Indent--;
            writer.WriteLine("}");
        }
Ejemplo n.º 2
0
        protected virtual void WriteEndpoint(ParsedApiDesc desc, CustomIndentedTextWriter writer)
        {
            var line = $"{desc.NameString}: ({desc.EndpointParamString}): string => {desc.PathString},";

            writer.WriteLine(line.Replace(" + \"\",", ","));
        }