Skip to content

Commit 8dc043a

Browse files
authored
Merge pull request #110 from hotwired-laravel/fix-install-command-js-imports
Ensure the install command properly configures the JS imports
2 parents 8449da6 + d3e51bb commit 8dc043a

File tree

3 files changed

+55
-20
lines changed

3 files changed

+55
-20
lines changed

src/Commands/TurboInstallCommand.php

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,14 @@ private function publishJsFiles()
4141
File::copy(__DIR__ . '/../../stubs/resources/js/libs/turbo.js', resource_path('js/libs/turbo.js'));
4242
File::copy(__DIR__ . '/../../stubs/resources/js/elements/turbo-echo-stream-tag.js', resource_path('js/elements/turbo-echo-stream-tag.js'));
4343

44-
if ($this->option('alpine') || $this->option('jet')) {
44+
if ($this->option('jet')) {
45+
File::copy(__DIR__ . '/../../stubs/resources/js/libs/alpine-jet.js', resource_path('js/libs/alpine.js'));
46+
} elseif ($this->option('alpine')) {
4547
File::copy(__DIR__ . '/../../stubs/resources/js/libs/alpine.js', resource_path('js/libs/alpine.js'));
4648
}
4749

48-
$imports = $this->appJsImportLines();
49-
50-
File::put(
51-
$appJsFile = resource_path('js/app.js'),
52-
preg_replace(
53-
'/(.*[\'"](?:\.\/)?bootstrap[\'"]\)?;?)/',
54-
<<<JS
55-
\\1
56-
{$imports}
57-
JS,
58-
File::get($appJsFile),
59-
),
60-
);
61-
50+
File::put(resource_path('js/app.js'), $this->appJsImportLines());
51+
File::put(resource_path('js/libs/index.js'), $this->libsIndexJsImportLines());
6252

6353
return self::SUCCESS;
6454
});
@@ -69,12 +59,26 @@ private function appJsImportLines()
6959
$prefix = $this->usingImportmaps() ? '' : './';
7060

7161
$imports = [
62+
"import '{$prefix}bootstrap';",
7263
"import '{$prefix}elements/turbo-echo-stream-tag';",
73-
"import '{$prefix}libs/turbo';",
64+
"import '{$prefix}libs';",
7465
];
7566

67+
return implode("\n", $imports);
68+
}
69+
70+
private function libsIndexJsImportLines()
71+
{
72+
$imports = [];
73+
74+
$imports[] = $this->usingImportmaps()
75+
? "import 'libs/turbo';"
76+
: "import './turbo';";
77+
7678
if ($this->option('alpine') || $this->option('jet')) {
77-
$imports[] = "import '{$prefix}libs/alpine';";
79+
$imports[] = $this->usingImportmaps()
80+
? "import 'libs/alpine';"
81+
: "import './alpine';";
7882
}
7983

8084
return implode("\n", $imports);

stubs/resources/js/libs/alpine-jet.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Alpine from 'alpinejs';
2+
import focus from '@alpinejs/focus';
3+
4+
window.Alpine = Alpine;
5+
6+
Alpine.plugin(focus);
7+
8+
Alpine.start();
9+
10+
function initAlpineTurboPermanentFix() {
11+
document.addEventListener('turbo:before-render', () => {
12+
let permanents = document.querySelectorAll('[data-turbo-permanent]');
13+
let undos = Array.from(permanents).map(el => {
14+
el._x_ignore = true;
15+
return () => {
16+
delete el._x_ignore;
17+
};
18+
});
19+
20+
document.addEventListener('turbo:render', function handler() {
21+
while(undos.length) undos.shift()();
22+
document.removeEventListener('turbo:render', handler);
23+
});
24+
});
25+
}
26+
27+
initAlpineTurboPermanentFix();

stubs/resources/js/libs/alpine.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
import Alpine from 'alpinejs';
2+
3+
window.Alpine = Alpine;
4+
5+
Alpine.start();
6+
17
function initAlpineTurboPermanentFix() {
28
document.addEventListener('turbo:before-render', () => {
39
let permanents = document.querySelectorAll('[data-turbo-permanent]');
@@ -15,6 +21,4 @@ function initAlpineTurboPermanentFix() {
1521
});
1622
}
1723

18-
if (window.Alpine !== undefined) {
19-
initAlpineTurboPermanentFix();
20-
}
24+
initAlpineTurboPermanentFix();

0 commit comments

Comments
 (0)