Skip to content

Commit f1cdb4d

Browse files
committed
allow new feature to be configured
1 parent cbccbab commit f1cdb4d

11 files changed

+114
-24
lines changed

docs/columns/column-selection.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,19 @@ public function configure(): void
9595
// Shorthand for $this->setRememberColumnSelectionStatus(false)
9696
$this->setRememberColumnSelectionDisabled();
9797
}
98-
```
98+
```
99+
100+
### setDataTableFingerprint
101+
102+
In order to idenfify each table and prevent conflicts on column selection, each table is given a unique fingerprint.
103+
This fingerprint is generated using the static::class name of the component. If you are reusing
104+
the same component in different parts of your application, you may need to set your own custom fingerprint.
105+
106+
```php
107+
public function configure(): void
108+
{
109+
// Default fingerprint is output of protected method dataTableFingerprint()
110+
// Below will prepend the current route name
111+
$this->setDataTableFingerprint(route()->getName() . '-' . $this->dataTableFingerprint());
112+
}
113+
```

docs/datatable/available-methods.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,17 @@ public function configure(): void
353353
}
354354
```
355355

356+
### setQueryStringAlias
357+
358+
Set an alias for the query string.
359+
360+
```php
361+
public function configure(): void
362+
{
363+
$this->setQueryStringAlias('my-custom-alias');
364+
}
365+
```
366+
356367
## Relationships
357368

358369
**Disabled by default**, enable to eager load relationships for all columns in the component.

src/DataTableComponent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ abstract class DataTableComponent extends Component
5050
/**
5151
* returns a unique id for the table, used as an alias to identify one table from another session and query string to prevent conflicts
5252
*/
53-
public function dataTableFingerprint(): string
53+
protected function dataTableFingerprint(): string
5454
{
5555
$className = str_split(static::class);
5656
$crc32 = sprintf('%u', crc32(serialize($className)));

src/Traits/ComponentUtilities.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function queryString(): array
5656
{
5757
if ($this->queryStringIsEnabled()) {
5858
return [
59-
$this->getTableName() => ['except' => null, 'as' => $this->dataTableFingerprint()],
59+
$this->getTableName() => ['except' => null, 'as' => $this->getQueryStringAlias()],
6060
];
6161
}
6262

src/Traits/Helpers/ColumnSelectHelpers.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,6 @@ protected function forgetColumnSelectSession()
8282
*/
8383
protected function getColumnSelectSessionKey()
8484
{
85-
return $this->dataTableFingerprint().'-columnSelectEnabled';
85+
return $this->getDataTableFingerprint().'-columnSelectEnabled';
8686
}
8787
}

src/Traits/Helpers/ComponentHelpers.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,30 @@
88

99
trait ComponentHelpers
1010
{
11+
public function getDataTableFingerprint(): string
12+
{
13+
return $this->dataTableFingerprint ?? $this->dataTableFingerprint();
14+
}
15+
16+
public function setDataTableFingerprint(string $dataTableFingerprint): self
17+
{
18+
$this->dataTableFingerprint = $dataTableFingerprint;
19+
20+
return $this;
21+
}
22+
23+
public function getQueryStringAlias(): string
24+
{
25+
return $this->queryStringAlias ?? $this->getTableName();
26+
}
27+
28+
public function setQueryStringAlias(string $queryStringAlias): self
29+
{
30+
$this->queryStringAlias = $queryStringAlias;
31+
32+
return $this;
33+
}
34+
1135
/**
1236
* @param Builder
1337
*/

tests/DataTableComponentTest.php

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,50 +42,42 @@ public function primary_key_has_to_be_set(): void
4242
}
4343

4444
/** @test */
45-
public function fingerprint_will_always_be_the_same_for_same_datatable(): void
45+
public function default_fingerprint_will_always_be_the_same_for_same_datatable(): void
4646
{
4747
$this->assertSame(
4848
[
49-
$this->basicTable->dataTableFingerprint(),
50-
$this->basicTable->dataTableFingerprint(),
51-
$this->basicTable->dataTableFingerprint(),
49+
$this->basicTable->getDataTableFingerprint(),
50+
$this->basicTable->getDataTableFingerprint(),
51+
$this->basicTable->getDataTableFingerprint(),
5252
],
5353
[
54-
$this->basicTable->dataTableFingerprint(),
55-
$this->basicTable->dataTableFingerprint(),
56-
$this->basicTable->dataTableFingerprint(),
54+
$this->basicTable->getDataTableFingerprint(),
55+
$this->basicTable->getDataTableFingerprint(),
56+
$this->basicTable->getDataTableFingerprint(),
5757
]
5858
);
59-
$this->assertSame($this->basicTable->dataTableFingerprint(), $this->fingerprintingAlgo($this->basicTable::class));
59+
$this->assertSame($this->basicTable->getDataTableFingerprint(), $this->defaultFingerprintingAlgo($this->basicTable::class));
6060
}
6161

6262
/** @test */
63-
public function datatable_fingerprints_will_be_different_for_each_table(): void
63+
public function default_datatable_fingerprints_will_be_different_for_each_table(): void
6464
{
6565
$mockTable = new class() extends PetsTable {
6666
};
6767

68-
$this->assertNotSame($this->basicTable->dataTableFingerprint(), $mockTable->dataTableFingerprint());
68+
$this->assertNotSame($this->basicTable->getDataTableFingerprint(), $mockTable->getDataTableFingerprint());
6969
}
7070

7171
/** @test */
72-
public function fingerprint_will_be_url_friendy(): void
72+
public function default_fingerprint_will_be_url_friendy(): void
7373
{
7474
$mocks = [];
7575
for ($i = 0; $i < 9; $i++) {
7676
$mocks[$i] = new class() extends PetsTable {
7777
};
78-
$this->assertFalse(filter_var('http://'.$mocks[$i]->dataTableFingerprint().'.dev', FILTER_VALIDATE_URL) === false);
78+
$this->assertFalse(filter_var('http://'.$mocks[$i]->getDataTableFingerprint().'.dev', FILTER_VALIDATE_URL) === false);
7979
}
8080
// control
8181
$this->assertTrue(filter_var('http://[9/$].dev', FILTER_VALIDATE_URL) === false);
8282
}
83-
84-
protected function fingerPrintingAlgo($className)
85-
{
86-
$className = str_split($className);
87-
$crc32 = sprintf('%u', crc32(serialize($className)));
88-
89-
return base_convert($crc32, 10, 36);
90-
}
9183
}

tests/TestCase.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,12 @@ public function getEnvironmentSetUp($app): void
9393

9494
config()->set('app.key', Encrypter::generateKey(config('app.cipher')));
9595
}
96+
97+
protected function defaultFingerPrintingAlgo($className)
98+
{
99+
$className = str_split($className);
100+
$crc32 = sprintf('%u', crc32(serialize($className)));
101+
102+
return base_convert($crc32, 10, 36);
103+
}
96104
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Tests\Traits\Configuration;
4+
5+
use Rappasoft\LaravelLivewireTables\Tests\TestCase;
6+
7+
class FingerprintConfigurationTest extends TestCase
8+
{
9+
/** @test */
10+
public function can_set_fingerprint(): void
11+
{
12+
$this->assertSame('test', $this->basicTable->setDataTableFingerprint('test')->getDataTableFingerprint());
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Tests\Traits\Configuration;
4+
5+
use Rappasoft\LaravelLivewireTables\Tests\TestCase;
6+
7+
class QueryStringAliasConfigurationTest extends TestCase
8+
{
9+
/** @test */
10+
public function can_set_query_string_alias(): void
11+
{
12+
$this->assertSame('test', $this->basicTable->setQueryStringAlias('test')->getQueryStringAlias());
13+
}
14+
}

0 commit comments

Comments
 (0)