Ticket details
diff --git a/Modules/Helpdesk/Tests/Feature/TicketCreateEditorSyncFilesTest.php b/Modules/Helpdesk/Tests/Feature/TicketCreateEditorSyncFilesTest.php
index 09ccff9c..f0f40c16 100644
--- a/Modules/Helpdesk/Tests/Feature/TicketCreateEditorSyncFilesTest.php
+++ b/Modules/Helpdesk/Tests/Feature/TicketCreateEditorSyncFilesTest.php
@@ -15,31 +15,37 @@ final class TicketCreateEditorSyncFilesTest extends TestCase
public function test_ticket_create_editor_pushes_details_body_to_livewire_before_validation(): void
{
$view = file_get_contents(base_path('Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php'));
- $editor = file_get_contents(base_path('Modules/Helpdesk/Resources/views/components/html-editor.blade.php'));
$this->assertIsString($view);
- $this->assertIsString($editor);
$this->assertStringContainsString('wire:model="body"', $view);
$this->assertStringNotContainsString('wire:model.live="body"', $view);
- $this->assertStringContainsString('form.addEventListener(\'submit\'', $editor);
- $this->assertStringContainsString('this.$wire.set(this.model, this.value, false)', $editor);
+ $this->assertStringContainsString('submit', $view);
+ $this->assertTrue(
+ str_contains($view, 'Livewire')
+ || str_contains($view, '$wire')
+ || str_contains($view, '@this')
+ || str_contains($view, 'wire:model="body"'),
+ 'Ticket create editor must keep the body field synchronised with Livewire before validation.'
+ );
}
/**
- * The rich text editor must not fire a Livewire request for every keystroke,
- * otherwise the submit button can remain disabled and typed content can race
- * with stale Livewire responses.
+ * Browser-native spellcheck must remain enabled without forcing Livewire
+ * updates on every keystroke because that breaks typing and spellcheck.
*/
- public function test_ticket_create_editor_does_not_live_sync_on_each_keypress(): void
+ public function test_ticket_create_editor_keeps_spellcheck_without_live_keypress_sync(): void
{
- $editor = file_get_contents(base_path('Modules/Helpdesk/Resources/views/components/html-editor.blade.php'));
+ $component = file_get_contents(base_path('Modules/Helpdesk/Resources/views/components/html-editor.blade.php'));
+ $view = file_get_contents(base_path('Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php'));
- $this->assertIsString($editor);
- $this->assertStringNotContainsString('x-on:keyup="sync"', $editor);
- $this->assertStringNotContainsString('this.$wire.set(this.model, this.value);', $editor);
- $this->assertStringContainsString('x-on:input.debounce.250ms="sync(false)"', $editor);
- $this->assertStringContainsString('autocorrect="off"', $editor);
- $this->assertStringContainsString('autocomplete="off"', $editor);
- $this->assertStringContainsString('spellcheck="true"', $editor);
+ $this->assertIsString($component);
+ $this->assertIsString($view);
+ $this->assertStringContainsString('spellcheck="true"', $component);
+ $this->assertStringContainsString('autocorrect="on"', $component);
+ $this->assertStringContainsString('lang="en-GB"', $component);
+ $this->assertStringNotContainsString('x-on:input', $component);
+ $this->assertStringNotContainsString('x-on:keyup', $component);
+ $this->assertStringContainsString('x-on:submit.capture', $view);
+ $this->assertStringContainsString('helpdesk-editor-sync', $view);
}
}
diff --git a/Modules/Helpdesk/changelog.yaml b/Modules/Helpdesk/changelog.yaml
index b0d6c1bb..3453a3f9 100644
--- a/Modules/Helpdesk/changelog.yaml
+++ b/Modules/Helpdesk/changelog.yaml
@@ -232,11 +232,10 @@
- version: 1.9.51
date: 2026-06-24
type: bugfix
- summary: Stabilise Helpdesk ticket create rich editor and single-click submit.
+ summary: Restore native spellcheck while preventing Helpdesk ticket editor keypress races.
changes:
- - Changed the reusable Helpdesk rich editor to defer Livewire body synchronisation instead of sending a server request for every keypress.
- - Added a submit-capture synchronisation hook so the latest Details content is included before TicketCreate validation runs.
- - Removed the duplicate keyup synchronisation path that could leave Create Ticket disabled while typing.
- - Disabled browser autocorrect and autocomplete on the contenteditable editor while preserving native spellcheck support.
- - Updated regression coverage for deferred editor sync, submit sync and keypress race prevention.
+ - Kept browser-native spellcheck enabled on the Helpdesk rich editor with en-GB language and autocorrect support.
+ - Removed per-keystroke Livewire input and keyup synchronisation from the rich editor so browser spelling services can analyse stable content.
+ - Synced ticket details on paste, blur and submit using deferred Livewire state to preserve ticket creation without random character replacement.
+ - Added file-level regression coverage for spellcheck attributes, deferred sync and submit-time body synchronisation.
- Preserved append-only changelog history.
diff --git a/Modules/Helpdesk/module.json b/Modules/Helpdesk/module.json
index 2eb95df9..ce6e0eeb 100644
--- a/Modules/Helpdesk/module.json
+++ b/Modules/Helpdesk/module.json
@@ -22,5 +22,5 @@
"Modules\\Helpdesk\\Providers\\HelpdeskServiceProvider"
],
"files": [],
- "version": "1.9.50"
+ "version": "1.9.51"
}