@sendbird/uikit-react-native
Version:
Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
151 lines (150 loc) • 5.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _uikitUtils = require("@sendbird/uikit-utils");
var _SBUUtils = _interopRequireDefault(require("../libs/SBUUtils"));
var _expoBackwardUtils = _interopRequireDefault(require("../utils/expoBackwardUtils"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class LegacyExpoAVVideoAdapter {
constructor(avModule) {
_defineProperty(this, "avModule", void 0);
_defineProperty(this, "VideoComponent", ({
source,
resizeMode,
onLoad,
...props
}) => {
// FIXME: type error https://github.com/expo/expo/issues/17101
// @ts-ignore
return /*#__PURE__*/_react.default.createElement(this.avModule.Video, _extends({}, props, {
source: source,
resizeMode: resizeMode,
onLoad: onLoad,
useNativeControls: true
}));
});
this.avModule = avModule;
}
}
class ExpoVideoAdapter {
constructor(_videoModule) {
this._videoModule = _videoModule;
_defineProperty(this, "VideoComponent", ({
source,
resizeMode,
onLoad,
...props
}) => {
const player = this._videoModule.useVideoPlayer(source);
(0, _react.useEffect)(() => {
if (onLoad && player) {
let subscription = null;
try {
subscription = player.addListener('statusChange', eventData => {
const {
status,
error
} = eventData;
if (status === 'readyToPlay' && !error) {
onLoad();
}
});
} catch (error) {
const timeout = setTimeout(() => onLoad(), 300);
return () => clearTimeout(timeout);
}
return () => {
if (subscription) {
subscription.remove();
}
};
}
return undefined;
}, [onLoad, player]);
const getContentFit = mode => {
switch (mode) {
case 'cover':
return 'cover';
case 'contain':
return 'contain';
case 'stretch':
return 'fill';
default:
return 'contain';
}
};
return /*#__PURE__*/_react.default.createElement(this._videoModule.VideoView, {
...props,
player,
contentFit: getContentFit(resizeMode)
});
});
}
}
const createExpoMediaService = ({
avModule,
thumbnailModule,
imageManipulator,
fsModule
}) => {
if (_expoBackwardUtils.default.expoAV.isLegacyAVModule(avModule)) {
_uikitUtils.Logger.warn('[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.');
}
const videoAdapter = _expoBackwardUtils.default.expoAV.isVideoModule(avModule) ? new ExpoVideoAdapter(avModule) : new LegacyExpoAVVideoAdapter(avModule);
return {
VideoComponent: videoAdapter.VideoComponent,
async getVideoThumbnail({
url,
quality,
timeMills
}) {
try {
const {
uri
} = await thumbnailModule.getThumbnailAsync(url, {
quality,
time: timeMills
});
return {
path: uri
};
} catch {
return null;
}
},
async compressImage({
maxWidth,
maxHeight,
compressionRate = 1,
uri
}) {
const originSize = await _SBUUtils.default.getImageSize(uri);
const resizingSize = (0, _uikitUtils.getDownscaleSize)(originSize, {
width: maxWidth,
height: maxHeight
});
const {
uri: compressedURI
} = await imageManipulator.manipulateAsync(uri, [{
resize: resizingSize
}], {
compress: Math.min(Math.max(0, compressionRate), 1)
});
const fileInfo = await _expoBackwardUtils.default.fileSystem.getFileInfo(fsModule, uri);
return {
uri: compressedURI,
size: _expoBackwardUtils.default.toFileSize(fileInfo)
};
}
};
};
var _default = exports.default = createExpoMediaService;
//# sourceMappingURL=createMediaService.expo.js.map