@keycloakify/keycloak-account-ui
Version:
Repackaged Keycloak Account UI
37 lines • 1.99 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { AlertVariant } from "@patternfly/react-core";
import { useCallback, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { createNamedContext } from "../../ui-shared/utils/createNamedContext";
import { getErrorDescription, getErrorMessage } from "../../ui-shared/utils/errors";
import { generateId } from "../../ui-shared/utils/generateId";
import { useRequiredContext } from "../../ui-shared/utils/useRequiredContext";
import { useSetTimeout } from "../../ui-shared/utils/useSetTimeout";
import { AlertPanel } from "../../ui-shared/alerts/AlertPanel";
const ALERT_TIMEOUT = 8000;
const AlertContext = createNamedContext("AlertContext", undefined);
export const useAlerts = () => useRequiredContext(AlertContext);
export const AlertProvider = ({ children }) => {
const { t } = useTranslation();
const setTimeout = useSetTimeout();
const [alerts, setAlerts] = useState([]);
const removeAlert = (id) => setAlerts((alerts) => alerts.filter((alert) => alert.id !== id));
const addAlert = useCallback((message, variant = AlertVariant.success, description) => {
const alert = {
id: generateId(),
message,
variant,
description,
};
setAlerts((alerts) => [alert, ...alerts]);
setTimeout(() => removeAlert(alert.id), ALERT_TIMEOUT);
}, [setTimeout]);
const addError = useCallback((messageKey, error) => {
const message = t(messageKey, { error: getErrorMessage(error) });
const description = getErrorDescription(error);
addAlert(message, AlertVariant.danger, description);
}, [addAlert, t]);
const value = useMemo(() => ({ addAlert, addError }), [addAlert, addError]);
return (_jsxs(AlertContext.Provider, { value: value, children: [_jsx(AlertPanel, { alerts: alerts, onCloseAlert: removeAlert }), children] }));
};
//# sourceMappingURL=Alerts.js.map