core timer fixes

This commit is contained in:
Mark Gregory
2026-06-23 10:19:51 +01:00
parent ed298eac38
commit 0a673690a3
11 changed files with 231 additions and 353 deletions
@@ -7,7 +7,7 @@
'Raise a new support request with priority, product/service, project, category, team and full details.',
])
<form wire:submit.prevent="save" enctype="multipart/form-data" class="helpdesk-ticket-form space-y-6" data-helpdesk-ticket-form>
<form wire:submit.prevent="save" enctype="multipart/form-data" class="helpdesk-ticket-form space-y-6">
<div class="overflow-hidden rounded-2xl border border-zinc-700 bg-zinc-900 shadow-sm">
<div class="border-b border-zinc-700 bg-zinc-800/80 px-6 py-4">
<h2 class="text-lg font-semibold text-zinc-100">Ticket details</h2>
@@ -330,16 +330,13 @@
class="rounded-xl bg-blue-600 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-blue-700">
Cancel
</a>
<button
type="submit"
<button type="submit"
class="inline-flex items-center gap-2 rounded-xl bg-green-600 px-5 py-2 text-sm font-semibold text-white shadow-sm hover:bg-green-700 disabled:cursor-not-allowed disabled:opacity-50"
data-dusk="ticket-create-submit"
dusk="ticket-create-submit"
wire:loading.attr="disabled"
wire:target="save">
data-dusk="ticket-create-submit" dusk="ticket-create-submit" wire:loading.attr="disabled">
<i class="fa-regular fa-floppy-disk" aria-hidden="true"></i>
<span wire:loading.remove wire:target="save">Create Ticket</span>
<span wire:loading wire:target="save">Creating...</span>
<span wire:loading.remove>Create Ticket</span>
<span wire:loading>Creating...</span>
</button>
</div>
</div>
@@ -363,50 +360,47 @@
outline: none;
}
</style>
@script
<script>
const initialiseHelpdeskTicketCreate = function () {
document.addEventListener('DOMContentLoaded', function() {
const form = document.querySelector('.helpdesk-ticket-form');
const editor = document.querySelector('[data-helpdesk-details-editor]');
const bodyField = document.getElementById('body');
if (! form || ! editor || ! bodyField || form.dataset.editorReady === 'true') {
if (!form || !editor || !bodyField) {
return;
}
form.dataset.editorReady = 'true';
const syncBody = function () {
const value = editor.innerHTML.trim();
bodyField.value = value;
bodyField.dispatchEvent(new Event('input', { bubbles: true }));
bodyField.dispatchEvent(new Event('change', { bubbles: true }));
@this.set('body', value, false);
const syncBody = function() {
bodyField.value = editor.innerHTML.trim();
bodyField.dispatchEvent(new Event('input', {
bubbles: true
}));
bodyField.dispatchEvent(new Event('change', {
bubbles: true
}));
};
document.querySelectorAll('[data-helpdesk-editor-command]').forEach(function (button) {
button.addEventListener('click', function () {
document.querySelectorAll('[data-helpdesk-editor-command]').forEach(function(button) {
button.addEventListener('click', function() {
editor.focus();
document.execCommand(button.dataset.helpdeskEditorCommand, false, null);
syncBody();
});
});
document.querySelectorAll('[data-helpdesk-editor-format]').forEach(function (button) {
button.addEventListener('click', function () {
document.querySelectorAll('[data-helpdesk-editor-format]').forEach(function(button) {
button.addEventListener('click', function() {
editor.focus();
document.execCommand('formatBlock', false, button.dataset.helpdeskEditorFormat);
syncBody();
});
});
document.querySelectorAll('[data-helpdesk-editor-link]').forEach(function (button) {
button.addEventListener('click', function () {
document.querySelectorAll('[data-helpdesk-editor-link]').forEach(function(button) {
button.addEventListener('click', function() {
const url = window.prompt('Enter link URL');
if (! url) {
if (!url) {
return;
}
@@ -416,15 +410,8 @@
});
});
editor.addEventListener('input', syncBody);
editor.addEventListener('keyup', syncBody);
editor.addEventListener('blur', syncBody);
form.addEventListener('submit', syncBody, true);
};
initialiseHelpdeskTicketCreate();
document.addEventListener('livewire:navigated', initialiseHelpdeskTicketCreate);
form.addEventListener('submit', syncBody);
});
</script>
@endscript
</div>