diff --git a/assets/css/app.css b/assets/css/app.css index 95bf1516..76de5786 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -679,6 +679,16 @@ table.dataTable { } +/******************************* + Parts datatable styling + ******************************/ +.attach-table-icon { + margin-right: 0.7em; + color: var(--gray); +} +.attach-table-icon:hover { + color: var(--gray-dark); +} /********************************* Workarounds diff --git a/assets/ts_src/ajax_ui.ts b/assets/ts_src/ajax_ui.ts index 1a3ba933..98da4eaf 100644 --- a/assets/ts_src/ajax_ui.ts +++ b/assets/ts_src/ajax_ui.ts @@ -526,14 +526,13 @@ class AjaxUI { $(document).trigger('ajaxUI:dt_loaded'); //Attach event listener to update links after new page selection: - $('#dt').on('draw.dt', function() { + $('#dt').on('draw.dt column-visibility.dt', function() { ajaxUI.registerLinks(); $(document).trigger('ajaxUI:dt_loaded'); }); }); }); - console.debug('Datatables inited.'); } } diff --git a/assets/ts_src/event_listeners.ts b/assets/ts_src/event_listeners.ts index 39c05abe..82f6e203 100644 --- a/assets/ts_src/event_listeners.ts +++ b/assets/ts_src/event_listeners.ts @@ -116,7 +116,7 @@ $(document).on("ajaxUI:reload", function () { }); //Use bootstrap tooltips for the most tooltips -$(document).on("ajaxUI:start ajaxUI:reload", function () { +$(document).on("ajaxUI:start ajaxUI:reload ajaxUI:dt_loaded", function () { $(".tooltip").remove(); $('a[title], button[title], span[title], h6[title], i.fas[title]') //@ts-ignore diff --git a/src/DataTables/Column/PartAttachmentsColumn.php b/src/DataTables/Column/PartAttachmentsColumn.php new file mode 100644 index 00000000..3b0a867d --- /dev/null +++ b/src/DataTables/Column/PartAttachmentsColumn.php @@ -0,0 +1,94 @@ +FAIconGenerator = $FAIconGenerator; + $this->urlGenerator = $urlGenerator; + } + + /** + * The normalize function is responsible for converting parsed and processed data to a datatables-appropriate type. + * + * @param mixed $value The single value of the column + * @return mixed + */ + public function normalize($value) + { + return $value; + } + + public function render($value, $context) + { + if (!$context instanceof Part) { + throw new \RuntimeException('$context must be a Part object!'); + } + $tmp = ""; + $attachments = $context->getAttachments()->filter(function (Attachment $attachment) { + return $attachment->getShowInTable(); + }); + + $count = 5; + foreach ($attachments as $attachment) { + //Only show the first 5 attachments + if (--$count <= 0) { + continue; + } + /** @var Attachment $attachment */ + $tmp .= sprintf( + '%s', + $this->urlGenerator->getViewURL($attachment), + $attachment->getName() . ': ' . $attachment->getFilename(), + $this->FAIconGenerator->generateIconHTML( + $this->FAIconGenerator->fileExtensionToFAType($attachment->getExtension()), + 'fas', + 'fa-2x' + ) + ); + } + + return $tmp; + } + + public function configureOptions(OptionsResolver $resolver) + { + parent::configureOptions($resolver); + } +} \ No newline at end of file diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index bb76cf62..21c0cb57 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -23,6 +23,8 @@ namespace App\DataTables; use App\DataTables\Column\EntityColumn; use App\DataTables\Column\LocaleDateTimeColumn; +use App\DataTables\Column\PartAttachmentsColumn; +use App\Entity\Attachments\Attachment; use App\Entity\Parts\Category; use App\Entity\Parts\Footprint; use App\Entity\Parts\Manufacturer; @@ -44,6 +46,7 @@ use Omines\DataTablesBundle\Column\TextColumn; use Omines\DataTablesBundle\DataTable; use Omines\DataTablesBundle\DataTableTypeInterface; use Symfony\Contracts\Translation\TranslatorInterface; +use function foo\func; class PartsDataTable implements DataTableTypeInterface { @@ -59,8 +62,7 @@ class PartsDataTable implements DataTableTypeInterface public function __construct(EntityURLGenerator $urlGenerator, TranslatorInterface $translator, TreeBuilder $treeBuilder, AmountFormatter $amountFormatter, - PartPreviewGenerator $previewGenerator, AttachmentURLGenerator $attachmentURLGenerator, - FAIconGenerator $FAIconGenerator) + PartPreviewGenerator $previewGenerator, AttachmentURLGenerator $attachmentURLGenerator) { $this->urlGenerator = $urlGenerator; $this->translator = $translator; @@ -275,6 +277,10 @@ class PartsDataTable implements DataTableTypeInterface 'label' => $this->translator->trans('part.table.tags'), 'visible' => false, ]) + ->add('attachments', PartAttachmentsColumn::class, [ + 'label' => $this->translator->trans('part.table.attachments'), + 'visible' => false, + ]) ->addOrderBy('name') ->createAdapter(ORMAdapter::class, [