- Nginx: проксирование /api на backend (единая точка входа) - История: стрелки ← → для переключения недель/месяцев/годов - История: сохранение фильтров и пагинации в URL при F5 - Импорт: миграция 003 — дефолтные правила категорий (PYATEROCHK, AUCHAN и др.) - Настройки: вкладка «Данные» с кнопкой «Очистить историю» - Backend: DELETE /api/transactions для удаления всех транзакций - ClearHistoryModal: подтверждение чекбоксами и вводом «УДАЛИТЬ»
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { useState } from 'react';
|
||
import { AccountsList } from '../components/AccountsList';
|
||
import { CategoriesList } from '../components/CategoriesList';
|
||
import { RulesList } from '../components/RulesList';
|
||
import { DataSection } from '../components/DataSection';
|
||
|
||
type Tab = 'accounts' | 'categories' | 'rules' | 'data';
|
||
|
||
export function SettingsPage() {
|
||
const [tab, setTab] = useState<Tab>('accounts');
|
||
|
||
return (
|
||
<div className="page">
|
||
<div className="page-header">
|
||
<h1>Настройки</h1>
|
||
</div>
|
||
|
||
<div className="tabs">
|
||
<button
|
||
className={`tab ${tab === 'accounts' ? 'active' : ''}`}
|
||
onClick={() => setTab('accounts')}
|
||
>
|
||
Счета
|
||
</button>
|
||
<button
|
||
className={`tab ${tab === 'categories' ? 'active' : ''}`}
|
||
onClick={() => setTab('categories')}
|
||
>
|
||
Категории
|
||
</button>
|
||
<button
|
||
className={`tab ${tab === 'rules' ? 'active' : ''}`}
|
||
onClick={() => setTab('rules')}
|
||
>
|
||
Правила
|
||
</button>
|
||
<button
|
||
className={`tab ${tab === 'data' ? 'active' : ''}`}
|
||
onClick={() => setTab('data')}
|
||
>
|
||
Данные
|
||
</button>
|
||
</div>
|
||
|
||
<div className="tab-content">
|
||
{tab === 'accounts' && <AccountsList />}
|
||
{tab === 'categories' && <CategoriesList />}
|
||
{tab === 'rules' && <RulesList />}
|
||
{tab === 'data' && <DataSection />}
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|