UNPKG

@vaadin/hilla-react-signals

Version:

Signals for Hilla React

32 lines 1.29 kB
import { createIncrementStateEvent, isIncrementStateEvent } from './events.js'; import { $createOperation, $processServerResponse, $resolveOperation, $setValueQuietly, $update, } from './FullStackSignal.js'; import { ValueSignal } from './ValueSignal.js'; export class NumberSignal extends ValueSignal { #sentIncrementEvents = new Map(); incrementBy(delta) { if (delta === 0) { return { result: Promise.resolve() }; } this[$setValueQuietly](this.value + delta); const event = createIncrementStateEvent(delta); this.#sentIncrementEvents.set(event.id, event); const promise = this[$update](event); return this[$createOperation]({ id: event.id, promise }); } [$processServerResponse](event) { if (event.accepted && isIncrementStateEvent(event)) { const sentEvent = this.#sentIncrementEvents.get(event.id); if (sentEvent) { this.#sentIncrementEvents.delete(event.id); } else { this[$setValueQuietly](this.value + event.value); } this[$resolveOperation](event.id); } else { super[$processServerResponse](event); } } } //# sourceMappingURL=NumberSignal.js.map