'use client' import classNames from 'classnames' import { FC, HTMLAttributes, ReactElement, ReactNode, useCallback, useState } from 'react' import type { TAlertRole, TAlertSkin,TAriaLive } from 'shared-types' import { PktButton, PktIcon } from '..' export interface IPktAlert extends Omit, 'title'> { skin?: TAlertSkin closeAlert?: boolean title?: ReactNode date?: string ariaLive?: TAriaLive compact?: boolean role?: TAlertRole onClose?: (e: CustomEvent) => void } export type { TAlertSkin } export const PktAlert: FC = ({ children, closeAlert, compact, title, date, ariaLive: ariaLiveCamel, 'aria-live': ariaLiveKebab = 'polite' as TAriaLive, role = 'status', skin = 'info' as TAlertSkin, className, ...props }: IPktAlert): ReactElement => { const [isClosed, setIsClosed] = useState(false) const classes = { 'pkt-alert': true, 'pkt-alert--compact': compact, [`pkt-alert--${skin}`]: skin, 'pkt-hide': isClosed, } const gridClasses = { 'pkt-alert__grid': true, 'pkt-alert__noTitle': !title, 'pkt-alert__noDate': !date, } const onClose = useCallback(() => { setIsClosed(true) if (props.onClose) { props.onClose(new CustomEvent('close', { detail: { origin: event }, bubbles: true, composed: true })) } }, [props.onClose, setIsClosed]) const ariaLive = ariaLiveCamel || ariaLiveKebab return (
{closeAlert && (
Lukk
)} {title &&
{title}
}
{children}
{date &&
Sist oppdatert: {date}
}
) } PktAlert.displayName = 'PktAlert'