Skip to content

Commit ede4986

Browse files
committed
feat: Add compability with Alpine 3
I added compatibility with Alpine 3, by default it is still loading the v2.29 of Alpine but this customizable to import Alpine manually. - I moved the Pickaday and moment dependencias to import them by a CDN since with alpine 3 the `init` method is called automatically when the component is rendered
1 parent a1c5284 commit ede4986

File tree

7 files changed

+40
-56
lines changed

7 files changed

+40
-56
lines changed

public/laravel-views.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/js/bootstrap.js

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,17 @@
11
import feather from 'feather-icons'
2-
import Pikaday from 'pikaday'
32

43
try {
54
const setUpUiLibraries = () => {
65
feather.replace()
76
}
87

9-
const datePicker = (id) => {
10-
return {
11-
picker: null,
12-
id: null,
13-
dispatch: null,
14-
init (id, dispatch) {
15-
this.id = id
16-
this.dispatch = dispatch
17-
this.picker = new Pikaday({
18-
field: this.$refs[this.id],
19-
format: "YYYY-MM-DD",
20-
onSelect: this.onSelect.bind(this)
21-
})
22-
},
23-
onSelect (date) {
24-
this.dispatch("input", this.picker.toString("YYYY-MM-DD"));
25-
}
26-
}
27-
}
28-
29-
// require('bootstrap')
308
document.addEventListener("DOMContentLoaded", () => {
319
setUpUiLibraries()
3210

3311
Livewire.hook('message.processed', () => {
3412
setUpUiLibraries()
3513
})
3614
})
37-
38-
window.laravelViews = {
39-
datePicker
40-
}
41-
} catch (e) {}
15+
} catch (error) {
16+
throw new Error(error)
17+
}

resources/views/components/form/datepicker.blade.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
- $id
1414
--}}
1515

16-
@component('laravel-views::components.form.input', [
17-
'label' => $label ?? '',
18-
'name' => $name ?? '',
19-
'placeholder' => $placeholder ?? '',
20-
'value' => $value ?? '',
21-
'model' => $model ?? '',
22-
'id' => $id,
23-
'attributes' => 'x-data="window.laravelViews.datePicker()" x-ref="'.$id.'" x-init="init(\'' . $id . '\', $dispatch)"',
24-
])
25-
@endcomponent
16+
<x-lv-input
17+
:value="$value"
18+
:id="$id"
19+
wire:model="{{ $model }}"
20+
x-data="{ picker: null }"
21+
x-ref="{{ $id }}"
22+
x-init="picker = new Pikaday({ field: $refs['{{ $id }}'], format: 'YYYY-MM-DD', onSelect: () => $dispatch('input', picker.toString('YYYY-MM-DD')) })"
23+
>
24+
</x-lv-input>

resources/views/components/form/input.blade.php

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,18 @@
1212
- $id
1313
- $attributes
1414
--}}
15+
@props(['label' => null])
1516
<div class="text-left mb-4">
16-
<label class="block">
17-
{{ $label ?? '' }}
18-
</label>
17+
@if ($label)
18+
<label class="block">
19+
{{ $label ?? '' }}
20+
</label>
21+
@endif
22+
1923
<input
24+
{{ $attributes }}
2025
class="block appearance-none w-full bg-white border-gray-300 hover:border-gray-500 px-4 py-2 pr-8 rounded leading-tight focus:outline-none focus:bg-white focus:border-blue-600 focus:border-2 border"
2126
type="text"
22-
name="{{ $name ?? '' }}"
23-
placeholder="{{ $placeholder ?? ''}}"
2427
autocomplete="off"
25-
@if (isset($id))
26-
id="{{ $id ?? ''}}"
27-
@endif
28-
wire:model="{{ $model ?? '' }}"
29-
30-
{!! $attributes ?? null !!}
3128
>
3229
</div>

resources/views/components/toolbar/filters.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@
2323
</button>
2424
</div>
2525
@endif
26-
</x-lv-drop-down>
26+
</x-lv-drop-down>
2727
@endif

src/LaravelViews.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public function components()
3030
'form.input-group' => 'form.input-group',
3131
'icon' => 'icon',
3232
'modal' => 'modal',
33-
'form.checkbox' => 'checkbox'
33+
'form.checkbox' => 'checkbox',
34+
'form.input' => 'input',
3435
];
3536
}
3637

@@ -80,7 +81,9 @@ public function js($options = '')
8081
$assets = [
8182
'livewire' => Livewire::scripts(),
8283
'alpine' => '<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.8.2/dist/alpine.min.js" defer></script>',
83-
'laravel-views' => '<script src="' . asset('/vendor/laravel-views.js') . '" type="text/javascript" defer></script>'
84+
'laravel-views' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
85+
<script src="https://cdn.jsdelivr.net/npm/pikaday/pikaday.js"></script>
86+
<script src="' . asset('/vendor/laravel-views.js') . '" type="text/javascript" defer></script>'
8487
];
8588

8689
return $this->getCustomizedLinks($assets, $options);
@@ -116,6 +119,9 @@ private function getCustomizedLinks($assets = [], $options = '')
116119
$links = $assets;
117120
}
118121

119-
return implode("\n", $links);
122+
$linksStr = implode(PHP_EOL, $links);
123+
return <<<HTML
124+
{$linksStr}
125+
HTML;
120126
}
121127
}

tests/Unit/LaravelViewsTest.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ public function testRenderJsLinks()
2626
$js = LaravelViews::js();
2727
$this->assertEquals(
2828
$js,
29-
\Livewire\Livewire::scripts()."\n".
30-
'<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.8.2/dist/alpine.min.js" defer></script>'."\n".
29+
\Livewire\Livewire::scripts().PHP_EOL.
30+
'<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.8.2/dist/alpine.min.js" defer></script>'.PHP_EOL.
31+
'<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>'.PHP_EOL.
32+
'<script src="https://cdn.jsdelivr.net/npm/pikaday/pikaday.js"></script>'.PHP_EOL.
3133
'<script src="' . asset('/vendor/laravel-views.js') . '" type="text/javascript" defer></script>'
3234
);
3335
}
@@ -49,14 +51,18 @@ public function testRenderCustomizedJsLinks()
4951

5052
$this->assertEquals(
5153
$js,
54+
'<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>'.PHP_EOL.
55+
'<script src="https://cdn.jsdelivr.net/npm/pikaday/pikaday.js"></script>'.PHP_EOL.
5256
'<script src="' . asset('/vendor/laravel-views.js') . '" type="text/javascript" defer></script>'
5357
);
5458

5559
$js = LaravelViews::js('laravel-views,alpine');
5660

5761
$this->assertEquals(
5862
$js,
59-
'<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.8.2/dist/alpine.min.js" defer></script>'."\n".
63+
'<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.8.2/dist/alpine.min.js" defer></script>'.PHP_EOL.
64+
'<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>'.PHP_EOL.
65+
'<script src="https://cdn.jsdelivr.net/npm/pikaday/pikaday.js"></script>'.PHP_EOL.
6066
'<script src="' . asset('/vendor/laravel-views.js') . '" type="text/javascript" defer></script>'
6167
);
6268
}

0 commit comments

Comments
 (0)