Files
frontend/web-shims/react-native-webrtc/index.js
lafay b2c3d5e54e
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 8m30s
Frontend CI / ota-android (push) Successful in 10m43s
Frontend CI / build-android-apk (push) Successful in 1h24m38s
feat(content): add rich content rendering with @mentions and vote segments
- Add PostContentRenderer component for rendering posts/comments with segments
- Add PostMentionInput component for @mention support in post/comment creation
- Add VoteSegmentData and vote segment type for unified post creation API
- Update post and comment services to support segments in API requests
- Fix auth service to clear tokens before login/register
- Improve database initialization with proper close/retry logic
- Add verification check before allowing post creation
- Add metro web shims for react-native-webrtc full package and requireNativeComponent
- Update build config with git hash based version numbers
2026-04-23 22:29:58 +08:00

95 lines
3.1 KiB
JavaScript

const React = require('react');
const RTCView = React.forwardRef((props, ref) => {
const { streamURL, mirror, objectFit, style, ...rest } = props;
const src = streamURL || (props.stream && props.stream.toURL ? props.stream.toURL() : '');
if (src) {
return React.createElement('video', {
...rest,
ref,
src,
autoPlay: true,
playsInline: true,
muted: props.muted || false,
style: {
...style,
transform: mirror ? 'scaleX(-1)' : undefined,
objectFit: objectFit || 'cover',
width: '100%',
height: '100%',
},
});
}
return React.createElement('div', { ...rest, ref, style });
});
RTCView.displayName = 'RTCView';
const ScreenCapturePickerView = React.forwardRef((props, ref) => {
return React.createElement('div', { ...props, ref, 'data-native-component': 'ScreenCapturePickerView' });
});
ScreenCapturePickerView.displayName = 'ScreenCapturePickerView';
const mediaDevices = typeof navigator !== 'undefined' && navigator.mediaDevices
? navigator.mediaDevices
: {
getUserMedia: () => Promise.reject(new Error('mediaDevices not available')),
getDisplayMedia: () => Promise.reject(new Error('mediaDevices not available')),
enumerateDevices: () => Promise.resolve([]),
};
const RTCPeerConnection = typeof window !== 'undefined' ? window.RTCPeerConnection : function () {};
const RTCSessionDescription = typeof window !== 'undefined' ? window.RTCSessionDescription : function () {};
const RTCIceCandidate = typeof window !== 'undefined' ? window.RTCIceCandidate : function () {};
const MediaStream = typeof window !== 'undefined' ? window.MediaStream : function () {};
const MediaStreamTrack = typeof window !== 'undefined' ? window.MediaStreamTrack : function () {};
function registerGlobals() {}
const permissions = {
request: () => Promise.resolve(true),
check: () => Promise.resolve(true),
};
const RTCAudioSession = {
setCategory: () => {},
setActive: () => {},
setMode: () => {},
};
const RTCRtpReceiver = typeof window !== 'undefined' ? window.RTCRtpReceiver : function () {};
const RTCRtpSender = typeof window !== 'undefined' ? window.RTCRtpSender : function () {};
const RTCRtpTransceiver = typeof window !== 'undefined' ? window.RTCRtpTransceiver : function () {};
const RTCErrorEvent = typeof window !== 'undefined' ? window.RTCErrorEvent : function () {};
const MediaStreamTrackEvent = typeof window !== 'undefined' ? window.MediaStreamTrackEvent : function () {};
const RTCPIPView = React.forwardRef((props, ref) => {
return React.createElement('div', { ...props, ref, 'data-native-component': 'RTCPIPView' });
});
RTCPIPView.displayName = 'RTCPIPView';
function startIOSPIP() {}
function stopIOSPIP() {}
module.exports = {
RTCView,
ScreenCapturePickerView,
RTCPeerConnection,
RTCSessionDescription,
RTCIceCandidate,
MediaStream,
MediaStreamTrack,
MediaStreamTrackEvent,
mediaDevices,
permissions,
registerGlobals,
RTCAudioSession,
RTCRtpReceiver,
RTCRtpSender,
RTCRtpTransceiver,
RTCErrorEvent,
RTCPIPView,
startIOSPIP,
stopIOSPIP,
};