Revert "fix(router): make routerLinkActive work with query params which contain arrays (#22666)" (#33861)

This reverts commit b30bb8dd91.

Reason: breaks internal g3 project.

PR Close #33861
This commit is contained in:
Alex Rickabaugh 2019-11-15 12:45:37 -08:00
parent 9d21065e25
commit b90aac0d43
4 changed files with 6 additions and 48 deletions

View File

@ -25,7 +25,7 @@ export const PRIMARY_OUTLET = 'primary';
* @publicApi * @publicApi
*/ */
export type Params = { export type Params = {
[key: string]: any; [key: string]: any
}; };
/** /**

View File

@ -7,7 +7,7 @@
*/ */
import {PRIMARY_OUTLET, ParamMap, Params, convertToParamMap} from './shared'; import {PRIMARY_OUTLET, ParamMap, Params, convertToParamMap} from './shared';
import {equalArraysOrString, forEach, shallowEqual} from './utils/collection'; import {forEach, shallowEqual} from './utils/collection';
export function createEmptyUrlTree() { export function createEmptyUrlTree() {
return new UrlTree(new UrlSegmentGroup([], {}), {}, null); return new UrlTree(new UrlSegmentGroup([], {}), {}, null);
@ -41,7 +41,7 @@ function equalSegmentGroups(container: UrlSegmentGroup, containee: UrlSegmentGro
function containsQueryParams(container: Params, containee: Params): boolean { function containsQueryParams(container: Params, containee: Params): boolean {
// TODO: This does not handle array params correctly. // TODO: This does not handle array params correctly.
return Object.keys(containee).length <= Object.keys(container).length && return Object.keys(containee).length <= Object.keys(container).length &&
Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key])); Object.keys(containee).every(key => containee[key] === container[key]);
} }
function containsSegmentGroup(container: UrlSegmentGroup, containee: UrlSegmentGroup): boolean { function containsSegmentGroup(container: UrlSegmentGroup, containee: UrlSegmentGroup): boolean {

View File

@ -10,7 +10,7 @@ import {NgModuleFactory, ɵisObservable as isObservable, ɵisPromise as isPromis
import {Observable, from, of } from 'rxjs'; import {Observable, from, of } from 'rxjs';
import {concatAll, last as lastValue, map} from 'rxjs/operators'; import {concatAll, last as lastValue, map} from 'rxjs/operators';
import {PRIMARY_OUTLET, Params} from '../shared'; import {PRIMARY_OUTLET} from '../shared';
export function shallowEqualArrays(a: any[], b: any[]): boolean { export function shallowEqualArrays(a: any[], b: any[]): boolean {
if (a.length !== b.length) return false; if (a.length !== b.length) return false;
@ -20,7 +20,7 @@ export function shallowEqualArrays(a: any[], b: any[]): boolean {
return true; return true;
} }
export function shallowEqual(a: Params, b: Params): boolean { export function shallowEqual(a: {[x: string]: any}, b: {[x: string]: any}): boolean {
// Casting Object.keys return values to include `undefined` as there are some cases // Casting Object.keys return values to include `undefined` as there are some cases
// in IE 11 where this can happen. Cannot provide a test because the behavior only // in IE 11 where this can happen. Cannot provide a test because the behavior only
// exists in certain circumstances in IE 11, therefore doing this cast ensures the // exists in certain circumstances in IE 11, therefore doing this cast ensures the
@ -33,25 +33,13 @@ export function shallowEqual(a: Params, b: Params): boolean {
let key: string; let key: string;
for (let i = 0; i < k1.length; i++) { for (let i = 0; i < k1.length; i++) {
key = k1[i]; key = k1[i];
if (!equalArraysOrString(a[key], b[key])) { if (a[key] !== b[key]) {
return false; return false;
} }
} }
return true; return true;
} }
/**
* Test equality for arrays of strings or a string.
*/
export function equalArraysOrString(a: string | string[], b: string | string[]) {
if (Array.isArray(a) && Array.isArray(b)) {
if (a.length != b.length) return false;
return a.every(aItem => b.indexOf(aItem) > -1);
} else {
return a === b;
}
}
/** /**
* Flattens single-level nested arrays. * Flattens single-level nested arrays.
*/ */

View File

@ -41,24 +41,6 @@ describe('UrlTree', () => {
expect(containsTree(t1, t2, true)).toBe(true); expect(containsTree(t1, t2, true)).toBe(true);
}); });
it('should return true when queryParams are the same but with diffrent order', () => {
const t1 = serializer.parse('/one/two?test=1&page=5');
const t2 = serializer.parse('/one/two?page=5&test=1');
expect(containsTree(t1, t2, true)).toBe(true);
});
it('should return true when queryParams contains array params that are the same', () => {
const t1 = serializer.parse('/one/two?test=a&test=b&pages=5&pages=6');
const t2 = serializer.parse('/one/two?test=a&test=b&pages=5&pages=6');
expect(containsTree(t1, t2, true)).toBe(true);
});
it('should return false when queryParams contains array params but are not the same', () => {
const t1 = serializer.parse('/one/two?test=a&test=b&pages=5&pages=6');
const t2 = serializer.parse('/one/two?test=a&test=b&pages=5&pages=7');
expect(containsTree(t1, t2, false)).toBe(false);
});
it('should return false when queryParams are not the same', () => { it('should return false when queryParams are not the same', () => {
const t1 = serializer.parse('/one/two?test=1&page=5'); const t1 = serializer.parse('/one/two?test=1&page=5');
const t2 = serializer.parse('/one/two?test=1'); const t2 = serializer.parse('/one/two?test=1');
@ -151,18 +133,6 @@ describe('UrlTree', () => {
expect(containsTree(t1, t2, false)).toBe(false); expect(containsTree(t1, t2, false)).toBe(false);
}); });
it('should return true when container has array params but containee does not have', () => {
const t1 = serializer.parse('/one/two?test=a&test=b&pages=5&pages=6');
const t2 = serializer.parse('/one/two?test=a&test=b');
expect(containsTree(t1, t2, false)).toBe(true);
});
it('should return false when containee has array params but container does not have', () => {
const t1 = serializer.parse('/one/two?test=a&test=b');
const t2 = serializer.parse('/one/two?test=a&test=b&pages=5&pages=6');
expect(containsTree(t1, t2, false)).toBe(false);
});
it('should return false when containee has different queryParams', () => { it('should return false when containee has different queryParams', () => {
const t1 = serializer.parse('/one/two?page=5'); const t1 = serializer.parse('/one/two?page=5');
const t2 = serializer.parse('/one/two?test=1'); const t2 = serializer.parse('/one/two?test=1');