/
SupportQueryString.php
62 lines (48 loc) · 1.91 KB
/
SupportQueryString.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
namespace Livewire\Features\SupportQueryString;
use function Livewire\invade;
use Livewire\ComponentHook;
class SupportQueryString extends ComponentHook
{
public $queryString;
/**
* Note: this is support for the legacy syntax...
*/
function mount()
{
if (! $queryString = $this->getQueryString()) return;
foreach ($queryString as $key => $value) {
$key = is_string($key) ? $key : $value;
$alias = $value['as'] ?? $key;
$history = $value['history'] ?? true;
$keep = $value['alwaysShow'] ?? $value['keep'] ?? false;
$except = $value['except'] ?? null;
$this->component->setPropertyAttribute($key, new BaseUrl(as: $alias, history: $history, keep: $keep, except: $except));
}
}
public function getQueryString()
{
if (isset($this->queryString)) return $this->queryString;
$component = $this->component;
$componentQueryString = [];
if (method_exists($component, 'queryString')) $componentQueryString = invade($component)->queryString();
elseif (property_exists($component, 'queryString')) $componentQueryString = invade($component)->queryString;
return $this->queryString = collect(class_uses_recursive($class = $component::class))
->map(function ($trait) use ($class, $component) {
$member = 'queryString' . class_basename($trait);
if (method_exists($class, $member)) {
return invade($component)->{$member}();
}
if (property_exists($class, $member)) {
return invade($component)->{$member};
}
return [];
})
->values()
->mapWithKeys(function ($value) {
return $value;
})
->merge($componentQueryString)
->toArray();
}
}