Skip to content

Commit f5bc424

Browse files
authored
Merge pull request #50 from bahman026/admin
Admin
2 parents 2eaf669 + d4b2945 commit f5bc424

14 files changed

Lines changed: 502 additions & 1 deletion

File tree

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources;
6+
7+
use App\Filament\Resources\SettingResource\Pages\CreateSetting;
8+
use App\Filament\Resources\SettingResource\Pages\EditSetting;
9+
use App\Filament\Resources\SettingResource\Pages\ListSettings;
10+
use App\Models\Setting;
11+
use Filament\Actions\BulkActionGroup;
12+
use Filament\Actions\DeleteBulkAction;
13+
use Filament\Actions\EditAction;
14+
use Filament\Forms\Components\Textarea;
15+
use Filament\Forms\Components\TextInput;
16+
use Filament\Forms\Components\Toggle;
17+
use Filament\Resources\Resource;
18+
use Filament\Schemas\Schema;
19+
use Filament\Tables\Columns\IconColumn;
20+
use Filament\Tables\Columns\TextColumn;
21+
use Filament\Tables\Table;
22+
23+
class SettingResource extends Resource
24+
{
25+
protected static ?string $model = Setting::class;
26+
27+
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-cog-6-tooth';
28+
29+
public static function getNavigationGroup(): ?string
30+
{
31+
return trans('setting.navigation_group');
32+
}
33+
34+
public static function getModelLabel(): string
35+
{
36+
return trans('setting.label');
37+
}
38+
39+
public static function getPluralModelLabel(): string
40+
{
41+
return trans('setting.plural_label');
42+
}
43+
44+
public static function form(Schema $schema): Schema
45+
{
46+
return $schema
47+
->components([
48+
TextInput::make('key')
49+
->label(trans('setting.key'))
50+
->required()
51+
->maxLength(255)
52+
->unique(Setting::class, 'key', ignoreRecord: true),
53+
TextInput::make('label')
54+
->label(trans('setting.label_field'))
55+
->maxLength(255),
56+
Toggle::make('autoload')
57+
->label(trans('setting.autoload'))
58+
->default(true),
59+
Textarea::make('content')
60+
->label(trans('setting.content'))
61+
->columnSpanFull(),
62+
]);
63+
}
64+
65+
public static function table(Table $table): Table
66+
{
67+
return $table
68+
->defaultSort('created_at', 'desc')
69+
->columns([
70+
TextColumn::make('id')
71+
->label('#')
72+
->sortable(),
73+
TextColumn::make('key')
74+
->label(trans('setting.key'))
75+
->searchable(),
76+
TextColumn::make('label')
77+
->label(trans('setting.label_field'))
78+
->searchable()
79+
->limit(30)
80+
->wrap(),
81+
IconColumn::make('autoload')
82+
->label(trans('setting.autoload'))
83+
->boolean()
84+
->sortable(),
85+
TextColumn::make('created_at')
86+
->label(trans('setting.created_at'))
87+
->dateTime()
88+
->sortable()
89+
->toggleable(isToggledHiddenByDefault: true),
90+
])
91+
->filters([
92+
//
93+
])
94+
->recordActions([
95+
EditAction::make(),
96+
])
97+
->toolbarActions([
98+
BulkActionGroup::make([
99+
DeleteBulkAction::make(),
100+
]),
101+
]);
102+
}
103+
104+
public static function getRelations(): array
105+
{
106+
return [
107+
//
108+
];
109+
}
110+
111+
public static function getPages(): array
112+
{
113+
return [
114+
'index' => ListSettings::route('/'),
115+
'create' => CreateSetting::route('/create'),
116+
'edit' => EditSetting::route('/{record}/edit'),
117+
];
118+
}
119+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SettingResource\Pages;
6+
7+
use App\Filament\Resources\SettingResource;
8+
use Filament\Resources\Pages\CreateRecord;
9+
10+
class CreateSetting extends CreateRecord
11+
{
12+
protected static string $resource = SettingResource::class;
13+
14+
protected function getRedirectUrl(): string
15+
{
16+
return $this->getResource()::getUrl('index');
17+
}
18+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SettingResource\Pages;
6+
7+
use App\Filament\Resources\SettingResource;
8+
use Filament\Actions\DeleteAction;
9+
use Filament\Resources\Pages\EditRecord;
10+
11+
class EditSetting extends EditRecord
12+
{
13+
protected static string $resource = SettingResource::class;
14+
15+
protected function getRedirectUrl(): string
16+
{
17+
return $this->getResource()::getUrl('index');
18+
}
19+
20+
protected function getHeaderActions(): array
21+
{
22+
return [
23+
DeleteAction::make(),
24+
];
25+
}
26+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SettingResource\Pages;
6+
7+
use App\Filament\Resources\SettingResource;
8+
use Filament\Actions\CreateAction;
9+
use Filament\Resources\Pages\ListRecords;
10+
11+
class ListSettings extends ListRecords
12+
{
13+
protected static string $resource = SettingResource::class;
14+
15+
protected function getHeaderActions(): array
16+
{
17+
return [
18+
CreateAction::make(),
19+
];
20+
}
21+
}

‎admin/app/Models/Setting.php‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Models;
6+
7+
use Carbon\Carbon;
8+
use Database\Factories\SettingFactory;
9+
use Illuminate\Database\Eloquent\Factories\HasFactory;
10+
use Illuminate\Database\Eloquent\Model;
11+
12+
/**
13+
* @property positive-int $id
14+
* @property string $key
15+
* @property string|null $label
16+
* @property string|null $content
17+
* @property bool $autoload
18+
* @property Carbon|null $created_at
19+
* @property Carbon|null $updated_at
20+
*/
21+
class Setting extends Model
22+
{
23+
/** @use HasFactory<SettingFactory> */
24+
use HasFactory;
25+
26+
protected $fillable = [
27+
'key',
28+
'label',
29+
'content',
30+
'autoload',
31+
];
32+
33+
protected $casts = [
34+
'autoload' => 'boolean',
35+
];
36+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Database\Factories;
6+
7+
use App\Models\Setting;
8+
use Illuminate\Database\Eloquent\Factories\Factory;
9+
10+
/**
11+
* @extends Factory<Setting>
12+
*/
13+
class SettingFactory extends Factory
14+
{
15+
/**
16+
* @return array<string, mixed>
17+
*/
18+
public function definition(): array
19+
{
20+
return [
21+
'key' => fake()->unique()->slug(2),
22+
'label' => fake()->optional()->words(2, true),
23+
'content' => fake()->optional()->sentence(),
24+
'autoload' => fake()->boolean(),
25+
];
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Illuminate\Database\Migrations\Migration;
6+
use Illuminate\Database\Schema\Blueprint;
7+
use Illuminate\Support\Facades\Schema;
8+
9+
return new class extends Migration
10+
{
11+
public function up(): void
12+
{
13+
Schema::create('settings', function (Blueprint $table): void {
14+
$table->id();
15+
$table->string('key')->unique();
16+
$table->string('label')->nullable();
17+
$table->text('content')->nullable();
18+
$table->boolean('autoload')->default(true);
19+
$table->timestamps();
20+
});
21+
}
22+
23+
public function down(): void
24+
{
25+
Schema::dropIfExists('settings');
26+
}
27+
};

‎admin/database/seeders/DatabaseSeeder.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public function run(): void
2121
AncestorSeeder::class,
2222
AttributeSeeder::class,
2323
AttributeGroupCategorySeeder::class,
24+
SettingSeeder::class,
2425
]);
2526
}
2627
}

0 commit comments

Comments
 (0)