diff --git a/ext/app/client/components/Banners.ts b/ext/app/client/components/Banners.ts index 1642862..c0f551c 100644 --- a/ext/app/client/components/Banners.ts +++ b/ext/app/client/components/Banners.ts @@ -16,16 +16,29 @@ */ import {buildActivationBanner} from 'app/client/components/ActivationBanner'; +import * as CoreBanners from 'app/client/components/CoreBanners'; import {DocUsageBanner} from 'app/client/components/DocUsageBanner'; import {SiteUsageBanner} from 'app/client/components/SiteUsageBanner'; import {AppModel} from 'app/client/models/AppModel'; import {DocPageModel} from 'app/client/models/DocPageModel'; import {dom} from 'grainjs'; +import {createEnterpriseSpecificFunc} from "app/client/lib/enterpriseDeploymentCheck"; -export function buildHomeBanners(app: AppModel) { - return buildActivationBanner() || dom.create(SiteUsageBanner, app); -} +const EEBanners = { + buildHomeBanners(app: AppModel) { + return buildActivationBanner() || dom.create(SiteUsageBanner, app); + }, + buildDocumentBanners(docPageModel: DocPageModel) { + return buildActivationBanner() || dom.create(DocUsageBanner, docPageModel); + } +}; -export function buildDocumentBanners(docPageModel: DocPageModel) { - return buildActivationBanner() || dom.create(DocUsageBanner, docPageModel); -} +export const buildHomeBanners = createEnterpriseSpecificFunc( + EEBanners.buildHomeBanners, + CoreBanners.buildHomeBanners +); + +export const buildDocumentBanners = createEnterpriseSpecificFunc( + EEBanners.buildDocumentBanners, + CoreBanners.buildDocumentBanners +); diff --git a/ext/app/client/lib/enterpriseDeploymentCheck.ts b/ext/app/client/lib/enterpriseDeploymentCheck.ts new file mode 100644 index 0000000..d32cd49 --- /dev/null +++ b/ext/app/client/lib/enterpriseDeploymentCheck.ts @@ -0,0 +1,22 @@ +import { GristDeploymentType } from "app/common/gristUrls"; +import { getGristConfig } from "app/common/urlUtils"; + +const enterpriseDeploymentTypes: GristDeploymentType[] = ['saas', 'enterprise']; +export function isEnterpriseDeployment(): boolean { + return enterpriseDeploymentTypes.includes(getGristConfig().deploymentType ?? 'core'); +} + +/** + * Calls one of the provided callbacks at call time, based on the edition of grist that's running. + * @param enterpriseCallback - Called when an enterprise deployment type is used. + * @param nonEnterpriseCallback - Called for non-enterprise deployment types (e.g. core, desktop). + */ +export function createEnterpriseSpecificFunc
(
+ enterpriseCallback: (...args: P) => R,
+ nonEnterpriseCallback: (...args: P) => R
+)
+{
+ return function callCorrectCallback(...args: P): R {
+ return isEnterpriseDeployment() ? enterpriseCallback(...args) : nonEnterpriseCallback(...args);
+ };
+}
diff --git a/ext/app/client/ui/ActivationPage.ts b/ext/app/client/ui/ActivationPage.ts
index 6eb8f59..dff5a61 100644
--- a/ext/app/client/ui/ActivationPage.ts
+++ b/ext/app/client/ui/ActivationPage.ts
@@ -4,6 +4,7 @@ import {ActivationModel, ActivationModelImpl} from 'app/client/models/Activation
import {urlState} from 'app/client/models/gristUrlState';
import * as css from 'app/client/ui/ActivationPageCss';
import {AppHeader} from 'app/client/ui/AppHeader';
+import {DefaultActivationPage, IActivationPageCreator} from 'app/client/ui/DefaultActivationPage';
import {createForbiddenPage} from 'app/client/ui/errorPages';
import {leftPanelBasic} from 'app/client/ui/LeftPanelCommon';
import {pagePanels} from 'app/client/ui/PagePanels';
@@ -13,13 +14,18 @@ import {bigPrimaryButtonLink} from 'app/client/ui2018/buttons';
import {cssLink} from 'app/client/ui2018/links';
import {loadingSpinner} from 'app/client/ui2018/loaders';
import {IActivationStatus} from 'app/common/ActivationAPI';
-import {commonUrls, getPageTitleSuffix} from 'app/common/gristUrls';
+import { commonUrls, getPageTitleSuffix } from 'app/common/gristUrls';
import {getGristConfig} from 'app/common/urlUtils';
import {Computed, Disposable, dom, makeTestId, Observable, subscribe} from 'grainjs';
+import {isEnterpriseDeployment} from "app/client/lib/enterpriseDeploymentCheck";
const testId = makeTestId('test-ap-');
-export class ActivationPage extends Disposable {
+export function getActivationPage(): IActivationPageCreator {
+ return isEnterpriseDeployment() ? EnterpriseActivationPage : DefaultActivationPage;
+}
+
+export class EnterpriseActivationPage extends Disposable {
private readonly _currentPage = Computed.create(this, urlState().state, (_use, s) => s.activation);
private _model: ActivationModel = new ActivationModelImpl(this._appModel);
diff --git a/ext/app/client/ui/ProductUpgrades.ts b/ext/app/client/ui/ProductUpgrades.ts
index 9cc5b2e..1b8f5a6 100644
--- a/ext/app/client/ui/ProductUpgrades.ts
+++ b/ext/app/client/ui/ProductUpgrades.ts
@@ -1,17 +1,13 @@
import type {AppModel} from 'app/client/models/AppModel';
import {PlanSelection} from 'app/common/BillingAPI';
-import {commonUrls} from 'app/common/gristUrls';
-import {Disposable, DomArg, DomContents, IDisposableOwner} from 'grainjs';
+import { commonUrls } from 'app/common/gristUrls';
+import {Disposable} from 'grainjs';
+import * as CoreTeamModals from "app/client/ui/CreateTeamModal";
+import {createEnterpriseSpecificFunc} from "app/client/lib/enterpriseDeploymentCheck";
-export async function buildNewSiteModal(context: Disposable, options: {
- appModel: AppModel,
- plan?: PlanSelection,
- onCreate?: () => void
-}) {
- window.location.href = commonUrls.plans;
-}
+export const buildNewSiteModal = CoreTeamModals.buildNewSiteModal;
-export async function buildUpgradeModal(owner: Disposable, options: {
+async function buildEnterpriseUpgradeModal(owner: Disposable, options: {
appModel: AppModel,
pickPlan?: PlanSelection,
reason?: 'upgrade' | 'renew',
@@ -19,17 +15,9 @@ export async function buildUpgradeModal(owner: Disposable, options: {
window.location.href = commonUrls.plans;
}
-export function showTeamUpgradeConfirmation(owner: Disposable) {
-}
+export const buildUpgradeModal = createEnterpriseSpecificFunc(
+ buildEnterpriseUpgradeModal,
+ CoreTeamModals.buildUpgradeModal,
+);
-export interface UpgradeButton {
- showUpgradeCard(...args: DomArg