Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 69 additions & 37 deletions app/Http/Livewire/Administration/TicketPriorities.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,67 +3,98 @@
namespace App\Http\Livewire\Administration;

use App\Models\TicketPriority;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\HtmlString;
use Livewire\Component;

class TicketPriorities extends Component implements HasForms
class TicketPriorities extends Component implements HasTable
{
use InteractsWithForms;
use InteractsWithTable;

public $search;
public $selectedPriority;

protected $listeners = ['prioritySaved', 'priorityDeleted'];

public function mount(): void
public function render()
{
$this->form->fill();
return view('livewire.administration.ticket-priorities');
}

public function render()
/**
* Table query definition
*
* @return Builder|Relation
*/
protected function getTableQuery(): Builder|Relation
{
$query = TicketPriority::query();
if ($this->search) {
$query->where('title', 'like', '%' . $this->search . '%')
->orWhere('text_color', 'like', '%' . $this->search . '%')
->orWhere('bg_color', 'like', '%' . $this->search . '%')
->orWhere('icon', 'like', '%' . $this->search . '%');
}
$priorities = $query->paginate();
return view('livewire.administration.ticket-priorities', compact('priorities'));
return TicketPriority::query();
}

/**
* Form schema definition
* Table definition
*
* @return array
*/
protected function getFormSchema(): array
protected function getTableColumns(): array
{
return [
Grid::make(1)
->schema([
TextInput::make('search')
->label(__('Search for tickets priorities'))
->disableLabel()
->type('search')
->placeholder(__('Search for tickets priorities')),
]),
TextColumn::make('title')
->label(__('Title'))
->searchable()
->sortable()
->formatStateUsing(fn(TicketPriority $record) => new HtmlString('
<span class="px-2 py-1 rounded-full text-sm flex items-center gap-2" style="color: ' . $record->text_color . '; background-color: ' . $record->bg_color . '">
<i class="fa ' . $record->icon . '"></i>' . $record->title . '
</span>
')),

TextColumn::make('created_at')
->label(__('Created at'))
->sortable()
->searchable()
->dateTime(),
];
}

/**
* Search for tickets priorities
* Table actions definition
*
* @return void
* @return array
*/
protected function getTableActions(): array
{
return [
Action::make('edit')
->icon('heroicon-o-pencil')
->link()
->label(__('Edit priority'))
->action(fn(TicketPriority $record) => $this->updatePriority($record->id))
];
}

/**
* Table default sort column definition
*
* @return string|null
*/
protected function getDefaultTableSortColumn(): ?string
{
return 'created_at';
}

/**
* Table default sort direction definition
*
* @return string|null
*/
public function search(): void
protected function getDefaultTableSortDirection(): ?string
{
$data = $this->form->getState();
$this->search = $data['search'] ?? null;
return 'desc';
}

/**
Expand Down Expand Up @@ -105,8 +136,8 @@ public function cancelPriority()
*
* @return void
*/
public function prioritySaved() {
$this->search();
public function prioritySaved()
{
$this->cancelPriority();
}

Expand All @@ -115,7 +146,8 @@ public function prioritySaved() {
*
* @return void
*/
public function priorityDeleted() {
public function priorityDeleted()
{
$this->prioritySaved();
}
}
101 changes: 71 additions & 30 deletions app/Http/Livewire/Administration/TicketStatuses.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,66 +3,108 @@
namespace App\Http\Livewire\Administration;

use App\Models\TicketStatus;
use App\Models\User;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\BadgeColumn;
use Filament\Tables\Columns\BooleanColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\HtmlString;
use Livewire\Component;

class TicketStatuses extends Component implements HasForms
class TicketStatuses extends Component implements HasTable
{
use InteractsWithForms;
use InteractsWithTable;

public $search;
public $selectedStatus;

protected $listeners = ['statusSaved', 'statusDeleted'];

public function mount(): void
public function render()
{
$this->form->fill();
return view('livewire.administration.ticket-statuses');
}

public function render()
/**
* Table query definition
*
* @return Builder|Relation
*/
protected function getTableQuery(): Builder|Relation
{
$query = TicketStatus::query();
if ($this->search) {
$query->where('title', 'like', '%' . $this->search . '%')
->orWhere('text_color', 'like', '%' . $this->search . '%')
->orWhere('bg_color', 'like', '%' . $this->search . '%');
}
$statuses = $query->paginate();
return view('livewire.administration.ticket-statuses', compact('statuses'));
return TicketStatus::query();
}

/**
* Form schema definition
* Table definition
*
* @return array
*/
protected function getFormSchema(): array
protected function getTableColumns(): array
{
return [
Grid::make(1)
->schema([
TextInput::make('search')
->label(__('Search for tickets statuses'))
->disableLabel()
->type('search')
->placeholder(__('Search for tickets statuses')),
]),
TextColumn::make('title')
->label(__('Title'))
->searchable()
->sortable()
->formatStateUsing(fn (TicketStatus $record) => new HtmlString('
<span class="px-2 py-1 rounded-full text-sm" style="color: ' . $record->text_color . '; background-color: ' . $record->bg_color . '">' . $record->title . '</span>
')),

BooleanColumn::make('default')
->label(__('Default status'))
->sortable()
->searchable(),

TextColumn::make('created_at')
->label(__('Created at'))
->sortable()
->searchable()
->dateTime(),
];
}

/**
* Search for tickets statuses
* Table actions definition
*
* @return void
* @return array
*/
protected function getTableActions(): array
{
return [
Action::make('edit')
->icon('heroicon-o-pencil')
->link()
->label(__('Edit status'))
->action(fn(TicketStatus $record) => $this->updateStatus($record->id))
];
}

/**
* Table default sort column definition
*
* @return string|null
*/
protected function getDefaultTableSortColumn(): ?string
{
return 'created_at';
}

/**
* Table default sort direction definition
*
* @return string|null
*/
public function search(): void
protected function getDefaultTableSortDirection(): ?string
{
$data = $this->form->getState();
$this->search = $data['search'] ?? null;
return 'desc';
}

/**
Expand Down Expand Up @@ -105,7 +147,6 @@ public function cancelStatus()
* @return void
*/
public function statusSaved() {
$this->search();
$this->cancelStatus();
}

Expand Down
Loading