PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.4
GiveWP – Donation Plugin and Fundraising Platform v3.16.4
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 / Promotions / sharedResources / hooks / useRecommendations.ts
give / src / Promotions / sharedResources / hooks Last commit date
useFreeAddonSubscription.js 4 years ago useRecommendations.ts 3 years ago
useRecommendations.ts
58 lines
1 import {useCallback, useState} from 'react';
2 import dismissRecommendation from '@givewp/promotions/requests/dismissRecommendation';
3
4 type EnumValues =
5 | 'givewp_donations_recurring_recommendation_dismissed'
6 | 'givewp_donations_fee_recovery_recommendation_dismissed'
7 | 'givewp_donations_designated_funds_recommendation_dismissed'
8 | 'givewp_reports_recurring_recommendation_dismissed'
9 | 'givewp_reports_fee_recovery_recommendation_dismissed'
10 | 'givewp_donors_fee_recovery_recommendation_dismissed'
11 | 'givewp_reports_fee_recovery_recommendation_dismissed';
12
13 export interface RecommendedProductData {
14 enum: EnumValues;
15 documentationPage: string;
16 message: string;
17 innerHtml: string;
18 }
19
20 /**
21 * @since 2.27.1
22 */
23 export function useRecommendations(apiSettings, options) {
24 const [dismissedRecommendations, setDismissedRecommendations] = useState<string[]>(
25 apiSettings.dismissedRecommendations
26 );
27
28 const getRandomRecommendation = useCallback((): RecommendedProductData | null => {
29 const availableOptions = options.filter((option) => !dismissedRecommendations.includes(option.enum));
30
31 if (availableOptions.length === 0) {
32 return null;
33 }
34
35 const randomIndex = Math.floor(Math.random() * availableOptions.length);
36
37 return availableOptions[randomIndex];
38 }, [dismissedRecommendations]);
39
40 const getRecommendation = useCallback((): RecommendedProductData | null => {
41 const availableOptions = options.filter((option) => !dismissedRecommendations.includes(option.enum));
42
43 if (availableOptions.length === 0) {
44 return null;
45 }
46
47 return availableOptions[0];
48 }, [dismissedRecommendations]);
49
50 const removeRecommendation = async (data: {option: EnumValues}): Promise<void> => {
51 setDismissedRecommendations((prev) => [...prev, data.option]);
52
53 await dismissRecommendation(data.option, apiSettings.apiNonce);
54 };
55
56 return {getRecommendation, getRandomRecommendation, removeRecommendation};
57 }
58