"use client"; import type { PropsWithChildren } from "react"; import { Suspense, use } from "react"; import { Indicator, Menu, Text } from "@mantine/core"; import { IconBellRinging } from "@tabler/icons-react"; import type { RouterOutputs } from "@homarr/api"; import { useScopedI18n } from "@homarr/translation/client"; interface UpdateIndicatorProps extends PropsWithChildren { availableUpdatesPromise: Promise | undefined; disabled: boolean; } export const UpdateIndicator = ({ children, availableUpdatesPromise, disabled }: UpdateIndicatorProps) => { if (disabled || availableUpdatesPromise === undefined) { return children; } return ( {children} ); }; interface InnerUpdateIndicatorProps extends PropsWithChildren { availableUpdatesPromise: Promise; disabled: boolean; } const InnerUpdateIndicator = ({ children, disabled, availableUpdatesPromise }: InnerUpdateIndicatorProps) => { const availableUpdates = use(availableUpdatesPromise); return ( {children} ); }; interface AvailableUpdatesMenuItemProps { availableUpdatesPromise: Promise | undefined; } export const AvailableUpdatesMenuItem = ({ availableUpdatesPromise }: AvailableUpdatesMenuItemProps) => { if (availableUpdatesPromise === undefined) { return null; } return ( ); }; interface InnerAvailableUpdatesMenuItemProps { availableUpdatesPromise: Promise; } const InnerAvailableUpdatesMenuItem = ({ availableUpdatesPromise }: InnerAvailableUpdatesMenuItemProps) => { const t = useScopedI18n("common.userAvatar.menu"); const availableUpdates = use(availableUpdatesPromise); if (availableUpdates === undefined || availableUpdates.length === 0) { return null; } const latestUpdate = availableUpdates.at(0); if (!latestUpdate) return null; return ( <> }> {t("updateAvailable", { countUpdates: String(availableUpdates.length), tag: latestUpdate.tagName, })} ); };