diff --git a/Modules/Helpdesk/Livewire/HelpdeskDashboardWidget.php b/Modules/Helpdesk/Livewire/HelpdeskDashboardWidget.php
index 3be7987..3b53922 100644
--- a/Modules/Helpdesk/Livewire/HelpdeskDashboardWidget.php
+++ b/Modules/Helpdesk/Livewire/HelpdeskDashboardWidget.php
@@ -17,9 +17,9 @@ final class HelpdeskDashboardWidget extends Component
$user = Auth::user();
$base = Ticket::query();
- if ($user->isHelpdeskAdmin()) {
+ if ($user->helpdesk_admin ?? false) {
// no filter
- } elseif ($user->isHelpdeskAgent()) {
+ } elseif ($user->helpdesk_agent ?? false) {
$base->where(function ($q) use ($user) {
$q->where('agent_id', $user->id)
->orWhere('user_id', $user->id);
@@ -34,7 +34,7 @@ final class HelpdeskDashboardWidget extends Component
$closedPercent = $totalCount > 0 ? (int) round(($closedCount / $totalCount) * 100) : 0;
$openPercent = $totalCount > 0 ? (int) round(($openCount / $totalCount) * 100) : 0;
- return view('helpdesk::livewire.dashboard-widget', [
+ return view('modules.helpdesk.livewire.dashboard-widget', [
'totalCount' => $totalCount,
'openCount' => $openCount,
'closedCount' => $closedCount,
diff --git a/Modules/Helpdesk/Livewire/KanbanBoard.php b/Modules/Helpdesk/Livewire/KanbanBoard.php
index 212d086..15ab7ba 100644
--- a/Modules/Helpdesk/Livewire/KanbanBoard.php
+++ b/Modules/Helpdesk/Livewire/KanbanBoard.php
@@ -185,13 +185,13 @@ final class KanbanBoard extends Component
->get();
}
- return view('helpdesk::livewire.kanban-board', [
+ return view('modules.helpdesk.livewire.kanban-board', [
'boards' => $boards,
'board' => $board,
'statuses' => $board?->statuses ?? collect(),
'ticketsByStatus' => $this->ticketsByStatus($board),
'refreshNonce' => $this->refreshNonce,
- ])->layout('helpdesk::layouts.app.sidebar');
+ ])->layout('layouts.app', ['title' => __('Helpdesk Kanban')]);
}
/**
diff --git a/Modules/Helpdesk/Livewire/SettingsManager.php b/Modules/Helpdesk/Livewire/SettingsManager.php
index 6cd15fd..0b21945 100644
--- a/Modules/Helpdesk/Livewire/SettingsManager.php
+++ b/Modules/Helpdesk/Livewire/SettingsManager.php
@@ -699,7 +699,7 @@ final class SettingsManager extends Component
public function render(): View
{
- return view('helpdesk::livewire.settings-manager', [
+ return view('modules.helpdesk.livewire.settings-manager', [
'statuses' => $this->orderedStatuses(),
'priorities' => $this->orderedPriorities(),
'categories' => $this->orderedCategories(),
@@ -718,7 +718,7 @@ final class SettingsManager extends Component
'tags' => Tag::query()->orderBy('name')->get(),
'checklistTemplates' => ChecklistTemplate::query()->orderBy('name')->get(),
'colourOptions' => Color::options(),
- ])->layout('helpdesk::layouts.app.sidebar');
+ ])->layout('layouts.app', ['title' => __('Helpdesk Settings')]);
}
private function orderedStatuses(): mixed
diff --git a/Modules/Helpdesk/Livewire/TicketCreate.php b/Modules/Helpdesk/Livewire/TicketCreate.php
index d48bfca..f80648c 100644
--- a/Modules/Helpdesk/Livewire/TicketCreate.php
+++ b/Modules/Helpdesk/Livewire/TicketCreate.php
@@ -138,7 +138,7 @@ final class TicketCreate extends Component
public function render(): View
{
- return view('helpdesk::livewire.ticket-create', [
+ return view('modules.helpdesk.livewire.ticket-create', [
'boards' => $this->boardOptions(),
'priorities' => $this->priorityOptions(),
'categories' => $this->categoryOptions(),
@@ -146,7 +146,7 @@ final class TicketCreate extends Component
'projects' => $this->projectOptions(),
'products' => Product::query()->where('is_active', true)->orderBy('name')->get(),
'tags' => Tag::query()->orderBy('name')->get(),
- ])->layout('helpdesk::layouts.app.sidebar');
+ ])->layout('layouts.app', ['title' => __('Create Helpdesk Ticket')]);
}
/**
diff --git a/Modules/Helpdesk/Livewire/TicketEdit.php b/Modules/Helpdesk/Livewire/TicketEdit.php
index f1c355c..69551f6 100644
--- a/Modules/Helpdesk/Livewire/TicketEdit.php
+++ b/Modules/Helpdesk/Livewire/TicketEdit.php
@@ -188,7 +188,7 @@ final class TicketEdit extends Component
public function render(): View
{
- return view('helpdesk::livewire.ticket-edit', [
+ return view('modules.helpdesk.livewire.ticket-edit', [
'boards' => KanbanBoard::query()->with('owner:id,name,email')->orderByDesc('is_default')->orderBy('sort_order')->orderBy('name')->get(),
'statuses' => Status::query()->orderBy('sort_order')->orderBy('name')->get(),
'priorities' => Priority::query()->orderBy('sort_order')->orderBy('name')->get(),
@@ -198,7 +198,7 @@ final class TicketEdit extends Component
'products' => Product::query()->where('is_active', true)->orderBy('name')->get(),
'tags' => Tag::query()->orderBy('name')->get(),
'agents' => $this->agentOptions(),
- ])->layout('helpdesk::layouts.app.sidebar');
+ ])->layout('layouts.app', ['title' => __('Edit Helpdesk Ticket')]);
}
/**
diff --git a/Modules/Helpdesk/Livewire/TicketIndex.php b/Modules/Helpdesk/Livewire/TicketIndex.php
index 1f5ec24..6da2a10 100644
--- a/Modules/Helpdesk/Livewire/TicketIndex.php
+++ b/Modules/Helpdesk/Livewire/TicketIndex.php
@@ -101,11 +101,11 @@ final class TicketIndex extends Component
public function render(): View
{
- return view('helpdesk::livewire.ticket-index', [
+ return view('modules.helpdesk.livewire.ticket-index', [
'tickets' => $this->tickets(),
'statuses' => Status::query()->orderBy('sort_order')->get(),
'priorities' => Priority::query()->orderBy('sort_order')->get(),
- ])->layout('helpdesk::layouts.app.sidebar');
+ ])->layout('layouts.app', ['title' => __('Helpdesk Tickets')]);
}
private function resetTicketDeletionState(): void
diff --git a/Modules/Helpdesk/Livewire/TicketShow.php b/Modules/Helpdesk/Livewire/TicketShow.php
index cb81907..4f50039 100644
--- a/Modules/Helpdesk/Livewire/TicketShow.php
+++ b/Modules/Helpdesk/Livewire/TicketShow.php
@@ -320,12 +320,12 @@ final class TicketShow extends Component
public function render(): View
{
- return view('helpdesk::livewire.ticket-show', [
+ return view('modules.helpdesk.livewire.ticket-show', [
'statuses' => Status::query()->orderBy('sort_order')->get(),
'priorities' => Priority::query()->orderBy('sort_order')->get(),
'agents' => $this->agentOptions(),
'cannedResponses' => CannedResponse::query()->where('is_active', true)->orderBy('sort_order')->orderBy('name')->get(),
- ])->layout('helpdesk::layouts.app.sidebar');
+ ])->layout('layouts.app', ['title' => __('Helpdesk Ticket')]);
}
private function normaliseNullableInt(mixed $value): ?int
@@ -691,7 +691,7 @@ final class TicketShow extends Component
{
$user = Auth::user();
- return $user !== null && $user->isHelpdeskAdmin();
+ return $user !== null && (method_exists($user, 'isAdmin') ? $user->isAdmin() : (bool) ($user->helpdesk_admin ?? false));
}
private function buildCommentTree(Collection $grouped, ?int $parentId = null): Collection
diff --git a/Modules/Helpdesk/Livewire/TicketTimer.php b/Modules/Helpdesk/Livewire/TicketTimer.php
index 158584b..a66d797 100644
--- a/Modules/Helpdesk/Livewire/TicketTimer.php
+++ b/Modules/Helpdesk/Livewire/TicketTimer.php
@@ -154,7 +154,7 @@ class TicketTimer extends Component
*/
public function render()
{
- return view('helpdesk::livewire.ticket-timer');
+ return view('modules.helpdesk.livewire.ticket-timer');
}
/**
diff --git a/Modules/Helpdesk/Resources/assets/css/app.css b/Modules/Helpdesk/Resources/assets/css/app.css
index 3b441a3..c7c675e 100644
--- a/Modules/Helpdesk/Resources/assets/css/app.css
+++ b/Modules/Helpdesk/Resources/assets/css/app.css
@@ -5,7 +5,7 @@
* Tailwind scanner to discover module Blade classes.
*/
@source "../../views/**/*.blade.php";
-@source "../../../../../resources/themes/admin/views/modules/helpdesk/**/*.blade.php";
+@source "../../../../../resources/themes/backend/views/modules/helpdesk/**/*.blade.php";
@source "../../../Livewire/**/*.php";
.hd-helpdesk-surface .hd-btn,
diff --git a/Modules/Helpdesk/vite.config.js b/Modules/Helpdesk/vite.config.js
index b60523a..1d7f54d 100644
--- a/Modules/Helpdesk/vite.config.js
+++ b/Modules/Helpdesk/vite.config.js
@@ -2,6 +2,8 @@ import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import tailwindcss from '@tailwindcss/vite';
+console.log('[Helpdesk] Running Modules/Helpdesk/vite.config.js');
+
export default defineConfig({
build: {
emptyOutDir: true,
@@ -14,6 +16,7 @@ export default defineConfig({
laravel({
publicDirectory: '../../public',
buildDirectory: 'build/helpdesk',
+ hotFile: '../../public/hot-helpdesk',
input: [
'Resources/assets/css/app.css',
@@ -23,6 +26,7 @@ export default defineConfig({
refresh: [
'Resources/views/**',
'Livewire/**',
+ '../../resources/themes/backend/views/modules/helpdesk/**',
],
}),
],
diff --git a/package.json b/package.json
index 54a0533..4847df2 100644
--- a/package.json
+++ b/package.json
@@ -3,8 +3,10 @@
"private": true,
"type": "module",
"scripts": {
- "build": "vite build",
- "dev": "vite"
+ "build": "npm run build:backend && npm run build:helpdesk",
+ "build:backend": "vite build --config ./vite.config.js",
+ "build:helpdesk": "npm --prefix Modules/Helpdesk ci && npm --prefix Modules/Helpdesk run build",
+ "dev": "vite --config ./vite.config.js"
},
"dependencies": {
"@laravel/passkeys": "^0.2.0",
diff --git a/resources/themes/backend/assets/css/app.css b/resources/themes/backend/assets/css/app.css
index 87828d7..ecbf55a 100644
--- a/resources/themes/backend/assets/css/app.css
+++ b/resources/themes/backend/assets/css/app.css
@@ -2,13 +2,11 @@
@import '../../../../../vendor/livewire/flux/dist/flux.css';
@import './helpdesk.css';
-@source '../../views';
-@source '../../views/modules/helpdesk/**/*.blade.php';
-@source '../../../../../Modules/Helpdesk/Livewire/**/*.php';
-@source '../../../**/*.blade.php';
+@source '../../views/**/*.blade.php';
+@source '../../../../../Modules/Helpdesk/**/*.php';
@source '../../../../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
-@source '../../../../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
@source '../../../../../vendor/livewire/flux/stubs/**/*.blade.php';
+@source '../../../../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
@custom-variant dark (&:where(.dark, .dark *));
@@ -41,7 +39,6 @@
}
@layer base {
-
*,
::after,
::before,
@@ -56,7 +53,7 @@
}
[data-flux-label] {
- @apply !mb-0 !leading-tight;
+ @apply !mb-0 !leading-tight;
}
input:focus[data-flux-control],
@@ -64,7 +61,3 @@ textarea:focus[data-flux-control],
select:focus[data-flux-control] {
@apply outline-hidden ring-2 ring-accent ring-offset-2 ring-offset-accent-foreground;
}
-
-/* \[:where(&)\]:size-4 {
- @apply size-4;
-} */
diff --git a/resources/themes/backend/views/components/helpdesk-settings-simple.blade.php b/resources/themes/backend/views/components/helpdesk-settings-simple.blade.php
new file mode 100644
index 0000000..c842646
--- /dev/null
+++ b/resources/themes/backend/views/components/helpdesk-settings-simple.blade.php
@@ -0,0 +1,49 @@
+@props([
+ 'title',
+ 'items',
+ 'formPrefix',
+ 'saveMethod',
+ 'editMethod',
+ 'deleteMethod',
+ 'resetMethod',
+ 'nameField' => 'name',
+])
+
+
| + {{ __('Reference') }} + | ++ {{ __('Subject') }} + | ++ {{ __('Status') }} + | ++ {{ __('Priority') }} + | ++ {{ __('Agent') }} + | ++ {{ __('Actions') }} + | +
|---|---|---|---|---|---|
| + + {{ $ticket->reference }} + + | + +
+
+
+ {{ $ticket->subject }}
+
+
+
+
+ @if ($ticket->category)
+ {{ $ticket->category->name }}
+ @endif
+
+ @if ($ticket->project)
+ {{ $ticket->project->title }}
+ @endif
+
+ @if ($ticket->attachments_count)
+ {{ trans_choice(':count attachment|:count attachments', $ticket->attachments_count, ['count' => $ticket->attachments_count]) }}
+ @endif
+
+ |
+
+ + {{ $ticket->status?->name ?? '—' }} + | + ++ {{ $ticket->priority?->name ?? '—' }} + | + ++ {{ $ticket->agent_name ?? '—' }} + | + +
+
+
+ |
+
|
+ |
+ |||||
{{ $message }}
+ @endif +