@vaadin/hilla-react-signals
Version:
Signals for Hilla React
32 lines • 1.29 kB
JavaScript
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