prefix: string
handler?: (v: string) => string | number
multiple?: boolean
+ isBoolean?: boolean
}
}
type ParseQueryStringFilterResult = {
- [key: string]: string | number | (string | number)[]
+ [key: string]: string | number | boolean | (string | number | boolean)[]
}
@Injectable()
return newParams
}
+ addArrayParams (params: HttpParams, name: string, values: (string | number)[]) {
+ for (const v of values) {
+ params = params.append(name, v)
+ }
+
+ return params
+ }
+
addObjectParams (params: HttpParams, object: { [ name: string ]: any }) {
for (const name of Object.keys(object)) {
const value = object[name]
if (value === undefined || value === null) continue
- if (Array.isArray(value) && value.length !== 0) {
- for (const v of value) params = params.append(name, v)
+ if (Array.isArray(value)) {
+ params = this.addArrayParams(params, name, value)
} else {
params = params.append(name, value)
}
const matchedTokens = tokens.filter(t => t.startsWith(prefix))
.map(t => t.slice(prefix.length)) // Keep the value filter
- .map(t => t.replace(/^"|"$/g, ''))
+ .map(t => t.replace(/^"|"$/g, '')) // Remove ""
.map(t => {
if (prefixObj.handler) return prefixObj.handler(t)
+ if (prefixObj.isBoolean) {
+ if (t === 'true') return true
+ if (t === 'false') return false
+
+ return undefined
+ }
+
return t
})
- .filter(t => !!t || t === 0)
+ .filter(t => t !== null && t !== undefined)
if (matchedTokens.length === 0) continue