// SPDX-License-Identifier: AGPL-3.0-or-later
import {
isSettingsItemExperimental,
isSettingsItemNew,
type SettingsMetadata,
type SettingsStatusBadgeKind,
} from '@app/features/user/components/settings_utils/SettingsMetadata';
import styles from '@app/features/user/components/settings_utils/SettingsStatusBadge.module.css';
import {msg} from '@lingui/core/macro';
import {useLingui} from '@lingui/react/macro';
import {clsx} from 'clsx';
const NEW_DESCRIPTOR = msg({
message: 'NEW',
comment: 'Compact badge shown beside recently added settings.',
});
const EXPERIMENTAL_DESCRIPTOR = msg({
message: 'EXPERIMENTAL',
comment: 'Compact badge shown beside settings that enable experimental behavior.',
});
interface SettingsStatusBadgeProps {
kind: 'new' | SettingsStatusBadgeKind;
className?: string;
}
export function SettingsStatusBadge({kind, className}: SettingsStatusBadgeProps) {
const {i18n} = useLingui();
const label = kind === 'new' ? i18n._(NEW_DESCRIPTOR) : i18n._(EXPERIMENTAL_DESCRIPTOR);
return (
{label}
);
}
interface SettingsItemStatusBadgesProps {
item: SettingsMetadata;
userCreatedAt?: Date | null;
className?: string;
}
export function SettingsItemStatusBadges({item, userCreatedAt, className}: SettingsItemStatusBadgesProps) {
const showNew = isSettingsItemNew(item, Date.now(), userCreatedAt);
const showExperimental = isSettingsItemExperimental(item);
if (!showNew && !showExperimental) return null;
return (
{showNew && }
{showExperimental && (
)}
);
}