Files
profi-frontend/src/pages/dashboards/DataPage.tsx

75 lines
3.3 KiB
TypeScript
Raw Normal View History

2025-06-02 19:39:54 +03:00
import { useParams } from 'react-router-dom';
2025-06-02 21:07:15 +03:00
import { useApiDocumentation, useDataPage } from "../../API/hooks.ts";
import { FieldInfo } from "../../types/common.ts";
2025-06-02 19:39:54 +03:00
export function DataPage() {
const { applicationName, endpointName } = useParams<{ applicationName: string; endpointName: string }>();
2025-06-02 21:07:15 +03:00
// Получаем схему документации API
const { schema, loading: loadingSchema } = useApiDocumentation(applicationName || "", endpointName || "");
2025-06-02 19:39:54 +03:00
2025-06-02 21:07:15 +03:00
// Получаем данные с помощью пагинации
2025-06-02 21:27:30 +03:00
const dataPage = useDataPage(applicationName || "", endpointName || "", {}, !loadingSchema);
2025-06-02 19:39:54 +03:00
2025-06-02 21:07:15 +03:00
// Функция для экспорта данных в Excel (пока пустая)
2025-06-02 19:39:54 +03:00
const handleExport = () => {
2025-06-02 21:07:15 +03:00
// Логика для экспорта данных
2025-06-02 19:39:54 +03:00
};
2025-06-02 21:07:15 +03:00
// Функция для добавления новых данных (пока пустая)
2025-06-02 19:39:54 +03:00
const handleAdd = () => {
2025-06-02 21:07:15 +03:00
// Логика для добавления данных
2025-06-02 19:39:54 +03:00
};
2025-06-02 21:07:15 +03:00
// Функция для фильтрации данных (пока пустая)
2025-06-02 19:39:54 +03:00
const handleFilters = () => {
2025-06-02 21:07:15 +03:00
// Логика для фильтрации данных
2025-06-02 19:39:54 +03:00
};
2025-06-02 21:07:15 +03:00
// Если данные или схема загружаются, отображаем загрузку
if (loadingSchema) {
return <div className="loading">Загрузка схемы...</div>;
}
2025-06-02 19:39:54 +03:00
return (
<div className="data-page">
<div className="buttons-container">
<button className="export-excel-button" onClick={handleExport}>Экспорт в Excel</button>
<button className="add-button" onClick={handleAdd}>Добавление</button>
<button className="filters-button" onClick={handleFilters}>Фильтры</button>
</div>
<div className="table-container">
<table className="data-table" style={{ overflowX: 'auto', display: 'block' }}>
<thead>
<tr>
2025-06-02 21:07:15 +03:00
{schema?.map((field: FieldInfo) => (
<th key={field.name} className="column-header">
{field.title}
</th>
))}
2025-06-02 19:39:54 +03:00
</tr>
</thead>
<tbody>
2025-06-02 21:07:15 +03:00
{dataPage.items && dataPage.items.length > 0 ? (
dataPage.items.map((item: unknown) => (
<tr key={item.id}>
{schema?.map((field: FieldInfo) => (
<td key={field.name} className="data-cell">
2025-06-02 21:27:30 +03:00
{item[field.name] || "-"}
2025-06-02 21:07:15 +03:00
</td>
))}
</tr>
))
) : (
<tr>
<td colSpan={schema?.length} className="no-data">
Нет данных для отображения
</td>
</tr>
)}
2025-06-02 19:39:54 +03:00
</tbody>
</table>
</div>
</div>
);
}