boardVersion = uniqid(); $this->lists = PlayerCalculator::load($filters); $active = [2, 4, 6, 9, 10, 11, 12, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 30, 32, 34]; for ($i = 1; $i <= 35; $i++) { if (in_array($i, $active)) $this->lists["dest-{$i}"] = []; else $this->lists["blind-{$i}"] = []; } } public function moveItem($itemId, $fromList, $toList, $newIndex) { $itemId = (string) $itemId; $newIndex = (int) $newIndex; if (! $toList || $fromList === $toList || ! isset($this->lists[$fromList]) || ! isset($this->lists[$toList])) { $this->boardVersion = uniqid(); return; } // Limit-Guard: Wenn das Ziel bereits ein Element enthält, abbrechen if (count($this->lists[$toList]) >= 1) { $this->boardVersion = uniqid(); return; } $foundItem = null; foreach ($this->lists[$fromList] as $key => $item) { if ((string) $item['id'] === $itemId) { $foundItem = $item; unset($this->lists[$fromList][$key]); $this->lists[$fromList] = array_values($this->lists[$fromList]); break; } } if ($foundItem) { array_splice($this->lists[$toList], $newIndex, 0, [$foundItem]); } $this->boardVersion = uniqid(); } public function returnToOrigin($itemId, $currentListId) { $itemId = (string) $itemId; // Log::info($this->boardVersion); // Log::info('itemId, currentListId', [$itemId, $currentListId]); // Log::info('OLD LIST', $this->lists); if (! isset($this->lists[$currentListId])) { $this->boardVersion = uniqid(); return; } $foundItem = null; foreach ($this->lists[$currentListId] as $key => $item) { if ((string) $item['id'] === $itemId) { $foundItem = $item; unset($this->lists[$currentListId][$key]); $this->lists[$currentListId] = array_values($this->lists[$currentListId]); break; } } if ($foundItem && isset($this->lists[$foundItem['origin']])) { // Nur zurücklegen, wenn die Quelle wirklich frei ist array_unshift($this->lists[$foundItem['origin']], $foundItem); // if (count($this->lists[$foundItem['origin']]) < 2) { // Log::info('origin'); // array_unshift($this->lists[$foundItem['origin']], $foundItem); // } else { // // Ausfallsicherheit gegen Datenverlust: Zurück in die Bucht schieben // array_unshift($this->lists[$currentListId], $foundItem); // Log::info('box'); // } } $this->boardVersion = uniqid(); } public function resetBoard() { // Alle 21 Zielbays durchlaufen for ($i = 1; $i <= 21; $i++) { $bayKey = "dest-{$i}"; if (isset($this->lists[$bayKey]) && ! empty($this->lists[$bayKey])) { foreach ($this->lists[$bayKey] as $item) { $targetOrigin = $item['origin']; // Element zurück in sein Original-Quell-Tab schieben if (isset($this->lists[$targetOrigin])) { array_unshift($this->lists[$targetOrigin], $item); } } // Die Zielbucht komplett leeren $this->lists[$bayKey] = []; } } // Falls Sie die boardVersion-Logik nutzen, erneuern wir sie hier für den DOM-Refresh: if (property_exists($this, 'boardVersion')) { $this->boardVersion = uniqid(); } // Falls Sie die Javascript-Event/ignore-Logik nutzen, feuern wir das Refresh-Event: $this->dispatch('refreshBoard', lists: $this->lists); } public function render() { return view('livewire.board-dispatcher'); } }