Приоритет настроек

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


Уровни конфигурации

Настройки в iziToast можно условно разделить на три уровня:

  1. Глобальные настройки (defaults)
  2. Индивидуальные настройки уведомления
  3. Встроенные значения по умолчанию библиотеки

Каждый следующий уровень имеет более высокий приоритет и может переопределять предыдущий.


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

Глобальные параметры задаются с помощью метода:

iziToast.settings({
    timeout: 5000,
    position: 'topRight',
    theme: 'dark'
});

Эти значения применяются ко всем уведомлениям, если явно не указано иное.

Особенности:

  • Устанавливаются один раз и действуют до изменения
  • Подходят для задания общего стиля приложения
  • Могут быть переопределены локально

Индивидуальные настройки уведомления

При создании конкретного уведомления можно передать собственные параметры:

iziToast.show({
    title: 'Ошибка',
    message: 'Что-то пошло не так',
    timeout: 10000,
    position: 'bottomLeft'
});

Приоритет:

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

Встроенные значения по умолчанию

Если параметр не задан ни глобально, ни локально, используется встроенное значение библиотеки:

timeout: 5000
position: 'bottomRight'
theme: 'light'

Эти значения определены внутри самой библиотеки и служат базовой точкой.


Порядок применения настроек

При создании уведомления применяется следующая последовательность:

  1. Значения из встроенных defaults
  2. Переопределение через iziToast.settings()
  3. Финальное переопределение через параметры метода (show, success, error и т.д.)

Схема приоритета:

Встроенные defaults < Глобальные настройки < Локальные настройки

Практический пример

iziToast.settings({
    timeout: 4000,
    position: 'topCenter'
});

iziToast.show({
    message: 'Сообщение',
    timeout: 10000
});

Результат:

  • timeout будет равен 10000 (локальное значение)
  • position будет равен topCenter (глобальное значение)

Частичное переопределение

Параметры не обязательно задавать полностью. Можно изменить только нужные свойства:

iziToast.settings({
    color: 'blue',
    timeout: 3000
});

iziToast.show({
    message: 'Только цвет изменится',
    color: 'red'
});

Итог:

  • color = red (локально)
  • timeout = 3000 (глобально)

Особенности объединения объектов

Некоторые параметры являются вложенными объектами, например buttons, progressBar, overlay. В таких случаях происходит поверхностное объединение, а не глубокое.

iziToast.settings({
    progressBar: true
});

iziToast.show({
    progressBar: false
});

Поле progressBar полностью переопределяется, а не дополняется.


Влияние методов-обёрток

Методы вроде:

iziToast.success()
iziToast.error()
iziToast.warning()

содержат собственные предустановленные значения:

iziToast.success({
    message: 'Успешно'
});

Фактически это:

iziToast.show({
    color: 'green',
    icon: 'ico-success',
    message: 'Успешно'
});

Приоритет:

  • Значения метода-обёртки выступают как базовые
  • Их можно переопределить вручную
iziToast.success({
    color: 'blue'
});

Конфликты настроек

При наличии противоречий всегда действует правило последнего переопределения:

iziToast.settings({
    timeout: 3000
});

iziToast.show({
    timeout: 2000
});

iziToast.show({
    timeout: 1000
});

Каждое уведомление использует свои локальные значения независимо от предыдущих вызовов.


Сброс настроек

Для возврата к исходному состоянию используется:

iziToast.destroy();

После этого:

  • Глобальные настройки сбрасываются
  • Используются встроенные defaults

Рекомендации по управлению приоритетом

1. Централизация базовых настроек

  • Использовать iziToast.settings() для единообразия

2. Минимизация локальных переопределений

  • Избегать дублирования параметров

3. Явное указание критичных параметров

  • Например, timeout, position, zindex

4. Использование обёрток с осторожностью

  • Понимать, какие значения они уже задают

Типичные ошибки

Переопределение без учета глобальных настроек

iziToast.settings({
    theme: 'dark'
});

iziToast.show({
    theme: 'light'
});

Может привести к несогласованному интерфейсу.


Ожидание глубокого merge объектов

iziToast.settings({
    buttons: [['OK', function() {}]]
});

iziToast.show({
    buttons: [['Cancel', function() {}]]
});

Старые кнопки не сохраняются.


Игнорирование порядка вызовов

iziToast.show({ timeout: 1000 });

iziToast.settings({ timeout: 5000 });

Первое уведомление уже создано и не изменится.


Внутренний механизм приоритета

Библиотека последовательно объединяет объекты настроек:

finalConfig = Object.assign(
    {},
    defaultSettings,
    globalSettings,
    localOptions
);

Это означает:

  • Копирование происходит слева направо
  • Последние значения имеют приоритет

Контроль предсказуемости

Для стабильного поведения важно:

  • Явно задавать ключевые параметры
  • Избегать неявных зависимостей от defaults
  • Стандартизировать использование настроек в проекте

Такой подход позволяет использовать iziToast как полностью управляемый инструмент отображения уведомлений без неожиданных эффектов.