PluginProbe
Extendify / 0.4.0
Extendify v0.4.0
3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 All 127 releases
extendify / src / components / LibraryAccessModal.js

LibraryAccessModal.js in Extendify 0.4.0, at src/components/LibraryAccessModal.js

113 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { Modal } from '@wordpress/components'
2 import { unmountComponentAtNode, useState, useEffect } from '@wordpress/element'
3 import { ToggleControl } from '@wordpress/components'
4 import { __ } from '@wordpress/i18n'
5 import { useSelect } from '@wordpress/data'
6
7 import { useUserStore } from '../state/User'
8 import { useSiteSettingsStore } from '../state/SiteSettings'
9
10 const LibraryAccessModal = () => {
11 const isAdmin = useSelect((select) =>
12 select('core').canUser('create', 'users'),
13 )
14
15 const [libraryforMyself, setLibraryforMyself] = useState(
16 useUserStore((store) => store.enabled),
17 )
18 const [libraryforEveryone, setLibraryforEveryone] = useState(
19 useSiteSettingsStore((store) => store.enabled),
20 )
21
22 const closeModal = () => {
23 const util = document.getElementById('extendify-util')
24 unmountComponentAtNode(util)
25 }
26
27 useEffect(() => {
28 hideButton(!libraryforMyself)
29 }, [libraryforMyself])
30
31 function hideButton(state = true) {
32 const button = document.getElementById(
33 'extendify-templates-inserter-btn',
34 )
35 if (!button) return
36 if (state) {
37 button.classList.add('invisible')
38 } else {
39 button.classList.remove('invisible')
40 }
41 }
42
43 async function saveUser(value) {
44 await useUserStore.setState({ enabled: value })
45 }
46
47 async function saveSetting(value) {
48 await useSiteSettingsStore.setState({ enabled: value })
49 }
50
51 async function saveToggle(state, type) {
52 if (type === 'global') {
53 await saveSetting(state)
54 } else {
55 await saveUser(state)
56 }
57 }
58
59 function handleToggle(type) {
60 if (type === 'global') {
61 setLibraryforEveryone((state) => {
62 saveToggle(!state, type)
63 return !state
64 })
65 } else {
66 setLibraryforMyself((state) => {
67 hideButton(!state)
68 saveToggle(!state, type)
69 return !state
70 })
71 }
72 }
73
74 return (
75 <Modal
76 title={__('Extendify Settings', 'extendify')}
77 onRequestClose={closeModal}>
78 <ToggleControl
79 label={
80 isAdmin
81 ? __('Enable the library for myself', 'extendify')
82 : __('Enable the library', 'extendify')
83 }
84 help={__(
85 'Publish with hundreds of patterns & page layouts',
86 'extendify',
87 )}
88 checked={libraryforMyself}
89 onChange={() => handleToggle('user')}
90 />
91
92 {isAdmin && (
93 <>
94 <br />
95 <ToggleControl
96 label={__(
97 'Allow all users to publish with the library',
98 )}
99 help={__(
100 'Everyone publishes with patterns & page layouts',
101 'extendify',
102 )}
103 checked={libraryforEveryone}
104 onChange={() => handleToggle('global')}
105 />
106 </>
107 )}
108 </Modal>
109 )
110 }
111
112 export default LibraryAccessModal
113