@fishjam-cloud/react-native-client 0.2.3 → 0.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/LICENSE +201 -0
- package/README.md +14 -401
- package/android/build.gradle +3 -3
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +25 -12
- package/android/src/main/java/io/fishjam/reactnative/Errors.kt +3 -2
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +122 -105
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +24 -33
- package/android/src/main/java/io/fishjam/reactnative/VideoPreviewView.kt +13 -3
- package/build/RNFishjamClientModule.d.ts +17 -15
- package/build/RNFishjamClientModule.d.ts.map +1 -1
- package/build/RNFishjamClientModule.js.map +1 -1
- package/build/common/client.d.ts +4 -4
- package/build/common/client.d.ts.map +1 -1
- package/build/common/client.js +5 -5
- package/build/common/client.js.map +1 -1
- package/build/common/metadata.d.ts +3 -3
- package/build/common/metadata.d.ts.map +1 -1
- package/build/common/metadata.js +4 -4
- package/build/common/metadata.js.map +1 -1
- package/build/common/webRTC.d.ts +0 -8
- package/build/common/webRTC.d.ts.map +1 -1
- package/build/common/webRTC.js +0 -9
- package/build/common/webRTC.js.map +1 -1
- package/build/components/VideoRendererView.d.ts +1 -1
- package/build/components/VideoRendererView.js +1 -1
- package/build/components/VideoRendererView.js.map +1 -1
- package/build/debug/common/webRTC.d.ts +9 -0
- package/build/debug/common/webRTC.d.ts.map +1 -0
- package/build/debug/common/webRTC.js +11 -0
- package/build/debug/common/webRTC.js.map +1 -0
- package/build/debug/index.d.ts +4 -0
- package/build/debug/index.d.ts.map +1 -0
- package/build/debug/index.js +3 -0
- package/build/debug/index.js.map +1 -0
- package/build/debug/stats/types.d.ts.map +1 -0
- package/build/debug/stats/types.js.map +1 -0
- package/build/debug/stats/useRTCStatistics.d.ts.map +1 -0
- package/build/{stats → debug/stats}/useRTCStatistics.js +1 -1
- package/build/debug/stats/useRTCStatistics.js.map +1 -0
- package/build/hooks/useCamera.d.ts +17 -0
- package/build/hooks/useCamera.d.ts.map +1 -1
- package/build/hooks/useCamera.js +1 -1
- package/build/hooks/useCamera.js.map +1 -1
- package/build/hooks/useFishjamEvent.d.ts +2 -1
- package/build/hooks/useFishjamEvent.d.ts.map +1 -1
- package/build/hooks/useFishjamEvent.js +2 -1
- package/build/hooks/useFishjamEvent.js.map +1 -1
- package/build/hooks/usePeerStatus.d.ts +19 -0
- package/build/hooks/usePeerStatus.d.ts.map +1 -0
- package/build/hooks/usePeerStatus.js +18 -0
- package/build/hooks/usePeerStatus.js.map +1 -0
- package/build/hooks/{useParticipants.d.ts → usePeers.d.ts} +11 -11
- package/build/hooks/usePeers.d.ts.map +1 -0
- package/build/hooks/usePeers.js +34 -0
- package/build/hooks/usePeers.js.map +1 -0
- package/build/hooks/useScreenShare.d.ts +57 -0
- package/build/hooks/useScreenShare.d.ts.map +1 -0
- package/build/hooks/useScreenShare.js +85 -0
- package/build/hooks/useScreenShare.js.map +1 -0
- package/build/index.d.ts +8 -7
- package/build/index.d.ts.map +1 -1
- package/build/index.js +4 -4
- package/build/index.js.map +1 -1
- package/debug/package.json +4 -0
- package/ios/Events.swift +29 -13
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +110 -107
- package/ios/RNFishjamClientModule.swift +22 -29
- package/ios/VideoPreviewView.swift +27 -9
- package/package.json +14 -11
- package/plugin/broadcastExtensionFiles/FishjamBroadcastSampleHandler.swift +1 -1
- package/plugin/build/withFishjamIos.js +3 -3
- package/build/hooks/useParticipants.d.ts.map +0 -1
- package/build/hooks/useParticipants.js +0 -34
- package/build/hooks/useParticipants.js.map +0 -1
- package/build/hooks/useScreencast.d.ts +0 -57
- package/build/hooks/useScreencast.d.ts.map +0 -1
- package/build/hooks/useScreencast.js +0 -85
- package/build/hooks/useScreencast.js.map +0 -1
- package/build/stats/types.d.ts.map +0 -1
- package/build/stats/types.js.map +0 -1
- package/build/stats/useRTCStatistics.d.ts.map +0 -1
- package/build/stats/useRTCStatistics.js.map +0 -1
- /package/build/{stats → debug/stats}/types.d.ts +0 -0
- /package/build/{stats → debug/stats}/types.js +0 -0
- /package/build/{stats → debug/stats}/useRTCStatistics.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fishjam-cloud/react-native-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A React Native client for Fishjam Cloud",
|
|
5
5
|
"author": "Fishjam Cloud Team",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,20 +22,22 @@
|
|
|
22
22
|
"keywords": [
|
|
23
23
|
"react-native",
|
|
24
24
|
"expo",
|
|
25
|
-
"
|
|
26
|
-
"fishjam-cloud",
|
|
25
|
+
"FishjamCloud",
|
|
27
26
|
"MembraneWebRTC",
|
|
28
|
-
"
|
|
27
|
+
"webRTC",
|
|
28
|
+
"streaming",
|
|
29
|
+
"video",
|
|
30
|
+
"audio"
|
|
29
31
|
],
|
|
30
|
-
"repository":
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/fishjam-cloud/mobile-client-sdk.git",
|
|
35
|
+
"directory": "packages/react-native-client"
|
|
36
|
+
},
|
|
31
37
|
"bugs": {
|
|
32
38
|
"url": "https://github.com/fishjam-cloud/mobile-client-sdk/issues"
|
|
33
39
|
},
|
|
34
40
|
"homepage": "https://fishjam.io",
|
|
35
|
-
"publishConfig": {
|
|
36
|
-
"registry": "https://registry.npmjs.org/",
|
|
37
|
-
"access": "public"
|
|
38
|
-
},
|
|
39
41
|
"dependencies": {
|
|
40
42
|
"phoenix": "^1.7.6",
|
|
41
43
|
"promise-fs": "^2.1.1",
|
|
@@ -43,10 +45,10 @@
|
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
47
|
"@testing-library/react": "^15.0.7",
|
|
46
|
-
"@types/lodash": "^4.17.
|
|
48
|
+
"@types/lodash": "^4.17.9",
|
|
47
49
|
"@types/phoenix": "^1.6.5",
|
|
48
50
|
"@types/promise-fs": "^2.1.2",
|
|
49
|
-
"@types/react": "^18.3.
|
|
51
|
+
"@types/react": "^18.3.9",
|
|
50
52
|
"expo": "^51.0.32",
|
|
51
53
|
"expo-module-scripts": "^3.5.2",
|
|
52
54
|
"expo-modules-core": "^1.12.24",
|
|
@@ -79,6 +81,7 @@
|
|
|
79
81
|
},
|
|
80
82
|
"files": [
|
|
81
83
|
"build/**",
|
|
84
|
+
"debug",
|
|
82
85
|
"android/build.gradle",
|
|
83
86
|
"android/src/**",
|
|
84
87
|
"ios/*.swift",
|
|
@@ -9,7 +9,7 @@ let appGroup = "{{GROUP_IDENTIFIER}}"
|
|
|
9
9
|
|
|
10
10
|
let logger = OSLog(subsystem: "{{BUNDLE_IDENTIFIER}}.FishjamBroadcastSampleHandler", category: "Broadcaster")
|
|
11
11
|
|
|
12
|
-
/// An example `SampleHandler` utilizing `BroadcastSampleSource` from `MembraneRTC` sending broadcast samples and necessary notification enabling device's
|
|
12
|
+
/// An example `SampleHandler` utilizing `BroadcastSampleSource` from `MembraneRTC` sending broadcast samples and necessary notification enabling device's screen share.
|
|
13
13
|
class FishjamBroadcastSampleHandler: RPBroadcastSampleHandler {
|
|
14
14
|
let broadcastSource = BroadcastSampleSource(appGroup: appGroup)
|
|
15
15
|
var started: Bool = false
|
|
@@ -99,14 +99,14 @@ const withInfoPlistConstants = (config) => {
|
|
|
99
99
|
return (0, config_plugins_1.withInfoPlist)(config, (config) => {
|
|
100
100
|
const bundleIdentifier = config.ios?.bundleIdentifier || '';
|
|
101
101
|
config.modResults['AppGroupName'] = `group.${bundleIdentifier}`;
|
|
102
|
-
config.modResults['
|
|
102
|
+
config.modResults['ScreenShareExtensionBundleId'] =
|
|
103
103
|
`${bundleIdentifier}.${SBE_TARGET_NAME}`;
|
|
104
104
|
return config;
|
|
105
105
|
});
|
|
106
106
|
};
|
|
107
107
|
/**
|
|
108
108
|
* Updates and copies required extension files.
|
|
109
|
-
* Our extension needs to be properly setup inside the
|
|
109
|
+
* Our extension needs to be properly setup inside the Xcode project. In order to do that we need to copy the files and update the pbxproj.
|
|
110
110
|
*/
|
|
111
111
|
const withFishjamSBE = (config, options) => {
|
|
112
112
|
return (0, config_plugins_1.withXcodeProject)(config, async (props) => {
|
|
@@ -128,7 +128,7 @@ const withFishjamSBE = (config, options) => {
|
|
|
128
128
|
console.error(`Error parsing iOS project: ${JSON.stringify(err)}`);
|
|
129
129
|
return;
|
|
130
130
|
}
|
|
131
|
-
if (xcodeProject.pbxTargetByName(
|
|
131
|
+
if (xcodeProject.pbxTargetByName(SBE_TARGET_NAME)) {
|
|
132
132
|
console.log(`${SBE_TARGET_NAME} already exists in project. Skipping...`);
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useParticipants.d.ts","sourceRoot":"","sources":["../../src/hooks/useParticipants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAIzE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IAEd,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE/B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAC5C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAE7E,MAAM,MAAM,WAAW,CACrB,mBAAmB,SAAS,eAAe,GAAG,eAAe,IAC3D;IACF;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,mBAAmB,CAAC;IAC9B;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAgBF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,mBAAmB,SAAS,eAAe,GAAG,eAAe;;EA0B9D"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
-
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
3
|
-
import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
|
|
4
|
-
function addIsActiveToTracks(participants) {
|
|
5
|
-
return participants.map((participant) => ({
|
|
6
|
-
...participant,
|
|
7
|
-
tracks: participant.tracks.map((track) => ({
|
|
8
|
-
...track,
|
|
9
|
-
isActive: track?.metadata?.active ?? true,
|
|
10
|
-
})),
|
|
11
|
-
}));
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* This hook provides live updates of room participants.
|
|
15
|
-
* @returns An array of room participants.
|
|
16
|
-
* @category Connection
|
|
17
|
-
* @group Hooks
|
|
18
|
-
*/
|
|
19
|
-
export function useParticipants() {
|
|
20
|
-
const [participants, setParticipants] = useState([]);
|
|
21
|
-
const updateActiveParticipants = useCallback((participants) => {
|
|
22
|
-
setParticipants(addIsActiveToTracks(participants));
|
|
23
|
-
}, []);
|
|
24
|
-
useFishjamEvent(ReceivableEvents.PeersUpdate, updateActiveParticipants);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
async function updateParticipants() {
|
|
27
|
-
const participants = await RNFishjamClientModule.getPeers();
|
|
28
|
-
setParticipants(addIsActiveToTracks(participants));
|
|
29
|
-
}
|
|
30
|
-
updateParticipants();
|
|
31
|
-
}, []);
|
|
32
|
-
return { participants };
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=useParticipants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useParticipants.js","sourceRoot":"","sources":["../../src/hooks/useParticipants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA8DtE,SAAS,mBAAmB,CAG1B,YAA6D;IAE7D,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxC,GAAG,WAAW;QACd,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzC,GAAG,KAAK;YACR,QAAQ,EACL,KAAsC,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;SACpE,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAG7B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAE9C,EAAE,CAAC,CAAC;IAEN,MAAM,wBAAwB,GAAG,WAAW,CAC1C,CAAC,YAAgD,EAAE,EAAE;QACnD,eAAe,CAAC,mBAAmB,CAAsB,YAAY,CAAC,CAAC,CAAC;IAC1E,CAAC,EACD,EAAE,CACH,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IAExE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,kBAAkB;YAC/B,MAAM,YAAY,GAChB,MAAM,qBAAqB,CAAC,QAAQ,EAAuB,CAAC;YAC9D,eAAe,CAAC,mBAAmB,CAAsB,YAAY,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,kBAAkB,EAAE,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport { GenericMetadata, TrackEncoding, TrackMetadata } from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type TrackType = 'Audio' | 'Video';\n\n/**\n * Type describing Voice Activity Detection statuses.\n *\n * speech - voice activity has been detected\n * silence - lack of voice activity has been detected\n */\nexport type VadStatus = 'silence' | 'speech';\n\ntype TrackBase = {\n id: string;\n type: TrackType;\n isActive: boolean;\n};\n\nexport type AudioTrack = TrackBase & {\n type: 'Audio';\n vadStatus: VadStatus | undefined;\n};\n\nexport type VideoTrack = TrackBase & {\n type: 'Video';\n // Encoding that is currently received. Only present for remote tracks.\n encoding: TrackEncoding | null;\n // The reason of currently selected encoding. Only present for remote tracks.\n encodingReason: EncodingReason | null;\n};\n\nexport type Track = VideoTrack | AudioTrack;\n/**\n * Type describing possible reasons of currently selected encoding.\n *\n * - other - the exact reason couldn't be determined\n * - encoding_inactive - previously selected encoding became inactive\n * - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding\n */\nexport type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';\n\nexport type Participant<\n ParticipantMetadata extends GenericMetadata = GenericMetadata,\n> = {\n /**\n * id used to identify a participant\n */\n id: string;\n /**\n * whether the participant is local or remote\n */\n isLocal: boolean;\n /**\n * a map indexed by strings, containing participant metadata from the server\n */\n metadata: ParticipantMetadata;\n /**\n * a list of participants's video and audio tracks\n */\n tracks: Track[];\n};\n\nfunction addIsActiveToTracks<\n ParticipantMetadata extends GenericMetadata = GenericMetadata,\n>(\n participants: ReadonlyArray<Participant<ParticipantMetadata>>,\n): Participant<ParticipantMetadata>[] {\n return participants.map((participant) => ({\n ...participant,\n tracks: participant.tracks.map((track) => ({\n ...track,\n isActive:\n (track as { metadata?: TrackMetadata })?.metadata?.active ?? true,\n })),\n }));\n}\n/**\n * This hook provides live updates of room participants.\n * @returns An array of room participants.\n * @category Connection\n * @group Hooks\n */\nexport function useParticipants<\n ParticipantMetadata extends GenericMetadata = GenericMetadata,\n>() {\n const [participants, setParticipants] = useState<\n Participant<ParticipantMetadata>[]\n >([]);\n\n const updateActiveParticipants = useCallback(\n (participants: Participant<ParticipantMetadata>[]) => {\n setParticipants(addIsActiveToTracks<ParticipantMetadata>(participants));\n },\n [],\n );\n\n useFishjamEvent(ReceivableEvents.PeersUpdate, updateActiveParticipants);\n\n useEffect(() => {\n async function updateParticipants() {\n const participants =\n await RNFishjamClientModule.getPeers<ParticipantMetadata>();\n setParticipants(addIsActiveToTracks<ParticipantMetadata>(participants));\n }\n\n updateParticipants();\n }, []);\n\n return { participants };\n}\n"]}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { BandwidthLimit, SimulcastConfig, TrackBandwidthLimit, TrackEncoding, TrackMetadata } from '../types';
|
|
2
|
-
export type ScreencastQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';
|
|
3
|
-
export type ScreencastOptions = {
|
|
4
|
-
/**
|
|
5
|
-
* Resolution + fps of screencast track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.
|
|
6
|
-
* Note that quality might be worse than specified due to device capabilities, internet
|
|
7
|
-
* connection etc.
|
|
8
|
-
* @default `HD15``
|
|
9
|
-
*/
|
|
10
|
-
quality: ScreencastQuality;
|
|
11
|
-
/**
|
|
12
|
-
* bandwidth limit of a screencast track. By default there is no bandwidth limit.
|
|
13
|
-
*/
|
|
14
|
-
maxBandwidth: TrackBandwidthLimit;
|
|
15
|
-
};
|
|
16
|
-
export type ScreencastOptionsInternal = {
|
|
17
|
-
screencastMetadata: TrackMetadata & {
|
|
18
|
-
displayName?: string;
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* SimulcastConfig of a screencast track. By default simulcast is disabled.
|
|
22
|
-
*/
|
|
23
|
-
simulcastConfig: SimulcastConfig;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* This hook can toggle screen sharing on/off and provides current screencast state.
|
|
27
|
-
* @returns An object with functions to manage screencast.
|
|
28
|
-
* @category Screenshare
|
|
29
|
-
* @group Hooks
|
|
30
|
-
*/
|
|
31
|
-
export declare function useScreencast(): {
|
|
32
|
-
isScreencastOn: boolean;
|
|
33
|
-
simulcastConfig: SimulcastConfig;
|
|
34
|
-
/**
|
|
35
|
-
* Toggles the screencast on/off
|
|
36
|
-
*/
|
|
37
|
-
toggleScreencast: (screencastOptions?: Partial<ScreencastOptions>) => Promise<void>;
|
|
38
|
-
handleScreencastPermission: () => Promise<"granted" | "denied">;
|
|
39
|
-
/**
|
|
40
|
-
* @deprecated
|
|
41
|
-
*/
|
|
42
|
-
setScreencastTrackBandwidth: (bandwidth: BandwidthLimit) => Promise<void>;
|
|
43
|
-
/**
|
|
44
|
-
* Toggles simulcast encoding of a screencast track on/off
|
|
45
|
-
* @param encoding encoding to toggle
|
|
46
|
-
* @deprecated
|
|
47
|
-
*/
|
|
48
|
-
toggleScreencastTrackEncoding: (encoding: TrackEncoding) => Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* updates maximum bandwidth for the given simulcast encoding of the screencast track
|
|
51
|
-
* @param encoding encoding to update
|
|
52
|
-
* @param bandwidth BandwidthLimit to set
|
|
53
|
-
* @deprecated
|
|
54
|
-
*/
|
|
55
|
-
setScreencastTrackEncodingBandwidth: (encoding: TrackEncoding, bandwidth: BandwidthLimit) => Promise<void>;
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=useScreencast.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useScreencast.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreencast.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;OAEG;IACH,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACtC,kBAAkB,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,aAAa;;;IAiEzB;;OAEG;2CAvDuB,OAAO,CAAC,iBAAiB,CAAC;;IA2DpD;;OAEG;6CAzBe,cAAc;IA2BhC;;;;OAIG;8CAlDc,aAAa;IAoD9B;;;;;OAKG;oDAhDc,aAAa,aAAa,cAAc;EA2D5D"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { useCallback, useState } from 'react';
|
|
2
|
-
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
3
|
-
import { Platform } from 'react-native';
|
|
4
|
-
import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
|
|
5
|
-
const defaultSimulcastConfig = () => ({
|
|
6
|
-
enabled: false,
|
|
7
|
-
activeEncodings: [],
|
|
8
|
-
});
|
|
9
|
-
let screencastSimulcastConfig = defaultSimulcastConfig();
|
|
10
|
-
/**
|
|
11
|
-
* This hook can toggle screen sharing on/off and provides current screencast state.
|
|
12
|
-
* @returns An object with functions to manage screencast.
|
|
13
|
-
* @category Screenshare
|
|
14
|
-
* @group Hooks
|
|
15
|
-
*/
|
|
16
|
-
export function useScreencast() {
|
|
17
|
-
const [isScreencastOn, setIsScreencastOn] = useState(RNFishjamClientModule.isScreencastOn);
|
|
18
|
-
const [simulcastConfig, setSimulcastConfig] = useState(screencastSimulcastConfig);
|
|
19
|
-
useFishjamEvent(ReceivableEvents.IsScreencastOn, setIsScreencastOn);
|
|
20
|
-
const toggleScreencast = useCallback(async (screencastOptions = {}) => {
|
|
21
|
-
const options = {
|
|
22
|
-
...screencastOptions,
|
|
23
|
-
screencastMetadata: {
|
|
24
|
-
displayName: 'presenting',
|
|
25
|
-
type: 'screensharing',
|
|
26
|
-
active: !isScreencastOn,
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
await RNFishjamClientModule.toggleScreencast(options);
|
|
30
|
-
screencastSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings
|
|
31
|
-
setSimulcastConfig(screencastSimulcastConfig);
|
|
32
|
-
}, [isScreencastOn]);
|
|
33
|
-
const toggleScreencastTrackEncoding = useCallback(async (encoding) => {
|
|
34
|
-
screencastSimulcastConfig =
|
|
35
|
-
await RNFishjamClientModule.toggleScreencastTrackEncoding(encoding);
|
|
36
|
-
setSimulcastConfig(screencastSimulcastConfig);
|
|
37
|
-
}, []);
|
|
38
|
-
const setScreencastTrackEncodingBandwidth = useCallback(async (encoding, bandwidth) => {
|
|
39
|
-
await RNFishjamClientModule.setScreencastTrackEncodingBandwidth(encoding, bandwidth);
|
|
40
|
-
}, []);
|
|
41
|
-
const setScreencastTrackBandwidth = useCallback(async (bandwidth) => {
|
|
42
|
-
await RNFishjamClientModule.setScreencastTrackBandwidth(bandwidth);
|
|
43
|
-
}, []);
|
|
44
|
-
const handleScreencastPermission = useCallback(async () => {
|
|
45
|
-
if (Platform.OS == 'android') {
|
|
46
|
-
return await RNFishjamClientModule.handleScreencastPermission();
|
|
47
|
-
}
|
|
48
|
-
return 'denied';
|
|
49
|
-
}, []);
|
|
50
|
-
return {
|
|
51
|
-
isScreencastOn,
|
|
52
|
-
simulcastConfig,
|
|
53
|
-
/**
|
|
54
|
-
* Toggles the screencast on/off
|
|
55
|
-
*/
|
|
56
|
-
toggleScreencast,
|
|
57
|
-
handleScreencastPermission,
|
|
58
|
-
/**
|
|
59
|
-
* @deprecated
|
|
60
|
-
*/
|
|
61
|
-
setScreencastTrackBandwidth,
|
|
62
|
-
/**
|
|
63
|
-
* Toggles simulcast encoding of a screencast track on/off
|
|
64
|
-
* @param encoding encoding to toggle
|
|
65
|
-
* @deprecated
|
|
66
|
-
*/
|
|
67
|
-
toggleScreencastTrackEncoding,
|
|
68
|
-
/**
|
|
69
|
-
* updates maximum bandwidth for the given simulcast encoding of the screencast track
|
|
70
|
-
* @param encoding encoding to update
|
|
71
|
-
* @param bandwidth BandwidthLimit to set
|
|
72
|
-
* @deprecated
|
|
73
|
-
*/
|
|
74
|
-
setScreencastTrackEncodingBandwidth,
|
|
75
|
-
/**
|
|
76
|
-
* updates maximum bandwidth for the screencast track. This value directly translates
|
|
77
|
-
* to quality of the stream and the amount of RTP packets being sent. In case simulcast
|
|
78
|
-
* is enabled bandwidth is split between all of the variant streams proportionally to
|
|
79
|
-
* their resolution
|
|
80
|
-
* @param bandwidth BandwidthLimit to set
|
|
81
|
-
* @deprecated
|
|
82
|
-
*/
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=useScreencast.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useScreencast.js","sourceRoot":"","sources":["../../src/hooks/useScreencast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBtE,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,IAAI,yBAAyB,GAAoB,sBAAsB,EAAE,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,qBAAqB,CAAC,cAAc,CACrC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,yBAAyB,CAC1B,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAEpE,MAAM,gBAAgB,GAAG,WAAW,CAClC,KAAK,EAAE,oBAAgD,EAAE,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG;YACd,GAAG,iBAAiB;YACpB,kBAAkB,EAAE;gBAClB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC,cAAc;aACxB;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtD,yBAAyB,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;QACxF,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IAChD,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,6BAA6B,GAAG,WAAW,CAC/C,KAAK,EAAE,QAAuB,EAAE,EAAE;QAChC,yBAAyB;YACvB,MAAM,qBAAqB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QACtE,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IAChD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,mCAAmC,GAAG,WAAW,CACrD,KAAK,EAAE,QAAuB,EAAE,SAAyB,EAAE,EAAE;QAC3D,MAAM,qBAAqB,CAAC,mCAAmC,CAC7D,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAC7C,KAAK,EAAE,SAAyB,EAAE,EAAE;QAClC,MAAM,qBAAqB,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,0BAA0B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,qBAAqB,CAAC,0BAA0B,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,cAAc;QACd,eAAe;QAEf;;WAEG;QACH,gBAAgB;QAChB,0BAA0B;QAE1B;;WAEG;QACH,2BAA2B;QAC3B;;;;WAIG;QACH,6BAA6B;QAC7B;;;;;WAKG;QACH,mCAAmC;QACnC;;;;;;;WAOG;KACJ,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport {\n BandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n TrackMetadata,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { Platform } from 'react-native';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type ScreencastQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';\n\nexport type ScreencastOptions = {\n /**\n * Resolution + fps of screencast track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.\n * Note that quality might be worse than specified due to device capabilities, internet\n * connection etc.\n * @default `HD15``\n */\n quality: ScreencastQuality;\n /**\n * bandwidth limit of a screencast track. By default there is no bandwidth limit.\n */\n maxBandwidth: TrackBandwidthLimit;\n};\nexport type ScreencastOptionsInternal = {\n screencastMetadata: TrackMetadata & { displayName?: string };\n /**\n * SimulcastConfig of a screencast track. By default simulcast is disabled.\n */\n simulcastConfig: SimulcastConfig;\n};\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nlet screencastSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\n/**\n * This hook can toggle screen sharing on/off and provides current screencast state.\n * @returns An object with functions to manage screencast.\n * @category Screenshare\n * @group Hooks\n */\nexport function useScreencast() {\n const [isScreencastOn, setIsScreencastOn] = useState(\n RNFishjamClientModule.isScreencastOn,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n screencastSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsScreencastOn, setIsScreencastOn);\n\n const toggleScreencast = useCallback(\n async (screencastOptions: Partial<ScreencastOptions> = {}) => {\n const options = {\n ...screencastOptions,\n screencastMetadata: {\n displayName: 'presenting',\n type: 'screensharing' as const,\n active: !isScreencastOn,\n },\n };\n await RNFishjamClientModule.toggleScreencast(options);\n screencastSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n setSimulcastConfig(screencastSimulcastConfig);\n },\n [isScreencastOn],\n );\n\n const toggleScreencastTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n screencastSimulcastConfig =\n await RNFishjamClientModule.toggleScreencastTrackEncoding(encoding);\n setSimulcastConfig(screencastSimulcastConfig);\n },\n [],\n );\n\n const setScreencastTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreencastTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n const setScreencastTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreencastTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const handleScreencastPermission = useCallback(async () => {\n if (Platform.OS == 'android') {\n return await RNFishjamClientModule.handleScreencastPermission();\n }\n return 'denied';\n }, []);\n\n return {\n isScreencastOn,\n simulcastConfig,\n\n /**\n * Toggles the screencast on/off\n */\n toggleScreencast,\n handleScreencastPermission,\n\n /**\n * @deprecated\n */\n setScreencastTrackBandwidth,\n /**\n * Toggles simulcast encoding of a screencast track on/off\n * @param encoding encoding to toggle\n * @deprecated\n */\n toggleScreencastTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the screencast track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setScreencastTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the screencast track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/stats/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,0BAA0B,CAAC;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE/D,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC"}
|
package/build/stats/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/stats/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * A record of the total time, in seconds,\n * that this stream has spent in each quality limitation state.\n * none: The resolution and/or framerate is not limited.\n * bandwidth: The resolution and/or framerate is primarily limited due to\n * congestion cues during bandwidth estimation.\n * Typical, congestion control algorithms use inter-arrival time,\n * round-trip time, packet or other congestion cues to perform bandwidth estimation.\n * cpu: The resolution and/or framerate is primarily limited due to CPU load.\n * other: The resolution and/or framerate is primarily limited\n * for a reason other than the above.\n */\nexport type QualityLimitationDurations = {\n bandwidth: number;\n cpu: number;\n none: number;\n other: number;\n};\n\nexport type RTCOutboundStats = {\n 'kind': string;\n 'rid': string;\n 'bytesSent': number;\n 'targetBitrate': number;\n 'packetsSent': number;\n 'framesEncoded': number;\n 'framesPerSecond': number;\n 'frameWidth': number;\n 'frameHeight': number;\n 'qualityLimitationDurations': QualityLimitationDurations;\n 'bytesSent/s': number;\n 'packetsSent/s': number;\n 'framesEncoded/s': number;\n};\n\nexport type RTCInboundStats = {\n 'kind': number;\n 'jitter': number;\n 'packetsLost': number;\n 'packetsReceived': number;\n 'bytesReceived': number;\n 'framesReceived': number;\n 'frameWidth': number;\n 'frameHeight': number;\n 'framesPerSecond': number;\n 'framesDropped': number;\n 'packetsLost/s': number;\n 'packetsReceived/s': number;\n 'bytesReceived/s': number;\n 'framesReceived/s': number;\n 'framesDropped/s': number;\n};\n\nexport type RTCTrackStats = RTCOutboundStats | RTCInboundStats;\n\nexport type RTCStats = { [key: string]: RTCTrackStats };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRTCStatistics.d.ts","sourceRoot":"","sources":["../../src/stats/useRTCStatistics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM;;EAuFvD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRTCStatistics.js","sourceRoot":"","sources":["../../src/stats/useRTCStatistics.ts"],"names":[],"mappings":"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","sourcesContent":["import { takeRight } from 'lodash';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { RTCInboundStats, RTCOutboundStats, RTCStats } from './types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\n/**\n * This hook provides access to current rtc statistics data.\n * @category Debugging\n */\nexport function useRTCStatistics(refreshInterval: number) {\n const MAX_SIZE = 120;\n const [statistics, setStatistics] = useState<RTCStats[]>([]);\n\n // Calculates diff between pervious and current stats,\n // providing end users with a per second metric.\n const processIncomingStats = useCallback(\n (statistics: ReadonlyArray<RTCStats>, stats: Readonly<RTCStats>) => {\n Object.keys(stats).forEach((obj) => {\n if (obj.includes('Inbound')) {\n const rtcStats = stats[obj] as RTCInboundStats;\n\n if (\n statistics.length > 0 &&\n Object.keys(statistics[statistics.length - 1]).includes(obj)\n ) {\n const prevRtcStats = statistics[statistics.length - 1][\n obj\n ] as RTCInboundStats;\n\n rtcStats['packetsLost/s'] =\n rtcStats['packetsLost'] - prevRtcStats['packetsLost'];\n rtcStats['packetsReceived/s'] =\n rtcStats['packetsReceived'] - prevRtcStats['packetsReceived'];\n rtcStats['bytesReceived/s'] =\n rtcStats['bytesReceived'] - prevRtcStats['bytesReceived'];\n rtcStats['framesReceived/s'] =\n rtcStats['framesReceived'] - prevRtcStats['framesReceived'];\n rtcStats['framesDropped/s'] =\n rtcStats['framesDropped'] - prevRtcStats['framesDropped'];\n } else {\n rtcStats['packetsLost/s'] = 0;\n rtcStats['packetsReceived/s'] = 0;\n rtcStats['bytesReceived/s'] = 0;\n rtcStats['framesReceived/s'] = 0;\n rtcStats['framesDropped/s'] = 0;\n }\n return stats;\n }\n // Outbound\n const rtcStats = stats[obj] as RTCOutboundStats;\n\n if (\n statistics.length > 0 &&\n Object.keys(statistics[statistics.length - 1]).includes(obj)\n ) {\n const prevRtcStats = statistics[statistics.length - 1][\n obj\n ] as RTCOutboundStats;\n\n rtcStats['bytesSent/s'] =\n rtcStats['bytesSent'] - prevRtcStats['bytesSent'];\n rtcStats['packetsSent/s'] =\n rtcStats['packetsSent'] - prevRtcStats['packetsSent'];\n rtcStats['framesEncoded/s'] =\n rtcStats['framesEncoded'] - prevRtcStats['framesEncoded'];\n } else {\n rtcStats['bytesSent/s'] = 0;\n rtcStats['packetsSent/s'] = 0;\n rtcStats['framesEncoded/s'] = 0;\n }\n return stats;\n });\n return stats;\n },\n [],\n );\n\n // Gets stats from the native libraries.\n const getStatistics = useCallback(async () => {\n const stats = await RNFishjamClientModule.getStatistics();\n setStatistics((prev) => {\n const newStats = [...prev, processIncomingStats(prev, stats)];\n takeRight(newStats, MAX_SIZE);\n return newStats;\n });\n }, [processIncomingStats]);\n\n useEffect(() => {\n const intervalId = setInterval(getStatistics, refreshInterval);\n return () => {\n clearInterval(intervalId);\n setStatistics([]);\n };\n }, [getStatistics, refreshInterval]);\n\n return { statistics };\n}\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|