PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / DonationForms / resources / app / form / Header.tsx
give / src / DonationForms / resources / app / form Last commit date
MultiStepForm 1 year ago Form.tsx 2 years ago Header.tsx 5 months ago Section.tsx 2 years ago
Header.tsx
93 lines
1 import DonationFormErrorBoundary from '@givewp/forms/app/errors/boundaries/DonationFormErrorBoundary';
2 import amountFormatter from '@givewp/forms/app/utilities/amountFormatter';
3 import type { GoalType } from '@givewp/forms/propTypes';
4 import type { Form as DonationForm } from '@givewp/forms/types';
5 import { useCallback, useMemo } from 'react';
6 import { withTemplateWrapper } from '../templates';
7
8 const formTemplates = window.givewp.form.templates;
9
10 const HeaderTemplate = withTemplateWrapper(formTemplates.layouts.header);
11 const HeaderTitleTemplate = withTemplateWrapper(formTemplates.layouts.headerTitle);
12 const HeaderDescriptionTemplate = withTemplateWrapper(formTemplates.layouts.headerDescription);
13 const GoalTemplate = withTemplateWrapper(formTemplates.layouts.goal);
14
15 const HeaderImageTemplate = withTemplateWrapper(formTemplates.layouts.headerImage);
16
17 /**
18 * @since 4.14.0.0 Make the goal currency use the base currency always
19 * @since 3.0.0
20 */
21 export default function Header({form}: {form: DonationForm}) {
22
23 // Get the base currency for goal formatting
24 // The goal progress bar should always use the form's base currency, not the selected currency
25 // This matches the behavior of legacy forms where only donation amounts are converted
26 const goalCurrency = useMemo(() => {
27 // If currency switcher is enabled, find the base currency (exchangeRate === 0)
28 if (form.currencySwitcherSettings && form.currencySwitcherSettings.length > 0) {
29 const baseCurrencySetting = form.currencySwitcherSettings.find(
30 (setting) => setting.exchangeRate === 0
31 );
32 if (baseCurrencySetting) {
33 return baseCurrencySetting.id;
34 }
35 }
36 // Fallback to form's default currency
37 return form.currency;
38 }, [form.currencySwitcherSettings, form.currency]);
39
40 const formatGoalAmount = useCallback((amount: number) => {
41 // Use the base currency for goal amounts, not the selected currency
42 return amountFormatter(goalCurrency).format(amount);
43 }, [goalCurrency]);
44
45 return (
46 <DonationFormErrorBoundary>
47 <HeaderTemplate
48 isMultiStep={form.design?.isMultiStep}
49 HeaderImage={() =>
50 form.settings?.designSettingsImageUrl && (
51 <HeaderImageTemplate
52 url={form.settings?.designSettingsImageUrl}
53 alt={form.settings?.designSettingsImageAlt || form.settings?.formTitle}
54 color={form.settings?.designSettingsImageColor}
55 opacity={form.settings?.designSettingsImageOpacity}
56 />
57 )
58 }
59 Title={() => form.settings?.showHeading && <HeaderTitleTemplate text={form.settings.heading} />}
60 Description={() =>
61 form.settings?.showDescription && <HeaderDescriptionTemplate text={form.settings.description} />
62 }
63 Goal={() =>
64 form.goal?.show && (
65 <GoalTemplate
66 currency={goalCurrency}
67 type={form.goal.type as GoalType}
68 goalLabel={form.goal.label}
69 progressPercentage={Math.round((form.goal.currentAmount / form.goal.targetAmount) * 100)}
70 currentAmount={form.goal.currentAmount}
71 currentAmountFormatted={
72 form.goal.typeIsMoney
73 ? formatGoalAmount(form.goal.currentAmount)
74 : form.goal.currentAmount.toString()
75 }
76 targetAmount={form.goal.targetAmount}
77 targetAmountFormatted={
78 form.goal.typeIsMoney
79 ? formatGoalAmount(form.goal.targetAmount)
80 : form.goal.targetAmount.toString()
81 }
82 totalRevenue={form.stats.totalRevenue}
83 totalRevenueFormatted={formatGoalAmount(form.stats.totalRevenue)}
84 totalCountValue={form.stats.totalCountValue}
85 totalCountLabel={form.stats.totalCountLabel}
86 />
87 )
88 }
89 />
90 </DonationFormErrorBoundary>
91 );
92 }
93