GitHub

@@ -169,11 +169,13 @@ export function createListHandler(listType: 'bulletList' | 'orderedList' | 'task

169169

} as const

170170

const fnName = fnNameMap[listType]

171171

const listItemType = listType === 'taskList' ? 'taskItem' : 'listItem'

172+

const allListTypes = ['bulletList', 'orderedList', 'taskList'] as const

172173173174

return {

174175

canExecute: (editor: Editor) => {

175-

// Can execute if the toggle command works OR we're in any list type (to allow conversion)

176-

return (editor.can() as any)[fnName]() || editor.isActive('bulletList') || editor.isActive('orderedList') || editor.isActive('taskList') || editor.isActive('taskItem') || editor.isActive('listItem')

176+

return (editor.can() as any)[fnName]()

177+

|| editor.isActive('listItem')

178+

|| allListTypes.some(type => isExtensionAvailable(editor, type) && editor.isActive(type))

177179

},

178180

execute: (editor: Editor) => {

179181

const { state } = editor

@@ -197,24 +199,24 @@ export function createListHandler(listType: 'bulletList' | 'orderedList' | 'task

197199

}

198200199201

if (editor.isActive(listType)) {

200-

// Unwrap list if same type is active

201-

return chain

202-

.liftListItem(listItemType)

203-

.lift('bulletList')

204-

.lift('orderedList')

205-

.lift('taskList')

206-

.selectTextblockEnd()

202+

let result = chain.liftListItem(listItemType)

203+

for (const type of allListTypes) {

204+

if (isExtensionAvailable(editor, type)) {

205+

result = result.lift(type)

206+

}

207+

}

208+

return result.selectTextblockEnd()

207209

}

208210209211

// Check if a different list type is active and convert

210-

const currentListItemType = editor.isActive('taskList') ? 'taskItem' : 'listItem'

211-

if (editor.isActive('bulletList') || editor.isActive('orderedList') || editor.isActive('taskList')) {

212-

// First unwrap the current list, then wrap in the new list type

213-

const unwrapped = chain

214-

.liftListItem(currentListItemType)

215-

.lift('bulletList')

216-

.lift('orderedList')

217-

.lift('taskList')

212+

if (allListTypes.some(type => isExtensionAvailable(editor, type) && editor.isActive(type))) {

213+

const currentListItemType = editor.isActive('taskList') ? 'taskItem' : 'listItem'

214+

let unwrapped = chain.liftListItem(currentListItemType)

215+

for (const type of allListTypes) {

216+

if (isExtensionAvailable(editor, type)) {

217+

unwrapped = unwrapped.lift(type)

218+

}

219+

}

218220

return (unwrapped as any)[fnName]().selectTextblockEnd()

219221

}

220222

Read the original on github.com ↗