QuotaWidgetMini

Сворачиваемый блок на базе Accordion: заголовок «Квоты» с counter’ом исчерпанных квот и названием проекта в подзаголовке, внутри — вертикальный список карточек QuotaWidgetCard и кнопка «Увеличить квоты». Портал не используется — контент раскрывается в потоке документа.

Когда использовать

  • Сайдбары и узкие панели, где список квот должен раскрываться на месте, без overlay.

  • Mobile / adaptive layout’ы — аккордеон не требует позиционирования портала.

  • Шапка широкой страницы с раскрытием по клику:

  • ✅ Используйте defaultExpanded, если квоты — ключевой контент экрана и должны быть видны сразу.

  • ❌ Контролировать раскрытие снаружи — аккордеон uncontrolled, публичного controlled-API нет.

Анатомия

Заголовок

Accordion.CollapseBlockSecondary: title «Квоты», после него Counter appearance='critical' с числом исчерпанных квот (скрыт при loading / error), в подзаголовке — projectName с truncate.

Содержимое

  • Вертикальный список QuotaWidgetCard; исчерпанные квоты поднимаются в начало (disableSorting отключает).
  • loading — skeleton-карточки; error — блок ошибки с кнопкой повтора (onRefresh).
  • Кнопка «Увеличить квоты» (canEditQuota, onIncreaseQuotaClick, скрывается hideIncreaseQuotaButton).

Установка

pnpm add @cloud-ru/ds-uikit-product-quota
import { QuotaWidgetMini } from '@cloud-ru/ds-uikit-product-quota'

Примеры использования

Раскрыт по умолчанию

Раскрыт по умолчаниюdefaultExpanded + counter исчерпанной квоты в заголовке

Quotas

1
ml-platform-production

SSD

100%
Available1,000GB
Remaining0GB

RAM

90%
Available256GB
Remaining26GB

vCPU

42%
Available100cores
Remaining58cores
tsx
import { QuotaItem, QuotaWidgetMini } from '@cloud-ru/ds-uikit-product-quota';
import { useState } from 'react';

const QUOTAS: QuotaItem[] = [
  { name: 'SSD', limit: 1000, usage: 1000, remains: 0, unitDisplayName: 'GB' },
  { name: 'RAM', limit: 256, usage: 230, remains: 26, unitDisplayName: 'GB' },
  { name: 'vCPU', limit: 100, usage: 42, remains: 58, unitDisplayName: 'cores' },
];

export function QuotaWidgetMiniExpanded() {
  const [loading, setLoading] = useState(false);

  const reload = () => {
    setLoading(true);
    setTimeout(() => setLoading(false), 800);
  };

  return (
    <QuotaWidgetMini
      quotas={QUOTAS}
      projectName='ml-platform-production'
      canEditQuota={false}
      defaultExpanded
      loading={loading}
      error={false}
      onRefresh={reload}
    />
  );
}

Props

Types

PropsQuotaWidgetMiniProps
PropTypeDefaultRequiredDescription
canEditQuotaboolean—yesФлаг наличия прав на редактирование квот
data-test-idstring—no
defaultExpandedboolean—noФлаг раскрытия аккордиона по умолчанию
disableSortingboolean—noФлаг отключения сортировки квот
errorboolean—yesФлаг ошибки при загрузке квот
hideIncreaseQuotaButtonboolean—noФлаг скрытия кнопки увеличения квоты
loadingboolean—yesФлаг загрузки квот
onIncreaseQuotaClick(() => void)—noКолбек нажатия на кнопку увеличения квот
onRefresh() => void—yesКолбек на обновление списка квот при ошибке
onWidgetOpen(() => void)—noКолбек открытия виджета квот
projectNamestring—yesНазвание проекта, по которому отображаются квоты
quotasQuotaItem[]—yesСписок квот для отображения
skeletonRowCountnumber4noКоличество строк-заглушек, пока идёт загрузка. Строка — это ряд сетки: в две колонки (desktop-дропдаун) она даёт две карточки, в одну (mobile, аккордеон `QuotaWidgetMini`) — одну.

Types

QuotaWidgetMiniProps

Storybook

Figma

Смотри также

  • QuotaWidget — выпадающий вариант для шапки страницы.
  • QuotaWidgetCard — карточка одной квоты.
  • Accordion — нижележащий примитив раскрытия.