mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Broadcast doc usage updates to clients
Summary: Introduces a new message type, docUsage, that's broadcast to all connected clients whenever document usage is updated in ActiveDoc. Test Plan: Browser tests. Reviewers: jarek Reviewed By: jarek Differential Revision: https://phab.getgrist.com/D3451
This commit is contained in:
@@ -18,6 +18,7 @@ import {AsyncFlow, CancelledError, FlowRunner} from 'app/common/AsyncFlow';
|
||||
import {delay} from 'app/common/delay';
|
||||
import {OpenDocMode, UserOverride} from 'app/common/DocListAPI';
|
||||
import {FilteredDocUsageSummary} from 'app/common/DocUsage';
|
||||
import {Product} from 'app/common/Features';
|
||||
import {IGristUrlState, parseUrlId, UrlIdParts} from 'app/common/gristUrls';
|
||||
import {getReconnectTimeout} from 'app/common/gutil';
|
||||
import {canEdit, isOwner} from 'app/common/roles';
|
||||
@@ -46,6 +47,12 @@ export interface DocPageModel {
|
||||
currentDoc: Observable<DocInfo|null>;
|
||||
currentDocUsage: Observable<FilteredDocUsageSummary|null>;
|
||||
|
||||
/**
|
||||
* Initially set to the product referenced by `currentDoc`, and updated whenever `currentDoc`
|
||||
* changes, or a doc usage message is received from the server.
|
||||
*/
|
||||
currentProduct: Observable<Product|null>;
|
||||
|
||||
// This block is to satisfy previous interface, but usable as this.currentDoc.get().id, etc.
|
||||
currentDocId: Observable<string|undefined>;
|
||||
currentWorkspace: Observable<Workspace|null>;
|
||||
@@ -90,6 +97,12 @@ export class DocPageModelImpl extends Disposable implements DocPageModel {
|
||||
public readonly currentDoc = Observable.create<DocInfo|null>(this, null);
|
||||
public readonly currentDocUsage = Observable.create<FilteredDocUsageSummary|null>(this, null);
|
||||
|
||||
/**
|
||||
* Initially set to the product referenced by `currentDoc`, and updated whenever `currentDoc`
|
||||
* changes, or a doc usage message is received from the server.
|
||||
*/
|
||||
public readonly currentProduct = Observable.create<Product|null>(this, null);
|
||||
|
||||
public readonly currentUrlId = Computed.create(this, this.currentDoc, (use, doc) => doc ? doc.urlId : undefined);
|
||||
public readonly currentDocId = Computed.create(this, this.currentDoc, (use, doc) => doc ? doc.id : undefined);
|
||||
public readonly currentWorkspace = Computed.create(this, this.currentDoc, (use, doc) => doc && doc.workspace);
|
||||
@@ -146,6 +159,14 @@ export class DocPageModelImpl extends Disposable implements DocPageModel {
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
this.autoDispose(this.currentOrg.addListener((org) => {
|
||||
// Whenever the current doc is updated, set the current product to be the
|
||||
// one referenced by the updated doc.
|
||||
if (org?.billingAccount?.product.name !== this.currentProduct.get()?.name) {
|
||||
this.currentProduct.set(org?.billingAccount?.product ?? null);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public createLeftPane(leftPanelOpen: Observable<boolean>) {
|
||||
|
||||
Reference in New Issue
Block a user