ScreenSpinner

Компонент-обертка над Spinner. Используется в случаях, когда требуется заблокировать весь интерфейс до завершения асинхронного процесса.

Загружается...

Для возможности собрать компонент по частям доступны подкомпоненты. Это позволит более гибко влиять на эти части, а также отвязаться от логики порталов и всплывающих окон (например, при появлении компонента блокируется скролл).

Загружается...

Подкомпонент контейнера, которой содержит все части ScreenSpinner.

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

Подкомпонент для иконок.

Задаётся свойством mode.

Помимо стандартного стиля компонента (mode="shadow"), есть возможность задать mode="overlay", для использования индикатора загрузки поверх цветных элементов или фотографий.

Загружается...

Задаётся свойством state.

  • "loading" — состояние исполняющегося процесса (по умолчанию);
  • "cancelable" — состояние исполняющегося процесса с возможностью отмены;
  • "done" — успешное завершение процесса;
  • "error" — завершение процесса с ошибкой;
  • "custom" — пользовательский вариант состояния процесса.

Состояние отвечает за иконку, которая будет отрисована. Если вам не подходит ни одно из представленных состояний, то используйте state="custom". Задать пользовательскую иконку в таком случае можно через свойство customIcon.

Загружается...

Задаётся свойством label. Текст располагается под иконкой. Если вы хотите использовать просто иконку без поясняющего текста, пожалуйста, не забывайте передавать описание иконки для ассистивных технологий через свойство children.

Задаётся свойством customIcon и работает совместно со state="custom", .

import { ScreenSpinner } from '@vkontakte/vkui';
import { Icon56CheckCircleOutline } from '@vkontakte/icons';
 
<ScreenSpinner state="custom" customIcon={<Icon56CheckCircleOutline />} />;

VKUI использует порталы ↗ для рендеринга ScreenSpinner.

Свойство usePortal позволяет настраивать порталы:

  • true — использует свойство portalRoot, указанное в компоненте AppRoot, если не указано, то document.body (по умолчанию);
  • false/null — отключает рендер компонента в отдельном контейнере, он будет рендериться непосредственно по месту определения;

Также можно указать конкретный DOM-элемент (полученный, например, через document.getElementById) или ссылку на DOM-элемент (ref-объект ↗).

Чтобы уведомить пользователей скринридеров о выполнении асинхронного процесса, проставьте на SplitLayout или любом корневом компоненте, в котором выполняется процесс, метки aria-busy ↗ и aria-live ↗.

Чтобы заменить текст, который прочитает скринридер, передайте его в children. Он будет скрыт визуально, но останется доступным для ассистивных технологий. Если вы используете свойство label, то передавать children не нужно, будет зачитан текст, переданный в label.

Свойство cancelLabel используется при state="cancelable" и делает кнопку отмены доступной для ассистивных технологий.

Компонент поддерживает свойство disableAnimation, которое позволяет отключить анимацию у спиннера.

СвойствоОписание
cancelLabelstring

Используется при state='cancelable'. Делает доступным для ассистивных технологий.

По умолчанию: -
customIconReactNode

Кастомная иконка, работает совместно со state="custom".

По умолчанию: -
disableAnimationboolean

Отключение анимации.

По умолчанию: -
getRootRefRef<HTMLSpanElement>
По умолчанию: -
labelReactNode

Текст под иконкой.

По умолчанию: -
mode"shadow" | "overlay"

Внешний вид отображения спиннера.

По умолчанию: -
noColorboolean

Задать цвет можно будет через свойство color родителя.

По умолчанию: -
state"done" | "loading" | "custom" | "error" | "cancelable"

Тип отображения спиннера.

По умолчанию: loading
usePortalboolean | HTMLElement | RefObject<HTMLElement | null> | null

Настройка портала для рендеринга компонента.

true - использует portalRoot из контекста AppRoot (если доступен) или document.body; false - отключает использование портала; HTMLElement - указывает конкретный DOM-элемент для использования в качестве портала; React.RefObject<HTMLElement | null> - ссылка на DOM-элемент для использования в качестве портала; null - эквивалентно false, отключает использование портала.

По умолчанию: true (использует `document.body` как портал по умолчанию)
visibilityDelaynumber

Задерживает отрисовку элемента на заданное количество миллисекунд.

По умолчанию: -
СвойствоОписание
customIconReactNode

Кастомная иконка, работает совместно со state="custom".

По умолчанию: -
getRootRefRef<HTMLSpanElement>
По умолчанию: -
labelReactNode

Текст под иконкой.

По умолчанию: -
mode"shadow" | "overlay"

Внешний вид отображения спиннера.

По умолчанию: shadow
state"done" | "loading" | "custom" | "error" | "cancelable"

Тип отображения спиннера.

По умолчанию: loading
visibilityDelaynumber

Задерживает отрисовку элемента на заданное количество миллисекунд.

По умолчанию: -
СвойствоОписание
disableAnimationboolean

Отключение анимации.

По умолчанию: -
getRootRefRef<HTMLSpanElement>
По умолчанию: -
noColorboolean

Задать цвет можно будет через свойство color родителя.

По умолчанию: -
visibilityDelaynumber

Задерживает отрисовку элемента на заданное количество миллисекунд.

По умолчанию: -
СвойствоОписание
cancelLabelstring
По умолчанию: -
getRootRefRef<HTMLElement>
По умолчанию: -