stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
94 lines • 2.71 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.VideoPlayerPool = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _streamChat = require("stream-chat");
var _videoPlayer = require("./video-player");
var VideoPlayerPool = exports.VideoPlayerPool = function () {
function VideoPlayerPool() {
(0, _classCallCheck2.default)(this, VideoPlayerPool);
this.state = new _streamChat.StateStore({
activeVideoPlayer: null
});
this.pool = new Map();
}
return (0, _createClass2.default)(VideoPlayerPool, [{
key: "players",
get: function () {
return Array.from(this.pool.values());
}
}, {
key: "getOrAddPlayer",
value: function getOrAddPlayer(params) {
var player = this.pool.get(params.id);
if (player) {
return player;
}
var newPlayer = new _videoPlayer.VideoPlayer(params);
newPlayer.pool = this;
this.pool.set(params.id, newPlayer);
return newPlayer;
}
}, {
key: "setActivePlayer",
value: function setActivePlayer(activeVideoPlayer) {
this.state.partialNext({
activeVideoPlayer
});
}
}, {
key: "getActivePlayer",
value: function getActivePlayer() {
return this.state.getLatestValue().activeVideoPlayer;
}
}, {
key: "removePlayer",
value: function removePlayer(id) {
var player = this.pool.get(id);
if (!player) return;
player.onRemove();
this.pool.delete(id);
if (this.getActivePlayer()?.id === id) {
this.setActivePlayer(null);
}
}
}, {
key: "deregister",
value: function deregister(id) {
if (this.pool.has(id)) {
this.pool.delete(id);
}
}
}, {
key: "clear",
value: function clear() {
for (var player of this.pool.values()) {
this.removePlayer(player.id);
}
this.setActivePlayer(null);
}
}, {
key: "requestPlay",
value: function requestPlay(id) {
if (this.getActivePlayer()?.id !== id) {
var currentPlayer = this.getActivePlayer();
if (currentPlayer && currentPlayer.isPlaying) {
currentPlayer.pause();
}
}
var activePlayer = this.pool.get(id);
if (activePlayer) {
this.setActivePlayer(activePlayer);
}
}
}, {
key: "notifyPaused",
value: function notifyPaused() {
this.setActivePlayer(null);
}
}]);
}();
//# sourceMappingURL=video-player-pool.js.map