{"version":3,"file":"mosaic-design-infosec-components-external-object-hash-services.mjs","sources":["../../../libs/external/object-hash/services/src/lib/query-params/query-params.service.ts","../../../libs/external/object-hash/services/mosaic-design-infosec-components-external-object-hash-services.ts"],"sourcesContent":["import { Location } from '@angular/common';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, convertToParamMap, ParamMap, Params, Router, UrlSerializer } from '@angular/router';\nimport { BehaviorSubject, debounceTime, map, Observable, skip, Subject, takeUntil } from 'rxjs';\n\nimport { distinctUntilChangedByHash } from '@mosaic-design/infosec-components/external/object-hash/utils';\nimport { cloneDeep, excludeProperties, normalizeQueryParams } from '@mosaic-design/infosec-components/utils';\n\ninterface ChangedQueryParams {\n    params: Params;\n    replaceUrl?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class QueryParamsService implements OnDestroy {\n    private readonly _queryParams$: BehaviorSubject<Params>;\n    private changedQueryParams$: BehaviorSubject<ChangedQueryParams>;\n    private readonly destroyed$ = new Subject<void>();\n\n    constructor(\n        private router: Router,\n        private urlSerializer: UrlSerializer,\n        private location: Location,\n        private activatedRoute: ActivatedRoute\n    ) {\n        this._queryParams$ = new BehaviorSubject<Params>(this.getCurrentBrowserQueryParams());\n        this.changedQueryParams$ = new BehaviorSubject<ChangedQueryParams>({\n            params: this.getCurrentBrowserQueryParams()\n        });\n\n        this.activatedRoute.queryParams\n            .pipe(\n                // https://github.com/angular/angular/issues/12157\n                skip(1),\n                distinctUntilChangedByHash({\n                    unorderedArrays: true\n                }),\n                takeUntil(this.destroyed$)\n            )\n            .subscribe((params) => {\n                this._queryParams$.next(params);\n            });\n\n        this.changedQueryParams$.pipe(skip(1), debounceTime(300), takeUntil(this.destroyed$)).subscribe((input) => {\n            this.router.navigate([], {\n                queryParams: input.params,\n                replaceUrl: input.replaceUrl\n            });\n        });\n    }\n\n    static mapChangedQueryParams(\n        currentQueryParams: Params,\n        appendedQueryParams: Params,\n        replaceUrl?: boolean\n    ): ChangedQueryParams {\n        const queryParams = { ...currentQueryParams, ...appendedQueryParams };\n        const normalizedQueryParams = normalizeQueryParams(queryParams) ?? {};\n\n        return {\n            params: normalizedQueryParams,\n            replaceUrl: replaceUrl ?? QueryParamsService.needToReplaceUrl(currentQueryParams, normalizedQueryParams)\n        };\n    }\n\n    static needToReplaceUrl(currentQueryParams: Params, normalizedQueryParams: Params): boolean {\n        const currentQueryParamsKeys = Object.keys(currentQueryParams);\n        const normalizedQueryParamsKeys = Object.keys(normalizedQueryParams);\n\n        const diff = (first: string[], second: string[]): string[] => first.filter((item) => !second.includes(item));\n\n        return (\n            diff(currentQueryParamsKeys, normalizedQueryParamsKeys).length > 0 ||\n            diff(normalizedQueryParamsKeys, currentQueryParamsKeys).length > 0\n        );\n    }\n\n    getQueryParams<T extends Params>(): T {\n        return this._queryParams$.value as T;\n    }\n\n    getQueryParams$<T extends Params>(): Observable<T> {\n        return this._queryParams$.asObservable().pipe(\n            distinctUntilChangedByHash({\n                unorderedArrays: true\n            }),\n            map((params) => params as T)\n        );\n    }\n\n    getQueryParamMap(): ParamMap {\n        return convertToParamMap(this.getQueryParams());\n    }\n\n    getQueryParamMap$(): Observable<ParamMap> {\n        return this.getQueryParams$().pipe(map(convertToParamMap));\n    }\n\n    append(params: Params, replaceUrl?: boolean): void {\n        const changedQueryParams: ChangedQueryParams = QueryParamsService.mapChangedQueryParams(\n            this.getQueryParams(),\n            params,\n            replaceUrl\n        );\n\n        this._queryParams$.next(changedQueryParams.params);\n        this.changedQueryParams$.next(changedQueryParams);\n    }\n\n    clear(): void {\n        const queryParamsKeys = Object.keys(this.getQueryParams());\n        this.delete(...queryParamsKeys);\n    }\n\n    delete(...keys: string[]): void {\n        const clone = cloneDeep(this.getQueryParams());\n        const params = excludeProperties(clone, keys);\n\n        this._queryParams$.next(params);\n        this.changedQueryParams$.next({\n            params,\n            replaceUrl: true\n        });\n    }\n\n    ngOnDestroy(): void {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n    }\n\n    private getCurrentBrowserQueryParams(): Params {\n        const path = this.location.path();\n\n        return this.urlSerializer.parse(path).queryParams;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}