now with git support

This commit is contained in:
Mark Gregory
2026-06-24 12:29:48 +01:00
parent 5c3b692618
commit 69e4e3ccca
11 changed files with 214 additions and 61 deletions
@@ -330,28 +330,33 @@
@enderror
</div>
</div>
<div class="flex items-center justify-end gap-3 border-t border-zinc-700 bg-zinc-900 px-6 py-4">
<button type="button" wire:click="clearForm" wire:loading.attr="disabled" wire:target="clearForm"
class="inline-flex items-center gap-2 rounded-xl bg-red-600 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-700 disabled:cursor-not-allowed disabled:opacity-50"
data-dusk="ticket-create-clear" dusk="ticket-create-clear">
<i class="fa-solid fa-eraser" aria-hidden="true"></i>
<span wire:loading.remove wire:target="clearForm">Clear</span>
<span wire:loading wire:target="clearForm">Clearing...</span>
</button>
</div>
<a href="{{ route('helpdesk.tickets.index') }}" wire:navigate
class="rounded-xl bg-blue-600 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-blue-700">
Cancel
</a>
<div class="border-t border-zinc-700 bg-zinc-900/95 px-6 py-4">
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end">
<a href="{{ route('helpdesk.tickets.index') }}" wire:navigate
class="inline-flex items-center justify-center gap-2 rounded-xl bg-blue-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500/70 focus:ring-offset-2 focus:ring-offset-zinc-950">
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
<span>Cancel</span>
</a>
<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,attachments" x-bind:disabled="helpdeskAttachmentsUploading" wire:dirty.class="ring-2 ring-amber-400/40">
<i class="fa-regular fa-floppy-disk" aria-hidden="true"></i>
<span wire:loading.remove wire:target="save,attachments">Create Ticket</span>
<span wire:loading wire:target="attachments">Uploading...</span>
<span wire:loading wire:target="save">Creating...</span>
</button>
<button type="button" wire:click="clearForm" wire:loading.attr="disabled" wire:target="clearForm"
class="inline-flex items-center justify-center gap-2 rounded-xl bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-amber-700 disabled:cursor-not-allowed disabled:opacity-50 focus:outline-none focus:ring-2 focus:ring-amber-500/70 focus:ring-offset-2 focus:ring-offset-zinc-950"
data-dusk="ticket-create-clear" dusk="ticket-create-clear">
<i class="fa-solid fa-rotate-left" aria-hidden="true"></i>
<span wire:loading.remove wire:target="clearForm">Reset form</span>
<span wire:loading wire:target="clearForm">Resetting...</span>
</button>
<button type="submit"
class="inline-flex items-center justify-center gap-2 rounded-xl bg-green-600 px-5 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-green-700 disabled:cursor-not-allowed disabled:opacity-50 focus:outline-none focus:ring-2 focus:ring-green-500/70 focus:ring-offset-2 focus:ring-offset-zinc-950"
data-dusk="ticket-create-submit" dusk="ticket-create-submit" wire:loading.attr="disabled" wire:target="save,attachments" x-bind:disabled="helpdeskAttachmentsUploading" wire:dirty.class="ring-2 ring-amber-400/40">
<i class="fa-regular fa-floppy-disk" aria-hidden="true"></i>
<span wire:loading.remove wire:target="save,attachments">Create Ticket</span>
<span wire:loading wire:target="attachments">Uploading...</span>
<span wire:loading wire:target="save">Creating...</span>
</button>
</div>
</div>
</div>
</form>
@@ -392,11 +397,36 @@
};
};
const resetTicketCreateFiles = () => {
const resetTicketCreateFiles = (event) => {
document.querySelectorAll('.helpdesk-ticket-form #attachments').forEach((input) => {
input.value = '';
input.dispatchEvent(new Event('change', { bubbles: true }));
});
const values = event?.detail?.values || event?.values || {};
document.querySelectorAll('.helpdesk-ticket-form [data-helpdesk-select2][data-wire-model]').forEach((select) => {
const model = select.dataset.wireModel;
const value = values[model] ?? '';
select.value = value === null ? '' : String(value);
select.dispatchEvent(new Event('change', { bubbles: true }));
if (window.jQuery && window.jQuery.fn?.select2) {
window.jQuery(select).val(select.value || null).trigger('change.select2');
}
});
document.querySelectorAll('.helpdesk-ticket-form [data-helpdesk-flatpickr]').forEach((input) => {
const model = input.getAttribute('wire:model') || input.dataset.wireModel || input.id;
const value = values[model] ?? '';
input.value = value || '';
input.dispatchEvent(new Event('change', { bubbles: true }));
if (input._flatpickr) {
input._flatpickr.setDate(value || null, false);
}
});
};
const appendPastedFiles = (event) => {
@@ -400,25 +400,67 @@
</div>
</div>
<div class="flex items-center justify-end gap-3 border-t border-zinc-700 bg-zinc-900 px-6 py-4">
<button type="button" wire:click="clearForm"
class="rounded-xl bg-red-600 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-700">
Clear
</button>
<div class="border-t border-zinc-700 bg-zinc-900/95 px-6 py-4">
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end">
<a href="{{ route('helpdesk.tickets.show', $ticket) }}" wire:navigate
class="inline-flex items-center justify-center gap-2 rounded-xl bg-blue-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500/70 focus:ring-offset-2 focus:ring-offset-zinc-950">
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
<span>Cancel</span>
</a>
<a href="{{ route('helpdesk.tickets.show', $ticket) }}" wire:navigate
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="button" wire:click="clearForm" wire:loading.attr="disabled" wire:target="clearForm"
class="inline-flex items-center justify-center gap-2 rounded-xl bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-amber-700 disabled:cursor-not-allowed disabled:opacity-50 focus:outline-none focus:ring-2 focus:ring-amber-500/70 focus:ring-offset-2 focus:ring-offset-zinc-950">
<i class="fa-solid fa-rotate-left" aria-hidden="true"></i>
<span wire:loading.remove wire:target="clearForm">Reset changes</span>
<span wire:loading wire:target="clearForm">Resetting...</span>
</button>
<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-edit-submit" wire:loading.attr="disabled">
<i class="fa-regular fa-floppy-disk" aria-hidden="true"></i>
<span wire:loading.remove>Save Ticket</span>
<span wire:loading>Saving...</span>
</button>
<button type="submit"
class="inline-flex items-center justify-center gap-2 rounded-xl bg-green-600 px-5 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-green-700 disabled:cursor-not-allowed disabled:opacity-50 focus:outline-none focus:ring-2 focus:ring-green-500/70 focus:ring-offset-2 focus:ring-offset-zinc-950"
data-dusk="ticket-edit-submit" wire:loading.attr="disabled">
<i class="fa-regular fa-floppy-disk" aria-hidden="true"></i>
<span wire:loading.remove>Save Ticket</span>
<span wire:loading>Saving...</span>
</button>
</div>
</div>
</div>
</form>
<script data-helpdesk-edit-form-cleared-reset>
(() => {
const resetTicketEditControls = (event) => {
const values = event?.detail?.values || event?.values || {};
document.querySelectorAll('.helpdesk-ticket-form [data-helpdesk-select2][data-wire-model]').forEach((select) => {
const model = select.dataset.wireModel;
const value = values[model] ?? '';
select.value = value === null ? '' : String(value);
select.dispatchEvent(new Event('change', { bubbles: true }));
if (window.jQuery && window.jQuery.fn?.select2) {
window.jQuery(select).val(select.value || null).trigger('change.select2');
}
});
document.querySelectorAll('.helpdesk-ticket-form [data-helpdesk-flatpickr]').forEach((input) => {
const model = input.getAttribute('wire:model') || input.dataset.wireModel || input.id;
const value = values[model] ?? '';
input.value = value || '';
input.dispatchEvent(new Event('change', { bubbles: true }));
if (input._flatpickr) {
input._flatpickr.setDate(value || null, false);
}
});
};
document.addEventListener('helpdesk-form-cleared', resetTicketEditControls);
if (window.Livewire?.on) {
window.Livewire.on('helpdesk-form-cleared', resetTicketEditControls);
}
})();
</script>
</div>