react-hifi
Version:
A set of react components wich provides simple abstraption to manipulate HTML5 AudioContext API (Equalizer, visualisation, stereo, basic controls)
41 lines • 1.94 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = __importDefault(require("react"));
var memo = react_1.default.memo, useState = react_1.default.useState, useEffect = react_1.default.useEffect;
function pluginFactory(_a) {
var createNode = _a.createNode, updateNode = _a.updateNode, _b = _a.shouldNotUpdate, shouldNotUpdate = _b === void 0 ? function () { return true; } : _b;
return memo(function (props) {
var _a = useState(), node = _a[0], setNode = _a[1];
useEffect(function () {
if (props.previousNode && props.audioContext && !node) {
var createdNode = createNode(props.audioContext, props);
if (Array.isArray(createdNode)) {
var lastInChain = createdNode[0];
props.previousNode.connect(lastInChain);
for (var i = 1; i < createdNode.length; i++) {
lastInChain.connect(createdNode[i]);
lastInChain = createdNode[i];
}
}
else {
props.previousNode.connect(createdNode);
}
setNode(createdNode);
}
});
useEffect(function () {
if (node) {
props.onRegister && props.onRegister(Array.isArray(node) ? node[node.length - 1] : node);
}
}, [node]);
node && updateNode && props.audioContext && updateNode(node, props, props.audioContext);
return null;
}, function (prevProps, nextProps) {
return prevProps.previousNode === nextProps.previousNode && shouldNotUpdate(prevProps, nextProps);
});
}
exports.pluginFactory = pluginFactory;
//# sourceMappingURL=plugin-factory.js.map