{ "version": 3, "sources": ["src/app/shared/_services/filter-utilities.service.ts"], "sourcesContent": ["import {inject, Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Params, Router} from '@angular/router';\nimport {SortField, SortOptions} from 'src/app/_models/metadata/series-filter';\nimport {MetadataService} from \"../../_services/metadata.service\";\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\nimport {FilterStatement} from \"../../_models/metadata/v2/filter-statement\";\nimport {FilterCombination} from \"../../_models/metadata/v2/filter-combination\";\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\nimport { HttpClient } from \"@angular/common/http\";\nimport {TextResonse} from \"../../_types/text-response\";\nimport {environment} from \"../../../environments/environment\";\nimport {map, tap} from \"rxjs/operators\";\nimport {of, switchMap} from \"rxjs\";\nimport {Location} from \"@angular/common\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterUtilitiesService {\n\n private readonly location = inject(Location);\n private readonly router = inject(Router);\n private readonly metadataService = inject(MetadataService);\n private readonly http = inject(HttpClient);\n\n private apiUrl = environment.apiUrl;\n\n encodeFilter(filter: SeriesFilterV2 | undefined) {\n return this.http.post(this.apiUrl + 'filter/encode', filter, TextResonse);\n }\n\n decodeFilter(encodedFilter: string) {\n return this.http.post(this.apiUrl + 'filter/decode', {encodedFilter}).pipe(map(filter => {\n if (filter == null) {\n filter = this.metadataService.createDefaultFilterDto();\n filter.statements.push(this.createSeriesV2DefaultStatement());\n }\n\n return filter;\n }))\n }\n\n updateUrlFromFilter(filter: SeriesFilterV2 | undefined) {\n return this.encodeFilter(filter).pipe(tap(encodedFilter => {\n window.history.replaceState(window.location.href, '', window.location.href.split('?')[0]+ '?' + encodedFilter);\n }));\n }\n\n filterPresetsFromUrl(snapshot: ActivatedRouteSnapshot) {\n const filter = this.metadataService.createDefaultFilterDto();\n filter.statements.push(this.createSeriesV2DefaultStatement());\n if (!window.location.href.includes('?')) return of(filter);\n\n return this.decodeFilter(window.location.href.split('?')[1]);\n }\n\n /**\n * Applies and redirects to the passed page with the filter encoded\n * @param page\n * @param filter\n * @param comparison\n * @param value\n */\n applyFilter(page: Array, filter: FilterField, comparison: FilterComparison, value: string) {\n const dto = this.createSeriesV2Filter();\n dto.statements.push(this.metadataService.createDefaultFilterStatement(filter, comparison, value + ''));\n\n return this.encodeFilter(dto).pipe(switchMap(encodedFilter => {\n return this.router.navigateByUrl(page.join('/') + '?' + encodedFilter);\n }));\n }\n\n applyFilterWithParams(page: Array, filter: SeriesFilterV2, extraParams: Params) {\n return this.encodeFilter(filter).pipe(switchMap(encodedFilter => {\n let url = page.join('/') + '?' + encodedFilter;\n url += Object.keys(extraParams).map(k => `&${k}=${extraParams[k]}`).join('');\n\n return this.router.navigateByUrl(url, extraParams);\n }));\n }\n\n createSeriesV2Filter(): SeriesFilterV2 {\n return {\n combination: FilterCombination.And,\n statements: [],\n limitTo: 0,\n sortOptions: {\n isAscending: true,\n sortField: SortField.SortName\n },\n };\n }\n\n createSeriesV2DefaultStatement(): FilterStatement {\n return {\n comparison: FilterComparison.Equal,\n value: '',\n field: FilterField.SeriesName\n }\n }\n}\n"], "mappings": "yPAoBA,IAAaA,GAAsB,IAAA,CAA7B,MAAOA,CAAsB,CAHnCC,aAAA,CAKmB,KAAAC,SAAWC,EAAOC,CAAQ,EAC1B,KAAAC,OAASF,EAAOG,CAAM,EACtB,KAAAC,gBAAkBJ,EAAOK,CAAe,EACxC,KAAAC,KAAON,EAAOO,CAAU,EAEjC,KAAAC,OAASC,EAAYD,OAE7BE,aAAaC,EAAkC,CAC7C,OAAO,KAAKL,KAAKM,KAAa,KAAKJ,OAAS,gBAAiBG,EAAQE,CAAW,CAClF,CAEAC,aAAaC,EAAqB,CAChC,OAAO,KAAKT,KAAKM,KAAqB,KAAKJ,OAAS,gBAAiB,CAACO,cAAAA,CAAa,CAAC,EAAEC,KAAKC,EAAIN,IACzFA,GAAU,OACZA,EAAS,KAAKP,gBAAgBc,uBAAsB,EACpDP,EAAOQ,WAAWC,KAAK,KAAKC,+BAA8B,CAAE,GAGvDV,EACR,CAAC,CACJ,CAEAW,oBAAoBX,EAAkC,CACpD,OAAO,KAAKD,aAAaC,CAAM,EAAEK,KAAKO,EAAIR,GAAgB,CACxDS,OAAOC,QAAQC,aAAaF,OAAOzB,SAAS4B,KAAM,GAAIH,OAAOzB,SAAS4B,KAAKC,MAAM,GAAG,EAAE,CAAC,EAAG,IAAMb,CAAa,CAC/G,CAAC,CAAC,CACJ,CAEAc,qBAAqBC,EAAgC,CACnD,IAAMnB,EAAS,KAAKP,gBAAgBc,uBAAsB,EAE1D,OADAP,EAAOQ,WAAWC,KAAK,KAAKC,+BAA8B,CAAE,EACvDG,OAAOzB,SAAS4B,KAAKI,SAAS,GAAG,EAE/B,KAAKjB,aAAaU,OAAOzB,SAAS4B,KAAKC,MAAM,GAAG,EAAE,CAAC,CAAC,EAFXI,EAAGrB,CAAM,CAG3D,CASAsB,YAAYC,EAAkBvB,EAAqBwB,EAA8BC,EAAa,CAC5F,IAAMC,EAAM,KAAKC,qBAAoB,EACrCD,OAAAA,EAAIlB,WAAWC,KAAK,KAAKhB,gBAAgBmC,6BAA6B5B,EAAQwB,EAAYC,EAAQ,EAAE,CAAC,EAE9F,KAAK1B,aAAa2B,CAAG,EAAErB,KAAKwB,EAAUzB,GACpC,KAAKb,OAAOuC,cAAcP,EAAKQ,KAAK,GAAG,EAAI,IAAM3B,CAAa,CACtE,CAAC,CACJ,CAEA4B,sBAAsBT,EAAkBvB,EAAwBiC,EAAmB,CACjF,OAAO,KAAKlC,aAAaC,CAAM,EAAEK,KAAKwB,EAAUzB,GAAgB,CAC9D,IAAI8B,EAAMX,EAAKQ,KAAK,GAAG,EAAI,IAAM3B,EACjC8B,OAAAA,GAAOC,OAAOC,KAAKH,CAAW,EAAE3B,IAAI+B,GAAK,IAAIA,CAAC,IAAIJ,EAAYI,CAAC,CAAC,EAAE,EAAEN,KAAK,EAAE,EAEpE,KAAKxC,OAAOuC,cAAcI,EAAKD,CAAW,CACnD,CAAC,CAAC,CACJ,CAEAN,sBAAoB,CAChB,MAAO,CACHW,YAAaC,EAAkBC,IAC/BhC,WAAY,CAAA,EACZiC,QAAS,EACTC,YAAa,CACTC,YAAa,GACbC,UAAWC,EAAUC,UAGjC,CAEApC,gCAA8B,CAC1B,MAAO,CACHc,WAAYuB,EAAiBC,MAC7BvB,MAAO,GACPwB,MAAOC,EAAYC,WAE3B,iDAjFWjE,EAAsB,CAAA,iCAAtBA,EAAsBkE,QAAtBlE,EAAsBmE,UAAAC,WAFnB,MAAM,CAAA,CAAA,SAETpE,CAAsB,GAAA", "names": ["FilterUtilitiesService", "constructor", "location", "inject", "Location", "router", "Router", "metadataService", "MetadataService", "http", "HttpClient", "apiUrl", "environment", "encodeFilter", "filter", "post", "TextResonse", "decodeFilter", "encodedFilter", "pipe", "map", "createDefaultFilterDto", "statements", "push", "createSeriesV2DefaultStatement", "updateUrlFromFilter", "tap", "window", "history", "replaceState", "href", "split", "filterPresetsFromUrl", "snapshot", "includes", "of", "applyFilter", "page", "comparison", "value", "dto", "createSeriesV2Filter", "createDefaultFilterStatement", "switchMap", "navigateByUrl", "join", "applyFilterWithParams", "extraParams", "url", "Object", "keys", "k", "combination", "FilterCombination", "And", "limitTo", "sortOptions", "isAscending", "sortField", "SortField", "SortName", "FilterComparison", "Equal", "field", "FilterField", "SeriesName", "factory", "\u0275fac", "providedIn"] }