CCCPaste

ed20b7a5e60eb

function updateAllSelects() {
  const selects = Array.from(container.querySelectorAll('select.item-select'));

  // Получаем текущие выбранные значения для каждого селекта
  const selectedValues = selects.map(s => s.value);

  selects.forEach((select, idx) => {
    const currentValue = select.value;

    // Список выбранных в других селектах
    const otherSelected = selectedValues.filter((val, i) => i !== idx);

    // Формируем доступные опции для этого селекта:
    // Все элементы массива кроме тех, что заняты в других селектах,
    // плюс текущее выбранное значение (даже если оно занято, чтобы не сбросить выбор)
    const availableOptions = items.filter(item => {
      return !otherSelected.includes(item) || item === currentValue;
    });

    // Сохраняем позицию курсора (если нужно)

    // Очищаем и создаём опции заново
    select.innerHTML = '';
    availableOptions.forEach(optionValue => {
      const option = document.createElement('option');
      option.value = optionValue;
      option.textContent = optionValue;
      select.appendChild(option);
    });

    // Если текущее значение стало недоступно - выбрать первый доступный вариант
    if (!availableOptions.includes(currentValue)) {
      select.value = availableOptions.length > 0 ? availableOptions[0] : '';
      selectedValues[idx] = select.value; // обновляем выбранные значения
    } else {
      select.value = currentValue;
    }
  });
}