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,000 GB
Remaining0 GB

RAM

90%
Available256 GB
Remaining26 GB

vCPU

42%
Available100 cores
Remaining58 cores
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
canEditQuotabooleanyesФлаг наличия прав на редактирование квот
data-test-idstringno
defaultExpandedbooleannoФлаг раскрытия аккордиона по умолчанию
disableSortingbooleannoФлаг отключения сортировки квот
errorbooleanyesФлаг ошибки при загрузке квот
hideIncreaseQuotaButtonbooleannoФлаг скрытия кнопки увеличения квоты
loadingbooleanyesФлаг загрузки квот
onIncreaseQuotaClick(() => void)noКолбек нажатия на кнопку увеличения квот
onRefresh() => voidyesКолбек на обновление списка квот при ошибке
onWidgetOpen(() => void)noКолбек открытия виджета квот
projectNamestringyesНазвание проекта, по которому отображаются квоты
quotasQuotaItem[]yesСписок квот для отображения

Types

QuotaWidgetMiniProps

Storybook

Figma

Смотри также

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