Rename config functions + update README.md
Signed-off-by: shmaram <shaharshmaram@gmail.com>
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user