forked from eatvio/eatvio-infra
54 lines
1.5 KiB
PHP
54 lines
1.5 KiB
PHP
<?php
|
||
|
||
namespace App\Livewire\Plan;
|
||
|
||
use App\Models\Plan;
|
||
use Livewire\Component;
|
||
|
||
class Accordion extends Component
|
||
{
|
||
public Plan $plan;
|
||
|
||
public $accordionState = ['options1' => true, 'options2' => false, 'options3' => false];
|
||
|
||
public $options1;
|
||
|
||
public $options2;
|
||
|
||
public $options3;
|
||
|
||
public function mount(Plan $plan): void
|
||
{
|
||
$this->plan = $plan;
|
||
// dd($this->unserializeOptions($plan->packet3_options));
|
||
|
||
$this->options1 = $plan->packet1_options;
|
||
$this->options2 = $plan->packet2_options;
|
||
$this->options3 = $plan->packet3_options;
|
||
}
|
||
|
||
public function render()
|
||
{
|
||
return view('livewire.plan.accordion');
|
||
}
|
||
|
||
public function toggleAccordionState($optionName)
|
||
{
|
||
$this->accordionState[$optionName] = ! $this->accordionState[$optionName];
|
||
|
||
// 1. Если у нас 1 true все остальные делать false(чтобы закрывать остальные вкладки у которых не true)
|
||
// a. у нас есть ключ у которого будет true
|
||
// b. проходим по всем ключам accordionState и все кроме true делаем false
|
||
array_map(fn ($key) => $key === $optionName ? $optionName : $this->accordionState[$key] = false, array_keys($this->accordionState));
|
||
}
|
||
|
||
private function unserializeOptions($str)
|
||
{
|
||
if (preg_match('/^".*"$/', $str)) {
|
||
return json_decode(mb_substr($str, 1, -1), true);
|
||
}
|
||
|
||
return json_decode($str, true);
|
||
}
|
||
}
|