<?php namespace App\Nova\Lenses; use App\Models\Retailer; use App\Models\Product; use Illuminate\Support\Facades\Cache; use Laravel\Nova\Fields\Select; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\LensRequest; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Lenses\Lens; class CompareProduct extends Lens { public static $comparebelField; public static function query(LensRequest $request, $query) { $compare = Cache::get('compare'); if ($compare) { self::$comparebelField = $compare['field']; $existFields = Product::where('retailer_id', $compare['retailer'])->pluck('sku')->all(); return $request->withOrdering($request->withFilters( $query->where('retailer_id', '!=', $compare['retailer'])->whereIn('sku', $existFields)->orderBy('retailer_id', 'DESC') )); } return $request->withOrdering($request->withFilters( $query->where('id', -1) )); } /** * Get the fields available to the lens. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function fields(NovaRequest $request) { if (self::$comparebelField) { return [ Text::make('Name') ->sortable() ->rules('required', 'max:255', 'min:2'), Select::make('Retailer', 'retailer_id') ->options( Retailer::pluck('name', 'id')->all() ) ->rules('required') ->placeholder('Choose retailer') ->displayUsingLabels(), Text::make('SKU') ->sortable() ->rules('numeric'), Text::make(ucfirst(self::$comparebelField)) ->sortable() ->rules('required'), ]; } return []; } /** * Get the cards available on the lens. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function cards(NovaRequest $request) { return []; } /** * Get the filters available for the lens. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function filters(NovaRequest $request) { return []; } /** * Get the actions available on the lens. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function actions(NovaRequest $request) { if (Cache::get('compare')) { return [ new \App\Nova\Actions\ChangeValue(self::$comparebelField), ]; } return [ \App\Nova\Actions\CompareActionChangeValues::make()->standalone(), ]; } /** * Get the URI key for the lens. * * @return string */ public function uriKey() { return 'compare-product'; } }