PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 / registrars / templates / groups / DonationAmount / subscriptionPeriod.ts
give / src / DonationForms / resources / registrars / templates / groups / DonationAmount Last commit date
DonationAmountCurrencySwitcherMessage.tsx 2 years ago DonationAmountMessage.tsx 2 years ago index.tsx 2 years ago subscriptionPeriod.ts 2 years ago useDonationType.ts 2 years ago
subscriptionPeriod.ts
124 lines
1 import { __ } from "@wordpress/i18n";
2
3 /**
4 * @since 3.0.0
5 */
6 type periodLabel = {
7 singular: string;
8 plural: string;
9 adjective: string;
10 };
11
12 /**
13 * @since 3.0.0
14 */
15 const capitalize = (text: string): string => {
16 return text.toLowerCase().replace(/\w/, (firstLetter) => firstLetter.toUpperCase());
17 };
18
19 /**
20 * @since 3.0.0
21 */
22 const subscriptionPeriodLabelLookup = {
23 day: {
24 singular: __('day', 'give'),
25 plural: __('days', 'give'),
26 adjective: __('daily', 'give'),
27 } as periodLabel,
28 week: {
29 singular: __('week', 'give'),
30 plural: __('weeks', 'give'),
31 adjective: __('weekly', 'give'),
32 } as periodLabel,
33 month: {
34 singular: __('month', 'give'),
35 plural: __('months', 'give'),
36 adjective: __('monthly', 'give'),
37 } as periodLabel,
38 quarter: {
39 singular: __('quarter', 'give'),
40 plural: __('quarters', 'give'),
41 adjective: __('quarterly', 'give'),
42 } as periodLabel,
43 year: {
44 singular: __('year', 'give'),
45 plural: __('years', 'give'),
46 adjective: __('yearly', 'give'),
47 } as periodLabel,
48 };
49
50 /**
51 * @since 3.0.0
52 */
53 type subscriptionPeriod = keyof typeof subscriptionPeriodLabelLookup;
54
55 /**
56 * @since 3.0.0
57 */
58 class SubscriptionPeriod {
59 protected period: subscriptionPeriod;
60
61 constructor(period: subscriptionPeriod) {
62 if (!isSubscriptionPeriod(period)) {
63 throw new Error(`Invalid subscription period: ${period}`);
64 }
65
66 this.period = period;
67 }
68
69 label(): SubscriptionPeriodLabel {
70 const periodLabel = subscriptionPeriodLabelLookup[this.period];
71
72 return new SubscriptionPeriodLabel(periodLabel);
73 }
74 }
75
76 /**
77 * @since 3.0.0
78 */
79 class SubscriptionPeriodLabel {
80 protected periodLabel: periodLabel;
81 protected shouldCapitalize: boolean = false;
82
83 constructor(periodLabel: periodLabel) {
84 this.periodLabel = periodLabel;
85 }
86
87 capitalize(): this {
88 this.shouldCapitalize = true;
89
90 return this;
91 }
92
93 singular(): string {
94 return this.format(this.periodLabel.singular);
95 }
96
97 plural(): string {
98 return this.format(this.periodLabel.plural);
99 }
100
101 adjective(): string {
102 return this.format(this.periodLabel.adjective);
103 }
104
105 get(frequency?: number): string {
106 return frequency > 1 ? `${frequency} ${this.format(this.periodLabel.plural)}` : this.format(this.periodLabel.singular);
107 }
108
109 private format(label) {
110 return this.shouldCapitalize ? capitalize(label) : label;
111 }
112 }
113
114 /**
115 * @since 3.0.0
116 */
117 const isSubscriptionPeriod = (period: subscriptionPeriod): period is subscriptionPeriod => {
118 return period in subscriptionPeriodLabelLookup;
119 }
120
121 export type {subscriptionPeriod, periodLabel};
122
123 export {SubscriptionPeriod, isSubscriptionPeriod};
124