PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / blocks / shared / components / EntitySearchDropdown.js
presto-player / src / admin / blocks / shared / components Last commit date
ColorPopup.js 2 weeks ago ColorPopup.scss 2 weeks ago EntitySearchDropdown.js 2 weeks ago EntitySearchDropdown.scss 2 weeks ago LoadSelect.js 5 years ago ProBadge.js 5 years ago SelectMediaDropdown.js 2 weeks ago SelectMediaDropdown.scss 2 weeks ago Tag.js 2 weeks ago Tag.scss 2 weeks ago TranscriptionLanguageSelect.js 2 weeks ago UrlSelect.js 2 weeks ago UrlSelect.scss 2 weeks ago VideoIcon.js 2 weeks ago VideoIcon.scss 2 weeks ago
EntitySearchDropdown.js
124 lines
1 import {
2 Spinner,
3 Button,
4 MenuGroup,
5 MenuItem,
6 Dropdown,
7 Disabled,
8 } from "@wordpress/components";
9 import { __ } from "@wordpress/i18n";
10 import { SearchControl } from "@wordpress/components";
11 import "./EntitySearchDropdown.scss";
12
13 const EntitySearchDropdown = ({
14 options,
15 isLoading,
16 hasMore,
17 search,
18 onSearch,
19 onSelect,
20 onNextPage,
21 onCreate,
22 onOpen,
23 renderItem = null,
24 ...dropdownProps
25 }) => {
26 const renderContent = () => {
27 if (isLoading && !options.length)
28 return (
29 <MenuGroup>
30 <MenuItem>
31 <Spinner />
32 </MenuItem>
33 </MenuGroup>
34 );
35 if (!options.length) {
36 return (
37 <MenuGroup>
38 <MenuItem>{__("None found.", "presto-player")}</MenuItem>
39 </MenuGroup>
40 );
41 }
42 return (
43 <>
44 {!!onCreate && (
45 <MenuGroup>
46 <MenuItem
47 icon={
48 <svg
49 xmlns="http://www.w3.org/2000/svg"
50 viewBox="0 0 20 20"
51 fill="currentColor"
52 className="presto-entity-search__icon"
53 >
54 <path d="M10.75 4.75a.75.75 0 0 0-1.5 0v4.5h-4.5a.75.75 0 0 0 0 1.5h4.5v4.5a.75.75 0 0 0 1.5 0v-4.5h4.5a.75.75 0 0 0 0-1.5h-4.5v-4.5Z" />
55 </svg>
56 }
57 iconPosition="left"
58 onClick={onCreate}
59 >
60 {__("Add New", "presto-player")}
61 </MenuItem>
62 </MenuGroup>
63 )}
64
65 {!options.length && search ? (
66 <Disabled>
67 <MenuItem>{__("None found.", "presto-player")}</MenuItem>
68 </Disabled>
69 ) : (
70 <MenuGroup>
71 {(options || []).map((item) => {
72 if (renderItem) return renderItem({ item, onSelect });
73 return (
74 <MenuItem
75 icon={item?.icon}
76 iconPosition="left"
77 onClick={() => onSelect(item)}
78 {...item}
79 >
80 {item?.title || "Untitled"}
81 </MenuItem>
82 );
83 })}
84 </MenuGroup>
85 )}
86 {hasMore && options.length && (
87 <div className="presto-entity-search__load-more">
88 <Button
89 variant="secondary"
90 size={"small"}
91 onClick={onNextPage}
92 isBusy={isLoading}
93 >
94 {__("Load More", "presto-player")}
95 </Button>
96 </div>
97 )}
98 </>
99 );
100 };
101
102 return (
103 <div className="pp_search_dropdown_container presto-entity-search__container">
104 <Dropdown
105 onToggle={(open) => onOpen(open)}
106 renderContent={() => (
107 <div className="presto-entity-search__content">
108 <SearchControl
109 placeholder={__("Search...", "presto-player")}
110 value={search}
111 onChange={onSearch}
112 className="presto-entity-search__search"
113 />
114 {renderContent()}
115 </div>
116 )}
117 {...dropdownProps}
118 />
119 </div>
120 );
121 };
122
123 export default EntitySearchDropdown;
124