feat: steadier live updates and notices for public proposals
- The web pings the live connection, reconnects when it goes quiet and reloads what each screen shows after reconnecting. - Dropping a card on a column it cannot go to puts it back. - Owners and admins get a notice when a proposal arrives. - The proposal limit lives in Redis, so it holds across instances. - REST tells whether I voted; pasted images leave the attachment list. - Deleting a project removes its Git integration; no lint warnings left. - Reactions and the blocked badge are components of their own. - Docs: what is done and what is left (chapter 10), Word and PDF. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
|
||||
/**
|
||||
* The state of the subscriptions' socket that the app cares about: when it
|
||||
* comes back after a cut. Whatever happened meanwhile was not received, so
|
||||
* views reload when it does.
|
||||
*/
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class RealtimeConnection {
|
||||
private readonly back = new Subject<void>();
|
||||
|
||||
/** Each time the socket reconnects (not the first time it connects). */
|
||||
readonly reconnected$: Observable<void> = this.back.asObservable();
|
||||
|
||||
/** Called by the GraphQL client. */
|
||||
reconnected(): void {
|
||||
this.back.next();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user