@dark-engine/core
Version:
The lightweight and powerful UI rendering engine without dependencies and written in TypeScript (Browser, Node.js, Android, iOS, Windows, Linux, macOS)
41 lines (40 loc) • 1.52 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.useTransition = exports.startTransition = void 0;
const utils_1 = require('../utils');
const internal_1 = require('../internal');
const scheduler_1 = require('../scheduler');
const use_state_1 = require('../use-state');
const use_event_1 = require('../use-event');
const scope_1 = require('../scope');
function startTransition(callback) {
const $scope = (0, scope_1.$$scope)();
const id = scheduler_1.scheduler.getLastId();
$scope.setIsTransition(true);
try {
callback();
if (id === scheduler_1.scheduler.getLastId()) {
const fn = $scope.getOnTransitionEnd();
(0, utils_1.detectIsFunction)(fn) && fn(() => false);
(0, utils_1.illegal)('startTransition must plan a new render!');
}
} finally {
$scope.setIsTransition(false);
}
}
exports.startTransition = startTransition;
function useTransition() {
const [isPending, setIsPending] = (0, use_state_1.useState)(false);
const loc = (0, internal_1.__useLoc)();
const $scope = (0, scope_1.$$scope)();
const $startTransition = (0, use_event_1.useEvent)(callback => {
setIsPending(true);
$scope.setOnTransitionEnd(fn => setIsPending(fn(loc())));
startTransition(callback);
$scope.setOnTransitionEnd(null);
});
const $isPending = scheduler_1.scheduler.detectIsTransition() ? false : isPending;
return [$isPending, $startTransition];
}
exports.useTransition = useTransition;
//# sourceMappingURL=start-transition.js.map