Skip to content

Commit 6fca6e0

Browse files
committed
refactoring
1 parent c18884b commit 6fca6e0

File tree

3 files changed

+81
-21
lines changed

3 files changed

+81
-21
lines changed

src/Concerns/InteractsWithColumns.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace Coderflex\LaravelCsv\Concerns;
4+
5+
trait InteractsWithColumns
6+
{
7+
/**
8+
* Converts the columnsToMap property into an associative array.
9+
* @param array $columnsToMap
10+
* @return array
11+
*/
12+
protected function mapThroughColumns(): array
13+
{
14+
if (!$this->columnsToMap) {
15+
return [];
16+
}
17+
18+
return collect($this->columnsToMap)
19+
->mapWithKeys(fn ($column): array => [$column => ''])
20+
->toArray();
21+
}
22+
23+
/**
24+
* Maps requiredColumns property into columnsToMap required state.
25+
* @param array $requiredColumns
26+
* @return array
27+
*/
28+
protected function mapThroughRequiredColumns(): array
29+
{
30+
if (!$this->requiredColumns) {
31+
return [];
32+
}
33+
34+
$this->requiredColumns = collect($this->requiredColumns)
35+
->mapWithKeys(function ($column): array {
36+
return ['columnsToMap.' . $column => 'required'];
37+
})->toArray();
38+
39+
return $this->requiredColumns;
40+
}
41+
42+
/**
43+
* Maps columnLabels property into columnsToMap label state.
44+
* @param array $columnLabels
45+
* @return array
46+
*/
47+
protected function mapThroughColumnLabels(): array
48+
{
49+
50+
if (!$this->columnLabels) {
51+
return [];
52+
}
53+
54+
return collect($this->requiredColumns)
55+
->mapWithKeys(function ($column): array {
56+
return [
57+
'columnsToMap.' . $column => strtolower($this->columnLabels[$column]),
58+
];
59+
})->toArray();
60+
}
61+
}

src/Http/Livewire/ImportCsv.php

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
namespace Coderflex\LaravelCsv\Http\Livewire;
44

5+
use Coderflex\LaravelCsv\Concerns\InteractsWithColumns;
56
use Livewire\Component;
67
use Livewire\WithFileUploads;
8+
use Termwind\Components\Dd;
79

810
class ImportCsv extends Component
911
{
1012
use WithFileUploads;
13+
use InteractsWithColumns;
1114

1215
/** @var string $model*/
1316
public string $model;
@@ -26,39 +29,27 @@ class ImportCsv extends Component
2629

2730
public function mount()
2831
{
29-
$this->columnsToMap = collect($this->columnsToMap)
30-
->mapWithKeys(fn ($column): array => [$column => ''])
31-
->toArray();
32+
$this->columnsToMap = $this->mapThroughColumns();
3233

33-
if ($this->columnLabels) {
34-
$this->columnLabels = collect($this->requiredColumns)
35-
->mapWithKeys(function ($column): array {
36-
return [
37-
'columnsToMap.' . $column => strtolower($this->columnLabels[$column]),
38-
];
39-
})->toArray();
40-
}
34+
$this->columnLabels = $this->mapThroughColumnLabels();
4135

42-
$this->requiredColumns = collect($this->requiredColumns)
43-
->mapWithKeys(function ($column): array {
44-
return ['columnsToMap.' . $column => 'required'];
45-
})->toArray();
36+
$this->requiredColumns = $this->mapThroughRequiredColumns();
4637
}
4738

4839
public function render()
4940
{
5041
return view('laravel-csv::livewire.import-csv');
5142
}
5243

44+
protected function validationAttributes()
45+
{
46+
return $this->columnLabels;
47+
}
48+
5349
protected function rules()
5450
{
5551
return [
5652
'file' => 'required|file|mimes:csv,txt',
5753
] + $this->requiredColumns;
5854
}
59-
60-
protected function validationAttributes()
61-
{
62-
return $this->columnLabels;
63-
}
6455
}

tests/ImportCsvTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@
5858
});
5959

6060
it('maps requiredColumns property into columnsToMap required state', function () {
61+
62+
$columnsToMap = [
63+
'name',
64+
'email',
65+
'phone',
66+
];
67+
6168
$requiredColumns = [
6269
'name',
6370
'email',
@@ -69,6 +76,7 @@
6976
livewire(ImportCsv::class, [
7077
'model' => $model,
7178
'file' => $file,
79+
'columnsToMap' => $columnsToMap,
7280
'requiredColumns' => $requiredColumns,
7381
])
7482
->assertSet('model', $model)
@@ -80,7 +88,7 @@
8088
]);
8189
});
8290

83-
it('maps through columnsLabels to validate attributes', function () {
91+
it('maps through columnsLabels for validate attributes', function () {
8492
$columnsToMap = [
8593
'name', 'email', 'phone',
8694
];

0 commit comments

Comments
 (0)