Наследование настроек

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


Базовый объект настроек

Любое уведомление строится на основе объекта настроек:

const baseOptions = {
    title: 'Сообщение',
    message: 'Это уведомление',
    position: 'topRight',
    timeout: 5000,
    progressBar: true,
    theme: 'light'
};

Здесь указаны ключевые параметры:

  • title – заголовок уведомления
  • message – текст уведомления
  • position – позиция на экране (topRight, bottomLeft и другие)
  • timeout – время отображения в миллисекундах
  • progressBar – отображение индикатора прогресса
  • theme – цветовая тема (light, dark)

Создание наследуемого уведомления

Для наследования используется копирование базового объекта с последующей модификацией нужных параметров. В JavaScript это удобно делать с помощью оператора spread:

const successOptions = {
    ...baseOptions,
    title: 'Успех',
    message: 'Операция выполнена успешно',
    color: 'green'
};

iziToast.show(successOptions);

В данном примере successOptions наследует все настройки baseOptions, изменяя только title, message и color. Все остальные свойства остаются прежними, что обеспечивает единообразие уведомлений и упрощает поддержку кода.


Глобальные настройки

Библиотека позволяет задавать глобальные настройки, которые будут использоваться по умолчанию для всех уведомлений. Это особенно полезно для применения единых стилей:

iziToast.settings({
    timeout: 4000,
    position: 'bottomRight',
    progressBar: false,
    theme: 'dark'
});

После вызова iziToast.settings() все последующие уведомления наследуют эти значения, если они не переопределены в конкретном объекте настроек.

Пример комбинирования глобальных и локальных настроек:

iziToast.show({
    title: 'Внимание',
    message: 'Это важное уведомление',
    color: 'orange' // переопределяет глобальный стиль
});

В этом случае timeout, position, progressBar и theme берутся из глобальных настроек, а color используется локально.


Наследование сложных структур

Некоторые параметры, такие как buttons, onOpening, onClosing, представляют собой массивы или функции. Их наследование требует особого подхода, чтобы не потерять ссылки на базовые элементы.

const baseButtons = [
    ['<button>OK</button>', function(instance, toast) {
        instance.hide({ transitionOut: 'fadeOut' }, toast);
    }]
];

const infoButtons = [
    ...baseButtons,
    ['<button>Отмена</button>', function(instance, toast) {
        console.log('Отмена нажата');
    }]
];

iziToast.show({
    title: 'Информация',
    message: 'Выберите действие',
    buttons: infoButtons
});

Здесь массив infoButtons наследует базовые кнопки и добавляет новую, сохраняя оригинальную функциональность.


Передача функций обратного вызова

Функции обратного вызова (callbacks) также можно наследовать, комбинируя базовую логику с дополнительной:

const baseCallbacks = {
    onOpening: function() { console.log('Уведомление открывается'); },
    onClosing: function() { console.log('Уведомление закрывается'); }
};

const warningCallbacks = {
    ...baseCallbacks,
    onOpening: function() {
        baseCallbacks.onOpening();
        console.log('Предупреждение открывается');
    }
};

iziToast.show({
    title: 'Предупреждение',
    message: 'Проверьте данные',
    ...warningCallbacks
});

Такой подход обеспечивает повторное использование кода и предотвращает дублирование логики.


Рекомендации по организации наследования

  1. Создавать базовый объект настроек для приложения с общими параметрами (позиция, тема, timeout).
  2. Использовать spread-оператор для создания новых конфигураций с изменением только необходимых свойств.
  3. Комбинировать глобальные и локальные настройки для единообразия интерфейса.
  4. Аккуратно наследовать массивы и функции, чтобы не потерять базовую функциональность.
  5. Выносить повторяющиеся callbacks и buttons в отдельные переменные для повторного использования.

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