diff --git a/src/DataTables/AttachmentDataTable.php b/src/DataTables/AttachmentDataTable.php index 01965445..dd82f5a8 100644 --- a/src/DataTables/AttachmentDataTable.php +++ b/src/DataTables/AttachmentDataTable.php @@ -24,6 +24,7 @@ namespace App\DataTables; use App\DataTables\Column\LocaleDateTimeColumn; use App\DataTables\Column\PrettyBoolColumn; +use App\DataTables\Column\RowClassColumn; use App\DataTables\Filters\AttachmentFilter; use App\Entity\Attachments\Attachment; use App\Entity\LogSystem\AbstractLogEntry; @@ -60,10 +61,7 @@ final class AttachmentDataTable implements DataTableTypeInterface public function configure(DataTable $dataTable, array $options): void { - $dataTable->add('$$rowClass', TextColumn::class, [ - 'label' => '', - 'className' => 'no-colvis', - 'visible' => false, + $dataTable->add('dont_matter', RowClassColumn::class, [ 'render' => function ($value, Attachment $context) { //Mark attachments with missing files yellow if(!$this->attachmentHelper->isFileExisting($context)){ diff --git a/src/DataTables/Column/RowClassColumn.php b/src/DataTables/Column/RowClassColumn.php new file mode 100644 index 00000000..4ac61c02 --- /dev/null +++ b/src/DataTables/Column/RowClassColumn.php @@ -0,0 +1,55 @@ +. + */ + +namespace App\DataTables\Column; + +use Omines\DataTablesBundle\Column\AbstractColumn; +use Omines\DataTablesBundle\DataTable; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class RowClassColumn extends AbstractColumn +{ + + public function configureOptions(OptionsResolver $resolver) + { + parent::configureOptions($resolver); + + $resolver->setDefaults([ + 'label' => '', + 'orderable' => false, + 'searchable' => false, + 'className' => 'no-colvis', + 'visible' => false, + ]); + + return $this; + } + + public function initialize(string $name, int $index, array $options, DataTable $dataTable) + { + //The field name is always "$$rowClass" as this is the name the frontend controller expects + parent::initialize('$$rowClass', $index, $options, $dataTable); // TODO: Change the autogenerated stub + } + + public function normalize($value) + { + return $value; + } +} \ No newline at end of file diff --git a/src/DataTables/LogDataTable.php b/src/DataTables/LogDataTable.php index 9e402072..35e24f0d 100644 --- a/src/DataTables/LogDataTable.php +++ b/src/DataTables/LogDataTable.php @@ -27,6 +27,7 @@ use App\DataTables\Column\LocaleDateTimeColumn; use App\DataTables\Column\LogEntryExtraColumn; use App\DataTables\Column\LogEntryTargetColumn; use App\DataTables\Column\RevertLogColumn; +use App\DataTables\Column\RowClassColumn; use App\DataTables\Filters\AttachmentFilter; use App\DataTables\Filters\LogFilter; use App\Entity\Base\AbstractDBElement; @@ -106,10 +107,7 @@ class LogDataTable implements DataTableTypeInterface $options = $resolver->resolve($options); //This special $$rowClass column is used to set the row class depending on the log level. The class gets set by the frontend controller - $dataTable->add('$$rowClass', TextColumn::class, [ - 'label' => '', - 'className' => 'no-colvis', - 'visible' => false, + $dataTable->add('dont_matter', RowClassColumn::class, [ 'render' => static function ($value, AbstractLogEntry $context) { switch ($context->getLevel()) { case AbstractLogEntry::LEVEL_EMERGENCY: diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index 7a3c3faa..491fb7c3 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -28,6 +28,7 @@ use App\DataTables\Column\LocaleDateTimeColumn; use App\DataTables\Column\MarkdownColumn; use App\DataTables\Column\PartAttachmentsColumn; use App\DataTables\Column\PrettyBoolColumn; +use App\DataTables\Column\RowClassColumn; use App\DataTables\Column\SelectColumn; use App\DataTables\Column\SIUnitNumberColumn; use App\DataTables\Column\TagsColumn; @@ -102,6 +103,20 @@ final class PartsDataTable implements DataTableTypeInterface $options = $resolver->resolve($options); $dataTable + //Color the table rows depending on the review and favorite status + ->add('dont_matter', RowClassColumn::class, [ + 'render' => function ($value, Part $context) { + if ($context->isNeedsReview()) { + return 'table-secondary'; + } + if ($context->isFavorite()) { + return 'table-info'; + } + + return ''; //Default coloring otherwise + }, + ]) + ->add('select', SelectColumn::class) ->add('picture', TextColumn::class, [ 'label' => '',