3434use Moox \Tag \Resources \TagResource \Pages \ListTags ;
3535use Moox \Tag \Resources \TagResource \Pages \ViewTag ;
3636use Override ;
37+ use Illuminate \Validation \Rules \Unique ;
3738
3839class TagResource extends Resource
3940{
@@ -71,71 +72,28 @@ public static function form(Form $form): Form
7172 ->live (onBlur: true )
7273 ->label (__ ('core::core.title ' ))
7374 ->required ()
74- ->afterStateHydrated (function (TextInput $ component ) {
75- $ lang = request ()->get ('lang ' );
76- if ($ lang && $ component ->getRecord ()->hasTranslation ($ lang )) {
77- $ component ->state ($ component ->getRecord ()->translateOrNew ($ lang )->title );
78- } else {
79- $ component ->state ($ component ->getRecord ()->title ?? '' );
80- }
81- })
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-
87- return $ state ;
88- }
89-
90- $ record ->translateOrNew ($ livewire ->selectedLang )->title = $ state ;
91-
92- return $ state ;
93- }),
75+ ->afterStateUpdated (fn (Set $ set , ?string $ state ) =>
76+ $ set ('slug ' , Str::slug ($ state ))
77+ ),
9478 TextInput::make ('slug ' )
9579 ->label (__ ('core::core.slug ' ))
9680 ->required ()
97- ->afterStateHydrated (function (TextInput $ component ) {
98- $ lang = request ()->get ('lang ' );
99- if ($ lang && $ component ->getRecord ()->hasTranslation ($ lang )) {
100- $ component ->state ($ component ->getRecord ()->translateOrNew ($ lang )->slug );
101- } else {
102- $ component ->state ($ component ->getRecord ()->slug ?? '' );
103- }
104- })
105- ->dehydrateStateUsing (function (string $ state , $ record , $ livewire ) {
106- if (! $ livewire ->selectedLang ) {
107- $ record ->slug = $ state ;
108-
109- return $ state ;
110- }
111-
112- $ record ->translateOrNew ($ livewire ->selectedLang )->slug = $ state ;
113-
114- return $ state ;
115- }),
81+ ->unique (
82+ modifyRuleUsing: function (Unique $ rule ) {
83+ return $ rule
84+ ->where ('locale ' , request ()->query ('lang ' , app ()->getLocale ()))
85+ ->whereNull ('tag_translations.tag_id ' );
86+ },
87+ table: 'tag_translations ' ,
88+ column: 'slug ' ,
89+ ignoreRecord: true ,
90+ ignorable: fn ($ record ) => $ record ?->translations()
91+ ->where ('locale ' , request ()->query ('lang ' , app ()->getLocale ()))
92+ ->first ()
93+ ),
11694 MarkdownEditor::make ('content ' )
11795 ->label (__ ('core::core.content ' ))
118- ->required ()
119- ->afterStateHydrated (function (MarkdownEditor $ component ) {
120- $ lang = request ()->get ('lang ' );
121- if ($ lang && $ component ->getRecord ()->hasTranslation ($ lang )) {
122- $ component ->state ($ component ->getRecord ()->translateOrNew ($ lang )->content );
123- } else {
124- $ component ->state ($ component ->getRecord ()->content ?? '' );
125- }
126- })
127- ->dehydrateStateUsing (function (string $ state , $ record , $ livewire ) {
128- if (! $ livewire ->selectedLang ) {
129- $ record ->content = $ state ;
130-
131- return $ state ;
132- }
133-
134- $ record ->translateOrNew ($ livewire ->selectedLang )->content = $ state ;
135-
136- return $ state ;
137- }),
138-
96+ ->required (),
13997 ]),
14098 ])
14199 ->columnSpan (['lg ' => 2 ]),
@@ -181,7 +139,7 @@ public static function form(Form $form): Form
181139 ->color ('primary ' )
182140 ->button ()
183141 ->extraAttributes (['class ' => 'w-full ' ])
184- ->url (fn ($ record ): string => static ::getUrl ('edit ' , ['record ' => $ record ]))
142+ ->url (fn ($ record ): string => static ::getUrl ('edit ' , ['record ' => $ record, ' lang ' => request ()-> get ( ' lang ' ) ]))
185143 ->visible (fn ($ livewire , $ record ): bool => $ livewire instanceof ViewTag && ! $ record ->trashed ()),
186144 Action::make ('restore ' )
187145 ->label (__ ('core::core.restore ' ))
@@ -233,6 +191,7 @@ public static function table(Table $table): Table
233191 ->label (__ ('core::core.image ' ))
234192 ->defaultImageUrl (url ('/moox/core/assets/noimage.svg ' ))
235193 ->alignment ('center ' ),
194+ TextColumn::make ('translations.locale ' ),
236195 TextColumn::make ('title ' )
237196 ->label (__ ('core::core.title ' ))
238197 ->searchable ()
@@ -255,10 +214,10 @@ public static function table(Table $table): Table
255214 ->state (function ($ record ) {
256215 $ lang = request ()->get ('lang ' );
257216 if ($ lang && $ record ->hasTranslation ($ lang )) {
258- return $ record ->translate ($ lang )->title ;
217+ return $ record ->translate ($ lang )->slug ;
259218 }
260219
261- return $ record ->title ;
220+ return $ record ->slug ;
262221 }),
263222 TextColumn::make ('content ' )
264223 ->label (__ ('core::core.content ' ))
@@ -269,10 +228,9 @@ public static function table(Table $table): Table
269228 ->state (function ($ record ) {
270229 $ lang = request ()->get ('lang ' );
271230 if ($ lang && $ record ->hasTranslation ($ lang )) {
272- return $ record ->translate ($ lang )->title ;
231+ return $ record ->translate ($ lang )->content ;
273232 }
274-
275- return $ record ->title ;
233+ return $ record ->content ;
276234 }),
277235 TextColumn::make ('count ' )
278236 ->label (__ ('core::core.count ' ))
@@ -288,16 +246,14 @@ public static function table(Table $table): Table
288246 ->toggleable (),
289247 ])
290248 ->actions ([
291- ViewAction::make ()->url (
292- fn ($ record ) => request ()->has ('lang ' )
293- ? route ('filament.admin.resources.tags.view ' , ['record ' => $ record , 'lang ' => request ()->get ('lang ' )])
294- : route ('filament.admin.resources.tags.view ' , $ record )
249+ ViewAction::make ()->url (fn ($ record ) => request ()->has ('lang ' )
250+ ? static ::getUrl ('view ' , ['record ' => $ record , 'lang ' => request ()->get ('lang ' )])
251+ : static ::getUrl ('view ' , ['record ' => $ record ])
295252 ),
296253 EditAction::make ()
297- ->url (
298- fn ($ record ) => request ()->has ('lang ' )
299- ? route ('filament.admin.resources.tags.edit ' , ['record ' => $ record , 'lang ' => request ()->get ('lang ' )])
300- : route ('filament.admin.resources.tags.edit ' , $ record )
254+ ->url (fn ($ record ) => request ()->has ('lang ' )
255+ ? static ::getUrl ('edit ' , ['record ' => $ record , 'lang ' => request ()->get ('lang ' )])
256+ : static ::getUrl ('edit ' , ['record ' => $ record ])
301257 )
302258 ->hidden (fn (): bool => in_array (static ::getCurrentTab (), ['trash ' , 'deleted ' ])),
303259 ])
0 commit comments