Skip to content

Commit

Permalink
feat(signal): signals.expire
Browse files Browse the repository at this point in the history
  • Loading branch information
AliMD committed Jan 28, 2023
1 parent de49a13 commit 3591efd
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
16 changes: 14 additions & 2 deletions core/signal/src/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,9 @@ export function _dispatchSignal<T extends Record<string, unknown>>(
* Get current signal detail
*/
export function _getSignalDetail<T extends Record<string, unknown>>(signalId: string): T | undefined {
return _getSignalObject<T>(signalId).detail;
const detail = _getSignalObject<T>(signalId).detail;
logger.logMethodFull('_getSignalDetail', signalId, detail);
return detail;
}

/**
Expand All @@ -230,7 +232,7 @@ export function _getSignalDetail<T extends Record<string, unknown>>(signalId: st
*/
export function _untilNextSignal<T extends Record<string, unknown>>(signal: string | SignalObject<T>): Promise<T> {
const signalId = typeof signal === 'string' ? signal : signal.id;
logger.logMethodArgs('_untilNextSignal', {signalId});
logger.logMethodArgs('_untilNextSignal', signalId);
return new Promise((resolve) => {
_addSignalListener<T>(signal, resolve, {
once: true,
Expand Down Expand Up @@ -303,3 +305,13 @@ export function _requestSignal<TRequest extends Record<string, unknown>>(
options,
);
}

/**
* Clear current signal detail without dispatch new signal
*
* note: receivePrevious not work until new signal
*/
export function _expireSignal(signalId: string): void {
logger.logMethodArgs('_clearSignal', signalId);
delete _getSignalObject(signalId).detail;
}
24 changes: 24 additions & 0 deletions core/signal/src/signal.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
_addSignalListener,
_dispatchSignal,
_expireSignal,
_getSignalDetail,
_removeSignalListener,
_requestSignal,
Expand Down Expand Up @@ -103,6 +104,13 @@ export interface SignalControllerInterface<T extends Record<string, unknown>> {
* ```
*/
request: OmitFirstParam<typeof _requestSignal<T>>,

/**
* Clear current signal detail without dispatch new signal
*
* note: receivePrevious not work until new signal
*/
expire: OmitFirstParam<typeof _expireSignal>,
}

export const signals = {
Expand Down Expand Up @@ -199,6 +207,13 @@ export const signals = {
*/
request: _requestSignal,

/**
* Clear current signal detail without dispatch new signal
*
* note: receivePrevious not work until new signal
*/
expire: _expireSignal,

bind: _bindSignal,
} as const;

Expand All @@ -211,5 +226,14 @@ function _bindSignal<T extends Record<string, unknown>>(signalId: string): Signa
dispatch: _dispatchSignal.bind(signals, signalId),
setProvider: _setSignalProvider.bind(signals, signalId),
request: _requestSignal.bind(signals, signalId),
expire: _expireSignal.bind(signals, signalId),
} as SignalControllerInterface<T>;
}

/*
TODO:
1. change signal option like disable
2. Get signal value promise
(Get signal value from last dispatched signal (if any) or wait for new signal received.)
3. dispatched bool
*/

0 comments on commit 3591efd

Please sign in to comment.