mediasfu-reactnative-expo
Version:
mediasfu-reactnative-expo – Expo-managed React Native WebRTC SDK for video conferencing, webinars, live streaming, broadcast, screen sharing, whiteboard, chat, recording, live subtitles, translation, and AI agent rooms on iOS, Android, and web. Prebuilt r
91 lines • 2.62 kB
JavaScript
/**
* Override helper utilities for MediaSFU React Native Expo
*
* These utilities enable flexible component and function overrides
* while maintaining React Native compatibility (no DOM APIs).
*/
/**
* Applies a component override, returning the appropriate component to render
*
* @param override - The override configuration (component or render function)
* @param DefaultComponent - The default component to use if no override is provided
* @returns The component to render (either overridden or default)
*
* @example
* ```tsx
* const MyComponent = withOverride(
* uiOverrides?.mainContainer,
* MainContainerComponent
* );
*
* // Later in JSX:
* <MyComponent {...props} />
* ```
*/
export function withOverride(override, DefaultComponent) {
// If no override provided, return default
if (!override) {
return DefaultComponent;
}
// If component replacement provided, use it
if (override.component) {
return override.component;
}
// If render function provided, create a wrapper component
if (override.render) {
return ((props) => override.render(props));
}
// Fallback to default
return DefaultComponent;
}
/**
* Applies a function override, returning the appropriate function to use
*
* @param override - The override configuration (implementation or wrap function)
* @param defaultFn - The default function to use if no override is provided
* @returns The function to use (either overridden or default)
*
* @example
* ```tsx
* const customConsumerResume = withFunctionOverride(
* uiOverrides?.consumerResume,
* consumerResume
* );
*
* // Later in code:
* await customConsumerResume(params);
* ```
*
* @example
* // Wrapping with analytics
* ```tsx
* const override = {
* wrap: (original) => async (params) => {
* const start = performance.now();
* const result = await original(params);
* analytics.track('consumer_resume', {
* duration: performance.now() - start,
* consumerId: params?.consumer?.id
* });
* return result;
* }
* };
* ```
*/
export function withFunctionOverride(override, defaultFn) {
// If no override provided, return default
if (!override) {
return defaultFn;
}
// If implementation replacement provided, use it
if (override.implementation) {
return override.implementation;
}
// If wrap function provided, apply it
if (override.wrap) {
return override.wrap(defaultFn);
}
// Fallback to default
return defaultFn;
}
//# sourceMappingURL=overrideHelpers.js.map