@churchapps/apphelper 0.17.4 → 0.18.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/dist/components/ImageEditor.d.ts.map +1 -1
- package/dist/components/ImageEditor.js +4 -1
- package/dist/components/ImageEditor.js.map +1 -1
- package/dist/donations/components/MultiGatewayDonationForm.d.ts.map +1 -1
- package/dist/donations/components/MultiGatewayDonationForm.js +3 -1
- package/dist/donations/components/MultiGatewayDonationForm.js.map +1 -1
- package/dist/donations/components/RecurringDonations.d.ts.map +1 -1
- package/dist/donations/components/RecurringDonations.js +33 -3
- package/dist/donations/components/RecurringDonations.js.map +1 -1
- package/dist/donations/helpers/Locale.d.ts.map +1 -1
- package/dist/donations/helpers/Locale.js +8 -0
- package/dist/donations/helpers/Locale.js.map +1 -1
- package/dist/donations/providers/KingdomFundingProvider.js +1 -1
- package/dist/donations/providers/KingdomFundingProvider.js.map +1 -1
- package/dist/donations/providers/PayPalProvider.js +1 -1
- package/dist/donations/providers/PayPalProvider.js.map +1 -1
- package/dist/donations/providers/StripeProvider.js +1 -1
- package/dist/donations/providers/StripeProvider.js.map +1 -1
- package/dist/donations/providers/types.d.ts +1 -0
- package/dist/donations/providers/types.d.ts.map +1 -1
- package/dist/forms/components/ConversationalForm.d.ts +14 -0
- package/dist/forms/components/ConversationalForm.d.ts.map +1 -0
- package/dist/forms/components/ConversationalForm.js +60 -0
- package/dist/forms/components/ConversationalForm.js.map +1 -0
- package/dist/forms/components/FormSubmissionEdit.d.ts +3 -1
- package/dist/forms/components/FormSubmissionEdit.d.ts.map +1 -1
- package/dist/forms/components/FormSubmissionEdit.js +17 -8
- package/dist/forms/components/FormSubmissionEdit.js.map +1 -1
- package/dist/forms/components/index.d.ts +1 -0
- package/dist/forms/components/index.d.ts.map +1 -1
- package/dist/forms/components/index.js +1 -0
- package/dist/forms/components/index.js.map +1 -1
- package/dist/forms/helpers/Locale.d.ts.map +1 -1
- package/dist/forms/helpers/Locale.js +3 -0
- package/dist/forms/helpers/Locale.js.map +1 -1
- package/dist/helpers/Locale.d.ts.map +1 -1
- package/dist/helpers/Locale.js +52 -0
- package/dist/helpers/Locale.js.map +1 -1
- package/dist/public/locales/ar.json +337 -285
- package/dist/public/locales/cs.json +337 -285
- package/dist/public/locales/da.json +337 -285
- package/dist/public/locales/de.json +52 -0
- package/dist/public/locales/en.json +52 -0
- package/dist/public/locales/es.json +52 -0
- package/dist/public/locales/fi.json +337 -285
- package/dist/public/locales/fr.json +52 -0
- package/dist/public/locales/hi.json +52 -0
- package/dist/public/locales/hu.json +337 -285
- package/dist/public/locales/id.json +337 -285
- package/dist/public/locales/it.json +52 -0
- package/dist/public/locales/ja.json +337 -285
- package/dist/public/locales/ko.json +52 -0
- package/dist/public/locales/lt.json +331 -24
- package/dist/public/locales/nl.json +337 -285
- package/dist/public/locales/no.json +52 -0
- package/dist/public/locales/pl.json +337 -285
- package/dist/public/locales/pt.json +52 -0
- package/dist/public/locales/ro.json +337 -285
- package/dist/public/locales/ru.json +52 -0
- package/dist/public/locales/sk.json +337 -285
- package/dist/public/locales/sl.json +337 -285
- package/dist/public/locales/sr.json +337 -285
- package/dist/public/locales/sv.json +337 -285
- package/dist/public/locales/tl.json +52 -0
- package/dist/public/locales/tr.json +337 -285
- package/dist/public/locales/uk.json +337 -285
- package/dist/public/locales/vi.json +337 -285
- package/dist/public/locales/zh.json +52 -0
- package/dist/website/components/AnnouncementBanner.d.ts +17 -0
- package/dist/website/components/AnnouncementBanner.d.ts.map +1 -0
- package/dist/website/components/AnnouncementBanner.js +68 -0
- package/dist/website/components/AnnouncementBanner.js.map +1 -0
- package/dist/website/components/Element.d.ts.map +1 -1
- package/dist/website/components/Element.js +19 -1
- package/dist/website/components/Element.js.map +1 -1
- package/dist/website/components/Launcher.d.ts +17 -0
- package/dist/website/components/Launcher.d.ts.map +1 -0
- package/dist/website/components/Launcher.js +47 -0
- package/dist/website/components/Launcher.js.map +1 -0
- package/dist/website/components/SectionDivider.d.ts +13 -0
- package/dist/website/components/SectionDivider.d.ts.map +1 -0
- package/dist/website/components/SectionDivider.js +31 -0
- package/dist/website/components/SectionDivider.js.map +1 -0
- package/dist/website/components/elementTypes/CampaignProgressElement.d.ts +9 -0
- package/dist/website/components/elementTypes/CampaignProgressElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/CampaignProgressElement.js +42 -0
- package/dist/website/components/elementTypes/CampaignProgressElement.js.map +1 -0
- package/dist/website/components/elementTypes/CountdownElement.d.ts +8 -0
- package/dist/website/components/elementTypes/CountdownElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/CountdownElement.js +50 -0
- package/dist/website/components/elementTypes/CountdownElement.js.map +1 -0
- package/dist/website/components/elementTypes/FormElement.d.ts +1 -0
- package/dist/website/components/elementTypes/FormElement.d.ts.map +1 -1
- package/dist/website/components/elementTypes/FormElement.js +1 -1
- package/dist/website/components/elementTypes/FormElement.js.map +1 -1
- package/dist/website/components/elementTypes/GalleryElement.d.ts +9 -0
- package/dist/website/components/elementTypes/GalleryElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/GalleryElement.js +44 -0
- package/dist/website/components/elementTypes/GalleryElement.js.map +1 -0
- package/dist/website/components/elementTypes/IconFeatureElement.d.ts +8 -0
- package/dist/website/components/elementTypes/IconFeatureElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/IconFeatureElement.js +12 -0
- package/dist/website/components/elementTypes/IconFeatureElement.js.map +1 -0
- package/dist/website/components/elementTypes/SermonElement.d.ts +3 -1
- package/dist/website/components/elementTypes/SermonElement.d.ts.map +1 -1
- package/dist/website/components/elementTypes/SermonElement.js +43 -1
- package/dist/website/components/elementTypes/SermonElement.js.map +1 -1
- package/dist/website/components/elementTypes/ServiceTimesElement.d.ts +10 -0
- package/dist/website/components/elementTypes/ServiceTimesElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/ServiceTimesElement.js +69 -0
- package/dist/website/components/elementTypes/ServiceTimesElement.js.map +1 -0
- package/dist/website/components/elementTypes/SocialIconsElement.d.ts +9 -0
- package/dist/website/components/elementTypes/SocialIconsElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/SocialIconsElement.js +47 -0
- package/dist/website/components/elementTypes/SocialIconsElement.js.map +1 -0
- package/dist/website/components/elementTypes/StaffGridElement.d.ts +9 -0
- package/dist/website/components/elementTypes/StaffGridElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/StaffGridElement.js +27 -0
- package/dist/website/components/elementTypes/StaffGridElement.js.map +1 -0
- package/dist/website/components/elementTypes/StatsElement.d.ts +9 -0
- package/dist/website/components/elementTypes/StatsElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/StatsElement.js +62 -0
- package/dist/website/components/elementTypes/StatsElement.js.map +1 -0
- package/dist/website/components/elementTypes/TestimonialElement.d.ts +9 -0
- package/dist/website/components/elementTypes/TestimonialElement.d.ts.map +1 -0
- package/dist/website/components/elementTypes/TestimonialElement.js +36 -0
- package/dist/website/components/elementTypes/TestimonialElement.js.map +1 -0
- package/dist/website/components/elementTypes/index.d.ts +9 -0
- package/dist/website/components/elementTypes/index.d.ts.map +1 -1
- package/dist/website/components/elementTypes/index.js +9 -0
- package/dist/website/components/elementTypes/index.js.map +1 -1
- package/dist/website/components/eventCalendar/RRuleEditor.d.ts.map +1 -1
- package/dist/website/components/eventCalendar/RRuleEditor.js +32 -17
- package/dist/website/components/eventCalendar/RRuleEditor.js.map +1 -1
- package/dist/website/components/index.d.ts +3 -0
- package/dist/website/components/index.d.ts.map +1 -1
- package/dist/website/components/index.js +3 -0
- package/dist/website/components/index.js.map +1 -1
- package/dist/website/styles/pages.css +121 -0
- package/package.json +2 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ElementInterface, SectionInterface } from "../../helpers";
|
|
3
|
+
interface Props {
|
|
4
|
+
element: ElementInterface;
|
|
5
|
+
onEdit?: (section: SectionInterface | null, element: ElementInterface) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const GalleryElement: ({ element, onEdit }: Props) => React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=GalleryElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GalleryElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/GalleryElement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAKhE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAInE,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChF;AAID,eAAO,MAAM,cAAc,GAAI,qBAAqB,KAAK,sBAqExD,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback, useEffect } from "react";
|
|
4
|
+
import { Dialog, IconButton } from "@mui/material";
|
|
5
|
+
import CloseIcon from "@mui/icons-material/Close";
|
|
6
|
+
import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
|
|
7
|
+
import ChevronRightIcon from "@mui/icons-material/ChevronRight";
|
|
8
|
+
const SPACING = { small: 4, medium: 8, large: 16 };
|
|
9
|
+
export const GalleryElement = ({ element, onEdit }) => {
|
|
10
|
+
const photos = Array.isArray(element.answers?.photos) ? element.answers.photos : [];
|
|
11
|
+
const layout = element.answers?.layout || "grid";
|
|
12
|
+
const columns = Math.min(4, Math.max(2, parseInt(element.answers?.columns, 10) || 3));
|
|
13
|
+
const gap = SPACING[element.answers?.spacing] ?? SPACING.medium;
|
|
14
|
+
const [openIndex, setOpenIndex] = useState(null);
|
|
15
|
+
const close = useCallback(() => setOpenIndex(null), []);
|
|
16
|
+
const move = useCallback((dir) => {
|
|
17
|
+
setOpenIndex((i) => (i === null ? null : (i + dir + photos.length) % photos.length));
|
|
18
|
+
}, [photos.length]);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (openIndex === null)
|
|
21
|
+
return;
|
|
22
|
+
const handleKey = (e) => {
|
|
23
|
+
if (e.key === "ArrowLeft")
|
|
24
|
+
move(-1);
|
|
25
|
+
else if (e.key === "ArrowRight")
|
|
26
|
+
move(1);
|
|
27
|
+
};
|
|
28
|
+
document.addEventListener("keydown", handleKey);
|
|
29
|
+
return () => document.removeEventListener("keydown", handleKey);
|
|
30
|
+
}, [openIndex, move]);
|
|
31
|
+
if (photos.length === 0) {
|
|
32
|
+
if (onEdit)
|
|
33
|
+
return _jsx("div", { className: "gallery-empty", children: "Gallery: add photos to get started" });
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const isMasonry = layout === "masonry";
|
|
37
|
+
const gridStyle = isMasonry
|
|
38
|
+
? { columnCount: columns, columnGap: gap }
|
|
39
|
+
: { display: "grid", gridTemplateColumns: `repeat(${columns}, 1fr)`, gap };
|
|
40
|
+
const aspect = layout === "square" ? "1 / 1" : layout === "wide" ? "16 / 9" : undefined;
|
|
41
|
+
const current = openIndex === null ? null : photos[openIndex];
|
|
42
|
+
return (_jsxs("div", { id: "el-" + element.id, className: "gallery", children: [_jsx("div", { style: gridStyle, children: photos.map((photo, i) => (_jsxs("figure", { className: "gallery-item", style: { margin: 0, marginBottom: isMasonry ? gap : undefined, breakInside: isMasonry ? "avoid" : undefined, cursor: "pointer" }, onClick: () => setOpenIndex(i), children: [_jsx("img", { src: photo.url, alt: photo.alt || "", loading: "lazy", decoding: "async", style: { width: "100%", display: "block", borderRadius: 4, aspectRatio: aspect, objectFit: aspect ? "cover" : undefined } }), photo.caption && _jsx("figcaption", { className: "gallery-caption", children: photo.caption })] }, i))) }), _jsx(Dialog, { open: openIndex !== null, onClose: close, maxWidth: "lg", PaperProps: { sx: { background: "transparent", boxShadow: "none", overflow: "visible" } }, children: current && (_jsxs("div", { className: "gallery-lightbox", children: [_jsx(IconButton, { className: "gallery-lightbox__close", onClick: close, "aria-label": "Close", sx: { color: "#fff" }, children: _jsx(CloseIcon, {}) }), photos.length > 1 && _jsx(IconButton, { className: "gallery-lightbox__prev", onClick: () => move(-1), "aria-label": "Previous", sx: { color: "#fff" }, children: _jsx(ChevronLeftIcon, { fontSize: "large" }) }), photos.length > 1 && _jsx(IconButton, { className: "gallery-lightbox__next", onClick: () => move(1), "aria-label": "Next", sx: { color: "#fff" }, children: _jsx(ChevronRightIcon, { fontSize: "large" }) }), _jsx("img", { src: current.url, alt: current.alt || "", className: "gallery-lightbox__img" }), current.caption && _jsx("div", { className: "gallery-lightbox__caption", children: current.caption })] })) })] }));
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=GalleryElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GalleryElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/GalleryElement.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ElementInterface } from "../../helpers";
|
|
3
|
+
interface Props {
|
|
4
|
+
element: ElementInterface;
|
|
5
|
+
}
|
|
6
|
+
export declare const IconFeatureElement: ({ element }: Props) => React.JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=IconFeatureElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconFeatureElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/IconFeatureElement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAID,eAAO,MAAM,kBAAkB,GAAI,aAAa,KAAK,sBAYpD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Icon } from "@mui/material";
|
|
4
|
+
const SIZES = { small: 32, medium: 48, large: 72 };
|
|
5
|
+
export const IconFeatureElement = ({ element }) => {
|
|
6
|
+
const align = element.answers?.textAlignment || "center";
|
|
7
|
+
const iconSize = SIZES[element.answers?.iconSize] || SIZES.medium;
|
|
8
|
+
const iconColor = element.answers?.iconColor || "#03a9f4";
|
|
9
|
+
const icon = element.answers?.icon || "star";
|
|
10
|
+
return (_jsxs("div", { id: "el-" + element.id, className: "iconFeature", style: { textAlign: align }, children: [_jsx(Icon, { sx: { fontSize: iconSize, color: iconColor, width: "auto", height: "auto" }, children: icon }), element.answers?.title && _jsx("h3", { style: { marginBottom: 8 }, children: element.answers.title }), _jsx("div", { dangerouslySetInnerHTML: { __html: element.answers?.description || "" } })] }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=IconFeatureElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconFeatureElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/IconFeatureElement.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOrC,MAAM,KAAK,GAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAE3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,OAAO,EAAS,EAAE,EAAE;IACvD,MAAM,KAAK,GAAI,OAAO,CAAC,OAAO,EAAE,aAA6C,IAAI,QAAQ,CAAC;IAC1F,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAkB,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;IAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,SAAS,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC;IAC7C,OAAO,CACL,eAAK,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAC9E,KAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAG,IAAI,GAAQ,EAC/F,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,aAAI,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,YAAG,OAAO,CAAC,OAAO,CAAC,KAAK,GAAM,EACvF,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,EAAE,GAAI,IAC5E,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { ElementInterface } from "../../helpers";
|
|
1
2
|
interface Props {
|
|
2
3
|
churchId: string;
|
|
3
4
|
appearance: any;
|
|
5
|
+
element?: ElementInterface;
|
|
4
6
|
}
|
|
5
|
-
export declare const SermonElement: ({ churchId, appearance }: Props) => import("react").JSX.Element;
|
|
7
|
+
export declare const SermonElement: ({ churchId, appearance, element }: Props) => import("react").JSX.Element;
|
|
6
8
|
export {};
|
|
7
9
|
//# sourceMappingURL=SermonElement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SermonElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/SermonElement.tsx"],"names":[],"mappings":"AAYA,UAAU,KAAK;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"SermonElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/SermonElement.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,UAAU,KAAK;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,GAAI,mCAAmC,KAAK,gCAyPrE,CAAC"}
|
|
@@ -5,11 +5,13 @@ import { Typography, Breadcrumbs, Button, Grid, Card, CardContent, Box } from "@
|
|
|
5
5
|
import FolderCopyIcon from "@mui/icons-material/FolderCopy";
|
|
6
6
|
import TopicIcon from "@mui/icons-material/Topic";
|
|
7
7
|
import LiveTvIcon from "@mui/icons-material/LiveTv";
|
|
8
|
+
import PlayCircleOutlineIcon from "@mui/icons-material/PlayCircleOutline";
|
|
9
|
+
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
|
8
10
|
import { ApiHelper } from "../../..";
|
|
9
11
|
import { AppearanceHelper } from "../../..";
|
|
10
12
|
import { Loading } from "../../..";
|
|
11
13
|
import { EnvironmentHelper } from "../../helpers/EnvironmentHelper";
|
|
12
|
-
export const SermonElement = ({ churchId, appearance }) => {
|
|
14
|
+
export const SermonElement = ({ churchId, appearance, element }) => {
|
|
13
15
|
const [isLoading, setIsLoading] = useState(true);
|
|
14
16
|
const [isActive, setIsActive] = useState("playlists");
|
|
15
17
|
const [playlists, setPlaylists] = useState([]);
|
|
@@ -17,6 +19,12 @@ export const SermonElement = ({ churchId, appearance }) => {
|
|
|
17
19
|
const [sermons, setSermons] = useState([]);
|
|
18
20
|
const [activeSermons, setActiveSermons] = useState([]);
|
|
19
21
|
const [activeVideo, setActiveVideo] = useState();
|
|
22
|
+
const answers = element?.answers || {};
|
|
23
|
+
const layout = answers.layout || "browse";
|
|
24
|
+
const filterPlaylistId = answers.playlistId || "";
|
|
25
|
+
const itemCount = Math.max(1, parseInt(answers.itemCount, 10) || 6);
|
|
26
|
+
const showTitles = answers.showTitles !== false && answers.showTitles !== "false";
|
|
27
|
+
const showDates = answers.showDates !== false && answers.showDates !== "false";
|
|
20
28
|
useEffect(() => {
|
|
21
29
|
EnvironmentHelper.init();
|
|
22
30
|
ApiHelper.getAnonymous("/playlists/public/" + churchId, "ContentApi").then((data) => {
|
|
@@ -33,8 +41,42 @@ export const SermonElement = ({ churchId, appearance }) => {
|
|
|
33
41
|
const filteredData = sermons.filter((item) => item.playlistId === id);
|
|
34
42
|
setActiveSermons(filteredData);
|
|
35
43
|
};
|
|
44
|
+
const formatDate = (date) => {
|
|
45
|
+
if (!date)
|
|
46
|
+
return "";
|
|
47
|
+
const d = new Date(date);
|
|
48
|
+
if (isNaN(d.getTime()))
|
|
49
|
+
return "";
|
|
50
|
+
return d.toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric" });
|
|
51
|
+
};
|
|
52
|
+
const thumbFor = (item) => item.thumbnail || AppearanceHelper.getLogo(appearance, "/images/logo.png", "/images/logo.png", "#FFF");
|
|
53
|
+
const playVideo = (item) => {
|
|
54
|
+
setActiveVideo(item);
|
|
55
|
+
setIsActive("video");
|
|
56
|
+
};
|
|
36
57
|
if (isLoading)
|
|
37
58
|
return _jsx(Loading, {});
|
|
59
|
+
if (layout !== "browse") {
|
|
60
|
+
if (isActive === "video" && activeVideo?.videoUrl) {
|
|
61
|
+
return (_jsxs("div", { children: [_jsx(Button, { size: "small", startIcon: _jsx(ArrowBackIcon, {}), sx: { borderRadius: 3, marginBottom: 1 }, onClick: () => { setActiveVideo(undefined); setIsActive("playlists"); }, children: "Back" }), _jsx("div", { className: "videoWrapper", children: _jsx("iframe", { src: activeVideo.videoUrl.replace("controls=0", "controls=1"), allowFullScreen: true, style: { border: 0 } }) })] }));
|
|
62
|
+
}
|
|
63
|
+
const items = (Array.isArray(sermons) ? sermons : [])
|
|
64
|
+
.filter((item) => !filterPlaylistId || item.playlistId === filterPlaylistId)
|
|
65
|
+
.sort((a, b) => new Date(b.publishDate || 0).getTime() - new Date(a.publishDate || 0).getTime());
|
|
66
|
+
if (layout === "featuredLatest") {
|
|
67
|
+
const featured = items[0];
|
|
68
|
+
if (!featured)
|
|
69
|
+
return null;
|
|
70
|
+
return (_jsxs("div", { className: "sermonFeatured", onClick: () => playVideo(featured), "data-testid": "sermon-featured", children: [_jsxs("div", { className: "sermonThumb sermonThumbFeatured", children: [_jsx("img", { src: thumbFor(featured), alt: featured.title, loading: "lazy" }), _jsx(PlayCircleOutlineIcon, { className: "sermonPlayIcon", sx: { fontSize: 96 } })] }), showTitles && _jsx("h2", { className: "sermonFeaturedTitle", children: featured.title }), showDates && featured.publishDate && _jsx("div", { className: "sermonCardDate", children: formatDate(featured.publishDate) })] }));
|
|
71
|
+
}
|
|
72
|
+
const shown = items.slice(0, itemCount);
|
|
73
|
+
if (shown.length === 0)
|
|
74
|
+
return null;
|
|
75
|
+
if (layout === "list") {
|
|
76
|
+
return (_jsx("div", { className: "sermonList", "data-testid": "sermon-list", children: shown.map((item) => (_jsxs("div", { className: "sermonListItem", onClick: () => playVideo(item), children: [_jsxs("div", { className: "sermonThumb sermonThumbList", children: [_jsx("img", { src: thumbFor(item), alt: item.title, loading: "lazy" }), _jsx(PlayCircleOutlineIcon, { className: "sermonPlayIcon", sx: { fontSize: 48 } })] }), _jsxs("div", { className: "sermonListBody", children: [showTitles && _jsx("h3", { className: "sermonCardTitle", children: item.title }), showDates && item.publishDate && _jsx("div", { className: "sermonCardDate", children: formatDate(item.publishDate) }), item.description && _jsx("p", { className: "sermonListDesc", children: item.description })] })] }, item.id))) }));
|
|
77
|
+
}
|
|
78
|
+
return (_jsx("div", { className: "sermonGrid", "data-testid": "sermon-grid", children: shown.map((item) => (_jsxs("div", { className: "sermonCard", onClick: () => playVideo(item), children: [_jsxs("div", { className: "sermonThumb", children: [_jsx("img", { src: thumbFor(item), alt: item.title, loading: "lazy" }), _jsx(PlayCircleOutlineIcon, { className: "sermonPlayIcon", sx: { fontSize: 56 } })] }), showTitles && _jsx("h3", { className: "sermonCardTitle", children: item.title }), showDates && item.publishDate && _jsx("div", { className: "sermonCardDate", children: formatDate(item.publishDate) })] }, item.id))) }));
|
|
79
|
+
}
|
|
38
80
|
return (_jsxs(_Fragment, { children: [_jsxs(Breadcrumbs, { children: [_jsx(Button, { size: "small", startIcon: _jsx(FolderCopyIcon, {}), variant: isActive === "playlists" ? "contained" : "text", color: isActive === "playlists" ? "primary" : "secondary", sx: { borderRadius: 3 }, onClick: () => {
|
|
39
81
|
setIsActive("playlists");
|
|
40
82
|
}, "data-testid": "sermon-playlists-button", children: "Playlists" }), activePlaylist?.title && (_jsx(Button, { size: "small", startIcon: _jsx(TopicIcon, {}), variant: isActive === "sermons" ? "contained" : "text", color: isActive === "sermons" ? "primary" : "secondary", sx: { borderRadius: 3 }, onClick: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SermonElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/SermonElement.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAC5D,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAClD,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"SermonElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/SermonElement.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ElementInterface, SectionInterface } from "../../helpers";
|
|
2
|
+
interface Props {
|
|
3
|
+
element: ElementInterface;
|
|
4
|
+
churchId: string;
|
|
5
|
+
churchName?: string;
|
|
6
|
+
onEdit?: (section: SectionInterface | null, element: ElementInterface) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const ServiceTimesElement: ({ element, churchId, churchName, onEdit }: Props) => import("react").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ServiceTimesElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceTimesElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/ServiceTimesElement.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKnE,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChF;AA8CD,eAAO,MAAM,mBAAmB,GAAI,2CAA2C,KAAK,gCAoCnF,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { ApiHelper } from "../../..";
|
|
5
|
+
const DAY_URLS = {
|
|
6
|
+
sunday: "https://schema.org/Sunday",
|
|
7
|
+
monday: "https://schema.org/Monday",
|
|
8
|
+
tuesday: "https://schema.org/Tuesday",
|
|
9
|
+
wednesday: "https://schema.org/Wednesday",
|
|
10
|
+
thursday: "https://schema.org/Thursday",
|
|
11
|
+
friday: "https://schema.org/Friday",
|
|
12
|
+
saturday: "https://schema.org/Saturday"
|
|
13
|
+
};
|
|
14
|
+
const DAY_RE = /\b(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\b/i;
|
|
15
|
+
const TIME_RE = /\b(1[0-2]|[1-9]):([0-5][0-9])\s*(AM|PM)\b/i;
|
|
16
|
+
const to24h = (h, m, ap) => {
|
|
17
|
+
let hour = h;
|
|
18
|
+
const isPM = ap.toUpperCase() === "PM";
|
|
19
|
+
if (isPM && hour !== 12)
|
|
20
|
+
hour += 12;
|
|
21
|
+
if (!isPM && hour === 12)
|
|
22
|
+
hour = 0;
|
|
23
|
+
return String(hour).padStart(2, "0") + ":" + m;
|
|
24
|
+
};
|
|
25
|
+
const buildJsonLd = (services, churchName) => {
|
|
26
|
+
const events = [];
|
|
27
|
+
services.forEach((s) => {
|
|
28
|
+
(s.times || []).forEach((t) => {
|
|
29
|
+
const text = ((s.serviceName || "") + " " + (t.name || "")).trim();
|
|
30
|
+
const day = DAY_RE.exec(text);
|
|
31
|
+
const time = TIME_RE.exec(text);
|
|
32
|
+
if (!day || !time)
|
|
33
|
+
return;
|
|
34
|
+
events.push({
|
|
35
|
+
"@type": "Event",
|
|
36
|
+
name: s.serviceName || t.name || "Service",
|
|
37
|
+
eventSchedule: {
|
|
38
|
+
"@type": "Schedule",
|
|
39
|
+
byDay: DAY_URLS[day[1].toLowerCase()],
|
|
40
|
+
startTime: to24h(parseInt(time[1], 10), time[2], time[3]),
|
|
41
|
+
repeatFrequency: "P1W"
|
|
42
|
+
},
|
|
43
|
+
...(churchName ? { location: { "@type": "Place", name: churchName } } : {})
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
return events.length ? { "@context": "https://schema.org", "@graph": events } : null;
|
|
48
|
+
};
|
|
49
|
+
export const ServiceTimesElement = ({ element, churchId, churchName, onEdit }) => {
|
|
50
|
+
const answers = element.answers || {};
|
|
51
|
+
const title = answers.title || "Service Times";
|
|
52
|
+
const showCampus = answers.showCampus !== false && answers.showCampus !== "false";
|
|
53
|
+
const [services, setServices] = useState([]);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (!churchId)
|
|
56
|
+
return;
|
|
57
|
+
ApiHelper.getAnonymous("/servicetimes/public/" + churchId, "AttendanceApi")
|
|
58
|
+
.then((d) => setServices(Array.isArray(d) ? d : []))
|
|
59
|
+
.catch(() => setServices([]));
|
|
60
|
+
}, [churchId]);
|
|
61
|
+
if (services.length === 0) {
|
|
62
|
+
if (onEdit)
|
|
63
|
+
return _jsx("div", { className: "service-times-empty", children: "Service Times: no published services found" });
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const jsonLd = buildJsonLd(services, churchName);
|
|
67
|
+
return (_jsxs("div", { id: "el-" + element.id, className: "serviceTimes", children: [title && _jsx("h3", { className: "service-times-title", children: title }), services.map((s) => (_jsxs("div", { className: "service-group", children: [_jsx("div", { className: "service-name", children: s.serviceName }), showCampus && s.campusName && _jsx("div", { className: "service-campus", children: s.campusName }), _jsx("ul", { className: "service-time-list", children: (s.times || []).map((t) => _jsx("li", { className: "service-time", children: t.name }, t.id)) })] }, s.serviceId))), jsonLd && _jsx("script", { type: "application/ld+json", dangerouslySetInnerHTML: { __html: JSON.stringify(jsonLd) } })] }));
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=ServiceTimesElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceTimesElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/ServiceTimesElement.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ElementInterface, SectionInterface } from "../../helpers";
|
|
3
|
+
interface Props {
|
|
4
|
+
element: ElementInterface;
|
|
5
|
+
onEdit?: (section: SectionInterface | null, element: ElementInterface) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const SocialIconsElement: ({ element, onEdit }: Props) => React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=SocialIconsElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocialIconsElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/SocialIconsElement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChF;AAaD,eAAO,MAAM,kBAAkB,GAAI,qBAAqB,KAAK,sBA8C5D,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { SvgIcon } from "@mui/material";
|
|
5
|
+
import FacebookIcon from "@mui/icons-material/Facebook";
|
|
6
|
+
import InstagramIcon from "@mui/icons-material/Instagram";
|
|
7
|
+
import YouTubeIcon from "@mui/icons-material/YouTube";
|
|
8
|
+
import XIcon from "@mui/icons-material/X";
|
|
9
|
+
const TikTokIcon = () => (_jsx(SvgIcon, { viewBox: "0 0 24 24", children: _jsx("path", { d: "M16.6 5.82s.51.5 0 0A4.28 4.28 0 0 1 15.54 3h-3.09v12.4a2.59 2.59 0 0 1-2.59 2.5c-1.42 0-2.6-1.16-2.6-2.6c0-1.72 1.66-3.01 3.37-2.48V9.66c-3.45-.46-6.47 2.22-6.47 5.64c0 3.33 2.76 5.7 5.69 5.7c3.14 0 5.69-2.55 5.69-5.7V9.01a7.35 7.35 0 0 0 4.3 1.38V7.3s-1.88.09-3.24-1.48" }) }));
|
|
10
|
+
const VimeoIcon = () => (_jsx(SvgIcon, { viewBox: "0 0 24 24", children: _jsx("path", { d: "M22 7.42c-.1 2.14-1.59 5.06-4.48 8.78C14.54 20.08 12 22 9.89 22c-1.31 0-2.42-1.21-3.32-3.63c-.6-2.21-1.2-4.42-1.8-6.63c-.67-2.42-1.38-3.63-2.15-3.63c-.17 0-.75.35-1.74 1.04L0 7.83c1.05-.92 2.08-1.85 3.1-2.77C4.5 3.85 5.55 3.22 6.26 3.15c1.67-.16 2.7.98 3.08 3.42c.42 2.63.71 4.27.87 4.91c.49 2.22 1.03 3.33 1.62 3.33c.46 0 1.15-.72 2.07-2.17c.92-1.45 1.41-2.55 1.48-3.31c.13-1.24-.36-1.86-1.48-1.86c-.53 0-1.07.12-1.63.36c1.08-3.54 3.15-5.26 6.2-5.16c2.26.06 3.32 1.53 3.19 4.4" }) }));
|
|
11
|
+
const SIZES = { small: 32, medium: 44, large: 56 };
|
|
12
|
+
const ICON_SCALE = 0.55;
|
|
13
|
+
export const SocialIconsElement = ({ element, onEdit }) => {
|
|
14
|
+
const answers = element.answers || {};
|
|
15
|
+
const networks = [
|
|
16
|
+
{ key: "facebook", url: answers.facebook, label: "Facebook", icon: _jsx(FacebookIcon, {}) },
|
|
17
|
+
{ key: "instagram", url: answers.instagram, label: "Instagram", icon: _jsx(InstagramIcon, {}) },
|
|
18
|
+
{ key: "youtube", url: answers.youtube, label: "YouTube", icon: _jsx(YouTubeIcon, {}) },
|
|
19
|
+
{ key: "x", url: answers.x, label: "X", icon: _jsx(XIcon, {}) },
|
|
20
|
+
{ key: "tiktok", url: answers.tiktok, label: "TikTok", icon: _jsx(TikTokIcon, {}) },
|
|
21
|
+
{ key: "vimeo", url: answers.vimeo, label: "Vimeo", icon: _jsx(VimeoIcon, {}) }
|
|
22
|
+
].filter((n) => n.url);
|
|
23
|
+
if (networks.length === 0) {
|
|
24
|
+
if (onEdit)
|
|
25
|
+
return _jsx("div", { className: "social-icons-empty", children: "Social Icons: add at least one profile URL" });
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const outlined = answers.iconStyle === "outlined";
|
|
29
|
+
const color = answers.color || "#444444";
|
|
30
|
+
const size = SIZES[answers.size] || SIZES.medium;
|
|
31
|
+
const align = answers.alignment || "center";
|
|
32
|
+
const justify = align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center";
|
|
33
|
+
const circleStyle = {
|
|
34
|
+
width: size,
|
|
35
|
+
height: size,
|
|
36
|
+
borderRadius: "50%",
|
|
37
|
+
display: "inline-flex",
|
|
38
|
+
alignItems: "center",
|
|
39
|
+
justifyContent: "center",
|
|
40
|
+
color: outlined ? color : "#fff",
|
|
41
|
+
background: outlined ? "transparent" : color,
|
|
42
|
+
border: outlined ? `2px solid ${color}` : "none",
|
|
43
|
+
textDecoration: "none"
|
|
44
|
+
};
|
|
45
|
+
return (_jsx("div", { id: "el-" + element.id, className: "social-icons", style: { display: "flex", gap: 12, justifyContent: justify, flexWrap: "wrap" }, children: networks.map((n) => (_jsx("a", { href: n.url, target: "_blank", rel: "noopener noreferrer", "aria-label": n.label, style: circleStyle, children: _jsx("span", { style: { display: "inline-flex", fontSize: size * ICON_SCALE, lineHeight: 0 }, children: React.isValidElement(n.icon) ? React.cloneElement(n.icon, { style: { fontSize: size * ICON_SCALE } }) : n.icon }) }, n.key))) }));
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=SocialIconsElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocialIconsElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/SocialIconsElement.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ElementInterface, SectionInterface } from "../../helpers";
|
|
2
|
+
interface Props {
|
|
3
|
+
element: ElementInterface;
|
|
4
|
+
churchId: string;
|
|
5
|
+
onEdit?: (section: SectionInterface | null, element: ElementInterface) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const StaffGridElement: ({ element, churchId, onEdit }: Props) => import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=StaffGridElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaffGridElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/StaffGridElement.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAInE,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChF;AAED,eAAO,MAAM,gBAAgB,GAAI,+BAA+B,KAAK,gCAiCpE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { ApiHelper } from "../../..";
|
|
5
|
+
export const StaffGridElement = ({ element, churchId, onEdit }) => {
|
|
6
|
+
const answers = element.answers || {};
|
|
7
|
+
const groupId = answers.groupId || "";
|
|
8
|
+
const columns = Math.min(4, Math.max(2, parseInt(answers.columns, 10) || 3));
|
|
9
|
+
const showRoles = answers.showRoles !== false && answers.showRoles !== "false";
|
|
10
|
+
const [members, setMembers] = useState([]);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (!groupId || !churchId)
|
|
13
|
+
return;
|
|
14
|
+
ApiHelper.getAnonymous("/groupmembers/public/" + churchId + "/" + groupId, "MembershipApi")
|
|
15
|
+
.then((d) => setMembers(Array.isArray(d) ? d : []))
|
|
16
|
+
.catch(() => setMembers([]));
|
|
17
|
+
}, [churchId, groupId]);
|
|
18
|
+
if (members.length === 0) {
|
|
19
|
+
if (onEdit)
|
|
20
|
+
return _jsx("div", { className: "staff-empty", children: "Staff Grid: select a group with a public roster" });
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return (_jsx("div", { id: "el-" + element.id, className: "staffGrid", style: { display: "grid", gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: 24 }, children: members.map((m) => (_jsxs("div", { className: "staff-card", children: [m.photo
|
|
24
|
+
? _jsx("img", { className: "staff-photo", src: m.photo, alt: m.name?.display || "", loading: "lazy" })
|
|
25
|
+
: _jsx("div", { className: "staff-photo staff-photo--placeholder", "aria-hidden": "true" }), _jsx("div", { className: "staff-name", children: m.name?.display || "" }), showRoles && m.role && _jsx("span", { className: "staff-role", children: m.role })] }, m.id))) }));
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=StaffGridElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaffGridElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/StaffGridElement.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAWrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAS,EAAE,EAAE;IACvE,MAAM,OAAO,GAAQ,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAI,OAAO,CAAC,OAAkB,IAAI,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC;IAE/E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IAE1D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAClC,SAAS,CAAC,YAAY,CAAC,uBAAuB,GAAG,QAAQ,GAAG,GAAG,GAAG,OAAO,EAAE,eAAe,CAAC;aACxF,IAAI,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACjE,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,MAAM;YAAE,OAAO,cAAK,SAAS,EAAC,aAAa,gEAAsD,CAAC;QACtG,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,cAAK,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,SAAS,EAAC,WAAW,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,OAAO,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,YACnI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,eAAK,SAAS,EAAC,YAAY,aACxB,CAAC,CAAC,KAAK;oBACN,CAAC,CAAC,cAAK,SAAS,EAAC,aAAa,EAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,EAAC,MAAM,GAAG;oBAC1F,CAAC,CAAC,cAAK,SAAS,EAAC,sCAAsC,iBAAa,MAAM,GAAG,EAC/E,cAAK,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,GAAO,EACxD,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,IAAI,GAAQ,KALrC,CAAC,CAAC,EAAE,CAM/B,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ElementInterface, SectionInterface } from "../../helpers";
|
|
3
|
+
interface Props {
|
|
4
|
+
element: ElementInterface;
|
|
5
|
+
onEdit?: (section: SectionInterface | null, element: ElementInterface) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const StatsElement: ({ element, onEdit }: Props) => React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=StatsElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatsElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/StatsElement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAInE,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChF;AA8BD,eAAO,MAAM,YAAY,GAAI,qBAAqB,KAAK,sBA4BtD,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
const StatBlock = ({ item, animate }) => {
|
|
5
|
+
const target = Number(item.value) || 0;
|
|
6
|
+
const [display, setDisplay] = useState(animate ? 0 : target);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (!animate) {
|
|
9
|
+
setDisplay(target);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const duration = 1500;
|
|
13
|
+
let raf = 0;
|
|
14
|
+
let start = 0;
|
|
15
|
+
const step = (ts) => {
|
|
16
|
+
if (!start)
|
|
17
|
+
start = ts;
|
|
18
|
+
const progress = Math.min(1, (ts - start) / duration);
|
|
19
|
+
const eased = 1 - Math.pow(1 - progress, 3);
|
|
20
|
+
setDisplay(Math.round(target * eased));
|
|
21
|
+
if (progress < 1)
|
|
22
|
+
raf = requestAnimationFrame(step);
|
|
23
|
+
};
|
|
24
|
+
raf = requestAnimationFrame(step);
|
|
25
|
+
return () => cancelAnimationFrame(raf);
|
|
26
|
+
}, [animate, target]);
|
|
27
|
+
return (_jsxs("div", { className: "stat-item", children: [_jsxs("div", { className: "stat-value", children: [item.prefix || "", display.toLocaleString(), item.suffix || ""] }), _jsx("div", { className: "stat-label", children: item.label })] }));
|
|
28
|
+
};
|
|
29
|
+
export const StatsElement = ({ element, onEdit }) => {
|
|
30
|
+
const items = Array.isArray(element.answers?.items) ? element.answers.items : [];
|
|
31
|
+
const columns = Math.min(4, Math.max(2, parseInt(element.answers?.columns, 10) || 3));
|
|
32
|
+
const ref = useRef(null);
|
|
33
|
+
const [animate, setAnimate] = useState(false);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (typeof window === "undefined")
|
|
36
|
+
return;
|
|
37
|
+
if (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) {
|
|
38
|
+
setAnimate(false);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const node = ref.current;
|
|
42
|
+
if (!node || typeof IntersectionObserver === "undefined") {
|
|
43
|
+
setAnimate(true);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const observer = new IntersectionObserver((entries) => {
|
|
47
|
+
if (entries.some((e) => e.isIntersecting)) {
|
|
48
|
+
setAnimate(true);
|
|
49
|
+
observer.disconnect();
|
|
50
|
+
}
|
|
51
|
+
}, { threshold: 0.3 });
|
|
52
|
+
observer.observe(node);
|
|
53
|
+
return () => observer.disconnect();
|
|
54
|
+
}, []);
|
|
55
|
+
if (items.length === 0) {
|
|
56
|
+
if (onEdit)
|
|
57
|
+
return _jsx("div", { className: "stats-empty", children: "Stats: add items to get started" });
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return (_jsx("div", { id: "el-" + element.id, className: "stats", ref: ref, style: { display: "grid", gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: 16 }, children: items.map((item, i) => _jsx(StatBlock, { item: item, animate: animate }, i)) }));
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=StatsElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatsElement.js","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/StatsElement.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ElementInterface, SectionInterface } from "../../helpers";
|
|
3
|
+
interface Props {
|
|
4
|
+
element: ElementInterface;
|
|
5
|
+
onEdit?: (section: SectionInterface | null, element: ElementInterface) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const TestimonialElement: ({ element, onEdit }: Props) => React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=TestimonialElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestimonialElement.d.ts","sourceRoot":"","sources":["../../../../src/website/components/elementTypes/TestimonialElement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAInE,UAAU,KAAK;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChF;AAeD,eAAO,MAAM,kBAAkB,GAAI,qBAAqB,KAAK,sBAuC5D,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
const prefersReducedMotion = () => typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
5
|
+
const QuoteCard = ({ quote }) => (_jsxs("blockquote", { className: "testimonial-quote", style: { margin: 0, textAlign: "center" }, children: [_jsx("p", { className: "testimonial-text", children: quote.text }), _jsxs("footer", { className: "testimonial-author", children: [quote.photoUrl && _jsx("img", { src: quote.photoUrl, alt: quote.author || "", className: "testimonial-photo", loading: "lazy", decoding: "async" }), _jsx("cite", { className: "testimonial-name", children: quote.author }), quote.role && _jsx("span", { className: "testimonial-role", children: quote.role })] })] }));
|
|
6
|
+
export const TestimonialElement = ({ element, onEdit }) => {
|
|
7
|
+
const quotes = Array.isArray(element.answers?.quotes) ? element.answers.quotes : [];
|
|
8
|
+
const rotate = element.answers?.displayMode === "rotate" && quotes.length > 1;
|
|
9
|
+
const [index, setIndex] = useState(0);
|
|
10
|
+
const [fade, setFade] = useState(true);
|
|
11
|
+
const reduce = useRef(false);
|
|
12
|
+
useEffect(() => { reduce.current = prefersReducedMotion(); }, []);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!rotate)
|
|
15
|
+
return;
|
|
16
|
+
const interval = setInterval(() => {
|
|
17
|
+
if (reduce.current) {
|
|
18
|
+
setIndex((i) => (i + 1) % quotes.length);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
setFade(false);
|
|
22
|
+
setTimeout(() => { setIndex((i) => (i + 1) % quotes.length); setFade(true); }, 400);
|
|
23
|
+
}, 7000);
|
|
24
|
+
return () => clearInterval(interval);
|
|
25
|
+
}, [rotate, quotes.length]);
|
|
26
|
+
if (quotes.length === 0) {
|
|
27
|
+
if (onEdit)
|
|
28
|
+
return _jsx("div", { className: "testimonial-empty", children: "Testimonial: add quotes to get started" });
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
if (rotate) {
|
|
32
|
+
return (_jsx("div", { id: "el-" + element.id, className: "testimonial", children: _jsx("div", { style: { opacity: fade ? 1 : 0, transition: "opacity 0.4s ease" }, children: _jsx(QuoteCard, { quote: quotes[index] }) }) }));
|
|
33
|
+
}
|
|
34
|
+
return (_jsx("div", { id: "el-" + element.id, className: "testimonial", children: quotes.map((quote, i) => _jsx(QuoteCard, { quote: quote }, i)) }));
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=TestimonialElement.js.map
|