Skip to content

Commit

Permalink
fix(toolbarFilter): rhcloud-25607 pf wrapper, expand checks (#1165)
Browse files Browse the repository at this point in the history
  • Loading branch information
cdcabrera committed Aug 24, 2023
1 parent 4395e4c commit 12e5248
Show file tree
Hide file tree
Showing 7 changed files with 395 additions and 4 deletions.
83 changes: 83 additions & 0 deletions src/components/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,9 @@
<dt><a href="#Toolbar.module_ToolbarFieldVariant">ToolbarFieldVariant</a></dt>
<dd><p>A standalone Variant select filter.</p>
</dd>
<dt><a href="#Toolbar.module_ToolbarFilter">ToolbarFilter</a></dt>
<dd><p>ToolbarFilter, wrapper component for Patternfly ToolbarFilter.</p>
</dd>
<dt><a href="#Components.module_Tooltip">Tooltip</a></dt>
<dd><p>PF tooltip wrapper.</p>
</dd>
Expand Down Expand Up @@ -7013,6 +7016,86 @@ Prop types.
Default props.

**Kind**: static property of [<code>ToolbarFieldVariant</code>](#Toolbar.module_ToolbarFieldVariant..ToolbarFieldVariant)
<a name="Toolbar.module_ToolbarFilter"></a>

## ToolbarFilter
ToolbarFilter, wrapper component for Patternfly ToolbarFilter.


* [ToolbarFilter](#Toolbar.module_ToolbarFilter)
* [~useToolbarContentContext()](#Toolbar.module_ToolbarFilter..useToolbarContentContext) ⇒ <code>Object</code>
* [~useToolbarContext()](#Toolbar.module_ToolbarFilter..useToolbarContext) ⇒ <code>Object</code>
* [~ToolbarFilter(props)](#Toolbar.module_ToolbarFilter..ToolbarFilter) ⇒ <code>React.ReactNode</code>
* [.propTypes](#Toolbar.module_ToolbarFilter..ToolbarFilter.propTypes) : <code>Object</code>
* [.defaultProps](#Toolbar.module_ToolbarFilter..ToolbarFilter.defaultProps) : <code>Object</code>

<a name="Toolbar.module_ToolbarFilter..useToolbarContentContext"></a>

### ToolbarFilter~useToolbarContentContext() ⇒ <code>Object</code>
Hook for ToolbarContentContext

**Kind**: inner method of [<code>ToolbarFilter</code>](#Toolbar.module_ToolbarFilter)
<a name="Toolbar.module_ToolbarFilter..useToolbarContext"></a>

### ToolbarFilter~useToolbarContext() ⇒ <code>Object</code>
Hook for ToolbarContext

**Kind**: inner method of [<code>ToolbarFilter</code>](#Toolbar.module_ToolbarFilter)
<a name="Toolbar.module_ToolbarFilter..ToolbarFilter"></a>

### ToolbarFilter~ToolbarFilter(props) ⇒ <code>React.ReactNode</code>
Converted PF ToolbarFilter replacement with conditional "firstElementChild".

**Kind**: inner method of [<code>ToolbarFilter</code>](#Toolbar.module_ToolbarFilter)
<table>
<thead>
<tr>
<th>Param</th><th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>props</td><td><code>object</code></td>
</tr><tr>
<td>props.categoryName</td><td><code>string</code> | <code>object</code></td>
</tr><tr>
<td>props.chipGroupCollapsedText</td><td><code>string</code></td>
</tr><tr>
<td>props.chipGroupExpandedText</td><td><code>string</code></td>
</tr><tr>
<td>props.chips</td><td><code>Array</code></td>
</tr><tr>
<td>props.children</td><td><code>React.ReactNode</code></td>
</tr><tr>
<td>props.deleteChip</td><td><code>function</code></td>
</tr><tr>
<td>props.deleteChipGroup</td><td><code>function</code></td>
</tr><tr>
<td>props.showToolbarItem</td><td><code>boolean</code></td>
</tr><tr>
<td>props.useToolbarContentContext</td><td><code>function</code></td>
</tr><tr>
<td>props.useToolbarContext</td><td><code>function</code></td>
</tr> </tbody>
</table>


* [~ToolbarFilter(props)](#Toolbar.module_ToolbarFilter..ToolbarFilter) ⇒ <code>React.ReactNode</code>
* [.propTypes](#Toolbar.module_ToolbarFilter..ToolbarFilter.propTypes) : <code>Object</code>
* [.defaultProps](#Toolbar.module_ToolbarFilter..ToolbarFilter.defaultProps) : <code>Object</code>

<a name="Toolbar.module_ToolbarFilter..ToolbarFilter.propTypes"></a>

#### ToolbarFilter.propTypes : <code>Object</code>
Prop types.

**Kind**: static property of [<code>ToolbarFilter</code>](#Toolbar.module_ToolbarFilter..ToolbarFilter)
<a name="Toolbar.module_ToolbarFilter..ToolbarFilter.defaultProps"></a>

#### ToolbarFilter.defaultProps : <code>Object</code>
Default props.

**Kind**: static property of [<code>ToolbarFilter</code>](#Toolbar.module_ToolbarFilter..ToolbarFilter)
<a name="Components.module_Tooltip"></a>

## Tooltip
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,14 @@ exports[`Toolbar Component should handle displaying a group variant field: group
>
<ToolbarFilter
categoryName="t(curiosity-toolbar.label_filter, {"context":"sla"})"
chipGroupCollapsedText={null}
chipGroupExpandedText={null}
chips={[]}
deleteChip={[Function]}
deleteChipGroup={null}
showToolbarItem={true}
useToolbarContentContext={[Function]}
useToolbarContext={[Function]}
>
<Sla
isFilter={true}
Expand Down Expand Up @@ -103,9 +108,14 @@ exports[`Toolbar Component should handle displaying secondary components, fields
>
<ToolbarFilter
categoryName="t(curiosity-toolbar.label_filter, {"context":"sla"})"
chipGroupCollapsedText={null}
chipGroupExpandedText={null}
chips={[]}
deleteChip={[Function]}
deleteChipGroup={null}
showToolbarItem={true}
useToolbarContentContext={[Function]}
useToolbarContext={[Function]}
>
<Sla
isFilter={true}
Expand Down Expand Up @@ -138,19 +148,19 @@ exports[`Toolbar Component should handle updating toolbar chips: chips 1`] = `
>
<span
class="pf-c-chip__text"
id="pf-random-id-3"
id="pf-random-id-2"
>
t(curiosity-toolbar.label_sla, {"context":"Premium"})
</span>
<button
aria-disabled="false"
aria-label="close"
aria-labelledby="remove_pf-random-id-3 pf-random-id-3"
aria-labelledby="remove_pf-random-id-2 pf-random-id-2"
class="pf-c-button pf-m-plain"
data-ouia-component-id="close"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
id="remove_pf-random-id-3"
id="remove_pf-random-id-2"
type="button"
>
<svg
Expand Down Expand Up @@ -209,9 +219,14 @@ exports[`Toolbar Component should hide categories when a single filter is availa
>
<ToolbarFilter
categoryName="t(curiosity-toolbar.label_filter, {"context":"sla"})"
chipGroupCollapsedText={null}
chipGroupExpandedText={null}
chips={[]}
deleteChip={[Function]}
deleteChipGroup={null}
showToolbarItem={true}
useToolbarContentContext={[Function]}
useToolbarContext={[Function]}
>
<Sla
isFilter={true}
Expand Down Expand Up @@ -275,19 +290,29 @@ exports[`Toolbar Component should render a basic component: basic 1`] = `
</ToolbarItem>
<ToolbarFilter
categoryName="t(curiosity-toolbar.label_filter, {"context":"sla"})"
chipGroupCollapsedText={null}
chipGroupExpandedText={null}
chips={[]}
deleteChip={[Function]}
deleteChipGroup={null}
showToolbarItem={false}
useToolbarContentContext={[Function]}
useToolbarContext={[Function]}
>
<Sla
isFilter={true}
/>
</ToolbarFilter>
<ToolbarFilter
categoryName="t(curiosity-toolbar.label_filter, {"context":"usage"})"
chipGroupCollapsedText={null}
chipGroupExpandedText={null}
chips={[]}
deleteChip={[Function]}
deleteChipGroup={null}
showToolbarItem={false}
useToolbarContentContext={[Function]}
useToolbarContext={[Function]}
>
<Usage
isFilter={true}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`ToolbarFilter Component should display basic chips: portal 1`] = `
[
<ToolbarItem
variant="chip-group"
>
<ChipGroup
aria-label="Chip group category"
categoryName="loremIpsum"
closeBtnAriaLabel="Close chip group"
collapsedText="\${remaining} more"
defaultIsOpen={false}
expandedText="Show Less"
isClosable={false}
numChips={3}
onClick={[Function]}
onOverflowChipClick={[Function]}
tooltipPosition="top"
>
<Chip
className=""
closeBtnAriaLabel="close"
component="div"
isOverflowChip={false}
isReadOnly={false}
onClick={[Function]}
tooltipPosition="top"
>
lorem
</Chip>
<Chip
className=""
closeBtnAriaLabel="close"
component="div"
isOverflowChip={false}
isReadOnly={false}
onClick={[Function]}
tooltipPosition="top"
>
hello world
</Chip>
</ChipGroup>
</ToolbarItem>,
"dolor sit test",
]
`;

exports[`ToolbarFilter Component should export specific context hooks: context hooks 1`] = `
{
"useToolbarContentContext": [Function],
"useToolbarContext": [Function],
}
`;

exports[`ToolbarFilter Component should render a basic component: basic 1`] = `
<toolbarfilter
props="{
"categoryName": "loremIpsum",
"chips": [
"lorem",
{
"key": "ipsum",
"node": "hello world"
}
],
"children": [
{}
],
"chipGroupCollapsedText": null,
"chipGroupExpandedText": null,
"deleteChipGroup": null,
"showToolbarItem": true
}"
>
<div
class="pf-c-toolbar__item"
>
lorem ipsum
</div>
</toolbarfilter>
`;
35 changes: 35 additions & 0 deletions src/components/toolbar/__tests__/toolbarFilter.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import React from 'react';
import ReactDom from 'react-dom';
import { ToolbarFilter, useToolbarContentContext, useToolbarContext } from '../toolbarFilter';

describe('ToolbarFilter Component', () => {
it('should render a basic component', () => {
const props = {
categoryName: 'loremIpsum',
chips: ['lorem', { key: 'ipsum', node: 'hello world' }]
};
const component = renderComponent(<ToolbarFilter {...props}>lorem ipsum</ToolbarFilter>);

expect(component).toMatchSnapshot('basic');
});

it('should export specific context hooks', () => {
expect({ useToolbarContentContext, useToolbarContext }).toMatchSnapshot('context hooks');
});

it('should display basic chips', () => {
const mockPortal = jest.fn();
const spyReactDom = jest.spyOn(ReactDom, 'createPortal').mockImplementation(mockPortal);

const props = {
categoryName: 'loremIpsum',
chips: ['lorem', { key: 'ipsum', node: 'hello world' }],
useToolbarContentContext: () => ({ chipContainerRef: { current: 'dolor sit test' } })
};
renderComponent(<ToolbarFilter {...props}>lorem ipsum</ToolbarFilter>);

expect(mockPortal.mock.calls.pop()).toMatchSnapshot('portal');

spyReactDom.mockClear();
});
});
2 changes: 1 addition & 1 deletion src/components/toolbar/toolbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import PropTypes from 'prop-types';
import {
Toolbar as PfToolbar,
ToolbarContent,
ToolbarFilter,
ToolbarGroup,
ToolbarItem,
ToolbarToggleGroup
} from '@patternfly/react-core';
import { FilterIcon } from '@patternfly/react-icons';
import { useProductToolbarQuery } from '../productView/productViewContext';
import { useToolbarFieldClear, useToolbarFieldClearAll, useToolbarFields } from './toolbarContext';
import { ToolbarFilter } from './toolbarFilter';
import { ToolbarFieldGroupVariant } from './toolbarFieldGroupVariant';
import { ToolbarFieldSelectCategory, useSelectCategoryOptions } from './toolbarFieldSelectCategory';
import { helpers } from '../../common';
Expand Down
Loading

0 comments on commit 12e5248

Please sign in to comment.