@patternfly/chatbot 2.1.0-prerelease.18 → 2.1.0-prerelease.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +4 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +1 -0
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +73 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +4 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +1 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +68 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +82 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +4 -1
@@ -16,7 +16,10 @@ const ChatbotConversationHistoryDropdown = ({ menuItems, menuClassName, onSelect
|
|
16
16
|
const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom" },
|
17
17
|
react_1.default.createElement(react_core_1.MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), role: "menuitem" },
|
18
18
|
react_1.default.createElement(ellipsis_v_icon_1.default, null))));
|
19
|
-
return (react_1.default.createElement(react_core_1.Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect:
|
19
|
+
return (react_1.default.createElement(react_core_1.Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect: (props) => {
|
20
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(props);
|
21
|
+
setIsOpen((prev) => !prev);
|
22
|
+
}, onOpenChange: (isOpen) => setIsOpen(isOpen), popperProps: { position: 'right' }, shouldFocusToggleOnSelect: true, shouldFocusFirstItemOnOpen: true, toggle: toggle }, menuItems));
|
20
23
|
};
|
21
24
|
exports.ChatbotConversationHistoryDropdown = ChatbotConversationHistoryDropdown;
|
22
25
|
exports.default = exports.ChatbotConversationHistoryDropdown;
|
@@ -0,0 +1 @@
|
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -0,0 +1,73 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
const react_1 = __importDefault(require("react"));
|
16
|
+
require("@testing-library/jest-dom");
|
17
|
+
const react_core_1 = require("@patternfly/react-core");
|
18
|
+
const react_2 = require("@testing-library/react");
|
19
|
+
const ChatbotConversationHistoryDropdown_1 = __importDefault(require("./ChatbotConversationHistoryDropdown"));
|
20
|
+
describe('ChatbotConversationHistoryDropdown', () => {
|
21
|
+
const onSelect = jest.fn();
|
22
|
+
const menuItems = (react_1.default.createElement(react_1.default.Fragment, null,
|
23
|
+
react_1.default.createElement(react_core_1.DropdownItem, null, "Rename"),
|
24
|
+
react_1.default.createElement(react_core_1.DropdownItem, null, "Delete")));
|
25
|
+
it('should render the dropdown', () => {
|
26
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, menuClassName: "custom-class" }));
|
27
|
+
expect(react_2.screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument();
|
28
|
+
});
|
29
|
+
it('should display the dropdown menuItems', () => {
|
30
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems }));
|
31
|
+
const toggle = react_2.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
32
|
+
expect(toggle).toBeInTheDocument();
|
33
|
+
react_2.fireEvent.click(toggle);
|
34
|
+
(0, react_2.waitFor)(() => {
|
35
|
+
expect(react_2.screen.getByText('Rename')).toBeInTheDocument();
|
36
|
+
expect(react_2.screen.getByText('Delete')).toBeInTheDocument();
|
37
|
+
});
|
38
|
+
});
|
39
|
+
it('should invoke onSelect callback when menuitem is clicked', () => {
|
40
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, onSelect: onSelect }));
|
41
|
+
const toggle = react_2.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
42
|
+
react_2.fireEvent.click(toggle);
|
43
|
+
react_2.fireEvent.click(react_2.screen.getByText('Rename'));
|
44
|
+
expect(onSelect).toHaveBeenCalled();
|
45
|
+
});
|
46
|
+
it('should toggle the dropdown when menuitem is clicked', () => {
|
47
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, onSelect: onSelect }));
|
48
|
+
const toggle = react_2.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
49
|
+
react_2.fireEvent.click(toggle);
|
50
|
+
react_2.fireEvent.click(react_2.screen.getByText('Delete'));
|
51
|
+
expect(onSelect).toHaveBeenCalled();
|
52
|
+
expect(react_2.screen.queryByText('Delete')).not.toBeInTheDocument();
|
53
|
+
});
|
54
|
+
it('should close the dropdown when user clicks outside', () => {
|
55
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, onSelect: onSelect }));
|
56
|
+
const toggle = react_2.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
57
|
+
react_2.fireEvent.click(toggle);
|
58
|
+
expect(react_2.screen.queryByText('Delete')).toBeInTheDocument();
|
59
|
+
react_2.fireEvent.click(toggle.parentElement);
|
60
|
+
expect(react_2.screen.queryByText('Delete')).not.toBeInTheDocument();
|
61
|
+
});
|
62
|
+
it('should show the tooltip when the user hovers over the toggle button', () => __awaiter(void 0, void 0, void 0, function* () {
|
63
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, label: "Actions dropdown" }));
|
64
|
+
const toggle = react_2.screen.queryByRole('menuitem', { name: /Actions dropdown/i });
|
65
|
+
(0, react_2.fireEvent)(toggle, new MouseEvent('mouseenter', {
|
66
|
+
bubbles: false,
|
67
|
+
cancelable: false
|
68
|
+
}));
|
69
|
+
yield (0, react_2.waitFor)(() => {
|
70
|
+
expect(react_2.screen.queryByText('Actions dropdown')).toBeInTheDocument();
|
71
|
+
});
|
72
|
+
}));
|
73
|
+
});
|
@@ -10,6 +10,9 @@ export const ChatbotConversationHistoryDropdown = ({ menuItems, menuClassName, o
|
|
10
10
|
const toggle = (toggleRef) => (React.createElement(Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom" },
|
11
11
|
React.createElement(MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), role: "menuitem" },
|
12
12
|
React.createElement(EllipsisIcon, null))));
|
13
|
-
return (React.createElement(Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect:
|
13
|
+
return (React.createElement(Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect: (props) => {
|
14
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(props);
|
15
|
+
setIsOpen((prev) => !prev);
|
16
|
+
}, onOpenChange: (isOpen) => setIsOpen(isOpen), popperProps: { position: 'right' }, shouldFocusToggleOnSelect: true, shouldFocusFirstItemOnOpen: true, toggle: toggle }, menuItems));
|
14
17
|
};
|
15
18
|
export default ChatbotConversationHistoryDropdown;
|
@@ -0,0 +1 @@
|
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -0,0 +1,68 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import React from 'react';
|
11
|
+
import '@testing-library/jest-dom';
|
12
|
+
import { DropdownItem } from '@patternfly/react-core';
|
13
|
+
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
14
|
+
import ChatbotConversationHistoryDropdown from './ChatbotConversationHistoryDropdown';
|
15
|
+
describe('ChatbotConversationHistoryDropdown', () => {
|
16
|
+
const onSelect = jest.fn();
|
17
|
+
const menuItems = (React.createElement(React.Fragment, null,
|
18
|
+
React.createElement(DropdownItem, null, "Rename"),
|
19
|
+
React.createElement(DropdownItem, null, "Delete")));
|
20
|
+
it('should render the dropdown', () => {
|
21
|
+
render(React.createElement(ChatbotConversationHistoryDropdown, { menuItems: menuItems, menuClassName: "custom-class" }));
|
22
|
+
expect(screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument();
|
23
|
+
});
|
24
|
+
it('should display the dropdown menuItems', () => {
|
25
|
+
render(React.createElement(ChatbotConversationHistoryDropdown, { menuItems: menuItems }));
|
26
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
27
|
+
expect(toggle).toBeInTheDocument();
|
28
|
+
fireEvent.click(toggle);
|
29
|
+
waitFor(() => {
|
30
|
+
expect(screen.getByText('Rename')).toBeInTheDocument();
|
31
|
+
expect(screen.getByText('Delete')).toBeInTheDocument();
|
32
|
+
});
|
33
|
+
});
|
34
|
+
it('should invoke onSelect callback when menuitem is clicked', () => {
|
35
|
+
render(React.createElement(ChatbotConversationHistoryDropdown, { menuItems: menuItems, onSelect: onSelect }));
|
36
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
37
|
+
fireEvent.click(toggle);
|
38
|
+
fireEvent.click(screen.getByText('Rename'));
|
39
|
+
expect(onSelect).toHaveBeenCalled();
|
40
|
+
});
|
41
|
+
it('should toggle the dropdown when menuitem is clicked', () => {
|
42
|
+
render(React.createElement(ChatbotConversationHistoryDropdown, { menuItems: menuItems, onSelect: onSelect }));
|
43
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
44
|
+
fireEvent.click(toggle);
|
45
|
+
fireEvent.click(screen.getByText('Delete'));
|
46
|
+
expect(onSelect).toHaveBeenCalled();
|
47
|
+
expect(screen.queryByText('Delete')).not.toBeInTheDocument();
|
48
|
+
});
|
49
|
+
it('should close the dropdown when user clicks outside', () => {
|
50
|
+
render(React.createElement(ChatbotConversationHistoryDropdown, { menuItems: menuItems, onSelect: onSelect }));
|
51
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
52
|
+
fireEvent.click(toggle);
|
53
|
+
expect(screen.queryByText('Delete')).toBeInTheDocument();
|
54
|
+
fireEvent.click(toggle.parentElement);
|
55
|
+
expect(screen.queryByText('Delete')).not.toBeInTheDocument();
|
56
|
+
});
|
57
|
+
it('should show the tooltip when the user hovers over the toggle button', () => __awaiter(void 0, void 0, void 0, function* () {
|
58
|
+
render(React.createElement(ChatbotConversationHistoryDropdown, { menuItems: menuItems, label: "Actions dropdown" }));
|
59
|
+
const toggle = screen.queryByRole('menuitem', { name: /Actions dropdown/i });
|
60
|
+
fireEvent(toggle, new MouseEvent('mouseenter', {
|
61
|
+
bubbles: false,
|
62
|
+
cancelable: false
|
63
|
+
}));
|
64
|
+
yield waitFor(() => {
|
65
|
+
expect(screen.queryByText('Actions dropdown')).toBeInTheDocument();
|
66
|
+
});
|
67
|
+
}));
|
68
|
+
});
|
@@ -1 +1 @@
|
|
1
|
-
{"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../src/ChatbotContent/ChatbotContent.tsx","../src/ChatbotContent/index.ts","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx","../src/ChatbotConversationHistoryNav/index.ts","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.tsx","../src/ChatbotHeader/index.ts","../src/ChatbotModal/ChatbotModal.tsx","../src/ChatbotModal/index.ts","../src/ChatbotPopover/ChatbotPopover.tsx","../src/ChatbotPopover/index.ts","../src/ChatbotToggle/ChatbotToggle.test.tsx","../src/ChatbotToggle/ChatbotToggle.tsx","../src/ChatbotToggle/index.ts","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx","../src/ChatbotWelcomePrompt/index.ts","../src/CodeModal/CodeModal.tsx","../src/CodeModal/index.ts","../src/FileDetails/FileDetails.test.tsx","../src/FileDetails/FileDetails.tsx","../src/FileDetails/index.ts","../src/FileDetailsLabel/FileDetailsLabel.test.tsx","../src/FileDetailsLabel/FileDetailsLabel.tsx","../src/FileDetailsLabel/index.ts","../src/FileDropZone/FileDropZone.test.tsx","../src/FileDropZone/FileDropZone.tsx","../src/FileDropZone/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ListMessage/ListItemMessage.tsx","../src/Message/ListMessage/OrderedListMessage.tsx","../src/Message/ListMessage/UnorderedListMessage.tsx","../src/Message/TextMessage/TextMessage.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts"],"version":"5.6.3"}
|
1
|
+
{"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../src/ChatbotContent/ChatbotContent.tsx","../src/ChatbotContent/index.ts","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx","../src/ChatbotConversationHistoryNav/index.ts","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.tsx","../src/ChatbotHeader/index.ts","../src/ChatbotModal/ChatbotModal.tsx","../src/ChatbotModal/index.ts","../src/ChatbotPopover/ChatbotPopover.tsx","../src/ChatbotPopover/index.ts","../src/ChatbotToggle/ChatbotToggle.test.tsx","../src/ChatbotToggle/ChatbotToggle.tsx","../src/ChatbotToggle/index.ts","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx","../src/ChatbotWelcomePrompt/index.ts","../src/CodeModal/CodeModal.tsx","../src/CodeModal/index.ts","../src/FileDetails/FileDetails.test.tsx","../src/FileDetails/FileDetails.tsx","../src/FileDetails/index.ts","../src/FileDetailsLabel/FileDetailsLabel.test.tsx","../src/FileDetailsLabel/FileDetailsLabel.tsx","../src/FileDetailsLabel/index.ts","../src/FileDropZone/FileDropZone.test.tsx","../src/FileDropZone/FileDropZone.tsx","../src/FileDropZone/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ListMessage/ListItemMessage.tsx","../src/Message/ListMessage/OrderedListMessage.tsx","../src/Message/ListMessage/UnorderedListMessage.tsx","../src/Message/TextMessage/TextMessage.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts"],"version":"5.6.3"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@patternfly/chatbot",
|
3
|
-
"version": "2.1.0-prerelease.
|
3
|
+
"version": "2.1.0-prerelease.20",
|
4
4
|
"description": "This library provides React components based on PatternFly 6 that can be used to build chatbots.",
|
5
5
|
"main": "dist/cjs/index.js",
|
6
6
|
"module": "dist/esm/index.js",
|
@@ -75,5 +75,9 @@
|
|
75
75
|
"victory-cursor-container": "^37.1.1",
|
76
76
|
"victory-tooltip": "^37.1.1",
|
77
77
|
"victory-bar": "^37.1.1"
|
78
|
+
},
|
79
|
+
"overrides": {
|
80
|
+
"puppeteer": "^23.6.1",
|
81
|
+
"puppeteer-cluster": "^0.24.0"
|
78
82
|
}
|
79
83
|
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import '@testing-library/jest-dom';
|
3
|
+
import { DropdownItem } from '@patternfly/react-core';
|
4
|
+
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
5
|
+
import ChatbotConversationHistoryDropdown from './ChatbotConversationHistoryDropdown';
|
6
|
+
|
7
|
+
describe('ChatbotConversationHistoryDropdown', () => {
|
8
|
+
const onSelect = jest.fn();
|
9
|
+
const menuItems = (
|
10
|
+
<>
|
11
|
+
<DropdownItem>Rename</DropdownItem>
|
12
|
+
<DropdownItem>Delete</DropdownItem>
|
13
|
+
</>
|
14
|
+
);
|
15
|
+
|
16
|
+
it('should render the dropdown', () => {
|
17
|
+
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} menuClassName="custom-class" />);
|
18
|
+
expect(screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument();
|
19
|
+
});
|
20
|
+
|
21
|
+
it('should display the dropdown menuItems', () => {
|
22
|
+
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} />);
|
23
|
+
|
24
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
25
|
+
|
26
|
+
expect(toggle).toBeInTheDocument();
|
27
|
+
fireEvent.click(toggle);
|
28
|
+
|
29
|
+
waitFor(() => {
|
30
|
+
expect(screen.getByText('Rename')).toBeInTheDocument();
|
31
|
+
expect(screen.getByText('Delete')).toBeInTheDocument();
|
32
|
+
});
|
33
|
+
});
|
34
|
+
|
35
|
+
it('should invoke onSelect callback when menuitem is clicked', () => {
|
36
|
+
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} onSelect={onSelect} />);
|
37
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
38
|
+
fireEvent.click(toggle);
|
39
|
+
fireEvent.click(screen.getByText('Rename'));
|
40
|
+
|
41
|
+
expect(onSelect).toHaveBeenCalled();
|
42
|
+
});
|
43
|
+
|
44
|
+
it('should toggle the dropdown when menuitem is clicked', () => {
|
45
|
+
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} onSelect={onSelect} />);
|
46
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
47
|
+
fireEvent.click(toggle);
|
48
|
+
fireEvent.click(screen.getByText('Delete'));
|
49
|
+
|
50
|
+
expect(onSelect).toHaveBeenCalled();
|
51
|
+
|
52
|
+
expect(screen.queryByText('Delete')).not.toBeInTheDocument();
|
53
|
+
});
|
54
|
+
|
55
|
+
it('should close the dropdown when user clicks outside', () => {
|
56
|
+
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} onSelect={onSelect} />);
|
57
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
58
|
+
fireEvent.click(toggle);
|
59
|
+
|
60
|
+
expect(screen.queryByText('Delete')).toBeInTheDocument();
|
61
|
+
fireEvent.click(toggle.parentElement!);
|
62
|
+
|
63
|
+
expect(screen.queryByText('Delete')).not.toBeInTheDocument();
|
64
|
+
});
|
65
|
+
|
66
|
+
it('should show the tooltip when the user hovers over the toggle button', async () => {
|
67
|
+
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} label="Actions dropdown" />);
|
68
|
+
const toggle = screen.queryByRole('menuitem', { name: /Actions dropdown/i })!;
|
69
|
+
|
70
|
+
fireEvent(
|
71
|
+
toggle,
|
72
|
+
new MouseEvent('mouseenter', {
|
73
|
+
bubbles: false,
|
74
|
+
cancelable: false
|
75
|
+
})
|
76
|
+
);
|
77
|
+
|
78
|
+
await waitFor(() => {
|
79
|
+
expect(screen.queryByText('Actions dropdown')).toBeInTheDocument();
|
80
|
+
});
|
81
|
+
});
|
82
|
+
});
|
@@ -47,7 +47,10 @@ export const ChatbotConversationHistoryDropdown: React.FunctionComponent<Chatbot
|
|
47
47
|
<Dropdown
|
48
48
|
className={`pf-chatbot__selections ${menuClassName ?? ''}`}
|
49
49
|
isOpen={isOpen}
|
50
|
-
onSelect={
|
50
|
+
onSelect={(props) => {
|
51
|
+
onSelect?.(props);
|
52
|
+
setIsOpen((prev) => !prev);
|
53
|
+
}}
|
51
54
|
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
52
55
|
popperProps={{ position: 'right' }}
|
53
56
|
shouldFocusToggleOnSelect
|