diff --git a/lib/codegen.js b/lib/codegen.js index 54dbe7ef..b87e50d9 100644 --- a/lib/codegen.js +++ b/lib/codegen.js @@ -169,7 +169,7 @@ var getViewForSwagger2 = function(opts, type){ } else if(parameter.in === 'formData'){ parameter.isFormParameter = true; } - parameter.tsType = ts.convertType(parameter); + parameter.tsType = ts.convertType(parameter, swagger); parameter.cardinality = parameter.required ? '' : '?'; method.parameters.push(parameter); }); diff --git a/lib/typescript.js b/lib/typescript.js index b6c5a844..fc24fbbc 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -16,7 +16,7 @@ function convertType(swaggerType, swagger) { var typespec = { description: swaggerType.description, isEnum: false }; if (swaggerType.hasOwnProperty('schema')) { - return convertType(swaggerType.schema); + return convertType(swaggerType.schema, swagger); } else if (_.isString(swaggerType.$ref)) { typespec.tsType = 'ref'; typespec.target = swaggerType.$ref.substring(swaggerType.$ref.lastIndexOf('/') + 1); @@ -32,7 +32,7 @@ function convertType(swaggerType, swagger) { typespec.tsType = 'boolean'; } else if (swaggerType.type === 'array') { typespec.tsType = 'array'; - typespec.elementType = convertType(swaggerType.items); + typespec.elementType = convertType(swaggerType.items, swagger); } else /*if (swaggerType.type === 'object')*/ { //remaining types are created as objects if (swaggerType.minItems >= 0 && swaggerType.hasOwnProperty('title') && !swaggerType.$ref) { typespec.tsType = 'any'; @@ -52,14 +52,14 @@ function convertType(swaggerType, swagger) { } }); } else { - var property = convertType(ref); + var property = convertType(ref, swagger); Array.prototype.push.apply(typespec.properties, property.properties); } }); } _.forEach(swaggerType.properties, function (propertyType, propertyName) { - var property = convertType(propertyType); + var property = convertType(propertyType, swagger); property.name = propertyName; property.optional = true; diff --git a/templates/angular-class.mustache b/templates/angular-class.mustache index 36d58608..d3126164 100644 --- a/templates/angular-class.mustache +++ b/templates/angular-class.mustache @@ -76,9 +76,21 @@ angular.module('{{&moduleName}}', []) headers: headers }; if(Object.keys(form).length > 0) { - options.data = form; - options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; - options.transformRequest = {{&className}}.transformRequest; + if (undefined === options.headers['Content-Type']) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = {{&className}}.transformRequest; + } else if ((Array.isArray(options.headers['Content-Type']) && options.headers['Content-Type'].indexOf('multipart/form-data') > -1) + || 'string' === (typeof options.headers['Content-Type']) && 'multipart/form-data' === options.headers['Content-Type']) { + var formData = new FormData(); + for (var key in form) { + formData.append(key, form[key]); + } + + options.data = formData; + options.headers['Content-Type'] = undefined; + options.transformRequest = angular.identity; + } } $http(options) .then(function(data, status, headers, config){