diff --git a/lib/js_rails_routes/language/javascript.rb b/lib/js_rails_routes/language/javascript.rb index dba1341..38d7385 100644 --- a/lib/js_rails_routes/language/javascript.rb +++ b/lib/js_rails_routes/language/javascript.rb @@ -11,7 +11,13 @@ class JavaScript < Base var query = []; for (var param in params) if (Object.prototype.hasOwnProperty.call(params, param)) { if (keys.indexOf(param) === -1) { - query.push(param + "=" + encodeURIComponent(params[param])); + if (Array.isArray(params[param])) { + for (var value of params[param]) { + query.push(param + "[]=" + encodeURIComponent(value)); + } + } else { + query.push(param + "=" + encodeURIComponent(params[param])); + } } } return query.length ? route + "?" + query.join("&") : route; diff --git a/lib/js_rails_routes/language/typescript.rb b/lib/js_rails_routes/language/typescript.rb index c0dfc6d..5ce6c99 100644 --- a/lib/js_rails_routes/language/typescript.rb +++ b/lib/js_rails_routes/language/typescript.rb @@ -7,14 +7,20 @@ module JSRailsRoutes module Language class TypeScript < JavaScript PROCESS_FUNC = <<~TYPESCRIPT - type Value = string | number + type Value = string | number | (string | number)[]; type Params = { [key in Keys]: Value } & Record function process(route: string, params: Record | undefined, keys: string[]): string { if (!params) return route var query: string[] = []; for (var param in params) if (Object.prototype.hasOwnProperty.call(params, param)) { if (keys.indexOf(param) === -1) { - query.push(param + "=" + encodeURIComponent(params[param].toString())); + if (Array.isArray(params[param])) { + for (var value of params[param] as (string | number)[]) { + query.push(param + "[]=" + encodeURIComponent(value.toString())); + } + } else { + query.push(param + "=" + encodeURIComponent(params[param].toString())); + } } } return query.length ? route + "?" + query.join("&") : route; diff --git a/spec/js_rails_routes/language/javascript_spec.rb b/spec/js_rails_routes/language/javascript_spec.rb index 5ee4dd3..f5d08b9 100644 --- a/spec/js_rails_routes/language/javascript_spec.rb +++ b/spec/js_rails_routes/language/javascript_spec.rb @@ -14,7 +14,13 @@ var query = []; for (var param in params) if (Object.prototype.hasOwnProperty.call(params, param)) { if (keys.indexOf(param) === -1) { - query.push(param + "=" + encodeURIComponent(params[param])); + if (Array.isArray(params[param])) { + for (var value of params[param]) { + query.push(param + "[]=" + encodeURIComponent(value)); + } + } else { + query.push(param + "=" + encodeURIComponent(params[param])); + } } } return query.length ? route + "?" + query.join("&") : route; diff --git a/spec/js_rails_routes/language/typescript_spec.rb b/spec/js_rails_routes/language/typescript_spec.rb index 0155050..e8ee088 100644 --- a/spec/js_rails_routes/language/typescript_spec.rb +++ b/spec/js_rails_routes/language/typescript_spec.rb @@ -10,14 +10,20 @@ it 'returns a typescript function' do expect(subject).to eq <<~TYPESCRIPT - type Value = string | number + type Value = string | number | (string | number)[]; type Params = { [key in Keys]: Value } & Record function process(route: string, params: Record | undefined, keys: string[]): string { if (!params) return route var query: string[] = []; for (var param in params) if (Object.prototype.hasOwnProperty.call(params, param)) { if (keys.indexOf(param) === -1) { - query.push(param + "=" + encodeURIComponent(params[param].toString())); + if (Array.isArray(params[param])) { + for (var value of params[param] as (string | number)[]) { + query.push(param + "[]=" + encodeURIComponent(value.toString())); + } + } else { + query.push(param + "=" + encodeURIComponent(params[param].toString())); + } } } return query.length ? route + "?" + query.join("&") : route;