@reatom/timer
Advanced tools
Comparing version 3.5.6 to 3.6.0
import { Action, Atom, AtomMut } from '@reatom/core'; | ||
export interface TimerAtom extends AtomMut<number> { | ||
/** (delay - remains) / delay */ | ||
/** contains the ms remaining to the end of the timer. */ | ||
export interface TimerAtom extends Atom<number> { | ||
/** from 0 to 1, `(delay - remains) / delay` */ | ||
progressAtom: Atom<number>; | ||
@@ -11,3 +12,3 @@ /** interval in ms */ | ||
/** start timer by passed interval. Seconds expected with default `delayMultiplier` */ | ||
startTimer: Action<[delay: number], Promise<void>>; | ||
startTimer: Action<[delay: number, passed?: number], Promise<void>>; | ||
/** stop timer manually */ | ||
@@ -14,0 +15,0 @@ stopTimer: Action<[], void>; |
@@ -1,2 +0,2 @@ | ||
var core=require("@reatom/core"),primitives=require("@reatom/primitives"),utils=require("@reatom/utils"),hooks=require("@reatom/hooks");function _settle(pact,state,value){if(!pact.s){if(value instanceof _Pact){if(!value.s)return void(value.o=_settle.bind(null,pact,state));1&state&&(state=value.s),value=value.v}if(value&&value.then)return void value.then(_settle.bind(null,pact,state),_settle.bind(null,pact,2));pact.s=state,pact.v=value;const observer=pact.o;observer&&observer(pact)}}const _Pact=/*#__PURE__*/function(){function _Pact(){}return _Pact.prototype.then=function(onFulfilled,onRejected){const result=new _Pact,state=this.s;if(state){const callback=1&state?onFulfilled:onRejected;if(callback){try{_settle(result,1,callback(this.v))}catch(e){_settle(result,2,e)}return result}return this}return this.o=function(_this){try{const value=_this.v;1&_this.s?_settle(result,1,onFulfilled?onFulfilled(value):value):onRejected?_settle(result,1,onRejected(value)):_settle(result,2,value)}catch(e){_settle(result,2,e)}},result},_Pact}();function _isSettledPact(thenable){return thenable instanceof _Pact&&1&thenable.s}exports.reatomTimer=function(options){void 0===options&&(options={});const{name:name=core.__count("timerAtom"),interval:interval=1e3,delayMultiplier:delayMultiplier=1e3,progressPrecision:progressPrecision=2,resetProgress:resetProgress=!0}="string"==typeof options?{name:options}:options,timerAtom=core.atom(0,`${name}Atom`),progressAtom=core.atom(0,`${name}.progressAtom`),pauseAtom=core.atom(!1,`${name}.pauseAtom`),intervalAtom=core.atom(interval,`${name}.intervalAtom`).pipe(primitives.withReducers({setSeconds:(state,seconds)=>1e3*seconds})),_versionAtom=core.atom(0,`${name}._versionAtom`),startTimer=core.action((ctx,delay)=>{delay*=delayMultiplier,delay=Math.min(utils.MAX_SAFE_TIMEOUT,delay),core.throwReatomError(delay<ctx.get(intervalAtom),"delay less than interval");const version=_versionAtom(ctx,s=>s+1),start=Date.now();let target=delay+start,remains=delay,resolvePause=utils.noop,pauseFrom=0;timerAtom(ctx,remains),progressAtom(ctx,0),pauseAtom(ctx,!1);const cleanupPause=hooks.onUpdate(pauseAtom,(pauseCtx,pause)=>{if(hooks.getRootCause(ctx.cause)===hooks.getRootCause(pauseCtx.cause)){const now=Date.now();ctx.schedule(()=>{pause?pauseFrom=now:(target+=now-pauseFrom,resolvePause(),resolvePause=utils.noop,pauseFrom=0)})}});return ctx.schedule(function(){try{let _exit,_interrupt;return Promise.resolve(function(test,update,body){for(var stage;;){var shouldContinue=test();if(_isSettledPact(shouldContinue)&&(shouldContinue=shouldContinue.v),!shouldContinue)return result;if(shouldContinue.then){stage=0;break}var result=body();if(result&&result.then){if(!_isSettledPact(result)){stage=1;break}result=result.s}if(update){var updateValue=update();if(updateValue&&updateValue.then&&!_isSettledPact(updateValue)){stage=2;break}}}var pact=new _Pact,reject=_settle.bind(null,pact,2);return(0===stage?shouldContinue.then(_resumeAfterTest):1===stage?result.then(_resumeAfterBody):updateValue.then(_resumeAfterUpdate)).then(void 0,reject),pact;function _resumeAfterBody(value){result=value;do{if(update&&(updateValue=update())&&updateValue.then&&!_isSettledPact(updateValue))return void updateValue.then(_resumeAfterUpdate).then(void 0,reject);if(!(shouldContinue=test())||_isSettledPact(shouldContinue)&&!shouldContinue.v)return void _settle(pact,1,result);if(shouldContinue.then)return void shouldContinue.then(_resumeAfterTest).then(void 0,reject);_isSettledPact(result=body())&&(result=result.v)}while(!result||!result.then);result.then(_resumeAfterBody).then(void 0,reject)}function _resumeAfterTest(shouldContinue){shouldContinue?(result=body())&&result.then?result.then(_resumeAfterBody).then(void 0,reject):_resumeAfterBody(result):_settle(pact,1,result)}function _resumeAfterUpdate(){(shouldContinue=test())?shouldContinue.then?shouldContinue.then(_resumeAfterTest).then(void 0,reject):_resumeAfterTest(shouldContinue):_settle(pact,1,result)}}(function(){return!(_interrupt||_exit)&&1},void 0,function(){if(remains=target-Date.now(),remains<=0)return void(_interrupt=1);const interval=ctx.get(intervalAtom),tickDelay=remains<interval?remains:remains%interval||interval;return Promise.resolve(ctx.schedule(()=>utils.sleep(tickDelay))).then(function(){function _temp2(){version===ctx.get(_versionAtom)?ctx.get(()=>{remains=timerAtom(ctx,Math.max(0,target-Date.now()));const interval=ctx.get(intervalAtom),steps=Math.ceil(delay/interval),stepsRemains=Math.ceil(remains/interval);progressAtom(ctx,+(1-stepsRemains/steps).toFixed(progressPrecision))}):_exit=1}const _temp=function(){if(pauseFrom)return Promise.resolve(new Promise(r=>resolvePause=r)).then(function(){})}();return _temp&&_temp.then?_temp.then(_temp2):_temp2()})}))}catch(e){return Promise.reject(e)}}).finally(()=>{cleanupPause(),version===ctx.get(_versionAtom)&&endTimer(ctx)})},`${name}.startTimer`),stopTimer=core.action(ctx=>{_versionAtom(ctx,s=>s+1),endTimer(ctx),resetProgress&&progressAtom(ctx,0)},`${name}.stopTimer`),endTimer=core.action(ctx=>{timerAtom(ctx,0)},`${name}.endTimer`),pause=core.action(ctx=>pauseAtom(ctx,s=>!s),`${name}.pause`);return Object.assign(timerAtom,{progressAtom:progressAtom,endTimer:endTimer,intervalAtom:intervalAtom,startTimer:startTimer,stopTimer:stopTimer,pauseAtom:pauseAtom,pause:pause})}; | ||
var core=require("@reatom/core"),primitives=require("@reatom/primitives"),utils=require("@reatom/utils"),hooks=require("@reatom/hooks");function _settle(pact,state,value){if(!pact.s){if(value instanceof _Pact){if(!value.s)return void(value.o=_settle.bind(null,pact,state));1&state&&(state=value.s),value=value.v}if(value&&value.then)return void value.then(_settle.bind(null,pact,state),_settle.bind(null,pact,2));pact.s=state,pact.v=value;const observer=pact.o;observer&&observer(pact)}}const _Pact=/*#__PURE__*/function(){function _Pact(){}return _Pact.prototype.then=function(onFulfilled,onRejected){const result=new _Pact,state=this.s;if(state){const callback=1&state?onFulfilled:onRejected;if(callback){try{_settle(result,1,callback(this.v))}catch(e){_settle(result,2,e)}return result}return this}return this.o=function(_this){try{const value=_this.v;1&_this.s?_settle(result,1,onFulfilled?onFulfilled(value):value):onRejected?_settle(result,1,onRejected(value)):_settle(result,2,value)}catch(e){_settle(result,2,e)}},result},_Pact}();function _isSettledPact(thenable){return thenable instanceof _Pact&&1&thenable.s}exports.reatomTimer=(options={})=>{const{name:name=core.__count("timerAtom"),interval:interval=1e3,delayMultiplier:delayMultiplier=1e3,progressPrecision:progressPrecision=2,resetProgress:resetProgress=!0}="string"==typeof options?{name:options}:options,timerAtom=core.atom(0,`${name}Atom`),progressAtom=core.atom(0,`${name}.progressAtom`),pauseAtom=core.atom(!1,`${name}.pauseAtom`),intervalAtom=core.atom(interval,`${name}.intervalAtom`).pipe(primitives.withReducers({setSeconds:(state,seconds)=>1e3*seconds})),_versionAtom=core.atom(0,`${name}._versionAtom`),startTimer=core.action((ctx,delay,passed=0)=>{delay*=delayMultiplier,delay=Math.min(utils.MAX_SAFE_TIMEOUT,delay),core.throwReatomError(delay<ctx.get(intervalAtom),"delay less than interval"),core.throwReatomError(delay<passed,"passed more than delay");const version=_versionAtom(ctx,s=>s+1),start=Date.now();let target=delay+start-passed,remains=delay-passed,resolvePause=utils.noop,pauseFrom=0;timerAtom(ctx,remains),progressAtom(ctx,passed/delay),pauseAtom(ctx,!1);const cleanupPause=hooks.onUpdate(pauseAtom,(pauseCtx,pause)=>{if(hooks.getRootCause(ctx.cause)===hooks.getRootCause(pauseCtx.cause)){const now=Date.now();ctx.schedule(()=>{pause?pauseFrom=now:(target+=now-pauseFrom,resolvePause(),resolvePause=utils.noop,pauseFrom=0)})}});return ctx.schedule(function(){try{let _exit,_interrupt;return Promise.resolve(function(test,update,body){for(var stage;;){var shouldContinue=test();if(_isSettledPact(shouldContinue)&&(shouldContinue=shouldContinue.v),!shouldContinue)return result;if(shouldContinue.then){stage=0;break}var result=body();if(result&&result.then){if(!_isSettledPact(result)){stage=1;break}result=result.s}if(update){var updateValue=update();if(updateValue&&updateValue.then&&!_isSettledPact(updateValue)){stage=2;break}}}var pact=new _Pact,reject=_settle.bind(null,pact,2);return(0===stage?shouldContinue.then(_resumeAfterTest):1===stage?result.then(_resumeAfterBody):updateValue.then(_resumeAfterUpdate)).then(void 0,reject),pact;function _resumeAfterBody(value){result=value;do{if(update&&(updateValue=update())&&updateValue.then&&!_isSettledPact(updateValue))return void updateValue.then(_resumeAfterUpdate).then(void 0,reject);if(!(shouldContinue=test())||_isSettledPact(shouldContinue)&&!shouldContinue.v)return void _settle(pact,1,result);if(shouldContinue.then)return void shouldContinue.then(_resumeAfterTest).then(void 0,reject);_isSettledPact(result=body())&&(result=result.v)}while(!result||!result.then);result.then(_resumeAfterBody).then(void 0,reject)}function _resumeAfterTest(shouldContinue){shouldContinue?(result=body())&&result.then?result.then(_resumeAfterBody).then(void 0,reject):_resumeAfterBody(result):_settle(pact,1,result)}function _resumeAfterUpdate(){(shouldContinue=test())?shouldContinue.then?shouldContinue.then(_resumeAfterTest).then(void 0,reject):_resumeAfterTest(shouldContinue):_settle(pact,1,result)}}(function(){return!(_interrupt||_exit)&&1},void 0,function(){if(remains=target-Date.now(),remains<=0)return void(_interrupt=1);const interval=ctx.get(intervalAtom),tickDelay=remains<interval?remains:remains%interval||interval;return Promise.resolve(ctx.schedule(()=>utils.sleep(tickDelay))).then(function(){function _temp2(){version===ctx.get(_versionAtom)?ctx.get(()=>{remains=timerAtom(ctx,Math.max(0,target-Date.now()));const interval=ctx.get(intervalAtom),steps=Math.ceil(delay/interval),stepsRemains=Math.ceil(remains/interval);progressAtom(ctx,+(1-stepsRemains/steps).toFixed(progressPrecision))}):_exit=1}const _temp=function(){if(pauseFrom)return Promise.resolve(new Promise(r=>resolvePause=r)).then(function(){})}();return _temp&&_temp.then?_temp.then(_temp2):_temp2()})}))}catch(e){return Promise.reject(e)}}).finally(()=>{cleanupPause(),version===ctx.get(_versionAtom)&&endTimer(ctx)})},`${name}.startTimer`),stopTimer=core.action(ctx=>{_versionAtom(ctx,s=>s+1),endTimer(ctx),resetProgress&&progressAtom(ctx,0)},`${name}.stopTimer`),endTimer=core.action(ctx=>{timerAtom(ctx,0)},`${name}.endTimer`),pause=core.action(ctx=>pauseAtom(ctx,s=>!s),`${name}.pause`);return Object.assign({},timerAtom,{progressAtom:progressAtom,endTimer:endTimer,intervalAtom:intervalAtom,startTimer:startTimer,stopTimer:stopTimer,pauseAtom:pauseAtom,pause:pause})}; | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,2 @@ | ||
import{__count,atom,action,throwReatomError}from"@reatom/core";import{withReducers}from"@reatom/primitives";import{noop,sleep,MAX_SAFE_TIMEOUT}from"@reatom/utils";import{onUpdate,getRootCause}from"@reatom/hooks";function _settle(pact,state,value){if(!pact.s){if(value instanceof _Pact){if(!value.s)return void(value.o=_settle.bind(null,pact,state));1&state&&(state=value.s),value=value.v}if(value&&value.then)return void value.then(_settle.bind(null,pact,state),_settle.bind(null,pact,2));pact.s=state,pact.v=value;const observer=pact.o;observer&&observer(pact)}}const _Pact=/*#__PURE__*/function(){function _Pact(){}return _Pact.prototype.then=function(onFulfilled,onRejected){const result=new _Pact,state=this.s;if(state){const callback=1&state?onFulfilled:onRejected;if(callback){try{_settle(result,1,callback(this.v))}catch(e){_settle(result,2,e)}return result}return this}return this.o=function(_this){try{const value=_this.v;1&_this.s?_settle(result,1,onFulfilled?onFulfilled(value):value):onRejected?_settle(result,1,onRejected(value)):_settle(result,2,value)}catch(e){_settle(result,2,e)}},result},_Pact}();function _isSettledPact(thenable){return thenable instanceof _Pact&&1&thenable.s}const reatomTimer=function(options){void 0===options&&(options={});const{name:name=__count("timerAtom"),interval:interval=1e3,delayMultiplier:delayMultiplier=1e3,progressPrecision:progressPrecision=2,resetProgress:resetProgress=!0}="string"==typeof options?{name:options}:options,timerAtom=atom(0,`${name}Atom`),progressAtom=atom(0,`${name}.progressAtom`),pauseAtom=atom(!1,`${name}.pauseAtom`),intervalAtom=atom(interval,`${name}.intervalAtom`).pipe(withReducers({setSeconds:(state,seconds)=>1e3*seconds})),_versionAtom=atom(0,`${name}._versionAtom`),startTimer=action((ctx,delay)=>{delay*=delayMultiplier,delay=Math.min(MAX_SAFE_TIMEOUT,delay),throwReatomError(delay<ctx.get(intervalAtom),"delay less than interval");const version=_versionAtom(ctx,s=>s+1),start=Date.now();let target=delay+start,remains=delay,resolvePause=noop,pauseFrom=0;timerAtom(ctx,remains),progressAtom(ctx,0),pauseAtom(ctx,!1);const cleanupPause=onUpdate(pauseAtom,(pauseCtx,pause)=>{if(getRootCause(ctx.cause)===getRootCause(pauseCtx.cause)){const now=Date.now();ctx.schedule(()=>{pause?pauseFrom=now:(target+=now-pauseFrom,resolvePause(),resolvePause=noop,pauseFrom=0)})}});return ctx.schedule(function(){try{let _exit,_interrupt;return Promise.resolve(function(test,update,body){for(var stage;;){var shouldContinue=test();if(_isSettledPact(shouldContinue)&&(shouldContinue=shouldContinue.v),!shouldContinue)return result;if(shouldContinue.then){stage=0;break}var result=body();if(result&&result.then){if(!_isSettledPact(result)){stage=1;break}result=result.s}if(update){var updateValue=update();if(updateValue&&updateValue.then&&!_isSettledPact(updateValue)){stage=2;break}}}var pact=new _Pact,reject=_settle.bind(null,pact,2);return(0===stage?shouldContinue.then(_resumeAfterTest):1===stage?result.then(_resumeAfterBody):updateValue.then(_resumeAfterUpdate)).then(void 0,reject),pact;function _resumeAfterBody(value){result=value;do{if(update&&(updateValue=update())&&updateValue.then&&!_isSettledPact(updateValue))return void updateValue.then(_resumeAfterUpdate).then(void 0,reject);if(!(shouldContinue=test())||_isSettledPact(shouldContinue)&&!shouldContinue.v)return void _settle(pact,1,result);if(shouldContinue.then)return void shouldContinue.then(_resumeAfterTest).then(void 0,reject);_isSettledPact(result=body())&&(result=result.v)}while(!result||!result.then);result.then(_resumeAfterBody).then(void 0,reject)}function _resumeAfterTest(shouldContinue){shouldContinue?(result=body())&&result.then?result.then(_resumeAfterBody).then(void 0,reject):_resumeAfterBody(result):_settle(pact,1,result)}function _resumeAfterUpdate(){(shouldContinue=test())?shouldContinue.then?shouldContinue.then(_resumeAfterTest).then(void 0,reject):_resumeAfterTest(shouldContinue):_settle(pact,1,result)}}(function(){return!(_interrupt||_exit)&&1},void 0,function(){if(remains=target-Date.now(),remains<=0)return void(_interrupt=1);const interval=ctx.get(intervalAtom),tickDelay=remains<interval?remains:remains%interval||interval;return Promise.resolve(ctx.schedule(()=>sleep(tickDelay))).then(function(){function _temp2(){version===ctx.get(_versionAtom)?ctx.get(()=>{remains=timerAtom(ctx,Math.max(0,target-Date.now()));const interval=ctx.get(intervalAtom),steps=Math.ceil(delay/interval),stepsRemains=Math.ceil(remains/interval);progressAtom(ctx,+(1-stepsRemains/steps).toFixed(progressPrecision))}):_exit=1}const _temp=function(){if(pauseFrom)return Promise.resolve(new Promise(r=>resolvePause=r)).then(function(){})}();return _temp&&_temp.then?_temp.then(_temp2):_temp2()})}))}catch(e){return Promise.reject(e)}}).finally(()=>{cleanupPause(),version===ctx.get(_versionAtom)&&endTimer(ctx)})},`${name}.startTimer`),stopTimer=action(ctx=>{_versionAtom(ctx,s=>s+1),endTimer(ctx),resetProgress&&progressAtom(ctx,0)},`${name}.stopTimer`),endTimer=action(ctx=>{timerAtom(ctx,0)},`${name}.endTimer`),pause=action(ctx=>pauseAtom(ctx,s=>!s),`${name}.pause`);return Object.assign(timerAtom,{progressAtom:progressAtom,endTimer:endTimer,intervalAtom:intervalAtom,startTimer:startTimer,stopTimer:stopTimer,pauseAtom:pauseAtom,pause:pause})};export{reatomTimer}; | ||
import{__count,atom,action,throwReatomError}from"@reatom/core";import{withReducers}from"@reatom/primitives";import{noop,sleep,MAX_SAFE_TIMEOUT}from"@reatom/utils";import{onUpdate,getRootCause}from"@reatom/hooks";function _settle(pact,state,value){if(!pact.s){if(value instanceof _Pact){if(!value.s)return void(value.o=_settle.bind(null,pact,state));1&state&&(state=value.s),value=value.v}if(value&&value.then)return void value.then(_settle.bind(null,pact,state),_settle.bind(null,pact,2));pact.s=state,pact.v=value;const observer=pact.o;observer&&observer(pact)}}const _Pact=/*#__PURE__*/function(){function _Pact(){}return _Pact.prototype.then=function(onFulfilled,onRejected){const result=new _Pact,state=this.s;if(state){const callback=1&state?onFulfilled:onRejected;if(callback){try{_settle(result,1,callback(this.v))}catch(e){_settle(result,2,e)}return result}return this}return this.o=function(_this){try{const value=_this.v;1&_this.s?_settle(result,1,onFulfilled?onFulfilled(value):value):onRejected?_settle(result,1,onRejected(value)):_settle(result,2,value)}catch(e){_settle(result,2,e)}},result},_Pact}();function _isSettledPact(thenable){return thenable instanceof _Pact&&1&thenable.s}const reatomTimer=(options={})=>{const{name:name=__count("timerAtom"),interval:interval=1e3,delayMultiplier:delayMultiplier=1e3,progressPrecision:progressPrecision=2,resetProgress:resetProgress=!0}="string"==typeof options?{name:options}:options,timerAtom=atom(0,`${name}Atom`),progressAtom=atom(0,`${name}.progressAtom`),pauseAtom=atom(!1,`${name}.pauseAtom`),intervalAtom=atom(interval,`${name}.intervalAtom`).pipe(withReducers({setSeconds:(state,seconds)=>1e3*seconds})),_versionAtom=atom(0,`${name}._versionAtom`),startTimer=action((ctx,delay,passed=0)=>{delay*=delayMultiplier,delay=Math.min(MAX_SAFE_TIMEOUT,delay),throwReatomError(delay<ctx.get(intervalAtom),"delay less than interval"),throwReatomError(delay<passed,"passed more than delay");const version=_versionAtom(ctx,s=>s+1),start=Date.now();let target=delay+start-passed,remains=delay-passed,resolvePause=noop,pauseFrom=0;timerAtom(ctx,remains),progressAtom(ctx,passed/delay),pauseAtom(ctx,!1);const cleanupPause=onUpdate(pauseAtom,(pauseCtx,pause)=>{if(getRootCause(ctx.cause)===getRootCause(pauseCtx.cause)){const now=Date.now();ctx.schedule(()=>{pause?pauseFrom=now:(target+=now-pauseFrom,resolvePause(),resolvePause=noop,pauseFrom=0)})}});return ctx.schedule(function(){try{let _exit,_interrupt;return Promise.resolve(function(test,update,body){for(var stage;;){var shouldContinue=test();if(_isSettledPact(shouldContinue)&&(shouldContinue=shouldContinue.v),!shouldContinue)return result;if(shouldContinue.then){stage=0;break}var result=body();if(result&&result.then){if(!_isSettledPact(result)){stage=1;break}result=result.s}if(update){var updateValue=update();if(updateValue&&updateValue.then&&!_isSettledPact(updateValue)){stage=2;break}}}var pact=new _Pact,reject=_settle.bind(null,pact,2);return(0===stage?shouldContinue.then(_resumeAfterTest):1===stage?result.then(_resumeAfterBody):updateValue.then(_resumeAfterUpdate)).then(void 0,reject),pact;function _resumeAfterBody(value){result=value;do{if(update&&(updateValue=update())&&updateValue.then&&!_isSettledPact(updateValue))return void updateValue.then(_resumeAfterUpdate).then(void 0,reject);if(!(shouldContinue=test())||_isSettledPact(shouldContinue)&&!shouldContinue.v)return void _settle(pact,1,result);if(shouldContinue.then)return void shouldContinue.then(_resumeAfterTest).then(void 0,reject);_isSettledPact(result=body())&&(result=result.v)}while(!result||!result.then);result.then(_resumeAfterBody).then(void 0,reject)}function _resumeAfterTest(shouldContinue){shouldContinue?(result=body())&&result.then?result.then(_resumeAfterBody).then(void 0,reject):_resumeAfterBody(result):_settle(pact,1,result)}function _resumeAfterUpdate(){(shouldContinue=test())?shouldContinue.then?shouldContinue.then(_resumeAfterTest).then(void 0,reject):_resumeAfterTest(shouldContinue):_settle(pact,1,result)}}(function(){return!(_interrupt||_exit)&&1},void 0,function(){if(remains=target-Date.now(),remains<=0)return void(_interrupt=1);const interval=ctx.get(intervalAtom),tickDelay=remains<interval?remains:remains%interval||interval;return Promise.resolve(ctx.schedule(()=>sleep(tickDelay))).then(function(){function _temp2(){version===ctx.get(_versionAtom)?ctx.get(()=>{remains=timerAtom(ctx,Math.max(0,target-Date.now()));const interval=ctx.get(intervalAtom),steps=Math.ceil(delay/interval),stepsRemains=Math.ceil(remains/interval);progressAtom(ctx,+(1-stepsRemains/steps).toFixed(progressPrecision))}):_exit=1}const _temp=function(){if(pauseFrom)return Promise.resolve(new Promise(r=>resolvePause=r)).then(function(){})}();return _temp&&_temp.then?_temp.then(_temp2):_temp2()})}))}catch(e){return Promise.reject(e)}}).finally(()=>{cleanupPause(),version===ctx.get(_versionAtom)&&endTimer(ctx)})},`${name}.startTimer`),stopTimer=action(ctx=>{_versionAtom(ctx,s=>s+1),endTimer(ctx),resetProgress&&progressAtom(ctx,0)},`${name}.stopTimer`),endTimer=action(ctx=>{timerAtom(ctx,0)},`${name}.endTimer`),pause=action(ctx=>pauseAtom(ctx,s=>!s),`${name}.pause`);return Object.assign({},timerAtom,{progressAtom:progressAtom,endTimer:endTimer,intervalAtom:intervalAtom,startTimer:startTimer,stopTimer:stopTimer,pauseAtom:pauseAtom,pause:pause})};export{reatomTimer}; | ||
//# sourceMappingURL=index.module.js.map |
{ | ||
"name": "@reatom/timer", | ||
"version": "3.5.6", | ||
"version": "3.6.0", | ||
"private": false, | ||
@@ -5,0 +5,0 @@ "sideEffects": false, |
@@ -1,2 +0,2 @@ | ||
Simple timer model to manage some countdown. | ||
Timer model to manage some countdown. Useful for [classic pomodoro](https://github.com/artalar/reatom/tree/v3/examples/react-pomodoro) or any time-progress states, like [notifications](https://github.com/artalar/reatom/tree/v3/examples/react-notifications). | ||
@@ -16,21 +16,15 @@ ```ts | ||
Example: https://codesandbox.io/s/reatom-react-pomodoro-f219zu?file=/src/App.tsx | ||
The timer itself contains the ms remaining to the end of the timer (`0` before start). Here is the list of available states and methods: | ||
```ts | ||
export interface TimerAtom extends AtomMut<number> { | ||
/** (delay - remains) / delay */ | ||
progressAtom: Atom<number> | ||
/** interval in ms */ | ||
intervalAtom: AtomMut<number> | ||
/** start timer by passed interval */ | ||
startTimer: Action<[delay: number], Promise<void>> | ||
/** stop timer manually */ | ||
stopTimer: Action<[], void> | ||
/** allow to pause timer */ | ||
pauseAtom: AtomMut<boolean> | ||
/** switch pause state */ | ||
pause: Action<[], boolean> | ||
/** track end of timer. Do not call manually! */ | ||
endTimer: Action<[], void> | ||
} | ||
``` | ||
- **progressAtom** (`Atom<number>`) - from 0 to 1, `(delay - remains) / delay` | ||
- **intervalAtom** (`AtomMut<number>`) - interval of ticks in ms | ||
- **startTimer** (`Action<[delay: number, passed?: number], Promise<void>>`) - start timer with the delay and optional start point | ||
- **stopTimer** (`Action<[], void>`) - stop timer manually | ||
- **pauseAtom** (`AtomMut<boolean>`) - allow to pause timer | ||
- **pause** (`Action<[], boolean>`) - switch pause state | ||
- **endTimer** (`Action<[], void>`) - track end of timer. Do not call manually! | ||
## Examples | ||
- [classic pomodoro](https://github.com/artalar/reatom/tree/v3/examples/react-pomodoro) | ||
- [notifications progress](https://github.com/artalar/reatom/tree/v3/examples/react-notifications) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
35039
84
30