|
4 | 4 |
|
5 | 5 | namespace Moox\Tag\Resources; |
6 | 6 |
|
7 | | -use Camya\Filament\Forms\Components\TitleWithSlugInput; |
8 | | -use Filament\Forms\Components\Actions; |
9 | | -use Filament\Forms\Components\Actions\Action; |
10 | | -use Filament\Forms\Components\ColorPicker; |
11 | | -use Filament\Forms\Components\DateTimePicker; |
12 | | -use Filament\Forms\Components\FileUpload; |
13 | | -use Filament\Forms\Components\Grid; |
14 | | -use Filament\Forms\Components\MarkdownEditor; |
15 | | -use Filament\Forms\Components\Section; |
16 | | -use Filament\Forms\Components\TextInput; |
| 7 | +use Override; |
| 8 | +use Filament\Forms\Set; |
17 | 9 | use Filament\Forms\Form; |
| 10 | +use Moox\Tag\Models\Tag; |
| 11 | +use Filament\Tables\Table; |
| 12 | +use Illuminate\Support\Str; |
18 | 13 | use Filament\Resources\Resource; |
19 | | -use Filament\Tables\Actions\DeleteBulkAction; |
| 14 | +use Filament\Forms\Components\Grid; |
| 15 | +use Filament\Forms\Components\Actions; |
| 16 | +use Filament\Forms\Components\Section; |
20 | 17 | use Filament\Tables\Actions\EditAction; |
21 | | -use Filament\Tables\Actions\RestoreBulkAction; |
22 | 18 | use Filament\Tables\Actions\ViewAction; |
| 19 | +use Filament\Tables\Columns\TextColumn; |
| 20 | +use Filament\Forms\Components\TextInput; |
23 | 21 | use Filament\Tables\Columns\ColorColumn; |
24 | 22 | use Filament\Tables\Columns\ImageColumn; |
25 | | -use Filament\Tables\Columns\TextColumn; |
26 | | -use Filament\Tables\Table; |
| 23 | +use Filament\Forms\Components\FileUpload; |
27 | 24 | use Illuminate\Database\Eloquent\Builder; |
28 | | -use Illuminate\Database\Eloquent\SoftDeletes; |
29 | 25 | use Moox\Core\Traits\Tabs\TabsInResource; |
30 | | -use Moox\Tag\Models\Tag; |
31 | | -use Moox\Tag\Resources\TagResource\Pages\CreateTag; |
| 26 | +use Filament\Forms\Components\ColorPicker; |
| 27 | +use Filament\Forms\Components\Actions\Action; |
| 28 | +use Filament\Forms\Components\DateTimePicker; |
| 29 | +use Filament\Forms\Components\MarkdownEditor; |
| 30 | +use Filament\Tables\Actions\DeleteBulkAction; |
| 31 | +use Illuminate\Database\Eloquent\SoftDeletes; |
| 32 | +use Filament\Tables\Actions\RestoreBulkAction; |
32 | 33 | use Moox\Tag\Resources\TagResource\Pages\EditTag; |
33 | | -use Moox\Tag\Resources\TagResource\Pages\ListTags; |
34 | 34 | use Moox\Tag\Resources\TagResource\Pages\ViewTag; |
35 | | -use Override; |
| 35 | +use Moox\Tag\Resources\TagResource\Pages\ListTags; |
| 36 | +use Moox\Tag\Resources\TagResource\Pages\CreateTag; |
| 37 | +use Camya\Filament\Forms\Components\TitleWithSlugInput; |
36 | 38 |
|
37 | 39 | class TagResource extends Resource |
38 | 40 | { |
@@ -64,48 +66,72 @@ public static function form(Form $form): Form |
64 | 66 | ->schema([ |
65 | 67 | Section::make() |
66 | 68 | ->schema([ |
67 | | - TitleWithSlugInput::make( |
68 | | - fieldTitle: 'title', |
69 | | - fieldSlug: 'slug', |
70 | | - ) |
71 | | - ->afterStateHydrated(function ($component) { |
| 69 | + |
| 70 | + TextInput::make('title') |
| 71 | + ->live(onBlur: true) |
| 72 | + ->label(__('core::core.title')) |
| 73 | + ->required() |
| 74 | + ->afterStateHydrated(function (TextInput $component) { |
72 | 75 | $lang = request()->get('lang'); |
73 | | - if ($lang && $component->getRecord()) { |
74 | | - $component->state([ |
75 | | - 'title' => $component->getRecord()->getTranslation('title', $lang), |
76 | | - 'slug' => $component->getRecord()->getTranslation('slug', $lang), |
77 | | - ]); |
| 76 | + if ($lang && $component->getRecord()->hasTranslation($lang)) { |
| 77 | + $component->state($component->getRecord()->translateOrNew($lang)->title); |
| 78 | + } else { |
| 79 | + $component->state($component->getRecord()->title ?? ''); |
78 | 80 | } |
79 | 81 | }) |
80 | | - ->afterStateHydrated(function ($component) { |
| 82 | + ->afterStateUpdated(fn (Set $set, ?string $state) => $set('slug', Str::slug($state))) |
| 83 | + ->dehydrateStateUsing(function (string $state, $record, $livewire) { |
| 84 | + if (!$livewire->selectedLang) { |
| 85 | + $record->title = $state; |
| 86 | + return $state; |
| 87 | + } |
| 88 | + |
| 89 | + $record->translateOrNew($livewire->selectedLang)->title = $state; |
| 90 | + return $state; |
| 91 | + }), |
| 92 | + TextInput::make('slug') |
| 93 | + ->label(__('core::core.slug')) |
| 94 | + ->required() |
| 95 | + ->afterStateHydrated(function (TextInput $component) { |
81 | 96 | $lang = request()->get('lang'); |
82 | | - if ($lang && $component->getRecord()) { |
83 | | - $component->state([ |
84 | | - 'title' => $component->getRecord()->getTranslation('title', $lang), |
85 | | - 'slug' => $component->getRecord()->getTranslation('slug', $lang), |
86 | | - ]); |
| 97 | + if ($lang && $component->getRecord()->hasTranslation($lang)) { |
| 98 | + $component->state($component->getRecord()->translateOrNew($lang)->slug); |
| 99 | + } else { |
| 100 | + $component->state($component->getRecord()->slug ?? ''); |
87 | 101 | } |
88 | 102 | }) |
89 | | - ->dehydrateStateUsing(function ($state) { |
90 | | - $lang = request()->get('lang'); |
91 | | - |
92 | | - return [ |
93 | | - 'title' => [$lang => $state['title']], |
94 | | - 'slug' => [$lang => $state['slug']], |
95 | | - ]; |
| 103 | + ->dehydrateStateUsing(function (string $state, $record, $livewire) { |
| 104 | + if (!$livewire->selectedLang) { |
| 105 | + $record->slug = $state; |
| 106 | + return $state; |
| 107 | + } |
| 108 | + |
| 109 | + $record->translateOrNew($livewire->selectedLang)->slug = $state; |
| 110 | + return $state; |
96 | 111 | }), |
97 | 112 | FileUpload::make('featured_image_url') |
98 | 113 | ->label(__('core::core.featured_image_url')), |
99 | 114 | MarkdownEditor::make('content') |
100 | 115 | ->label(__('core::core.content')) |
| 116 | + ->required() |
101 | 117 | ->afterStateHydrated(function (MarkdownEditor $component) { |
102 | 118 | $lang = request()->get('lang'); |
103 | 119 | if ($lang && $component->getRecord()->hasTranslation($lang)) { |
104 | | - $component->state($component->getRecord()->translate($lang)->content); |
| 120 | + $component->state($component->getRecord()->translateOrNew($lang)->content); |
105 | 121 | } else { |
106 | | - $component->state($component->getRecord()->translate($lang)->content); |
| 122 | + $component->state($component->getRecord()->content ?? ''); |
107 | 123 | } |
| 124 | + }) |
| 125 | + ->dehydrateStateUsing(function (string $state, $record, $livewire) { |
| 126 | + if (!$livewire->selectedLang) { |
| 127 | + $record->content = $state; |
| 128 | + return $state; |
| 129 | + } |
| 130 | + |
| 131 | + $record->translateOrNew($livewire->selectedLang)->content = $state; |
| 132 | + return $state; |
108 | 133 | }), |
| 134 | + |
109 | 135 | ]), |
110 | 136 | ]) |
111 | 137 | ->columnSpan(['lg' => 2]), |
|
0 commit comments