Компонент withNotices — это высокоуровневый компонент (Higher-Order Component) в WordPress, предназначенный для добавления возможности отображения уведомлений внутри обернутого компонента. Он часто используется в интерфейсах, где необходимо выводить сообщения об ошибках, предупреждениях или успешных действиях.
Основные свойства withNotices
Оборачивая компонент с помощью withNotices, мы добавляем к нему следующие свойства:
- noticeOperations — объект, содержащий функции для управления уведомлениями, такие как добавление и удаление уведомлений.
- noticeUI — элемент интерфейса, который отображает список уведомлений.
- noticeList — массив объектов уведомлений, доступный для прямой обработки и отображения.
Основные функции noticeOperations
- createNotice: Добавляет новое уведомление.
- Параметры: notice(объект) — объект с параметрами уведомления.
 
- Параметры: 
- createErrorNotice: Добавляет уведомление об ошибке.
- Параметры: msg(строка) — текст сообщения об ошибке.
 
- Параметры: 
- removeAllNotices: Удаляет все уведомления.
- removeNotice: Удаляет уведомление по ID.
- Параметры: id(строка) — ID уведомления, которое нужно удалить.
 
- Параметры: 
Пример 1: Добавление уведомления об ошибке
В этом примере создадим компонент, который позволяет добавлять уведомление об ошибке при нажатии кнопки.
Шаг 1: Импорт необходимых компонентов
import { withNotices, Button } from '@wordpress/components';
Шаг 2: Создаем компонент с уведомлением об ошибке
Используем функцию createErrorNotice для добавления уведомления с сообщением об ошибке.
const MyComponentWithErrorNotice = withNotices(({ noticeOperations, noticeUI }) => {
    const showErrorNotice = () => noticeOperations.createErrorNotice('Произошла ошибка!');
    return (
        <div>
            {noticeUI}
            <Button variant="secondary" onClick={showErrorNotice}>
                Показать ошибку
            </Button>
        </div>
    );
});
Пример 2: Добавление и удаление пользовательских уведомлений
В этом примере создадим компонент, который позволяет добавлять кастомные уведомления и удалять их по ID.
Шаг 1: Определяем компонент с пользовательскими уведомлениями
Этот компонент позволяет добавлять уведомление с произвольным текстом и удалять уведомления по их ID.
const MyComponentWithCustomNotices = withNotices(({ noticeOperations, noticeUI }) => {
    const addCustomNotice = () => {
        noticeOperations.createNotice({
            status: 'success',
            content: 'Успешное действие выполнено!',
            isDismissible: true,
        });
    };
    const removeAllCustomNotices = () => {
        noticeOperations.removeAllNotices();
    };
    return (
        <div>
            {noticeUI}
            <Button variant="secondary" onClick={addCustomNotice}>
                Добавить уведомление
            </Button>
            <Button variant="secondary" onClick={removeAllCustomNotices}>
                Удалить все уведомления
            </Button>
        </div>
    );
});
Пример 3: Использование noticeList для отображения уведомлений в кастомном формате
Вы также можете использовать свойство noticeList, чтобы отображать уведомления в собственном формате.
const MyComponentWithNoticeList = withNotices(({ noticeOperations, noticeList }) => {
    const addInfoNotice = () => {
        noticeOperations.createNotice({
            status: 'info',
            content: 'Это информационное уведомление',
            isDismissible: true,
        });
    };
    return (
        <div>
            <Button variant="secondary" onClick={addInfoNotice}>
                Добавить информационное уведомление
            </Button>
            <div className="custom-notice-list">
                {noticeList.map((notice) => (
                    <div key={notice.id} className={`custom-notice custom-notice-${notice.status}`}>
                        <span>{notice.content}</span>
                        <Button
                            variant="link"
                            onClick={() => noticeOperations.removeNotice(notice.id)}
                        >
                            Удалить
                        </Button>
                    </div>
                ))}
            </div>
        </div>
    );
});
Заключение
withNotices — мощный компонент для управления уведомлениями в WordPress. Он предоставляет удобный интерфейс для добавления, удаления и отображения уведомлений, что делает его отличным выбором для создания отзывчивых и доступных интерфейсов.
