mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
ToggleEnterpriseWidget: new frontend toggle for the admin
Strongly patterned after SupportGristPage. In fact, it has almost the same structure. Perhaps one day it would be possible to synchronise the logic between the two toggles even further, but I couldn't see a simple way to do so now. For now, some code structure duplication seemed easiest in lieau of more abstractions.
This commit is contained in:
parent
0bf3f9bc43
commit
ffe3b22378
78
app/client/ui/ToggleEnterpriseWidget.ts
Normal file
78
app/client/ui/ToggleEnterpriseWidget.ts
Normal file
@ -0,0 +1,78 @@
|
||||
import {makeT} from 'app/client/lib/localization';
|
||||
import {markdown} from 'app/client/lib/markdown';
|
||||
import {Computed, Disposable, dom, makeTestId} from "grainjs";
|
||||
import {commonUrls} from "app/common/gristUrls";
|
||||
import {ToggleEnterpriseModel} from 'app/client/models/ToggleEnterpriseModel';
|
||||
import {
|
||||
cssOptInButton,
|
||||
cssOptOutButton,
|
||||
cssParagraph,
|
||||
cssSection,
|
||||
} from 'app/client/ui/AdminTogglesCss';
|
||||
|
||||
|
||||
const t = makeT('ToggleEnterprsiePage');
|
||||
const testId = makeTestId('test-toggle-enterprise-page-');
|
||||
|
||||
export class ToggleEnterpriseWidget extends Disposable {
|
||||
private readonly _model: ToggleEnterpriseModel = new ToggleEnterpriseModel();
|
||||
private readonly _isEnterprise = Computed.create(this, this._model.edition, (_use, edition) => {
|
||||
return edition === 'enterprise';
|
||||
}).onWrite(async (enabled) => {
|
||||
await this._model.updateEnterpriseToggle(enabled ? 'enterprise' : 'core');
|
||||
});
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this._model.fetchEnterpriseToggle().catch(reportError);
|
||||
}
|
||||
|
||||
public getEnterpriseToggleObservable() {
|
||||
return this._isEnterprise;
|
||||
}
|
||||
|
||||
public buildEnterpriseSection() {
|
||||
return cssSection(
|
||||
dom.domComputed(this._isEnterprise, (enterpriseEnabled) => {
|
||||
return [
|
||||
enterpriseEnabled ?
|
||||
cssParagraph(
|
||||
markdown(t('Grist Enterprise is **enabled**.')),
|
||||
testId('enterprise-opt-out-message'),
|
||||
) : null,
|
||||
cssParagraph(
|
||||
markdown(t(`An activation key is used to run Grist Enterprise after a trial period
|
||||
of 30 days has expired. Get an activation key by [signing up for Grist
|
||||
Enterprise]({{signupLink}}). You do not need an activation key to run
|
||||
Grist Core.
|
||||
|
||||
Learn more in our [Help Center]({{helpCenter}}).`, {
|
||||
signupLink: commonUrls.plans,
|
||||
helpCenter: commonUrls.helpEnterpriseOptIn
|
||||
}))
|
||||
),
|
||||
this._buildEnterpriseSectionButtons(),
|
||||
];
|
||||
}),
|
||||
testId('enterprise-opt-in-section'),
|
||||
);
|
||||
}
|
||||
|
||||
public _buildEnterpriseSectionButtons() {
|
||||
return dom.domComputed(this._isEnterprise, (enterpriseEnabled) => {
|
||||
if (enterpriseEnabled) {
|
||||
return [
|
||||
cssOptOutButton(t('Disable Grist Enterprise'),
|
||||
dom.on('click', () => this._isEnterprise.set(false)),
|
||||
),
|
||||
];
|
||||
} else {
|
||||
return [
|
||||
cssOptInButton(t('Enable Grist Enterprise'),
|
||||
dom.on('click', () => this._isEnterprise.set(true)),
|
||||
),
|
||||
];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -84,6 +84,7 @@ export const commonUrls = {
|
||||
helpTryingOutChanges: "https://support.getgrist.com/copying-docs/#trying-out-changes",
|
||||
helpCustomWidgets: "https://support.getgrist.com/widget-custom",
|
||||
helpTelemetryLimited: "https://support.getgrist.com/telemetry-limited",
|
||||
helpEnterpriseOptIn: "https://support.getgrist.com/self-managed/#how-do-i-activate-grist-enterprise",
|
||||
helpCalendarWidget: "https://support.getgrist.com/widget-calendar",
|
||||
helpLinkKeys: "https://support.getgrist.com/examples/2021-04-link-keys",
|
||||
helpFilteringReferenceChoices: "https://support.getgrist.com/col-refs/#filtering-reference-choices-in-dropdown",
|
||||
|
Loading…
Reference in New Issue
Block a user