Skip to content
Draft
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
28 changes: 28 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,34 @@

All notable changes to `filament-workflow-manager` will be documented in this file.

## 2.0.0 - 2024

### Breaking Changes
- **Filament v3 Compatibility**: Updated package to support Filament v3
- **Plugin Registration**: Changed from automatic resource registration to plugin-based registration
- **API Changes**: Updated all classes to use Filament v3 API patterns

### Changes
- Updated composer dependency from `filament/filament: ^2.13` to `filament/filament: ^3.0`
- Replaced `PluginServiceProvider` with `PackageServiceProvider` and created dedicated `FilamentWorkflowManagerPlugin`
- Updated resource form/table method signatures for v3 compatibility
- Changed page action methods from `getActions()` to `getHeaderActions()`
- Updated Livewire components to use new notification API (`Notification::make()` instead of `Filament::notify()`)
- Changed event emission from `$this->emit()` to `$this->dispatch()`
- Updated relation managers to extend `RelationManager` instead of specific typed managers
- Replaced deprecated `Card` component with `Section` component
- Updated icon from `heroicon-o-collection` to `heroicon-o-rectangle-stack`

### Migration Guide
1. Update your composer requirement to use version `^2.0`
2. Add the plugin to your Filament panel provider:
```php
->plugins([
FilamentWorkflowManagerPlugin::make(),
])
```
3. Remove the old resources/pages configuration from your panel provider if you were manually registering them

## 1.1.8 - 2022-07-07

- Permisions
Expand Down
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

This package provides a Filament resource where you can configure and manage your workflows, and also provides some functions, helpers, traits, ... to help you attach statuses to your configured models.

> **Note**: This package has been upgraded to support Filament v3. For Filament v2 compatibility, please use version 1.x of this package.

![Filament Workflow Manager](filament-workflow-manager-demo.jpg)


Expand All @@ -28,6 +30,22 @@ php artisan vendor:publish --tag="filament-workflow-manager-migrations"
php artisan vendor:publish --tag="filament-workflow-manager-config"
```

**Register the plugin** (Filament v3)
Add the plugin to your panel provider (e.g., `app/Providers/Filament/AdminPanelProvider.php`):

```php
use Heloufir\FilamentWorkflowManager\FilamentWorkflowManagerPlugin;

