Skip to content

Commit 4c75821

Browse files
feat(ToolResponse): Make card optional (#680)
1 parent ab2266e commit 4c75821

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

packages/module/src/ToolResponse/ToolResponse.test.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,34 @@ describe('ToolResponse', () => {
7575
const subheadingContainer = container.querySelector('.pf-chatbot__tool-response-subheading');
7676
expect(subheadingContainer).toBeFalsy();
7777
});
78+
79+
it('should not render card when cardTitle and cardBody are not provided', () => {
80+
const { container } = render(<ToolResponse {...defaultProps} cardTitle={undefined} cardBody={undefined} />);
81+
expect(container.querySelector('.pf-chatbot__tool-response-card')).toBeFalsy();
82+
});
83+
84+
it('should render card when only cardTitle is provided', () => {
85+
const { container } = render(<ToolResponse {...defaultProps} cardBody={undefined} />);
86+
expect(container.querySelector('.pf-chatbot__tool-response-card')).toBeTruthy();
87+
});
88+
89+
it('should render card when only cardBody is provided', () => {
90+
const { container } = render(<ToolResponse {...defaultProps} cardTitle={undefined} />);
91+
expect(container.querySelector('.pf-chatbot__tool-response-card')).toBeTruthy();
92+
});
93+
94+
it('should render divider when cardBody and cardTitle are provided', () => {
95+
const { container } = render(<ToolResponse {...defaultProps} />);
96+
expect(container.querySelector('.pf-v6-c-divider')).toBeTruthy();
97+
});
98+
99+
it('should not render divider when only cardBody is provided', () => {
100+
const { container } = render(<ToolResponse {...defaultProps} cardTitle={undefined} />);
101+
expect(container.querySelector('.pf-v6-c-divider')).toBeFalsy();
102+
});
103+
104+
it('should not render divider when only cardTitle is provided', () => {
105+
const { container } = render(<ToolResponse {...defaultProps} cardBody={undefined} />);
106+
expect(container.querySelector('.pf-v6-c-divider')).toBeFalsy();
107+
});
78108
});

packages/module/src/ToolResponse/ToolResponse.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ export interface ToolResponseProps {
2525
/** Body text rendered inside expandable section */
2626
body?: React.ReactNode | string;
2727
/** Content passed into tool response card body */
28-
cardBody: React.ReactNode;
28+
cardBody?: React.ReactNode;
2929
/** Content passed into tool response card title */
30-
cardTitle: React.ReactNode;
30+
cardTitle?: React.ReactNode;
3131
/** Additional props passed to main card */
3232
cardProps?: CardProps;
3333
/** Additional props passed to main card body */
@@ -80,11 +80,13 @@ export const ToolResponse: FunctionComponent<ToolResponseProps> = ({
8080
</div>
8181
)}
8282
{body && <div className="pf-chatbot__tool-response-body">{body}</div>}
83-
<Card isCompact className="pf-chatbot__tool-response-card" {...toolResponseCardProps}>
84-
<CardTitle {...toolResponseCardTitleProps}>{cardTitle}</CardTitle>
85-
<Divider {...toolResponseCardDividerProps} />
86-
<CardBody {...toolResponseCardBodyProps}>{cardBody}</CardBody>
87-
</Card>
83+
{(cardTitle || cardBody) && (
84+
<Card isCompact className="pf-chatbot__tool-response-card" {...toolResponseCardProps}>
85+
{cardTitle && <CardTitle {...toolResponseCardTitleProps}>{cardTitle}</CardTitle>}
86+
{cardTitle && cardBody && <Divider {...toolResponseCardDividerProps} />}
87+
{cardBody && <CardBody {...toolResponseCardBodyProps}>{cardBody}</CardBody>}
88+
</Card>
89+
)}
8890
</div>
8991
</ExpandableSection>
9092
</CardBody>

0 commit comments

Comments
 (0)