Цепочка алертов

Одной из уникальных особенностей библиотеки SweetAlert является возможность создания последовательности всплывающих окон с различными сообщениями и действиями. Эта возможность позволяет эффективно взаимодействовать с пользователем, предоставляя ему пошаговые инструкции или последовательно запрашивая информацию. Цепочка алертов позволяет разработчику задать логическую последовательность для показа различных окон, которая может зависеть от действий пользователя или состояния программы.

Основы цепочки алертов

Цепочка алертов создаётся с помощью методов, которые поддерживают асинхронную работу с промисами. В отличие от стандартного использования SweetAlert, где пользователь взаимодействует с одним всплывающим окном, цепочка алертов позволяет создавать динамичное взаимодействие с пользователем. Каждый последующий алерт может зависеть от действий, выполненных в предыдущем.

Swal.fire({
  title: 'Первый алерт',
  text: 'Этот алерт запускает второй',
  icon: 'info'
}).then(() => {
  return Swal.fire({
    title: 'Второй алерт',
    text: 'После этого появится третий',
    icon: 'info'
  });
}).then(() => {
  return Swal.fire({
    title: 'Третий алерт',
    text: 'Цепочка завершена',
    icon: 'success'
  });
});

В этом примере после завершения первого алерта будет показан второй, а после его закрытия – третий. Это простой пример использования цепочки, где каждый следующий алерт запускается после закрытия предыдущего.

Передача данных между алертами

С помощью цепочки алертов можно передавать данные между различными всплывающими окнами. Это может быть полезно, когда нужно собирать информацию от пользователя в процессе взаимодействия с ним. Например, если первый алерт запрашивает имя, то оно может быть передано в следующий алерт.

Swal.fire({
  title: 'Введите ваше имя',
  input: 'text',
  inputPlaceholder: 'Имя'
}).then(result => {
  const name = result.value;
  return Swal.fire({
    title: 'Подтверждение',
    text: `Вы ввели имя: ${name}`,
    icon: 'question',
    showCancelButton: true
  });
}).then(result => {
  if (result.isConfirmed) {
    Swal.fire('Спасибо', 'Данные подтверждены', 'success');
  } else {
    Swal.fire('Ошибка', 'Пожалуйста, попробуйте снова', 'error');
  }
});

В данном примере пользователю сначала предлагается ввести имя, а затем он получает подтверждающее окно с его введёнными данными. В зависимости от его выбора, показывается либо сообщение об успешной операции, либо ошибка.

Использование условий в цепочке алертов

Цепочка алертов может включать условия, которые изменяют ход выполнения программы. Например, можно делать переходы между окнами в зависимости от данных, полученных на предыдущем шаге.

Swal.fire({
  title: 'Введите возраст',
  input: 'number',
  inputPlaceholder: 'Возраст'
}).then(result => {
  const age = parseInt(result.value, 10);
  if (age >= 18) {
    return Swal.fire({
      title: 'Доступ разрешён',
      text: 'Вы совершеннолетний, доступ открыт',
      icon: 'success'
    });
  } else {
    return Swal.fire({
      title: 'Доступ запрещён',
      text: 'Возраст недостаточен для доступа',
      icon: 'error'
    });
  }
});

В этом примере, в зависимости от возраста, пользователь либо получает разрешение на доступ, либо сообщение о запрете. Цепочка алертов позволяет динамически менять поведение приложения в зависимости от данных, введённых пользователем.

Встраивание пользовательских элементов в цепочку

SweetAlert также позволяет добавлять в алерты элементы управления, такие как формы, поля ввода или переключатели. Это даёт возможность ещё больше кастомизировать цепочку алертов и делать её интерактивной.

Swal.fire({
  title: 'Выберите ваши предпочтения',
  html: `
    <input type="checkbox" id="newsletter" class="swal2-checkbox">
    <label for="newsletter">Подписаться на рассылку</label>
  `,
  confirmButtonText: 'Продолжить'
}).then(() => {
  const newsletter = document.getElementById('newsletter').checked;
  return Swal.fire({
    title: 'Подтверждение',
    text: `Вы ${newsletter ? 'подписались' : 'не подписались'} на рассылку`,
    icon: 'info'
  });
});

В этом примере используется поле выбора, которое влияет на текст в следующем алерте. Такое поведение можно использовать для динамического сбора информации в рамках нескольких окон.

Взаимодействие с несколькими алертами

Цепочка алертов может быть использована для создания сложных форм или запросов, требующих нескольких шагов. Например, можно провести пользователя через серию шагов, задавая вопросы и собирая информацию, прежде чем показать итоговое сообщение.

Swal.fire({
  title: 'Шаг 1',
  text: 'Введите ваш адрес',
  input: 'text',
}).then(result => {
  const address = result.value;
  return Swal.fire({
    title: 'Шаг 2',
    text: 'Введите ваш номер телефона',
    input: 'tel',
  }).then(result => {
    const phone = result.value;
    return Swal.fire({
      title: 'Итог',
      text: `Адрес: ${address}, Телефон: ${phone}`,
      icon: 'success'
    });
  });
});

Здесь последовательность включает два шага с вводом данных, а в конце показывается итоговое сообщение. Такой подход позволяет собирать комплексные данные в процессе взаимодействия с пользователем.

Прерывание цепочки алертов

Цепочку алертов можно прервать в любой момент, если в процессе выполнения нужно вывести экстренное сообщение или изменить сценарий. Например, если пользователь не заполнил обязательное поле, можно остановить дальнейшие шаги.

Swal.fire({
  title: 'Введите ваш email',
  input: 'email',
  inputPlaceholder: 'Введите email'
}).then(result => {
  if (!result.value) {
    return Swal.fire({
      title: 'Ошибка',
      text: 'Email не был введён',
      icon: 'error'
    });
  }
  return Swal.fire({
    title: 'Подтверждение',
    text: 'Email принят',
    icon: 'success'
  });
});

Если email не введён, цепочка прерывается, и пользователь получает сообщение об ошибке.

Заключение

Цепочка алертов в SweetAlert является мощным инструментом для создания динамичных и интерактивных сценариев взаимодействия с пользователем. Возможность строить асинхронные последовательности и передавать данные между окнами даёт разработчику гибкость в проектировании пользовательского интерфейса. Библиотека поддерживает как простые случаи, так и сложные логические цепочки с условиями, обработкой данных и пользовательскими элементами управления.