PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.12.0
GiveWP – Donation Plugin and Fundraising Platform v4.12.0
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 / constants / goalInputAttributes.ts
give / src / Campaigns / resources / admin / constants Last commit date
goalInputAttributes.ts 1 year ago
goalInputAttributes.ts
172 lines
1 /**
2 * WordPress Dependencies
3 */
4 import {__, sprintf} from '@wordpress/i18n';
5
6 /**
7 * Internal Dependencies
8 */
9 import type {GoalInputAttributes} from '@givewp/campaigns/admin/components/CampaignFormModal/types';
10 import type {GoalType} from '@givewp/campaigns/types';
11 import {amountFormatter} from '@givewp/campaigns/utils';
12
13 /**
14 * Lookup object for all goal input attributes
15 *
16 * @since 4.0.0
17 */
18 const goalInputAttributesLookup = (currencyFormatter: ReturnType<typeof amountFormatter>) => ({
19 amount: {
20 label: __('How much do you want to raise?', 'give'),
21 description: __('Set the target amount for your campaign to raise.', 'give'),
22 help: sprintf(
23 __('Your goal progress is measured by the total amount of funds raised e.g. %s of %s raised.', 'give'),
24 currencyFormatter.format(500),
25 currencyFormatter.format(1000)
26 ),
27 placeholder: sprintf(__('e.g. %s', 'give'), currencyFormatter.format(2000)),
28 },
29 donations: {
30 label: __('How many donations?', 'give'),
31 description: __('Set the target number of donations for your campaign.', 'give'),
32 help: __('Your goal progress is measured by the number of donations. e.g. 1 of 5 donations.', 'give'),
33 placeholder: __('e.g. 100 donations', 'give'),
34 },
35 donors: {
36 label: __('How many donors?', 'give'),
37 description: __('Set the target number of donors for your campaign.', 'give'),
38 help: __('Your goal progress is measured by the number of donors. e.g. 10 of 50 donors have given.', 'give'),
39 placeholder: __('e.g. 100 donors', 'give'),
40 },
41 amountFromSubscriptions: {
42 label: __('How much do you want to raise?', 'give'),
43 description: __(
44 'Set the target recurring amount for your campaign to raise. One-time donations do not count.',
45 'give'
46 ),
47 help: __('Only the first donation amount of a recurring donation is counted toward the goal.', 'give'),
48 placeholder: sprintf(__('e.g. %s', 'give'), currencyFormatter.format(2000)),
49 },
50 subscriptions: {
51 label: __('How many recurring donations?', 'give'),
52 description: __(
53 'Set the target number of recurring donations for your campaign. One-time donations do not count.',
54 'give'
55 ),
56 help: __('Only the first donation of a recurring donation is counted toward the goal.', 'give'),
57 placeholder: __('e.g. 100 subscriptions', 'give'),
58 },
59 donorsFromSubscriptions: {
60 label: __('How many recurring donors?', 'give'),
61 description: __(
62 'Set the target number of recurring donors for your campaign. One-time donations do not count.',
63 'give'
64 ),
65 help: __('Only the donors that subscribed to a recurring donation are counted toward the goal.', 'give'),
66 placeholder: __('e.g. 100 subscribers', 'give'),
67 },
68 });
69
70 /**
71 * Type guard to check if a string is a valid GoalType
72 *
73 * @since 4.0.0
74 */
75 export const isValidGoalType = (goalType: string): goalType is GoalType => {
76 const VALID_GOAL_TYPES = Object.keys(goalInputAttributesLookup(amountFormatter('USD')));
77
78 return VALID_GOAL_TYPES.includes(goalType);
79 };
80
81 /**
82 * Goal type handler class
83 *
84 * @since 4.0.0
85 */
86 export class CampaignGoalInputAttributes {
87 protected goalType: GoalType;
88 protected currencyFormatter: ReturnType<typeof amountFormatter>;
89
90 /**
91 * Constructor
92 *
93 * @since 4.0.0
94 */
95 constructor(goalType: GoalType, currency: string) {
96 if (!isValidGoalType(goalType)) {
97 throw new Error(`Invalid goal type: ${goalType}`);
98 }
99
100 this.goalType = goalType;
101 this.currencyFormatter = amountFormatter(currency);
102 }
103
104 /**
105 * Get the attributes for this goal type
106 *
107 * @since 4.0.0
108 */
109 getAttributes(): GoalInputAttributes {
110 const attributes = goalInputAttributesLookup(this.currencyFormatter);
111 return attributes[this.goalType];
112 }
113
114 /**
115 * Get the label for this goal type
116 *
117 * @since 4.0.0
118 */
119 getLabel(): string {
120 return this.getAttributes().label;
121 }
122
123 /**
124 * Get the description for this goal type
125 *
126 * @since 4.0.0
127 */
128 getDescription(): string {
129 return this.getAttributes().description;
130 }
131
132 /**
133 * Get the placeholder for this goal type
134 *
135 * @since 4.0.0
136 */
137 getPlaceholder(): string {
138 return this.getAttributes().placeholder;
139 }
140
141 /**
142 * Get the help text for this goal type
143 *
144 * @since 4.0.0
145 */
146 getHelp(): string {
147 return this.getAttributes().help;
148 }
149
150 /**
151 * Check if this goal type is related to currency
152 *
153 * @since 4.0.0
154 */
155 isCurrencyType(): boolean {
156 return this.goalType === 'amount' || this.goalType === 'amountFromSubscriptions';
157 }
158
159 /**
160 * Check if this goal type is related to subscriptions
161 *
162 * @since 4.0.0
163 */
164 isSubscriptionType(): boolean {
165 return [
166 'amountFromSubscriptions',
167 'subscriptions',
168 'donorsFromSubscriptions'
169 ,].includes(this.goalType);
170 }
171 }
172