PluginProbe
Code Snippets / trunk
Code Snippets vtrunk
4.0.0-beta.2 3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 All 65 releases
code-snippets / js / components / EditMenu / EditorSidebar / EditorSidebar.tsx

EditorSidebar.tsx in Code Snippets trunk, at js/components/EditMenu/EditorSidebar/EditorSidebar.tsx

80 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React from 'react'
2 import { Spinner } from '@wordpress/components'
3 import { __, isRTL } from '@wordpress/i18n'
4 import { ConfirmDeleteDialog, useDeleteSnippet } from '../../common/snippets/ConfirmDeleteDialog'
5 import { buildUrl } from '../../../utils/urls'
6 import { Button } from '../../common/Button'
7 import { useSnippetForm } from '../SnippetForm/WithSnippetFormContext'
8 import { isNetworkAdmin } from '../../../utils/screen'
9 import { isCondition } from '../../../utils/snippets/snippets'
10 import { ConditionModalButton } from '../ConditionModal/ConditionModalButton'
11 import { SnippetLocationInput } from '../SnippetForm/fields/SnippetLocationInput'
12 import { Notices } from '../SnippetForm/page/Notices'
13 import { ShortcodeInfo } from './actions/ShortcodeInfo'
14 import { MultisiteSharingSettings } from './controls/MultisiteSharingSettings'
15 import { ExportButtons } from './actions/ExportButtons'
16 import { SubmitButtons } from './actions/SubmitButtons'
17 import { ActivationSwitch } from './controls/ActivationSwitch'
18 import { LockControl } from './controls/LockControl'
19 import { PriorityInput } from './controls/PriorityInput'
20 import { RTLControl } from './controls/RTLControl'
21 import type { Dispatch, SetStateAction } from 'react'
22
23 export interface EditorSidebarProps {
24 setIsUpgradeDialogOpen: Dispatch<SetStateAction<boolean>>
25 }
26
27 export const EditorSidebar: React.FC<EditorSidebarProps> = ({ setIsUpgradeDialogOpen }) => {
28 const { snippet, isWorking, setIsWorking, handleRequestError } = useSnippetForm()
29
30 const { requestDelete, deleteDialogProps } = useDeleteSnippet({
31 snippet,
32 setIsWorking,
33 onSuccess: () => {
34 window.location.replace(buildUrl(window.CODE_SNIPPETS?.urls.manage, { result: 'deleted' }))
35 },
36 onError: error => {
37 handleRequestError(error, __('Could not delete snippet.', 'code-snippets'))
38 }
39 })
40
41 return (
42 <div className="snippet-editor-sidebar">
43 <div className="box">
44 {snippet.id && !isCondition(snippet) ? <ActivationSwitch /> : null}
45
46 {isNetworkAdmin() && <MultisiteSharingSettings />}
47
48 {isRTL() && <RTLControl />}
49
50 <div className="snippet-editor-sidebar-settings">
51 <ConditionModalButton setIsModalOpen={setIsUpgradeDialogOpen} />
52 <SnippetLocationInput />
53 <ShortcodeInfo />
54 <PriorityInput />
55 </div>
56
57 {!!snippet.id && (
58 <div className="row-actions visible inline-form-field">
59 <ExportButtons />
60
61 <Button className="delete-button" onClick={() => void requestDelete()} disabled={isWorking || snippet.locked}>
62 <span className="dashicons dashicons-trash" aria-hidden="true" />
63 {snippet.trashed ? __('Delete Permanently', 'code-snippets') : __('Trash', 'code-snippets')}
64 </Button>
65
66 <LockControl />
67 </div>)}
68 </div>
69
70 <p className="submit">
71 <SubmitButtons />
72 {isWorking ? <Spinner /> : ''}
73 </p>
74
75 <Notices placement="sidebar" />
76 <ConfirmDeleteDialog {...deleteDialogProps} />
77 </div>
78 )
79 }
80