mirror of https://github.com/kcal-app/kcal.git
Use `x-spread` for ingredients picker JS
This commit is contained in:
parent
e335c249d8
commit
ff829d9d8d
|
|
@ -1,4 +1,4 @@
|
||||||
<div x-data="{ searching: false, results: [] }">
|
<div x-data="picker()">
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<x-inputs.input type="hidden"
|
<x-inputs.input type="hidden"
|
||||||
|
|
@ -10,16 +10,12 @@
|
||||||
value="{{ $defaultName ?? '' }}"
|
value="{{ $defaultName ?? '' }}"
|
||||||
placeholder="Search..."
|
placeholder="Search..."
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
x-on:input.debounce.400ms="if ($event.target.value != '') {
|
x-ref="ingredients_name"
|
||||||
fetch('{{ route('ingredient-picker.search') }}?term=' + $event.target.value)
|
x-spread="search" />
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => { results = data; searching = true; }); }"
|
|
||||||
x-on:focusout.debounce.200ms="searching = false;"
|
|
||||||
x-ref="ingredients_name" />
|
|
||||||
</div>
|
</div>
|
||||||
<div x-show="searching" x-cloak>
|
<div x-show="searching" x-cloak>
|
||||||
<div class="absolute border-2 border-gray-500 border-b-0 bg-white"
|
<div class="absolute border-2 border-gray-500 border-b-0 bg-white"
|
||||||
x-on:click="selected = $event.target; if (selected.dataset.id) { $refs.ingredients_name.value = selected.dataset.value; $refs.ingredients.value = selected.dataset.id; searching = false; }">
|
x-spread="ingredient">
|
||||||
<template x-for="result in results" :key="result.id">
|
<template x-for="result in results" :key="result.id">
|
||||||
<div class="p-1 border-b-2 border-gray-500 hover:bg-yellow-300 cursor-pointer"
|
<div class="p-1 border-b-2 border-gray-500 hover:bg-yellow-300 cursor-pointer"
|
||||||
x-bind:data-id="result.id"
|
x-bind:data-id="result.id"
|
||||||
|
|
@ -44,3 +40,39 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@once
|
||||||
|
@push('scripts')
|
||||||
|
<script type="text/javascript">
|
||||||
|
let picker = () => {
|
||||||
|
return {
|
||||||
|
searching: false,
|
||||||
|
results: [],
|
||||||
|
search: {
|
||||||
|
['@input.debounce.400ms']($event) {
|
||||||
|
if ($event.target.value !== '') {
|
||||||
|
fetch('{{ route('ingredient-picker.search') }}?term=' + $event.target.value)
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => { this.results = data; this.searching = true; });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['@focusout.debounce.200ms']() {
|
||||||
|
this.searching = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ingredient: {
|
||||||
|
['@click']($event) {
|
||||||
|
let selected = $event.target;
|
||||||
|
if (selected.dataset.id) {
|
||||||
|
this.$refs.ingredients_name.value = selected.dataset.value;
|
||||||
|
this.$refs.ingredients.value = selected.dataset.id;
|
||||||
|
this.searching = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
@endonce
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,6 @@
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@isset($scripts) {{ $scripts }} @endisset
|
@stack('scripts')
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue