UNPKG

@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
'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