@memori.ai/memori-react 4.2.0 → 4.3.0
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 +7 -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/MemoriWidget/MemoriWidget.js +4 -1
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- 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/MemoriWidget/MemoriWidget.js +4 -1
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- 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/MemoriWidget/MemoriWidget.tsx +14 -0
- package/src/index.stories.tsx +17 -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,67 @@
|
|
|
1
|
+
.memori--experts-drawer {
|
|
2
|
+
z-index: 1000;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.memori--experts-drawer .memori-drawer--panel {
|
|
6
|
+
--memori-drawer--width: 100%;
|
|
7
|
+
--memori-drawer--width--md: 60%;
|
|
8
|
+
--memori-drawer--width--lg: 40%;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
h2.memori--experts-drawer--title {
|
|
12
|
+
margin: 0;
|
|
13
|
+
font-size: inherit;
|
|
14
|
+
font-weight: 400;
|
|
15
|
+
line-height: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
ul.memori--experts-drawer--list {
|
|
19
|
+
padding: 0;
|
|
20
|
+
margin: 0;
|
|
21
|
+
list-style: none;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
li.memori--experts-drawer--item {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-wrap: nowrap;
|
|
27
|
+
align-items: center;
|
|
28
|
+
margin-top: 1rem;
|
|
29
|
+
margin-bottom: 1rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
figure.memori--experts-drawer--avatar {
|
|
33
|
+
display: flex;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
width: 1.5rem;
|
|
36
|
+
height: 1.5rem;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
border-radius: 50%;
|
|
40
|
+
margin: 0 0.5rem 0 0;
|
|
41
|
+
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
figure.memori--experts-drawer--avatar img {
|
|
45
|
+
min-width: 100%;
|
|
46
|
+
min-height: 100%;
|
|
47
|
+
object-fit: cover;
|
|
48
|
+
object-position: center;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.memori--experts-drawer--content {
|
|
52
|
+
flex: 1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
h3.memori--experts-drawer--name {
|
|
56
|
+
margin: 0;
|
|
57
|
+
font-size: 0.875rem;
|
|
58
|
+
font-weight: 400;
|
|
59
|
+
line-height: 1.25rem;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
p.memori--experts-drawer--description {
|
|
63
|
+
margin: 0;
|
|
64
|
+
font-size: 0.75rem;
|
|
65
|
+
font-weight: 400;
|
|
66
|
+
line-height: 1rem;
|
|
67
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Meta, Story } from '@storybook/react';
|
|
3
|
+
import I18nWrapper from '../../I18nWrapper';
|
|
4
|
+
import ExpertsDrawer, { Props } from './ExpertsDrawer';
|
|
5
|
+
import { tenant, expertReference } from '../../mocks/data';
|
|
6
|
+
import './ExpertsDrawer.css';
|
|
7
|
+
|
|
8
|
+
const meta: Meta = {
|
|
9
|
+
title: 'Widget/ExpertsDrawer',
|
|
10
|
+
component: ExpertsDrawer,
|
|
11
|
+
argTypes: {
|
|
12
|
+
open: {
|
|
13
|
+
control: {
|
|
14
|
+
type: 'boolean',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
parameters: {
|
|
19
|
+
controls: { expanded: true },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default meta;
|
|
24
|
+
|
|
25
|
+
const Template: Story<Props> = args => {
|
|
26
|
+
return (
|
|
27
|
+
<I18nWrapper>
|
|
28
|
+
<ExpertsDrawer
|
|
29
|
+
{...args}
|
|
30
|
+
baseUrl="https://app.twincreator.com"
|
|
31
|
+
apiUrl="https://backend.memori.ai"
|
|
32
|
+
tenant={tenant}
|
|
33
|
+
experts={[
|
|
34
|
+
expertReference,
|
|
35
|
+
{
|
|
36
|
+
...expertReference,
|
|
37
|
+
expertID: '2',
|
|
38
|
+
name: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
|
|
39
|
+
description:
|
|
40
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
41
|
+
},
|
|
42
|
+
]}
|
|
43
|
+
/>
|
|
44
|
+
</I18nWrapper>
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// By passing using the Args format for exported stories, you can control the props for a component for reuse in a test
|
|
49
|
+
// https://storybook.js.org/docs/react/workflows/unit-testing
|
|
50
|
+
export const Default = Template.bind({});
|
|
51
|
+
Default.args = {
|
|
52
|
+
open: true,
|
|
53
|
+
onClose: () => {},
|
|
54
|
+
};
|
|
@@ -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
|