<?php namespace Dcat\Admin\Grid\Tools; use Dcat\Admin\Admin; use Dcat\Admin\Grid; use Illuminate\Contracts\Support\Renderable; class ExportButton implements Renderable { /** * @var Grid */ protected $grid; /** * Create a new Export button instance. * * @param Grid $grid */ public function __construct(Grid $grid) { $this->grid = $grid; } /** * Set up script for export button. */ protected function setUpScripts() { $script = <<<JS $('.{$this->grid->getExportSelectedName()}').on('click', function (e) { e.preventDefault(); var rows = Dcat.grid.selected('{$this->grid->getName()}').join(','); if (! rows) { return false; } var href = $(this).attr('href').replace('__rows__', rows); location.href = href; }); JS; Admin::script($script); } /** * @return string|void */ protected function renderExportAll() { if (! $this->grid->exporter()->option('show_export_all')) { return; } $all = trans('admin.all'); return "<li class='dropdown-item'><a href=\"{$this->grid->exportUrl('all')}\" target=\"_blank\">{$all}</a></li>"; } /** * @return string */ protected function renderExportCurrentPage() { if (! $this->grid->exporter()->option('show_export_current_page')) { return; } $page = $this->grid->model()->getCurrentPage() ?: 1; $currentPage = trans('admin.current_page'); return "<li class='dropdown-item'><a href=\"{$this->grid->exportUrl('page', $page)}\" target=\"_blank\">{$currentPage}</a></li>"; } /** * @return string|void */ protected function renderExportSelectedRows() { if ( ! $this->grid->option('row_selector') || ! $this->grid->exporter()->option('show_export_selected_rows') ) { return; } $selectedRows = trans('admin.selected_rows'); return "<li class='dropdown-item'><a href=\"{$this->grid->exportUrl('selected', '__rows__')}\" target=\"_blank\" class='{$this->grid->getExportSelectedName()}'>{$selectedRows}</a></li>"; } /** * Render Export button. * * @return string */ public function render() { $this->setUpScripts(); $export = trans('admin.export'); return $this->grid->tools()->format( <<<EOT <div class="btn-group dropdown" style="margin-right:3px"> <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> <i class="feather icon-download"></i> <span class="d-none d-sm-inline"> {$export} </span> <span class="caret"></span> <span class="sr-only"></span> </button> <ul class="dropdown-menu" role="menu"> {$this->renderExportAll()} {$this->renderExportCurrentPage()} {$this->renderExportSelectedRows()} </ul> </div> EOT ); } }