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 / RevenueChart.tsx
give / src / Campaigns / resources / admin / components / CampaignDetailsPage / Components Last commit date
CampaignDetailsErrorBoundary 1 year ago CampaignStats 7 months ago ColorControl 1 year ago DefaultForm 1 year ago GoalProgressChart 1 year ago Notices 7 months ago TextareaControl 1 year ago ArchiveCampaignDialog.tsx 1 year ago HeaderSubText.tsx 1 year ago HeaderText.tsx 1 year ago RevenueChart.tsx 1 year ago
RevenueChart.tsx
119 lines
1 import React, {useEffect, useState} from 'react';
2 import Chart from 'react-apexcharts';
3 import apiFetch from '@wordpress/api-fetch';
4 import {addQueryArgs} from '@wordpress/url';
5 import {amountFormatter, getCampaignOptionsWindowData} from '@givewp/campaigns/utils';
6 import {__} from '@wordpress/i18n';
7
8 const campaignId = new URLSearchParams(window.location.search).get('id');
9
10 const getDefaultData = (days = 7) => {
11 const data = [];
12
13 for (let i = 0; i < days; i++) {
14 const date = new Date();
15 date.setDate(date.getDate() - i);
16 data.push({x: date.toISOString().split('T')[0], y: 0});
17 }
18
19 return data;
20 };
21
22 const RevenueChart = () => {
23 const {currency} = getCampaignOptionsWindowData();
24 const currencyFormatter = amountFormatter(currency);
25 const [max, setMax] = useState(100);
26 const [series, setSeries] = useState([{name: __('Revenue', 'give'), data: getDefaultData()}]);
27
28 useEffect(() => {
29 apiFetch({path: addQueryArgs('/givewp/v3/campaigns/' + campaignId + '/revenue')}).then(
30 (data: {date: string; amount: number}[]) => {
31 if (data?.length > 0) {
32 // By default we set a max value so the chart does not look empty.
33 // once we have data we can reset the max value for the chart to auto calculate
34 setMax(undefined);
35 setSeries([
36 {
37 name: __('Revenue', 'give'),
38 data: data.map((item) => {
39 return {
40 x: item.date,
41 y: item.amount,
42 };
43 }),
44 },
45 ]);
46 }
47 }
48 );
49 }, []);
50
51 const options = {
52 chart: {
53 id: 'campaign-revenue',
54 zoom: {
55 enabled: false,
56 },
57 toolbar: {
58 show: false,
59 },
60 },
61 xaxis: {
62 type: 'datetime' as 'datetime' | 'category' | 'numeric',
63 },
64 yaxis: {
65 min: 0,
66 max,
67 showForNullSeries: false,
68 labels: {
69 formatter: (value) => {
70 return currencyFormatter.format(Number(value));
71 },
72 },
73 },
74 stroke: {
75 color: ['#60a1e2'],
76 width: 1.5,
77 curve: 'smooth' as
78 | 'straight'
79 | 'smooth'
80 | 'monotoneCubic'
81 | 'stepline'
82 | 'linestep'
83 | ('straight' | 'smooth' | 'monotoneCubic' | 'stepline' | 'linestep')[],
84 lineCap: 'butt' as 'butt' | 'square' | 'round',
85 },
86 dataLabels: {
87 enabled: false,
88 },
89 fill: {
90 type: 'gradient',
91 gradient: {
92 colorStops: [
93 [
94 {
95 offset: 0,
96 color: '#eee',
97 opacity: 1,
98 },
99 {
100 offset: 0.6,
101 color: '#b7d4f2',
102 opacity: 50,
103 },
104 {
105 offset: 100,
106 color: '#f0f7ff',
107 opacity: 1,
108 },
109 ],
110 ],
111 },
112 },
113 };
114
115 return <Chart options={options} series={series} type="area" width="100%" height="100%" />;
116 };
117
118 export default RevenueChart;
119