diff --git a/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php b/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php index 25ebe9d5..3e9f7d1b 100644 --- a/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php +++ b/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php @@ -46,11 +46,13 @@ final class HelpdeskDatabaseSeeder extends Seeder foreach ([ ['name' => 'New', 'slug' => 'new', 'color' => 'blue', 'sort_order' => 5, 'is_closed' => false, 'is_default' => true], - ['name' => 'Open', 'slug' => 'open', 'color' => 'blue', 'sort_order' => 10, 'is_closed' => false, 'is_default' => false], - ['name' => 'In Progress', 'slug' => 'in-progress', 'color' => 'amber', 'sort_order' => 20, 'is_closed' => false, 'is_default' => false], - ['name' => 'Stalled', 'slug' => 'stalled', 'color' => 'red', 'sort_order' => 30, 'is_closed' => false, 'is_default' => false], - ['name' => 'On-Hold', 'slug' => 'on-hold', 'color' => 'purple', 'sort_order' => 40, 'is_closed' => false, 'is_default' => false], - ['name' => 'Closed', 'slug' => 'closed', 'color' => 'green', 'sort_order' => 90, 'is_closed' => true, 'is_default' => false], + ['name' => 'Open', 'slug' => 'open', 'color' => 'green', 'sort_order' => 10, 'is_closed' => false, 'is_default' => false], + ['name' => 'In Progress', 'slug' => 'in-progress', 'color' => 'indigo', 'sort_order' => 20, 'is_closed' => false, 'is_default' => false], + ['name' => 'Waiting Customer', 'slug' => 'waiting-customer', 'color' => 'amber', 'sort_order' => 30, 'is_closed' => false, 'is_default' => false], + ['name' => 'Waiting Third Party', 'slug' => 'waiting-third-party', 'color' => 'purple', 'sort_order' => 40, 'is_closed' => false, 'is_default' => false], + ['name' => 'Resolved', 'slug' => 'resolved', 'color' => 'green', 'sort_order' => 80, 'is_closed' => true, 'is_default' => false], + ['name' => 'Closed', 'slug' => 'closed', 'color' => 'gray', 'sort_order' => 90, 'is_closed' => true, 'is_default' => false], + ['name' => 'Cancelled', 'slug' => 'cancelled', 'color' => 'red', 'sort_order' => 100, 'is_closed' => true, 'is_default' => false], ] as $row) { Status::query()->updateOrCreate(['slug' => $row['slug']], $row); } @@ -64,9 +66,11 @@ final class HelpdeskDatabaseSeeder extends Seeder Priority::query()->where('is_default', true)->update(['is_default' => false]); foreach ([ - ['name' => 'High', 'slug' => 'high', 'color' => 'red', 'sort_order' => 10, 'is_default' => false], - ['name' => 'Medium', 'slug' => 'medium', 'color' => 'amber', 'sort_order' => 20, 'is_default' => true], - ['name' => 'Low', 'slug' => 'low', 'color' => 'green', 'sort_order' => 30, 'is_default' => false], + ['name' => 'Low', 'slug' => 'low', 'color' => 'gray', 'sort_order' => 10, 'is_default' => false], + ['name' => 'Normal', 'slug' => 'normal', 'color' => 'blue', 'sort_order' => 20, 'is_default' => true], + ['name' => 'High', 'slug' => 'high', 'color' => 'amber', 'sort_order' => 30, 'is_default' => false], + ['name' => 'Urgent', 'slug' => 'urgent', 'color' => 'red', 'sort_order' => 40, 'is_default' => false], + ['name' => 'Critical', 'slug' => 'critical', 'color' => 'red', 'sort_order' => 50, 'is_default' => false], ] as $row) { Priority::query()->updateOrCreate(['slug' => $row['slug']], $row); } diff --git a/Modules/Helpdesk/Livewire/SettingsManager.php b/Modules/Helpdesk/Livewire/SettingsManager.php index 34213ba8..155b2968 100644 --- a/Modules/Helpdesk/Livewire/SettingsManager.php +++ b/Modules/Helpdesk/Livewire/SettingsManager.php @@ -129,7 +129,7 @@ final class SettingsManager extends Component $data = $this->validate([ 'statusForm.name' => ['required', 'string', 'max:80'], 'statusForm.slug' => ['nullable', 'string', 'max:100'], - 'statusForm.color' => ['required', 'string', Rule::in(Color::keys())], + 'statusForm.color' => ['required', 'string', Color::validationRule()], 'statusForm.sort_order' => ['required', 'integer', 'min:0'], 'statusForm.is_closed' => ['boolean'], 'statusForm.is_default' => ['boolean'], @@ -170,7 +170,7 @@ final class SettingsManager extends Component $data = $this->validate([ 'priorityForm.name' => ['required', 'string', 'max:80'], 'priorityForm.slug' => ['nullable', 'string', 'max:100'], - 'priorityForm.color' => ['required', 'string', Rule::in(Color::keys())], + 'priorityForm.color' => ['required', 'string', Color::validationRule()], 'priorityForm.sort_order' => ['required', 'integer', 'min:0'], 'priorityForm.is_default' => ['boolean'], ])['priorityForm']; @@ -212,7 +212,7 @@ final class SettingsManager extends Component 'categoryForm.company_id' => ['nullable', 'integer'], 'categoryForm.name' => ['required', 'string', 'max:120'], 'categoryForm.slug' => ['nullable', 'string', 'max:140'], - 'categoryForm.color' => ['required', 'string', Rule::in(Color::keys())], + 'categoryForm.color' => ['required', 'string', Color::validationRule()], 'categoryForm.description' => ['nullable', 'string'], 'categoryForm.is_default' => ['boolean'], ])['categoryForm']; @@ -254,7 +254,7 @@ final class SettingsManager extends Component 'teamForm.company_id' => ['nullable', 'integer'], 'teamForm.name' => ['required', 'string', 'max:120'], 'teamForm.slug' => ['nullable', 'string', 'max:140'], - 'teamForm.color' => ['required', 'string', Rule::in(Color::keys())], + 'teamForm.color' => ['required', 'string', Color::validationRule()], 'teamForm.description' => ['nullable', 'string'], 'teamForm.is_default' => ['boolean'], ])['teamForm']; @@ -297,7 +297,7 @@ final class SettingsManager extends Component 'projectForm.team_id' => ['nullable', 'integer', 'exists:helpdesk_teams,id'], 'projectForm.title' => ['required', 'string', 'max:160'], 'projectForm.slug' => ['nullable', 'string', 'max:180'], - 'projectForm.color' => ['required', 'string', Rule::in(Color::keys())], + 'projectForm.color' => ['required', 'string', Color::validationRule()], 'projectForm.description' => ['nullable', 'string'], 'projectForm.is_default' => ['boolean'], ])['projectForm']; @@ -644,7 +644,7 @@ final class SettingsManager extends Component 'tagForm.company_id' => ['nullable', 'integer'], 'tagForm.name' => ['required', 'string', 'max:80'], 'tagForm.slug' => ['nullable', 'string', 'max:100'], - 'tagForm.color' => ['required', 'string', Rule::in(Color::keys())], + 'tagForm.color' => ['required', 'string', Color::validationRule()], ])['tagForm']; $data['slug'] = $this->slug($data['slug'] ?: $data['name']); $this->persistSettingModel(Tag::class, $this->tagForm['id'], $data); diff --git a/Modules/Helpdesk/Resources/views/components/colour-badge.blade.php b/Modules/Helpdesk/Resources/views/components/colour-badge.blade.php index 78c488b6..c65e0651 100644 --- a/Modules/Helpdesk/Resources/views/components/colour-badge.blade.php +++ b/Modules/Helpdesk/Resources/views/components/colour-badge.blade.php @@ -1,10 +1,16 @@ @props([ 'color' => 'gray', + 'label' => null, ]) +@php + $background = \Modules\Helpdesk\Support\Color::css($color); + $foreground = \Modules\Helpdesk\Support\Color::text($color); +@endphp + class('inline-flex items-center rounded-full px-2.5 py-1 text-xs font-semibold text-white shadow-sm ring-1 ring-white/20') }} - style="background-color: {{ \Modules\Helpdesk\Support\Color::css($color) }};" + {{ $attributes->class('inline-flex items-center rounded-full px-2.5 py-1 text-xs font-semibold shadow-sm ring-1 ring-zinc-900/10') }} + style="background-color: {{ $background }}; color: {{ $foreground }};" > - {{ $slot }} + {{ $label ?? $slot }} diff --git a/Modules/Helpdesk/Resources/views/components/colour-select.blade.php b/Modules/Helpdesk/Resources/views/components/colour-select.blade.php index cc3e9c6a..fbdd3ded 100644 --- a/Modules/Helpdesk/Resources/views/components/colour-select.blade.php +++ b/Modules/Helpdesk/Resources/views/components/colour-select.blade.php @@ -4,31 +4,68 @@ 'options' => [], ]) -