group(static::getNavigationGroup()) ->icon(static::getNavigationIcon()) ->activeIcon(static::getActiveNavigationIcon()) ->isActiveWhen(fn() => request()->routeIs(static::getRouteName())) ->sort(static::getNavigationSort()) ->url(static::getUrl(), shouldOpenInNewTab: true), // 👈 Forces target="_blank" ]; } protected static string|BackedEnum|null $navigationIcon = 'icon-soccerplayer'; public function getHeading(): string { return ''; } protected static ?string $title = 'Player Props'; protected static ?int $navigationSort = 2; public ?array $filterData; public array $lineUpOptions; public string $activeLineUp = '3313'; public array $players = []; public array $clientLineUps = []; public int $team_id; public function mount(): void { // Initialisiert das Formular mit leeren Werten $this->form->fill(); } public function getWidgetData(): array { return [ 'activeLineUp' => $this->activeLineUp, ]; } public function form(Schema $schema): Schema { return $schema ->columns(5) ->components([ Select::make('cid') ->live() ->preload() ->searchable(false) ->prefixIconColor(fn(Get $get): string => $get('cid') ? 'success' : 'danger') ->prefixIcon('phosphor-globe-fill') ->hiddenLabel() ->options(fn() => LoadSofaScoreCategory::load()) ->placeholder('Country') ->afterStateUpdated(function (callable $set, $state) { $set('lid', null); $set('mid', null); $set('tid', null); $this->dispatch('clear-all'); }), Select::make('lid') ->live() ->preload() ->prefixIconColor(fn(Get $get): string => $get('lid') ? 'success' : 'danger') ->prefixIcon('phosphor-trophy-fill') ->hiddenLabel() ->options(fn(Get $get) => LoadStatisticFixturesLeaguesOptions::load($get('cid'))) ->placeholder('League') ->afterStateUpdated(function (callable $set) { $set('mid', null); $set('tid', null); $this->dispatch('clear-all'); }), Select::make('mid') ->live() ->hiddenLabel() ->prefixIconColor(fn(Get $get): string => $get('mid') ? 'success' : 'danger') ->prefixIcon('phosphor-calendar-check-fill') ->options(function (Get $get) { return LoadStatisticFixturesMatchOptions::load($get('lid')); }) ->afterStateUpdated(function (callable $set, $state) { $set('tid', null); if ($state) { $this->dispatch('match-update', match_id: $state); } else { $this->dispatch('clear-all'); } }) ->placeholder('Events'), Select::make('tid') ->live() ->hiddenLabel() ->prefixIconColor(fn(Get $get): string => $get('tid') ? 'success' : 'danger') ->prefixIcon('icon-player') ->options(function (Get $get) { if ($get('mid')) { $res = StatisticFixtures::where('id', $get('mid'))->first(); $arr = []; if ($res) { $arr[$res->home_id] = SofaScoreRosa::query()->where('ss_team_id', $res->home_id)->value('ss_team_name'); $arr[$res->away_id] = SofaScoreRosa::query()->where('ss_team_id', $res->away_id)->value('ss_team_name'); } return $arr; } }) ->placeholder('Team') ->afterStateUpdated(function ($state, Set $set) { if ($state) { $this->dispatch('team-update', team_id: $state); $tmp = SsLineupMemory::where('client_id', Auth::user()->client_id)->where('team_id', $state)->orderBy('created_at', 'desc')->first(); if ($tmp) { $set('lineup', $tmp->lineup); $this->dispatch('lineup-update', activeLineUp: $tmp->lineup); } } }), Select::make('lineup') ->live() ->hiddenLabel() ->allowHtml() ->native(false) ->selectablePlaceholder(false) ->prefixIconColor('info') ->prefixIcon('icon-soccerfield-fill') ->options(function () { $res = $this->lineUpOptions(); $arr = []; foreach ($res as $key => $value) { if ($this->players && in_array($key, $this->clientLineUps)) { $arr[$key] = $value . ' has lineup'; } else { $arr[$key] = $value; } } return $arr; }) ->placeholder('LineUp') ->searchable() ->default($this->activeLineUp) ->afterStateUpdated(function ($state) { $this->dispatch('lineup-update', activeLineUp: $state); }), ])->statePath('filterData'); } #[On('team-update')] public function syncData(?int $team_id) { if ($team_id) { $this->team_id = $team_id; $this->clientLineUps = SsLineupMemory::where('team_id', $team_id)->where('client_id', Auth::user()->client_id)->pluck('lineup')->toArray(); } else { $this->players = []; $this->dispatch('clear-all'); } } #[On('update-players')] public function updatePlayers(array $players) { $this->players = $players; } protected function getFooterWidgets(): array { return [ PlayerPropsTable::make(['players' => $this->players]), PlayerPropsDrop::make(['players' => $this->players]), ]; } public function getFooterWidgetsColumns(): int|array { return 5; } private function lineUpOptions(): array { return [ '3313' => '3313', '3331' => '3331', '3331-' => '3331-', '3331+' => '3331+', '3412-' => '3412-', '3412+' => '3412+', '3421-' => '3421-', '3421+' => '3421+', '343-' => '343-', '343+' => '343+', '3511' => '3511', '3511-' => '3511-', '3511+' => '3511+', '352' => '352', '352-' => '352-', '352+' => '352+', '4132' => '4132', '4213-' => '4213-', '4213+' => '4213+', '4222' => '4222', '4231' => '4231', '424' => '424', '4312' => '4312', '4312-' => '4312-', '4312+' => '4312+', '4321' => '4321', '4321-' => '4321-', '4321+' => '4321+', '433' => '433', '433-' => '433-', '433+' => '433+', '4411-' => '4411-', '4411+' => '4411+', '442' => '442', '442-' => '442-', '442+' => '442+', '451' => '451', '451-' => '451-', '451+' => '451+', '523-' => '523-', '523+' => '523+', '5311' => '5311', '5311-' => '5311-', '5311+' => '5311+', '532' => '532', '532-' => '532-', '532+' => '532+', '541-' => '541-', '541+' => '541+', ]; } }