Rename config functions + update README.md

Signed-off-by: shmaram <shaharshmaram@gmail.com>
This commit is contained in:
shmaram
2024-01-25 08:22:21 +02:00
parent 891fcd5482
commit 27cb093b3c
4 changed files with 63 additions and 56 deletions
+4
View File
@@ -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
+52 -48
View File
@@ -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);
});
});
});
+4 -5
View File
@@ -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;
}
}
@@ -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