PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.2
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 / Donors / resources / admin / components / Inputs / Upload / index.tsx
give / src / Donors / resources / admin / components / Inputs / Upload Last commit date
index.tsx 1 year ago styles.module.scss 1 year ago
index.tsx
114 lines
1 /**
2 * @link https://codex.wordpress.org/Javascript_Reference/wp.media
3 * @link https://wordpress.stackexchange.com/a/382291
4 */
5
6 /**
7 * External Dependencies
8 */
9 import _ from 'lodash';
10
11 /**
12 * WordPress Dependencies
13 */
14 import {__, sprintf} from '@wordpress/i18n';
15
16 /**
17 * Internal Dependencies
18 */
19 import { ProfileIcon } from '@givewp/components/AdminDetailsPage/Icons';
20 import styles from './styles.module.scss';
21
22 /**
23 * @since 4.4.0
24 */
25 type MediaLibrary = {
26 id: string;
27 value: string;
28 onChange: (id: string, url: string, alt: string) => void;
29 reset: () => void;
30 label: string;
31 };
32
33 /**
34 * @since 4.4.0
35 */
36 export default function UploadMedia({id, value, onChange, label, reset}: MediaLibrary) {
37 // The media library uses Backbone.js, which can conflict with lodash.
38 _.noConflict();
39 let frame;
40
41 const openMediaLibrary = (event) => {
42 event.preventDefault();
43
44 if (frame) {
45 frame.open();
46 return;
47 }
48
49 frame = window.wp.media({
50 title: __('Upload Media', 'give'),
51 button: {
52 text: __('Use this media', 'gie'),
53 },
54 library: {
55 type: 'image', // Restricts media library to image files only
56 },
57 multiple: false, // Set to true to allow multiple files to be selected
58 });
59
60 frame.on('select', function () {
61 // Get media attachment details from the frame state
62 var attachment = frame.state().get('selection').first().toJSON();
63
64 if (!attachment.type || attachment.type !== 'image') {
65 alert(__('Please select an image file only.', 'give'));
66 frame.open();
67 return;
68 }
69
70 onChange(attachment.id, attachment.url, attachment.alt);
71 });
72
73 // Finally, open the modal on click
74 frame.open();
75 };
76
77 const resetImage = () => {
78 reset();
79 };
80
81 return (
82 <div id={id} className={styles.controlWrapper}>
83 <div className={styles.control}>
84 {value ? (
85 <img
86 className={styles.image}
87 src={value}
88 alt={__('uploaded image', 'give')}
89 />
90 ) : (
91 <ProfileIcon />
92 )}
93 </div>
94
95 <div className={styles.options}>
96 <button
97 className={styles.update}
98 onClick={openMediaLibrary}
99 >
100 {sprintf(value ? __('Change %s', 'give') : __('Upload %s', 'give'), label.toLowerCase())}
101 </button>
102 {value && (
103 <button
104 className={styles.remove}
105 onClick={resetImage}
106 >
107 {sprintf(__('Remove %s', 'give'), label.toLowerCase())}
108 </button>
109 )}
110 </div>
111 </div>
112 );
113 }
114