Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch Status from Boolean to Enum #18

Merged
merged 3 commits into from
Dec 21, 2023
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
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
}
],
"require": {
"php": "^8.0",
"php": "^8.1",
"awcodes/filament-table-repeater": "^2.0.4",
"filament/filament": "^3.0.47",
"spatie/laravel-package-tools": "^1.13.5",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class ChangeStatusTypeInScheduleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table(Config::get('filament-database-schedule.table.schedules', 'schedules'), function (Blueprint $table) {
$table->enum('new_status', ['active', 'inactive', 'trashed'])->default('active')->after('status');
});

DB::table(Config::get('filament-database-schedule.table.schedules', 'schedules'))->where('status', 0)->update(['new_status' => 'inactive']);
DB::table(Config::get('filament-database-schedule.table.schedules', 'schedules'))->where('status', 1)->update(['new_status' => 'active']);
DB::table(Config::get('filament-database-schedule.table.schedules', 'schedules'))->where('status', 3)->update(['new_status' => 'trashed']);

Schema::table(Config::get('filament-database-schedule.table.schedules', 'schedules'), function (Blueprint $table) {
$table->dropColumn('status');
$table->renameColumn('new_status', 'status');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table(Config::get('filament-database-schedule.table.schedules', 'schedules'), function (Blueprint $table) {
$table->boolean('old_status')->default(true)->after('status');
});

DB::table(Config::get('filament-database-schedule.table.schedules', 'schedules'))->where('status', 'inactive')->update(['old_status' => 0]);
DB::table(Config::get('filament-database-schedule.table.schedules', 'schedules'))->where('status', 'active')->update(['old_status' => 1]);
DB::table(Config::get('filament-database-schedule.table.schedules', 'schedules'))->where('status', 'trashed')->update(['old_status' => 3]);

Schema::table(Config::get('filament-database-schedule.table.schedules', 'schedules'), function (Blueprint $table) {
$table->dropColumn('status');
$table->renameColumn('old_status', 'status');
});
}
}
41 changes: 41 additions & 0 deletions src/Enums/Status.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace HusamTariq\FilamentDatabaseSchedule\Enums;

use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;

enum Status: string implements HasIcon, HasColor, HasLabel {

case Active = 'active';
case Inactive = 'inactive';
case Trashed = 'trashed';

public function getColor(): string | array | null
{
return match ($this) {
self::Active => 'success',
self::Inactive => 'warning',
self::Trashed => 'danger',
};
}

public function getIcon(): ?string
{
return match ($this) {
self::Active => 'heroicon-o-check-circle',
self::Inactive => 'heroicon-o-document',
self::Trashed => 'heroicon-o-x-circle',
};
}

public function getLabel(): ?string
{
return match ($this) {
self::Active => __('filament-database-schedule::schedule.status.active'),
self::Inactive => __('filament-database-schedule::schedule.status.inactive'),
self::Trashed => __('filament-database-schedule::schedule.status.trashed'),
};
}
}
51 changes: 16 additions & 35 deletions src/Filament/Resources/ScheduleResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Filament\Tables;
use Filament\Tables\Columns\Column;
use Filament\Tables\Table;
use HusamTariq\FilamentDatabaseSchedule\Enums\Status;
use HusamTariq\FilamentDatabaseSchedule\Filament\Columns\ActionGroup;
use HusamTariq\FilamentDatabaseSchedule\Filament\Columns\ScheduleArguments;
use HusamTariq\FilamentDatabaseSchedule\Filament\Columns\ScheduleOptions;
Expand Down Expand Up @@ -157,34 +158,11 @@ public static function table(Table $table): Table
Tables\Columns\TextColumn::make('options')->label(__('filament-database-schedule::schedule.fields.options'))->searchable()->sortable()->getStateUsing(fn(Model $record)=>$record->getOptions())->separator(',')->badge(),
Tables\Columns\TextColumn::make('expression')->label(__('filament-database-schedule::schedule.fields.expression'))->searchable()->sortable(),
Tables\Columns\TextColumn::make('environments')->label(__('filament-database-schedule::schedule.fields.environments'))->separator(',')->searchable()->sortable()->badge()->toggleable(isToggledHiddenByDefault: false),
Tables\Columns\TextColumn::make('status')->formatStateUsing(static function ($state): ?string {
switch ($state) {
case Schedule::STATUS_INACTIVE:
return __('filament-database-schedule::schedule.status.inactive');
break;

case Schedule::STATUS_TRASHED:
return __('filament-database-schedule::schedule.status.trashed');
break;

case Schedule::STATUS_ACTIVE:
return __('filament-database-schedule::schedule.status.active');
break;

default:
return $state;
}
})->icons([
'heroicon-o-x-mark',
'heroicon-o-document' => Schedule::STATUS_INACTIVE,
'heroicon-o-x-circle' => Schedule::STATUS_TRASHED,
'heroicon-o-check-circle' => Schedule::STATUS_ACTIVE,
])
->colors([
'warning' => Schedule::STATUS_INACTIVE,
'success' => Schedule::STATUS_ACTIVE,
'danger' => Schedule::STATUS_TRASHED,
])->label(__('filament-database-schedule::schedule.fields.status'))->searchable()->sortable()->toggleable(isToggledHiddenByDefault: false),
Tables\Columns\TextColumn::make('status')
->label(__('filament-database-schedule::schedule.fields.status'))
->searchable()
->sortable()
->toggleable(isToggledHiddenByDefault: false),
Tables\Columns\TextColumn::make('created_at')->label(__('filament-database-schedule::schedule.fields.created_at'))->searchable()->sortable()
->dateTime()->wrap()->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')->getStateUsing(fn ($record) => $record->created_at == $record->updated_at ? __('filament-database-schedule::schedule.fields.never') : $record->updated_at)
Expand All @@ -211,14 +189,17 @@ public static function table(Table $table): Table
Tables\Actions\RestoreAction::make()->tooltip(__('filament-actions::restore.single.label')),
Tables\Actions\DeleteAction::make()->tooltip(__('filament-actions::delete.single.label')),
Tables\Actions\ForceDeleteAction::make()->tooltip(__('filament-support::actions/force-delete.single.label')),
Tables\Actions\Action::make('toggle')->disabled(fn ($record) => $record->trashed())
->icon(fn ($record) => $record->status == Schedule::STATUS_ACTIVE ? 'schedule-pause-fill' : 'schedule-play-fill')->color(fn ($record) => $record->status == Schedule::STATUS_ACTIVE ? 'warning' : 'success')->action(function ($record): void {
if ($record->status == Schedule::STATUS_ACTIVE)
$record->status = Schedule::STATUS_INACTIVE;
else if ($record->status == Schedule::STATUS_INACTIVE)
$record->status = Schedule::STATUS_ACTIVE;
Tables\Actions\Action::make('toggle')
->disabled(fn ($record) => $record->trashed())
->icon(fn ($record) => $record->status === Status::Active ? 'schedule-pause-fill' : 'schedule-play-fill')
->color(fn ($record) => $record->status === Status::Active ? 'warning' : 'success')
->action(function ($record): void {
if ($record->status === Status::Active)
$record->status = Status::Inactive;
else if ($record->status === Status::Inactive)
$record->status = Status::Active;
$record->save();
})->tooltip(fn ($record) => $record->status == Schedule::STATUS_ACTIVE ? __('filament-database-schedule::schedule.buttons.inactivate') : __('filament-database-schedule::schedule.buttons.activate')),
})->tooltip(fn ($record) => $record->status === Status::Active ? __('filament-database-schedule::schedule.buttons.inactivate') : __('filament-database-schedule::schedule.buttons.activate')),
Tables\Actions\ViewAction::make()->icon('schedule-history')->color('gray')->tooltip(__('filament-database-schedule::schedule.buttons.history')),
])

