1. Go to this page and download the library: Download a909m/filament-statefusion 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/ */
a909m / filament-statefusion example snippets
// app/States/OrderState.php
use A909M\FilamentStateFusion\Concerns\StateFusionInfo;
use A909M\FilamentStateFusion\Contracts\HasFilamentStateFusion;
use Spatie\ModelStates\State;
use Spatie\ModelStates\StateConfig;
abstract class OrderState extends State implements HasFilamentStateFusion
{
use StateFusionInfo;
public static function config(): StateConfig
{
return parent::config()
->default(PendingState::class)
->allowTransition(PendingState::class, ProcessingState::class)
->allowTransition(ProcessingState::class, ShippedState::class)
->allowTransition(ShippedState::class, DeliveredState::class)
->allowTransition([PendingState::class, ProcessingState::class], CancelledState::class);
}
}
// app/Models/Order.php
use App\Models\States\OrderState;
use Illuminate\Database\Eloquent\Model;
use App\States\OrderState;
class Order extends Model
{
use HasStates;
protected $casts = [
'status' => OrderState::class,
];
}
// app/Filament/Resources/OrderResource.php
use A909M\FilamentStateFusion\Tables\Columns\StateFusionSelectColumn;
use A909M\FilamentStateFusion\Tables\Filters\StateFusionSelectFilter;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables\Table;
class OrderResource extends Resource
{
// ...
public static function table(Table $table): Table
{
return $table
->columns([
StateFusionSelectColumn::make('status'),
])
->filters([
StateFusionSelectFilter::make('status'),
]);
}
}
use A909M\FilamentStateFusion\Forms\Components\StateFusionSelect;
use A909M\FilamentStateFusion\Forms\Components\StateFusionRadio;
use A909M\FilamentStateFusion\Forms\Components\StateFusionToggleButtons;
// Dropdown select
StateFusionSelect::make('status'),
// Radio buttons with descriptions
StateFusionRadio::make('status'),
// Toggle buttons with colors and icons
StateFusionToggleButtons::make('status'),
use A909M\FilamentStateFusion\Tables\Columns\StateFusionSelectColumn;
StateFusionSelectColumn::make('status'),
use Filament\Tables\Columns\TextColumn;
TextColumn::make('status')
->badge(),
use A909M\FilamentStateFusion\Tables\Filters\StateFusionSelectFilter;
StateFusionSelectFilter::make('status'),
use A909M\FilamentStateFusion\Tables\Actions\StateFusionTableAction;
StateFusionTableAction::make('approve')
->transitionTo(ApprovedState::class),
use A909M\FilamentStateFusion\Tables\Actions\StateFusionBulkAction;
StateFusionBulkAction::make('approve')
->transition(PendingState::class,ApprovedState::class),
use Filament\Infolists\Components\TextEntry;
TextEntry::make('status')
->badge(),
use A909M\FilamentStateFusion\Actions\StateFusionAction;
StateFusionAction::make('approve')
->transitionTo(ApprovedState::class),
// Using a different attribute name
StateFusionSelect::make('approval_status')
->attribute('approval_status'),
// Dynamic attribute selection
StateFusionAction::make('transition')
->attribute('state')
->transitionTo(ApprovedState::class),
use Filament\Support\Colors\Color;
use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasDescription;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;
final class CancelledState extends OrderState implements HasDescription, HasColor, HasIcon, HasLabel
{
public function getLabel(): string
{
return __('Order Cancelled');
}
public function getColor(): array
{
return Color::Red;
}
public function getIcon(): string
{
return 'heroicon-o-x-circle';
}
public function getDescription(): ?string
{
return 'Order cancelled, transaction reversed.';
}
}
use Filament\Support\Colors\Color;
use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;
use Spatie\ModelStates\Transition;
final class ToCancelled extends Transition implements HasLabel, HasColor, HasIcon
{
public function getLabel(): string
{
return __('Mark as Cancelled');
}
public function getColor(): array
{
return Color::Red;
}
public function getIcon(): string
{
return 'heroicon-o-x-circle';
}
}
use Filament\Forms\Components\Textarea;
use Filament\Support\Colors\Color;
use Filament\Support\Contracts\{HasLabel, HasColor, HasIcon};
use Spatie\ModelStates\Transition;
final class CancelOrder extends Transition implements HasLabel, HasColor, HasIcon
{
public function __construct(
private Order $order,
private ?array $data = null
) {}
public function handle(): Order
{
$this->order->state = new CancelledState($this->order);
$this->order->cancellation_reason = $this->data['reason'];
$this->order->cancelled_at = now();
$this->order->save();
return $this->order;
}
public function form(): array
{
return [
Textarea::make('reason')
->label('Cancellation Reason')
->placeholder('Why are you cancelling this order?')
->
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.