Усилена проверка single-select в компоненте поиска товаров

- Добавлено явное приведение к String при сравнении ID товаров
- Исправлена инициализация selected в методе destroy() (null вместо {})
- Добавлена версия к JS файлу (?v=2) для сброса кэша браузера
- Улучшены комментарии о том, что только ОДИН товар может быть выбран
- Гарантирован корректный single-select режим работы компонента
This commit is contained in:
2025-12-11 00:32:05 +03:00
parent b6fb1652fe
commit a573890895
2 changed files with 6 additions and 4 deletions

View File

@@ -275,7 +275,7 @@
</div>
<!-- JS для компонента поиска -->
<script src="{% static 'products/js/product-search-picker.js' %}"></script>
<script src="{% static 'products/js/product-search-picker.js' %}?v=2"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Элементы формы

View File

@@ -327,7 +327,8 @@
products.forEach(function(product) {
// Извлекаем ID (убираем префикс "product_")
var productId = String(product.id).replace('product_', '');
var isSelected = self.state.selected && self.state.selected.id === productId;
// Проверка: выбран ли этот товар (только ОДИН может быть выбран)
var isSelected = self.state.selected && String(self.state.selected.id) === String(productId);
var html = self.state.currentView === 'grid'
? self._renderGridCard(product, productId, isSelected)
@@ -475,7 +476,8 @@
var card = this.elements.grid.querySelector('[data-product-id="' + productId + '"]');
if (!card) return;
var isSelected = this.state.selected && this.state.selected.id === productId;
// Проверка: выбран ли этот товар
var isSelected = this.state.selected && String(this.state.selected.id) === String(productId);
if (isSelected) {
card.classList.add('selected');
@@ -577,7 +579,7 @@
ProductSearchPicker.prototype.destroy = function() {
// Очистить состояние
this.state.products = [];
this.state.selected = {};
this.state.selected = null;
// Удалить из хранилища
if (this.container.id && instances[this.container.id]) {