@memori.ai/memori-react 4.2.0 → 4.3.1
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/CHANGELOG.md +14 -0
- package/dist/components/ExpertsDrawer/ExpertsDrawer.css +67 -0
- package/dist/components/ExpertsDrawer/ExpertsDrawer.d.ts +11 -0
- package/dist/components/ExpertsDrawer/ExpertsDrawer.js +20 -0
- package/dist/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -0
- package/dist/components/Header/Header.css +4 -0
- package/dist/components/Header/Header.d.ts +1 -0
- package/dist/components/Header/Header.js +3 -2
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/KnownFacts/KnownFacts.js +11 -7
- package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +4 -1
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.css +5 -0
- package/dist/locales/en.json +3 -0
- package/dist/locales/it.json +3 -0
- package/dist/styles.css +1 -0
- package/esm/components/ExpertsDrawer/ExpertsDrawer.css +67 -0
- package/esm/components/ExpertsDrawer/ExpertsDrawer.d.ts +11 -0
- package/esm/components/ExpertsDrawer/ExpertsDrawer.js +17 -0
- package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -0
- package/esm/components/Header/Header.css +4 -0
- package/esm/components/Header/Header.d.ts +1 -0
- package/esm/components/Header/Header.js +3 -2
- package/esm/components/Header/Header.js.map +1 -1
- package/esm/components/KnownFacts/KnownFacts.js +11 -7
- package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +4 -1
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.css +5 -0
- package/esm/locales/en.json +3 -0
- package/esm/locales/it.json +3 -0
- package/esm/styles.css +1 -0
- package/package.json +1 -1
- package/src/components/ExpertsDrawer/ExpertsDrawer.css +67 -0
- package/src/components/ExpertsDrawer/ExpertsDrawer.stories.tsx +54 -0
- package/src/components/ExpertsDrawer/ExpertsDrawer.test.tsx +53 -0
- package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +70 -0
- package/src/components/ExpertsDrawer/__snapshots__/ExpertsDrawer.test.tsx.snap +11 -0
- package/src/components/Header/Header.css +4 -0
- package/src/components/Header/Header.stories.tsx +39 -0
- package/src/components/Header/Header.test.tsx +58 -0
- package/src/components/Header/Header.tsx +14 -0
- package/src/components/Header/__snapshots__/Header.test.tsx.snap +171 -0
- package/src/components/KnownFacts/KnownFacts.tsx +14 -8
- package/src/components/MemoriWidget/MemoriWidget.tsx +14 -0
- package/src/components/StartPanel/StartPanel.css +5 -0
- package/src/index.stories.tsx +32 -1
- package/src/locales/en.json +3 -0
- package/src/locales/it.json +3 -0
- package/src/mocks/data.ts +14 -0
- package/src/styles.css +1 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
2
|
+
import ExpertsDrawer from './ExpertsDrawer';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { tenant, expertReference } from '../../mocks/data';
|
|
5
|
+
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
window.IntersectionObserver = jest.fn(() => ({
|
|
9
|
+
observe: jest.fn(),
|
|
10
|
+
unobserve: jest.fn(),
|
|
11
|
+
disconnect: jest.fn(),
|
|
12
|
+
takeRecords: jest.fn(),
|
|
13
|
+
}));
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('renders ExpertsDrawer unchanged', () => {
|
|
17
|
+
const { container } = render(
|
|
18
|
+
<ExpertsDrawer
|
|
19
|
+
onClose={jest.fn()}
|
|
20
|
+
baseUrl="https://app.twincreator.com"
|
|
21
|
+
apiUrl="https://backend.memori.ai"
|
|
22
|
+
tenant={tenant}
|
|
23
|
+
experts={[
|
|
24
|
+
expertReference,
|
|
25
|
+
{
|
|
26
|
+
...expertReference,
|
|
27
|
+
expertID: '2',
|
|
28
|
+
},
|
|
29
|
+
]}
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
32
|
+
expect(container).toMatchSnapshot();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('renders ExpertsDrawer open unchanged', () => {
|
|
36
|
+
const { container } = render(
|
|
37
|
+
<ExpertsDrawer
|
|
38
|
+
open
|
|
39
|
+
onClose={jest.fn()}
|
|
40
|
+
baseUrl="https://app.twincreator.com"
|
|
41
|
+
apiUrl="https://backend.memori.ai"
|
|
42
|
+
tenant={tenant}
|
|
43
|
+
experts={[
|
|
44
|
+
expertReference,
|
|
45
|
+
{
|
|
46
|
+
...expertReference,
|
|
47
|
+
expertID: '2',
|
|
48
|
+
},
|
|
49
|
+
]}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
expect(container).toMatchSnapshot();
|
|
53
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExpertReference,
|
|
3
|
+
Tenant,
|
|
4
|
+
} from '@memori.ai/memori-api-client/dist/types';
|
|
5
|
+
import Drawer from '../ui/Drawer';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { getResourceUrl } from '../../helpers/media';
|
|
8
|
+
|
|
9
|
+
export interface Props {
|
|
10
|
+
experts: ExpertReference[];
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
apiUrl: string;
|
|
13
|
+
tenant?: Tenant;
|
|
14
|
+
open?: boolean;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const ExpertsDrawer = ({
|
|
19
|
+
open = false,
|
|
20
|
+
baseUrl,
|
|
21
|
+
apiUrl,
|
|
22
|
+
tenant,
|
|
23
|
+
experts,
|
|
24
|
+
onClose,
|
|
25
|
+
}: Props) => {
|
|
26
|
+
const { t } = useTranslation();
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<Drawer
|
|
30
|
+
open={open}
|
|
31
|
+
onClose={onClose}
|
|
32
|
+
className="memori--experts-drawer"
|
|
33
|
+
title={
|
|
34
|
+
<h2 className="memori--experts-drawer--title">
|
|
35
|
+
{t('widget.expertsInTheBoard')}
|
|
36
|
+
</h2>
|
|
37
|
+
}
|
|
38
|
+
>
|
|
39
|
+
<ul className="memori--experts-drawer--list">
|
|
40
|
+
{experts.map(expert => (
|
|
41
|
+
<li key={expert.expertID} className="memori--experts-drawer--item">
|
|
42
|
+
<figure className="memori--experts-drawer--avatar">
|
|
43
|
+
<img
|
|
44
|
+
src={`${apiUrl}/api/v1/memoriai/memori/avatar/${expert.expertMemoriID}`}
|
|
45
|
+
alt={expert.name}
|
|
46
|
+
onError={e => {
|
|
47
|
+
e.currentTarget.src = getResourceUrl({
|
|
48
|
+
tenantID: tenant?.id,
|
|
49
|
+
type: 'avatar',
|
|
50
|
+
baseURL: baseUrl,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
e.currentTarget.onerror = null;
|
|
54
|
+
}}
|
|
55
|
+
/>
|
|
56
|
+
</figure>
|
|
57
|
+
<div className="memori--experts-drawer--content">
|
|
58
|
+
<h3 className="memori--experts-drawer--name">{expert.name}</h3>
|
|
59
|
+
<p className="memori--experts-drawer--description">
|
|
60
|
+
{expert.description}
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
</li>
|
|
64
|
+
))}
|
|
65
|
+
</ul>
|
|
66
|
+
</Drawer>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export default ExpertsDrawer;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`renders ExpertsDrawer open unchanged 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
style="position: fixed; top: 1px; left: 1px; width: 1px; height: 0px; padding: 0px; margin: -1px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap; border-width: 0px; display: none;"
|
|
7
|
+
/>
|
|
8
|
+
</div>
|
|
9
|
+
`;
|
|
10
|
+
|
|
11
|
+
exports[`renders ExpertsDrawer unchanged 1`] = `<div />`;
|
|
@@ -28,6 +28,7 @@ const Template: Story<Props> = args => {
|
|
|
28
28
|
const [speakerMuted, setSpeakerMuted] = React.useState(args.speakerMuted);
|
|
29
29
|
const [showSettingsDrawer, setShowSettingsDrawer] = React.useState(false);
|
|
30
30
|
const [showKnownFactsDrawer, setShowKnownFactsDrawer] = React.useState(false);
|
|
31
|
+
const [showExpertsDrawer, setShowExpertsDrawer] = React.useState(false);
|
|
31
32
|
const [continuousSpeech, setContinuousSpeech] = React.useState(true);
|
|
32
33
|
const [continuousSpeechTimeout, setContinuousSpeechTimeout] =
|
|
33
34
|
React.useState(2);
|
|
@@ -41,6 +42,7 @@ const Template: Story<Props> = args => {
|
|
|
41
42
|
showSettings
|
|
42
43
|
setShowSettingsDrawer={() => setShowSettingsDrawer(true)}
|
|
43
44
|
setShowKnownFactsDrawer={() => setShowKnownFactsDrawer(true)}
|
|
45
|
+
setShowExpertsDrawer={() => setShowExpertsDrawer(true)}
|
|
44
46
|
/>
|
|
45
47
|
<SettingsDrawer
|
|
46
48
|
open={!!showSettingsDrawer}
|
|
@@ -194,3 +196,40 @@ WithDeepThoughtEnabledAndOngoingChat.args = {
|
|
|
194
196
|
sessionID: '1234',
|
|
195
197
|
loginToken: 'abcd',
|
|
196
198
|
};
|
|
199
|
+
|
|
200
|
+
export const ForBoardOfExperts = Template.bind({});
|
|
201
|
+
ForBoardOfExperts.args = {
|
|
202
|
+
memori: {
|
|
203
|
+
...memori,
|
|
204
|
+
enableBoardOfExperts: true,
|
|
205
|
+
},
|
|
206
|
+
history,
|
|
207
|
+
setShowPositionDrawer: () => {},
|
|
208
|
+
setShowSettingsDrawer: () => {},
|
|
209
|
+
showExperts: true,
|
|
210
|
+
clearHistory: () => {},
|
|
211
|
+
speakerMuted: false,
|
|
212
|
+
hasUserActivatedSpeak: false,
|
|
213
|
+
showShare: false,
|
|
214
|
+
showSettings: false,
|
|
215
|
+
loginToken: 'abcd',
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export const ForBoardOfExpertsAndOngoingChat = Template.bind({});
|
|
219
|
+
ForBoardOfExpertsAndOngoingChat.args = {
|
|
220
|
+
memori: {
|
|
221
|
+
...memori,
|
|
222
|
+
enableBoardOfExperts: true,
|
|
223
|
+
},
|
|
224
|
+
history,
|
|
225
|
+
setShowPositionDrawer: () => {},
|
|
226
|
+
setShowSettingsDrawer: () => {},
|
|
227
|
+
showExperts: true,
|
|
228
|
+
clearHistory: () => {},
|
|
229
|
+
speakerMuted: false,
|
|
230
|
+
hasUserActivatedSpeak: true,
|
|
231
|
+
showShare: false,
|
|
232
|
+
showSettings: false,
|
|
233
|
+
sessionID: '1234',
|
|
234
|
+
loginToken: 'abcd',
|
|
235
|
+
};
|
|
@@ -11,6 +11,7 @@ it('renders Header unchanged', () => {
|
|
|
11
11
|
setShowPositionDrawer={jest.fn()}
|
|
12
12
|
setShowSettingsDrawer={jest.fn()}
|
|
13
13
|
setShowKnownFactsDrawer={jest.fn()}
|
|
14
|
+
setShowExpertsDrawer={jest.fn()}
|
|
14
15
|
speakerMuted={false}
|
|
15
16
|
setSpeakerMuted={jest.fn()}
|
|
16
17
|
hasUserActivatedSpeak={false}
|
|
@@ -38,6 +39,7 @@ it('renders Header with position unchanged', () => {
|
|
|
38
39
|
setShowPositionDrawer={jest.fn()}
|
|
39
40
|
setShowSettingsDrawer={jest.fn()}
|
|
40
41
|
setShowKnownFactsDrawer={jest.fn()}
|
|
42
|
+
setShowExpertsDrawer={jest.fn()}
|
|
41
43
|
speakerMuted={false}
|
|
42
44
|
setSpeakerMuted={jest.fn()}
|
|
43
45
|
hasUserActivatedSpeak={false}
|
|
@@ -57,6 +59,7 @@ it('renders Header with speaker muted unchanged', () => {
|
|
|
57
59
|
setShowPositionDrawer={jest.fn()}
|
|
58
60
|
setShowSettingsDrawer={jest.fn()}
|
|
59
61
|
setShowKnownFactsDrawer={jest.fn()}
|
|
62
|
+
setShowExpertsDrawer={jest.fn()}
|
|
60
63
|
speakerMuted={true}
|
|
61
64
|
setSpeakerMuted={jest.fn()}
|
|
62
65
|
hasUserActivatedSpeak={false}
|
|
@@ -76,6 +79,7 @@ it('renders Header with share button unchanged', () => {
|
|
|
76
79
|
setShowPositionDrawer={jest.fn()}
|
|
77
80
|
setShowSettingsDrawer={jest.fn()}
|
|
78
81
|
setShowKnownFactsDrawer={jest.fn()}
|
|
82
|
+
setShowExpertsDrawer={jest.fn()}
|
|
79
83
|
speakerMuted={false}
|
|
80
84
|
setSpeakerMuted={jest.fn()}
|
|
81
85
|
hasUserActivatedSpeak={false}
|
|
@@ -95,6 +99,7 @@ it('renders Header with settings button unchanged', () => {
|
|
|
95
99
|
setShowPositionDrawer={jest.fn()}
|
|
96
100
|
setShowSettingsDrawer={jest.fn()}
|
|
97
101
|
setShowKnownFactsDrawer={jest.fn()}
|
|
102
|
+
setShowExpertsDrawer={jest.fn()}
|
|
98
103
|
speakerMuted={false}
|
|
99
104
|
setSpeakerMuted={jest.fn()}
|
|
100
105
|
hasUserActivatedSpeak={false}
|
|
@@ -114,6 +119,7 @@ it('renders Header with clear button unchanged', () => {
|
|
|
114
119
|
setShowPositionDrawer={jest.fn()}
|
|
115
120
|
setShowSettingsDrawer={jest.fn()}
|
|
116
121
|
setShowKnownFactsDrawer={jest.fn()}
|
|
122
|
+
setShowExpertsDrawer={jest.fn()}
|
|
117
123
|
speakerMuted={false}
|
|
118
124
|
setSpeakerMuted={jest.fn()}
|
|
119
125
|
hasUserActivatedSpeak={false}
|
|
@@ -134,6 +140,7 @@ it('renders Header with user activated speak unchanged', () => {
|
|
|
134
140
|
setShowPositionDrawer={jest.fn()}
|
|
135
141
|
setShowSettingsDrawer={jest.fn()}
|
|
136
142
|
setShowKnownFactsDrawer={jest.fn()}
|
|
143
|
+
setShowExpertsDrawer={jest.fn()}
|
|
137
144
|
speakerMuted={false}
|
|
138
145
|
setSpeakerMuted={jest.fn()}
|
|
139
146
|
hasUserActivatedSpeak={true}
|
|
@@ -156,6 +163,7 @@ it('renders Header with deep thought unchanged', () => {
|
|
|
156
163
|
setShowPositionDrawer={jest.fn()}
|
|
157
164
|
setShowSettingsDrawer={jest.fn()}
|
|
158
165
|
setShowKnownFactsDrawer={jest.fn()}
|
|
166
|
+
setShowExpertsDrawer={jest.fn()}
|
|
159
167
|
speakerMuted={false}
|
|
160
168
|
setSpeakerMuted={jest.fn()}
|
|
161
169
|
hasUserActivatedSpeak={false}
|
|
@@ -179,6 +187,56 @@ it('renders Header with deep thought and session open unchanged', () => {
|
|
|
179
187
|
setShowPositionDrawer={jest.fn()}
|
|
180
188
|
setShowSettingsDrawer={jest.fn()}
|
|
181
189
|
setShowKnownFactsDrawer={jest.fn()}
|
|
190
|
+
setShowExpertsDrawer={jest.fn()}
|
|
191
|
+
speakerMuted={false}
|
|
192
|
+
setSpeakerMuted={jest.fn()}
|
|
193
|
+
hasUserActivatedSpeak={true}
|
|
194
|
+
showShare={false}
|
|
195
|
+
showSettings={false}
|
|
196
|
+
clearHistory={jest.fn()}
|
|
197
|
+
sessionID="1234"
|
|
198
|
+
loginToken="abcd"
|
|
199
|
+
/>
|
|
200
|
+
);
|
|
201
|
+
expect(container).toMatchSnapshot();
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it('renders Header for board of experts unchanged', () => {
|
|
205
|
+
const { container } = render(
|
|
206
|
+
<Header
|
|
207
|
+
memori={{
|
|
208
|
+
...memori,
|
|
209
|
+
enableBoardOfExperts: true,
|
|
210
|
+
}}
|
|
211
|
+
history={history}
|
|
212
|
+
setShowPositionDrawer={jest.fn()}
|
|
213
|
+
setShowSettingsDrawer={jest.fn()}
|
|
214
|
+
setShowKnownFactsDrawer={jest.fn()}
|
|
215
|
+
setShowExpertsDrawer={jest.fn()}
|
|
216
|
+
speakerMuted={false}
|
|
217
|
+
setSpeakerMuted={jest.fn()}
|
|
218
|
+
hasUserActivatedSpeak={false}
|
|
219
|
+
showShare={false}
|
|
220
|
+
showSettings={false}
|
|
221
|
+
clearHistory={jest.fn()}
|
|
222
|
+
loginToken="abcd"
|
|
223
|
+
/>
|
|
224
|
+
);
|
|
225
|
+
expect(container).toMatchSnapshot();
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
it('renders Header for board of experts with session open unchanged', () => {
|
|
229
|
+
const { container } = render(
|
|
230
|
+
<Header
|
|
231
|
+
memori={{
|
|
232
|
+
...memori,
|
|
233
|
+
enableBoardOfExperts: true,
|
|
234
|
+
}}
|
|
235
|
+
history={history}
|
|
236
|
+
setShowPositionDrawer={jest.fn()}
|
|
237
|
+
setShowSettingsDrawer={jest.fn()}
|
|
238
|
+
setShowKnownFactsDrawer={jest.fn()}
|
|
239
|
+
setShowExpertsDrawer={jest.fn()}
|
|
182
240
|
speakerMuted={false}
|
|
183
241
|
setSpeakerMuted={jest.fn()}
|
|
184
242
|
hasUserActivatedSpeak={true}
|
|
@@ -19,6 +19,7 @@ import Fullscreen from '../icons/Fullscreen';
|
|
|
19
19
|
import Refresh from '../icons/Refresh';
|
|
20
20
|
import Clear from '../icons/Clear';
|
|
21
21
|
import DeepThought from '../icons/DeepThought';
|
|
22
|
+
import Group from '../icons/Group';
|
|
22
23
|
|
|
23
24
|
export interface Props {
|
|
24
25
|
className?: string;
|
|
@@ -29,6 +30,7 @@ export interface Props {
|
|
|
29
30
|
setShowPositionDrawer: (show: boolean) => void;
|
|
30
31
|
setShowSettingsDrawer: (show: boolean) => void;
|
|
31
32
|
setShowKnownFactsDrawer: (show: boolean) => void;
|
|
33
|
+
setShowExpertsDrawer: (show: boolean) => void;
|
|
32
34
|
speakerMuted: boolean;
|
|
33
35
|
setSpeakerMuted: (mute: boolean) => void;
|
|
34
36
|
hasUserActivatedSpeak?: boolean;
|
|
@@ -51,6 +53,7 @@ const Header: React.FC<Props> = ({
|
|
|
51
53
|
setShowPositionDrawer,
|
|
52
54
|
setShowSettingsDrawer,
|
|
53
55
|
setShowKnownFactsDrawer,
|
|
56
|
+
setShowExpertsDrawer,
|
|
54
57
|
speakerMuted,
|
|
55
58
|
setSpeakerMuted,
|
|
56
59
|
hasUserActivatedSpeak = false,
|
|
@@ -142,6 +145,17 @@ const Header: React.FC<Props> = ({
|
|
|
142
145
|
title={t('knownFacts.title') || 'Known facts'}
|
|
143
146
|
/>
|
|
144
147
|
)}
|
|
148
|
+
{memori.enableBoardOfExperts && (
|
|
149
|
+
<Button
|
|
150
|
+
primary
|
|
151
|
+
shape="circle"
|
|
152
|
+
icon={<Group />}
|
|
153
|
+
className="memori-header--button memori-header--button--experts"
|
|
154
|
+
disabled={!hasUserActivatedSpeak || !sessionID}
|
|
155
|
+
onClick={() => setShowExpertsDrawer(true)}
|
|
156
|
+
title={t('widget.showExpertsInTheBoard') || 'Experts in this board'}
|
|
157
|
+
/>
|
|
158
|
+
)}
|
|
145
159
|
{showSpeaker && (
|
|
146
160
|
<Button
|
|
147
161
|
primary
|
|
@@ -1,5 +1,176 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
+
exports[`renders Header for board of experts unchanged 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
class="memori-header"
|
|
7
|
+
>
|
|
8
|
+
<button
|
|
9
|
+
class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button--experts"
|
|
10
|
+
disabled=""
|
|
11
|
+
title="widget.showExpertsInTheBoard"
|
|
12
|
+
>
|
|
13
|
+
<span
|
|
14
|
+
class="memori-button--icon"
|
|
15
|
+
>
|
|
16
|
+
<svg
|
|
17
|
+
aria-hidden="true"
|
|
18
|
+
fill="none"
|
|
19
|
+
focusable="false"
|
|
20
|
+
height="16"
|
|
21
|
+
role="img"
|
|
22
|
+
stroke="currentColor"
|
|
23
|
+
stroke-linecap="round"
|
|
24
|
+
stroke-linejoin="round"
|
|
25
|
+
stroke-width="2"
|
|
26
|
+
viewBox="0 0 640 512"
|
|
27
|
+
width="20"
|
|
28
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
29
|
+
>
|
|
30
|
+
<path
|
|
31
|
+
d="M211.2 96a64 64 0 10-128 0 64 64 0 10128 0zM32 256c0 17.7 14.3 32 32 32h85.6c10.1-39.4 38.6-71.5 75.8-86.6-9.7-6-21.2-9.4-33.4-9.4H96c-35.3 0-64 28.7-64 64zm461.6 32H576c17.7 0 32-14.3 32-32 0-35.3-28.7-64-64-64h-96c-11.7 0-22.7 3.1-32.1 8.6 38.1 14.8 67.4 47.3 77.7 87.4zm-102.4-61.6c-6.9-1.6-14.2-2.4-21.6-2.4h-96c-8.5 0-16.7 1.1-24.5 3.1-30.8 8.1-55.6 31.1-66.1 60.9-3.5 10-5.5 20.8-5.5 32 0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32 0-11.2-1.9-22-5.5-32-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 10-128 0 64 64 0 10128 0zm-241.6 96a80 80 0 100-160 80 80 0 100 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32h576c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"
|
|
32
|
+
/>
|
|
33
|
+
</svg>
|
|
34
|
+
</span>
|
|
35
|
+
</button>
|
|
36
|
+
<button
|
|
37
|
+
class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button--speaker"
|
|
38
|
+
title="widget.sound"
|
|
39
|
+
>
|
|
40
|
+
<span
|
|
41
|
+
class="memori-button--icon"
|
|
42
|
+
>
|
|
43
|
+
<svg
|
|
44
|
+
aria-hidden="true"
|
|
45
|
+
focusable="false"
|
|
46
|
+
role="img"
|
|
47
|
+
viewBox="0 0 1024 1024"
|
|
48
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
49
|
+
>
|
|
50
|
+
<path
|
|
51
|
+
d="M625.9 115c-5.9 0-11.9 1.6-17.4 5.3L254 352H90c-8.8 0-16 7.2-16 16v288c0 8.8 7.2 16 16 16h164l354.5 231.7c5.5 3.6 11.6 5.3 17.4 5.3 16.7 0 32.1-13.3 32.1-32.1V147.1c0-18.8-15.4-32.1-32.1-32.1zM586 803L293.4 611.7l-18-11.7H146V424h129.4l17.9-11.7L586 221v582zm348-327H806c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16zm-41.9 261.8l-110.3-63.7a15.9 15.9 0 00-21.7 5.9l-19.9 34.5c-4.4 7.6-1.8 17.4 5.8 21.8L856.3 800a15.9 15.9 0 0021.7-5.9l19.9-34.5c4.4-7.6 1.7-17.4-5.8-21.8zM760 344a15.9 15.9 0 0021.7 5.9L892 286.2c7.6-4.4 10.2-14.2 5.8-21.8L878 230a15.9 15.9 0 00-21.7-5.9L746 287.8a15.99 15.99 0 00-5.8 21.8L760 344z"
|
|
52
|
+
/>
|
|
53
|
+
</svg>
|
|
54
|
+
</span>
|
|
55
|
+
</button>
|
|
56
|
+
<div
|
|
57
|
+
class="memori-export-history-button memori-header--button memori-header--button--export"
|
|
58
|
+
data-headlessui-state=""
|
|
59
|
+
title="write_and_speak.exportChatHistoryMessage"
|
|
60
|
+
>
|
|
61
|
+
<button
|
|
62
|
+
class="memori-button memori-button--circle memori-button--icon-only memori-button--disabled"
|
|
63
|
+
data-headlessui-state=""
|
|
64
|
+
disabled=""
|
|
65
|
+
id="headlessui-popover-button-:r1f:"
|
|
66
|
+
type="button"
|
|
67
|
+
>
|
|
68
|
+
<div
|
|
69
|
+
class="memori-button--icon"
|
|
70
|
+
>
|
|
71
|
+
<svg
|
|
72
|
+
aria-hidden="true"
|
|
73
|
+
focusable="false"
|
|
74
|
+
role="img"
|
|
75
|
+
viewBox="0 0 1024 1024"
|
|
76
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
77
|
+
>
|
|
78
|
+
<path
|
|
79
|
+
d="M464 512a48 48 0 1096 0 48 48 0 10-96 0zm200 0a48 48 0 1096 0 48 48 0 10-96 0zm-400 0a48 48 0 1096 0 48 48 0 10-96 0zm661.2-173.6c-22.6-53.7-55-101.9-96.3-143.3a444.35 444.35 0 00-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6.3-119.3 12.3-174.5 35.9a445.35 445.35 0 00-142 96.5c-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9A449.4 449.4 0 00112 714v152a46 46 0 0046 46h152.1A449.4 449.4 0 00510 960h2.1c59.9 0 118-11.6 172.7-34.3a444.48 444.48 0 00142.8-95.2c41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5.3-60.9-11.5-120-34.8-175.6zm-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-.6 99.6-39.7 192.9-110.1 262.7z"
|
|
80
|
+
/>
|
|
81
|
+
</svg>
|
|
82
|
+
</div>
|
|
83
|
+
</button>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
exports[`renders Header for board of experts with session open unchanged 1`] = `
|
|
90
|
+
<div>
|
|
91
|
+
<div
|
|
92
|
+
class="memori-header"
|
|
93
|
+
>
|
|
94
|
+
<button
|
|
95
|
+
class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button--experts"
|
|
96
|
+
title="widget.showExpertsInTheBoard"
|
|
97
|
+
>
|
|
98
|
+
<span
|
|
99
|
+
class="memori-button--icon"
|
|
100
|
+
>
|
|
101
|
+
<svg
|
|
102
|
+
aria-hidden="true"
|
|
103
|
+
fill="none"
|
|
104
|
+
focusable="false"
|
|
105
|
+
height="16"
|
|
106
|
+
role="img"
|
|
107
|
+
stroke="currentColor"
|
|
108
|
+
stroke-linecap="round"
|
|
109
|
+
stroke-linejoin="round"
|
|
110
|
+
stroke-width="2"
|
|
111
|
+
viewBox="0 0 640 512"
|
|
112
|
+
width="20"
|
|
113
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
114
|
+
>
|
|
115
|
+
<path
|
|
116
|
+
d="M211.2 96a64 64 0 10-128 0 64 64 0 10128 0zM32 256c0 17.7 14.3 32 32 32h85.6c10.1-39.4 38.6-71.5 75.8-86.6-9.7-6-21.2-9.4-33.4-9.4H96c-35.3 0-64 28.7-64 64zm461.6 32H576c17.7 0 32-14.3 32-32 0-35.3-28.7-64-64-64h-96c-11.7 0-22.7 3.1-32.1 8.6 38.1 14.8 67.4 47.3 77.7 87.4zm-102.4-61.6c-6.9-1.6-14.2-2.4-21.6-2.4h-96c-8.5 0-16.7 1.1-24.5 3.1-30.8 8.1-55.6 31.1-66.1 60.9-3.5 10-5.5 20.8-5.5 32 0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32 0-11.2-1.9-22-5.5-32-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 10-128 0 64 64 0 10128 0zm-241.6 96a80 80 0 100-160 80 80 0 100 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32h576c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"
|
|
117
|
+
/>
|
|
118
|
+
</svg>
|
|
119
|
+
</span>
|
|
120
|
+
</button>
|
|
121
|
+
<button
|
|
122
|
+
class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button--speaker"
|
|
123
|
+
title="widget.sound"
|
|
124
|
+
>
|
|
125
|
+
<span
|
|
126
|
+
class="memori-button--icon"
|
|
127
|
+
>
|
|
128
|
+
<svg
|
|
129
|
+
aria-hidden="true"
|
|
130
|
+
focusable="false"
|
|
131
|
+
role="img"
|
|
132
|
+
viewBox="0 0 1024 1024"
|
|
133
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
134
|
+
>
|
|
135
|
+
<path
|
|
136
|
+
d="M625.9 115c-5.9 0-11.9 1.6-17.4 5.3L254 352H90c-8.8 0-16 7.2-16 16v288c0 8.8 7.2 16 16 16h164l354.5 231.7c5.5 3.6 11.6 5.3 17.4 5.3 16.7 0 32.1-13.3 32.1-32.1V147.1c0-18.8-15.4-32.1-32.1-32.1zM586 803L293.4 611.7l-18-11.7H146V424h129.4l17.9-11.7L586 221v582zm348-327H806c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16zm-41.9 261.8l-110.3-63.7a15.9 15.9 0 00-21.7 5.9l-19.9 34.5c-4.4 7.6-1.8 17.4 5.8 21.8L856.3 800a15.9 15.9 0 0021.7-5.9l19.9-34.5c4.4-7.6 1.7-17.4-5.8-21.8zM760 344a15.9 15.9 0 0021.7 5.9L892 286.2c7.6-4.4 10.2-14.2 5.8-21.8L878 230a15.9 15.9 0 00-21.7-5.9L746 287.8a15.99 15.99 0 00-5.8 21.8L760 344z"
|
|
137
|
+
/>
|
|
138
|
+
</svg>
|
|
139
|
+
</span>
|
|
140
|
+
</button>
|
|
141
|
+
<div
|
|
142
|
+
class="memori-export-history-button memori-header--button memori-header--button--export"
|
|
143
|
+
data-headlessui-state=""
|
|
144
|
+
title="write_and_speak.exportChatHistoryMessage"
|
|
145
|
+
>
|
|
146
|
+
<button
|
|
147
|
+
aria-expanded="false"
|
|
148
|
+
class="memori-button memori-button--circle memori-button--icon-only memori-button--primary"
|
|
149
|
+
data-headlessui-state=""
|
|
150
|
+
id="headlessui-popover-button-:r1k:"
|
|
151
|
+
type="button"
|
|
152
|
+
>
|
|
153
|
+
<div
|
|
154
|
+
class="memori-button--icon"
|
|
155
|
+
>
|
|
156
|
+
<svg
|
|
157
|
+
aria-hidden="true"
|
|
158
|
+
focusable="false"
|
|
159
|
+
role="img"
|
|
160
|
+
viewBox="0 0 1024 1024"
|
|
161
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
162
|
+
>
|
|
163
|
+
<path
|
|
164
|
+
d="M464 512a48 48 0 1096 0 48 48 0 10-96 0zm200 0a48 48 0 1096 0 48 48 0 10-96 0zm-400 0a48 48 0 1096 0 48 48 0 10-96 0zm661.2-173.6c-22.6-53.7-55-101.9-96.3-143.3a444.35 444.35 0 00-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6.3-119.3 12.3-174.5 35.9a445.35 445.35 0 00-142 96.5c-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9A449.4 449.4 0 00112 714v152a46 46 0 0046 46h152.1A449.4 449.4 0 00510 960h2.1c59.9 0 118-11.6 172.7-34.3a444.48 444.48 0 00142.8-95.2c41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5.3-60.9-11.5-120-34.8-175.6zm-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-.6 99.6-39.7 192.9-110.1 262.7z"
|
|
165
|
+
/>
|
|
166
|
+
</svg>
|
|
167
|
+
</div>
|
|
168
|
+
</button>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
`;
|
|
173
|
+
|
|
3
174
|
exports[`renders Header unchanged 1`] = `
|
|
4
175
|
<div>
|
|
5
176
|
<div
|
|
@@ -267,17 +267,19 @@ const KnownFacts = ({
|
|
|
267
267
|
<div className="memori--table--pagination--pages">
|
|
268
268
|
<Button
|
|
269
269
|
shape="circle"
|
|
270
|
-
disabled={pageIndex === 0}
|
|
270
|
+
disabled={pageIndex === 0 || pageIndex < numberOfResults}
|
|
271
271
|
padded={false}
|
|
272
272
|
title={t('previous') || 'Previous'}
|
|
273
273
|
icon={<ChevronLeft />}
|
|
274
274
|
onClick={() => {
|
|
275
|
-
|
|
276
|
-
|
|
275
|
+
let from =
|
|
276
|
+
(pageIndex / numberOfResults - 1) * numberOfResults;
|
|
277
|
+
setPageIndex(from);
|
|
278
|
+
fetchKnownFacts(undefined, from, numberOfResults);
|
|
277
279
|
}}
|
|
278
280
|
/>
|
|
279
281
|
<span className="memori--table--pagination--pages--current">
|
|
280
|
-
{pageIndex + 1} /{' '}
|
|
282
|
+
{Math.ceil(pageIndex / numberOfResults) + 1} /{' '}
|
|
281
283
|
{Math.ceil(knownFactsCount / numberOfResults)}
|
|
282
284
|
</span>
|
|
283
285
|
<Button
|
|
@@ -286,11 +288,14 @@ const KnownFacts = ({
|
|
|
286
288
|
title={t('next') || 'Next'}
|
|
287
289
|
icon={<ChevronRight />}
|
|
288
290
|
disabled={
|
|
289
|
-
(pageIndex + 1) * numberOfResults >=
|
|
291
|
+
(pageIndex / numberOfResults + 1) * numberOfResults >=
|
|
292
|
+
knownFactsCount
|
|
290
293
|
}
|
|
291
294
|
onClick={() => {
|
|
292
|
-
|
|
293
|
-
|
|
295
|
+
let from =
|
|
296
|
+
(pageIndex / numberOfResults + 1) * numberOfResults;
|
|
297
|
+
setPageIndex(from);
|
|
298
|
+
fetchKnownFacts(undefined, from, numberOfResults);
|
|
294
299
|
}}
|
|
295
300
|
/>
|
|
296
301
|
</div>
|
|
@@ -306,7 +311,8 @@ const KnownFacts = ({
|
|
|
306
311
|
displayValue={`${numberOfResults} / ${t('page') || 'page'}`}
|
|
307
312
|
onChange={value => {
|
|
308
313
|
setNumberOfResults(value);
|
|
309
|
-
|
|
314
|
+
setPageIndex(0);
|
|
315
|
+
fetchKnownFacts(undefined, 0, value);
|
|
310
316
|
}}
|
|
311
317
|
/>
|
|
312
318
|
</nav>
|
|
@@ -52,6 +52,7 @@ import PoweredBy from '../PoweredBy/PoweredBy';
|
|
|
52
52
|
import AgeVerificationModal from '../AgeVerificationModal/AgeVerificationModal';
|
|
53
53
|
import SettingsDrawer from '../SettingsDrawer/SettingsDrawer';
|
|
54
54
|
import KnownFacts from '../KnownFacts/KnownFacts';
|
|
55
|
+
import ExpertsDrawer from '../ExpertsDrawer/ExpertsDrawer';
|
|
55
56
|
|
|
56
57
|
// Layout
|
|
57
58
|
import FullPageLayout from '../layouts/FullPage';
|
|
@@ -455,6 +456,7 @@ const MemoriWidget = ({
|
|
|
455
456
|
const [showPositionDrawer, setShowPositionDrawer] = useState(false);
|
|
456
457
|
const [showSettingsDrawer, setShowSettingsDrawer] = useState(false);
|
|
457
458
|
const [showKnownFactsDrawer, setShowKnownFactsDrawer] = useState(false);
|
|
459
|
+
const [showExpertsDrawer, setShowExpertsDrawer] = useState(false);
|
|
458
460
|
const [muteSpeaker, setMuteSpeaker] = useState(false);
|
|
459
461
|
const [continuousSpeech, setContinuousSpeech] = useState(false);
|
|
460
462
|
const [continuousSpeechTimeout, setContinuousSpeechTimeout] = useState(2);
|
|
@@ -2595,6 +2597,7 @@ const MemoriWidget = ({
|
|
|
2595
2597
|
setShowPositionDrawer,
|
|
2596
2598
|
setShowSettingsDrawer,
|
|
2597
2599
|
setShowKnownFactsDrawer,
|
|
2600
|
+
setShowExpertsDrawer,
|
|
2598
2601
|
showSpeaker: !!AZURE_COGNITIVE_SERVICES_TTS_KEY,
|
|
2599
2602
|
speakerMuted: muteSpeaker || speakerMuted,
|
|
2600
2603
|
setSpeakerMuted: mute => {
|
|
@@ -2920,6 +2923,17 @@ const MemoriWidget = ({
|
|
|
2920
2923
|
closeDrawer={() => setShowKnownFactsDrawer(false)}
|
|
2921
2924
|
/>
|
|
2922
2925
|
)}
|
|
2926
|
+
|
|
2927
|
+
{showExpertsDrawer && !!experts && (
|
|
2928
|
+
<ExpertsDrawer
|
|
2929
|
+
apiUrl={apiUrl}
|
|
2930
|
+
baseUrl={baseUrl}
|
|
2931
|
+
tenant={tenant}
|
|
2932
|
+
experts={experts}
|
|
2933
|
+
open={showExpertsDrawer}
|
|
2934
|
+
onClose={() => setShowExpertsDrawer(false)}
|
|
2935
|
+
/>
|
|
2936
|
+
)}
|
|
2923
2937
|
</div>
|
|
2924
2938
|
);
|
|
2925
2939
|
};
|