From 27cb093b3c71fe276e4352d0a5c5bfb78a5c1dc3 Mon Sep 17 00:00:00 2001 From: shmaram Date: Thu, 25 Jan 2024 08:22:21 +0200 Subject: [PATCH] Rename config functions + update README.md Signed-off-by: shmaram --- plugins/home/README.md | 4 + plugins/home/src/api/config.test.ts | 100 +++++++++--------- plugins/home/src/api/config.ts | 9 +- .../VisitedByType/Content.tsx | 6 +- 4 files changed, 63 insertions(+), 56 deletions(-) diff --git a/plugins/home/README.md b/plugins/home/README.md index c84bae684f..fdc5ce833b 100644 --- a/plugins/home/README.md +++ b/plugins/home/README.md @@ -353,6 +353,10 @@ home: value: ``` +Filters that are not defined according to the docs will be ignored. + +In order to validate the config you can use `backstage/cli config:check` + ## Contributing ### Homepage Components diff --git a/plugins/home/src/api/config.test.ts b/plugins/home/src/api/config.test.ts index 62ca09dd82..c2b715ec08 100644 --- a/plugins/home/src/api/config.test.ts +++ b/plugins/home/src/api/config.test.ts @@ -14,71 +14,75 @@ * limitations under the License. */ -import { readFilterByConfig, readFilterByConfigs } from './config'; +import { readFilterConfig, createFilterByQueryParamFromConfig } from './config'; import { MockConfigApi } from '@backstage/test-utils'; describe('config', () => { - describe('readFilterByConfig', () => { + describe('readFilterConfig', () => { it('returns filter data', async () => { - const mockConfig = new MockConfigApi( - { - field: 'pathname', - operator: '==', - value: '3' - }); - const res = readFilterByConfig(mockConfig) + const mockConfig = new MockConfigApi({ + field: 'pathname', + operator: '==', + value: '3', + }); + const res = readFilterConfig(mockConfig); expect(res).toEqual({ field: 'pathname', operator: '==', - value: '3' - }) + value: '3', + }); }); it('throws an error for invalid filter', async () => { - const mockConfig = new MockConfigApi( - { - myField: 'pathname', - operator: '==', - value: '3' - }); - expect(() => readFilterByConfig(mockConfig)).toThrow('Invalid config, Error: Missing required config value at \'field\'') + const mockConfig = new MockConfigApi({ + myField: 'pathname', + operator: '==', + value: '3', + }); + expect(() => readFilterConfig(mockConfig)).toThrow( + "Invalid config, Error: Missing required config value at 'field'", + ); }); }); - describe('readFilterByConfigs', () => { + describe('createFilterByQueryParamFromConfig', () => { it('returns filter data', async () => { - const mockConfig1 = new MockConfigApi( - { - field: 'id', - operator: '==', - value: '3' - }); - const mockConfig2 = new MockConfigApi( - { - field: 'pathname', - operator: '==', - value: 'path' - }); - const res = readFilterByConfigs([mockConfig1, mockConfig2]) - expect(res).toEqual([{"field": "id", "operator": "==", "value": "3"}, {"field": "pathname", "operator": "==", "value": "path"}]) + const mockConfig1 = new MockConfigApi({ + field: 'id', + operator: '==', + value: '3', + }); + const mockConfig2 = new MockConfigApi({ + field: 'pathname', + operator: '==', + value: 'path', + }); + const res = createFilterByQueryParamFromConfig([ + mockConfig1, + mockConfig2, + ]); + expect(res).toEqual([ + { field: 'id', operator: '==', value: '3' }, + { field: 'pathname', operator: '==', value: 'path' }, + ]); }); it('return undefined for invalid filter', async () => { - const mockConfig1 = new MockConfigApi( - { - field: 'id', - operator: '==', - value: '3' - }); - const mockConfig2 = new MockConfigApi( - { - myField: 'pathname', - operator: '==', - value: 'path' - }); - const res = readFilterByConfigs([mockConfig1, mockConfig2]) - expect(res).toEqual(undefined) + const mockConfig1 = new MockConfigApi({ + field: 'id', + operator: '==', + value: '3', + }); + const mockConfig2 = new MockConfigApi({ + myField: 'pathname', + operator: '==', + value: 'path', + }); + const res = createFilterByQueryParamFromConfig([ + mockConfig1, + mockConfig2, + ]); + expect(res).toEqual(undefined); }); }); }); - diff --git a/plugins/home/src/api/config.ts b/plugins/home/src/api/config.ts index 6604084244..a8af29fc9e 100644 --- a/plugins/home/src/api/config.ts +++ b/plugins/home/src/api/config.ts @@ -24,7 +24,7 @@ import { Config } from '@backstage/config'; * * @public */ -export function readFilterByConfig(config: Config): { +export function readFilterConfig(config: Config): { field: keyof Visit; operator: '<' | '<=' | '==' | '!=' | '>' | '>=' | 'contains'; value: string | number; @@ -53,13 +53,12 @@ export function readFilterByConfig(config: Config): { * * @public */ -export function readFilterByConfigs( +export function createFilterByQueryParamFromConfig( configs: Config[], ): VisitsApiQueryParams['filterBy'] | undefined { try { - return configs.map(readFilterByConfig); - } - catch { + return configs.map(readFilterConfig); + } catch { return undefined; } } diff --git a/plugins/home/src/homePageComponents/VisitedByType/Content.tsx b/plugins/home/src/homePageComponents/VisitedByType/Content.tsx index 6fdc313c63..6c9d889d72 100644 --- a/plugins/home/src/homePageComponents/VisitedByType/Content.tsx +++ b/plugins/home/src/homePageComponents/VisitedByType/Content.tsx @@ -15,7 +15,7 @@ */ import React, { useEffect } from 'react'; -import { readFilterByConfigs } from '../../api/config'; +import { createFilterByQueryParamFromConfig } from '../../api/config'; import { VisitedByType } from './VisitedByType'; import { Visit, visitsApiRef } from '../../api'; import { ContextValueOnly, useContext } from './Context'; @@ -66,7 +66,7 @@ export const Content = ({ const visitsApi = useApi(visitsApiRef); const { loading: reqLoading } = useAsync(async () => { if (!visits && !loading && kind === 'recent') { - const filterBy = readFilterByConfigs( + const filterBy = createFilterByQueryParamFromConfig( config.getOptionalConfigArray('home.recentVisits.filterBy') ?? [], ); return await visitsApi @@ -78,7 +78,7 @@ export const Content = ({ .then(setVisits); } if (!visits && !loading && kind === 'top') { - const filterBy = readFilterByConfigs( + const filterBy = createFilterByQueryParamFromConfig( config.getOptionalConfigArray('home.topVisits.filterBy') ?? [], ); return await visitsApi