cozy-search 2.11.2 → 2.11.3

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.
@@ -8,6 +8,8 @@ export default KnowledgeBaseChip;
8
8
  * open the folder in Drive (new tab) or change the knowledge base through
9
9
  * the Drive folder picker (persisted on the assistant immediately). The
10
10
  * menu starts with the folder name, which the icon button does not show.
11
+ * Changing the folder is part of editing assistants, so it follows the
12
+ * same flag as creating and editing them.
11
13
  */
12
14
  declare function KnowledgeBaseChip({ dirId, folder, isRoot, isUnavailable, onChangeFolder, variant }: {
13
15
  dirId: any;
@@ -15,6 +15,8 @@ var _twakeIcons = require("@linagora/twake-icons");
15
15
 
16
16
  var _cozyClient = require("cozy-client");
17
17
 
18
+ var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
19
+
18
20
  var _ActionsMenu = _interopRequireDefault(require("cozy-ui/transpiled/react/ActionsMenu"));
19
21
 
20
22
  var _ActionsMenuItem = _interopRequireDefault(require("cozy-ui/transpiled/react/ActionsMenu/ActionsMenuItem"));
@@ -57,6 +59,8 @@ var sourceStyles = {
57
59
  * open the folder in Drive (new tab) or change the knowledge base through
58
60
  * the Drive folder picker (persisted on the assistant immediately). The
59
61
  * menu starts with the folder name, which the icon button does not show.
62
+ * Changing the folder is part of editing assistants, so it follows the
63
+ * same flag as creating and editing them.
60
64
  */
61
65
 
62
66
  var KnowledgeBaseChip = function KnowledgeBaseChip(_ref) {
@@ -86,6 +90,9 @@ var KnowledgeBaseChip = function KnowledgeBaseChip(_ref) {
86
90
  isPickerOpen = _useState4[0],
87
91
  setIsPickerOpen = _useState4[1];
88
92
 
93
+ var canChangeFolder = (0, _cozyFlags.default)('cozy.assistant.create-assistant.enabled');
94
+ var hasActions = !isUnavailable || canChangeFolder;
95
+
89
96
  var closeMenu = function closeMenu() {
90
97
  return setIsMenuOpen(false);
91
98
  };
@@ -133,12 +140,12 @@ var KnowledgeBaseChip = function KnowledgeBaseChip(_ref) {
133
140
  preserveColor: true
134
141
  }),
135
142
  label: label,
136
- clickable: true,
137
- "aria-haspopup": "menu",
138
- "aria-expanded": isMenuOpen,
139
- onClick: function onClick() {
143
+ clickable: hasActions,
144
+ "aria-haspopup": hasActions ? 'menu' : undefined,
145
+ "aria-expanded": hasActions ? isMenuOpen : undefined,
146
+ onClick: hasActions ? function () {
140
147
  return setIsMenuOpen(true);
141
- },
148
+ } : undefined,
142
149
  className: sourceStyles['source-chip'],
143
150
  classes: _SourceButton.CHIP_CLASSES
144
151
  }))), isMenuOpen && /*#__PURE__*/_react.default.createElement(_ActionsMenu.default, {
@@ -168,7 +175,7 @@ var KnowledgeBaseChip = function KnowledgeBaseChip(_ref) {
168
175
  className: "u-mr-half"
169
176
  }), /*#__PURE__*/_react.default.createElement(_Typography.default, {
170
177
  variant: "body1"
171
- }, t('assistant.knowledge_base.open_folder')))), /*#__PURE__*/_react.default.createElement(_ActionsMenuItem.default, {
178
+ }, t('assistant.knowledge_base.open_folder')))), canChangeFolder && /*#__PURE__*/_react.default.createElement(_ActionsMenuItem.default, {
172
179
  onClick: handleChangeFolder
173
180
  }, /*#__PURE__*/_react.default.createElement("div", {
174
181
  className: "u-flex u-flex-items-center"
@@ -178,7 +185,7 @@ var KnowledgeBaseChip = function KnowledgeBaseChip(_ref) {
178
185
  className: "u-mr-half"
179
186
  }), /*#__PURE__*/_react.default.createElement(_Typography.default, {
180
187
  variant: "body1"
181
- }, t('assistant.knowledge_base.change_folder'))))), isPickerOpen && /*#__PURE__*/_react.default.createElement(_FolderPickerDialog.default, {
188
+ }, t('assistant.knowledge_base.change_folder'))))), canChangeFolder && isPickerOpen && /*#__PURE__*/_react.default.createElement(_FolderPickerDialog.default, {
182
189
  open: isPickerOpen,
183
190
  onClose: function onClose() {
184
191
  return setIsPickerOpen(false);
@@ -0,0 +1,82 @@
1
+ import { fireEvent, render, screen } from '@testing-library/react';
2
+ import React from 'react';
3
+ import flag from 'cozy-flags';
4
+ import KnowledgeBaseChip from './KnowledgeBaseChip';
5
+ jest.mock('cozy-flags', () => jest.fn());
6
+ jest.mock('cozy-client', () => ({
7
+ useClient: () => ({
8
+ getStackClient: () => ({ uri: 'https://alice.cozy.example' }),
9
+ getInstanceOptions: () => ({ subdomain: 'flat' })
10
+ }),
11
+ generateWebLink: ({ hash }) => `https://alice-drive.cozy.example/#${hash}`
12
+ }));
13
+ jest.mock('cozy-intent', () => ({
14
+ useWebviewIntent: () => null
15
+ }));
16
+ jest.mock('cozy-ui/transpiled/react/providers/Breakpoints', () => {
17
+ const useBreakpoints = () => ({ isMobile: false });
18
+ return { __esModule: true, default: useBreakpoints, useBreakpoints };
19
+ });
20
+ jest.mock('twake-i18n', () => ({
21
+ useI18n: () => ({ t: key => key })
22
+ }));
23
+ jest.mock('./FolderPickerDialog', () => () => (React.createElement("div", { "data-testid": "folder-picker" })));
24
+ const CHANGE_FOLDER = 'assistant.knowledge_base.change_folder';
25
+ const OPEN_FOLDER = 'assistant.knowledge_base.open_folder';
26
+ const setup = props => render(React.createElement(KnowledgeBaseChip, Object.assign({ dirId: "folder-id", folder: { _id: 'folder-id', name: 'Meetings' }, isRoot: false, isUnavailable: false, onChangeFolder: jest.fn() }, props)));
27
+ const mockCreateAssistantFlag = isEnabled => flag.mockImplementation(name => name === 'cozy.assistant.create-assistant.enabled' ? isEnabled : null);
28
+ describe('KnowledgeBaseChip', () => {
29
+ beforeEach(() => {
30
+ flag.mockReset();
31
+ });
32
+ describe('when creating assistants is enabled', () => {
33
+ beforeEach(() => {
34
+ mockCreateAssistantFlag(true);
35
+ });
36
+ it('offers to open the folder and to change it', () => {
37
+ setup();
38
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }));
39
+ expect(screen.queryByText(OPEN_FOLDER)).not.toBe(null);
40
+ expect(screen.queryByText(CHANGE_FOLDER)).not.toBe(null);
41
+ });
42
+ it('opens the folder picker from the menu', () => {
43
+ setup();
44
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }));
45
+ fireEvent.click(screen.getByText(CHANGE_FOLDER));
46
+ expect(screen.queryByTestId('folder-picker')).not.toBe(null);
47
+ });
48
+ it('still offers to change an unavailable folder', () => {
49
+ setup({ isUnavailable: true });
50
+ fireEvent.click(screen.getByRole('button', {
51
+ name: 'assistant.knowledge_base.unavailable'
52
+ }));
53
+ expect(screen.queryByText(OPEN_FOLDER)).toBe(null);
54
+ expect(screen.queryByText(CHANGE_FOLDER)).not.toBe(null);
55
+ });
56
+ });
57
+ describe('when creating assistants is disabled', () => {
58
+ beforeEach(() => {
59
+ mockCreateAssistantFlag(false);
60
+ });
61
+ it('only offers to open the folder', () => {
62
+ setup();
63
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }));
64
+ expect(screen.queryByText(OPEN_FOLDER)).not.toBe(null);
65
+ expect(screen.queryByText(CHANGE_FOLDER)).toBe(null);
66
+ expect(screen.queryByTestId('folder-picker')).toBe(null);
67
+ });
68
+ it('only offers to open the folder from the icon button', () => {
69
+ setup({ variant: 'icon' });
70
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }));
71
+ expect(screen.queryByText(OPEN_FOLDER)).not.toBe(null);
72
+ expect(screen.queryByText(CHANGE_FOLDER)).toBe(null);
73
+ });
74
+ it('does not open an empty menu for an unavailable folder', () => {
75
+ setup({ isUnavailable: true });
76
+ expect(screen.queryByRole('button', {
77
+ name: 'assistant.knowledge_base.unavailable'
78
+ })).toBe(null);
79
+ expect(screen.queryByRole('menu')).toBe(null);
80
+ });
81
+ });
82
+ });
@@ -0,0 +1,122 @@
1
+ import { fireEvent, render, screen } from '@testing-library/react'
2
+ import React from 'react'
3
+
4
+ import flag from 'cozy-flags'
5
+
6
+ import KnowledgeBaseChip from './KnowledgeBaseChip'
7
+
8
+ jest.mock('cozy-flags', () => jest.fn())
9
+ jest.mock('cozy-client', () => ({
10
+ useClient: () => ({
11
+ getStackClient: () => ({ uri: 'https://alice.cozy.example' }),
12
+ getInstanceOptions: () => ({ subdomain: 'flat' })
13
+ }),
14
+ generateWebLink: ({ hash }) => `https://alice-drive.cozy.example/#${hash}`
15
+ }))
16
+ jest.mock('cozy-intent', () => ({
17
+ useWebviewIntent: () => null
18
+ }))
19
+ jest.mock('cozy-ui/transpiled/react/providers/Breakpoints', () => {
20
+ const useBreakpoints = () => ({ isMobile: false })
21
+ return { __esModule: true, default: useBreakpoints, useBreakpoints }
22
+ })
23
+ jest.mock('twake-i18n', () => ({
24
+ useI18n: () => ({ t: key => key })
25
+ }))
26
+ jest.mock('./FolderPickerDialog', () => () => (
27
+ <div data-testid="folder-picker" />
28
+ ))
29
+
30
+ const CHANGE_FOLDER = 'assistant.knowledge_base.change_folder'
31
+ const OPEN_FOLDER = 'assistant.knowledge_base.open_folder'
32
+
33
+ const setup = props =>
34
+ render(
35
+ <KnowledgeBaseChip
36
+ dirId="folder-id"
37
+ folder={{ _id: 'folder-id', name: 'Meetings' }}
38
+ isRoot={false}
39
+ isUnavailable={false}
40
+ onChangeFolder={jest.fn()}
41
+ {...props}
42
+ />
43
+ )
44
+
45
+ const mockCreateAssistantFlag = isEnabled =>
46
+ flag.mockImplementation(name =>
47
+ name === 'cozy.assistant.create-assistant.enabled' ? isEnabled : null
48
+ )
49
+
50
+ describe('KnowledgeBaseChip', () => {
51
+ beforeEach(() => {
52
+ flag.mockReset()
53
+ })
54
+
55
+ describe('when creating assistants is enabled', () => {
56
+ beforeEach(() => {
57
+ mockCreateAssistantFlag(true)
58
+ })
59
+
60
+ it('offers to open the folder and to change it', () => {
61
+ setup()
62
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }))
63
+
64
+ expect(screen.queryByText(OPEN_FOLDER)).not.toBe(null)
65
+ expect(screen.queryByText(CHANGE_FOLDER)).not.toBe(null)
66
+ })
67
+
68
+ it('opens the folder picker from the menu', () => {
69
+ setup()
70
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }))
71
+ fireEvent.click(screen.getByText(CHANGE_FOLDER))
72
+
73
+ expect(screen.queryByTestId('folder-picker')).not.toBe(null)
74
+ })
75
+
76
+ it('still offers to change an unavailable folder', () => {
77
+ setup({ isUnavailable: true })
78
+ fireEvent.click(
79
+ screen.getByRole('button', {
80
+ name: 'assistant.knowledge_base.unavailable'
81
+ })
82
+ )
83
+
84
+ expect(screen.queryByText(OPEN_FOLDER)).toBe(null)
85
+ expect(screen.queryByText(CHANGE_FOLDER)).not.toBe(null)
86
+ })
87
+ })
88
+
89
+ describe('when creating assistants is disabled', () => {
90
+ beforeEach(() => {
91
+ mockCreateAssistantFlag(false)
92
+ })
93
+
94
+ it('only offers to open the folder', () => {
95
+ setup()
96
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }))
97
+
98
+ expect(screen.queryByText(OPEN_FOLDER)).not.toBe(null)
99
+ expect(screen.queryByText(CHANGE_FOLDER)).toBe(null)
100
+ expect(screen.queryByTestId('folder-picker')).toBe(null)
101
+ })
102
+
103
+ it('only offers to open the folder from the icon button', () => {
104
+ setup({ variant: 'icon' })
105
+ fireEvent.click(screen.getByRole('button', { name: 'Meetings' }))
106
+
107
+ expect(screen.queryByText(OPEN_FOLDER)).not.toBe(null)
108
+ expect(screen.queryByText(CHANGE_FOLDER)).toBe(null)
109
+ })
110
+
111
+ it('does not open an empty menu for an unavailable folder', () => {
112
+ setup({ isUnavailable: true })
113
+
114
+ expect(
115
+ screen.queryByRole('button', {
116
+ name: 'assistant.knowledge_base.unavailable'
117
+ })
118
+ ).toBe(null)
119
+ expect(screen.queryByRole('menu')).toBe(null)
120
+ })
121
+ })
122
+ })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cozy-search",
3
3
  "description": "UI components about search bar and IA assistant",
4
- "version": "2.11.2",
4
+ "version": "2.11.3",
5
5
  "author": {
6
6
  "name": "Cozy Cloud",
7
7
  "url": "https://github.com/cozy"
@@ -96,5 +96,5 @@
96
96
  "lint": "cd .. && yarn eslint --ext js,jsx,ts packages/cozy-search"
97
97
  },
98
98
  "types": "dist/index.d.ts",
99
- "gitHead": "a9f046c1c02c5ffc85bf5c46da1acb41407dc584"
99
+ "gitHead": "cf7659dd90d8e1e970e79dd421f1620bd1f6a84f"
100
100
  }