fix: don’t check for active node in wrapIn command, fix #1059

This commit is contained in:
Philipp Kühn 2021-12-13 13:32:19 +01:00
parent 20876f7481
commit 170ec4be5b
4 changed files with 18 additions and 20 deletions

View File

@ -8,13 +8,18 @@ import './styles.scss'
export default () => {
const editor = useEditor({
extensions: [Document, Paragraph, Text, Blockquote],
extensions: [
Document,
Paragraph,
Text,
Blockquote,
],
content: `
<blockquote>
Nothing is impossible, the word itself says Im possible!
</blockquote>
<p>Audrey Hepburn</p>
`,
<blockquote>
Nothing is impossible, the word itself says Im possible!
</blockquote>
<p>Audrey Hepburn</p>
`,
})
if (!editor) {
@ -31,13 +36,13 @@ export default () => {
</button>
<button
onClick={() => editor.chain().focus().setBlockquote().run()}
disabled={editor.isActive('blockquote')}
disabled={!editor.can().setBlockquote()}
>
setBlockquote
</button>
<button
onClick={() => editor.chain().focus().unsetBlockquote().run()}
disabled={!editor.isActive('blockquote')}
disabled={!editor.can().unsetBlockquote()}
>
unsetBlockquote
</button>

View File

@ -3,10 +3,10 @@
<button @click="editor.chain().focus().toggleBlockquote().run()" :class="{ 'is-active': editor.isActive('blockquote') }">
toggleBlockquote
</button>
<button @click="editor.chain().focus().setBlockquote().run()" :disabled="editor.isActive('blockquote')">
<button @click="editor.chain().focus().setBlockquote().run()" :disabled="!editor.can().setBlockquote()">
setBlockquote
</button>
<button @click="editor.chain().focus().unsetBlockquote().run()" :disabled="!editor.isActive('blockquote')">
<button @click="editor.chain().focus().unsetBlockquote().run()" :disabled="!editor.can().unsetBlockquote()">
unsetBlockquote
</button>

View File

@ -1,4 +1,3 @@
import { wrapIn, lift } from 'prosemirror-commands'
import { NodeType } from 'prosemirror-model'
import { RawCommands } from '../types'
import { isNodeActive } from '../helpers/isNodeActive'
@ -15,13 +14,13 @@ declare module '@tiptap/core' {
}
}
export const toggleWrap: RawCommands['toggleWrap'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
export const toggleWrap: RawCommands['toggleWrap'] = (typeOrName, attributes = {}) => ({ state, commands }) => {
const type = getNodeType(typeOrName, state.schema)
const isActive = isNodeActive(state, type, attributes)
if (isActive) {
return lift(state, dispatch)
return commands.lift(type)
}
return wrapIn(type, attributes)(state, dispatch)
return commands.wrapIn(type, attributes)
}

View File

@ -1,7 +1,6 @@
import { wrapIn as originalWrapIn } from 'prosemirror-commands'
import { NodeType } from 'prosemirror-model'
import { RawCommands } from '../types'
import { isNodeActive } from '../helpers/isNodeActive'
import { getNodeType } from '../helpers/getNodeType'
declare module '@tiptap/core' {
@ -17,11 +16,6 @@ declare module '@tiptap/core' {
export const wrapIn: RawCommands['wrapIn'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
const type = getNodeType(typeOrName, state.schema)
const isActive = isNodeActive(state, type, attributes)
if (isActive) {
return false
}
return originalWrapIn(type, attributes)(state, dispatch)
}