ActivatePluginsModal.js (2399B)
1 import { __, sprintf } from '@wordpress/i18n' 2 import { 3 Modal, Button, ButtonGroup, 4 } from '@wordpress/components' 5 import { render } from '@wordpress/element' 6 import ActivatingModal from './ActivatingModal' 7 import ExtendifyLibrary from '../../ExtendifyLibrary' 8 import { useWantedTemplateStore } from '../../state/Importing' 9 import { getPluginDescription } from '../../util/general' 10 import { useUserStore } from '../../state/User' 11 import NeedsPermissionModal from '../NeedsPermissionModal' 12 13 export default function ActivatePluginsModal(props) { 14 const wantedTemplate = useWantedTemplateStore(store => store.wantedTemplate) 15 const closeModal = () => render(<ExtendifyLibrary show={true}/>, document.getElementById('extendify-root')) 16 const installPlugins = () => render(<ActivatingModal />, document.getElementById('extendify-root')) 17 const requiredPlugins = wantedTemplate?.fields?.required_plugins || [] 18 19 if (!useUserStore.getState()?.canActivatePlugins) { 20 return <NeedsPermissionModal/> 21 } 22 23 return <Modal 24 title={__('Activate required plugins', 'extendify-sdk')} 25 isDismissible={false} 26 > 27 <div> 28 <p style={{ 29 maxWidth: '400px', 30 }}> 31 {props.message ?? __(sprintf('There is just one more step. This %s requires the following plugins to be installed and activated:', 32 wantedTemplate?.fields?.type ?? 'template'), 33 'extendify-sdk')} 34 </p> 35 <ul> 36 { 37 // Hardcoded temporarily to not force EP install 38 // requiredPlugins.map((plugin) => 39 requiredPlugins.filter((p) => p !== 'editorplus').map((plugin) => 40 <li key={plugin}> 41 {getPluginDescription(plugin)} 42 </li>) 43 } 44 </ul> 45 <ButtonGroup> 46 <Button isPrimary onClick={installPlugins}> 47 {__('Activate Plugins', 'extendify-sdk')} 48 </Button> 49 {props.showClose && <Button isTertiary onClick={closeModal} style={{ 50 boxShadow: 'none', margin: '0 4px', 51 }}> 52 {__('No thanks, return to library', 'extendify-sdk')} 53 </Button>} 54 </ButtonGroup> 55 </div> 56 </Modal> 57 }