import type { Color } from "@yaakapp-internal/plugins"; import type { BannerProps } from "@yaakapp-internal/ui"; import { Banner } from "@yaakapp-internal/ui"; import classNames from "classnames"; import { useKeyValue } from "../../hooks/useKeyValue"; import type { ButtonProps } from "./Button"; import { Button } from "./Button"; export function DismissibleBanner({ children, className, dismissForDays, id, actions, ...props }: BannerProps & { id: string; dismissForDays?: number; actions?: { label: string; onClick: () => void; color?: Color; variant?: ButtonProps["variant"]; }[]; }) { const { isLoading, set: setDismissed, value: dismissed, } = useKeyValue({ namespace: "global", key: ["dismiss-banner", id], fallback: false, }); if (isLoading || isDismissed(dismissed, dismissForDays)) return null; return (
{children}
{actions?.map((a) => ( ))}
); } function isDismissed( dismissed: boolean | string | null, dismissForDays: number | undefined, ): boolean { if (dismissed === false || dismissed == null) return false; if (dismissed === true) return true; if (dismissForDays == null) return dismissed.length > 0; const dismissedAt = new Date(dismissed).getTime(); if (Number.isNaN(dismissedAt)) return false; return Date.now() - dismissedAt < dismissForDays * 24 * 60 * 60 * 1000; }