mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 05:51:08 -05:00
Refactor manufacturer search results template to utilize Alpine.js for state management. Enhanced manufacturer selection handling and improved event dispatching for better user experience.
This commit is contained in:
@@ -1,9 +1,38 @@
|
|||||||
<div class="absolute z-50 w-full mt-1 bg-white border border-gray-300 rounded-lg shadow-lg dark:bg-gray-700 dark:border-gray-600" style="max-height: 240px; overflow-y: auto;">
|
<script>
|
||||||
|
document.addEventListener('alpine:init', () => {
|
||||||
|
Alpine.data('manufacturerSearchResults', () => ({
|
||||||
|
selectManufacturer(id, name) {
|
||||||
|
// Update manufacturer fields using AlpineJS reactive approach
|
||||||
|
const manufacturerInput = this.$el.closest('form').querySelector('#id_manufacturer');
|
||||||
|
const searchInput = this.$el.closest('form').querySelector('#id_manufacturer_search');
|
||||||
|
const resultsDiv = this.$el.closest('form').querySelector('#manufacturer-search-results');
|
||||||
|
|
||||||
|
if (manufacturerInput) manufacturerInput.value = id;
|
||||||
|
if (searchInput) searchInput.value = name;
|
||||||
|
if (resultsDiv) resultsDiv.innerHTML = '';
|
||||||
|
|
||||||
|
// Update ride model search to include manufacturer using HTMX
|
||||||
|
const rideModelSearch = this.$el.closest('form').querySelector('#id_ride_model_search');
|
||||||
|
if (rideModelSearch) {
|
||||||
|
rideModelSearch.setAttribute('hx-include', '[name="manufacturer"]');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dispatch custom event for parent component
|
||||||
|
this.$dispatch('manufacturer-selected', { id, name });
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div x-data="manufacturerSearchResults()"
|
||||||
|
@click.outside="$el.innerHTML = ''"
|
||||||
|
class="absolute z-50 w-full mt-1 bg-white border border-gray-300 rounded-lg shadow-lg dark:bg-gray-700 dark:border-gray-600"
|
||||||
|
style="max-height: 240px; overflow-y: auto;">
|
||||||
{% if manufacturers %}
|
{% if manufacturers %}
|
||||||
{% for manufacturer in manufacturers %}
|
{% for manufacturer in manufacturers %}
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="w-full px-4 py-2 text-left text-gray-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-600"
|
class="w-full px-4 py-2 text-left text-gray-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-600"
|
||||||
onclick="selectManufacturer('{{ manufacturer.id }}', '{{ manufacturer.name|escapejs }}')">
|
@click="selectManufacturer('{{ manufacturer.id }}', '{{ manufacturer.name|escapejs }}')">
|
||||||
{{ manufacturer.name }}
|
{{ manufacturer.name }}
|
||||||
</button>
|
</button>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -17,17 +46,3 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
|
||||||
function selectManufacturer(id, name) {
|
|
||||||
document.getElementById('id_manufacturer').value = id;
|
|
||||||
document.getElementById('id_manufacturer_search').value = name;
|
|
||||||
document.getElementById('manufacturer-search-results').innerHTML = '';
|
|
||||||
|
|
||||||
// Update ride model search to include manufacturer
|
|
||||||
const rideModelSearch = document.getElementById('id_ride_model_search');
|
|
||||||
if (rideModelSearch) {
|
|
||||||
rideModelSearch.setAttribute('hx-include', '[name="manufacturer"]');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user