@churchapps/helpers 1.2.12 → 1.2.14
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/dist/cjs/ApiHelper.d.ts.map +1 -0
- package/dist/{ApiHelper.js → cjs/ApiHelper.js} +6 -3
- package/dist/cjs/ApiHelper.js.map +1 -0
- package/dist/cjs/AppearanceHelper.d.ts.map +1 -0
- package/dist/{AppearanceHelper.js → cjs/AppearanceHelper.js} +5 -1
- package/dist/cjs/AppearanceHelper.js.map +1 -0
- package/dist/cjs/ArrayHelper.d.ts.map +1 -0
- package/dist/{ArrayHelper.js → cjs/ArrayHelper.js} +7 -3
- package/dist/cjs/ArrayHelper.js.map +1 -0
- package/dist/cjs/CommonEnvironmentHelper.d.ts.map +1 -0
- package/dist/{CommonEnvironmentHelper.js → cjs/CommonEnvironmentHelper.js} +5 -1
- package/dist/cjs/CommonEnvironmentHelper.js.map +1 -0
- package/dist/cjs/CurrencyHelper.d.ts.map +1 -0
- package/dist/{CurrencyHelper.js → cjs/CurrencyHelper.js} +5 -1
- package/dist/cjs/CurrencyHelper.js.map +1 -0
- package/dist/cjs/DateHelper.d.ts.map +1 -0
- package/dist/{DateHelper.js → cjs/DateHelper.js} +16 -9
- package/dist/cjs/DateHelper.js.map +1 -0
- package/dist/cjs/DonationHelper.d.ts.map +1 -0
- package/dist/{DonationHelper.js → cjs/DonationHelper.js} +5 -1
- package/dist/cjs/DonationHelper.js.map +1 -0
- package/dist/cjs/ErrorHelper.d.ts.map +1 -0
- package/dist/{ErrorHelper.js → cjs/ErrorHelper.js} +5 -1
- package/dist/cjs/ErrorHelper.js.map +1 -0
- package/dist/{EventHelper.d.ts → cjs/EventHelper.d.ts} +2 -3
- package/dist/cjs/EventHelper.d.ts.map +1 -0
- package/dist/{EventHelper.js → cjs/EventHelper.js} +8 -5
- package/dist/cjs/EventHelper.js.map +1 -0
- package/dist/cjs/FileHelper.d.ts.map +1 -0
- package/dist/{FileHelper.js → cjs/FileHelper.js} +5 -1
- package/dist/cjs/FileHelper.js.map +1 -0
- package/dist/cjs/PersonHelper.d.ts.map +1 -0
- package/dist/{PersonHelper.js → cjs/PersonHelper.js} +7 -3
- package/dist/cjs/PersonHelper.js.map +1 -0
- package/dist/cjs/PlanHelper.d.ts.map +1 -0
- package/dist/{PlanHelper.js → cjs/PlanHelper.js} +7 -3
- package/dist/cjs/PlanHelper.js.map +1 -0
- package/dist/cjs/UniqueIdHelper.d.ts.map +1 -0
- package/dist/{UniqueIdHelper.js → cjs/UniqueIdHelper.js} +5 -1
- package/dist/cjs/UniqueIdHelper.js.map +1 -0
- package/dist/cjs/UserHelper.d.ts.map +1 -0
- package/dist/{UserHelper.js → cjs/UserHelper.js} +11 -7
- package/dist/cjs/UserHelper.js.map +1 -0
- package/dist/cjs/contentProviders/ContentProvider.d.ts.map +1 -0
- package/dist/cjs/contentProviders/ContentProvider.js +3 -0
- package/dist/cjs/contentProviders/ContentProvider.js.map +1 -0
- package/dist/cjs/contentProviders/LessonsContentProvider.d.ts.map +1 -0
- package/dist/{contentProviders → cjs/contentProviders}/LessonsContentProvider.js +12 -8
- package/dist/cjs/contentProviders/LessonsContentProvider.js.map +1 -0
- package/dist/cjs/contentProviders/index.d.ts.map +1 -0
- package/dist/cjs/contentProviders/index.js +6 -0
- package/dist/cjs/contentProviders/index.js.map +1 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +48 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces/Access.d.ts.map +1 -0
- package/dist/cjs/interfaces/Access.js +3 -0
- package/dist/{interfaces → cjs/interfaces}/Access.js.map +1 -1
- package/dist/cjs/interfaces/Attendance.d.ts.map +1 -0
- package/dist/cjs/interfaces/Attendance.js +3 -0
- package/dist/cjs/interfaces/Attendance.js.map +1 -0
- package/dist/cjs/interfaces/Content.d.ts.map +1 -0
- package/dist/cjs/interfaces/Content.js +3 -0
- package/dist/{interfaces → cjs/interfaces}/Content.js.map +1 -1
- package/dist/cjs/interfaces/Doing.d.ts.map +1 -0
- package/dist/cjs/interfaces/Doing.js +3 -0
- package/dist/{interfaces → cjs/interfaces}/Doing.js.map +1 -1
- package/dist/cjs/interfaces/Donation.d.ts.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/Donation.js +5 -1
- package/dist/cjs/interfaces/Donation.js.map +1 -0
- package/dist/cjs/interfaces/Error.d.ts.map +1 -0
- package/dist/cjs/interfaces/Error.js +3 -0
- package/dist/{interfaces → cjs/interfaces}/Error.js.map +1 -1
- package/dist/cjs/interfaces/Lessons.d.ts.map +1 -0
- package/dist/cjs/interfaces/Lessons.js +4 -0
- package/dist/cjs/interfaces/Lessons.js.map +1 -0
- package/dist/cjs/interfaces/Membership.d.ts.map +1 -0
- package/dist/cjs/interfaces/Membership.js +3 -0
- package/dist/cjs/interfaces/Membership.js.map +1 -0
- package/dist/cjs/interfaces/Messaging.d.ts.map +1 -0
- package/dist/cjs/interfaces/Messaging.js +3 -0
- package/dist/{interfaces → cjs/interfaces}/Messaging.js.map +1 -1
- package/dist/cjs/interfaces/Permissions.d.ts.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/Permissions.js +5 -1
- package/dist/cjs/interfaces/Permissions.js.map +1 -0
- package/dist/cjs/interfaces/Reporting.d.ts.map +1 -0
- package/dist/cjs/interfaces/Reporting.js +3 -0
- package/dist/{interfaces → cjs/interfaces}/Reporting.js.map +1 -1
- package/dist/cjs/interfaces/UserContextInterface.d.ts.map +1 -0
- package/dist/cjs/interfaces/UserContextInterface.js +3 -0
- package/dist/cjs/interfaces/UserContextInterface.js.map +1 -0
- package/dist/cjs/interfaces/index.d.ts.map +1 -0
- package/dist/cjs/interfaces/index.js +30 -0
- package/dist/cjs/interfaces/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/ApiHelper.d.ts +28 -0
- package/dist/esm/ApiHelper.d.ts.map +1 -0
- package/dist/esm/ApiHelper.js +159 -0
- package/dist/esm/ApiHelper.js.map +1 -0
- package/dist/esm/AppearanceHelper.d.ts +19 -0
- package/dist/esm/AppearanceHelper.d.ts.map +1 -0
- package/dist/esm/AppearanceHelper.js +64 -0
- package/dist/esm/AppearanceHelper.js.map +1 -0
- package/dist/esm/ArrayHelper.d.ts +16 -0
- package/dist/esm/ArrayHelper.d.ts.map +1 -0
- package/dist/esm/ArrayHelper.js +169 -0
- package/dist/esm/ArrayHelper.js.map +1 -0
- package/dist/esm/CommonEnvironmentHelper.d.ts +22 -0
- package/dist/esm/CommonEnvironmentHelper.d.ts.map +1 -0
- package/dist/esm/CommonEnvironmentHelper.js +104 -0
- package/dist/esm/CommonEnvironmentHelper.js.map +1 -0
- package/dist/esm/CurrencyHelper.d.ts +4 -0
- package/dist/esm/CurrencyHelper.d.ts.map +1 -0
- package/dist/esm/CurrencyHelper.js +15 -0
- package/dist/esm/CurrencyHelper.js.map +1 -0
- package/dist/esm/DateHelper.d.ts +23 -0
- package/dist/esm/DateHelper.d.ts.map +1 -0
- package/dist/esm/DateHelper.js +144 -0
- package/dist/esm/DateHelper.js.map +1 -0
- package/dist/esm/DonationHelper.d.ts +8 -0
- package/dist/esm/DonationHelper.d.ts.map +1 -0
- package/dist/esm/DonationHelper.js +33 -0
- package/dist/esm/DonationHelper.js.map +1 -0
- package/dist/esm/ErrorHelper.d.ts +13 -0
- package/dist/esm/ErrorHelper.d.ts.map +1 -0
- package/dist/esm/ErrorHelper.js +34 -0
- package/dist/esm/ErrorHelper.js.map +1 -0
- package/dist/esm/EventHelper.d.ts +12 -0
- package/dist/esm/EventHelper.d.ts.map +1 -0
- package/dist/esm/EventHelper.js +43 -0
- package/dist/esm/EventHelper.js.map +1 -0
- package/dist/esm/FileHelper.d.ts +5 -0
- package/dist/esm/FileHelper.d.ts.map +1 -0
- package/dist/esm/FileHelper.js +57 -0
- package/dist/esm/FileHelper.js.map +1 -0
- package/dist/esm/PersonHelper.d.ts +14 -0
- package/dist/esm/PersonHelper.d.ts.map +1 -0
- package/dist/esm/PersonHelper.js +84 -0
- package/dist/esm/PersonHelper.js.map +1 -0
- package/dist/esm/PlanHelper.d.ts +25 -0
- package/dist/esm/PlanHelper.d.ts.map +1 -0
- package/dist/esm/PlanHelper.js +114 -0
- package/dist/esm/PlanHelper.js.map +1 -0
- package/dist/esm/UniqueIdHelper.d.ts +9 -0
- package/dist/esm/UniqueIdHelper.d.ts.map +1 -0
- package/dist/esm/UniqueIdHelper.js +37 -0
- package/dist/esm/UniqueIdHelper.js.map +1 -0
- package/dist/esm/UserHelper.d.ts +14 -0
- package/dist/esm/UserHelper.d.ts.map +1 -0
- package/dist/esm/UserHelper.js +65 -0
- package/dist/esm/UserHelper.js.map +1 -0
- package/dist/esm/contentProviders/ContentProvider.d.ts +7 -0
- package/dist/esm/contentProviders/ContentProvider.d.ts.map +1 -0
- package/dist/esm/contentProviders/ContentProvider.js +3 -0
- package/dist/esm/contentProviders/ContentProvider.js.map +1 -0
- package/dist/esm/contentProviders/LessonsContentProvider.d.ts +66 -0
- package/dist/esm/contentProviders/LessonsContentProvider.d.ts.map +1 -0
- package/dist/esm/contentProviders/LessonsContentProvider.js +241 -0
- package/dist/esm/contentProviders/LessonsContentProvider.js.map +1 -0
- package/dist/esm/contentProviders/index.d.ts +3 -0
- package/dist/esm/contentProviders/index.d.ts.map +1 -0
- package/dist/esm/contentProviders/index.js +6 -0
- package/dist/esm/contentProviders/index.js.map +1 -0
- package/dist/{index.js → esm/index.d.ts} +1 -1
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +48 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces/Access.d.ts +132 -0
- package/dist/esm/interfaces/Access.d.ts.map +1 -0
- package/dist/esm/interfaces/Access.js +3 -0
- package/dist/esm/interfaces/Access.js.map +1 -0
- package/dist/esm/interfaces/Attendance.d.ts +45 -0
- package/dist/esm/interfaces/Attendance.d.ts.map +1 -0
- package/dist/esm/interfaces/Attendance.js +3 -0
- package/dist/esm/interfaces/Attendance.js.map +1 -0
- package/dist/esm/interfaces/Content.d.ts +86 -0
- package/dist/esm/interfaces/Content.d.ts.map +1 -0
- package/dist/esm/interfaces/Content.js +3 -0
- package/dist/esm/interfaces/Content.js.map +1 -0
- package/dist/esm/interfaces/Doing.d.ts +130 -0
- package/dist/esm/interfaces/Doing.d.ts.map +1 -0
- package/dist/esm/interfaces/Doing.js +3 -0
- package/dist/esm/interfaces/Doing.js.map +1 -0
- package/dist/esm/interfaces/Donation.d.ts +180 -0
- package/dist/esm/interfaces/Donation.d.ts.map +1 -0
- package/dist/esm/interfaces/Donation.js +27 -0
- package/dist/esm/interfaces/Donation.js.map +1 -0
- package/dist/esm/interfaces/Error.d.ts +17 -0
- package/dist/esm/interfaces/Error.d.ts.map +1 -0
- package/dist/esm/interfaces/Error.js +3 -0
- package/dist/esm/interfaces/Error.js.map +1 -0
- package/dist/esm/interfaces/Lessons.d.ts +47 -0
- package/dist/esm/interfaces/Lessons.d.ts.map +1 -0
- package/dist/esm/interfaces/Lessons.js +4 -0
- package/dist/esm/interfaces/Lessons.js.map +1 -0
- package/dist/esm/interfaces/Membership.d.ts +187 -0
- package/dist/esm/interfaces/Membership.d.ts.map +1 -0
- package/dist/esm/interfaces/Membership.js +3 -0
- package/dist/esm/interfaces/Membership.js.map +1 -0
- package/dist/esm/interfaces/Messaging.d.ts +86 -0
- package/dist/esm/interfaces/Messaging.d.ts.map +1 -0
- package/dist/esm/interfaces/Messaging.js +3 -0
- package/dist/esm/interfaces/Messaging.js.map +1 -0
- package/dist/esm/interfaces/Permissions.d.ts +166 -0
- package/dist/esm/interfaces/Permissions.d.ts.map +1 -0
- package/dist/esm/interfaces/Permissions.js +94 -0
- package/dist/esm/interfaces/Permissions.js.map +1 -0
- package/dist/esm/interfaces/Reporting.d.ts +45 -0
- package/dist/esm/interfaces/Reporting.d.ts.map +1 -0
- package/dist/esm/interfaces/Reporting.js +3 -0
- package/dist/esm/interfaces/Reporting.js.map +1 -0
- package/dist/esm/interfaces/UserContextInterface.d.ts +13 -0
- package/dist/esm/interfaces/UserContextInterface.d.ts.map +1 -0
- package/dist/esm/interfaces/UserContextInterface.js +3 -0
- package/dist/esm/interfaces/UserContextInterface.js.map +1 -0
- package/dist/{interfaces/index.js → esm/interfaces/index.d.ts} +1 -2
- package/dist/esm/interfaces/index.d.ts.map +1 -0
- package/dist/esm/interfaces/index.js +30 -0
- package/dist/esm/interfaces/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/package.json +9 -10
- package/src/EventHelper.ts +1 -3
- package/tsconfig.cjs.json +8 -0
- package/tsconfig.json +1 -1
- package/dist/ApiHelper.d.ts.map +0 -1
- package/dist/ApiHelper.js.map +0 -1
- package/dist/AppearanceHelper.d.ts.map +0 -1
- package/dist/AppearanceHelper.js.map +0 -1
- package/dist/ArrayHelper.d.ts.map +0 -1
- package/dist/ArrayHelper.js.map +0 -1
- package/dist/CommonEnvironmentHelper.d.ts.map +0 -1
- package/dist/CommonEnvironmentHelper.js.map +0 -1
- package/dist/CurrencyHelper.d.ts.map +0 -1
- package/dist/CurrencyHelper.js.map +0 -1
- package/dist/DateHelper.d.ts.map +0 -1
- package/dist/DateHelper.js.map +0 -1
- package/dist/DonationHelper.d.ts.map +0 -1
- package/dist/DonationHelper.js.map +0 -1
- package/dist/ErrorHelper.d.ts.map +0 -1
- package/dist/ErrorHelper.js.map +0 -1
- package/dist/EventHelper.d.ts.map +0 -1
- package/dist/EventHelper.js.map +0 -1
- package/dist/FileHelper.d.ts.map +0 -1
- package/dist/FileHelper.js.map +0 -1
- package/dist/PersonHelper.d.ts.map +0 -1
- package/dist/PersonHelper.js.map +0 -1
- package/dist/PlanHelper.d.ts.map +0 -1
- package/dist/PlanHelper.js.map +0 -1
- package/dist/UniqueIdHelper.d.ts.map +0 -1
- package/dist/UniqueIdHelper.js.map +0 -1
- package/dist/UserHelper.d.ts.map +0 -1
- package/dist/UserHelper.js.map +0 -1
- package/dist/contentProviders/ContentProvider.d.ts.map +0 -1
- package/dist/contentProviders/ContentProvider.js +0 -2
- package/dist/contentProviders/ContentProvider.js.map +0 -1
- package/dist/contentProviders/LessonsContentProvider.d.ts.map +0 -1
- package/dist/contentProviders/LessonsContentProvider.js.map +0 -1
- package/dist/contentProviders/index.d.ts.map +0 -1
- package/dist/contentProviders/index.js +0 -2
- package/dist/contentProviders/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/interfaces/Access.d.ts.map +0 -1
- package/dist/interfaces/Access.js +0 -2
- package/dist/interfaces/Attendance.d.ts.map +0 -1
- package/dist/interfaces/Attendance.js +0 -2
- package/dist/interfaces/Attendance.js.map +0 -1
- package/dist/interfaces/Content.d.ts.map +0 -1
- package/dist/interfaces/Content.js +0 -2
- package/dist/interfaces/Doing.d.ts.map +0 -1
- package/dist/interfaces/Doing.js +0 -2
- package/dist/interfaces/Donation.d.ts.map +0 -1
- package/dist/interfaces/Donation.js.map +0 -1
- package/dist/interfaces/Error.d.ts.map +0 -1
- package/dist/interfaces/Error.js +0 -2
- package/dist/interfaces/Lessons.d.ts.map +0 -1
- package/dist/interfaces/Lessons.js +0 -3
- package/dist/interfaces/Lessons.js.map +0 -1
- package/dist/interfaces/Membership.d.ts.map +0 -1
- package/dist/interfaces/Membership.js +0 -2
- package/dist/interfaces/Membership.js.map +0 -1
- package/dist/interfaces/Messaging.d.ts.map +0 -1
- package/dist/interfaces/Messaging.js +0 -2
- package/dist/interfaces/Permissions.d.ts.map +0 -1
- package/dist/interfaces/Permissions.js.map +0 -1
- package/dist/interfaces/Reporting.d.ts.map +0 -1
- package/dist/interfaces/Reporting.js +0 -2
- package/dist/interfaces/UserContextInterface.d.ts.map +0 -1
- package/dist/interfaces/UserContextInterface.js +0 -2
- package/dist/interfaces/UserContextInterface.js.map +0 -1
- package/dist/interfaces/index.d.ts.map +0 -1
- package/dist/interfaces/index.js.map +0 -1
- /package/dist/{ApiHelper.d.ts → cjs/ApiHelper.d.ts} +0 -0
- /package/dist/{AppearanceHelper.d.ts → cjs/AppearanceHelper.d.ts} +0 -0
- /package/dist/{ArrayHelper.d.ts → cjs/ArrayHelper.d.ts} +0 -0
- /package/dist/{CommonEnvironmentHelper.d.ts → cjs/CommonEnvironmentHelper.d.ts} +0 -0
- /package/dist/{CurrencyHelper.d.ts → cjs/CurrencyHelper.d.ts} +0 -0
- /package/dist/{DateHelper.d.ts → cjs/DateHelper.d.ts} +0 -0
- /package/dist/{DonationHelper.d.ts → cjs/DonationHelper.d.ts} +0 -0
- /package/dist/{ErrorHelper.d.ts → cjs/ErrorHelper.d.ts} +0 -0
- /package/dist/{FileHelper.d.ts → cjs/FileHelper.d.ts} +0 -0
- /package/dist/{PersonHelper.d.ts → cjs/PersonHelper.d.ts} +0 -0
- /package/dist/{PlanHelper.d.ts → cjs/PlanHelper.d.ts} +0 -0
- /package/dist/{UniqueIdHelper.d.ts → cjs/UniqueIdHelper.d.ts} +0 -0
- /package/dist/{UserHelper.d.ts → cjs/UserHelper.d.ts} +0 -0
- /package/dist/{contentProviders → cjs/contentProviders}/ContentProvider.d.ts +0 -0
- /package/dist/{contentProviders → cjs/contentProviders}/LessonsContentProvider.d.ts +0 -0
- /package/dist/{contentProviders → cjs/contentProviders}/index.d.ts +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Access.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Attendance.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Content.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Doing.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Donation.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Error.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Lessons.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Membership.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Messaging.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Permissions.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Reporting.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/UserContextInterface.d.ts +0 -0
- /package/dist/{interfaces → cjs/interfaces}/index.d.ts +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlanHelper = void 0;
|
|
4
|
+
const LessonsContentProvider_js_1 = require("./contentProviders/LessonsContentProvider.js");
|
|
5
|
+
class PlanHelper {
|
|
6
|
+
static providers = [
|
|
7
|
+
new LessonsContentProvider_js_1.LessonsContentProvider()
|
|
8
|
+
];
|
|
9
|
+
// Register additional content providers
|
|
10
|
+
static registerProvider(provider) {
|
|
11
|
+
// Avoid duplicates
|
|
12
|
+
if (!this.providers.find(p => p.providerId === provider.providerId)) {
|
|
13
|
+
this.providers.push(provider);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Replace a provider (useful for configuring with different URLs)
|
|
17
|
+
static replaceProvider(provider) {
|
|
18
|
+
const index = this.providers.findIndex(p => p.providerId === provider.providerId);
|
|
19
|
+
if (index >= 0) {
|
|
20
|
+
this.providers[index] = provider;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.providers.push(provider);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Main method: populate planItems with their content
|
|
27
|
+
static async populate(plan, planItems) {
|
|
28
|
+
// Flatten hierarchy to get all items
|
|
29
|
+
const allItems = this.flattenItems(planItems);
|
|
30
|
+
// Group items by provider
|
|
31
|
+
const itemsByProvider = new Map();
|
|
32
|
+
for (const item of allItems) {
|
|
33
|
+
for (const provider of this.providers) {
|
|
34
|
+
if (provider.canHandle(plan, item)) {
|
|
35
|
+
const existing = itemsByProvider.get(provider) || [];
|
|
36
|
+
existing.push(item);
|
|
37
|
+
itemsByProvider.set(provider, existing);
|
|
38
|
+
break; // First matching provider wins
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Fetch content from each provider in parallel
|
|
43
|
+
const fetchPromises = [];
|
|
44
|
+
const contentMap = new Map();
|
|
45
|
+
for (const [provider, items] of itemsByProvider) {
|
|
46
|
+
fetchPromises.push(provider.fetchContent(plan, items).then(providerContent => {
|
|
47
|
+
for (const [itemId, content] of providerContent) {
|
|
48
|
+
contentMap.set(itemId, content);
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
await Promise.all(fetchPromises);
|
|
53
|
+
// Attach content to items (mutates in place for efficiency)
|
|
54
|
+
this.attachContent(planItems, contentMap);
|
|
55
|
+
return planItems;
|
|
56
|
+
}
|
|
57
|
+
// Flatten nested planItems for processing
|
|
58
|
+
static flattenItems(items) {
|
|
59
|
+
const result = [];
|
|
60
|
+
const collect = (itemList) => {
|
|
61
|
+
for (const item of itemList) {
|
|
62
|
+
result.push(item);
|
|
63
|
+
if (item.children?.length) {
|
|
64
|
+
collect(item.children);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
collect(items);
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
// Attach content to items recursively
|
|
72
|
+
static attachContent(items, contentMap) {
|
|
73
|
+
for (const item of items) {
|
|
74
|
+
const content = contentMap.get(item.id);
|
|
75
|
+
if (content) {
|
|
76
|
+
item.content = content;
|
|
77
|
+
}
|
|
78
|
+
if (item.children?.length) {
|
|
79
|
+
this.attachContent(item.children, contentMap);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Convenience: Get the lessons provider for direct lesson operations
|
|
84
|
+
static getLessonsProvider() {
|
|
85
|
+
return this.providers.find(p => p.providerId === "lessons");
|
|
86
|
+
}
|
|
87
|
+
// ============================================
|
|
88
|
+
// Time Formatting Utilities
|
|
89
|
+
// ============================================
|
|
90
|
+
/**
|
|
91
|
+
* Format seconds as MM:SS string
|
|
92
|
+
* @param seconds - Number of seconds to format
|
|
93
|
+
* @returns Formatted time string (e.g., "3:45")
|
|
94
|
+
*/
|
|
95
|
+
static formatTime(seconds) {
|
|
96
|
+
const mins = Math.floor(seconds / 60);
|
|
97
|
+
const secs = seconds % 60;
|
|
98
|
+
return mins + ":" + (secs < 10 ? "0" : "") + secs;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Calculate total duration of a section's children
|
|
102
|
+
* @param section - PlanItem with children
|
|
103
|
+
* @returns Total seconds from all children
|
|
104
|
+
*/
|
|
105
|
+
static getSectionDuration(section) {
|
|
106
|
+
let totalSeconds = 0;
|
|
107
|
+
section.children?.forEach((child) => {
|
|
108
|
+
totalSeconds += child.seconds || 0;
|
|
109
|
+
});
|
|
110
|
+
return totalSeconds;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.PlanHelper = PlanHelper;
|
|
114
|
+
//# sourceMappingURL=PlanHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanHelper.js","sourceRoot":"","sources":["../../src/PlanHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class UniqueIdHelper {
|
|
2
|
+
static chars: string[];
|
|
3
|
+
static alphanumericChars: string[];
|
|
4
|
+
static isMissing(obj: any): boolean;
|
|
5
|
+
static shortId(): string;
|
|
6
|
+
static generateAlphanumeric(): string;
|
|
7
|
+
static generate(charList: string[], length: number): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=UniqueIdHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniqueIdHelper.d.ts","sourceRoot":"","sources":["../../src/UniqueIdHelper.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAEzB,MAAM,CAAC,KAAK,WAGA;IAEZ,MAAM,CAAC,iBAAiB,WAE4B;WAEtC,SAAS,CAAC,GAAG,EAAE,GAAG;WAMlB,OAAO;WAIP,oBAAoB;WAIpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM;CAU1D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UniqueIdHelper = void 0;
|
|
4
|
+
class UniqueIdHelper {
|
|
5
|
+
static chars = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
|
|
6
|
+
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
|
|
7
|
+
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
|
|
8
|
+
"-", "_"];
|
|
9
|
+
static alphanumericChars = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
|
|
10
|
+
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
|
|
11
|
+
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
12
|
+
static isMissing(obj) {
|
|
13
|
+
if (obj === undefined || obj === null)
|
|
14
|
+
return true;
|
|
15
|
+
else if (obj.toString() === "")
|
|
16
|
+
return true;
|
|
17
|
+
else
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
static shortId() {
|
|
21
|
+
return this.generate(UniqueIdHelper.chars, 11);
|
|
22
|
+
}
|
|
23
|
+
static generateAlphanumeric() {
|
|
24
|
+
return this.generate(UniqueIdHelper.alphanumericChars, 11);
|
|
25
|
+
}
|
|
26
|
+
static generate(charList, length) {
|
|
27
|
+
let result = "";
|
|
28
|
+
for (let i = 0; i < length; i++) {
|
|
29
|
+
const idx = Math.floor(Math.random() * charList.length);
|
|
30
|
+
const c = charList[idx];
|
|
31
|
+
result += c;
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.UniqueIdHelper = UniqueIdHelper;
|
|
37
|
+
//# sourceMappingURL=UniqueIdHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniqueIdHelper.js","sourceRoot":"","sources":["../../src/UniqueIdHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { UserInterface, UserContextInterface, IApiPermission, PersonInterface, LoginUserChurchInterface } from "./interfaces/index.js";
|
|
2
|
+
export declare class UserHelper {
|
|
3
|
+
static currentUserChurch: LoginUserChurchInterface;
|
|
4
|
+
static userChurches: LoginUserChurchInterface[];
|
|
5
|
+
static user: UserInterface;
|
|
6
|
+
static churchChanged: boolean;
|
|
7
|
+
static person: PersonInterface;
|
|
8
|
+
static selectChurch: (context?: UserContextInterface, churchId?: string, keyName?: string) => Promise<void>;
|
|
9
|
+
static setupApiHelper(userChurch: LoginUserChurchInterface): void;
|
|
10
|
+
static setupApiHelperNoChurch(user: LoginUserChurchInterface): void;
|
|
11
|
+
static checkAccess({ api, contentType, action }: IApiPermission): boolean;
|
|
12
|
+
static createAppUrl(appUrl: string, returnUrl: string): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=UserHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserHelper.d.ts","sourceRoot":"","sources":["../../src/UserHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEvI,qBAAa,UAAU;IACrB,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IACnD,MAAM,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;IAC3B,MAAM,CAAC,aAAa,EAAE,OAAO,CAAS;IACtC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAE/B,MAAM,CAAC,YAAY,GAAU,UAAU,oBAAoB,EAAE,WAAW,MAAM,EAAE,UAAU,MAAM,mBAoB/F;IAED,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,wBAAwB;IAK1D,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,wBAAwB;IAI5D,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,OAAO;IAczE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAMtD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserHelper = void 0;
|
|
4
|
+
const ApiHelper_js_1 = require("./ApiHelper.js");
|
|
5
|
+
class UserHelper {
|
|
6
|
+
static currentUserChurch;
|
|
7
|
+
static userChurches;
|
|
8
|
+
static user;
|
|
9
|
+
static churchChanged = false;
|
|
10
|
+
static person;
|
|
11
|
+
static selectChurch = async (context, churchId, keyName) => {
|
|
12
|
+
let userChurch = null;
|
|
13
|
+
if (churchId) {
|
|
14
|
+
UserHelper.userChurches.forEach(uc => {
|
|
15
|
+
if (uc.church.id === churchId)
|
|
16
|
+
userChurch = uc;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
else if (keyName)
|
|
20
|
+
UserHelper.userChurches.forEach(uc => { if (uc.church.subDomain === keyName)
|
|
21
|
+
userChurch = uc; });
|
|
22
|
+
else
|
|
23
|
+
userChurch = UserHelper.userChurches[0];
|
|
24
|
+
if (!userChurch)
|
|
25
|
+
return;
|
|
26
|
+
else {
|
|
27
|
+
UserHelper.currentUserChurch = userChurch;
|
|
28
|
+
UserHelper.setupApiHelper(UserHelper.currentUserChurch);
|
|
29
|
+
// TODO - remove context code from here and perform the logic in the component itself.
|
|
30
|
+
if (context) {
|
|
31
|
+
if (context.userChurch !== null)
|
|
32
|
+
UserHelper.churchChanged = true;
|
|
33
|
+
context.setUserChurch(UserHelper.currentUserChurch);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
static setupApiHelper(userChurch) {
|
|
38
|
+
ApiHelper_js_1.ApiHelper.setDefaultPermissions(userChurch.jwt);
|
|
39
|
+
userChurch.apis.forEach(api => { ApiHelper_js_1.ApiHelper.setPermissions(api.keyName, api.jwt, api.permissions); });
|
|
40
|
+
}
|
|
41
|
+
static setupApiHelperNoChurch(user) {
|
|
42
|
+
ApiHelper_js_1.ApiHelper.setDefaultPermissions(user.jwt);
|
|
43
|
+
}
|
|
44
|
+
static checkAccess({ api, contentType, action }) {
|
|
45
|
+
const config = ApiHelper_js_1.ApiHelper.getConfig(api);
|
|
46
|
+
if (!config)
|
|
47
|
+
return false;
|
|
48
|
+
const permissions = config.permissions;
|
|
49
|
+
let result = false;
|
|
50
|
+
if (permissions !== undefined) {
|
|
51
|
+
permissions.forEach(element => {
|
|
52
|
+
if (element.contentType === contentType && element.action === action)
|
|
53
|
+
result = true;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
static createAppUrl(appUrl, returnUrl) {
|
|
59
|
+
const config = ApiHelper_js_1.ApiHelper.getConfig("MembershipApi");
|
|
60
|
+
const jwt = config?.jwt || "";
|
|
61
|
+
return `${appUrl}/login/?jwt=${jwt}&returnUrl=${returnUrl}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.UserHelper = UserHelper;
|
|
65
|
+
//# sourceMappingURL=UserHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserHelper.js","sourceRoot":"","sources":["../../src/UserHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PlanInterface, PlanItemInterface, PlanItemContentInterface } from "../interfaces/index.js";
|
|
2
|
+
export interface ContentProviderInterface {
|
|
3
|
+
readonly providerId: string;
|
|
4
|
+
canHandle(plan: PlanInterface, planItem: PlanItemInterface): boolean;
|
|
5
|
+
fetchContent(plan: PlanInterface, planItems: PlanItemInterface[]): Promise<Map<string, PlanItemContentInterface>>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ContentProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentProvider.d.ts","sourceRoot":"","sources":["../../../src/contentProviders/ContentProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEzG,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAGrE,YAAY,CACV,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentProvider.js","sourceRoot":"","sources":["../../../src/contentProviders/ContentProvider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { PlanInterface, PlanItemInterface, PlanItemContentInterface, ExternalVenueRefInterface } from "../interfaces/index.js";
|
|
2
|
+
import type { VenuePlanItemsResponseInterface, VenueActionResponseInterface, LessonTreeInterface, LessonActionTreeInterface } from "../interfaces/Lessons.js";
|
|
3
|
+
import type { ContentProviderInterface } from "./ContentProvider.js";
|
|
4
|
+
export declare class LessonsContentProvider implements ContentProviderInterface {
|
|
5
|
+
readonly providerId = "lessons";
|
|
6
|
+
private lessonsUrl;
|
|
7
|
+
constructor(lessonsUrl?: string);
|
|
8
|
+
canHandle(plan: PlanInterface, planItem: PlanItemInterface): boolean;
|
|
9
|
+
fetchContent(plan: PlanInterface, planItems: PlanItemInterface[]): Promise<Map<string, PlanItemContentInterface>>;
|
|
10
|
+
hasAssociatedLesson(plan: PlanInterface): boolean;
|
|
11
|
+
isExternalVenue(plan: PlanInterface): boolean;
|
|
12
|
+
getExternalRef(plan: PlanInterface): ExternalVenueRefInterface | null;
|
|
13
|
+
getVenueId(plan: PlanInterface): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Fetch venue plan items - the basic hierarchical structure
|
|
16
|
+
* Returns: headers with children (sections), but sections don't have their actions
|
|
17
|
+
* Use this for preview mode display
|
|
18
|
+
*/
|
|
19
|
+
fetchVenuePlanItems(plan: PlanInterface): Promise<VenuePlanItemsResponseInterface>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch venue actions - sections with their full action lists
|
|
22
|
+
* Use this for action selection dialogs and full expansion
|
|
23
|
+
*/
|
|
24
|
+
fetchVenueActions(plan: PlanInterface): Promise<VenueActionResponseInterface>;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch the full lesson tree for browsing (programs -> studies -> lessons -> venues)
|
|
27
|
+
*/
|
|
28
|
+
fetchLessonTree(): Promise<LessonTreeInterface>;
|
|
29
|
+
/**
|
|
30
|
+
* Fetch the action tree for action selection (includes actions in each venue section)
|
|
31
|
+
*/
|
|
32
|
+
fetchActionTree(): Promise<LessonActionTreeInterface>;
|
|
33
|
+
/**
|
|
34
|
+
* Get the display list - hierarchical items suitable for preview
|
|
35
|
+
* Structure: headers -> sections (no actions expanded)
|
|
36
|
+
* This is the lightweight version for showing what a lesson contains
|
|
37
|
+
*/
|
|
38
|
+
getDisplayList(plan: PlanInterface): Promise<PlanItemInterface[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Get display list with sections only (strip actions from children)
|
|
41
|
+
* Use this when importing a lesson as editable plan items
|
|
42
|
+
*/
|
|
43
|
+
getSectionsOnlyList(plan: PlanInterface): Promise<PlanItemInterface[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Get the fully expanded list - items with all actions populated in sections
|
|
46
|
+
* Merges fetchVenuePlanItems with fetchVenueActions to get complete data
|
|
47
|
+
*/
|
|
48
|
+
getExpandedList(plan: PlanInterface): Promise<PlanItemInterface[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Get embed URL for an action
|
|
51
|
+
*/
|
|
52
|
+
getActionEmbedUrl(actionId: string, externalProviderId?: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Get embed URL for an add-on
|
|
55
|
+
*/
|
|
56
|
+
getAddOnEmbedUrl(addOnId: string, externalProviderId?: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Get embed URL for a section
|
|
59
|
+
*/
|
|
60
|
+
getSectionEmbedUrl(sectionId: string, externalProviderId?: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Get the external provider ID from a plan (if external)
|
|
63
|
+
*/
|
|
64
|
+
getExternalProviderId(plan: PlanInterface): string | null;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=LessonsContentProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LessonsContentProvider.d.ts","sourceRoot":"","sources":["../../../src/contentProviders/LessonsContentProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACpI,OAAO,KAAK,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC9J,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,qBAAa,sBAAuB,YAAW,wBAAwB;IACrE,QAAQ,CAAC,UAAU,aAAa;IAEhC,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAAiC;IAIzD,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAW9D,YAAY,CAChB,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IA+CjD,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAIjD,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAI7C,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,yBAAyB,GAAG,IAAI;IASrE,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;IAY9C;;;;OAIG;IACG,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAYxF;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAYnF;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIrD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAQ3D;;;;OAIG;IACG,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAKvE;;;OAGG;IACG,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiB5E;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmDxE;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM;IAOxE;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM;IAOtE;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM;IAO1E;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;CAI1D"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LessonsContentProvider = void 0;
|
|
4
|
+
const ApiHelper_js_1 = require("../ApiHelper.js");
|
|
5
|
+
class LessonsContentProvider {
|
|
6
|
+
providerId = "lessons";
|
|
7
|
+
lessonsUrl;
|
|
8
|
+
constructor(lessonsUrl = "https://lessons.church") {
|
|
9
|
+
this.lessonsUrl = lessonsUrl;
|
|
10
|
+
}
|
|
11
|
+
canHandle(plan, planItem) {
|
|
12
|
+
// Handles: lessonAction, lessonAddOn, lessonSection, and items with relatedId when plan has lesson
|
|
13
|
+
const lessonTypes = ["lessonAction", "lessonAddOn", "lessonSection"];
|
|
14
|
+
const hasLessonPlan = plan?.contentType === "venue" || plan?.contentType === "externalVenue";
|
|
15
|
+
if (lessonTypes.includes(planItem.itemType) && planItem.relatedId)
|
|
16
|
+
return true;
|
|
17
|
+
if (planItem.itemType === "item" && planItem.relatedId && hasLessonPlan)
|
|
18
|
+
return true;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
async fetchContent(plan, planItems) {
|
|
22
|
+
const result = new Map();
|
|
23
|
+
// Group by type for efficient batching
|
|
24
|
+
const actions = planItems.filter(p => p.itemType === "lessonAction" && p.relatedId);
|
|
25
|
+
const addOns = planItems.filter(p => p.itemType === "lessonAddOn" && p.relatedId);
|
|
26
|
+
const sections = planItems.filter(p => (p.itemType === "lessonSection" || p.itemType === "item") && p.relatedId);
|
|
27
|
+
const externalRef = this.getExternalRef(plan);
|
|
28
|
+
// Build embed URLs for each item
|
|
29
|
+
for (const item of actions) {
|
|
30
|
+
result.set(item.id, {
|
|
31
|
+
provider: this.providerId,
|
|
32
|
+
embedUrl: externalRef
|
|
33
|
+
? `${this.lessonsUrl}/embed/external/${externalRef.externalProviderId}/action/${item.relatedId}`
|
|
34
|
+
: `${this.lessonsUrl}/embed/action/${item.relatedId}`
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
for (const item of addOns) {
|
|
38
|
+
result.set(item.id, {
|
|
39
|
+
provider: this.providerId,
|
|
40
|
+
embedUrl: externalRef
|
|
41
|
+
? `${this.lessonsUrl}/embed/external/${externalRef.externalProviderId}/addon/${item.relatedId}`
|
|
42
|
+
: `${this.lessonsUrl}/embed/addon/${item.relatedId}`
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
for (const item of sections) {
|
|
46
|
+
result.set(item.id, {
|
|
47
|
+
provider: this.providerId,
|
|
48
|
+
embedUrl: externalRef
|
|
49
|
+
? `${this.lessonsUrl}/embed/external/${externalRef.externalProviderId}/section/${item.relatedId}`
|
|
50
|
+
: `${this.lessonsUrl}/embed/section/${item.relatedId}`
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
// ============================================
|
|
56
|
+
// Plan/Lesson Association Methods
|
|
57
|
+
// ============================================
|
|
58
|
+
hasAssociatedLesson(plan) {
|
|
59
|
+
return (plan?.contentType === "venue" || plan?.contentType === "externalVenue") && !!plan?.contentId;
|
|
60
|
+
}
|
|
61
|
+
isExternalVenue(plan) {
|
|
62
|
+
return plan?.contentType === "externalVenue";
|
|
63
|
+
}
|
|
64
|
+
getExternalRef(plan) {
|
|
65
|
+
if (!this.isExternalVenue(plan) || !plan?.contentId)
|
|
66
|
+
return null;
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(plan.contentId);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getVenueId(plan) {
|
|
75
|
+
if (!this.hasAssociatedLesson(plan))
|
|
76
|
+
return null;
|
|
77
|
+
if (this.isExternalVenue(plan)) {
|
|
78
|
+
return this.getExternalRef(plan)?.venueId || null;
|
|
79
|
+
}
|
|
80
|
+
return plan.contentId || null;
|
|
81
|
+
}
|
|
82
|
+
// ============================================
|
|
83
|
+
// API Fetch Methods
|
|
84
|
+
// ============================================
|
|
85
|
+
/**
|
|
86
|
+
* Fetch venue plan items - the basic hierarchical structure
|
|
87
|
+
* Returns: headers with children (sections), but sections don't have their actions
|
|
88
|
+
* Use this for preview mode display
|
|
89
|
+
*/
|
|
90
|
+
async fetchVenuePlanItems(plan) {
|
|
91
|
+
if (!this.hasAssociatedLesson(plan))
|
|
92
|
+
return { items: [] };
|
|
93
|
+
const externalRef = this.getExternalRef(plan);
|
|
94
|
+
if (externalRef) {
|
|
95
|
+
return await ApiHelper_js_1.ApiHelper.getAnonymous(`/externalProviders/${externalRef.externalProviderId}/venue/${externalRef.venueId}/planItems`, "LessonsApi");
|
|
96
|
+
}
|
|
97
|
+
return await ApiHelper_js_1.ApiHelper.getAnonymous(`/venues/public/planItems/${plan.contentId}`, "LessonsApi");
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Fetch venue actions - sections with their full action lists
|
|
101
|
+
* Use this for action selection dialogs and full expansion
|
|
102
|
+
*/
|
|
103
|
+
async fetchVenueActions(plan) {
|
|
104
|
+
if (!this.hasAssociatedLesson(plan))
|
|
105
|
+
return { sections: [] };
|
|
106
|
+
const externalRef = this.getExternalRef(plan);
|
|
107
|
+
if (externalRef) {
|
|
108
|
+
return await ApiHelper_js_1.ApiHelper.getAnonymous(`/externalProviders/${externalRef.externalProviderId}/venue/${externalRef.venueId}/actions`, "LessonsApi");
|
|
109
|
+
}
|
|
110
|
+
return await ApiHelper_js_1.ApiHelper.getAnonymous(`/venues/public/actions/${plan.contentId}`, "LessonsApi");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Fetch the full lesson tree for browsing (programs -> studies -> lessons -> venues)
|
|
114
|
+
*/
|
|
115
|
+
async fetchLessonTree() {
|
|
116
|
+
return await ApiHelper_js_1.ApiHelper.getAnonymous("/lessons/public/tree", "LessonsApi");
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Fetch the action tree for action selection (includes actions in each venue section)
|
|
120
|
+
*/
|
|
121
|
+
async fetchActionTree() {
|
|
122
|
+
return await ApiHelper_js_1.ApiHelper.getAnonymous("/lessons/public/actionTree", "LessonsApi");
|
|
123
|
+
}
|
|
124
|
+
// ============================================
|
|
125
|
+
// Display List Methods (for preview/display without full actions)
|
|
126
|
+
// ============================================
|
|
127
|
+
/**
|
|
128
|
+
* Get the display list - hierarchical items suitable for preview
|
|
129
|
+
* Structure: headers -> sections (no actions expanded)
|
|
130
|
+
* This is the lightweight version for showing what a lesson contains
|
|
131
|
+
*/
|
|
132
|
+
async getDisplayList(plan) {
|
|
133
|
+
const response = await this.fetchVenuePlanItems(plan);
|
|
134
|
+
return response?.items || [];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get display list with sections only (strip actions from children)
|
|
138
|
+
* Use this when importing a lesson as editable plan items
|
|
139
|
+
*/
|
|
140
|
+
async getSectionsOnlyList(plan) {
|
|
141
|
+
const response = await this.fetchVenuePlanItems(plan);
|
|
142
|
+
if (!response?.items)
|
|
143
|
+
return [];
|
|
144
|
+
return response.items.map(item => ({
|
|
145
|
+
...item,
|
|
146
|
+
children: item.children?.map(section => ({
|
|
147
|
+
...section,
|
|
148
|
+
children: undefined // Remove actions from sections
|
|
149
|
+
}))
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
// ============================================
|
|
153
|
+
// Expanded List Methods (with full actions)
|
|
154
|
+
// ============================================
|
|
155
|
+
/**
|
|
156
|
+
* Get the fully expanded list - items with all actions populated in sections
|
|
157
|
+
* Merges fetchVenuePlanItems with fetchVenueActions to get complete data
|
|
158
|
+
*/
|
|
159
|
+
async getExpandedList(plan) {
|
|
160
|
+
const [planItemsResponse, actionsResponse] = await Promise.all([
|
|
161
|
+
this.fetchVenuePlanItems(plan),
|
|
162
|
+
this.fetchVenueActions(plan)
|
|
163
|
+
]);
|
|
164
|
+
if (!planItemsResponse?.items)
|
|
165
|
+
return [];
|
|
166
|
+
// Create a map of section ID -> actions
|
|
167
|
+
const sectionActionsMap = new Map();
|
|
168
|
+
if (actionsResponse?.sections) {
|
|
169
|
+
for (const section of actionsResponse.sections) {
|
|
170
|
+
if (section.id && section.actions) {
|
|
171
|
+
sectionActionsMap.set(section.id, section.actions.map(action => ({
|
|
172
|
+
itemType: "lessonAction",
|
|
173
|
+
relatedId: action.id,
|
|
174
|
+
label: action.name,
|
|
175
|
+
description: action.actionType,
|
|
176
|
+
seconds: action.seconds
|
|
177
|
+
})));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Recursively expand sections with their actions
|
|
182
|
+
const expandItem = (item) => {
|
|
183
|
+
if (!item.children)
|
|
184
|
+
return item;
|
|
185
|
+
return {
|
|
186
|
+
...item,
|
|
187
|
+
children: item.children.map(child => {
|
|
188
|
+
// If this is a section (has relatedId), try to get its actions
|
|
189
|
+
if (child.relatedId && sectionActionsMap.has(child.relatedId)) {
|
|
190
|
+
return {
|
|
191
|
+
...child,
|
|
192
|
+
children: sectionActionsMap.get(child.relatedId)
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Otherwise recursively process
|
|
196
|
+
return expandItem(child);
|
|
197
|
+
})
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
return planItemsResponse.items.map(expandItem);
|
|
201
|
+
}
|
|
202
|
+
// ============================================
|
|
203
|
+
// Embed URL Helpers
|
|
204
|
+
// ============================================
|
|
205
|
+
/**
|
|
206
|
+
* Get embed URL for an action
|
|
207
|
+
*/
|
|
208
|
+
getActionEmbedUrl(actionId, externalProviderId) {
|
|
209
|
+
if (externalProviderId) {
|
|
210
|
+
return `${this.lessonsUrl}/embed/external/${externalProviderId}/action/${actionId}`;
|
|
211
|
+
}
|
|
212
|
+
return `${this.lessonsUrl}/embed/action/${actionId}`;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get embed URL for an add-on
|
|
216
|
+
*/
|
|
217
|
+
getAddOnEmbedUrl(addOnId, externalProviderId) {
|
|
218
|
+
if (externalProviderId) {
|
|
219
|
+
return `${this.lessonsUrl}/embed/external/${externalProviderId}/addon/${addOnId}`;
|
|
220
|
+
}
|
|
221
|
+
return `${this.lessonsUrl}/embed/addon/${addOnId}`;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get embed URL for a section
|
|
225
|
+
*/
|
|
226
|
+
getSectionEmbedUrl(sectionId, externalProviderId) {
|
|
227
|
+
if (externalProviderId) {
|
|
228
|
+
return `${this.lessonsUrl}/embed/external/${externalProviderId}/section/${sectionId}`;
|
|
229
|
+
}
|
|
230
|
+
return `${this.lessonsUrl}/embed/section/${sectionId}`;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get the external provider ID from a plan (if external)
|
|
234
|
+
*/
|
|
235
|
+
getExternalProviderId(plan) {
|
|
236
|
+
const externalRef = this.getExternalRef(plan);
|
|
237
|
+
return externalRef?.externalProviderId || null;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.LessonsContentProvider = LessonsContentProvider;
|
|
241
|
+
//# sourceMappingURL=LessonsContentProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LessonsContentProvider.js","sourceRoot":"","sources":["../../../src/contentProviders/LessonsContentProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contentProviders/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LessonsContentProvider = void 0;
|
|
4
|
+
var LessonsContentProvider_js_1 = require("./LessonsContentProvider.js");
|
|
5
|
+
Object.defineProperty(exports, "LessonsContentProvider", { enumerable: true, get: function () { return LessonsContentProvider_js_1.LessonsContentProvider; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contentProviders/index.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA"}
|