Skip to content

Commit 88a50cc

Browse files
committed
Merge branch 'main' into dev/reacti18next
2 parents 37507a0 + 7e9bb8f commit 88a50cc

File tree

5 files changed

+45
-11
lines changed

5 files changed

+45
-11
lines changed
5.21 KB
Loading

docs/search-ui-react.staticfilteroptionconfig.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ The configuration data for a field value static filter option.
99
**Signature:**
1010

1111
```typescript
12-
type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'matcher' | 'value'> & {
12+
type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'value'> & {
1313
value: string | number | boolean;
1414
};
1515
```

etc/search-ui-react.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -879,7 +879,7 @@ export interface StandardSectionProps<T = DefaultRawDataType> extends SectionPro
879879
}
880880

881881
// @public
882-
export type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'matcher' | 'value'> & {
882+
export type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'value'> & {
883883
value: string | number | boolean;
884884
};
885885

src/components/StaticFilters.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export interface StaticFiltersCssClasses extends FilterGroupCssClasses {
1717
*
1818
* @public
1919
*/
20-
export type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'matcher' | 'value'> & {
20+
export type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'value'> & {
2121
/** The value used to perform filtering. */
2222
value: string | number | boolean
2323
};

tests/components/StaticFilters.test.tsx

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
import React from 'react';
2-
import { render, screen } from '@testing-library/react';
3-
import { SearchActions, State } from '@yext/search-headless-react';
4-
import { mockAnswersHooks, spyOnActions } from '../__utils__/mocks';
5-
import { FilterOptionConfig } from '../../src/components/Filters';
2+
import {render, screen} from '@testing-library/react';
3+
import {Matcher, SearchActions, State} from '@yext/search-headless-react';
4+
import {mockAnswersHooks, spyOnActions} from '../__utils__/mocks';
5+
import {FilterOptionConfig} from '../../src/components/Filters';
66
import userEvent from '@testing-library/user-event';
7-
import { StaticFilters } from '../../src/components';
8-
import { staticFilters, staticFiltersProps } from '../__fixtures__/data/filters';
9-
import { testSSR } from '../ssr/utils';
7+
import {StaticFilters, StaticFiltersProps} from '../../src/components';
8+
import {staticFilters, staticFiltersProps} from '../__fixtures__/data/filters';
9+
import {testSSR} from '../ssr/utils';
10+
11+
const hoursFilterProps: StaticFiltersProps = {
12+
fieldId: 'builtin.hours',
13+
title: 'Open Now',
14+
filterOptions: [
15+
{
16+
value: 'now',
17+
matcher: Matcher.OpenAt
18+
}
19+
]
20+
};
1021

1122
const mockedState: Partial<State> = {
1223
filters: {
@@ -58,6 +69,15 @@ describe('Static Filters', () => {
5869
expect(screen.getByText('Clifford')).toBeDefined();
5970
});
6071

72+
it('Properly renders static filters with Matchers other than Equals', () => {
73+
render(<StaticFilters {...hoursFilterProps} />);
74+
75+
expect(screen.getByRole('button', { name: 'Open Now' })).toBeDefined();
76+
expect(screen.queryByRole('textbox')).toBeNull();
77+
78+
expect(screen.getByText('Open Now')).toBeDefined();
79+
});
80+
6181
it('Clicking an unselected filter option checkbox selects it', async () => {
6282
const actions = spyOnActions();
6383
render(<StaticFilters {...staticFiltersProps} />);
@@ -72,6 +92,20 @@ describe('Static Filters', () => {
7292
expectFilterOptionSet(actions, staticFiltersProps.fieldId, martyFilter, true);
7393
});
7494

95+
it('Clicking an unselected openAt filter option checkbox selects it', async () => {
96+
const actions = spyOnActions();
97+
render(<StaticFilters {...hoursFilterProps} />);
98+
99+
const hoursFilter = hoursFilterProps.filterOptions[0];
100+
const hoursCheckbox: HTMLInputElement = screen.getByLabelText(
101+
hoursFilter.displayName ?? hoursFilter.value.toString()
102+
);
103+
expect(hoursCheckbox.checked).toBeFalsy();
104+
105+
await userEvent.click(hoursCheckbox);
106+
expectFilterOptionSet(actions, hoursFilterProps.fieldId, hoursFilter, true);
107+
});
108+
75109
it('Clicking a selected filter option checkbox unselects it', async () => {
76110
const actions = spyOnActions();
77111
render(<StaticFilters {...staticFiltersProps} />);
@@ -168,7 +202,7 @@ function expectFilterOptionSet(
168202
filter: {
169203
kind: 'fieldValue',
170204
fieldId,
171-
matcher: '$eq',
205+
matcher: filterOption.matcher ?? '$eq',
172206
value: filterOption.value
173207
},
174208
displayName: filterOption.displayName ?? filterOption.value,

0 commit comments

Comments
 (0)