import { SubscriptionPlan } from '@affine/graphql'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { Button } from '@toeverything/components/button'; import { Tooltip } from '@toeverything/components/tooltip'; import bytes from 'bytes'; import clsx from 'clsx'; import { useMemo } from 'react'; import * as styles from './share.css'; export interface StorageProgressProgress { max: number; value: number; upgradable?: boolean; onUpgrade: () => void; plan: SubscriptionPlan; } enum ButtonType { Primary = 'primary', Default = 'default', } export const StorageProgress = ({ max: upperLimit, value, upgradable = true, onUpgrade, plan, }: StorageProgressProgress) => { const t = useAFFiNEI18N(); const percent = useMemo( () => Math.round((value / upperLimit) * 100), [upperLimit, value] ); const used = useMemo(() => bytes.format(value), [value]); const max = useMemo(() => bytes.format(upperLimit), [upperLimit]); const buttonType = useMemo(() => { if (plan === SubscriptionPlan.Free) { return ButtonType.Primary; } return ButtonType.Default; }, [plan]); return (
{t['com.affine.storage.used.hint']()} {used}/{max} {` (${plan} ${t['com.affine.storage.plan']()})`}
80, })} style={{ width: `${percent > 100 ? '100' : percent}%` }} >
{upgradable ? ( ) : null}
); };