'$refresh', ]; public function table(Table $table): Table { return $table ->description('') ->description('Bookmaker order is priority. Maximum time than can pass since last check or update. If older bookmaker will be ignored') ->reorderable('sorting') ->reorderRecordsTriggerAction(function (Action $action) { return $action->button(); }) ->paginated(false) ->striped() ->query(LoadBookmaker::load()) ->columns([ TextColumn::make('Position') ->alignCenter() ->badge() ->rowIndex(), TextColumn::make('bookmaker_id')->label('Id'), BookmakerIcon::make('bookmaker.icon')->label('Icon'), TextInputColumn::make('time_lastcheck') ->label('Time Passed') ->prefix('Seconds:') ->rules(['required', 'max:200', 'min:100']), TextInputColumn::make('margin_threshold') ->label('Maximum Margin') ->prefix('Threshold:') ->rules(['required', 'max:200', 'min:100']), ToggleColumn::make('is_active'), ]) ->filters([ Filter::make('method_id') ->schema([ Radio::make('method_id') ->inline() ->default(1) ->label('League / Tournament Level') ->options([ 1 => 'TOP', 2 => 'MIDDLE', 3 => 'LOW', ]), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['method_id'], fn (Builder $query, $method_id): Builder => $query->where('method_id', $method_id), ); })->indicateUsing(function (array $data): array { $indicators = []; if ($data['method_id'] ?? null) { switch ($data['method_id']) { case 1: $indicators[] = Indicator::make('Method: TOP'); break; case 2: $indicators[] = Indicator::make('Method: MIDDLE'); break; case 3: $indicators[] = Indicator::make('Method: LOW'); break; } } return $indicators; })->columnSpan(6), TernaryFilter::make('is_active') ->columnSpan(2) ->default(1) ->label('Show active'), ], layout: FiltersLayout::AboveContent) ->filtersFormColumns(8) ->deferFilters(false) ->toolbarActions([ BulkActionGroup::make([ BulkAction::make('time_lastcheck') ->label('Max time since last check in seconds') ->icon('phosphor-timer') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { ComparingBookmaker::where('id', '=', $record->id) ->update( ['time_lastcheck' => $data['time_lastcheck']] ); } }) ->form([ TextInput::make('time_lastcheck') ->numeric() ->hiddenLabel() ->prefix('Seconds'), ]), BulkAction::make('margin_threshold') ->label('Maximum height of marging') ->icon('phosphor-timer') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { ComparingBookmaker::where('id', '=', $record->id) ->update( ['margin_threshold' => $data['margin_threshold']] ); } }) ->form([ TextInput::make('margin_threshold') ->hiddenLabel() ->numeric() ->rules(['required', 'max:200', 'min:100']) ->prefix('Threshold'), ]), BulkAction::make('Switch On') ->icon('phosphor-play') ->action(function (Collection $records): void { foreach ($records as $record) { ComparingBookmaker::where('id', '=', $record->id) ->update( ['is_active' => 1] ); } }), BulkAction::make('Switch Off') ->icon('phosphor-stop') ->action(function (Collection $records): void { foreach ($records as $record) { ComparingBookmaker::where('id', '=', $record->id) ->update( ['is_active' => 0] ); } }), ]), ])->recordActions([ Action::make('end') ->iconButton() ->icon('phosphor-arrow-fat-line-down') ->tooltip('Move to the end') ->action(function ($record) { $res = ComparingBookmaker::where('method_id', $record->method_id) ->where('sport_id', $record->sport_id) ->where('client_bookmaker_id', $record->client_bookmaker_id) ->orderBy('sorting') ->pluck('bookmaker_id', 'id'); $sorting = 1; foreach ($res as $id => $bookmaker_id) { if ($bookmaker_id == $record->bookmaker_id) { ComparingBookmaker::where('id', $id) ->update(['sorting' => \count($res)]); } else { ComparingBookmaker::where('id', $id) ->update(['sorting' => $sorting]); $sorting++; } } }), Action::make('start') ->iconButton() ->icon('phosphor-arrow-fat-line-up') ->tooltip('Move to begining') ->action(function ($record) { $res = ComparingBookmaker::where('method_id', $record->method_id) ->where('sport_id', $record->sport_id) ->where('client_bookmaker_id', $record->client_bookmaker_id) ->orderBy('sorting') ->pluck('bookmaker_id', 'id'); $sorting = 2; foreach ($res as $id => $bookmaker_id) { if ($bookmaker_id == $record->bookmaker_id) { ComparingBookmaker::where('id', $id) ->update(['sorting' => 1]); } else { ComparingBookmaker::where('id', $id) ->update(['sorting' => $sorting]); $sorting++; } } }), ]); } public function render(): View { return view('livewire.comparing-bookmaker-menu'); } }