Усилена проверка single-select в компоненте поиска товаров
- Добавлено явное приведение к String при сравнении ID товаров
- Исправлена инициализация selected в методе destroy() (null вместо {})
- Добавлена версия к JS файлу (?v=2) для сброса кэша браузера
- Улучшены комментарии о том, что только ОДИН товар может быть выбран
- Гарантирован корректный single-select режим работы компонента
This commit is contained in:
@@ -275,7 +275,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- JS для компонента поиска -->
|
<!-- JS для компонента поиска -->
|
||||||
<script src="{% static 'products/js/product-search-picker.js' %}"></script>
|
<script src="{% static 'products/js/product-search-picker.js' %}?v=2"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// Элементы формы
|
// Элементы формы
|
||||||
|
|||||||
@@ -327,7 +327,8 @@
|
|||||||
products.forEach(function(product) {
|
products.forEach(function(product) {
|
||||||
// Извлекаем ID (убираем префикс "product_")
|
// Извлекаем ID (убираем префикс "product_")
|
||||||
var productId = String(product.id).replace('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'
|
var html = self.state.currentView === 'grid'
|
||||||
? self._renderGridCard(product, productId, isSelected)
|
? self._renderGridCard(product, productId, isSelected)
|
||||||
@@ -475,7 +476,8 @@
|
|||||||
var card = this.elements.grid.querySelector('[data-product-id="' + productId + '"]');
|
var card = this.elements.grid.querySelector('[data-product-id="' + productId + '"]');
|
||||||
if (!card) return;
|
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) {
|
if (isSelected) {
|
||||||
card.classList.add('selected');
|
card.classList.add('selected');
|
||||||
@@ -577,7 +579,7 @@
|
|||||||
ProductSearchPicker.prototype.destroy = function() {
|
ProductSearchPicker.prototype.destroy = function() {
|
||||||
// Очистить состояние
|
// Очистить состояние
|
||||||
this.state.products = [];
|
this.state.products = [];
|
||||||
this.state.selected = {};
|
this.state.selected = null;
|
||||||
|
|
||||||
// Удалить из хранилища
|
// Удалить из хранилища
|
||||||
if (this.container.id && instances[this.container.id]) {
|
if (this.container.id && instances[this.container.id]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user