Skip to content

Commit 528d46b

Browse files
authored
Fix Safari special character encoding issue (livewire#4942)
* Fix Safari special character encoding issue with Dusk test * Empty commit to re-run tests * Remove safari declaration so GH actions can run
1 parent cbe3ee4 commit 528d46b

File tree

6 files changed

+57
-3
lines changed

6 files changed

+57
-3
lines changed

.DS_Store

6 KB
Binary file not shown.

src/HydrationMiddleware/HydratePublicProperties.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,13 @@ public static function dehydrate($instance, $response)
9494
array_walk($publicData, function ($value, $key) use ($instance, $response) {
9595
if (
9696
// The value is a supported type, set it in the data, if not, throw an exception for the user.
97-
is_bool($value) || is_null($value) || is_array($value) || is_numeric($value) || is_string($value)
97+
is_bool($value) || is_null($value) || is_array($value) || is_numeric($value)
9898
) {
9999
data_set($response, 'memo.data.'.$key, $value);
100-
} else if ($value instanceof Wireable && version_compare(PHP_VERSION, '7.4', '>=')) {
100+
} else if(is_string($value)) {
101+
data_set($response, 'memo.data.'.$key, \Normalizer::normalize($value));
102+
}
103+
else if ($value instanceof Wireable && version_compare(PHP_VERSION, '7.4', '>=')) {
101104
$response->memo['dataMeta']['wireables'][] = $key;
102105

103106
data_set($response, 'memo.data.'.$key, $value->toLivewire());
@@ -244,7 +247,7 @@ public static function filterData($instance, $property) {
244247

245248
public static function processRules($rules) {
246249
$rules = Collection::wrap($rules);
247-
250+
248251
$rules = $rules
249252
->mapInto(Stringable::class);
250253

tests/.DS_Store

6 KB
Binary file not shown.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Tests\Browser\StringNormalization;
4+
5+
use Illuminate\Support\Facades\View;
6+
use Livewire\Component as BaseComponent;
7+
8+
class Component extends BaseComponent
9+
{
10+
public $string = '';
11+
public $number = 0;
12+
13+
public function render()
14+
{
15+
return View::file(__DIR__.'/view.blade.php');
16+
}
17+
18+
public function addNumber()
19+
{
20+
$this->number++;
21+
}
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace Tests\Browser\StringNormalization;
4+
5+
use Laravel\Dusk\Browser;
6+
use Livewire\Livewire;
7+
use Tests\Browser\TestCase;
8+
9+
class Test extends TestCase
10+
{
11+
public function test()
12+
{
13+
$this->browse(function (Browser $browser) {
14+
Livewire::visit($browser, Component::class)
15+
/**
16+
* Click button to trigger string re-encoding in dehydrate
17+
*/
18+
->waitForLivewire()->click('#add_number')
19+
->pause('500')
20+
->assertSee('Add Number') // current version throws an error in Safari
21+
;
22+
});
23+
}
24+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div>
2+
<div>{{ $string }}</div>
3+
<div>{{ $number }}</div>
4+
<button id="add_number" wire:click="addNumber">Add Number</button>
5+
</div>

0 commit comments

Comments
 (0)