formulas = FormulaModel::orderBy('size')->get() ->groupBy('size') ->map(function ($items) { return $items->map(fn ($item) => [ 'hash' => $item->hash, 'quality' => $item->quality, 'volume' => $item->volume, ]); })->toArray(); $this->sizes = Bottle::distinct()->orderBy('size')->pluck('size')->toArray(); } #[On('modal:open')] public function openModal(string $method, string $modalTitle, ?string $id = null) { $this->resetValidation(); $this->resetErrorBag(); $this->method = $method; $this->modalTitle = $modalTitle; if ($id) { $this->form->setFormula(FormulaModel::byHashOrFail($id)); } } public function create() { $this->canOrAbort('create formula'); $formula = $this->form->store(); // push new formula to array $size = $formula->size; $this->formulas[$size] ??= []; $this->formulas[$size][] = [ 'hash' => $formula->hash, 'quality' => $formula->quality, 'volume' => $formula->volume, ]; $this->toast('Rumus berhasil ditambahkan.'); Flux::modals()->close(); } public function update() { $this->canOrAbort('update formula'); $formula = $this->form->update(); // update array formulas foreach ($this->formulas as $key => &$items) { $index = array_search($formula->hash, array_column($items, 'hash')); if ($index !== false) { $this->formulas[$key][$index] = [ 'hash' => $formula->hash, 'quality' => $formula->quality, 'volume' => $formula->volume, ]; break; } } unset($items); $this->toast('Rumus berhasil diperbarui.'); Flux::modals()->close(); } public function delete(FormulaModel $formula) { $formula->delete(); // update array formulas $size = $formula->size; if (isset($this->formulas[$size])) { $this->formulas[$size] = array_values(array_filter( $this->formulas[$size], fn ($item) => $item['hash'] !== $formula->hash )); if (empty($this->formulas[$size])) { unset($this->formulas[$size]); } } $this->toast('Rumus berhasil dihapus.'); Flux::modals()->close(); } public function render() { return view('livewire.studio.master.formulas', [ 'pageTitle' => 'Rumus', ]); } }