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