Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions packages/mobile-client/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ export {
startPIP,
stopPIP,
AudioDeviceType,
useCallKit,
useCallKitEvent,
useCallKitService,
useAudioOutput,
} from '@fishjam-cloud/react-native-webrtc';

Expand Down Expand Up @@ -59,13 +56,21 @@ export {
useLivestreamStreamer,
useLivestreamViewer,
usePeers,
useCallKit,
useCallKitEvent,
useCallKitService,
} from './overrides/hooks';

export type {
StreamerInputs,
ConnectStreamerConfig,
UseLivestreamStreamerResult,
UseLivestreamViewerResult,
UseCameraResult,
UseMicrophoneResult,
UseScreenShareResult,
UseCustomSourceResult,
UseInitializeDevicesReturn,
Track,
RemoteTrack,
CustomSource,
Expand Down
83 changes: 56 additions & 27 deletions packages/mobile-client/src/overrides/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@ import {
usePeers as usePeersReactClient,
useScreenShare as useScreenShareReactClient,
} from '@fishjam-cloud/react-client';
import type { MediaStream as RNMediaStream } from '@fishjam-cloud/react-native-webrtc';
import type { CallKitAction, CallKitConfig, MediaStream as RNMediaStream } from '@fishjam-cloud/react-native-webrtc';
import {
useCallKit as useCallKitRNWebRTC,
useCallKitEvent as useCallKitEventRNWebRTC,
useCallKitService as useCallKitServiceRNWebRTC,
} from '@fishjam-cloud/react-native-webrtc';
import { useCallback } from 'react';

import type {
Expand All @@ -20,30 +25,38 @@ import type {
UseLivestreamViewerResult,
} from './types';

export const useCamera = useCameraReactClient as () => Omit<ReturnType<typeof useCameraReactClient>, 'cameraStream'> & {
cameraStream: RNMediaStream | null;
};
export function useCamera() {
const result = useCameraReactClient();
return {
...result,
cameraStream: result.cameraStream as RNMediaStream | null,
};
}

export const useMicrophone = useMicrophoneReactClient as () => Omit<
ReturnType<typeof useMicrophoneReactClient>,
'toggleMicrophoneMute' | 'microphoneStream'
> & {
microphoneStream: RNMediaStream | null;
};
export function useMicrophone() {
const { toggleMicrophoneMute: _, ...rest } = useMicrophoneReactClient();
return {
...rest,
microphoneStream: rest.microphoneStream as RNMediaStream | null,
};
}

export const useScreenShare = useScreenShareReactClient as () => Omit<
ReturnType<typeof useScreenShareReactClient>,
'stream'
> & {
stream: RNMediaStream | null;
};
export function useScreenShare() {
const result = useScreenShareReactClient();
return {
...result,
stream: result.stream as RNMediaStream | null,
};
}

export const useCustomSource = useCustomSourceReactClient as <T extends string>(
sourceId: T,
) => Omit<ReturnType<typeof useCustomSourceReactClient>, 'stream' | 'setStream'> & {
stream: RNMediaStream | undefined;
setStream: (newStream: RNMediaStream | null) => void;
};
export function useCustomSource<T extends string>(sourceId: T) {
const result = useCustomSourceReactClient(sourceId);
return {
...result,
stream: result.stream as RNMediaStream | undefined,
setStream: result.setStream as (newStream: RNMediaStream | null) => Promise<void>,
};
}

export function useLivestreamStreamer(): UseLivestreamStreamerResult {
const { connect: reactConnect, ...rest } = useLivestreamStreamerReactClient();
Expand All @@ -67,11 +80,14 @@ export function useLivestreamViewer(): UseLivestreamViewerResult {
};
}

export const useInitializeDevices = useInitializeDevicesReactClient as () => {
initializeDevices: (
...args: Parameters<ReturnType<typeof useInitializeDevicesReactClient>['initializeDevices']>
) => Promise<InitializeDevicesResult>;
};
export function useInitializeDevices() {
const { initializeDevices: reactInitDevices } = useInitializeDevicesReactClient();
return {
initializeDevices: reactInitDevices as (
...args: Parameters<typeof reactInitDevices>
) => Promise<InitializeDevicesResult>,
};
}

export function usePeers<P = Record<string, unknown>, S = Record<string, unknown>>() {
return usePeersReactClient<P, S>() as unknown as {
Expand All @@ -80,3 +96,16 @@ export function usePeers<P = Record<string, unknown>, S = Record<string, unknown
peers: PeerWithTracks<P, S, RemoteTrack>[];
};
}

export function useCallKit() {
const result = useCallKitRNWebRTC();
return { ...result };
}

export function useCallKitService(config: CallKitConfig) {
return useCallKitServiceRNWebRTC(config);
}

export function useCallKitEvent<T extends keyof CallKitAction>(action: T, callback: (event: CallKitAction[T]) => void) {
return useCallKitEventRNWebRTC(action, callback);
}
31 changes: 31 additions & 0 deletions packages/mobile-client/src/overrides/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ import type {
PeerWithTracks as ReactClientPeerWithTracks,
RemoteTrack as ReactClientRemoteTrack,
Track as ReactClientTrack,
useCamera as useCameraReactClient,
useCustomSource as useCustomSourceReactClient,
useInitializeDevices as useInitializeDevicesReactClient,
UseLivestreamStreamerResult as ReactClientUseLivestreamStreamerResult,
UseLivestreamViewerResult as ReactClientUseLivestreamViewerResult,
useMicrophone as useMicrophoneReactClient,
useScreenShare as useScreenShareReactClient,
} from '@fishjam-cloud/react-client';
import type { MediaStream as RNMediaStream } from '@fishjam-cloud/react-native-webrtc';

Expand All @@ -26,6 +31,32 @@ export type UseLivestreamViewerResult = Omit<ReactClientUseLivestreamViewerResul
stream: RNMediaStream | null;
};

export type UseCameraResult = Omit<ReturnType<typeof useCameraReactClient>, 'cameraStream'> & {
cameraStream: RNMediaStream | null;
};

export type UseMicrophoneResult = Omit<
ReturnType<typeof useMicrophoneReactClient>,
'toggleMicrophoneMute' | 'microphoneStream'
> & {
Comment thread
MiloszFilimowski marked this conversation as resolved.
microphoneStream: RNMediaStream | null;
};

export type UseScreenShareResult = Omit<ReturnType<typeof useScreenShareReactClient>, 'stream'> & {
stream: RNMediaStream | null;
};

export type UseCustomSourceResult = Omit<ReturnType<typeof useCustomSourceReactClient>, 'stream' | 'setStream'> & {
stream: RNMediaStream | undefined;
setStream: (newStream: RNMediaStream | null) => Promise<void>;
};

export type UseInitializeDevicesReturn = {
initializeDevices: (
...args: Parameters<ReturnType<typeof useInitializeDevicesReactClient>['initializeDevices']>
) => Promise<InitializeDevicesResult>;
};

export type Track = Omit<ReactClientTrack, 'stream'> & { stream: RNMediaStream | null };

export type RemoteTrack = Omit<ReactClientRemoteTrack, 'stream'> & { stream: RNMediaStream | null };
Expand Down
Loading