Skip to content
This repository was archived by the owner on Jan 27, 2025. It is now read-only.

Commit 448e4d6

Browse files
committed
Inject all assets into cached response
1 parent 443651e commit 448e4d6

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

src/Replacers/AssetsReplacer.php

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
namespace Jonassiewertsen\Livewire\Replacers;
44

5-
use Illuminate\Http\Response;
65
use Illuminate\Support\Str;
7-
use Livewire\Features\SupportAutoInjectedAssets\SupportAutoInjectedAssets;
8-
use Livewire\Features\SupportScriptsAndAssets\SupportScriptsAndAssets;
9-
use Livewire\Livewire;
10-
use Livewire\Mechanisms\FrontendAssets\FrontendAssets;
6+
use Illuminate\Http\Response;
7+
use Statamic\StaticCaching\Cacher;
118
use Statamic\StaticCaching\Replacer;
9+
use Statamic\StaticCaching\Cachers\NullCacher;
10+
use Livewire\Mechanisms\FrontendAssets\FrontendAssets;
11+
use Livewire\Features\SupportScriptsAndAssets\SupportScriptsAndAssets;
12+
use Livewire\Features\SupportAutoInjectedAssets\SupportAutoInjectedAssets;
1213

1314
class AssetsReplacer implements Replacer
1415
{
@@ -18,31 +19,54 @@ public function prepareResponseToCache(Response $responseToBeCached, Response $i
1819
return;
1920
}
2021

21-
if (! $assets = SupportScriptsAndAssets::getAssets()) {
22+
// Don't disturb Livewire's assets injection when caching is off.
23+
if (app(Cacher::class) instanceof NullCacher) {
2224
return;
2325
}
2426

27+
$assetsHead = '';
28+
$assetsBody = '';
29+
30+
$assets = array_values(SupportScriptsAndAssets::getAssets());
31+
32+
if (count($assets) > 0) {
33+
foreach ($assets as $asset) {
34+
$assetsHead .= $asset."\n";
35+
}
36+
}
37+
38+
if ($this->shouldInjectLivewireAssets($initialResponse)) {
39+
$assetsHead .= FrontendAssets::styles()."\n";
40+
$assetsBody .= FrontendAssets::scripts()."\n";
41+
42+
/**
43+
* Ensure Livewire injects its assets on the initial request.
44+
* @see \Livewire\Features\SupportAutoInjectedAssets\SupportAutoInjectedAssets
45+
*/
46+
app(FrontendAssets::class)->hasRenderedStyles = false;
47+
app(FrontendAssets::class)->hasRenderedScripts = false;
48+
}
49+
2550
$responseToBeCached->setContent(
26-
SupportAutoInjectedAssets::injectAssets(
27-
html: $content,
28-
assetsHead: implode('', $assets),
29-
assetsBody: ''
30-
)
51+
SupportAutoInjectedAssets::injectAssets($content, $assetsHead, $assetsBody)
3152
);
3253
}
3354

34-
public function replaceInCachedResponse(Response $response)
55+
protected function shouldInjectLivewireAssets(Response $response): bool
3556
{
3657
if (Str::contains($response, FrontendAssets::scripts())) {
37-
return;
58+
return false;
3859
}
3960

4061
if (Str::contains($response, FrontendAssets::scriptConfig())) {
41-
return;
62+
return false;
4263
}
4364

44-
app(FrontendAssets::class)->hasRenderedScripts = false;
65+
return true;
66+
}
4567

46-
Livewire::forceAssetInjection();
68+
public function replaceInCachedResponse(Response $response)
69+
{
70+
//
4771
}
4872
}

src/ServiceProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public function bootAddon(): void
3030
protected function bootReplacers(): void
3131
{
3232
config()->set('statamic.static_caching.replacers', array_merge(
33-
config('statamic.static_caching.replacers'),
34-
config('statamic-livewire.replacers')
33+
config('statamic-livewire.replacers'),
34+
config('statamic.static_caching.replacers')
3535
));
3636
}
3737

0 commit comments

Comments
 (0)