diff --git a/app/Livewire/BoardDispatcher.php b/app/Livewire/BoardDispatcher.php index 241af9ac..08eae71d 100644 --- a/app/Livewire/BoardDispatcher.php +++ b/app/Livewire/BoardDispatcher.php @@ -7,15 +7,16 @@ use App\Models\User; use Filament\Actions\Action; use Filament\Actions\Concerns\InteractsWithActions; use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\Select; use Filament\Schemas\Concerns\InteractsWithSchemas; use Filament\Schemas\Concerns\RestrictsFileUploadsToSchemaComponents; use Filament\Schemas\Contracts\HasSchemas; +use Filament\Schemas\Schema; use Filament\Tables\Columns\ViewColumn; use Filament\Tables\Concerns\InteractsWithTable; use Filament\Tables\Contracts\HasTable; use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\SelectFilter; -use Filament\Forms\Components\Select; use Filament\Tables\Table; use Illuminate\Support\Facades\Log; use Illuminate\Support\HtmlString; @@ -43,8 +44,114 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa public string $ss_team_name = ''; - public array $lineups = [3331 => [2, 9, 23, 30, 10, 24, 12, 19, 26, 21]]; - public array $lineup = [2, 9, 23, 30, 10, 24, 12, 19, 26, 21]; + public array $lineupsMap = [ + '3313' => [9, 16, 23, 11, 18, 25, 19, 6, 34, 21], + '3331' => [9, 16, 23, 17, 11, 25, 12, 19, 26, 21], + '3331-' => [9, 16, 23, 10, 18, 24, 12, 19, 26, 21], + '3331+' => [9, 16, 23, 11, 18, 25, 12, 19, 26, 21], + '3412-' => [9, 16, 23, 4, 10, 24, 32, 19, 20, 21], + '3412+' => [9, 16, 23, 4, 11, 25, 32, 19, 20, 21], + '3421-' => [9, 16, 23, 4, 10, 24, 32, 12, 26, 21], + '3421+' => [9, 16, 23, 4, 11, 25, 32, 12, 26, 21], + '343-' => [9, 16, 23, 4, 10, 24, 32, 6, 34, 21], + '343+' => [9, 16, 23, 4, 11, 25, 32, 6, 34, 21], + '3511' => [9, 16, 23, 4, 11, 17, 25, 32, 19, 21], + '3511-' => [9, 16, 23, 4, 10, 18, 24, 32, 19, 21], + '3511+' => [9, 16, 23, 4, 11, 18, 25, 32, 19, 21], + '352' => [9, 16, 23, 4, 11, 17, 25, 32, 20, 21], + '352-' => [9, 16, 23, 4, 10, 18, 24, 32, 20, 21], + '352+' => [9, 16, 23, 4, 11, 18, 25, 32, 20, 21], + '4132' => [2, 9, 23, 30, 17, 12, 19, 26, 20, 21], + '4213-' => [2, 9, 23, 30, 10, 24, 19, 6, 34, 21], + '4213+' => [2, 9, 23, 30, 11, 25, 19, 6, 34, 21], + '4222' => [2, 9, 23, 30, 10, 24, 12, 26, 20, 21], + '4231' => [2, 9, 23, 30, 10, 24, 12, 19, 26, 21], + '424' => [2, 9, 23, 30, 10, 24, 6, 34, 20, 21], + '4312' => [2, 9, 23, 30, 17, 11, 25, 19, 20, 21], + '4312-' => [2, 9, 23, 30, 10, 18, 24, 19, 20, 21], + '4312+' => [2, 9, 23, 30, 11, 18, 25, 19, 20, 21], + '4321' => [2, 9, 23, 30, 17, 11, 25, 12, 26, 21], + '4321-' => [2, 9, 23, 30, 10, 18, 24, 12, 26, 21], + '4321+' => [2, 9, 23, 30, 11, 18, 25, 12, 26, 21], + '433' => [2, 9, 23, 30, 17, 11, 25, 6, 34, 21], + '433-' => [2, 9, 23, 30, 10, 18, 24, 6, 34, 21], + '433+' => [2, 9, 23, 30, 11, 18, 25, 6, 34, 21], + '4411-' => [2, 9, 23, 30, 4, 10, 24, 32, 19, 21], + '4411+' => [2, 9, 23, 30, 4, 11, 25, 32, 19, 21], + '442' => [2, 9, 23, 30, 4, 17, 18, 32, 20, 21], + '442-' => [2, 9, 23, 30, 4, 10, 24, 32, 20, 21], + '442+' => [2, 9, 23, 30, 4, 11, 25, 32, 20, 21], + '451' => [2, 9, 23, 30, 4, 17, 11, 25, 32, 21], + '451-' => [2, 9, 23, 30, 4, 10, 18, 24, 32, 21], + '451+' => [2, 9, 23, 30, 4, 11, 18, 25, 32, 21], + '523-' => [2, 9, 16, 23, 30, 10, 24, 6, 34, 21], + '523+' => [2, 9, 16, 23, 30, 11, 25, 6, 34, 21], + '5311' => [2, 9, 16, 23, 30, 17, 11, 25, 19, 21], + '5311-' => [2, 9, 16, 23, 30, 10, 18, 24, 19, 21], + '5311+' => [2, 9, 16, 23, 30, 11, 18, 25, 19, 21], + '532' => [2, 9, 16, 23, 30, 17, 11, 25, 20, 21], + '532-' => [2, 9, 16, 23, 30, 10, 18, 24, 20, 21], + '532+' => [2, 9, 16, 23, 30, 11, 18, 25, 20, 21], + '541-' => [2, 9, 16, 23, 30, 4, 10, 24, 32, 21], + '541+' => [2, 9, 16, 23, 30, 4, 11, 25, 32, 21], + ]; + + public array $lineup = []; + + public array $lineup_options = [ + '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+', + ]; + + public string $lineup_selected = '3313'; + public array $boxes = []; public array $beschriftung = []; @@ -55,6 +162,8 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa $this->sourceRecords = PlayerCalculator::load($filters); + $this->lineup = $this->lineupsMap[$this->lineup_selected]; + for ($i = 1; $i <= 35; $i++) { $this->boxes[$i] = []; if (isset($this->activeBoxes[$i])) { @@ -69,7 +178,7 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa public function getHeadingTable(): HtmlString { - return new HtmlString('
' . $this->ss_team_name . '
+ return new HtmlString('
'.$this->ss_team_name.'
Gls
Fls
@@ -83,6 +192,25 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa
'); } + public function form(Schema $schema): Schema + { + return $schema + ->columns(4) + ->components([ + Select::make('lineup_selected') + ->live() + ->hiddenLabel() + ->columnSpan(1) + ->prefix('Lineup') + ->prefixIcon('icon-soccerplayer') + ->searchable() + ->options($this->lineup_options) + ->afterStateUpdated(function ($state, $livewire) { + $livewire->updateLineup($state); + }), + ]); + } + public function table(Table $table): Table { return $table @@ -92,15 +220,15 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa ->close(), Action::make('reset') ->icon('phosphor-arrows-clockwise') - ->action(fn() => $this->clearAll()), + ->action(fn () => $this->clearAll()), Action::make('calculate') ->icon('phosphor-calculator') ->disabled($this->calculationDisabled) - ->action(fn() => $this->calculateAspg()), + ->action(fn () => $this->calculateAspg()), Action::make('copy') ->icon('phosphor-copy') ->disabled($this->copyDisabled) - ->action(fn() => $this->copyResult()), + ->action(fn () => $this->copyResult()), ]) /** * WICHTIG: Da Filament v5 zwingend eine Query braucht, nutzen wir ein @@ -108,14 +236,17 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa * Alternativ kannst du ein anonymes Model nutzen. */ ->query(User::query()->whereRaw('1 = 0')) // Verhindert DB-Abfragen - ->paginated(false) ->striped() ->defaultSort('name') ->columns([ ViewColumn::make('drag_card') ->columnSpanFull() - ->label(fn() => $this->getHeadingTable()) - ->view('filament.tables.columns.drag-card'), + ->label(fn () => $this->getHeadingTable()) + ->view('filament.tables.columns.drag-card') + ->extraAttributes([ + // Limits height, forces scrollbar, and switches layout to block to respect max-height + 'class' => 'max-h-[150px] overflow-y-auto block p-2 bg-gray-50 dark:bg-gray-900 rounded border border-gray-200 dark:border-gray-700', + ]), ]) ->filters([ SelectFilter::make('player_position') @@ -126,7 +257,7 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa 'midfield' => 'Midfield', 'defence' => 'Defence', 'goalkeeper' => 'Goalkeeper', - ])->modifyFormFieldUsing(fn(Select $component) => $component->allowHtml()) + ])->modifyFormFieldUsing(fn (Select $component) => $component->allowHtml()) ->query(function ($query) { return $query; }), @@ -168,6 +299,13 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa } } + public function updateLineup(string $state) + { + $this->clearAll(); + + $this->lineup = $this->lineupsMap[$state]; + } + public function clearBox(int $boxNumber): void { if (isset($this->boxes[$boxNumber])) { @@ -217,7 +355,7 @@ class BoardDispatcher extends Component implements HasActions, HasSchemas, HasTa unset($row['pcolor']); unset($row['ecolor']); unset($row['info']); - $copystring .= implode("\t", $row) . "\n"; + $copystring .= implode("\t", $row)."\n"; } $this->js("navigator.clipboard.writeText(`$copystring`)"); } diff --git a/composer.lock b/composer.lock index 5e4936f3..69607690 100644 --- a/composer.lock +++ b/composer.lock @@ -1584,7 +1584,7 @@ }, { "name": "filament/actions", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", @@ -1633,16 +1633,16 @@ }, { "name": "filament/filament", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "dee3b8fb5432420386aa27af06151239200f020e" + "reference": "1c2d8ed04959da6da7b54bcd6e6b75aeb50ab19a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/dee3b8fb5432420386aa27af06151239200f020e", - "reference": "dee3b8fb5432420386aa27af06151239200f020e", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/1c2d8ed04959da6da7b54bcd6e6b75aeb50ab19a", + "reference": "1c2d8ed04959da6da7b54bcd6e6b75aeb50ab19a", "shasum": "" }, "require": { @@ -1687,20 +1687,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-09-07T18:43:32+00:00" + "time": "2026-09-08T10:21:33+00:00" }, { "name": "filament/forms", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "f066cb545466d5c6a8b208a7485bd21512ffb76e" + "reference": "74b5cda7693267a55af24d314944c667d4669fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/f066cb545466d5c6a8b208a7485bd21512ffb76e", - "reference": "f066cb545466d5c6a8b208a7485bd21512ffb76e", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/74b5cda7693267a55af24d314944c667d4669fab", + "reference": "74b5cda7693267a55af24d314944c667d4669fab", "shasum": "" }, "require": { @@ -1737,11 +1737,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-09-07T18:42:41+00:00" + "time": "2026-09-08T10:24:44+00:00" }, { "name": "filament/infolists", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", @@ -1786,7 +1786,7 @@ }, { "name": "filament/notifications", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", @@ -1833,7 +1833,7 @@ }, { "name": "filament/query-builder", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/query-builder.git", @@ -1879,16 +1879,16 @@ }, { "name": "filament/schemas", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/schemas.git", - "reference": "ed0d42475497567a5b32d1b1a49c5ae9cfe3b73d" + "reference": "ca4e860522d9149f3442468bf7eaebf04bccca67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/schemas/zipball/ed0d42475497567a5b32d1b1a49c5ae9cfe3b73d", - "reference": "ed0d42475497567a5b32d1b1a49c5ae9cfe3b73d", + "url": "https://api.github.com/repos/filamentphp/schemas/zipball/ca4e860522d9149f3442468bf7eaebf04bccca67", + "reference": "ca4e860522d9149f3442468bf7eaebf04bccca67", "shasum": "" }, "require": { @@ -1920,11 +1920,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-09-07T18:43:53+00:00" + "time": "2026-09-08T10:21:40+00:00" }, { "name": "filament/support", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", @@ -1983,7 +1983,7 @@ }, { "name": "filament/tables", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", @@ -2029,7 +2029,7 @@ }, { "name": "filament/widgets", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", @@ -2953,16 +2953,16 @@ }, { "name": "laravel/framework", - "version": "v12.69.1", + "version": "v12.69.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "0c07b0b1f88af44d8558ffadf66900a860f93c23" + "reference": "17d034ef1e209b63a1d3a89c90ce5e89a4eb3fc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0c07b0b1f88af44d8558ffadf66900a860f93c23", - "reference": "0c07b0b1f88af44d8558ffadf66900a860f93c23", + "url": "https://api.github.com/repos/laravel/framework/zipball/17d034ef1e209b63a1d3a89c90ce5e89a4eb3fc5", + "reference": "17d034ef1e209b63a1d3a89c90ce5e89a4eb3fc5", "shasum": "" }, "require": { @@ -3171,7 +3171,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-09-01T21:34:37+00:00" + "time": "2026-09-08T14:29:09+00:00" }, { "name": "laravel/prompts", @@ -4712,24 +4712,24 @@ }, { "name": "mongodb/mongodb", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/mongodb/mongo-php-library.git", - "reference": "bbb13f969e37e047fd822527543df55fdc1c9298" + "url": "https://github.com/mongodb/mongo-php-library", + "reference": "12e56461166d915e3dd8e4969ad0940ed5207d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/bbb13f969e37e047fd822527543df55fdc1c9298", - "reference": "bbb13f969e37e047fd822527543df55fdc1c9298", + "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/12e56461166d915e3dd8e4969ad0940ed5207d88", + "reference": "12e56461166d915e3dd8e4969ad0940ed5207d88", "shasum": "" }, "require": { "composer-runtime-api": "^2.0", - "ext-mongodb": "^2.2", + "ext-mongodb": "^2.3", "php": "^8.1", "psr/log": "^1.1.4|^2|^3", - "symfony/polyfill-php85": "^1.32" + "symfony/polyfill-php85": "^1.33" }, "replace": { "mongodb/builder": "*" @@ -4781,11 +4781,7 @@ "mongodb", "persistence" ], - "support": { - "issues": "https://github.com/mongodb/mongo-php-library/issues", - "source": "https://github.com/mongodb/mongo-php-library/tree/2.2.0" - }, - "time": "2026-02-11T11:39:56+00:00" + "time": "2026-04-28T12:50:06+00:00" }, { "name": "monolog/monolog", @@ -10596,7 +10592,7 @@ }, { "name": "filament/upgrade", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/filamentphp/upgrade.git", @@ -10903,16 +10899,16 @@ }, { "name": "laravel/pint", - "version": "v1.31.0", + "version": "v1.31.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "0730363418ad06a7b267d8f2a4f87eed0ab7f610" + "reference": "b136cebaf0b3f7d288bdafad5088858d082580aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/0730363418ad06a7b267d8f2a4f87eed0ab7f610", - "reference": "0730363418ad06a7b267d8f2a4f87eed0ab7f610", + "url": "https://api.github.com/repos/laravel/pint/zipball/b136cebaf0b3f7d288bdafad5088858d082580aa", + "reference": "b136cebaf0b3f7d288bdafad5088858d082580aa", "shasum": "" }, "require": { @@ -10924,8 +10920,8 @@ }, "require-dev": { "composer/semver": "^3.4.4", - "friendsofphp/php-cs-fixer": "^3.95.24", - "illuminate/view": "^13.30.1", + "friendsofphp/php-cs-fixer": "^3.95.25", + "illuminate/view": "^13.31.0", "larastan/larastan": "^3.11.0", "laravel-zero/framework": "^13.0.0", "laravel/agent-detector": "^2.0.2", @@ -10969,7 +10965,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2026-09-07T15:03:30+00:00" + "time": "2026-09-08T17:10:00+00:00" }, { "name": "laravel/sail", diff --git a/resources/views/filament/tables/columns/drag-card.blade.php b/resources/views/filament/tables/columns/drag-card.blade.php index bb156d18..e5c8b8b1 100644 --- a/resources/views/filament/tables/columns/drag-card.blade.php +++ b/resources/views/filament/tables/columns/drag-card.blade.php @@ -1,16 +1,5 @@ @php $record = $getRecord(); - /* - 'id' => $player_id, - 'name' => $val['player_name'], - 'preferred_foot' => $val['preferred_foot'], - 'player_position' => $player_position, - 'player_color' => $player_color, - 'timed_color' => $timed_color, - 'events_played' => $events_played, - 'everage_minutes' => $everage_minutes, - style="opacity:0.25 !important;" - */ @endphp @if ($record['active'])
table }}
-
+ {{ $this->form }} +
+
@foreach ($beschriftung as $boxNumber => $benennung) @if ($benennung && in_array($boxNumber, $lineup)) @@ -21,11 +24,14 @@ } " :class="isOver ? 'border-primary-500 bg-primary-500/10 ring-2 ring-primary-500/50 scale-[1.02]' : - @if (in_array($benennung, ['SW', 'DR', 'DC', 'DL'])) 'border-gray-800 bg-green-500/30' + @if (in_array($benennung, ['SW', 'DR', 'DC', 'DL'])) + 'border-gray-800 bg-green-500/30' @elseif (in_array($benennung, ['DM', 'MR', 'MC', 'ML', 'AM'])) 'border-gray-800 bg-blue-500/30' @else - 'border-gray-800 bg-amber-500/30' @endif" + 'border-gray-800 bg-amber-500/30' + @endif + " class="border rounded-xl transition-all pt-0 flex flex-col justify-start shadow-2xs transform">