Add all files
This commit is contained in:
44
themes/default/views/tickets/create.blade.php
Normal file
44
themes/default/views/tickets/create.blade.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<div class="bg-primary-800 p-6 rounded-lg mt-2">
|
||||
<h1 class="text-2xl font-semibold text-white mb-2">{{ __('ticket.create_ticket') }}</h1>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
|
||||
<x-form.input wire:model="subject" label="{{ __('ticket.subject') }}" name="subject" required />
|
||||
@if (count($departments) > 0)
|
||||
<x-form.select wire:model="department" label="{{ __('ticket.department') }}" name="department" required>
|
||||
<option value="">{{ __('ticket.select_department') }}</option>
|
||||
@foreach ($departments as $department)
|
||||
<option value="{{ $department }}">{{ $department }}</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
@endif
|
||||
<x-form.select wire:model="priority" label="{{ __('ticket.priority') }}" name="priority" required>
|
||||
<option value="">{{ __('ticket.select_priority') }}</option>
|
||||
<option value="low" selected>{{ __('ticket.low') }}</option>
|
||||
<option value="medium">{{ __('ticket.medium') }}</option>
|
||||
<option value="high">{{ __('ticket.high') }}</option>
|
||||
</x-form.select>
|
||||
<!-- Select the product -->
|
||||
<x-form.select wire:model="service" label="{{ __('ticket.service') }}" name="service">
|
||||
<option value="">{{ __('ticket.select_service') }}</option>
|
||||
@foreach ($services as $product)
|
||||
<option value="{{ $product->id }}">{{ $product->product->name }} ({{ ucfirst($product->status) }})
|
||||
@if ($product->expires_at)
|
||||
- {{ $product->expires_at->format('Y-m-d') }}
|
||||
@endif
|
||||
</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
<div class="col-span-2">
|
||||
|
||||
<div class="mt-4">
|
||||
<form wire:submit.prevent="create" wire:ignore>
|
||||
<textarea id="editor" placeholder="Initial message"></textarea>
|
||||
<x-button.primary class="mt-2 !w-fit float-right">
|
||||
{{ __('ticket.create') }}
|
||||
</x-button.primary>
|
||||
</form>
|
||||
<x-easymde-editor />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
41
themes/default/views/tickets/index.blade.php
Normal file
41
themes/default/views/tickets/index.blade.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<div class="space-y-4">
|
||||
<div class="flex flex-row justify-between">
|
||||
<x-navigation.breadcrumb />
|
||||
<x-navigation.link :href="route('tickets.create')" class="flex items-center gap-2">
|
||||
<x-ri-add-line class="size-5" />
|
||||
<span>{{ __('ticket.create_ticket') }}</span>
|
||||
</x-navigation.link>
|
||||
</div>
|
||||
@foreach ($tickets as $ticket)
|
||||
<a href="{{ route('tickets.show', $ticket) }}" wire:navigate>
|
||||
<div class="bg-background-secondary hover:bg-background-secondary/80 border border-neutral p-4 rounded-lg mb-4">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="bg-secondary/10 p-2 rounded-lg">
|
||||
<x-ri-ticket-line class="size-5 text-secondary" />
|
||||
</div>
|
||||
<span class="font-medium">{{ $ticket->subject }}</span>
|
||||
</div>
|
||||
<div class="size-5 rounded-md p-0.5
|
||||
@if ($ticket->status == 'open') text-success bg-success/20
|
||||
@elseif($ticket->status == 'closed') text-inactive bg-inactive/20
|
||||
@else text-info bg-info/20
|
||||
@endif"
|
||||
@if ($ticket->status == 'open')
|
||||
<x-ri-add-circle-fill />
|
||||
@elseif($ticket->status == 'closed')
|
||||
<x-ri-forbid-fill />
|
||||
@elseif($ticket->status == 'replied')
|
||||
<x-ri-chat-smile-2-fill />
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-base text-sm">
|
||||
{{ __('ticket.last_activity') }}
|
||||
{{ $ticket->messages()->orderBy('created_at', 'desc')->first()->created_at->diffForHumans() }}
|
||||
{{ $ticket->department ? ' - ' . $ticket->department : '' }}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
66
themes/default/views/tickets/show.blade.php
Normal file
66
themes/default/views/tickets/show.blade.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<div class="bg-primary-800 p-6 rounded-lg mt-2">
|
||||
<h1 class="text-2xl font-semibold text-white">Ticket: {{ $ticket->subject }}</h1>
|
||||
|
||||
<div class="md:grid grid-cols-4 flex flex-col gap-4">
|
||||
<div class="md:col-span-3">
|
||||
<div class="flex flex-col gap-4 max-h-[60vh] overflow-y-auto pr-4" wire:poll.5s>
|
||||
@foreach ($ticket->messages()->with('user')->get() as $index => $message)
|
||||
<div
|
||||
class="bg-background-secondary hover:bg-background-secondary/80 border border-neutral p-4 rounded-lg w-full max-w-[80%] {{ $message->user_id === $ticket->user_id ? 'ml-auto' : 'mr-auto' }}"
|
||||
@if ($loop->last) x-data x-init="$el.scrollIntoView()" @endif>
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 class="text-lg font-semibold">{{ $message->user->name }}</h2>
|
||||
<p class="text-sm text-gray-500">{{ $message->created_at->diffForHumans() }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2 prose dark:prose-invert break-all">{!! Str::markdown(e($message->message), [
|
||||
'allow_unsafe_links' => false,
|
||||
'renderer' => [
|
||||
'soft_break' => "<br>"
|
||||
]
|
||||
]) !!}</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<!-- Reply Form -->
|
||||
<div class="mt-4">
|
||||
<form wire:submit.prevent="save" wire:ignore>
|
||||
<textarea id="editor"></textarea>
|
||||
<x-button.primary class="mt-2 !w-fit float-right">
|
||||
{{ __('ticket.reply') }}
|
||||
</x-button.primary>
|
||||
</form>
|
||||
<x-easymde-editor />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="md:order-last order-first w-full col-span-3 sm:col-auto">
|
||||
<!-- Show subject and status -->
|
||||
<div class="flex flex-col w-full col-span-1">
|
||||
<h2 class="text-2xl font-semibold bg-primary-800 p-2 px-4 rounded-md mb-2">
|
||||
{{ __('ticket.ticket_details') }}
|
||||
</h2>
|
||||
<div class="font-semibold flex md:flex-col justify-between bg-primary-800 p-2 px-4 rounded-md gap-2">
|
||||
<h4 class="h-fit">{{ __('ticket.subject') }}:</h4> {{ $ticket->subject }}
|
||||
</div>
|
||||
<div class="font-semibold flex md:flex-col justify-between bg-primary-800 p-2 px-4 rounded-md">
|
||||
<h4>{{ __('ticket.status') }}:</h4> {{ ucfirst($ticket->status) }}
|
||||
</div>
|
||||
<div class="font-semibold flex md:flex-col justify-between bg-primary-800 p-2 px-4 rounded-md">
|
||||
<h4>{{ __('ticket.priority') }}:</h4> {{ ucfirst($ticket->priority) }}
|
||||
</div>
|
||||
<div class="font-semibold flex md:flex-col justify-between bg-primary-800 p-2 px-4 rounded-md">
|
||||
<h4>{{ __('ticket.created_at') }}:</h4> {{ $ticket->created_at->diffForHumans() }}
|
||||
</div>
|
||||
@if ($ticket->department)
|
||||
<div class="font-semibold flex md:flex-col justify-between bg-primary-800 p-2 px-4 rounded-md">
|
||||
<h4>{{ __('ticket.department') }}:</h4>
|
||||
{{ $ticket->department }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
34
themes/default/views/tickets/widget.blade.php
Normal file
34
themes/default/views/tickets/widget.blade.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<div class="space-y-4">
|
||||
@foreach ($tickets as $ticket)
|
||||
<a href="{{ route('tickets.show', $ticket) }}" wire:navigate>
|
||||
<div class="bg-background-secondary hover:bg-background-secondary/80 border border-neutral p-4 rounded-lg mb-4">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="bg-secondary/10 p-2 rounded-lg">
|
||||
<x-ri-ticket-line class="size-5 text-secondary" />
|
||||
</div>
|
||||
<span class="font-medium">{{ $ticket->subject }}</span>
|
||||
</div>
|
||||
<div class="size-5 rounded-md p-0.5
|
||||
@if ($ticket->status == 'open') text-success bg-success/20
|
||||
@elseif($ticket->status == 'closed') text-inactive bg-inactive/20
|
||||
@else text-info bg-info/20
|
||||
@endif">
|
||||
@if ($ticket->status == 'open')
|
||||
<x-ri-add-circle-fill />
|
||||
@elseif($ticket->status == 'closed')
|
||||
<x-ri-forbid-fill />
|
||||
@elseif($ticket->status == 'replied')
|
||||
<x-ri-chat-smile-2-fill />
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-base text-sm">
|
||||
{{ __('ticket.last_activity') }}
|
||||
{{ $ticket->messages()->orderBy('created_at', 'desc')->first()->created_at->diffForHumans() }}
|
||||
{{ $ticket->department ? ' - ' . $ticket->department : '' }}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
Reference in New Issue
Block a user