132 lines
3.3 KiB
TypeScript
132 lines
3.3 KiB
TypeScript
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
import { BankSummaryView } from "./BankSummary.view";
|
|
|
|
const money = (value: string) => ({ currency: "RUB", value });
|
|
const meta = {
|
|
title: "Product/BankCards/Summary",
|
|
component: BankSummaryView,
|
|
tags: ["autodocs"],
|
|
parameters: {
|
|
docs: {
|
|
description: {
|
|
component:
|
|
"Месячные расходы ручного учёта. Вымышленные суммы, без API и сохранения. Один итог с учётом возвратов и компактные строки категорий. Отрицательные суммы сохраняют знак.",
|
|
},
|
|
},
|
|
},
|
|
args: {
|
|
loading: false,
|
|
error: false,
|
|
fetching: false,
|
|
retry: () => {},
|
|
data: {
|
|
month: "2026-09",
|
|
cardId: null,
|
|
expenses: money("8500"),
|
|
refunds: money("1000"),
|
|
net: money("7500"),
|
|
categories: [
|
|
{
|
|
categoryId: "food",
|
|
categoryName: "Продукты",
|
|
expenses: money("3500"),
|
|
refunds: money("1000"),
|
|
net: money("2500"),
|
|
},
|
|
{
|
|
categoryId: "cafe",
|
|
categoryName: "Кафе",
|
|
expenses: money("2200"),
|
|
refunds: money("0"),
|
|
net: money("2200"),
|
|
},
|
|
{
|
|
categoryId: "taxi",
|
|
categoryName: "Такси",
|
|
expenses: money("1800"),
|
|
refunds: money("0"),
|
|
net: money("1800"),
|
|
},
|
|
{
|
|
categoryId: "health",
|
|
categoryName: "Здоровье",
|
|
expenses: money("1000"),
|
|
refunds: money("0"),
|
|
net: money("1000"),
|
|
},
|
|
],
|
|
},
|
|
},
|
|
} satisfies Meta<typeof BankSummaryView>;
|
|
export default meta;
|
|
type Story = StoryObj<typeof meta>;
|
|
export const Loaded: Story = { name: "Расходы по категориям" };
|
|
export const RefundMonth: Story = {
|
|
name: "Возврат покупки прошлого месяца",
|
|
args: {
|
|
data: {
|
|
month: "2026-09",
|
|
cardId: null,
|
|
expenses: money("0"),
|
|
refunds: money("600"),
|
|
net: money("-600"),
|
|
categories: [
|
|
{
|
|
categoryId: "shopping",
|
|
categoryName:
|
|
"Покупки с длинным пользовательским названием категории",
|
|
expenses: money("0"),
|
|
refunds: money("600"),
|
|
net: money("-600"),
|
|
},
|
|
],
|
|
},
|
|
},
|
|
};
|
|
export const Empty: Story = {
|
|
name: "Известные нули",
|
|
args: {
|
|
data: {
|
|
month: "2026-09",
|
|
cardId: null,
|
|
expenses: money("0"),
|
|
refunds: money("0"),
|
|
net: money("0"),
|
|
categories: [],
|
|
},
|
|
},
|
|
};
|
|
export const Loading: Story = {
|
|
name: "Начальная загрузка",
|
|
args: { data: undefined, loading: true },
|
|
};
|
|
export const Failed: Story = {
|
|
name: "Ошибка без данных",
|
|
args: { data: undefined, error: true },
|
|
};
|
|
export const CachedError: Story = {
|
|
name: "Сохранённые суммы при ошибке обновления",
|
|
args: { error: true },
|
|
};
|
|
export const LongAmounts: Story = {
|
|
name: "Точный итог длиннее предела отдельного ввода",
|
|
args: {
|
|
data: {
|
|
month: "2026-09",
|
|
cardId: null,
|
|
expenses: money("184467440737095516.14"),
|
|
refunds: money("0"),
|
|
net: money("184467440737095516.14"),
|
|
categories: [
|
|
{
|
|
categoryId: "shopping",
|
|
categoryName: "Покупки",
|
|
expenses: money("184467440737095516.14"),
|
|
refunds: money("0"),
|
|
net: money("184467440737095516.14"),
|
|
},
|
|
],
|
|
},
|
|
},
|
|
};
|