1. Go to this page and download the library: Download wezlo/filament-kanban library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
wezlo / filament-kanban example snippets
use Wezlo\FilamentKanban\FilamentKanbanPlugin;
->plugins([
FilamentKanbanPlugin::make(),
])
use Wezlo\FilamentKanban\Concerns\HasKanbanBoard;
use Wezlo\FilamentKanban\KanbanBoard;
class ListLeads extends ListRecords
{
use HasKanbanBoard;
protected static string $resource = LeadResource::class;
public function kanban(KanbanBoard $kanban): KanbanBoard
{
return $kanban
->enumColumn('status', LeadStatus::class)
->cardTitle(fn ($record) => $record->title)
->cardDescription(fn ($record) => $record->assignee?->name);
}
}
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Icons\Heroicon;
use Wezlo\FilamentKanban\Contracts\KanbanStatusEnum;
enum LeadStatus: string implements HasIcon, KanbanStatusEnum
{
case New = 'new';
case Contacted = 'contacted';
case SiteVisit = 'site_visit';
case Negotiation = 'negotiation';
case Won = 'won';
case Lost = 'lost';
// Required by HasLabel (via KanbanStatusEnum)
public function getLabel(): string
{
return match ($this) {
self::New => 'New',
self::Contacted => 'Contacted',
// ...
};
}
// Required by HasColor (via KanbanStatusEnum)
public function getColor(): string
{
return match ($this) {
self::New => 'info',
self::Contacted => 'warning',
// ...
};
}
// Optional: HasIcon
public function getIcon(): Heroicon
{
return match ($this) {
self::New => Heroicon::Sparkles,
// ...
};
}
// Define which statuses each status can transition to.
// Return null to allow all transitions.
public function getAllowedTransitions(): ?array
{
return match ($this) {
self::New => [self::Contacted, self::Lost],
self::Contacted => [self::SiteVisit, self::Lost],
self::SiteVisit => [self::Negotiation, self::Lost],
self::Negotiation => [self::Won, self::Lost],
self::Won => null, // no constraints
self::Lost => null,
};
}
// Set max cards per column. Return null for unlimited.
public function getWipLimit(): ?int
{
return match ($this) {
self::Negotiation => 10,
default => null,
};
}
}