Expand Down
10 changes: 4 additions & 6 deletions src/Models/Schedule.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace HusamTariq\FilamentDatabaseSchedule\Models;

use HusamTariq\FilamentDatabaseSchedule\Enums\Status;
use Illuminate\Console\Scheduling\ManagesFrequencies;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
Expand All @@ -12,10 +13,6 @@ class Schedule extends Model
use ManagesFrequencies;
use SoftDeletes;

public const STATUS_INACTIVE = 0;
public const STATUS_ACTIVE = 1;
public const STATUS_TRASHED = 2;

/**
* The database table used by the model.
*
Expand Down Expand Up @@ -58,6 +55,7 @@ class Schedule extends Model
'options' => 'array',
'options_with_value' => 'array',
'environments' => 'array',
'status' => Status::class,
];

/**
Expand All @@ -80,12 +78,12 @@ public function histories()

public function scopeInactive($query)
{
return $query->where('status', false);
return $query->where('status', Status::Inactive);
}

public function scopeActive($query)
{
return $query->where('status', true);
return $query->where('status', Status::Active);
}

public function getArguments(): array
Expand Down
5 changes: 3 additions & 2 deletions src/Observer/ScheduleObserver.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace HusamTariq\FilamentDatabaseSchedule\Observer;

use HusamTariq\FilamentDatabaseSchedule\Enums\Status;
use HusamTariq\FilamentDatabaseSchedule\Http\Services\ScheduleService;
use HusamTariq\FilamentDatabaseSchedule\Models\Schedule;

Expand All @@ -20,14 +21,14 @@ public function updated(Schedule $schedule)
public function deleted(Schedule $schedule)
{

$schedule->status = Schedule::STATUS_TRASHED;
$schedule->status = Status::Trashed;
$schedule->saveQuietly();
$this->clearCache();
}

public function restored(Schedule $schedule)
{
$schedule->status = Schedule::STATUS_INACTIVE;
$schedule->status = Status::Inactive;
$schedule->saveQuietly();
}

Expand Down