@stream-io/video-react-sdk 1.31.6 → 1.31.7
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 +11 -0
- package/dist/index.cjs.js +14 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +14 -4
- package/dist/index.es.js.map +1 -1
- package/dist/src/utilities/index.d.ts +1 -0
- package/dist/src/utilities/normalizeString.d.ts +5 -0
- package/dist/src/utilities/normalizeString.test.d.ts +1 -0
- package/package.json +3 -3
- package/src/components/CallParticipantsList/CallParticipantsList.tsx +6 -2
- package/src/utilities/index.ts +1 -0
- package/src/utilities/normalizeString.test.ts +51 -0
- package/src/utilities/normalizeString.ts +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-sdk",
|
|
3
|
-
"version": "1.31.
|
|
3
|
+
"version": "1.31.7",
|
|
4
4
|
"main": "./dist/index.cjs.js",
|
|
5
5
|
"module": "./dist/index.es.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@floating-ui/react": "^0.27.6",
|
|
34
|
-
"@stream-io/video-client": "1.41.
|
|
34
|
+
"@stream-io/video-client": "1.41.2",
|
|
35
35
|
"@stream-io/video-filters-web": "0.7.1",
|
|
36
|
-
"@stream-io/video-react-bindings": "1.13.
|
|
36
|
+
"@stream-io/video-react-bindings": "1.13.2",
|
|
37
37
|
"chart.js": "^4.4.4",
|
|
38
38
|
"clsx": "^2.0.0",
|
|
39
39
|
"react-chartjs-2": "^5.3.0"
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
MenuToggle,
|
|
32
32
|
ToggleMenuButtonProps,
|
|
33
33
|
} from '../Menu';
|
|
34
|
+
import { normalizeString } from '../../utilities';
|
|
34
35
|
|
|
35
36
|
type CallParticipantListProps = {
|
|
36
37
|
/** Click event listener function to be invoked in order to dismiss/hide the CallParticipantsList from the UI */
|
|
@@ -151,8 +152,11 @@ const ActiveUsersSearchResults = ({
|
|
|
151
152
|
|
|
152
153
|
const activeUsersSearchFn = useCallback(
|
|
153
154
|
async (queryString: string) => {
|
|
154
|
-
const
|
|
155
|
-
|
|
155
|
+
const normalizedQuery = normalizeString(queryString);
|
|
156
|
+
const queryRegExp = new RegExp(normalizedQuery, 'i');
|
|
157
|
+
return participants.filter((p) =>
|
|
158
|
+
normalizeString(p.name).match(queryRegExp),
|
|
159
|
+
);
|
|
156
160
|
},
|
|
157
161
|
[participants],
|
|
158
162
|
);
|
package/src/utilities/index.ts
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { test, type TestContext } from 'node:test';
|
|
2
|
+
import { normalizeString } from './normalizeString';
|
|
3
|
+
|
|
4
|
+
test('removes acute accents', (t: TestContext) => {
|
|
5
|
+
t.assert.strictEqual(normalizeString('Éva'), 'eva');
|
|
6
|
+
t.assert.strictEqual(normalizeString('café'), 'cafe');
|
|
7
|
+
t.assert.strictEqual(normalizeString('résumé'), 'resume');
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
test('removes grave accents', (t: TestContext) => {
|
|
11
|
+
t.assert.strictEqual(normalizeString('à'), 'a');
|
|
12
|
+
t.assert.strictEqual(normalizeString('è'), 'e');
|
|
13
|
+
t.assert.strictEqual(normalizeString('Père'), 'pere');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('removes circumflex accents', (t: TestContext) => {
|
|
17
|
+
t.assert.strictEqual(normalizeString('château'), 'chateau');
|
|
18
|
+
t.assert.strictEqual(normalizeString('forêt'), 'foret');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('removes umlaut/diaeresis', (t: TestContext) => {
|
|
22
|
+
t.assert.strictEqual(normalizeString('Müller'), 'muller');
|
|
23
|
+
t.assert.strictEqual(normalizeString('naïve'), 'naive');
|
|
24
|
+
t.assert.strictEqual(normalizeString('Zoë'), 'zoe');
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('removes tilde', (t: TestContext) => {
|
|
28
|
+
t.assert.strictEqual(normalizeString('señor'), 'senor');
|
|
29
|
+
t.assert.strictEqual(normalizeString('São Paulo'), 'sao paulo');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('removes cedilla', (t: TestContext) => {
|
|
33
|
+
t.assert.strictEqual(normalizeString('François'), 'francois');
|
|
34
|
+
t.assert.strictEqual(normalizeString('façade'), 'facade');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('handles mixed diacritics', (t: TestContext) => {
|
|
38
|
+
t.assert.strictEqual(normalizeString('Éva Raposa'), 'eva raposa');
|
|
39
|
+
t.assert.strictEqual(normalizeString('Jürgen Müller'), 'jurgen muller');
|
|
40
|
+
t.assert.strictEqual(normalizeString('Crème brûlée'), 'creme brulee');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('preserves non-accented characters', (t: TestContext) => {
|
|
44
|
+
t.assert.strictEqual(normalizeString('hello world'), 'hello world');
|
|
45
|
+
t.assert.strictEqual(normalizeString('test123'), 'test123');
|
|
46
|
+
t.assert.strictEqual(normalizeString('user@email.com'), 'user@email.com');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('handles empty string', (t: TestContext) => {
|
|
50
|
+
t.assert.strictEqual(normalizeString(''), '');
|
|
51
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes a string for diacritic-insensitive comparison.
|
|
3
|
+
* E.g., "Éva" becomes "eva", allowing "eva" to match "Éva".
|
|
4
|
+
*/
|
|
5
|
+
export const normalizeString = (value: string) =>
|
|
6
|
+
value
|
|
7
|
+
.normalize('NFD')
|
|
8
|
+
.replace(/\p{Diacritic}/gu, '')
|
|
9
|
+
.toLowerCase();
|