PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.3.1
GiveWP – Donation Plugin and Fundraising Platform v4.3.1
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 / Blocks / shared / components / EntitySelector / EntitySelector.tsx
give / src / Campaigns / Blocks / shared / components / EntitySelector Last commit date
styles 1 year ago EntitySelector.tsx 1 year ago givewp-logo.svg 1 year ago
EntitySelector.tsx
93 lines
1 import { useState } from 'react';
2 import { __ } from '@wordpress/i18n';
3 import ReactSelect from 'react-select';
4 import logo from './givewp-logo.svg';
5 import usePostState from "../../hooks/usePostState";
6 import {reactSelectStyles, reactSelectThemeStyles} from "./styles/reactSelectStyles";
7 import './styles/index.scss';
8
9 /**
10 * @since 4.3.0
11 */
12 export type EntityOption = {
13 label: string;
14 value: number | string;
15 };
16
17 /**
18 * @since 4.3.0
19 */
20 type EntitySelectorProps = {
21 id: string;
22 label: string;
23 options: EntityOption[];
24 isLoading: boolean;
25 emptyMessage: string;
26 loadingMessage: string;
27 onConfirm: (id: number | string) => void;
28 buttonText?: string;
29 disabled?: boolean;
30 };
31
32 // @ts-ignore
33 const savePost = () => dispatch('core/editor').savePost();
34
35 /**
36 * @since 4.3.0
37 */
38 export default function EntitySelector({
39 id,
40 label,
41 options,
42 isLoading,
43 emptyMessage,
44 loadingMessage,
45 onConfirm,
46 buttonText = __('Confirm', 'give'),
47 disabled = false,
48 }: EntitySelectorProps) {
49 const [selected, setSelected] = useState<number | string | null>(null);
50 const selectedOption = options.find((opt) => opt.value === selected);
51 const {isSaving, isDisabled} = usePostState();
52
53 return (
54 <div className="givewp-entity-selector">
55 <img className="givewp-entity-selector__logo" src={logo} alt="givewp-logo" />
56 <div className="givewp-entity-selector__select">
57 <label htmlFor={id} className="givewp-entity-selector__label">
58 {label}
59 </label>
60
61 <ReactSelect
62 name={id}
63 inputId={id}
64 value={selectedOption}
65 //@ts-ignore
66 onChange={(option) => setSelected(option?.value)}
67 options={options}
68 noOptionsMessage={() => <p>{emptyMessage}</p>}
69 loadingMessage={() => <>{loadingMessage}</>}
70 isLoading={isLoading}
71 theme={reactSelectThemeStyles}
72 styles={reactSelectStyles}
73 placeholder={isLoading ? loadingMessage : __('Select...', 'give')}
74 />
75 </div>
76
77 <button
78 className="givewp-entity-selector__submit"
79 type="button"
80 disabled={isSaving || isDisabled || !selected}
81 onClick={() => {
82 if (selected) {
83 onConfirm(selected);
84 }
85 savePost();
86 }}
87 >
88 {buttonText}
89 </button>
90 </div>
91 );
92 }
93