fix(character-count): setting content larger than limit should truncate #5851 (#5862)

This commit is contained in:
Hari Haran 2024-11-25 15:03:52 +05:30 committed by GitHub
parent f8961a984f
commit 14681a1906
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 0 deletions

View File

@ -0,0 +1,5 @@
---
"@tiptap/extension-character-count": major
---
fix: #5851 - While setting `content` directly while using character-count

View File

@ -93,9 +93,39 @@ export const CharacterCount = Extension.create<CharacterCountOptions, CharacterC
},
addProseMirrorPlugins() {
let initialEvaluationDone = false
return [
new Plugin({
key: new PluginKey('characterCount'),
appendTransaction: (transactions, oldState, newState) => {
if (initialEvaluationDone) {
return
}
const limit = this.options.limit
if (limit === null || limit === undefined || limit === 0) {
initialEvaluationDone = true
return
}
const initialContentSize = this.storage.characters({ node: newState.doc })
if (initialContentSize > limit) {
const over = initialContentSize - limit
const from = 0
const to = over
console.warn(`[CharacterCount] Initial content exceeded limit of ${limit} characters. Content was automatically trimmed.`)
const tr = newState.tr.deleteRange(from, to)
initialEvaluationDone = true
return tr
}
initialEvaluationDone = true
},
filterTransaction: (transaction, state) => {
const limit = this.options.limit