one
Version:
One is a React framework for web, iOS, and Android apps.
116 lines (114 loc) • 3.6 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all) __defProp(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var hooks_exports = {};
__export(hooks_exports, {
useAudioPlayer: () => useAudioPlayer,
useAudioPlayerStatus: () => useAudioPlayerStatus
});
module.exports = __toCommonJS(hooks_exports);
var import_react = require("react");
var import_player = require("./player.native.js");
var unclaimedPlayers = /* @__PURE__ */ new Map();
function trackPlayer(instanceId, player) {
var pending = unclaimedPlayers.get(instanceId);
if (pending) {
pending.push(player);
} else {
unclaimedPlayers.set(instanceId, [player]);
}
}
function releaseDiscardedPlayers(instanceId, retained) {
var pending = unclaimedPlayers.get(instanceId);
unclaimedPlayers.delete(instanceId);
if (!pending) return;
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
for (var _iterator = pending[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var player = _step.value;
if (player !== retained) player.remove();
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
function useAudioPlayer() {
var source = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
var instanceId = (0, import_react.useId)();
var [player, setPlayer] = (0, import_react.useState)(function() {
var created = (0, import_player.createPlayer)(source, options);
trackPlayer(instanceId, created);
return created;
});
var key = JSON.stringify(source !== null && source !== void 0 ? source : null);
var first = (0, import_react.useRef)(true);
(0, import_react.useEffect)(function() {
if (first.current) {
first.current = false;
return;
}
try {
player.replace(source);
} catch (error) {
if (error instanceof Error && error.message.includes("was removed")) {
setPlayer((0, import_player.createPlayer)(source, options));
} else {
throw error;
}
}
}, [key]);
(0, import_react.useEffect)(function() {
releaseDiscardedPlayers(instanceId, player);
return function() {
return player.remove();
};
}, [player]);
return player;
}
function useAudioPlayerStatus(player) {
var [status, setStatus] = (0, import_react.useState)(function() {
return player.getStatus();
});
(0, import_react.useEffect)(function() {
var subscription;
try {
setStatus(player.getStatus());
subscription = player.addListener("playbackStatusUpdate", setStatus);
} catch (unused) {
return;
}
return function() {
return subscription.remove();
};
}, [player]);
return status;
}