@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,33 @@
|
|
|
1
|
+
import { defaultBoxOfficeLabels } from './defaultBoxOfficeLabels.js';
|
|
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
|
+
* Resolves the labels to show: the overrides given, and the English default for every label left out.
|
|
7
|
+
* @param overrides The labels a solution replaces.
|
|
8
|
+
* @returns The {@link BoxOfficeLabels}.
|
|
9
|
+
*/ function resolveLabels(overrides) {
|
|
10
|
+
return merge(defaultBoxOfficeLabels, overrides);
|
|
11
|
+
}
|
|
12
|
+
function merge(defaults, overrides) {
|
|
13
|
+
if (!overrides) {
|
|
14
|
+
return defaults;
|
|
15
|
+
}
|
|
16
|
+
const merged = {
|
|
17
|
+
...defaults
|
|
18
|
+
};
|
|
19
|
+
for (const [key, value] of Object.entries(overrides)){
|
|
20
|
+
if (value === undefined) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const defaultValue = defaults[key];
|
|
24
|
+
merged[key] = isObject(defaultValue) && isObject(value) ? merge(defaultValue, value) : value;
|
|
25
|
+
}
|
|
26
|
+
return merged;
|
|
27
|
+
}
|
|
28
|
+
function isObject(value) {
|
|
29
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { resolveLabels };
|
|
33
|
+
//# sourceMappingURL=resolveLabels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveLabels.js","sources":["../../../Labels/resolveLabels.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 { defaultBoxOfficeLabels } from './defaultBoxOfficeLabels.js';\nimport { BoxOfficeLabelOverrides, BoxOfficeLabels } from './BoxOfficeLabels.js';\n\n/**\n * Resolves the labels to show: the overrides given, and the English default for every label left out.\n * @param overrides The labels a solution replaces.\n * @returns The {@link BoxOfficeLabels}.\n */\nexport function resolveLabels(overrides?: BoxOfficeLabelOverrides): BoxOfficeLabels {\n return merge(defaultBoxOfficeLabels, overrides) as BoxOfficeLabels;\n}\n\nfunction merge(defaults: object, overrides?: object): object {\n if (!overrides) {\n return defaults;\n }\n\n const merged: Record<string, unknown> = { ...defaults };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) {\n continue;\n }\n\n const defaultValue = (defaults as Record<string, unknown>)[key];\n merged[key] = isObject(defaultValue) && isObject(value) ? merge(defaultValue, value) : value;\n }\n\n return merged;\n}\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"],"names":["resolveLabels","overrides","merge","defaultBoxOfficeLabels","defaults","merged","key","value","Object","entries","undefined","defaultValue","isObject","Array","isArray"],"mappings":";;AAAA;AACA;AAKA;;;;IAKO,SAASA,aAAAA,CAAcC,SAAmC,EAAA;AAC7D,IAAA,OAAOC,MAAMC,sBAAAA,EAAwBF,SAAAA,CAAAA;AACzC;AAEA,SAASC,KAAAA,CAAME,QAAgB,EAAEH,SAAkB,EAAA;AAC/C,IAAA,IAAI,CAACA,SAAAA,EAAW;QACZ,OAAOG,QAAAA;AACX,IAAA;AAEA,IAAA,MAAMC,MAAAA,GAAkC;AAAE,QAAA,GAAGD;AAAS,KAAA;IACtD,KAAK,MAAM,CAACE,GAAAA,EAAKC,KAAAA,CAAM,IAAIC,MAAAA,CAAOC,OAAO,CAACR,SAAAA,CAAAA,CAAY;AAClD,QAAA,IAAIM,UAAUG,SAAAA,EAAW;AACrB,YAAA;AACJ,QAAA;AAEA,QAAA,MAAMC,YAAAA,GAAgBP,QAAoC,CAACE,GAAAA,CAAI;QAC/DD,MAAM,CAACC,IAAI,GAAGM,QAAAA,CAASD,iBAAiBC,QAAAA,CAASL,KAAAA,CAAAA,GAASL,KAAAA,CAAMS,YAAAA,EAAcJ,KAAAA,CAAAA,GAASA,KAAAA;AAC3F,IAAA;IAEA,OAAOF,MAAAA;AACX;AAEA,SAASO,SAASL,KAAc,EAAA;IAC5B,OAAO,OAAOA,UAAU,QAAA,IAAYA,KAAAA,KAAU,QAAQ,CAACM,KAAAA,CAAMC,OAAO,CAACP,KAAAA,CAAAA;AACzE;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanPage.d.ts","sourceRoot":"","sources":["../../../Plan/PlanPage.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,QAAQ,mCAWpB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { OnSale } from '@cratis/showrunner.boxoffice';
|
|
3
|
+
import { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';
|
|
4
|
+
import { PlanView } from './PlanView.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The plan and modules page: where the tenant stands with its plan, which modules it has, and the offers the operator
|
|
8
|
+
* sells, with buttons that open the customer portal to buy, try or change plan. Render it inside a
|
|
9
|
+
* {@link BoxOfficeProvider}.
|
|
10
|
+
*/ const PlanPage = ()=>{
|
|
11
|
+
const entitlements = useEntitlementsContext();
|
|
12
|
+
const [offers] = OnSale.use();
|
|
13
|
+
return /*#__PURE__*/ jsx(PlanView, {
|
|
14
|
+
entitlements: entitlements,
|
|
15
|
+
offers: offers.isSuccess ? offers.data ?? [] : [],
|
|
16
|
+
isLoading: offers.isPerforming && !offers.isSuccess,
|
|
17
|
+
hasFailed: !offers.isPerforming && !offers.isSuccess
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { PlanPage };
|
|
22
|
+
//# sourceMappingURL=PlanPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanPage.js","sources":["../../../Plan/PlanPage.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 { OnSale } from '@cratis/showrunner.boxoffice';\nimport { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';\nimport { PlanView } from './PlanView.js';\n\n/**\n * The plan and modules page: where the tenant stands with its plan, which modules it has, and the offers the operator\n * sells, with buttons that open the customer portal to buy, try or change plan. Render it inside a\n * {@link BoxOfficeProvider}.\n */\nexport const PlanPage = () => {\n const entitlements = useEntitlementsContext();\n const [offers] = OnSale.use();\n\n return (\n <PlanView\n entitlements={entitlements}\n offers={offers.isSuccess ? (offers.data ?? []) : []}\n isLoading={offers.isPerforming && !offers.isSuccess}\n hasFailed={!offers.isPerforming && !offers.isSuccess} />\n );\n};\n"],"names":["PlanPage","entitlements","useEntitlementsContext","offers","OnSale","use","_jsx","PlanView","isSuccess","data","isLoading","isPerforming","hasFailed"],"mappings":";;;;;AAOA;;;;UAKaA,QAAAA,GAAW,IAAA;AACpB,IAAA,MAAMC,YAAAA,GAAeC,sBAAAA,EAAAA;AACrB,IAAA,MAAM,CAACC,MAAAA,CAAO,GAAGC,MAAAA,CAAOC,GAAG,EAAA;AAE3B,IAAA,qBACIC,GAAA,CAACC,QAAAA,EAAAA;QACGN,YAAAA,EAAcA,YAAAA;QACdE,MAAAA,EAAQA,MAAAA,CAAOK,SAAS,GAAIL,MAAAA,CAAOM,IAAI,IAAI,EAAE,GAAI,EAAE;AACnDC,QAAAA,SAAAA,EAAWP,MAAAA,CAAOQ,YAAY,IAAI,CAACR,OAAOK,SAAS;AACnDI,QAAAA,SAAAA,EAAW,CAACT,MAAAA,CAAOQ,YAAY,IAAI,CAACR,OAAOK;;AAEvD;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Offer } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
import { Entitlements } from '../Entitlements/entitlementModel.js';
|
|
3
|
+
export interface PlanViewProps {
|
|
4
|
+
entitlements: Entitlements;
|
|
5
|
+
offers: readonly Offer[];
|
|
6
|
+
isLoading?: boolean;
|
|
7
|
+
hasFailed?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const PlanView: ({ entitlements, offers, isLoading, hasFailed }: PlanViewProps) => import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=PlanView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanView.d.ts","sourceRoot":"","sources":["../../../Plan/PlanView.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAgB,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAQnE,MAAM,WAAW,aAAa;IAE1B,YAAY,EAAE,YAAY,CAAC;IAG3B,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAGzB,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD,eAAO,MAAM,QAAQ,GAAI,gDAAgD,aAAa,gCAgDrF,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Message, Tag } from '@cratis/components/Display';
|
|
3
|
+
import { PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
import { PortalButton } from '../Portal/PortalButton.js';
|
|
5
|
+
import { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';
|
|
6
|
+
import { moduleRows, offerRows, planSummary } from './planModels.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The plan and modules of the tenant: where it stands, which modules it has, and what it can buy, with buttons that
|
|
10
|
+
* open the customer portal.
|
|
11
|
+
*/ const PlanView = ({ entitlements, offers, isLoading, hasFailed })=>{
|
|
12
|
+
const { labels, locale } = useBoxOfficeContext();
|
|
13
|
+
const modules = moduleRows(entitlements, labels, locale);
|
|
14
|
+
const offerList = offerRows(offers, entitlements, labels, locale);
|
|
15
|
+
const summary = planSummary(entitlements, labels);
|
|
16
|
+
return /*#__PURE__*/ jsxs("section", {
|
|
17
|
+
className: "boxoffice-plan",
|
|
18
|
+
"aria-labelledby": "boxoffice-plan-title",
|
|
19
|
+
children: [
|
|
20
|
+
/*#__PURE__*/ jsx("header", {
|
|
21
|
+
className: "boxoffice-page__header",
|
|
22
|
+
children: /*#__PURE__*/ jsx("h2", {
|
|
23
|
+
id: "boxoffice-plan-title",
|
|
24
|
+
className: "boxoffice-page__title",
|
|
25
|
+
children: labels.plan.title
|
|
26
|
+
})
|
|
27
|
+
}),
|
|
28
|
+
summary && /*#__PURE__*/ jsx("p", {
|
|
29
|
+
className: "boxoffice-plan__summary",
|
|
30
|
+
children: summary
|
|
31
|
+
}),
|
|
32
|
+
!entitlements.isLoading && !entitlements.canOpenPortal && /*#__PURE__*/ jsx(Message, {
|
|
33
|
+
severity: "info",
|
|
34
|
+
children: labels.common.noPortal
|
|
35
|
+
}),
|
|
36
|
+
/*#__PURE__*/ jsx("h3", {
|
|
37
|
+
className: "boxoffice-plan__heading",
|
|
38
|
+
children: labels.plan.modulesTitle
|
|
39
|
+
}),
|
|
40
|
+
modules.length === 0 ? /*#__PURE__*/ jsx("p", {
|
|
41
|
+
className: "boxoffice-plan__empty",
|
|
42
|
+
children: entitlements.isLoading ? labels.common.loading : labels.plan.noModules
|
|
43
|
+
}) : /*#__PURE__*/ jsx("ul", {
|
|
44
|
+
className: "boxoffice-plan__modules",
|
|
45
|
+
children: modules.map((module)=>/*#__PURE__*/ jsxs("li", {
|
|
46
|
+
className: "boxoffice-plan__module",
|
|
47
|
+
children: [
|
|
48
|
+
/*#__PURE__*/ jsx("span", {
|
|
49
|
+
className: "boxoffice-plan__name",
|
|
50
|
+
children: module.standing.name
|
|
51
|
+
}),
|
|
52
|
+
/*#__PURE__*/ jsx(Tag, {
|
|
53
|
+
severity: module.severity,
|
|
54
|
+
value: module.accessText
|
|
55
|
+
}),
|
|
56
|
+
module.untilText && /*#__PURE__*/ jsx("span", {
|
|
57
|
+
className: "boxoffice-plan__until",
|
|
58
|
+
children: module.untilText
|
|
59
|
+
}),
|
|
60
|
+
module.canTry && /*#__PURE__*/ jsx(PortalButton, {
|
|
61
|
+
intent: PortalIntent.try,
|
|
62
|
+
label: labels.plan.try,
|
|
63
|
+
variant: "outline",
|
|
64
|
+
size: "small"
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
}, module.standing.module))
|
|
68
|
+
}),
|
|
69
|
+
/*#__PURE__*/ jsx("h3", {
|
|
70
|
+
className: "boxoffice-plan__heading",
|
|
71
|
+
children: labels.plan.offersTitle
|
|
72
|
+
}),
|
|
73
|
+
hasFailed && /*#__PURE__*/ jsx(Message, {
|
|
74
|
+
severity: "error",
|
|
75
|
+
children: labels.common.failed
|
|
76
|
+
}),
|
|
77
|
+
!hasFailed && offerList.length === 0 && /*#__PURE__*/ jsx("p", {
|
|
78
|
+
className: "boxoffice-plan__empty",
|
|
79
|
+
children: isLoading ? labels.common.loading : labels.plan.noOffers
|
|
80
|
+
}),
|
|
81
|
+
/*#__PURE__*/ jsx("ul", {
|
|
82
|
+
className: "boxoffice-plan__offers",
|
|
83
|
+
children: offerList.map((row)=>/*#__PURE__*/ jsxs("li", {
|
|
84
|
+
className: "boxoffice-plan__offer",
|
|
85
|
+
children: [
|
|
86
|
+
/*#__PURE__*/ jsxs("div", {
|
|
87
|
+
className: "boxoffice-plan__offer-text",
|
|
88
|
+
children: [
|
|
89
|
+
/*#__PURE__*/ jsx("strong", {
|
|
90
|
+
children: row.offer.name
|
|
91
|
+
}),
|
|
92
|
+
row.seatsText && /*#__PURE__*/ jsx("span", {
|
|
93
|
+
children: row.seatsText
|
|
94
|
+
}),
|
|
95
|
+
row.moduleNames.length > 0 && /*#__PURE__*/ jsxs("span", {
|
|
96
|
+
children: [
|
|
97
|
+
labels.plan.includedModules,
|
|
98
|
+
": ",
|
|
99
|
+
row.moduleNames.join(', ')
|
|
100
|
+
]
|
|
101
|
+
}),
|
|
102
|
+
row.prices.map((price)=>/*#__PURE__*/ jsx("span", {
|
|
103
|
+
className: "boxoffice-plan__price",
|
|
104
|
+
children: price
|
|
105
|
+
}, price))
|
|
106
|
+
]
|
|
107
|
+
}),
|
|
108
|
+
/*#__PURE__*/ jsx(PortalButton, {
|
|
109
|
+
intent: row.intent,
|
|
110
|
+
offer: row.offer.id,
|
|
111
|
+
label: row.buttonLabel
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
}, row.offer.id.toString()))
|
|
115
|
+
})
|
|
116
|
+
]
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export { PlanView };
|
|
121
|
+
//# sourceMappingURL=PlanView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanView.js","sources":["../../../Plan/PlanView.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, Tag } from '@cratis/components/Display';\nimport { Offer, PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { Entitlements } from '../Entitlements/entitlementModel.js';\nimport { PortalButton } from '../Portal/PortalButton.js';\nimport { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';\nimport { moduleRows, offerRows, planSummary } from './planModels.js';\n\n/**\n * Props for {@link PlanView}.\n */\nexport interface PlanViewProps {\n /** What the tenant may do. */\n entitlements: Entitlements;\n\n /** The offers on sale. */\n offers: readonly Offer[];\n\n /** Whether the offers are still loading. */\n isLoading?: boolean;\n\n /** Whether the offers could not be loaded. */\n hasFailed?: boolean;\n}\n\n/**\n * The plan and modules of the tenant: where it stands, which modules it has, and what it can buy, with buttons that\n * open the customer portal.\n */\nexport const PlanView = ({ entitlements, offers, isLoading, hasFailed }: PlanViewProps) => {\n const { labels, locale } = useBoxOfficeContext();\n const modules = moduleRows(entitlements, labels, locale);\n const offerList = offerRows(offers, entitlements, labels, locale);\n const summary = planSummary(entitlements, labels);\n\n return (\n <section className='boxoffice-plan' aria-labelledby='boxoffice-plan-title'>\n <header className='boxoffice-page__header'>\n <h2 id='boxoffice-plan-title' className='boxoffice-page__title'>{labels.plan.title}</h2>\n </header>\n {summary && <p className='boxoffice-plan__summary'>{summary}</p>}\n {!entitlements.isLoading && !entitlements.canOpenPortal && <Message severity='info'>{labels.common.noPortal}</Message>}\n\n <h3 className='boxoffice-plan__heading'>{labels.plan.modulesTitle}</h3>\n {modules.length === 0\n ? <p className='boxoffice-plan__empty'>{entitlements.isLoading ? labels.common.loading : labels.plan.noModules}</p>\n : (\n <ul className='boxoffice-plan__modules'>\n {modules.map(module => (\n <li key={module.standing.module} className='boxoffice-plan__module'>\n <span className='boxoffice-plan__name'>{module.standing.name}</span>\n <Tag severity={module.severity} value={module.accessText} />\n {module.untilText && <span className='boxoffice-plan__until'>{module.untilText}</span>}\n {module.canTry && <PortalButton intent={PortalIntent.try} label={labels.plan.try} variant='outline' size='small' />}\n </li>\n ))}\n </ul>\n )}\n\n <h3 className='boxoffice-plan__heading'>{labels.plan.offersTitle}</h3>\n {hasFailed && <Message severity='error'>{labels.common.failed}</Message>}\n {!hasFailed && offerList.length === 0 && <p className='boxoffice-plan__empty'>{isLoading ? labels.common.loading : labels.plan.noOffers}</p>}\n <ul className='boxoffice-plan__offers'>\n {offerList.map(row => (\n <li key={row.offer.id.toString()} className='boxoffice-plan__offer'>\n <div className='boxoffice-plan__offer-text'>\n <strong>{row.offer.name}</strong>\n {row.seatsText && <span>{row.seatsText}</span>}\n {row.moduleNames.length > 0 && <span>{labels.plan.includedModules}: {row.moduleNames.join(', ')}</span>}\n {row.prices.map(price => <span key={price} className='boxoffice-plan__price'>{price}</span>)}\n </div>\n <PortalButton intent={row.intent} offer={row.offer.id} label={row.buttonLabel} />\n </li>\n ))}\n </ul>\n </section>\n );\n};\n"],"names":["PlanView","entitlements","offers","isLoading","hasFailed","labels","locale","useBoxOfficeContext","modules","moduleRows","offerList","offerRows","summary","planSummary","_jsxs","section","className","aria-labelledby","_jsx","header","h2","id","plan","title","p","canOpenPortal","Message","severity","common","noPortal","h3","modulesTitle","length","loading","noModules","ul","map","module","li","span","standing","name","Tag","value","accessText","untilText","canTry","PortalButton","intent","PortalIntent","try","label","variant","size","offersTitle","failed","noOffers","row","div","strong","offer","seatsText","moduleNames","includedModules","join","prices","price","buttonLabel","toString"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Plan/index.ts"],"names":[],"mappings":"AAGA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../Plan/index.ts"],"names":[],"mappings":"AAGA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ModuleStanding, Offer, OfferPrice, PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
import { Entitlements } from '../Entitlements/entitlementModel.js';
|
|
3
|
+
import { BoxOfficeLabels } from '../Labels/index.js';
|
|
4
|
+
export type AccessSeverity = 'success' | 'info' | 'warn' | 'secondary';
|
|
5
|
+
export interface ModuleRowModel {
|
|
6
|
+
readonly standing: ModuleStanding;
|
|
7
|
+
readonly accessText: string;
|
|
8
|
+
readonly untilText: string;
|
|
9
|
+
readonly severity: AccessSeverity;
|
|
10
|
+
readonly canTry: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface OfferRowModel {
|
|
13
|
+
readonly offer: Offer;
|
|
14
|
+
readonly prices: readonly string[];
|
|
15
|
+
readonly seatsText: string;
|
|
16
|
+
readonly moduleNames: readonly string[];
|
|
17
|
+
readonly intent: PortalIntent;
|
|
18
|
+
readonly buttonLabel: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function moduleRows(entitlements: Entitlements, labels: BoxOfficeLabels, locale?: string): ModuleRowModel[];
|
|
21
|
+
export declare function priceText(price: OfferPrice, labels: BoxOfficeLabels, locale?: string): string;
|
|
22
|
+
export declare function offerRows(offers: readonly Offer[], entitlements: Entitlements, labels: BoxOfficeLabels, locale?: string): OfferRowModel[];
|
|
23
|
+
export declare function planSummary(entitlements: Entitlements, labels: BoxOfficeLabels): string;
|
|
24
|
+
//# sourceMappingURL=planModels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planModels.d.ts","sourceRoot":"","sources":["../../../Plan/planModels.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAU,MAAM,oBAAoB,CAAC;AAG7D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAKvE,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAGlC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAGlC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AAKD,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAGtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAGnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAGxC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAG9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AASD,wBAAgB,UAAU,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAiBjH;AASD,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7F;AAUD,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAYzI;AAQD,wBAAgB,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAMvF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ModuleAccess, PortalIntent, BillingInterval } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
import { formatDay, formatMoney } from '../formatting.js';
|
|
3
|
+
import { format } from '../Labels/format.js';
|
|
4
|
+
|
|
5
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
6
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
7
|
+
/**
|
|
8
|
+
* Lays out the modules of the plan page.
|
|
9
|
+
* @param entitlements What the tenant may do.
|
|
10
|
+
* @param labels The labels to show.
|
|
11
|
+
* @param locale The locale to format for; the browser's when not given.
|
|
12
|
+
* @returns A row for every module the product declares.
|
|
13
|
+
*/ function moduleRows(entitlements, labels, locale) {
|
|
14
|
+
return entitlements.modules.map((standing)=>{
|
|
15
|
+
const access = standing.access;
|
|
16
|
+
return {
|
|
17
|
+
standing,
|
|
18
|
+
accessText: access === ModuleAccess.full ? labels.moduleAccess.full : access === ModuleAccess.trial ? labels.moduleAccess.trial : access === ModuleAccess.preview ? labels.moduleAccess.preview : labels.moduleAccess.none,
|
|
19
|
+
untilText: standing.until && access !== ModuleAccess.none ? format(labels.moduleAccess.until, {
|
|
20
|
+
date: formatDay(standing.until, locale)
|
|
21
|
+
}) : '',
|
|
22
|
+
severity: access === ModuleAccess.full ? 'success' : access === ModuleAccess.trial ? 'info' : access === ModuleAccess.preview ? 'warn' : 'secondary',
|
|
23
|
+
canTry: access === ModuleAccess.none || access === ModuleAccess.preview
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Says what an offer's price is.
|
|
29
|
+
* @param price The price.
|
|
30
|
+
* @param labels The labels to show.
|
|
31
|
+
* @param locale The locale to format for; the browser's when not given.
|
|
32
|
+
* @returns The price, such as "$12.00 per month".
|
|
33
|
+
*/ function priceText(price, labels, locale) {
|
|
34
|
+
const money = formatMoney(price.amount, price.currency, locale);
|
|
35
|
+
return format(price.interval === BillingInterval.yearly ? labels.plan.perYear : labels.plan.perMonth, {
|
|
36
|
+
price: money
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Lays out the offers of the plan page.
|
|
41
|
+
* @param offers The offers on sale.
|
|
42
|
+
* @param entitlements What the tenant may do.
|
|
43
|
+
* @param labels The labels to show.
|
|
44
|
+
* @param locale The locale to format for; the browser's when not given.
|
|
45
|
+
* @returns A row for every offer.
|
|
46
|
+
*/ function offerRows(offers, entitlements, labels, locale) {
|
|
47
|
+
const changes = entitlements.state === 'licensed';
|
|
48
|
+
return offers.map((offer)=>({
|
|
49
|
+
offer,
|
|
50
|
+
prices: [
|
|
51
|
+
...offer.prices
|
|
52
|
+
].sort((a, b)=>a.interval - b.interval).map((price)=>priceText(price, labels, locale)),
|
|
53
|
+
seatsText: offer.includedSeats > 0 ? format(labels.plan.includedSeats, {
|
|
54
|
+
count: offer.includedSeats
|
|
55
|
+
}) : '',
|
|
56
|
+
moduleNames: offer.modules.map((module)=>entitlements.standingOf(module)?.name ?? module),
|
|
57
|
+
intent: changes ? PortalIntent.changePlan : PortalIntent.buy,
|
|
58
|
+
buttonLabel: changes ? labels.plan.changePlan : labels.plan.buy
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Says where the tenant stands with its plan.
|
|
63
|
+
* @param entitlements What the tenant may do.
|
|
64
|
+
* @param labels The labels to show.
|
|
65
|
+
* @returns A sentence; empty when there is nothing to say.
|
|
66
|
+
*/ function planSummary(entitlements, labels) {
|
|
67
|
+
if (entitlements.state === 'trial' && entitlements.trial) {
|
|
68
|
+
return format(labels.plan.onTrial, {
|
|
69
|
+
days: Math.max(entitlements.trial.daysLeft, 0)
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return entitlements.seats > 0 ? format(labels.plan.withSeats, {
|
|
73
|
+
seats: entitlements.seats
|
|
74
|
+
}) : '';
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { moduleRows, offerRows, planSummary, priceText };
|
|
78
|
+
//# sourceMappingURL=planModels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planModels.js","sources":["../../../Plan/planModels.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 { BillingInterval, ModuleAccess, ModuleStanding, Offer, OfferPrice, PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { Entitlements } from '../Entitlements/entitlementModel.js';\nimport { formatDay, formatMoney } from '../formatting.js';\nimport { BoxOfficeLabels, format } from '../Labels/index.js';\n\n/** How a module's access is shown. */\nexport type AccessSeverity = 'success' | 'info' | 'warn' | 'secondary';\n\n/**\n * What the plan page shows for one module.\n */\nexport interface ModuleRowModel {\n /** The module's standing. */\n readonly standing: ModuleStanding;\n\n /** What the access is called. */\n readonly accessText: string;\n\n /** When the access ends, in words; empty when it does not. */\n readonly untilText: string;\n\n /** How the access is shown. */\n readonly severity: AccessSeverity;\n\n /** Whether to offer to try the module. */\n readonly canTry: boolean;\n}\n\n/**\n * What the plan page shows for one offer.\n */\nexport interface OfferRowModel {\n /** The offer. */\n readonly offer: Offer;\n\n /** The prices, in words, monthly first. */\n readonly prices: readonly string[];\n\n /** The seats the offer includes, in words; empty when it includes none. */\n readonly seatsText: string;\n\n /** The names of the modules the offer includes. */\n readonly moduleNames: readonly string[];\n\n /** What the offer's button opens the customer portal for. */\n readonly intent: PortalIntent;\n\n /** The text of the offer's button. */\n readonly buttonLabel: string;\n}\n\n/**\n * Lays out the modules of the plan page.\n * @param entitlements What the tenant may do.\n * @param labels The labels to show.\n * @param locale The locale to format for; the browser's when not given.\n * @returns A row for every module the product declares.\n */\nexport function moduleRows(entitlements: Entitlements, labels: BoxOfficeLabels, locale?: string): ModuleRowModel[] {\n return entitlements.modules.map(standing => {\n const access = standing.access;\n return {\n standing,\n accessText: access === ModuleAccess.full\n ? labels.moduleAccess.full\n : access === ModuleAccess.trial\n ? labels.moduleAccess.trial\n : access === ModuleAccess.preview ? labels.moduleAccess.preview : labels.moduleAccess.none,\n untilText: standing.until && access !== ModuleAccess.none\n ? format(labels.moduleAccess.until, { date: formatDay(standing.until, locale) })\n : '',\n severity: access === ModuleAccess.full ? 'success' : access === ModuleAccess.trial ? 'info' : access === ModuleAccess.preview ? 'warn' : 'secondary',\n canTry: access === ModuleAccess.none || access === ModuleAccess.preview\n };\n });\n}\n\n/**\n * Says what an offer's price is.\n * @param price The price.\n * @param labels The labels to show.\n * @param locale The locale to format for; the browser's when not given.\n * @returns The price, such as \"$12.00 per month\".\n */\nexport function priceText(price: OfferPrice, labels: BoxOfficeLabels, locale?: string): string {\n const money = formatMoney(price.amount, price.currency, locale);\n return format(price.interval === BillingInterval.yearly ? labels.plan.perYear : labels.plan.perMonth, { price: money });\n}\n\n/**\n * Lays out the offers of the plan page.\n * @param offers The offers on sale.\n * @param entitlements What the tenant may do.\n * @param labels The labels to show.\n * @param locale The locale to format for; the browser's when not given.\n * @returns A row for every offer.\n */\nexport function offerRows(offers: readonly Offer[], entitlements: Entitlements, labels: BoxOfficeLabels, locale?: string): OfferRowModel[] {\n const changes = entitlements.state === 'licensed';\n return offers.map(offer => ({\n offer,\n prices: [...offer.prices]\n .sort((a, b) => a.interval - b.interval)\n .map(price => priceText(price, labels, locale)),\n seatsText: offer.includedSeats > 0 ? format(labels.plan.includedSeats, { count: offer.includedSeats }) : '',\n moduleNames: offer.modules.map(module => entitlements.standingOf(module)?.name ?? module),\n intent: changes ? PortalIntent.changePlan : PortalIntent.buy,\n buttonLabel: changes ? labels.plan.changePlan : labels.plan.buy\n }));\n}\n\n/**\n * Says where the tenant stands with its plan.\n * @param entitlements What the tenant may do.\n * @param labels The labels to show.\n * @returns A sentence; empty when there is nothing to say.\n */\nexport function planSummary(entitlements: Entitlements, labels: BoxOfficeLabels): string {\n if (entitlements.state === 'trial' && entitlements.trial) {\n return format(labels.plan.onTrial, { days: Math.max(entitlements.trial.daysLeft, 0) });\n }\n\n return entitlements.seats > 0 ? format(labels.plan.withSeats, { seats: entitlements.seats }) : '';\n}\n"],"names":["moduleRows","entitlements","labels","locale","modules","map","standing","access","accessText","ModuleAccess","full","moduleAccess","trial","preview","none","untilText","until","format","date","formatDay","severity","canTry","priceText","price","money","formatMoney","amount","currency","interval","BillingInterval","yearly","plan","perYear","perMonth","offerRows","offers","changes","state","offer","prices","sort","a","b","seatsText","includedSeats","count","moduleNames","module","standingOf","name","intent","PortalIntent","changePlan","buy","buttonLabel","planSummary","onTrial","days","Math","max","daysLeft","seats","withSeats"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ButtonProps } from '@cratis/components/Common';
|
|
2
|
+
import { Guid } from '@cratis/fundamentals';
|
|
3
|
+
import { PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
export interface PortalButtonProps extends Pick<ButtonProps, 'variant' | 'tone' | 'size' | 'className' | 'icon'> {
|
|
5
|
+
intent: PortalIntent;
|
|
6
|
+
label: string;
|
|
7
|
+
offer?: Guid;
|
|
8
|
+
}
|
|
9
|
+
export declare const PortalButton: ({ intent, label, offer, variant, ...rest }: PortalButtonProps) => import("react").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=PortalButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalButton.d.ts","sourceRoot":"","sources":["../../../Portal/PortalButton.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAU,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAQ5D,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAE5G,MAAM,EAAE,YAAY,CAAC;IAGrB,KAAK,EAAE,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,IAAI,CAAC;CAChB;AAMD,eAAO,MAAM,YAAY,GAAI,4CAAsD,iBAAiB,uCAmBnG,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Button } from '@cratis/components/Common';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';
|
|
5
|
+
import { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A button that opens the operator's customer portal with a signed link, to buy, try or change plan. It is not shown
|
|
9
|
+
* when the product has no customer portal.
|
|
10
|
+
*/ const PortalButton = ({ intent, label, offer, variant = 'solid', ...rest })=>{
|
|
11
|
+
const { openPortal } = useBoxOfficeContext();
|
|
12
|
+
const { canOpenPortal } = useEntitlementsContext();
|
|
13
|
+
const [isOpening, setIsOpening] = useState(false);
|
|
14
|
+
if (!canOpenPortal) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const open = async ()=>{
|
|
18
|
+
setIsOpening(true);
|
|
19
|
+
try {
|
|
20
|
+
await openPortal(intent, offer);
|
|
21
|
+
} finally{
|
|
22
|
+
setIsOpening(false);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
return /*#__PURE__*/ jsx(Button, {
|
|
26
|
+
...rest,
|
|
27
|
+
variant: variant,
|
|
28
|
+
label: label,
|
|
29
|
+
loading: isOpening,
|
|
30
|
+
onClick: ()=>void open()
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { PortalButton };
|
|
35
|
+
//# sourceMappingURL=PortalButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalButton.js","sources":["../../../Portal/PortalButton.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 { Button, ButtonProps } from '@cratis/components/Common';\nimport { Guid } from '@cratis/fundamentals';\nimport { PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { useState } from 'react';\nimport { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';\nimport { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';\n\n/**\n * Props for {@link PortalButton}.\n */\nexport interface PortalButtonProps extends Pick<ButtonProps, 'variant' | 'tone' | 'size' | 'className' | 'icon'> {\n /** What the user wants to do in the customer portal. */\n intent: PortalIntent;\n\n /** The text of the button. */\n label: string;\n\n /** The offer the user looked at, when they did. */\n offer?: Guid;\n}\n\n/**\n * A button that opens the operator's customer portal with a signed link, to buy, try or change plan. It is not shown\n * when the product has no customer portal.\n */\nexport const PortalButton = ({ intent, label, offer, variant = 'solid', ...rest }: PortalButtonProps) => {\n const { openPortal } = useBoxOfficeContext();\n const { canOpenPortal } = useEntitlementsContext();\n const [isOpening, setIsOpening] = useState(false);\n\n if (!canOpenPortal) {\n return null;\n }\n\n const open = async () => {\n setIsOpening(true);\n try {\n await openPortal(intent, offer);\n } finally {\n setIsOpening(false);\n }\n };\n\n return <Button {...rest} variant={variant} label={label} loading={isOpening} onClick={() => void open()} />;\n};\n"],"names":["PortalButton","intent","label","offer","variant","rest","openPortal","useBoxOfficeContext","canOpenPortal","useEntitlementsContext","isOpening","setIsOpening","useState","open","_jsx","Button","loading","onClick"],"mappings":";;;;;;AAwBA;;;AAGC,IACM,MAAMA,YAAAA,GAAe,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAAA,GAAU,OAAO,EAAE,GAAGC,IAAAA,EAAyB,GAAA;IAChG,MAAM,EAAEC,UAAU,EAAE,GAAGC,mBAAAA,EAAAA;IACvB,MAAM,EAAEC,aAAa,EAAE,GAAGC,sBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,SAAAA,EAAWC,YAAAA,CAAa,GAAGC,QAAAA,CAAS,KAAA,CAAA;AAE3C,IAAA,IAAI,CAACJ,aAAAA,EAAe;QAChB,OAAO,IAAA;AACX,IAAA;AAEA,IAAA,MAAMK,IAAAA,GAAO,UAAA;QACTF,YAAAA,CAAa,IAAA,CAAA;QACb,IAAI;AACA,YAAA,MAAML,WAAWL,MAAAA,EAAQE,KAAAA,CAAAA;QAC7B,CAAA,QAAU;YACNQ,YAAAA,CAAa,KAAA,CAAA;AACjB,QAAA;AACJ,IAAA,CAAA;AAEA,IAAA,qBAAOG,GAAA,CAACC,MAAAA,EAAAA;AAAQ,QAAA,GAAGV,IAAI;QAAED,OAAAA,EAASA,OAAAA;QAASF,KAAAA,EAAOA,KAAAA;QAAOc,OAAAA,EAASN,SAAAA;AAAWO,QAAAA,OAAAA,EAAS,IAAM,KAAKJ,IAAAA;;AACrG;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Portal/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../Portal/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ArcConfiguration } from '@cratis/arc.react';
|
|
2
|
+
import { Guid } from '@cratis/fundamentals';
|
|
3
|
+
import { PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
export declare function linkToPortal(arc: ArcConfiguration, intent: PortalIntent, offer?: Guid): Promise<string | undefined>;
|
|
5
|
+
export declare function openInNewTab(url: string): void;
|
|
6
|
+
//# sourceMappingURL=portalLinks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portalLinks.d.ts","sourceRoot":"","sources":["../../../Portal/portalLinks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAgB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAS1E,wBAAsB,YAAY,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CASzH;AAMD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { LinkToPortal } from '@cratis/showrunner.boxoffice';
|
|
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
|
+
* Asks the backend for a signed link that opens the customer portal for what the user wants to do there.
|
|
7
|
+
* @param arc The Arc configuration the application runs with.
|
|
8
|
+
* @param intent What the user wants to do.
|
|
9
|
+
* @param offer The offer the user looked at, when they did.
|
|
10
|
+
* @returns The link; undefined when the backend gave none.
|
|
11
|
+
*/ async function linkToPortal(arc, intent, offer) {
|
|
12
|
+
const query = new LinkToPortal();
|
|
13
|
+
query.setMicroservice(arc.microservice);
|
|
14
|
+
query.setApiBasePath(arc.apiBasePath ?? '');
|
|
15
|
+
query.setOrigin(arc.origin ?? '');
|
|
16
|
+
query.setHttpHeadersCallback(arc.httpHeadersCallback ?? (()=>({})));
|
|
17
|
+
const result = await query.perform({
|
|
18
|
+
intent,
|
|
19
|
+
offer
|
|
20
|
+
});
|
|
21
|
+
return result.isSuccess && result.data?.url ? result.data.url : undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Opens a link in a new tab, without letting the page it opens reach back to this one.
|
|
25
|
+
* @param url The link.
|
|
26
|
+
*/ function openInNewTab(url) {
|
|
27
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { linkToPortal, openInNewTab };
|
|
31
|
+
//# sourceMappingURL=portalLinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portalLinks.js","sources":["../../../Portal/portalLinks.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 { ArcConfiguration } from '@cratis/arc.react';\nimport { Guid } from '@cratis/fundamentals';\nimport { LinkToPortal, PortalIntent } from '@cratis/showrunner.boxoffice';\n\n/**\n * Asks the backend for a signed link that opens the customer portal for what the user wants to do there.\n * @param arc The Arc configuration the application runs with.\n * @param intent What the user wants to do.\n * @param offer The offer the user looked at, when they did.\n * @returns The link; undefined when the backend gave none.\n */\nexport async function linkToPortal(arc: ArcConfiguration, intent: PortalIntent, offer?: Guid): Promise<string | undefined> {\n const query = new LinkToPortal();\n query.setMicroservice(arc.microservice);\n query.setApiBasePath(arc.apiBasePath ?? '');\n query.setOrigin(arc.origin ?? '');\n query.setHttpHeadersCallback(arc.httpHeadersCallback ?? (() => ({})));\n\n const result = await query.perform({ intent, offer });\n return result.isSuccess && result.data?.url ? result.data.url : undefined;\n}\n\n/**\n * Opens a link in a new tab, without letting the page it opens reach back to this one.\n * @param url The link.\n */\nexport function openInNewTab(url: string): void {\n window.open(url, '_blank', 'noopener,noreferrer');\n}\n"],"names":["linkToPortal","arc","intent","offer","query","LinkToPortal","setMicroservice","microservice","setApiBasePath","apiBasePath","setOrigin","origin","setHttpHeadersCallback","httpHeadersCallback","result","perform","isSuccess","data","url","undefined","openInNewTab","window","open"],"mappings":";;AAAA;AACA;AAMA;;;;;;AAMC,IACM,eAAeA,YAAAA,CAAaC,GAAqB,EAAEC,MAAoB,EAAEC,KAAY,EAAA;AACxF,IAAA,MAAMC,QAAQ,IAAIC,YAAAA,EAAAA;IAClBD,KAAAA,CAAME,eAAe,CAACL,GAAAA,CAAIM,YAAY,CAAA;AACtCH,IAAAA,KAAAA,CAAMI,cAAc,CAACP,GAAAA,CAAIQ,WAAW,IAAI,EAAA,CAAA;AACxCL,IAAAA,KAAAA,CAAMM,SAAS,CAACT,GAAAA,CAAIU,MAAM,IAAI,EAAA,CAAA;IAC9BP,KAAAA,CAAMQ,sBAAsB,CAACX,GAAAA,CAAIY,mBAAmB,KAAK,KAAO,EAAC,CAAC,CAAA,CAAA;AAElE,IAAA,MAAMC,MAAAA,GAAS,MAAMV,KAAAA,CAAMW,OAAO,CAAC;AAAEb,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;IACnD,OAAOW,MAAAA,CAAOE,SAAS,IAAIF,MAAAA,CAAOG,IAAI,EAAEC,GAAAA,GAAMJ,MAAAA,CAAOG,IAAI,CAACC,GAAG,GAAGC,SAAAA;AACpE;AAEA;;;IAIO,SAASC,YAAAA,CAAaF,GAAW,EAAA;IACpCG,MAAAA,CAAOC,IAAI,CAACJ,GAAAA,EAAK,QAAA,EAAU,qBAAA,CAAA;AAC/B;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Guid } from '@cratis/fundamentals';
|
|
2
|
+
import { PortalIntent, SeatStanding } from '@cratis/showrunner.boxoffice';
|
|
3
|
+
import { BoxOfficeLabels } from '../Labels/index.js';
|
|
4
|
+
export interface BoxOfficeContextValue {
|
|
5
|
+
readonly isProvided: boolean;
|
|
6
|
+
readonly labels: BoxOfficeLabels;
|
|
7
|
+
readonly locale?: string;
|
|
8
|
+
readonly seat?: SeatStanding;
|
|
9
|
+
openPortal(intent: PortalIntent, offer?: Guid): Promise<void>;
|
|
10
|
+
refresh(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare const defaultBoxOfficeContextValue: BoxOfficeContextValue;
|
|
13
|
+
export declare const BoxOfficeContext: import("react").Context<BoxOfficeContextValue>;
|
|
14
|
+
export declare const useBoxOfficeContext: () => BoxOfficeContextValue;
|
|
15
|
+
export declare const useBoxOfficeLabels: () => BoxOfficeLabels;
|
|
16
|
+
//# sourceMappingURL=BoxOfficeContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxOfficeContext.d.ts","sourceRoot":"","sources":["../../../Provider/BoxOfficeContext.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAiB,MAAM,oBAAoB,CAAC;AAKpE,MAAM,WAAW,qBAAqB;IAElC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAG7B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAGjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAO7B,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAK9D,OAAO,IAAI,IAAI,CAAC;CACnB;AASD,eAAO,MAAM,4BAA4B,EAAE,qBAK1C,CAAC;AAKF,eAAO,MAAM,gBAAgB,gDAAqE,CAAC;AAMnG,eAAO,MAAM,mBAAmB,QAAO,qBAAqD,CAAC;AAM7F,eAAO,MAAM,kBAAkB,QAAO,eAAsD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
import { resolveLabels } from '../Labels/resolveLabels.js';
|
|
3
|
+
|
|
4
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
5
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
6
|
+
const noop = ()=>{
|
|
7
|
+
/* Without a BoxOfficeProvider there is nothing to refresh. */ };
|
|
8
|
+
/**
|
|
9
|
+
* The value without a {@link BoxOfficeProvider}: English labels, and no portal to open.
|
|
10
|
+
*/ const defaultBoxOfficeContextValue = {
|
|
11
|
+
isProvided: false,
|
|
12
|
+
labels: resolveLabels(),
|
|
13
|
+
openPortal: ()=>Promise.resolve(),
|
|
14
|
+
refresh: noop
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The React context {@link BoxOfficeProvider} provides.
|
|
18
|
+
*/ const BoxOfficeContext = createContext(defaultBoxOfficeContextValue);
|
|
19
|
+
/**
|
|
20
|
+
* Gets what {@link BoxOfficeProvider} provides, or the defaults outside one.
|
|
21
|
+
* @returns The {@link BoxOfficeContextValue}.
|
|
22
|
+
*/ const useBoxOfficeContext = ()=>useContext(BoxOfficeContext);
|
|
23
|
+
/**
|
|
24
|
+
* Gets the labels to show.
|
|
25
|
+
* @returns The {@link BoxOfficeLabels}.
|
|
26
|
+
*/ const useBoxOfficeLabels = ()=>useContext(BoxOfficeContext).labels;
|
|
27
|
+
|
|
28
|
+
export { BoxOfficeContext, defaultBoxOfficeContextValue, useBoxOfficeContext, useBoxOfficeLabels };
|
|
29
|
+
//# sourceMappingURL=BoxOfficeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxOfficeContext.js","sources":["../../../Provider/BoxOfficeContext.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 { Guid } from '@cratis/fundamentals';\nimport { PortalIntent, SeatStanding } from '@cratis/showrunner.boxoffice';\nimport { createContext, useContext } from 'react';\nimport { BoxOfficeLabels, resolveLabels } from '../Labels/index.js';\n\n/**\n * What {@link BoxOfficeProvider} gives the Box Office components.\n */\nexport interface BoxOfficeContextValue {\n /** Whether a {@link BoxOfficeProvider} provides the value; the defaults otherwise. */\n readonly isProvided: boolean;\n\n /** The labels to show. */\n readonly labels: BoxOfficeLabels;\n\n /** The locale to format dates and numbers for; the browser's when not given. */\n readonly locale?: string;\n\n /** Where the signed-in user stands with the tenant's seats; nothing while it loads. */\n readonly seat?: SeatStanding;\n\n /**\n * Opens the customer portal for what the user wants to do there. Reports a failure with a toast.\n * @param intent What the user wants to do.\n * @param offer The offer the user looked at, when they did.\n */\n openPortal(intent: PortalIntent, offer?: Guid): Promise<void>;\n\n /**\n * Asks the backend again what the tenant may do, for after something changed it.\n */\n refresh(): void;\n}\n\nconst noop = () => {\n /* Without a BoxOfficeProvider there is nothing to refresh. */\n};\n\n/**\n * The value without a {@link BoxOfficeProvider}: English labels, and no portal to open.\n */\nexport const defaultBoxOfficeContextValue: BoxOfficeContextValue = {\n isProvided: false,\n labels: resolveLabels(),\n openPortal: () => Promise.resolve(),\n refresh: noop\n};\n\n/**\n * The React context {@link BoxOfficeProvider} provides.\n */\nexport const BoxOfficeContext = createContext<BoxOfficeContextValue>(defaultBoxOfficeContextValue);\n\n/**\n * Gets what {@link BoxOfficeProvider} provides, or the defaults outside one.\n * @returns The {@link BoxOfficeContextValue}.\n */\nexport const useBoxOfficeContext = (): BoxOfficeContextValue => useContext(BoxOfficeContext);\n\n/**\n * Gets the labels to show.\n * @returns The {@link BoxOfficeLabels}.\n */\nexport const useBoxOfficeLabels = (): BoxOfficeLabels => useContext(BoxOfficeContext).labels;\n"],"names":["noop","defaultBoxOfficeContextValue","isProvided","labels","resolveLabels","openPortal","Promise","resolve","refresh","BoxOfficeContext","createContext","useBoxOfficeContext","useContext","useBoxOfficeLabels"],"mappings":";;;AAAA;AACA;AAoCA,MAAMA,IAAAA,GAAO,IAAA;AACT,+DACJ,CAAA;AAEA;;UAGaC,4BAAAA,GAAsD;IAC/DC,UAAAA,EAAY,KAAA;IACZC,MAAAA,EAAQC,aAAAA,EAAAA;IACRC,UAAAA,EAAY,IAAMC,QAAQC,OAAO,EAAA;IACjCC,OAAAA,EAASR;AACb;AAEA;;AAEC,IACM,MAAMS,gBAAAA,GAAmBC,aAAAA,CAAqCT,4BAAAA;AAErE;;;AAGC,IACM,MAAMU,mBAAAA,GAAsB,IAA6BC,WAAWH,gBAAAA;AAE3E;;;AAGC,IACM,MAAMI,kBAAAA,GAAqB,IAAuBD,UAAAA,CAAWH,gBAAAA,CAAAA,CAAkBN;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Guid } from '@cratis/fundamentals';
|
|
2
|
+
import { EntitlementSummary, PortalIntent, SeatStanding } from '@cratis/showrunner.boxoffice';
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
import { BoxOfficeLabelOverrides } from '../Labels/index.js';
|
|
5
|
+
export interface BoxOfficeProviderProps {
|
|
6
|
+
labels?: BoxOfficeLabelOverrides;
|
|
7
|
+
locale?: string;
|
|
8
|
+
entitlements?: EntitlementSummary;
|
|
9
|
+
seat?: SeatStanding;
|
|
10
|
+
openLink?: (url: string) => void;
|
|
11
|
+
portalLink?: (intent: PortalIntent, offer?: Guid) => Promise<string | undefined>;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
export declare const BoxOfficeProvider: ({ labels, locale, entitlements: preloaded, seat: preloadedSeat, openLink, portalLink, children }: BoxOfficeProviderProps) => import("react").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=BoxOfficeProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxOfficeProvider.d.ts","sourceRoot":"","sources":["../../../Provider/BoxOfficeProvider.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAuB,kBAAkB,EAAQ,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACzH,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAE,uBAAuB,EAAiB,MAAM,oBAAoB,CAAC;AAO5E,MAAM,WAAW,sBAAsB;IAEnC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAGjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAMlC,IAAI,CAAC,EAAE,YAAY,CAAC;IAGpB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAMjC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAGjF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAOD,eAAO,MAAM,iBAAiB,GAAI,kGAAiH,sBAAsB,gCAyCxK,CAAC"}
|