UNPKG

@keycloakify/keycloak-account-ui

Version:
37 lines 1.99 kB
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