Skip to content

Commit 14a5271

Browse files
Feat: support OpenScout v5 (#2072)
* feat: support OpenScout v5 * fix * fix: update openspout version requirement to ^4.0 in CI * fix: update openspout version requirement to ^4.23 * fix: update openspout installation condition for PHP 8.3 * fix: remove PHP 8.3 condition for openspout installation in CI configurations --------- Co-authored-by: luanfreitasdev <luanfreitas10@protonmail.com>
1 parent 2210f7f commit 14a5271

7 files changed

Lines changed: 158 additions & 10 deletions

File tree

.github/workflows/mysql.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ jobs:
7272
composer require "laravel/framework:${{ matrix.laravel }}" "livewire/livewire:${{ matrix.livewire }}" --no-interaction --no-update
7373
composer install
7474
75-
- name: Install openspout/openspout
76-
if: matrix.php == '8.2'
77-
run: composer require openspout/openspout
75+
- name: Install openspout/openspout v4
76+
run: composer require openspout/openspout ^4.23
7877

7978
- name: MySQL
8079
run: composer test:mysql

.github/workflows/postgres.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,8 @@ jobs:
7373
composer require "laravel/framework:${{ matrix.laravel }}" "livewire/livewire:${{ matrix.livewire }}" --no-interaction --no-update
7474
composer install
7575
76-
- name: Install openspout/openspout
77-
if: matrix.php == '8.2'
78-
run: composer require openspout/openspout
76+
- name: Install openspout/openspout v4
77+
run: composer require openspout/openspout ^4.23
7978

8079
- name: PostGreSQL
8180
run: composer test:pgsql

.github/workflows/sqlite.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,8 @@ jobs:
6161
composer require "laravel/framework:${{ matrix.laravel }}" "livewire/livewire:${{ matrix.livewire }}" --no-interaction --no-update
6262
composer install
6363
64-
- name: Install openspout/openspout
65-
if: matrix.php == '8.2'
66-
run: composer require openspout/openspout
64+
- name: Install openspout/openspout v4
65+
run: composer require openspout/openspout ^4.23
6766

6867
- name: SQLite
6968
run: composer test:sqlite

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"larastan/larastan": "^2.0|^3.0",
3030
"laradumps/laradumps": "^4.6",
3131
"laravel/scout": "^10.11.3",
32-
"openspout/openspout": "^4.24.5",
32+
"openspout/openspout": "^4.24.5|^5.0",
3333
"composer/composer": "^2.8"
3434
},
3535
"suggest": {

resources/config/livewire-powergrid.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@
139139

140140
'exportable' => [
141141
'default' => 'openspout_v4',
142+
'openspout_v5' => [
143+
'xlsx' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v5\ExportToXLS::class,
144+
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v5\ExportToCsv::class,
145+
],
142146
'openspout_v4' => [
143147
'xlsx' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToXLS::class,
144148
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToCsv::class,
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v5;
4+
5+
use OpenSpout\Common\Entity\Row;
6+
use OpenSpout\Common\Exception\IOException;
7+
use OpenSpout\Writer\CSV\{Options, Writer};
8+
use OpenSpout\Writer\Exception\WriterNotOpenedException;
9+
use PowerComponents\LivewirePowerGrid\Components\Exports\Contracts\ExportInterface;
10+
use PowerComponents\LivewirePowerGrid\Components\Exports\Export;
11+
use PowerComponents\LivewirePowerGrid\Components\SetUp\Exportable;
12+
use Symfony\Component\HttpFoundation\BinaryFileResponse;
13+
14+
/** @codeCoverageIgnore */
15+
class ExportToCsv extends Export implements ExportInterface
16+
{
17+
/**
18+
* @throws WriterNotOpenedException|IOException
19+
*/
20+
public function download(Exportable|array $exportOptions): BinaryFileResponse
21+
{
22+
$deleteFileAfterSend = boolval(data_get($exportOptions, 'deleteFileAfterSend'));
23+
$this->build($exportOptions);
24+
25+
return response()
26+
->download(storage_path($this->fileName.'.csv'))
27+
->deleteFileAfterSend($deleteFileAfterSend);
28+
}
29+
30+
/**
31+
* @throws WriterNotOpenedException|IOException
32+
*/
33+
public function build(Exportable|array $exportOptions): void
34+
{
35+
$stripTags = boolval(data_get($exportOptions, 'stripTags', false));
36+
$data = $this->prepare($this->data, $this->columns, $stripTags);
37+
38+
$csvSeparator = strval(data_get($exportOptions, 'csvSeparator', ','));
39+
$csvDelimiter = strval(data_get($exportOptions, 'csvDelimiter', '"'));
40+
41+
$csvOptions = new Options($csvSeparator, $csvDelimiter);
42+
43+
$writer = new Writer($csvOptions);
44+
$writer->openToFile(storage_path($this->fileName.'.csv'));
45+
46+
$row = Row::fromValues($data['headers']);
47+
48+
$writer->addRow($row);
49+
50+
/** @var array<string> $row */
51+
foreach ($data['rows'] as $row) {
52+
$row = Row::fromValues($row);
53+
$writer->addRow($row);
54+
}
55+
56+
$writer->close();
57+
}
58+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
namespace PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v5;
4+
5+
use OpenSpout\Common\Entity\Row;
6+
use OpenSpout\Common\Entity\Style\Style;
7+
use OpenSpout\Common\Exception\IOException;
8+
use OpenSpout\Writer\Exception\WriterNotOpenedException;
9+
use OpenSpout\Writer\XLSX\{Options, Writer};
10+
use PowerComponents\LivewirePowerGrid\Components\Exports\Contracts\ExportInterface;
11+
use PowerComponents\LivewirePowerGrid\Components\Exports\Export;
12+
use PowerComponents\LivewirePowerGrid\Components\SetUp\Exportable;
13+
use Symfony\Component\HttpFoundation\BinaryFileResponse;
14+
15+
/** @codeCoverageIgnore */
16+
class ExportToXLS extends Export implements ExportInterface
17+
{
18+
/**
19+
* @throws \Exception
20+
*/
21+
public function download(Exportable|array $exportOptions): BinaryFileResponse
22+
{
23+
$deleteFileAfterSend = boolval(data_get($exportOptions, 'deleteFileAfterSend'));
24+
$this->striped = strval(data_get($exportOptions, 'striped'));
25+
26+
/** @var array $columnWidth */
27+
$columnWidth = data_get($exportOptions, 'columnWidth', []);
28+
$this->columnWidth = $columnWidth;
29+
30+
$this->build($exportOptions);
31+
32+
return response()
33+
->download(storage_path($this->fileName.'.xlsx'))
34+
->deleteFileAfterSend($deleteFileAfterSend);
35+
}
36+
37+
/**
38+
* @throws WriterNotOpenedException|IOException
39+
*/
40+
public function build(Exportable|array $exportOptions): void
41+
{
42+
$stripTags = boolval(data_get($exportOptions, 'stripTags', false));
43+
$data = $this->prepare($this->data, $this->columns, $stripTags);
44+
45+
$options = new Options();
46+
$writer = new Writer($options);
47+
48+
$writer->openToFile(storage_path($this->fileName.'.xlsx'));
49+
50+
$style = (new Style())
51+
->withFontBold(true)
52+
->withFontSize(12)
53+
->withShouldWrapText(false)
54+
->withBackgroundColor('d0d3d8');
55+
56+
$row = Row::fromValuesWithStyle($data['headers'], $style);
57+
58+
$writer->addRow($row);
59+
60+
/**
61+
* @var int<1, max> $column
62+
* @var float $width
63+
*/
64+
foreach ($this->columnWidth as $column => $width) {
65+
$options->setColumnWidth($width, $column);
66+
}
67+
68+
$default = (new Style())
69+
->withFontSize(12);
70+
71+
$gray = (new Style())
72+
->withFontSize(12)
73+
->withBackgroundColor($this->striped);
74+
75+
/** @var array<string> $row */
76+
foreach ($data['rows'] as $key => $row) {
77+
if (count($row)) {
78+
if ($key % 2 && $this->striped) {
79+
$row = Row::fromValuesWithStyle($row, $gray);
80+
} else {
81+
$row = Row::fromValuesWithStyle($row, $default);
82+
}
83+
$writer->addRow($row);
84+
}
85+
}
86+
87+
$writer->close();
88+
}
89+
}

0 commit comments

Comments
 (0)