mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-12-16 03:26:50 +01:00
Refactor query param handling to service
This commit is contained in:
parent
584082a1df
commit
3e8bff03e7
11 changed files with 147 additions and 84 deletions
101
src-ui/src/app/services/query-params.service.ts
Normal file
101
src-ui/src/app/services/query-params.service.ts
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
import { Injectable } from '@angular/core'
|
||||
import {
|
||||
ActivatedRoute,
|
||||
convertToParamMap,
|
||||
ParamMap,
|
||||
Params,
|
||||
Router,
|
||||
} from '@angular/router'
|
||||
import { FilterRule } from '../data/filter-rule'
|
||||
import { FILTER_RULE_TYPES } from '../data/filter-rule-type'
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class QueryParamsService {
|
||||
constructor(private router: Router, private route: ActivatedRoute) {}
|
||||
|
||||
private filterParams: Params
|
||||
private _filterRules: FilterRule[]
|
||||
|
||||
set filterRules(filterRules: FilterRule[]) {
|
||||
this._filterRules = filterRules
|
||||
this.filterParams = this.filterRulesToQueryParams(filterRules)
|
||||
}
|
||||
|
||||
get filterRules(): FilterRule[] {
|
||||
return this._filterRules
|
||||
}
|
||||
|
||||
set params(params: any) {
|
||||
this.filterParams = params
|
||||
this._filterRules = this.filterRulesFromQueryParams(
|
||||
params.keys ? params : convertToParamMap(params) // ParamMap
|
||||
)
|
||||
}
|
||||
|
||||
get params(): Params {
|
||||
return {
|
||||
...this.filterParams,
|
||||
}
|
||||
}
|
||||
|
||||
private filterRulesToQueryParams(filterRules: FilterRule[]): Object {
|
||||
if (filterRules) {
|
||||
let params = {}
|
||||
for (let rule of filterRules) {
|
||||
let ruleType = FILTER_RULE_TYPES.find((t) => t.id == rule.rule_type)
|
||||
if (ruleType.multi) {
|
||||
params[ruleType.filtervar] = params[ruleType.filtervar]
|
||||
? params[ruleType.filtervar] + ',' + rule.value
|
||||
: rule.value
|
||||
} else if (ruleType.isnull_filtervar && rule.value == null) {
|
||||
params[ruleType.isnull_filtervar] = true
|
||||
} else {
|
||||
params[ruleType.filtervar] = rule.value
|
||||
}
|
||||
}
|
||||
return params
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
private filterRulesFromQueryParams(queryParams: ParamMap) {
|
||||
const allFilterRuleQueryParams: string[] = FILTER_RULE_TYPES.map(
|
||||
(rt) => rt.filtervar
|
||||
)
|
||||
|
||||
// transform query params to filter rules
|
||||
let filterRulesFromQueryParams: FilterRule[] = []
|
||||
allFilterRuleQueryParams
|
||||
.filter((frqp) => queryParams.has(frqp))
|
||||
.forEach((filterQueryParamName) => {
|
||||
const filterQueryParamValues: string[] = queryParams
|
||||
.get(filterQueryParamName)
|
||||
.split(',')
|
||||
|
||||
filterRulesFromQueryParams = filterRulesFromQueryParams.concat(
|
||||
// map all values to filter rules
|
||||
filterQueryParamValues.map((val) => {
|
||||
return {
|
||||
rule_type: FILTER_RULE_TYPES.find(
|
||||
(rt) => rt.filtervar == filterQueryParamName
|
||||
).id,
|
||||
value: val,
|
||||
}
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
return filterRulesFromQueryParams
|
||||
}
|
||||
|
||||
loadFilterRules(filterRules: FilterRule[]) {
|
||||
this.filterRules = filterRules
|
||||
this.router.navigate(['/documents'], {
|
||||
relativeTo: this.route,
|
||||
queryParams: this.params,
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue