PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.2
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 / Campaigns / resources / admin / components / CampaignDetailsPage / Components / GoalProgressChart / index.tsx
give / src / Campaigns / resources / admin / components / CampaignDetailsPage / Components / GoalProgressChart Last commit date
index.tsx 1 year ago styles.module.scss 1 year ago
index.tsx
89 lines
1 import {__} from '@wordpress/i18n';
2 import Chart from 'react-apexcharts';
3 import React from 'react';
4
5 import styles from './styles.module.scss';
6 import {amountFormatter, getCampaignOptionsWindowData} from '@givewp/campaigns/utils';
7 import type {Campaign} from '@givewp/campaigns/admin/components/types';
8
9 const {currency} = getCampaignOptionsWindowData();
10 const currencyFormatter = amountFormatter(currency);
11
12 type GoalProgressChartProps = {
13 value: number;
14 goal: number;
15 goalType: Partial<Campaign>['goalType'];
16 };
17
18 const goalTypeLabels = {
19 amount: __('Amount raised', 'give'),
20 donations: __('Number of donations', 'give'),
21 donors: __('Number of donors', 'give'),
22 amountFromSubscriptions: __('Recurring amount raised', 'give'),
23 subscriptions: __('Number of recurring donations', 'give'),
24 donorsFromSubscriptions: __('Number of recurring donors', 'give'),
25 };
26
27 const GoalProgressChart = ({value, goal, goalType}: GoalProgressChartProps) => {
28 const progress = Math.ceil((value / goal) * 100);
29 const percentage = Math.min(progress, 100);
30
31 const isCurrencyGoal = ['amount', 'amountFromSubscriptions'].includes(goalType);
32 const formattedValue = isCurrencyGoal ? currencyFormatter.format(value) : value.toString();
33 const formattedGoal = isCurrencyGoal ? currencyFormatter.format(goal) : goal.toString();
34
35 return (
36 <div className={styles.goalProgressChart}>
37 <div className={styles.chartContainer}>
38 <Chart
39 options={{
40 chart: {
41 height: 1024,
42 type: 'radialBar',
43 },
44 plotOptions: {
45 radialBar: {
46 hollow: {
47 margin: 15,
48 size: '60%',
49 },
50 dataLabels: {
51 /**
52 * The "name" is the top label, here it is the value/amount
53 * The "value" is the percent progress
54 *
55 * Note: These are visually inverted (using offsetY) to match the design
56 */
57 name: {
58 offsetY: 20,
59 show: true,
60 color: '#4B5563',
61 fontSize: '12px',
62 },
63 value: {
64 offsetY: -20,
65 color: '#060C1A',
66 fontSize: '24px',
67 show: true,
68 },
69 },
70 },
71 },
72 colors: ['#459948'],
73 labels: [formattedValue],
74 }}
75 series={[percentage]}
76 type="radialBar"
77 />
78 </div>
79 <div className={styles.goalDetails}>
80 <div className={styles.goal}>{__('Goal', 'give')}</div>
81 <div className={styles.amount}>{formattedGoal}</div>
82 <div className={styles.goalType}>{goalTypeLabels[goalType]}</div>
83 </div>
84 </div>
85 );
86 };
87
88 export default GoalProgressChart;
89