import { Injectable } from '@angular/core'; import { QueryStringService, } from './../query-string/query-string.service'; import { convertStringToPrimitive, } from './../../functions/index'; @Injectable() export class ReplacePropsFromQueryStringService { constructor( private _queryStringService: QueryStringService, ) {} public replacePropsWithMatchingQueryStringProps( initialObject: T, ): T { if (!initialObject) { return initialObject; } return Object.keys(initialObject).reduce((object, key) => { const originalValue = initialObject[key]; const typeofOriginalValue = typeof originalValue; const queryStringKey = this._queryStringService .convertPropertyNameToQueryStringKey(key); const queryStringValue = typeofOriginalValue !== 'object' ? this._queryStringService.getQueryStringKey(queryStringKey) : this.replacePropsWithMatchingQueryStringProps( originalValue, ); const convertedQueryStringValue = convertStringToPrimitive( queryStringValue, typeofOriginalValue, ); object[key] = convertedQueryStringValue || originalValue; return object; }, {} as T); } }