react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
35 lines (34 loc) • 1.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useWorkletEffect = useWorkletEffect;
var _react = require("react");
var _useFilamentContext = require("./useFilamentContext");
var _reactNativeWorkletsCore = require("react-native-worklets-core");
var _ErrorUtils = require("../ErrorUtils");
function useWorkletEffect(workletFunction) {
const {
workletContext
} = (0, _useFilamentContext.useFilamentContext)();
(0, _react.useEffect)(() => {
const cleanupPromise = workletContext.runAsync((0, _ErrorUtils.wrapWithErrorHandler)(workletFunction));
return () => {
cleanupPromise.then(cleanup => {
if (cleanup == null || typeof cleanup !== 'function') {
// no cleanup function was returned, do nothing.
return;
}
if ((0, _reactNativeWorkletsCore.isWorklet)(cleanup)) {
// call cleanup function on Worklet context
workletContext.runAsync(cleanup);
} else {
// call normal cleanup JS function on normal context
cleanup();
}
});
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, (0, _reactNativeWorkletsCore.getWorkletDependencies)(workletFunction));
}
//# sourceMappingURL=useWorkletEffect.js.map