PluginProbe
BeyondWords – AI audio for publishers / 4.6.0
BeyondWords – AI audio for publishers v4.6.0
7.2.0 7.1.0 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.3.0 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 All 44 releases
speechkit / src / Component / Post / SelectVoice / index.js

index.js in BeyondWords – AI audio for publishers 4.6.0, at src/Component/Post/SelectVoice/index.js

127 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * WordPress dependencies
3 */
4 import { __ } from '@wordpress/i18n';
5 import { SelectControl, Flex, FlexBlock } from '@wordpress/components';
6 import { useEntityProp } from '@wordpress/core-data';
7 import { useSelect } from '@wordpress/data';
8 import { Fragment, useMemo } from '@wordpress/element';
9 import { decodeEntities } from '@wordpress/html-entities';
10
11 /**
12 * Internal dependencies
13 */
14 import SelectVoiceCheck from './check';
15
16 export function SelectVoice( { wrapper } ) {
17 const Wrapper = wrapper || Fragment;
18
19 const postType = useSelect(
20 ( select ) => select( 'core/editor' ).getCurrentPostType(),
21 []
22 );
23
24 const [ meta, setMeta ] = useEntityProp( 'postType', postType, 'meta' );
25
26 const languageId = meta.beyondwords_language_id;
27 const bodyVoiceId = meta.beyondwords_body_voice_id;
28
29 const setLanguageId = ( newLanguageId ) => {
30 setMeta( {
31 ...meta,
32 beyondwords_language_id: newLanguageId,
33 } );
34 };
35
36 const setAllVoiceIds = ( newVoiceId ) => {
37 setMeta( {
38 ...meta,
39 beyondwords_body_voice_id: newVoiceId,
40 beyondwords_title_voice_id: newVoiceId,
41 beyondwords_summary_voice_id: newVoiceId,
42 } );
43 };
44
45 const { languages } = useSelect( ( select ) => {
46 return {
47 languages: select( 'beyondwords/settings' ).getLanguages(),
48 }
49 }, [] );
50
51 const { voices } = useSelect( ( select ) => {
52 return {
53 voices: languageId ? select( 'beyondwords/settings' ).getVoices( languageId ) : [],
54 }
55 }, [ languageId ] );
56
57 const languageOptions = useMemo( () => {
58 return ( languages ?? [] ).map( ( language ) => {
59 return {
60 label: decodeEntities( language.name ),
61 value: decodeEntities( language.id ),
62 };
63 } );
64 }, [ languages ] );
65
66 const voiceOptions = useMemo( () => {
67 return ( voices ?? [] ).map( ( voice ) => {
68 return {
69 label: decodeEntities( voice.name ),
70 value: decodeEntities( voice.id ),
71 };
72 } );
73 }, [ voices ] );
74
75 if (! languageOptions.length) {
76 return false;
77 }
78
79 return (
80 <SelectVoiceCheck>
81 <Wrapper>
82 <Flex>
83 <FlexBlock>
84 <SelectControl
85 className="beyondwords--select-language"
86 label={ __( 'Language', 'speechkit' ) }
87 options={ [
88 {
89 label: __( 'Project default', 'speechkit' ),
90 value: '',
91 },
92 ...languageOptions
93 ] }
94 onChange={ ( val ) => setLanguageId( val ) }
95 value={ languageId }
96 __nextHasNoMarginBottom
97 />
98 </FlexBlock>
99 </Flex>
100 </Wrapper>
101 <Wrapper>
102 <Flex>
103 <FlexBlock>
104 <SelectControl
105 className="beyondwords--select-voice"
106 label={ __( 'Voice', 'speechkit' ) }
107 options={ [
108 {
109 label: '',
110 value: '',
111 },
112 ...voiceOptions
113 ] }
114 onChange={ ( val ) => setAllVoiceIds( val ) }
115 disabled={ ! voiceOptions?.length }
116 value={ bodyVoiceId }
117 __nextHasNoMarginBottom
118 />
119 </FlexBlock>
120 </Flex>
121 </Wrapper>
122 </SelectVoiceCheck>
123 );
124 }
125
126 export default SelectVoice;
127