diff --git a/plugins/catalog/src/api/CatalogClient.test.ts b/plugins/catalog/src/api/CatalogClient.test.ts index 027fd41069..d626c76b30 100644 --- a/plugins/catalog/src/api/CatalogClient.test.ts +++ b/plugins/catalog/src/api/CatalogClient.test.ts @@ -21,8 +21,12 @@ describe('CatalogClient', () => { it('builds entity search filters properly', async () => { mockFetch.mockResponse('[]'); const client = new CatalogClient({ apiOrigin: '', basePath: '' }); - const entities = await client.getEntities({ a: '1', ö: '=' }); + const entities = await client.getEntities({ + a: '1', + b: ['2', '3'], + ö: '=', + }); expect(entities).toEqual([]); - expect(mockFetch).toBeCalledWith('/entities?a=1&%C3%B6=%3D'); + expect(mockFetch).toBeCalledWith('/entities?a=1&b=2&b=3&%C3%B6=%3D'); }); }); diff --git a/plugins/catalog/src/api/CatalogClient.ts b/plugins/catalog/src/api/CatalogClient.ts index 4d7ab09408..d8add18f68 100644 --- a/plugins/catalog/src/api/CatalogClient.ts +++ b/plugins/catalog/src/api/CatalogClient.ts @@ -76,7 +76,9 @@ export class CatalogClient implements CatalogApi { return await this.getOptional(`/locations/${id}`); } - async getEntities(filter?: Record): Promise { + async getEntities( + filter?: Record, + ): Promise { const cachedValue = this.cache.get( `get:${JSON.stringify(filter)}`, ); @@ -84,7 +86,17 @@ export class CatalogClient implements CatalogApi { let path = `/entities`; if (filter) { - path += `?${new URLSearchParams(filter).toString()}`; + const params = new URLSearchParams(); + for (const [key, value] of Object.entries(filter)) { + if (Array.isArray(value)) { + for (const v of value) { + params.append(key, v); + } + } else { + params.append(key, value); + } + } + path += `?${params.toString()}`; } return await this.getRequired(path); diff --git a/plugins/catalog/src/api/types.ts b/plugins/catalog/src/api/types.ts index 8136e4104a..3ac8a5d103 100644 --- a/plugins/catalog/src/api/types.ts +++ b/plugins/catalog/src/api/types.ts @@ -34,7 +34,7 @@ export interface CatalogApi { getEntityByName( compoundName: EntityCompoundName, ): Promise; - getEntities(filter?: Record): Promise; + getEntities(filter?: Record): Promise; addLocation(type: string, target: string): Promise; getLocationByEntity(entity: Entity): Promise; removeEntityByUid(uid: string): Promise;