PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.12.2
GiveWP – Donation Plugin and Fundraising Platform v3.12.2
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 / Views / Components / ListTable / ProductRecommendations / index.tsx
give / src / Views / Components / ListTable / ProductRecommendations Last commit date
index.tsx 3 years ago style.module.scss 3 years ago
index.tsx
95 lines
1 import React, {useState} from 'react';
2 import styles from './style.module.scss';
3 import {__} from '@wordpress/i18n';
4 import {createInterpolateElement} from '@wordpress/element';
5 import {RecommendedProductData, useRecommendations} from '@givewp/promotions/hooks/useRecommendations';
6
7 interface ProductRecommendationsProps {
8 apiSettings: {table; pluginUrl};
9 options: any;
10 }
11
12 /**
13 * @since 2.27.1
14 */
15 export default function ProductRecommendations({apiSettings, options}: ProductRecommendationsProps) {
16 const {getRandomRecommendation, getRecommendation, removeRecommendation} = useRecommendations(apiSettings, options);
17 const selectedOption = apiSettings === window.GiveDonors ? getRecommendation() : getRandomRecommendation();
18 const [showRecommendation, setShowRecommendation] = useState<boolean>(!!selectedOption);
19
20 const closeMessage = async (async) => {
21 setShowRecommendation(false);
22
23 await removeRecommendation({
24 option: selectedOption.enum,
25 });
26 };
27
28 if (!showRecommendation) {
29 return null;
30 }
31
32 return (
33 <RotatingMessage
34 columns={apiSettings.table.columns}
35 pluginUrl={apiSettings.pluginUrl}
36 selectedOption={selectedOption}
37 closeMessage={closeMessage}
38 />
39 );
40 }
41
42 interface RotatingMessageProps {
43 selectedOption: RecommendedProductData;
44 closeMessage: (async: any) => Promise<void>;
45 pluginUrl: string;
46 columns: Array<{visible: boolean}>;
47 }
48
49 /**
50 * @since 2.27.1
51 */
52 function RotatingMessage({selectedOption, closeMessage, pluginUrl, columns}: RotatingMessageProps) {
53 const {message = '', documentationPage = '', innerHtml = ''} = selectedOption;
54
55 const visibleColumns = columns?.filter((column) => column.visible || column.visible === undefined);
56
57 return (
58 <tr>
59 <td colSpan={visibleColumns.length + 1}>
60 <div className={styles.productRecommendation}>
61 <div className={styles.container}>
62 <img src={`${pluginUrl}/assets/dist/images/list-table/light-bulb-icon.svg`} />
63
64 <TranslatedMessage message={message} />
65
66 <a target="_blank" href={documentationPage}>
67 {innerHtml}
68 <img src={`${pluginUrl}/assets/dist/images/list-table/external-link-icon.svg`} />
69 </a>
70 </div>
71
72 <button onClick={closeMessage}>
73 <img src={`${pluginUrl}/assets/dist/images/list-table/circular-exit-icon.svg`} />
74 </button>
75 </div>
76 </td>
77 </tr>
78 );
79 }
80
81 type TranslatedMessageProps = {message: string};
82
83 /**
84 * @since 2.27.1
85 */
86 function TranslatedMessage({message}: TranslatedMessageProps) {
87
88 const translatedString = createInterpolateElement(__('<strong>PRO TIP: </strong> <message />', 'give'), {
89 strong: <strong />,
90 message: <p className={styles.message}>{message}</p>,
91 });
92
93 return translatedString;
94 }
95