@secretstache/wordpress-gutenberg 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- package/build/index.js +3 -3
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/MediaTypeControl.js +15 -10
- package/src/hooks/index.js +1 -0
- package/src/hooks/useFilterBlocks.js +15 -0
- package/src/utils/attributes.js +1 -1
package/package.json
CHANGED
@@ -2,22 +2,27 @@ import { useState } from '@wordpress/element';
|
|
2
2
|
import { SelectControl } from '@wordpress/components';
|
3
3
|
|
4
4
|
import { MediaControl } from './MediaControl.js';
|
5
|
-
import { MEDIA_TYPE_LABELS } from '../utils/index.js';
|
5
|
+
import { MEDIA_TYPE_LABELS, MEDIA_TYPES } from '../utils/index.js';
|
6
6
|
|
7
7
|
export const MediaTypeControl = (props) => {
|
8
8
|
const {
|
9
|
-
|
9
|
+
types = [ MEDIA_TYPES.IMAGE, MEDIA_TYPES.VIDEO ],
|
10
|
+
|
11
|
+
selectedType = MEDIA_TYPES.IMAGE,
|
12
|
+
typeOnSelect,
|
13
|
+
|
10
14
|
mediaId,
|
11
15
|
mediaUrl,
|
12
16
|
mediaFileName = '',
|
17
|
+
|
13
18
|
mediaOnSelect,
|
14
19
|
mediaOnRemove,
|
20
|
+
|
15
21
|
label = 'Media Type',
|
16
22
|
} = props;
|
17
23
|
|
18
|
-
const [selectedMediaType, setSelectedMediaType] = useState(mediaTypes?.[0]);
|
19
24
|
|
20
|
-
const
|
25
|
+
const typesOptions = types
|
21
26
|
?.filter((type) => MEDIA_TYPE_LABELS[type]) // Ensure it's an allowed type
|
22
27
|
?.map((type) => ({
|
23
28
|
label: MEDIA_TYPE_LABELS[type],
|
@@ -27,23 +32,23 @@ export const MediaTypeControl = (props) => {
|
|
27
32
|
return (
|
28
33
|
<>
|
29
34
|
{
|
30
|
-
|
35
|
+
types && (
|
31
36
|
<SelectControl
|
32
37
|
label={label}
|
33
|
-
value={
|
34
|
-
onChange={(
|
35
|
-
options={
|
38
|
+
value={selectedType}
|
39
|
+
onChange={(type) => typeOnSelect(type)}
|
40
|
+
options={typesOptions}
|
36
41
|
/>
|
37
42
|
)
|
38
43
|
}
|
39
44
|
|
40
45
|
{
|
41
|
-
|
46
|
+
selectedType && (
|
42
47
|
<MediaControl
|
43
48
|
mediaId={mediaId}
|
44
49
|
mediaUrl={mediaUrl}
|
45
50
|
mediaFileName={mediaFileName}
|
46
|
-
type={
|
51
|
+
type={selectedType}
|
47
52
|
onSelect={mediaOnSelect}
|
48
53
|
onRemove={mediaOnRemove}
|
49
54
|
/>
|
package/src/hooks/index.js
CHANGED
@@ -9,3 +9,4 @@ export { useAccordionItem } from './useAccordionItem.js';
|
|
9
9
|
export { useBlockTabsData } from './useBlockTabsData.js';
|
10
10
|
export { useAllowedBlocks } from './useAllowedBlocks.js';
|
11
11
|
export { useChildBlockPosition } from './useChildBlockPosition.js';
|
12
|
+
export { useFilterBlocks } from './useFilterBlocks.js';
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { useSelect } from '@wordpress/data';
|
2
|
+
import { useMemo } from '@wordpress/element';
|
3
|
+
|
4
|
+
export const useFilterBlocks = (filter) => {
|
5
|
+
const allBlocks = useSelect(
|
6
|
+
(select) => select('core/blocks').getBlockTypes(),
|
7
|
+
[],
|
8
|
+
);
|
9
|
+
|
10
|
+
return useMemo(() => allBlocks
|
11
|
+
?.filter((block) => filter(block))
|
12
|
+
?.map((block) => block.name),
|
13
|
+
[ allBlocks, filter ],
|
14
|
+
);
|
15
|
+
};
|