| Current Path : /home/forge/stage.sksb.smartcon-survey.com/app/Livewire/ |
| Current File : /home/forge/stage.sksb.smartcon-survey.com/app/Livewire/TopicDetail.php |
<?php
namespace App\Livewire;
use App\Filters\InterviewFilter;
use App\Helpers\SurveyJSHelper;
use App\Livewire\Filter\QuarterFilter;
use App\Models\Department;
use App\Models\Interview;
use App\Models\Topic;
use Livewire\Component;
class TopicDetail extends Component
{
public $topicId;
public $currentTopic;
public $interviews;
public $results;
public $departments;
public $quarters;
public $open = false;
// Selected filters
public $selectedDepartments = [];
public $selectedAges = [];
public $leadingPosition;
public $selectedGender;
public $selectedQuarters = [];
public $allSelectedFilters = [];
public $colors = [0 => '#4CAF50', 1 => '#8AC249', 2 => '#FFEB3B', 3 => '#FFC107', 4 => '#F44336', 98 => 'rgb(229, 231, 235)'];
public $reversedColors =
[0 => '#4CAF50', 1 => '#8AC249', 2 => '#FFEB3B', 3 => '#FFC107', 4 => '#F44336', 98 => 'rgb(229, 231, 235)'];
public $indexLabels = ['sehr zufrieden', 'zufrieden', 'teils/teils', 'unzufrieden', 'sehr unzufrieden'];
protected $queryString = [
'topicId',
];
public function changeOpen()
{
$this->open = ! $this->open;
}
public function mount()
{
$this->currentTopic = Topic::where('id', $this->topicId)->first();
$this->quarters = (new QuarterFilter)->quarters();
$this->interviews = Interview::where([
['topic_id', $this->topicId],
['is_test', 0],
])->get();
// Different filters depending on company (admiral/löwen)
// We don't use the deparments from the db, but instead we use groups
$this->departments = Department::all();
$sh = new SurveyJSHelper;
$sh->setResults($this->currentTopic, $this->interviews)->addAverage();
$this->results = $sh->getResults();
}
public static function baseFilter($topicId): array
{
return [['is_test', '=', 0], ['topic_id', '=', $topicId]];
}
public function updatedInterviews($value)
{
$sh = new SurveyJSHelper;
$sh->setResults($this->currentTopic, $this->interviews)->addAverage();
$this->results = $sh->getResults();
}
public function clearFilter()
{
$this->selectedDepartments = [];
$this->selectedAges = [];
$this->leadingPosition = null;
$this->selectedGender = null;
$this->selectedQuarters = [];
$this->filter();
}
public function filter()
{
$filters = new InterviewFilter($this->allFilters());
$this->interviews = Interview::where('topic_id', $this->topicId)->filter($filters)->get();
$sh = new SurveyJSHelper;
$sh->setResults($this->currentTopic, $this->interviews)->addAverage();
$this->results = $sh->getResults();
}
public function allFilters()
{
$all = [
'departments' => $this->selectedDepartments,
'ages' => $this->selectedAges,
'quarter' => $this->selectedQuarters,
'leadingPosition' => $this->leadingPosition,
];
$all = array_map(fn ($item) => ! empty($item) || $item == '0' ? $item : null, $all);
return array_filter($all, fn ($item) => $item !== null);
}
public function render()
{
return view('livewire.topic-detail');
}
}