136 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Providers;
 | |
| 
 | |
| use Debugbar;
 | |
| use Inertia\Inertia;
 | |
| use OpenPsa\Ranger\Ranger;
 | |
| use Carbon\CarbonImmutable;
 | |
| use Illuminate\Support\Collection;
 | |
| use Illuminate\Pagination\UrlWindow;
 | |
| use Illuminate\Support\Facades\Auth;
 | |
| use Illuminate\Support\Facades\Date;
 | |
| use Illuminate\Support\Facades\Config;
 | |
| use Illuminate\Support\Facades\Request;
 | |
| use Illuminate\Support\Facades\Session;
 | |
| use Illuminate\Support\ServiceProvider;
 | |
| use Illuminate\Pagination\LengthAwarePaginator;
 | |
| 
 | |
| class AppServiceProvider extends ServiceProvider
 | |
| {
 | |
|     public function boot()
 | |
|     {
 | |
|         Date::use(CarbonImmutable::class);
 | |
|     }
 | |
| 
 | |
|     public function register()
 | |
|     {
 | |
|         Inertia::version(function () {
 | |
|             return md5_file(public_path('mix-manifest.json'));
 | |
|         });
 | |
|         Inertia::share('app.name', Config::get('app.name'));
 | |
|         Inertia::share('errors', function () {
 | |
|             return Session::get('errors') ? Session::get('errors')->getBag('default')->getMessages() : (object) [];
 | |
|         });
 | |
|         Inertia::share('auth.user', function () {
 | |
|             if (Auth::user()) {
 | |
|                 return [
 | |
|                     'id' => Auth::user()->id,
 | |
|                     'first_name' => Auth::user()->first_name,
 | |
|                     'last_name' => Auth::user()->last_name,
 | |
|                     'email' => Auth::user()->email,
 | |
|                     'role' => Auth::user()->role,
 | |
|                     'account' => [
 | |
|                         'id' => Auth::user()->account->id,
 | |
|                         'name' => Auth::user()->account->name,
 | |
|                     ],
 | |
|                 ];
 | |
|             }
 | |
|         });
 | |
| 
 | |
|         $this->registerLengthAwarePaginator();
 | |
|         $this->registerCarbonMarcos();
 | |
|     }
 | |
| 
 | |
|     protected function registerLengthAwarePaginator()
 | |
|     {
 | |
|         $this->app->bind(LengthAwarePaginator::class, function ($app, $values) {
 | |
|             return new class(...array_values($values)) extends LengthAwarePaginator {
 | |
|                 public function only(...$attributes)
 | |
|                 {
 | |
|                     return $this->transform(function ($item) use ($attributes) {
 | |
|                         return $item->only($attributes);
 | |
|                     });
 | |
|                 }
 | |
| 
 | |
|                 public function transform($callback)
 | |
|                 {
 | |
|                     $this->items->transform($callback);
 | |
| 
 | |
|                     return $this;
 | |
|                 }
 | |
| 
 | |
|                 public function toArray()
 | |
|                 {
 | |
|                     return [
 | |
|                         'data' => $this->items->toArray(),
 | |
|                         'links' => $this->links(),
 | |
|                     ];
 | |
|                 }
 | |
| 
 | |
|                 public function links($view = null, $data = [])
 | |
|                 {
 | |
|                     $this->appends(Request::all());
 | |
| 
 | |
|                     $window = UrlWindow::make($this);
 | |
| 
 | |
|                     $elements = array_filter([
 | |
|                         $window['first'],
 | |
|                         is_array($window['slider']) ? '...' : null,
 | |
|                         $window['slider'],
 | |
|                         is_array($window['last']) ? '...' : null,
 | |
|                         $window['last'],
 | |
|                     ]);
 | |
| 
 | |
|                     return Collection::make($elements)->flatMap(function ($item) {
 | |
|                         if (is_array($item)) {
 | |
|                             return Collection::make($item)->map(function ($url, $page) {
 | |
|                                 return [
 | |
|                                     'url' => $url,
 | |
|                                     'label' => $page,
 | |
|                                     'active' => $this->currentPage() === $page,
 | |
|                                 ];
 | |
|                             });
 | |
|                         } else {
 | |
|                             return [
 | |
|                                 [
 | |
|                                     'url' => null,
 | |
|                                     'label' => '...',
 | |
|                                     'active' => false,
 | |
|                                 ],
 | |
|                             ];
 | |
|                         }
 | |
|                     })->prepend([
 | |
|                         'url' => $this->previousPageUrl(),
 | |
|                         'label' => 'Previous',
 | |
|                         'active' => false,
 | |
|                     ])->push([
 | |
|                         'url' => $this->nextPageUrl(),
 | |
|                         'label' => 'Next',
 | |
|                         'active' => false,
 | |
|                     ]);
 | |
|                 }
 | |
|             };
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     protected function registerCarbonMarcos()
 | |
|     {
 | |
|         CarbonImmutable::macro('range', function ($to) {
 | |
|             return (new Ranger('en'))->format(
 | |
|                 $this->toDateString(),
 | |
|                 $to->toDateString()
 | |
|             );
 | |
|         });
 | |
|     }
 | |
| }
 | 
