@cratis/showrunner.boxoffice.react 0.0.0-stage → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Banners/NoLicense.tsx +36 -0
- package/Banners/SuspensionBanner.tsx +54 -0
- package/Banners/TrialBanner.tsx +30 -0
- package/Banners/bannerModels.ts +117 -0
- package/Banners/index.ts +7 -0
- package/Entitlements/EntitlementsContext.ts +17 -0
- package/Entitlements/RequiresModule.tsx +68 -0
- package/Entitlements/entitlementModel.ts +175 -0
- package/Entitlements/index.ts +9 -0
- package/Entitlements/moduleFilter.ts +23 -0
- package/Entitlements/requiresModuleModel.ts +44 -0
- package/Entitlements/useEntitlements.ts +25 -0
- package/Labels/BoxOfficeLabels.ts +239 -0
- package/Labels/defaultBoxOfficeLabels.ts +119 -0
- package/Labels/format.ts +13 -0
- package/Labels/index.ts +7 -0
- package/Labels/resolveLabels.ts +36 -0
- package/Plan/PlanPage.tsx +24 -0
- package/Plan/PlanView.tsx +80 -0
- package/Plan/index.ts +6 -0
- package/Plan/planModels.ts +127 -0
- package/Portal/PortalButton.tsx +48 -0
- package/Portal/index.ts +5 -0
- package/Portal/portalLinks.ts +32 -0
- package/Provider/BoxOfficeContext.ts +67 -0
- package/Provider/BoxOfficeProvider.tsx +96 -0
- package/Provider/index.ts +5 -0
- package/README.md +71 -2
- package/Seats/AssignSeatDialog.tsx +73 -0
- package/Seats/SeatsPage.tsx +85 -0
- package/Seats/SeatsView.tsx +108 -0
- package/Seats/index.ts +7 -0
- package/Seats/seatModels.ts +97 -0
- package/Usage/UsagePage.tsx +26 -0
- package/Usage/UsageView.tsx +94 -0
- package/Usage/index.ts +6 -0
- package/Usage/usageModels.ts +92 -0
- package/dist/cjs/Banners/NoLicense.d.ts +2 -0
- package/dist/cjs/Banners/NoLicense.d.ts.map +1 -0
- package/dist/cjs/Banners/NoLicense.js +50 -0
- package/dist/cjs/Banners/NoLicense.js.map +1 -0
- package/dist/cjs/Banners/SuspensionBanner.d.ts +7 -0
- package/dist/cjs/Banners/SuspensionBanner.d.ts.map +1 -0
- package/dist/cjs/Banners/SuspensionBanner.js +62 -0
- package/dist/cjs/Banners/SuspensionBanner.js.map +1 -0
- package/dist/cjs/Banners/TrialBanner.d.ts +2 -0
- package/dist/cjs/Banners/TrialBanner.d.ts.map +1 -0
- package/dist/cjs/Banners/TrialBanner.js +38 -0
- package/dist/cjs/Banners/TrialBanner.js.map +1 -0
- package/dist/cjs/Banners/bannerModels.d.ts +19 -0
- package/dist/cjs/Banners/bannerModels.d.ts.map +1 -0
- package/dist/cjs/Banners/bannerModels.js +101 -0
- package/dist/cjs/Banners/bannerModels.js.map +1 -0
- package/dist/cjs/Banners/index.d.ts +5 -0
- package/dist/cjs/Banners/index.d.ts.map +1 -0
- package/dist/cjs/Entitlements/EntitlementsContext.d.ts +4 -0
- package/dist/cjs/Entitlements/EntitlementsContext.d.ts.map +1 -0
- package/dist/cjs/Entitlements/EntitlementsContext.js +19 -0
- package/dist/cjs/Entitlements/EntitlementsContext.js.map +1 -0
- package/dist/cjs/Entitlements/RequiresModule.d.ts +9 -0
- package/dist/cjs/Entitlements/RequiresModule.d.ts.map +1 -0
- package/dist/cjs/Entitlements/RequiresModule.js +68 -0
- package/dist/cjs/Entitlements/RequiresModule.js.map +1 -0
- package/dist/cjs/Entitlements/entitlementModel.d.ts +25 -0
- package/dist/cjs/Entitlements/entitlementModel.d.ts.map +1 -0
- package/dist/cjs/Entitlements/entitlementModel.js +93 -0
- package/dist/cjs/Entitlements/entitlementModel.js.map +1 -0
- package/dist/cjs/Entitlements/index.d.ts +7 -0
- package/dist/cjs/Entitlements/index.d.ts.map +1 -0
- package/dist/cjs/Entitlements/moduleFilter.d.ts +6 -0
- package/dist/cjs/Entitlements/moduleFilter.d.ts.map +1 -0
- package/dist/cjs/Entitlements/moduleFilter.js +16 -0
- package/dist/cjs/Entitlements/moduleFilter.js.map +1 -0
- package/dist/cjs/Entitlements/requiresModuleModel.d.ts +10 -0
- package/dist/cjs/Entitlements/requiresModuleModel.d.ts.map +1 -0
- package/dist/cjs/Entitlements/requiresModuleModel.js +32 -0
- package/dist/cjs/Entitlements/requiresModuleModel.js.map +1 -0
- package/dist/cjs/Entitlements/useEntitlements.d.ts +5 -0
- package/dist/cjs/Entitlements/useEntitlements.d.ts.map +1 -0
- package/dist/cjs/Entitlements/useEntitlements.js +26 -0
- package/dist/cjs/Entitlements/useEntitlements.js.map +1 -0
- package/dist/cjs/Labels/BoxOfficeLabels.d.ts +116 -0
- package/dist/cjs/Labels/BoxOfficeLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.d.ts +3 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.js +120 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.js.map +1 -0
- package/dist/cjs/Labels/format.d.ts +2 -0
- package/dist/cjs/Labels/format.d.ts.map +1 -0
- package/dist/cjs/Labels/format.js +15 -0
- package/dist/cjs/Labels/format.js.map +1 -0
- package/dist/cjs/Labels/index.d.ts +5 -0
- package/dist/cjs/Labels/index.d.ts.map +1 -0
- package/dist/cjs/Labels/resolveLabels.d.ts +3 -0
- package/dist/cjs/Labels/resolveLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/resolveLabels.js +35 -0
- package/dist/cjs/Labels/resolveLabels.js.map +1 -0
- package/dist/cjs/Plan/PlanPage.d.ts +2 -0
- package/dist/cjs/Plan/PlanPage.d.ts.map +1 -0
- package/dist/cjs/Plan/PlanPage.js +24 -0
- package/dist/cjs/Plan/PlanPage.js.map +1 -0
- package/dist/cjs/Plan/PlanView.d.ts +10 -0
- package/dist/cjs/Plan/PlanView.d.ts.map +1 -0
- package/dist/cjs/Plan/PlanView.js +123 -0
- package/dist/cjs/Plan/PlanView.js.map +1 -0
- package/dist/cjs/Plan/index.d.ts +4 -0
- package/dist/cjs/Plan/index.d.ts.map +1 -0
- package/dist/cjs/Plan/planModels.d.ts +24 -0
- package/dist/cjs/Plan/planModels.d.ts.map +1 -0
- package/dist/cjs/Plan/planModels.js +83 -0
- package/dist/cjs/Plan/planModels.js.map +1 -0
- package/dist/cjs/Portal/PortalButton.d.ts +10 -0
- package/dist/cjs/Portal/PortalButton.d.ts.map +1 -0
- package/dist/cjs/Portal/PortalButton.js +37 -0
- package/dist/cjs/Portal/PortalButton.js.map +1 -0
- package/dist/cjs/Portal/index.d.ts +3 -0
- package/dist/cjs/Portal/index.d.ts.map +1 -0
- package/dist/cjs/Portal/portalLinks.d.ts +6 -0
- package/dist/cjs/Portal/portalLinks.d.ts.map +1 -0
- package/dist/cjs/Portal/portalLinks.js +34 -0
- package/dist/cjs/Portal/portalLinks.js.map +1 -0
- package/dist/cjs/Provider/BoxOfficeContext.d.ts +16 -0
- package/dist/cjs/Provider/BoxOfficeContext.d.ts.map +1 -0
- package/dist/cjs/Provider/BoxOfficeContext.js +34 -0
- package/dist/cjs/Provider/BoxOfficeContext.js.map +1 -0
- package/dist/cjs/Provider/BoxOfficeProvider.d.ts +15 -0
- package/dist/cjs/Provider/BoxOfficeProvider.d.ts.map +1 -0
- package/dist/cjs/Provider/BoxOfficeProvider.js +72 -0
- package/dist/cjs/Provider/BoxOfficeProvider.js.map +1 -0
- package/dist/cjs/Provider/index.d.ts +3 -0
- package/dist/cjs/Provider/index.d.ts.map +1 -0
- package/dist/cjs/Seats/AssignSeatDialog.d.ts +9 -0
- package/dist/cjs/Seats/AssignSeatDialog.d.ts.map +1 -0
- package/dist/cjs/Seats/AssignSeatDialog.js +99 -0
- package/dist/cjs/Seats/AssignSeatDialog.js.map +1 -0
- package/dist/cjs/Seats/SeatsPage.d.ts +2 -0
- package/dist/cjs/Seats/SeatsPage.d.ts.map +1 -0
- package/dist/cjs/Seats/SeatsPage.js +87 -0
- package/dist/cjs/Seats/SeatsPage.js.map +1 -0
- package/dist/cjs/Seats/SeatsView.d.ts +14 -0
- package/dist/cjs/Seats/SeatsView.d.ts.map +1 -0
- package/dist/cjs/Seats/SeatsView.js +111 -0
- package/dist/cjs/Seats/SeatsView.js.map +1 -0
- package/dist/cjs/Seats/index.d.ts +5 -0
- package/dist/cjs/Seats/index.d.ts.map +1 -0
- package/dist/cjs/Seats/seatModels.d.ts +23 -0
- package/dist/cjs/Seats/seatModels.d.ts.map +1 -0
- package/dist/cjs/Seats/seatModels.js +65 -0
- package/dist/cjs/Seats/seatModels.js.map +1 -0
- package/dist/cjs/Usage/UsagePage.d.ts +2 -0
- package/dist/cjs/Usage/UsagePage.d.ts.map +1 -0
- package/dist/cjs/Usage/UsagePage.js +26 -0
- package/dist/cjs/Usage/UsagePage.js.map +1 -0
- package/dist/cjs/Usage/UsageView.d.ts +9 -0
- package/dist/cjs/Usage/UsageView.d.ts.map +1 -0
- package/dist/cjs/Usage/UsageView.js +108 -0
- package/dist/cjs/Usage/UsageView.js.map +1 -0
- package/dist/cjs/Usage/index.d.ts +4 -0
- package/dist/cjs/Usage/index.d.ts.map +1 -0
- package/dist/cjs/Usage/usageModels.d.ts +17 -0
- package/dist/cjs/Usage/usageModels.d.ts.map +1 -0
- package/dist/cjs/Usage/usageModels.js +57 -0
- package/dist/cjs/Usage/usageModels.js.map +1 -0
- package/dist/cjs/formatting.d.ts +5 -0
- package/dist/cjs/formatting.d.ts.map +1 -0
- package/dist/cjs/formatting.js +46 -0
- package/dist/cjs/formatting.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +85 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/esm/Banners/NoLicense.d.ts +2 -0
- package/dist/esm/Banners/NoLicense.d.ts.map +1 -0
- package/dist/esm/Banners/NoLicense.js +48 -0
- package/dist/esm/Banners/NoLicense.js.map +1 -0
- package/dist/esm/Banners/SuspensionBanner.d.ts +7 -0
- package/dist/esm/Banners/SuspensionBanner.d.ts.map +1 -0
- package/dist/esm/Banners/SuspensionBanner.js +59 -0
- package/dist/esm/Banners/SuspensionBanner.js.map +1 -0
- package/dist/esm/Banners/TrialBanner.d.ts +2 -0
- package/dist/esm/Banners/TrialBanner.d.ts.map +1 -0
- package/dist/esm/Banners/TrialBanner.js +36 -0
- package/dist/esm/Banners/TrialBanner.js.map +1 -0
- package/dist/esm/Banners/bannerModels.d.ts +19 -0
- package/dist/esm/Banners/bannerModels.d.ts.map +1 -0
- package/dist/esm/Banners/bannerModels.js +96 -0
- package/dist/esm/Banners/bannerModels.js.map +1 -0
- package/dist/esm/Banners/index.d.ts +5 -0
- package/dist/esm/Banners/index.d.ts.map +1 -0
- package/dist/esm/Banners/index.js +5 -0
- package/dist/esm/Banners/index.js.map +1 -0
- package/dist/esm/Entitlements/EntitlementsContext.d.ts +4 -0
- package/dist/esm/Entitlements/EntitlementsContext.d.ts.map +1 -0
- package/dist/esm/Entitlements/EntitlementsContext.js +16 -0
- package/dist/esm/Entitlements/EntitlementsContext.js.map +1 -0
- package/dist/esm/Entitlements/RequiresModule.d.ts +9 -0
- package/dist/esm/Entitlements/RequiresModule.d.ts.map +1 -0
- package/dist/esm/Entitlements/RequiresModule.js +66 -0
- package/dist/esm/Entitlements/RequiresModule.js.map +1 -0
- package/dist/esm/Entitlements/entitlementModel.d.ts +25 -0
- package/dist/esm/Entitlements/entitlementModel.d.ts.map +1 -0
- package/dist/esm/Entitlements/entitlementModel.js +89 -0
- package/dist/esm/Entitlements/entitlementModel.js.map +1 -0
- package/dist/esm/Entitlements/index.d.ts +7 -0
- package/dist/esm/Entitlements/index.d.ts.map +1 -0
- package/dist/esm/Entitlements/index.js +7 -0
- package/dist/esm/Entitlements/index.js.map +1 -0
- package/dist/esm/Entitlements/moduleFilter.d.ts +6 -0
- package/dist/esm/Entitlements/moduleFilter.d.ts.map +1 -0
- package/dist/esm/Entitlements/moduleFilter.js +14 -0
- package/dist/esm/Entitlements/moduleFilter.js.map +1 -0
- package/dist/esm/Entitlements/requiresModuleModel.d.ts +10 -0
- package/dist/esm/Entitlements/requiresModuleModel.d.ts.map +1 -0
- package/dist/esm/Entitlements/requiresModuleModel.js +30 -0
- package/dist/esm/Entitlements/requiresModuleModel.js.map +1 -0
- package/dist/esm/Entitlements/useEntitlements.d.ts +5 -0
- package/dist/esm/Entitlements/useEntitlements.d.ts.map +1 -0
- package/dist/esm/Entitlements/useEntitlements.js +23 -0
- package/dist/esm/Entitlements/useEntitlements.js.map +1 -0
- package/dist/esm/Labels/BoxOfficeLabels.d.ts +116 -0
- package/dist/esm/Labels/BoxOfficeLabels.d.ts.map +1 -0
- package/dist/esm/Labels/BoxOfficeLabels.js +2 -0
- package/dist/esm/Labels/BoxOfficeLabels.js.map +1 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.d.ts +3 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.d.ts.map +1 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.js +118 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.js.map +1 -0
- package/dist/esm/Labels/format.d.ts +2 -0
- package/dist/esm/Labels/format.d.ts.map +1 -0
- package/dist/esm/Labels/format.js +13 -0
- package/dist/esm/Labels/format.js.map +1 -0
- package/dist/esm/Labels/index.d.ts +5 -0
- package/dist/esm/Labels/index.d.ts.map +1 -0
- package/dist/esm/Labels/index.js +5 -0
- package/dist/esm/Labels/index.js.map +1 -0
- package/dist/esm/Labels/resolveLabels.d.ts +3 -0
- package/dist/esm/Labels/resolveLabels.d.ts.map +1 -0
- package/dist/esm/Labels/resolveLabels.js +33 -0
- package/dist/esm/Labels/resolveLabels.js.map +1 -0
- package/dist/esm/Plan/PlanPage.d.ts +2 -0
- package/dist/esm/Plan/PlanPage.d.ts.map +1 -0
- package/dist/esm/Plan/PlanPage.js +22 -0
- package/dist/esm/Plan/PlanPage.js.map +1 -0
- package/dist/esm/Plan/PlanView.d.ts +10 -0
- package/dist/esm/Plan/PlanView.d.ts.map +1 -0
- package/dist/esm/Plan/PlanView.js +121 -0
- package/dist/esm/Plan/PlanView.js.map +1 -0
- package/dist/esm/Plan/index.d.ts +4 -0
- package/dist/esm/Plan/index.d.ts.map +1 -0
- package/dist/esm/Plan/index.js +4 -0
- package/dist/esm/Plan/index.js.map +1 -0
- package/dist/esm/Plan/planModels.d.ts +24 -0
- package/dist/esm/Plan/planModels.d.ts.map +1 -0
- package/dist/esm/Plan/planModels.js +78 -0
- package/dist/esm/Plan/planModels.js.map +1 -0
- package/dist/esm/Portal/PortalButton.d.ts +10 -0
- package/dist/esm/Portal/PortalButton.d.ts.map +1 -0
- package/dist/esm/Portal/PortalButton.js +35 -0
- package/dist/esm/Portal/PortalButton.js.map +1 -0
- package/dist/esm/Portal/index.d.ts +3 -0
- package/dist/esm/Portal/index.d.ts.map +1 -0
- package/dist/esm/Portal/index.js +3 -0
- package/dist/esm/Portal/index.js.map +1 -0
- package/dist/esm/Portal/portalLinks.d.ts +6 -0
- package/dist/esm/Portal/portalLinks.d.ts.map +1 -0
- package/dist/esm/Portal/portalLinks.js +31 -0
- package/dist/esm/Portal/portalLinks.js.map +1 -0
- package/dist/esm/Provider/BoxOfficeContext.d.ts +16 -0
- package/dist/esm/Provider/BoxOfficeContext.d.ts.map +1 -0
- package/dist/esm/Provider/BoxOfficeContext.js +29 -0
- package/dist/esm/Provider/BoxOfficeContext.js.map +1 -0
- package/dist/esm/Provider/BoxOfficeProvider.d.ts +15 -0
- package/dist/esm/Provider/BoxOfficeProvider.d.ts.map +1 -0
- package/dist/esm/Provider/BoxOfficeProvider.js +70 -0
- package/dist/esm/Provider/BoxOfficeProvider.js.map +1 -0
- package/dist/esm/Provider/index.d.ts +3 -0
- package/dist/esm/Provider/index.d.ts.map +1 -0
- package/dist/esm/Provider/index.js +3 -0
- package/dist/esm/Provider/index.js.map +1 -0
- package/dist/esm/Seats/AssignSeatDialog.d.ts +9 -0
- package/dist/esm/Seats/AssignSeatDialog.d.ts.map +1 -0
- package/dist/esm/Seats/AssignSeatDialog.js +97 -0
- package/dist/esm/Seats/AssignSeatDialog.js.map +1 -0
- package/dist/esm/Seats/SeatsPage.d.ts +2 -0
- package/dist/esm/Seats/SeatsPage.d.ts.map +1 -0
- package/dist/esm/Seats/SeatsPage.js +85 -0
- package/dist/esm/Seats/SeatsPage.js.map +1 -0
- package/dist/esm/Seats/SeatsView.d.ts +14 -0
- package/dist/esm/Seats/SeatsView.d.ts.map +1 -0
- package/dist/esm/Seats/SeatsView.js +109 -0
- package/dist/esm/Seats/SeatsView.js.map +1 -0
- package/dist/esm/Seats/index.d.ts +5 -0
- package/dist/esm/Seats/index.d.ts.map +1 -0
- package/dist/esm/Seats/index.js +5 -0
- package/dist/esm/Seats/index.js.map +1 -0
- package/dist/esm/Seats/seatModels.d.ts +23 -0
- package/dist/esm/Seats/seatModels.d.ts.map +1 -0
- package/dist/esm/Seats/seatModels.js +59 -0
- package/dist/esm/Seats/seatModels.js.map +1 -0
- package/dist/esm/Usage/UsagePage.d.ts +2 -0
- package/dist/esm/Usage/UsagePage.d.ts.map +1 -0
- package/dist/esm/Usage/UsagePage.js +24 -0
- package/dist/esm/Usage/UsagePage.js.map +1 -0
- package/dist/esm/Usage/UsageView.d.ts +9 -0
- package/dist/esm/Usage/UsageView.d.ts.map +1 -0
- package/dist/esm/Usage/UsageView.js +106 -0
- package/dist/esm/Usage/UsageView.js.map +1 -0
- package/dist/esm/Usage/index.d.ts +4 -0
- package/dist/esm/Usage/index.d.ts.map +1 -0
- package/dist/esm/Usage/index.js +4 -0
- package/dist/esm/Usage/index.js.map +1 -0
- package/dist/esm/Usage/usageModels.d.ts +17 -0
- package/dist/esm/Usage/usageModels.d.ts.map +1 -0
- package/dist/esm/Usage/usageModels.js +53 -0
- package/dist/esm/Usage/usageModels.js.map +1 -0
- package/dist/esm/formatting.d.ts +5 -0
- package/dist/esm/formatting.d.ts.map +1 -0
- package/dist/esm/formatting.js +42 -0
- package/dist/esm/formatting.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +29 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/formatting.ts +41 -0
- package/index.ts +12 -0
- package/package.json +84 -4
- package/styles.css +166 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerModels.js","sources":["../../../Banners/bannerModels.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ReadOnlyReason, SeatStanding, SeatStatus, SuspensionCause } from '@cratis/showrunner.boxoffice';\nimport { Entitlements } from '../Entitlements/entitlementModel.js';\nimport { BoxOfficeLabels, format } from '../Labels/index.js';\n\n/** How loud a banner is. */\nexport type BannerSeverity = 'info' | 'warn' | 'error';\n\n/**\n * What the trial banner says.\n */\nexport interface TrialBannerModel {\n /** How loud the banner is. */\n readonly severity: BannerSeverity;\n\n /** What it says. */\n readonly text: string;\n}\n\n/** How many days before a trial ends the banner turns into a warning. */\nexport const trialWarningDays = 7;\n\n/**\n * Works out what the trial banner says.\n * @param entitlements What the tenant may do.\n * @param labels The labels to show.\n * @returns What to say; undefined when the tenant is not on a trial, or the trial is not what makes it read-only.\n */\nexport function trialBannerModel(entitlements: Entitlements, labels: BoxOfficeLabels): TrialBannerModel | undefined {\n if (entitlements.state === 'trialClosed') {\n return { severity: 'error', text: labels.trialBanner.closed };\n }\n\n if (entitlements.state !== 'trial' || !entitlements.trial) {\n return undefined;\n }\n\n const { daysLeft } = entitlements.trial;\n if (daysLeft <= 0) {\n return { severity: 'warn', text: labels.trialBanner.lastDay };\n }\n\n return {\n severity: daysLeft <= trialWarningDays ? 'warn' : 'info',\n text: format(labels.trialBanner.running, { days: daysLeft })\n };\n}\n\n/**\n * Says why the operator suspended a tenant.\n * @param cause The cause the operator gave.\n * @param labels The labels to show.\n * @returns The reason, in words.\n */\nexport function suspensionReason(cause: SuspensionCause | undefined, labels: BoxOfficeLabels): string {\n switch (cause) {\n case SuspensionCause.trialEndedWithoutSeats:\n return labels.suspension.trialEndedWithoutSeats;\n case SuspensionCause.paymentOverdue:\n return labels.suspension.paymentOverdue;\n case SuspensionCause.administratorDecision:\n return labels.suspension.administratorDecision;\n default:\n return '';\n }\n}\n\n/** Why a user is told they have no license. */\nexport type NoLicenseReason = 'suspended' | 'trialClosed' | 'noSeat' | 'overCapacity';\n\n/**\n * What a user without a license is told.\n */\nexport interface NoLicenseModel {\n /** Why the user has no license. */\n readonly reason: NoLicenseReason;\n\n /** The title. */\n readonly title: string;\n\n /** What to do about it. */\n readonly text: string;\n}\n\n/**\n * Works out whether the user has a license, and what to tell them if not. The tenant being read-only comes first,\n * because it holds for everyone in it.\n * @param entitlements What the tenant may do.\n * @param seat Where the user stands with the tenant's seats; nothing while it loads.\n * @param labels The labels to show.\n * @returns What to tell the user; undefined when they have a license, or it is not known yet.\n */\nexport function noLicenseModel(entitlements: Entitlements, seat: SeatStanding | undefined, labels: BoxOfficeLabels): NoLicenseModel | undefined {\n if (entitlements.isLoading) {\n return undefined;\n }\n\n if (entitlements.readOnlyReason === ReadOnlyReason.tenantSuspended) {\n return { reason: 'suspended', title: labels.noLicense.suspendedTitle, text: labels.noLicense.suspended };\n }\n\n if (entitlements.readOnlyReason === ReadOnlyReason.trialClosed) {\n return { reason: 'trialClosed', title: labels.noLicense.trialClosedTitle, text: labels.noLicense.trialClosed };\n }\n\n if (seat?.status === SeatStatus.noSeat) {\n return { reason: 'noSeat', title: labels.noLicense.noSeatTitle, text: labels.noLicense.noSeat };\n }\n\n if (seat?.status === SeatStatus.overCapacity) {\n return { reason: 'overCapacity', title: labels.noLicense.overCapacityTitle, text: labels.noLicense.overCapacity };\n }\n\n return undefined;\n}\n"],"names":["trialWarningDays","trialBannerModel","entitlements","labels","state","severity","text","trialBanner","closed","trial","undefined","daysLeft","lastDay","format","running","days","suspensionReason","cause","SuspensionCause","trialEndedWithoutSeats","suspension","paymentOverdue","administratorDecision","noLicenseModel","seat","isLoading","readOnlyReason","ReadOnlyReason","tenantSuspended","reason","title","noLicense","suspendedTitle","suspended","trialClosed","trialClosedTitle","status","SeatStatus","noSeat","noSeatTitle","overCapacity","overCapacityTitle"],"mappings":";;;;;AAAA;AACA;AAoBA,0EACO,MAAMA,gBAAAA,GAAmB;AAEhC;;;;;AAKC,IACM,SAASC,gBAAAA,CAAiBC,YAA0B,EAAEC,MAAuB,EAAA;IAChF,IAAID,YAAAA,CAAaE,KAAK,KAAK,aAAA,EAAe;QACtC,OAAO;YAAEC,QAAAA,EAAU,OAAA;YAASC,IAAAA,EAAMH,MAAAA,CAAOI,WAAW,CAACC;AAAO,SAAA;AAChE,IAAA;AAEA,IAAA,IAAIN,aAAaE,KAAK,KAAK,WAAW,CAACF,YAAAA,CAAaO,KAAK,EAAE;QACvD,OAAOC,SAAAA;AACX,IAAA;AAEA,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGT,aAAaO,KAAK;AACvC,IAAA,IAAIE,YAAY,CAAA,EAAG;QACf,OAAO;YAAEN,QAAAA,EAAU,MAAA;YAAQC,IAAAA,EAAMH,MAAAA,CAAOI,WAAW,CAACK;AAAQ,SAAA;AAChE,IAAA;IAEA,OAAO;QACHP,QAAAA,EAAUM,QAAAA,IAAYX,mBAAmB,MAAA,GAAS,MAAA;AAClDM,QAAAA,IAAAA,EAAMO,aAAAA,CAAOV,MAAAA,CAAOI,WAAW,CAACO,OAAO,EAAE;YAAEC,IAAAA,EAAMJ;AAAS,SAAA;AAC9D,KAAA;AACJ;AAEA;;;;;AAKC,IACM,SAASK,gBAAAA,CAAiBC,KAAkC,EAAEd,MAAuB,EAAA;IACxF,OAAQc,KAAAA;AACJ,QAAA,KAAKC,qCAAgBC,sBAAsB;YACvC,OAAOhB,MAAAA,CAAOiB,UAAU,CAACD,sBAAsB;AACnD,QAAA,KAAKD,qCAAgBG,cAAc;YAC/B,OAAOlB,MAAAA,CAAOiB,UAAU,CAACC,cAAc;AAC3C,QAAA,KAAKH,qCAAgBI,qBAAqB;YACtC,OAAOnB,MAAAA,CAAOiB,UAAU,CAACE,qBAAqB;AAClD,QAAA;YACI,OAAO,EAAA;AACf;AACJ;AAmBA;;;;;;;AAOC,IACM,SAASC,cAAAA,CAAerB,YAA0B,EAAEsB,IAA8B,EAAErB,MAAuB,EAAA;IAC9G,IAAID,YAAAA,CAAauB,SAAS,EAAE;QACxB,OAAOf,SAAAA;AACX,IAAA;AAEA,IAAA,IAAIR,YAAAA,CAAawB,cAAc,KAAKC,mCAAAA,CAAeC,eAAe,EAAE;QAChE,OAAO;YAAEC,MAAAA,EAAQ,WAAA;YAAaC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACC,cAAc;YAAE1B,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACE;AAAU,SAAA;AAC3G,IAAA;AAEA,IAAA,IAAI/B,YAAAA,CAAawB,cAAc,KAAKC,mCAAAA,CAAeO,WAAW,EAAE;QAC5D,OAAO;YAAEL,MAAAA,EAAQ,aAAA;YAAeC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACI,gBAAgB;YAAE7B,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACG;AAAY,SAAA;AACjH,IAAA;AAEA,IAAA,IAAIV,IAAAA,EAAMY,MAAAA,KAAWC,+BAAAA,CAAWC,MAAM,EAAE;QACpC,OAAO;YAAET,MAAAA,EAAQ,QAAA;YAAUC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACQ,WAAW;YAAEjC,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACO;AAAO,SAAA;AAClG,IAAA;AAEA,IAAA,IAAId,IAAAA,EAAMY,MAAAA,KAAWC,+BAAAA,CAAWG,YAAY,EAAE;QAC1C,OAAO;YAAEX,MAAAA,EAAQ,cAAA;YAAgBC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACU,iBAAiB;YAAEnC,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACS;AAAa,SAAA;AACpH,IAAA;IAEA,OAAO9B,SAAAA;AACX;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Banners/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitlementsContext.d.ts","sourceRoot":"","sources":["../../../Entitlements/EntitlementsContext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAMrE,eAAO,MAAM,mBAAmB,uCAAyD,CAAC;AAM1F,eAAO,MAAM,sBAAsB,QAAO,YAA+C,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var entitlementModel = require('./entitlementModel.js');
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
/**
|
|
9
|
+
* The React context {@link BoxOfficeProvider} provides the entitlements through. Without a provider nothing is
|
|
10
|
+
* known, so nothing that belongs to a module is shown.
|
|
11
|
+
*/ const EntitlementsContext = react.createContext(entitlementModel.entitlementsOf(undefined));
|
|
12
|
+
/**
|
|
13
|
+
* Gets what the tenant may do.
|
|
14
|
+
* @returns The {@link Entitlements}.
|
|
15
|
+
*/ const useEntitlementsContext = ()=>react.useContext(EntitlementsContext);
|
|
16
|
+
|
|
17
|
+
exports.EntitlementsContext = EntitlementsContext;
|
|
18
|
+
exports.useEntitlementsContext = useEntitlementsContext;
|
|
19
|
+
//# sourceMappingURL=EntitlementsContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitlementsContext.js","sources":["../../../Entitlements/EntitlementsContext.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { createContext, useContext } from 'react';\nimport { Entitlements, entitlementsOf } from './entitlementModel.js';\n\n/**\n * The React context {@link BoxOfficeProvider} provides the entitlements through. Without a provider nothing is\n * known, so nothing that belongs to a module is shown.\n */\nexport const EntitlementsContext = createContext<Entitlements>(entitlementsOf(undefined));\n\n/**\n * Gets what the tenant may do.\n * @returns The {@link Entitlements}.\n */\nexport const useEntitlementsContext = (): Entitlements => useContext(EntitlementsContext);\n"],"names":["EntitlementsContext","createContext","entitlementsOf","undefined","useEntitlementsContext","useContext"],"mappings":";;;;;AAAA;AACA;AAKA;;;AAGC,IACM,MAAMA,mBAAAA,GAAsBC,mBAAAA,CAA4BC,gCAAeC,SAAAA,CAAAA;AAE9E;;;AAGC,IACM,MAAMC,sBAAAA,GAAyB,IAAoBC,iBAAWL,mBAAAA;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface RequiresModuleProps {
|
|
3
|
+
module: string;
|
|
4
|
+
mode?: 'hide' | 'explain';
|
|
5
|
+
fallback?: ReactNode;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const RequiresModule: ({ module, mode, fallback, children }: RequiresModuleProps) => import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=RequiresModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequiresModule.d.ts","sourceRoot":"","sources":["../../../Entitlements/RequiresModule.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASlC,MAAM,WAAW,mBAAmB;IAEhC,MAAM,EAAE,MAAM,CAAC;IAMf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG1B,QAAQ,CAAC,EAAE,SAAS,CAAC;IAGrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAOD,eAAO,MAAM,cAAc,GAAI,sCAA+C,mBAAmB,uCA+BhG,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var Display = require('@cratis/components/Display');
|
|
5
|
+
var showrunner_boxoffice = require('@cratis/showrunner.boxoffice');
|
|
6
|
+
var PortalButton = require('../Portal/PortalButton.js');
|
|
7
|
+
var BoxOfficeContext = require('../Provider/BoxOfficeContext.js');
|
|
8
|
+
var EntitlementsContext = require('./EntitlementsContext.js');
|
|
9
|
+
var requiresModuleModel = require('./requiresModuleModel.js');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Shows its content only when the tenant has the module, in full or on trial. Nothing is shown while the entitlements
|
|
13
|
+
* load, so the content never flashes up and is taken away. The backend refuses the module's commands and queries on its
|
|
14
|
+
* own; this is what keeps the user from meeting the refusal.
|
|
15
|
+
*/ const RequiresModule = ({ module, mode = 'hide', fallback, children })=>{
|
|
16
|
+
const entitlements = EntitlementsContext.useEntitlementsContext();
|
|
17
|
+
const labels = BoxOfficeContext.useBoxOfficeLabels();
|
|
18
|
+
if (entitlements.isLoading) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const model = requiresModuleModel.requiresModuleModel(entitlements, module, labels);
|
|
22
|
+
if (model.hasModule) {
|
|
23
|
+
return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
24
|
+
children: children
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (mode === 'hide') {
|
|
28
|
+
return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
29
|
+
children: fallback
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
33
|
+
className: "boxoffice-requires-module",
|
|
34
|
+
children: [
|
|
35
|
+
/*#__PURE__*/ jsxRuntime.jsx(Display.Message, {
|
|
36
|
+
severity: "info",
|
|
37
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
38
|
+
className: "boxoffice-requires-module__text",
|
|
39
|
+
children: [
|
|
40
|
+
/*#__PURE__*/ jsxRuntime.jsx("strong", {
|
|
41
|
+
children: model.title
|
|
42
|
+
}),
|
|
43
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
44
|
+
children: model.text
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
})
|
|
48
|
+
}),
|
|
49
|
+
/*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
50
|
+
className: "boxoffice-requires-module__actions",
|
|
51
|
+
children: [
|
|
52
|
+
model.canTry && /*#__PURE__*/ jsxRuntime.jsx(PortalButton.PortalButton, {
|
|
53
|
+
intent: showrunner_boxoffice.PortalIntent.try,
|
|
54
|
+
label: labels.requiresModule.try,
|
|
55
|
+
variant: "outline"
|
|
56
|
+
}),
|
|
57
|
+
/*#__PURE__*/ jsxRuntime.jsx(PortalButton.PortalButton, {
|
|
58
|
+
intent: showrunner_boxoffice.PortalIntent.buy,
|
|
59
|
+
label: labels.requiresModule.buy
|
|
60
|
+
})
|
|
61
|
+
]
|
|
62
|
+
})
|
|
63
|
+
]
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
exports.RequiresModule = RequiresModule;
|
|
68
|
+
//# sourceMappingURL=RequiresModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequiresModule.js","sources":["../../../Entitlements/RequiresModule.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Message } from '@cratis/components/Display';\nimport { PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { ReactNode } from 'react';\nimport { PortalButton } from '../Portal/PortalButton.js';\nimport { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';\nimport { useEntitlementsContext } from './EntitlementsContext.js';\nimport { requiresModuleModel } from './requiresModuleModel.js';\n\n/**\n * Props for {@link RequiresModule}.\n */\nexport interface RequiresModuleProps {\n /** The module whose content this is. */\n module: string;\n\n /**\n * What to do when the tenant does not have the module: `hide` shows the fallback, which is nothing unless given;\n * `explain` says why it is not there, and offers to try or buy it. Defaults to `hide`.\n */\n mode?: 'hide' | 'explain';\n\n /** What to show instead of the content in `hide` mode. Nothing when not given. */\n fallback?: ReactNode;\n\n /** The content of the module. */\n children?: ReactNode;\n}\n\n/**\n * Shows its content only when the tenant has the module, in full or on trial. Nothing is shown while the entitlements\n * load, so the content never flashes up and is taken away. The backend refuses the module's commands and queries on its\n * own; this is what keeps the user from meeting the refusal.\n */\nexport const RequiresModule = ({ module, mode = 'hide', fallback, children }: RequiresModuleProps) => {\n const entitlements = useEntitlementsContext();\n const labels = useBoxOfficeLabels();\n\n if (entitlements.isLoading) {\n return null;\n }\n\n const model = requiresModuleModel(entitlements, module, labels);\n if (model.hasModule) {\n return <>{children}</>;\n }\n\n if (mode === 'hide') {\n return <>{fallback}</>;\n }\n\n return (\n <div className='boxoffice-requires-module'>\n <Message severity='info'>\n <div className='boxoffice-requires-module__text'>\n <strong>{model.title}</strong>\n <span>{model.text}</span>\n </div>\n </Message>\n <div className='boxoffice-requires-module__actions'>\n {model.canTry && <PortalButton intent={PortalIntent.try} label={labels.requiresModule.try} variant='outline' />}\n <PortalButton intent={PortalIntent.buy} label={labels.requiresModule.buy} />\n </div>\n </div>\n );\n};\n"],"names":["RequiresModule","module","mode","fallback","children","entitlements","useEntitlementsContext","labels","useBoxOfficeLabels","isLoading","model","requiresModuleModel","hasModule","_jsx","_Fragment","_jsxs","div","className","Message","severity","strong","title","span","text","canTry","PortalButton","intent","PortalIntent","try","label","requiresModule","variant","buy"],"mappings":";;;;;;;;;;AA+BA;;;;AAIC,IACM,MAAMA,cAAAA,GAAiB,CAAC,EAAEC,MAAM,EAAEC,IAAAA,GAAO,MAAM,EAAEC,QAAQ,EAAEC,QAAQ,EAAuB,GAAA;AAC7F,IAAA,MAAMC,YAAAA,GAAeC,0CAAAA,EAAAA;AACrB,IAAA,MAAMC,MAAAA,GAASC,mCAAAA,EAAAA;IAEf,IAAIH,YAAAA,CAAaI,SAAS,EAAE;QACxB,OAAO,IAAA;AACX,IAAA;IAEA,MAAMC,KAAAA,GAAQC,uCAAAA,CAAoBN,YAAAA,EAAcJ,MAAAA,EAAQM,MAAAA,CAAAA;IACxD,IAAIG,KAAAA,CAAME,SAAS,EAAE;QACjB,qBAAOC,cAAA,CAAAC,mBAAA,EAAA;AAAGV,YAAAA,QAAAA,EAAAA;;AACd,IAAA;AAEA,IAAA,IAAIF,SAAS,MAAA,EAAQ;QACjB,qBAAOW,cAAA,CAAAC,mBAAA,EAAA;AAAGX,YAAAA,QAAAA,EAAAA;;AACd,IAAA;AAEA,IAAA,qBACIY,eAAA,CAACC,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,2BAAA;;0BACXJ,cAAA,CAACK,eAAAA,EAAAA;gBAAQC,QAAAA,EAAS,MAAA;AACd,gBAAA,QAAA,gBAAAJ,eAAA,CAACC,KAAAA,EAAAA;oBAAIC,SAAAA,EAAU,iCAAA;;sCACXJ,cAAA,CAACO,QAAAA,EAAAA;AAAQV,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMW;;sCACfR,cAAA,CAACS,MAAAA,EAAAA;AAAMZ,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMa;;;;;0BAGrBR,eAAA,CAACC,KAAAA,EAAAA;gBAAIC,SAAAA,EAAU,oCAAA;;oBACVP,KAAAA,CAAMc,MAAM,kBAAIX,cAAA,CAACY,yBAAAA,EAAAA;AAAaC,wBAAAA,MAAAA,EAAQC,kCAAaC,GAAG;wBAAEC,KAAAA,EAAOtB,MAAAA,CAAOuB,cAAc,CAACF,GAAG;wBAAEG,OAAAA,EAAQ;;kCACnGlB,cAAA,CAACY,yBAAAA,EAAAA;AAAaC,wBAAAA,MAAAA,EAAQC,kCAAaK,GAAG;wBAAEH,KAAAA,EAAOtB,MAAAA,CAAOuB,cAAc,CAACE;;;;;;AAIrF;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DateOnly } from '@cratis/fundamentals';
|
|
2
|
+
import { EntitlementSummary, ModuleAccess, ModuleStanding, ReadOnlyReason } from '@cratis/showrunner.boxoffice';
|
|
3
|
+
export type LicenseState = 'loading' | 'suspended' | 'trialClosed' | 'trial' | 'licensed' | 'unlicensed';
|
|
4
|
+
export interface TrialStanding {
|
|
5
|
+
readonly ends: Date;
|
|
6
|
+
readonly daysLeft: number;
|
|
7
|
+
readonly isClosed: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface Entitlements {
|
|
10
|
+
readonly isLoading: boolean;
|
|
11
|
+
readonly state: LicenseState;
|
|
12
|
+
readonly isReadOnly: boolean;
|
|
13
|
+
readonly readOnlyReason: ReadOnlyReason;
|
|
14
|
+
readonly seats: number;
|
|
15
|
+
readonly trial?: TrialStanding;
|
|
16
|
+
readonly canOpenPortal: boolean;
|
|
17
|
+
readonly modules: readonly ModuleStanding[];
|
|
18
|
+
has(module: string): boolean;
|
|
19
|
+
accessTo(module: string): ModuleAccess;
|
|
20
|
+
standingOf(module: string): ModuleStanding | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare function toDate(day: DateOnly | Date | string | undefined): Date | undefined;
|
|
23
|
+
export declare function daysBetween(from: Date, to: Date): number;
|
|
24
|
+
export declare function entitlementsOf(summary: EntitlementSummary | undefined, today?: Date): Entitlements;
|
|
25
|
+
//# sourceMappingURL=entitlementModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlementModel.d.ts","sourceRoot":"","sources":["../../../Entitlements/entitlementModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAYhH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAKzG,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAGpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAG5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAG7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAG7B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAG/B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAGhC,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAO5C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAO7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAOvC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;CAC1D;AASD,wBAAgB,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,CAWlF;AAQD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,MAAM,CAIxD;AAwBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,EAAE,KAAK,GAAE,IAAiB,GAAG,YAAY,CAsC9G"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fundamentals = require('@cratis/fundamentals');
|
|
4
|
+
var showrunner_boxoffice = require('@cratis/showrunner.boxoffice');
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
const millisecondsInADay = 24 * 60 * 60 * 1000;
|
|
9
|
+
/**
|
|
10
|
+
* Turns a day from a proxy into a date.
|
|
11
|
+
* @param day The day: a `DateOnly`, a `yyyy-mm-dd` text, or a date.
|
|
12
|
+
* @returns The date at midnight local time; undefined when there is no day.
|
|
13
|
+
*/ function toDate(day) {
|
|
14
|
+
if (day === undefined || day === null) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
if (day instanceof Date) {
|
|
18
|
+
return new Date(day.getFullYear(), day.getMonth(), day.getDate());
|
|
19
|
+
}
|
|
20
|
+
const dateOnly = typeof day === 'string' ? fundamentals.DateOnly.parse(day.substring(0, 10)) : day;
|
|
21
|
+
return dateOnly.toDate();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Counts the days from one day to another, ignoring the time of day.
|
|
25
|
+
* @param from The day to count from.
|
|
26
|
+
* @param to The day to count to.
|
|
27
|
+
* @returns How many days `to` is after `from`; less than zero when it is before.
|
|
28
|
+
*/ function daysBetween(from, to) {
|
|
29
|
+
const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());
|
|
30
|
+
const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());
|
|
31
|
+
return Math.round((end - start) / millisecondsInADay);
|
|
32
|
+
}
|
|
33
|
+
function stateOf(summary, trial) {
|
|
34
|
+
if (summary.readOnlyReason === showrunner_boxoffice.ReadOnlyReason.tenantSuspended) {
|
|
35
|
+
return 'suspended';
|
|
36
|
+
}
|
|
37
|
+
if (summary.readOnlyReason === showrunner_boxoffice.ReadOnlyReason.trialClosed) {
|
|
38
|
+
return 'trialClosed';
|
|
39
|
+
}
|
|
40
|
+
if (summary.isTrial && trial && !trial.isClosed) {
|
|
41
|
+
return 'trial';
|
|
42
|
+
}
|
|
43
|
+
return summary.seats > 0 ? 'licensed' : 'unlicensed';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Works out what a tenant may do from what the backend says.
|
|
47
|
+
* @param summary The entitlement summary; nothing while it loads.
|
|
48
|
+
* @param today The day it is. Defaults to today.
|
|
49
|
+
* @returns The {@link Entitlements}.
|
|
50
|
+
*/ function entitlementsOf(summary, today = new Date()) {
|
|
51
|
+
if (!summary) {
|
|
52
|
+
return {
|
|
53
|
+
isLoading: true,
|
|
54
|
+
state: 'loading',
|
|
55
|
+
isReadOnly: false,
|
|
56
|
+
readOnlyReason: showrunner_boxoffice.ReadOnlyReason.none,
|
|
57
|
+
seats: 0,
|
|
58
|
+
canOpenPortal: false,
|
|
59
|
+
modules: [],
|
|
60
|
+
has: ()=>false,
|
|
61
|
+
accessTo: ()=>showrunner_boxoffice.ModuleAccess.none,
|
|
62
|
+
standingOf: ()=>undefined
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const modules = summary.modules ?? [];
|
|
66
|
+
const ends = summary.isTrial ? toDate(summary.trialEnds) : undefined;
|
|
67
|
+
const daysLeft = ends ? daysBetween(today, ends) : 0;
|
|
68
|
+
const trial = ends ? {
|
|
69
|
+
ends,
|
|
70
|
+
daysLeft,
|
|
71
|
+
isClosed: daysLeft < 0 || summary.readOnlyReason === showrunner_boxoffice.ReadOnlyReason.trialClosed
|
|
72
|
+
} : undefined;
|
|
73
|
+
const standingOf = (module)=>modules.find((_)=>_.module === module);
|
|
74
|
+
const accessTo = (module)=>standingOf(module)?.access ?? showrunner_boxoffice.ModuleAccess.none;
|
|
75
|
+
return {
|
|
76
|
+
isLoading: false,
|
|
77
|
+
state: stateOf(summary, trial),
|
|
78
|
+
isReadOnly: summary.readOnlyReason !== showrunner_boxoffice.ReadOnlyReason.none,
|
|
79
|
+
readOnlyReason: summary.readOnlyReason,
|
|
80
|
+
seats: summary.seats,
|
|
81
|
+
trial,
|
|
82
|
+
canOpenPortal: summary.canOpenPortal,
|
|
83
|
+
modules,
|
|
84
|
+
has: (module)=>accessTo(module) === showrunner_boxoffice.ModuleAccess.trial || accessTo(module) === showrunner_boxoffice.ModuleAccess.full,
|
|
85
|
+
accessTo,
|
|
86
|
+
standingOf
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
exports.daysBetween = daysBetween;
|
|
91
|
+
exports.entitlementsOf = entitlementsOf;
|
|
92
|
+
exports.toDate = toDate;
|
|
93
|
+
//# sourceMappingURL=entitlementModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlementModel.js","sources":["../../../Entitlements/entitlementModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DateOnly } from '@cratis/fundamentals';\nimport { EntitlementSummary, ModuleAccess, ModuleStanding, ReadOnlyReason } from '@cratis/showrunner.boxoffice';\n\n/**\n * Where a tenant stands with its license, as one word.\n *\n * - `loading`: nothing is known yet.\n * - `suspended`: the operator suspended the tenant; it is read-only.\n * - `trialClosed`: the trial ended without seats being bought; the tenant is read-only.\n * - `trial`: the tenant is on a trial that runs.\n * - `licensed`: the tenant has bought seats.\n * - `unlicensed`: the tenant has no seats and is not on a trial.\n */\nexport type LicenseState = 'loading' | 'suspended' | 'trialClosed' | 'trial' | 'licensed' | 'unlicensed';\n\n/**\n * A trial that is running or has closed.\n */\nexport interface TrialStanding {\n /** The last day of the trial. */\n readonly ends: Date;\n\n /** How many days are left; zero on the last day, and less than zero after it. */\n readonly daysLeft: number;\n\n /** Whether the trial has closed. */\n readonly isClosed: boolean;\n}\n\n/**\n * What a tenant may do, for a component to decide what to show.\n */\nexport interface Entitlements {\n /** Whether nothing is known about the tenant yet. */\n readonly isLoading: boolean;\n\n /** Where the tenant stands with its license. */\n readonly state: LicenseState;\n\n /** Whether the tenant can read but not change anything. */\n readonly isReadOnly: boolean;\n\n /** Why the tenant is read-only; none when it is not. */\n readonly readOnlyReason: ReadOnlyReason;\n\n /** How many seats the tenant has today. */\n readonly seats: number;\n\n /** The trial, when the tenant is on one or was. */\n readonly trial?: TrialStanding;\n\n /** Whether the product has a customer portal to buy, try and change plan in. */\n readonly canOpenPortal: boolean;\n\n /** Every module the product declares, and what the tenant may do with it. */\n readonly modules: readonly ModuleStanding[];\n\n /**\n * Gets whether the tenant has a module: in full or on trial. A preview does not count.\n * @param module The module.\n * @returns True when the tenant has the module.\n */\n has(module: string): boolean;\n\n /**\n * Gets the access the tenant has to a module.\n * @param module The module.\n * @returns The access; none for a module the product does not declare.\n */\n accessTo(module: string): ModuleAccess;\n\n /**\n * Gets what the tenant may do with a module.\n * @param module The module.\n * @returns The standing, or undefined for a module the product does not declare.\n */\n standingOf(module: string): ModuleStanding | undefined;\n}\n\nconst millisecondsInADay = 24 * 60 * 60 * 1000;\n\n/**\n * Turns a day from a proxy into a date.\n * @param day The day: a `DateOnly`, a `yyyy-mm-dd` text, or a date.\n * @returns The date at midnight local time; undefined when there is no day.\n */\nexport function toDate(day: DateOnly | Date | string | undefined): Date | undefined {\n if (day === undefined || day === null) {\n return undefined;\n }\n\n if (day instanceof Date) {\n return new Date(day.getFullYear(), day.getMonth(), day.getDate());\n }\n\n const dateOnly = typeof day === 'string' ? DateOnly.parse(day.substring(0, 10)) : day;\n return dateOnly.toDate();\n}\n\n/**\n * Counts the days from one day to another, ignoring the time of day.\n * @param from The day to count from.\n * @param to The day to count to.\n * @returns How many days `to` is after `from`; less than zero when it is before.\n */\nexport function daysBetween(from: Date, to: Date): number {\n const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());\n const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());\n return Math.round((end - start) / millisecondsInADay);\n}\n\nfunction stateOf(summary: EntitlementSummary, trial: TrialStanding | undefined): LicenseState {\n if (summary.readOnlyReason === ReadOnlyReason.tenantSuspended) {\n return 'suspended';\n }\n\n if (summary.readOnlyReason === ReadOnlyReason.trialClosed) {\n return 'trialClosed';\n }\n\n if (summary.isTrial && trial && !trial.isClosed) {\n return 'trial';\n }\n\n return summary.seats > 0 ? 'licensed' : 'unlicensed';\n}\n\n/**\n * Works out what a tenant may do from what the backend says.\n * @param summary The entitlement summary; nothing while it loads.\n * @param today The day it is. Defaults to today.\n * @returns The {@link Entitlements}.\n */\nexport function entitlementsOf(summary: EntitlementSummary | undefined, today: Date = new Date()): Entitlements {\n if (!summary) {\n return {\n isLoading: true,\n state: 'loading',\n isReadOnly: false,\n readOnlyReason: ReadOnlyReason.none,\n seats: 0,\n canOpenPortal: false,\n modules: [],\n has: () => false,\n accessTo: () => ModuleAccess.none,\n standingOf: () => undefined\n };\n }\n\n const modules = summary.modules ?? [];\n const ends = summary.isTrial ? toDate(summary.trialEnds) : undefined;\n const daysLeft = ends ? daysBetween(today, ends) : 0;\n const trial = ends\n ? { ends, daysLeft, isClosed: daysLeft < 0 || summary.readOnlyReason === ReadOnlyReason.trialClosed }\n : undefined;\n const standingOf = (module: string) => modules.find(_ => _.module === module);\n const accessTo = (module: string) => standingOf(module)?.access ?? ModuleAccess.none;\n\n return {\n isLoading: false,\n state: stateOf(summary, trial),\n isReadOnly: summary.readOnlyReason !== ReadOnlyReason.none,\n readOnlyReason: summary.readOnlyReason,\n seats: summary.seats,\n trial,\n canOpenPortal: summary.canOpenPortal,\n modules,\n has: module => accessTo(module) === ModuleAccess.trial || accessTo(module) === ModuleAccess.full,\n accessTo,\n standingOf\n };\n}\n"],"names":["millisecondsInADay","toDate","day","undefined","Date","getFullYear","getMonth","getDate","dateOnly","DateOnly","parse","substring","daysBetween","from","to","start","UTC","end","Math","round","stateOf","summary","trial","readOnlyReason","ReadOnlyReason","tenantSuspended","trialClosed","isTrial","isClosed","seats","entitlementsOf","today","isLoading","state","isReadOnly","none","canOpenPortal","modules","has","accessTo","ModuleAccess","standingOf","ends","trialEnds","daysLeft","module","find","_","access","full"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './entitlementModel.js';
|
|
2
|
+
export * from './EntitlementsContext.js';
|
|
3
|
+
export * from './moduleFilter.js';
|
|
4
|
+
export * from './requiresModuleModel.js';
|
|
5
|
+
export * from './RequiresModule.js';
|
|
6
|
+
export * from './useEntitlements.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Entitlements/index.ts"],"names":[],"mappings":"AAGA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Entitlements } from './entitlementModel.js';
|
|
2
|
+
export interface ModuleOwned {
|
|
3
|
+
module?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function filterByModule<TItem extends ModuleOwned>(items: readonly TItem[], entitlements: Entitlements): TItem[];
|
|
6
|
+
//# sourceMappingURL=moduleFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleFilter.d.ts","sourceRoot":"","sources":["../../../Entitlements/moduleFilter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD,MAAM,WAAW,WAAW;IAExB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,wBAAgB,cAAc,CAAC,KAAK,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,KAAK,EAAE,CAEtH"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/**
|
|
6
|
+
* Leaves out what belongs to a module the tenant does not have, so navigation and pages disappear without it. While
|
|
7
|
+
* the entitlements load, what belongs to a module is left out too, rather than shown and taken away.
|
|
8
|
+
* @param items The items, such as the entries of a sidebar.
|
|
9
|
+
* @param entitlements What the tenant may do.
|
|
10
|
+
* @returns The items the tenant may see.
|
|
11
|
+
*/ function filterByModule(items, entitlements) {
|
|
12
|
+
return items.filter((item)=>item.module === undefined || entitlements.has(item.module));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.filterByModule = filterByModule;
|
|
16
|
+
//# sourceMappingURL=moduleFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleFilter.js","sources":["../../../Entitlements/moduleFilter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Entitlements } from './entitlementModel.js';\n\n/**\n * Something that belongs to a module: a navigation entry, a page, a menu item or a route.\n */\nexport interface ModuleOwned {\n /** The module that owns it; leave it out for what belongs to the product itself and is always shown. */\n module?: string;\n}\n\n/**\n * Leaves out what belongs to a module the tenant does not have, so navigation and pages disappear without it. While\n * the entitlements load, what belongs to a module is left out too, rather than shown and taken away.\n * @param items The items, such as the entries of a sidebar.\n * @param entitlements What the tenant may do.\n * @returns The items the tenant may see.\n */\nexport function filterByModule<TItem extends ModuleOwned>(items: readonly TItem[], entitlements: Entitlements): TItem[] {\n return items.filter(item => item.module === undefined || entitlements.has(item.module));\n}\n"],"names":["filterByModule","items","entitlements","filter","item","module","undefined","has"],"mappings":";;AAAA;AACA;AAYA;;;;;;AAMC,IACM,SAASA,cAAAA,CAA0CC,KAAuB,EAAEC,YAA0B,EAAA;AACzG,IAAA,OAAOD,KAAAA,CAAME,MAAM,CAACC,CAAAA,IAAAA,GAAQA,IAAAA,CAAKC,MAAM,KAAKC,SAAAA,IAAaJ,YAAAA,CAAaK,GAAG,CAACH,KAAKC,MAAM,CAAA,CAAA;AACzF;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BoxOfficeLabels } from '../Labels/index.js';
|
|
2
|
+
import { Entitlements } from './entitlementModel.js';
|
|
3
|
+
export interface RequiresModuleModel {
|
|
4
|
+
readonly hasModule: boolean;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly text: string;
|
|
7
|
+
readonly canTry: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function requiresModuleModel(entitlements: Entitlements, module: string, labels: BoxOfficeLabels): RequiresModuleModel;
|
|
10
|
+
//# sourceMappingURL=requiresModuleModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requiresModuleModel.d.ts","sourceRoot":"","sources":["../../../Entitlements/requiresModuleModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAU,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD,MAAM,WAAW,mBAAmB;IAEhC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAG5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AASD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAY5H"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var showrunner_boxoffice = require('@cratis/showrunner.boxoffice');
|
|
4
|
+
var format = require('../Labels/format.js');
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
/**
|
|
9
|
+
* Works out what to show where a module's content would be.
|
|
10
|
+
* @param entitlements What the tenant may do.
|
|
11
|
+
* @param module The module.
|
|
12
|
+
* @param labels The labels to show.
|
|
13
|
+
* @returns The {@link RequiresModuleModel}.
|
|
14
|
+
*/ function requiresModuleModel(entitlements, module, labels) {
|
|
15
|
+
const standing = entitlements.standingOf(module);
|
|
16
|
+
const name = standing?.name ?? module;
|
|
17
|
+
const access = standing?.access ?? showrunner_boxoffice.ModuleAccess.none;
|
|
18
|
+
const text = access === showrunner_boxoffice.ModuleAccess.preview ? labels.requiresModule.preview : labels.requiresModule.none;
|
|
19
|
+
return {
|
|
20
|
+
hasModule: entitlements.has(module),
|
|
21
|
+
title: format.format(labels.requiresModule.title, {
|
|
22
|
+
module: name
|
|
23
|
+
}),
|
|
24
|
+
text: format.format(text, {
|
|
25
|
+
module: name
|
|
26
|
+
}),
|
|
27
|
+
canTry: access === showrunner_boxoffice.ModuleAccess.none || access === showrunner_boxoffice.ModuleAccess.preview
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
exports.requiresModuleModel = requiresModuleModel;
|
|
32
|
+
//# sourceMappingURL=requiresModuleModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requiresModuleModel.js","sources":["../../../Entitlements/requiresModuleModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ModuleAccess, ModuleStanding } from '@cratis/showrunner.boxoffice';\nimport { BoxOfficeLabels, format } from '../Labels/index.js';\nimport { Entitlements } from './entitlementModel.js';\n\n/**\n * What to tell the user about a module they do not have.\n */\nexport interface RequiresModuleModel {\n /** Whether the tenant has the module, so the content shows. */\n readonly hasModule: boolean;\n\n /** The title of the explanation. */\n readonly title: string;\n\n /** The explanation. */\n readonly text: string;\n\n /** Whether to offer to try the module. */\n readonly canTry: boolean;\n}\n\n/**\n * Works out what to show where a module's content would be.\n * @param entitlements What the tenant may do.\n * @param module The module.\n * @param labels The labels to show.\n * @returns The {@link RequiresModuleModel}.\n */\nexport function requiresModuleModel(entitlements: Entitlements, module: string, labels: BoxOfficeLabels): RequiresModuleModel {\n const standing: ModuleStanding | undefined = entitlements.standingOf(module);\n const name = standing?.name ?? module;\n const access = standing?.access ?? ModuleAccess.none;\n const text = access === ModuleAccess.preview ? labels.requiresModule.preview : labels.requiresModule.none;\n\n return {\n hasModule: entitlements.has(module),\n title: format(labels.requiresModule.title, { module: name }),\n text: format(text, { module: name }),\n canTry: access === ModuleAccess.none || access === ModuleAccess.preview\n };\n}\n"],"names":["requiresModuleModel","entitlements","module","labels","standing","standingOf","name","access","ModuleAccess","none","text","preview","requiresModule","hasModule","has","title","format","canTry"],"mappings":";;;;;AAAA;AACA;AAuBA;;;;;;AAMC,IACM,SAASA,mBAAAA,CAAoBC,YAA0B,EAAEC,MAAc,EAAEC,MAAuB,EAAA;IACnG,MAAMC,QAAAA,GAAuCH,YAAAA,CAAaI,UAAU,CAACH,MAAAA,CAAAA;IACrE,MAAMI,IAAAA,GAAOF,UAAUE,IAAAA,IAAQJ,MAAAA;AAC/B,IAAA,MAAMK,MAAAA,GAASH,QAAAA,EAAUG,MAAAA,IAAUC,iCAAAA,CAAaC,IAAI;AACpD,IAAA,MAAMC,IAAAA,GAAOH,MAAAA,KAAWC,iCAAAA,CAAaG,OAAO,GAAGR,MAAAA,CAAOS,cAAc,CAACD,OAAO,GAAGR,MAAAA,CAAOS,cAAc,CAACH,IAAI;IAEzG,OAAO;QACHI,SAAAA,EAAWZ,YAAAA,CAAaa,GAAG,CAACZ,MAAAA,CAAAA;AAC5Ba,QAAAA,KAAAA,EAAOC,aAAAA,CAAOb,MAAAA,CAAOS,cAAc,CAACG,KAAK,EAAE;YAAEb,MAAAA,EAAQI;AAAK,SAAA,CAAA;AAC1DI,QAAAA,IAAAA,EAAMM,cAAON,IAAAA,EAAM;YAAER,MAAAA,EAAQI;AAAK,SAAA,CAAA;AAClCW,QAAAA,MAAAA,EAAQV,WAAWC,iCAAAA,CAAaC,IAAI,IAAIF,MAAAA,KAAWC,kCAAaG;AACpE,KAAA;AACJ;;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Entitlements } from './entitlementModel.js';
|
|
2
|
+
import { ModuleOwned } from './moduleFilter.js';
|
|
3
|
+
export declare function useEntitlements(): Entitlements;
|
|
4
|
+
export declare function useModuleFilter<TItem extends ModuleOwned>(items: readonly TItem[]): TItem[];
|
|
5
|
+
//# sourceMappingURL=useEntitlements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEntitlements.d.ts","sourceRoot":"","sources":["../../../Entitlements/useEntitlements.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhE,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAQD,wBAAgB,eAAe,CAAC,KAAK,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAE3F"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var EntitlementsContext = require('./EntitlementsContext.js');
|
|
4
|
+
var moduleFilter = require('./moduleFilter.js');
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
/**
|
|
9
|
+
* Gets what the signed-in user's tenant may do: whether it is on a trial, read-only or suspended, and which modules it
|
|
10
|
+
* has. Use it inside a {@link BoxOfficeProvider}.
|
|
11
|
+
* @returns The {@link Entitlements}.
|
|
12
|
+
*/ function useEntitlements() {
|
|
13
|
+
return EntitlementsContext.useEntitlementsContext();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Leaves out what belongs to a module the tenant does not have, for the entries of a shell's navigation. Use it
|
|
17
|
+
* inside a {@link BoxOfficeProvider}.
|
|
18
|
+
* @param items The items, each optionally owned by a module.
|
|
19
|
+
* @returns The items the tenant may see.
|
|
20
|
+
*/ function useModuleFilter(items) {
|
|
21
|
+
return moduleFilter.filterByModule(items, EntitlementsContext.useEntitlementsContext());
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
exports.useEntitlements = useEntitlements;
|
|
25
|
+
exports.useModuleFilter = useModuleFilter;
|
|
26
|
+
//# sourceMappingURL=useEntitlements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEntitlements.js","sources":["../../../Entitlements/useEntitlements.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Entitlements } from './entitlementModel.js';\nimport { useEntitlementsContext } from './EntitlementsContext.js';\nimport { filterByModule, ModuleOwned } from './moduleFilter.js';\n\n/**\n * Gets what the signed-in user's tenant may do: whether it is on a trial, read-only or suspended, and which modules it\n * has. Use it inside a {@link BoxOfficeProvider}.\n * @returns The {@link Entitlements}.\n */\nexport function useEntitlements(): Entitlements {\n return useEntitlementsContext();\n}\n\n/**\n * Leaves out what belongs to a module the tenant does not have, for the entries of a shell's navigation. Use it\n * inside a {@link BoxOfficeProvider}.\n * @param items The items, each optionally owned by a module.\n * @returns The items the tenant may see.\n */\nexport function useModuleFilter<TItem extends ModuleOwned>(items: readonly TItem[]): TItem[] {\n return filterByModule(items, useEntitlementsContext());\n}\n"],"names":["useEntitlements","useEntitlementsContext","useModuleFilter","items","filterByModule"],"mappings":";;;;;AAAA;AACA;AAMA;;;;AAIC,IACM,SAASA,eAAAA,GAAAA;IACZ,OAAOC,0CAAAA,EAAAA;AACX;AAEA;;;;;IAMO,SAASC,eAAAA,CAA2CC,KAAuB,EAAA;AAC9E,IAAA,OAAOC,4BAAeD,KAAAA,EAAOF,0CAAAA,EAAAA,CAAAA;AACjC;;;"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export interface BoxOfficeLabels {
|
|
2
|
+
common: {
|
|
3
|
+
cancel: string;
|
|
4
|
+
close: string;
|
|
5
|
+
loading: string;
|
|
6
|
+
failed: string;
|
|
7
|
+
unauthorized: string;
|
|
8
|
+
portalFailed: string;
|
|
9
|
+
noPortal: string;
|
|
10
|
+
};
|
|
11
|
+
moduleAccess: {
|
|
12
|
+
none: string;
|
|
13
|
+
preview: string;
|
|
14
|
+
trial: string;
|
|
15
|
+
full: string;
|
|
16
|
+
until: string;
|
|
17
|
+
};
|
|
18
|
+
trialBanner: {
|
|
19
|
+
running: string;
|
|
20
|
+
lastDay: string;
|
|
21
|
+
closed: string;
|
|
22
|
+
buy: string;
|
|
23
|
+
};
|
|
24
|
+
suspension: {
|
|
25
|
+
title: string;
|
|
26
|
+
trialEndedWithoutSeats: string;
|
|
27
|
+
paymentOverdue: string;
|
|
28
|
+
administratorDecision: string;
|
|
29
|
+
resolve: string;
|
|
30
|
+
openPortal: string;
|
|
31
|
+
};
|
|
32
|
+
noLicense: {
|
|
33
|
+
noSeatTitle: string;
|
|
34
|
+
noSeat: string;
|
|
35
|
+
overCapacityTitle: string;
|
|
36
|
+
overCapacity: string;
|
|
37
|
+
trialClosedTitle: string;
|
|
38
|
+
trialClosed: string;
|
|
39
|
+
suspendedTitle: string;
|
|
40
|
+
suspended: string;
|
|
41
|
+
openPortal: string;
|
|
42
|
+
};
|
|
43
|
+
requiresModule: {
|
|
44
|
+
title: string;
|
|
45
|
+
none: string;
|
|
46
|
+
preview: string;
|
|
47
|
+
try: string;
|
|
48
|
+
buy: string;
|
|
49
|
+
};
|
|
50
|
+
seats: {
|
|
51
|
+
title: string;
|
|
52
|
+
summary: string;
|
|
53
|
+
overCapacity: string;
|
|
54
|
+
noCapacity: string;
|
|
55
|
+
empty: string;
|
|
56
|
+
holderColumn: string;
|
|
57
|
+
emailColumn: string;
|
|
58
|
+
assignedColumn: string;
|
|
59
|
+
statusColumn: string;
|
|
60
|
+
licensed: string;
|
|
61
|
+
overCapacityStatus: string;
|
|
62
|
+
assign: string;
|
|
63
|
+
releaseShort: string;
|
|
64
|
+
release: string;
|
|
65
|
+
assignTitle: string;
|
|
66
|
+
assignConfirm: string;
|
|
67
|
+
name: string;
|
|
68
|
+
email: string;
|
|
69
|
+
identityProvider: string;
|
|
70
|
+
subject: string;
|
|
71
|
+
releaseTitle: string;
|
|
72
|
+
releaseMessage: string;
|
|
73
|
+
readOnly: string;
|
|
74
|
+
};
|
|
75
|
+
usage: {
|
|
76
|
+
title: string;
|
|
77
|
+
empty: string;
|
|
78
|
+
meterColumn: string;
|
|
79
|
+
usedColumn: string;
|
|
80
|
+
allowanceColumn: string;
|
|
81
|
+
budgetColumn: string;
|
|
82
|
+
concurrencyColumn: string;
|
|
83
|
+
usedOfAllowance: string;
|
|
84
|
+
noAllowance: string;
|
|
85
|
+
day: string;
|
|
86
|
+
month: string;
|
|
87
|
+
resets: string;
|
|
88
|
+
atAllowance: string;
|
|
89
|
+
atBudget: string;
|
|
90
|
+
block: string;
|
|
91
|
+
park: string;
|
|
92
|
+
notSet: string;
|
|
93
|
+
progress: string;
|
|
94
|
+
};
|
|
95
|
+
plan: {
|
|
96
|
+
title: string;
|
|
97
|
+
modulesTitle: string;
|
|
98
|
+
offersTitle: string;
|
|
99
|
+
noModules: string;
|
|
100
|
+
noOffers: string;
|
|
101
|
+
includedSeats: string;
|
|
102
|
+
includedModules: string;
|
|
103
|
+
perMonth: string;
|
|
104
|
+
perYear: string;
|
|
105
|
+
buy: string;
|
|
106
|
+
try: string;
|
|
107
|
+
changePlan: string;
|
|
108
|
+
onTrial: string;
|
|
109
|
+
withSeats: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export type DeepPartial<T> = {
|
|
113
|
+
[TKey in keyof T]?: T[TKey] extends object ? DeepPartial<T[TKey]> : T[TKey];
|
|
114
|
+
};
|
|
115
|
+
export type BoxOfficeLabelOverrides = DeepPartial<BoxOfficeLabels>;
|
|
116
|
+
//# sourceMappingURL=BoxOfficeLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxOfficeLabels.d.ts","sourceRoot":"","sources":["../../../Labels/BoxOfficeLabels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultBoxOfficeLabels.d.ts","sourceRoot":"","sources":["../../../Labels/defaultBoxOfficeLabels.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,eAAO,MAAM,sBAAsB,EAAE,eA8GpC,CAAC"}
|