правочки

This commit is contained in:
gorbenko.pavel
2026-07-29 14:43:18 +05:00
parent 2bbdcc4ef7
commit 91361c439b
16 changed files with 73 additions and 18 deletions
@@ -128,6 +128,7 @@ export const RequestTypesScreen: React.FC<IRequestTypesScreenProps> = ({ api })
header: '',
width: '100px',
align: 'right',
sticky: true,
render: r => (
<ActionsCell>
<IconButton icon="edit" label="Редактировать" onClick={() => openEdit(r)} />
@@ -238,6 +238,7 @@ export const RouteStepsScreen: React.FC<IRouteStepsScreenProps> = ({ api, route,
header: '',
width: '100px',
align: 'right',
sticky: true,
render: r => (
<ActionsCell>
<IconButton icon="edit" label="Редактировать" onClick={() => openEdit(r)} />
@@ -214,6 +214,7 @@ export const RoutesScreen: React.FC<IRoutesScreenProps> = ({ api, onOpenSteps })
header: '',
width: '160px',
align: 'right',
sticky: true,
render: r => (
<ActionsCell>
<Button size="sm" variant="secondary" icon="clipboard" onClick={() => onOpenSteps(r)}>Шаги</Button>
@@ -47,6 +47,21 @@
.table tbody tr { transition: .12s; }
.table tbody tr:hover { background: $gold-50; }
.stickyCell {
position: sticky;
right: 0;
}
.table thead th.stickyCell { z-index: 2; }
.table tbody td.stickyCell {
background: #fff;
box-shadow: -6px 0 6px -6px rgba(15, 36, 64, .12);
z-index: 1;
}
.table tbody tr:hover td.stickyCell { background: $gold-50; }
.primaryCell {
font-weight: 500;
color: $navy-900;
@@ -7,6 +7,9 @@ export interface IColumn<T> {
render: (row: T) => React.ReactNode;
align?: 'left' | 'right' | 'center';
width?: string;
// Держит колонку у правого края видимой области при горизонтальной
// прокрутке — чтобы кнопки действий не уезжали за край на узких экранах.
sticky?: boolean;
}
export interface IDataTableProps<T> {
@@ -24,7 +27,11 @@ export function DataTable<T>({ columns, rows, keyOf, emptyMessage }: IDataTableP
<thead>
<tr>
{columns.map(col => (
<th key={col.key} style={{ width: col.width, textAlign: col.align ?? 'left' }}>
<th
key={col.key}
className={col.sticky ? styles.stickyCell : undefined}
style={{ width: col.width, textAlign: col.align ?? 'left' }}
>
{col.header}
</th>
))}
@@ -34,7 +41,11 @@ export function DataTable<T>({ columns, rows, keyOf, emptyMessage }: IDataTableP
{rows.map(row => (
<tr key={keyOf(row)}>
{columns.map(col => (
<td key={col.key} style={{ textAlign: col.align ?? 'left' }}>
<td
key={col.key}
className={col.sticky ? styles.stickyCell : undefined}
style={{ textAlign: col.align ?? 'left' }}
>
{col.render(row)}
</td>
))}