public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugins([
FilamentWorkflowManagerPlugin::make(),
]);
}
```

## Quick start
Please read the following steps to understand how to use this package.
[Quick start steps](QUICKSTART.md)
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
],
"homepage": "https://github.com/heloufir/filament-workflow-manager",
"require": {
"filament/filament": "^2.13"
"filament/filament": "^3.0"
},
"license": "MIT",
"autoload": {
Expand Down
4 changes: 2 additions & 2 deletions src/Core/WorkflowResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ protected function afterSave(): void
$this->record->refresh();
$this->saveHistory($old_status->id);
if ($old_status->id !== $this->record->workflow_status->workflow_status_id) {
$this->emit('WorkflowStatusUpdated', [
$this->dispatch('WorkflowStatusUpdated', [
'type' => 'update',
'old_status' => $old_status,
'new_status' => $this->record->workflow_status->status,
Expand All @@ -30,7 +30,7 @@ protected function afterCreate(): void
{
call_user_func($this->getModel() . '::initiate_default_status', $this->record->id);
$this->saveHistory();
$this->emit('WorkflowStatusUpdated', [
$this->dispatch('WorkflowStatusUpdated', [
'type' => 'create',
'old_status' => null,
'new_status' => $this->record->workflow_status->workflow_status,
Expand Down
39 changes: 39 additions & 0 deletions src/FilamentWorkflowManagerPlugin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace Heloufir\FilamentWorkflowManager;

use Filament\Contracts\Plugin;
use Filament\Panel;

class FilamentWorkflowManagerPlugin implements Plugin
{
public function getId(): string
{
return 'filament-workflow-manager';
}

public function register(Panel $panel): void
{
$panel
->resources(config('filament-workflow-manager.resources'))
->pages(config('filament-workflow-manager.pages'));
}

public function boot(Panel $panel): void
{
//
}

public static function make(): static
{
return app(static::class);
}

public static function get(): static
{
/** @var static $plugin */
$plugin = filament(app(static::class)->getId());

return $plugin;
}
}
23 changes: 3 additions & 20 deletions src/FilamentWorkflowManagerServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
use Heloufir\FilamentWorkflowManager\Http\Livewire\WorkflowManagerAddStatus;
use Heloufir\FilamentWorkflowManager\Http\Livewire\WorkflowManagerDelete;
use Heloufir\FilamentWorkflowManager\Http\Livewire\WorkflowManagerEdit;
use Filament\PluginServiceProvider;
use Heloufir\FilamentWorkflowManager\Resources\UserResource\WorkflowPermissions;
use Spatie\LaravelPackageTools\Package;
use Spatie\LaravelPackageTools\PackageServiceProvider;
use Livewire\Livewire;

class FilamentWorkflowManagerServiceProvider extends PluginServiceProvider
class FilamentWorkflowManagerServiceProvider extends PackageServiceProvider
{

public function configurePackage(Package $package): void
Expand Down Expand Up @@ -42,7 +42,7 @@ public function configurePackage(Package $package): void
$package->hasViews();

// Helpers file
if (file_exists($file = __DIR__ . '/../src/helpers.php')) {
if (file_exists($file = __DIR__ . '/helpers.php')) {
require $file;
}
}
Expand All @@ -62,21 +62,4 @@ public function packageBooted(): void
}
}

protected function getResources(): array
{
return config('filament-workflow-manager.resources');
}

protected function getPages(): array
{
return config('filament-workflow-manager.pages');
}

protected function getStyles(): array
{
return array_merge([
__DIR__ . '/../dist/app.css'
], config('filament-workflow-manager.styles'));
}

}
16 changes: 11 additions & 5 deletions src/Http/Livewire/WorkflowManagerAdd.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

namespace Heloufir\FilamentWorkflowManager\Http\Livewire;

use Filament\Facades\Filament;
use Filament\Forms\Components;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Heloufir\FilamentWorkflowManager\Models\Workflow;
use Heloufir\FilamentWorkflowManager\Models\WorkflowModel;
use Heloufir\FilamentWorkflowManager\Models\WorkflowStatus;
Expand Down Expand Up @@ -64,20 +64,26 @@ public function submit()
{
$data = $this->form->getState();
if (WorkflowModel::where('workflow_id', $this->workflow->id)->where('status_from_id', $data['status_from_id'])->where('status_to_id', $data['status_to_id'])->count()) {
Filament::notify('warning', __('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.add.messages.duplicated'));
Notification::make()
->warning()
->title(__('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.add.messages.duplicated'))
->send();
} else {
$model = new WorkflowModel();
$model->workflow_id = $this->workflow->id;
$model->status_from_id = $data['status_from_id'];
$model->status_to_id = $data['status_to_id'];
$model->save();
Filament::notify('success', __('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.add.messages.submitted'));
$this->emit('close_workflow_manager_add_dialog');
Notification::make()
->success()
->title(__('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.add.messages.submitted'))
->send();
$this->dispatch('close_workflow_manager_add_dialog');
}
}

public function cancel()
{
$this->emit('close_workflow_manager_add_dialog');
$this->dispatch('close_workflow_manager_add_dialog');
}
}
11 changes: 7 additions & 4 deletions src/Http/Livewire/WorkflowManagerAddStatus.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

namespace Heloufir\FilamentWorkflowManager\Http\Livewire;

use Filament\Facades\Filament;
use Filament\Forms\Components;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Heloufir\FilamentWorkflowManager\Models\WorkflowStatus;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Builder;
Expand Down Expand Up @@ -59,12 +59,15 @@ public function submit()
$model->color = $data['color'];
$model->is_end = $data['is_end'];
$model->save();
Filament::notify('success', __('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.add_status.messages.submitted'));
$this->emit('close_add_status');
Notification::make()
->success()
->title(__('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.add_status.messages.submitted'))
->send();
$this->dispatch('close_add_status');
}

public function cancel()
{
$this->emit('close_add_status');
$this->dispatch('close_add_status');
}
}
11 changes: 7 additions & 4 deletions src/Http/Livewire/WorkflowManagerDelete.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Heloufir\FilamentWorkflowManager\Http\Livewire;

use Filament\Facades\Filament;
use Filament\Notifications\Notification;
use Heloufir\FilamentWorkflowManager\Models\WorkflowModel;
use Livewire\Component;

Expand All @@ -19,12 +19,15 @@ public function render()
public function submit()
{
$this->record->delete();
Filament::notify('success', __('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.delete.messages.deleted'));
$this->emit('close_workflow_manager_delete_dialog');
Notification::make()
->success()
->title(__('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.delete.messages.deleted'))
->send();
$this->dispatch('close_workflow_manager_delete_dialog');
}

public function cancel()
{
$this->emit('close_workflow_manager_delete_dialog');
$this->dispatch('close_workflow_manager_delete_dialog');
}
}
16 changes: 11 additions & 5 deletions src/Http/Livewire/WorkflowManagerEdit.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
namespace Heloufir\FilamentWorkflowManager\Http\Livewire;

use Closure;
use Filament\Facades\Filament;
use Filament\Forms\Components;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Heloufir\FilamentWorkflowManager\Models\WorkflowModel;
use Heloufir\FilamentWorkflowManager\Models\WorkflowStatus;
use Illuminate\Database\Schema\Builder;
Expand Down Expand Up @@ -53,19 +53,25 @@ public function submit()
{
$data = $this->form->getState();
if ($data['is_end'] && WorkflowModel::where('workflow_id', $this->record->workflow->id)->where('status_from_id', $this->record->status_to_id)->count()) {
Filament::notify('warning', __('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.edit.messages.cannot_end_workflow'));
Notification::make()
->warning()
->title(__('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.edit.messages.cannot_end_workflow'))
->send();
} else {
$this->record->status_to->name = $data['name'];
$this->record->status_to->color = $data['color'];
$this->record->status_to->is_end = $data['is_end'];
$this->record->status_to->save();
Filament::notify('success', __('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.edit.messages.submitted'));
$this->emit('close_workflow_manager_edit_dialog');
Notification::make()
->success()
->title(__('filament-workflow-manager::filament-workflow-manager.resources.workflow.page.workflow.modal.edit.messages.submitted'))
->send();
$this->dispatch('close_workflow_manager_edit_dialog');
}
}

public function cancel()
{
$this->emit('close_workflow_manager_edit_dialog');
$this->dispatch('close_workflow_manager_edit_dialog');
}
}
20 changes: 10 additions & 10 deletions src/Pages/WorkflowHistory.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Filters\MultiSelectFilter;
use Filament\Tables\Table;
use Heloufir\FilamentWorkflowManager\Models\WorkflowStatus;
use Illuminate\Database\Eloquent\Builder;
use Heloufir\FilamentWorkflowManager\Models\WorkflowHistory as WorkflowHistoryModel;
Expand Down Expand Up @@ -51,6 +52,15 @@ public function mount($id, $model)
$this->modelable_type = $model;
}

public function table(Table $table): Table
{
return $table
->query($this->getTableQuery())
->columns($this->getTableColumns())
->filters($this->getTableFilters())
->defaultSort('executed_at', 'desc');
}

protected function getTableQuery(): Builder
{
$query = WorkflowHistoryModel::query();
Expand Down Expand Up @@ -100,14 +110,4 @@ protected function getTableFilters(): array
})
];
}

protected function getDefaultTableSortColumn(): ?string
{
return 'executed_at';
}

protected function getDefaultTableSortDirection(): ?string
{
return 'desc';
}
}
8 changes: 4 additions & 4 deletions src/Resources/UserResource/WorkflowPermissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

namespace Heloufir\FilamentWorkflowManager\Resources\UserResource;

use Filament\Resources\RelationManagers\BelongsToManyRelationManager;
use Filament\Resources\Table;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Table;
use Filament\Tables\Columns\TagsColumn;
use Filament\Tables\Columns\TextColumn;
use Illuminate\Database\Eloquent\Model;

class WorkflowPermissions extends BelongsToManyRelationManager
class WorkflowPermissions extends RelationManager
{
protected static string $relationship = 'workflow_permissions';

Expand All @@ -26,7 +26,7 @@ protected static function getRecordLabel(): string
return __('filament-workflow-manager::filament-workflow-manager.resources.permissions.user-relation.label');
}

public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
Expand Down
Loading