@@ -189,11 +189,11 @@ public static function getTitleColumn(): TextColumn
189189 $ currentLang = $ livewire ->lang ;
190190 $ query ->whereHas ('translations ' , function ($ query ) use ($ search , $ currentLang ) {
191191 $ query ->where ('locale ' , $ currentLang )
192- ->where ('title ' , 'like ' , '% ' . $ search. '% ' );
192+ ->where ('title ' , 'like ' , '% ' . $ search . '% ' );
193193 });
194194 })
195195 ->sortable ()
196- ->extraAttributes (fn ($ record ) => [
196+ ->extraAttributes (fn ($ record ) => [
197197 'style ' => $ record ->translations ()->where ('locale ' , request ()->get ('lang ' , app ()->getLocale ()))->withTrashed ()->whereNotNull ('title ' )->exists ()
198198 ? ''
199199 : 'color: var(--gray-500); ' ,
@@ -207,10 +207,12 @@ public static function getTitleColumn(): TextColumn
207207 return $ translation ->title ;
208208 }
209209
210- $ fallbackTranslation = $ record ->translations ()->where ('locale ' , app ()->getLocale ())->first ();
210+ $ defaultLocalization = \Moox \Localization \Models \Localization::where ('is_default ' , true )->first ();
211+ $ defaultLang = $ defaultLocalization ?->locale_variant ?? app ()->getLocale ();
212+ $ fallbackTranslation = $ record ->translations ()->where ('locale ' , $ defaultLang )->first ();
211213
212214 if ($ fallbackTranslation && $ fallbackTranslation ->title ) {
213- return $ fallbackTranslation ->title . ' ( ' . app ()-> getLocale (). ') ' ;
215+ return $ fallbackTranslation ->title . ' ( ' . $ defaultLang . ') ' ;
214216 }
215217
216218 return 'No title available ' ;
@@ -222,10 +224,12 @@ public static function getSlugColumn(): TextColumn
222224 return TextColumn::make ('slug ' )
223225 ->label ('Slug ' )
224226 ->searchable (true , function ($ query , $ search ) {
225- $ currentLang = request ()->get ('lang ' , app ()->getLocale ());
227+ $ defaultLocalization = \Moox \Localization \Models \Localization::where ('is_default ' , true )->first ();
228+ $ defaultLang = $ defaultLocalization ?->locale_variant ?? app ()->getLocale ();
229+ $ currentLang = request ()->get ('lang ' , $ defaultLang );
226230 $ query ->whereHas ('translations ' , function ($ query ) use ($ search , $ currentLang ) {
227231 $ query ->where ('locale ' , $ currentLang )
228- ->where ('slug ' , 'like ' , '% ' . $ search. '% ' );
232+ ->where ('slug ' , 'like ' , '% ' . $ search . '% ' );
229233 });
230234 })
231235 ->sortable ();
@@ -247,21 +251,21 @@ public static function getTranslationStatusSelect(): Select
247251 public static function getEditableTranslationStatusOptions (): array
248252 {
249253 return collect (TranslationStatus::cases ())
250- ->filter (fn ($ case ) => ! in_array ($ case , [TranslationStatus::NOT_TRANSLATED , TranslationStatus::DELETED ]))
251- ->mapWithKeys (fn ($ case ) => [$ case ->value => ucfirst ($ case ->value )])
254+ ->filter (fn ($ case ) => !in_array ($ case , [TranslationStatus::NOT_TRANSLATED , TranslationStatus::DELETED ]))
255+ ->mapWithKeys (fn ($ case ) => [$ case ->value => ucfirst ($ case ->value )])
252256 ->toArray ();
253257 }
254258
255259 protected static function getCurrentTranslationStatus ($ record ): string
256260 {
257- if (! $ record ) {
261+ if (!$ record ) {
258262 return TranslationStatus::DRAFT ->value ;
259263 }
260264
261265 $ currentLang = request ()->get ('lang ' , app ()->getLocale ());
262266 $ translation = $ record ->translations ()->where ('locale ' , $ currentLang )->first ();
263267
264- if (! $ translation ) {
268+ if (!$ translation ) {
265269 return TranslationStatus::NOT_TRANSLATED ->value ;
266270 }
267271
@@ -283,7 +287,7 @@ protected static function getDefaultStatus(): string
283287 public static function getTranslationStatusOptions (): array
284288 {
285289 return collect (TranslationStatus::cases ())
286- ->mapWithKeys (fn ($ case ) => [$ case ->value => ucfirst ($ case ->value )])
290+ ->mapWithKeys (fn ($ case ) => [$ case ->value => ucfirst ($ case ->value )])
287291 ->toArray ();
288292 }
289293
@@ -306,8 +310,8 @@ public static function getPublishDateField(): DateTimePicker
306310 ->label (__ ('core::core.to_publish_at ' ))
307311 ->placeholder (__ ('core::core.to_publish_at ' ))
308312 ->minDate (now ())
309- ->hidden (fn ($ get ) => $ get ('translation_status ' ) !== 'scheduled ' )
310- ->dehydrateStateUsing (fn ($ state , $ get ) => $ get ('translation_status ' ) === 'scheduled ' ? $ state : null );
313+ ->hidden (fn ($ get ) => $ get ('translation_status ' ) !== 'scheduled ' )
314+ ->dehydrateStateUsing (fn ($ state , $ get ) => $ get ('translation_status ' ) === 'scheduled ' ? $ state : null );
311315 }
312316
313317 /**
@@ -319,8 +323,8 @@ public static function getUnpublishDateField(): DateTimePicker
319323 ->label (__ ('core::core.to_unpublish_at ' ))
320324 ->placeholder (__ ('core::core.to_unpublish_at ' ))
321325 ->minDate (now ())
322- ->hidden (fn ($ get ) => ! in_array ($ get ('translation_status ' ), ['scheduled ' , 'published ' ]))
323- ->dehydrateStateUsing (fn ($ state , $ get ) => in_array ($ get ('translation_status ' ), ['scheduled ' , 'published ' ]) ? $ state : null );
326+ ->hidden (fn ($ get ) => !in_array ($ get ('translation_status ' ), ['scheduled ' , 'published ' ]))
327+ ->dehydrateStateUsing (fn ($ state , $ get ) => in_array ($ get ('translation_status ' ), ['scheduled ' , 'published ' ]) ? $ state : null );
324328 }
325329
326330 /**
@@ -332,19 +336,19 @@ public static function getPublishedAtTextEntry(): TextEntry
332336 ->label (__ ('core::core.published_at ' ))
333337 ->state (function ($ record ): string {
334338 $ translation = $ record ->translations ()->withTrashed ()->first ();
335- if (! $ translation || ! $ translation ->published_at ) {
339+ if (!$ translation || !$ translation ->published_at ) {
336340 return '' ;
337341 }
338342
339343 $ publishedBy = '' ;
340344 if ($ translation ->published_by_id && $ translation ->published_by_type ) {
341345 $ user = app ($ translation ->published_by_type )->find ($ translation ->published_by_id );
342- $ publishedBy = $ user ? ' ' . __ ('core::core.by ' ). ' ' . $ user ->name : '' ;
346+ $ publishedBy = $ user ? ' ' . __ ('core::core.by ' ) . ' ' . $ user ->name : '' ;
343347 }
344348
345- return $ translation ->published_at . ' - ' . $ translation ->published_at ->diffForHumans (). $ publishedBy ;
349+ return $ translation ->published_at . ' - ' . $ translation ->published_at ->diffForHumans () . $ publishedBy ;
346350 })
347- ->hidden (fn ($ record ) => ! $ record ->published_at );
351+ ->hidden (fn ($ record ) => !$ record ->published_at );
348352 }
349353
350354 /**
@@ -354,9 +358,9 @@ public static function getToUnpublishAtTextEntry(): TextEntry
354358 {
355359 return TextEntry::make ('to_unpublish_at ' )
356360 ->label (__ ('core::core.to_unpublish_at ' ))
357- ->state (fn ($ record ): string => $ record ->to_unpublish_at ?
358- $ record ->to_unpublish_at . ' - ' . $ record ->to_unpublish_at ->diffForHumans () : '' )
359- ->hidden (fn ($ record ) => ! $ record ->to_unpublish_at );
361+ ->state (fn ($ record ): string => $ record ->to_unpublish_at ?
362+ $ record ->to_unpublish_at . ' - ' . $ record ->to_unpublish_at ->diffForHumans () : '' )
363+ ->hidden (fn ($ record ) => !$ record ->to_unpublish_at );
360364 }
361365
362366 /**
@@ -381,9 +385,11 @@ public static function getTranslationStatusFilter(): SelectFilter
381385 return $ query ->when (
382386 $ data ['value ' ] ?? null ,
383387 function (Builder $ query , $ value ): Builder {
384- $ currentLang = request ()->query ('lang ' ) ?? request ()->get ('lang ' ) ?? app ()->getLocale ();
388+ $ defaultLocalization = \Moox \Localization \Models \Localization::where ('is_default ' , true )->first ();
389+ $ defaultLang = $ defaultLocalization ?->locale_variant ?? app ()->getLocale ();
390+ $ currentLang = request ()->query ('lang ' ) ?? request ()->get ('lang ' ) ?? $ defaultLang ;
385391
386- if (! $ value ) {
392+ if (!$ value ) {
387393 return $ query ;
388394 }
389395
@@ -410,6 +416,33 @@ function (Builder $query, $value): Builder {
410416 });
411417 }
412418
419+ public static function getLocaleFilter (): SelectFilter
420+ {
421+ return SelectFilter::make ('locale ' )
422+ ->label (__ ('localization::fields.language ' ))
423+ ->options (function () {
424+ $ localizations = \Moox \Localization \Models \Localization::where ('is_active_admin ' , true )
425+ ->with ('language ' )
426+ ->orderBy ('language_id ' )
427+ ->orderBy ('locale_variant ' )
428+ ->get ();
429+
430+ return $ localizations ->mapWithKeys (function ($ localization ) {
431+ return [$ localization ->locale_variant => $ localization ->display_name ];
432+ })->toArray ();
433+ })
434+ ->query (function (Builder $ query , array $ data ): Builder {
435+ return $ query ->when (
436+ $ data ['value ' ] ?? null ,
437+ function (Builder $ query , $ value ): Builder {
438+ return $ query ->whereHas ('translations ' , function ($ query ) use ($ value ) {
439+ $ query ->where ('locale ' , $ value );
440+ });
441+ }
442+ );
443+ });
444+ }
445+
413446 /**
414447 * Get status badge column for translation status
415448 */
@@ -433,11 +466,13 @@ public static function getStatusColumn(): TextColumn
433466 return static ::getStatusColor (strtolower ($ value ));
434467 })
435468 ->getStateUsing (function ($ record ) {
436- $ currentLang = request ()->get ('lang ' , app ()->getLocale ());
469+ $ defaultLocalization = \Moox \Localization \Models \Localization::where ('is_default ' , true )->first ();
470+ $ defaultLang = $ defaultLocalization ?->locale_variant ?? app ()->getLocale ();
471+ $ currentLang = request ()->get ('lang ' , $ defaultLang );
437472
438473 $ translation = $ record ->translations ()->withTrashed ()->where ('locale ' , $ currentLang )->first ();
439474
440- if (! $ translation ) {
475+ if (!$ translation ) {
441476 return TranslationStatus::NOT_TRANSLATED ;
442477 }
443478
0 commit comments