fix(super-admin): убрать «моргание» при клике на орг — переход теперь по double-click
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m7s
CI / Web (React + Vite) (push) Successful in 39s
Docker Web / Build + push Web (push) Successful in 33s
Docker Web / Deploy Web on stage (push) Successful in 11s

В списке организаций SuperAdmin одиночный клик навигировал на /super-admin/organizations/{id} и страница успевала отрисоваться → визуальное моргание. Изменил поведение:

- DataTable теперь поддерживает onRowDoubleClick параллельно onRowClick.
- SuperAdminOrganizationsPage: убран single-click navigate; double-click → setOrgOverride + переход на /dashboard этой орги (вход в её личный кабинет).
- Кнопки в колонке действий не задеты — у них уже stopPropagation.
This commit is contained in:
nurdotnet 2026-05-03 02:50:50 +05:00
parent a54315bd6e
commit 36b4fb1b31
2 changed files with 7 additions and 3 deletions

View file

@ -18,6 +18,7 @@ interface DataTableProps<T> {
columns: Column<T>[] columns: Column<T>[]
rowKey: (row: T) => string rowKey: (row: T) => string
onRowClick?: (row: T) => void onRowClick?: (row: T) => void
onRowDoubleClick?: (row: T) => void
empty?: ReactNode empty?: ReactNode
isLoading?: boolean isLoading?: boolean
/** If true (default), the table wraps itself in a scrollable container with a sticky thead. /** If true (default), the table wraps itself in a scrollable container with a sticky thead.
@ -31,7 +32,7 @@ interface DataTableProps<T> {
} }
export function DataTable<T>({ export function DataTable<T>({
rows, columns, rowKey, onRowClick, empty, isLoading, scrollable = true, rows, columns, rowKey, onRowClick, onRowDoubleClick, empty, isLoading, scrollable = true,
sortKey, sortOrder, onSortChange, sortKey, sortOrder, onSortChange,
}: DataTableProps<T>) { }: DataTableProps<T>) {
const handleHeaderClick = (key: string) => { const handleHeaderClick = (key: string) => {
@ -95,8 +96,11 @@ export function DataTable<T>({
<tr <tr
key={rowKey(row)} key={rowKey(row)}
onClick={() => onRowClick?.(row)} onClick={() => onRowClick?.(row)}
onDoubleClick={() => onRowDoubleClick?.(row)}
className={cn( className={cn(
onRowClick && 'cursor-pointer hover:bg-slate-50 dark:hover:bg-slate-800/30', (onRowClick || onRowDoubleClick) && 'hover:bg-slate-50 dark:hover:bg-slate-800/30',
onRowDoubleClick && 'cursor-pointer select-none',
onRowClick && !onRowDoubleClick && 'cursor-pointer',
)} )}
> >
{columns.map((c, i) => ( {columns.map((c, i) => (

View file

@ -92,7 +92,7 @@ export function SuperAdminOrganizationsPage() {
sortKey={list.sortKey} sortKey={list.sortKey}
sortOrder={list.sortOrder} sortOrder={list.sortOrder}
onSortChange={list.setSort} onSortChange={list.setSort}
onRowClick={(r) => navigate(`/super-admin/organizations/${r.id}`)} onRowDoubleClick={(r) => setOrgOverride({ id: r.id, name: r.name }, { redirectTo: '/dashboard' })}
columns={[ columns={[
{ header: 'Название', cell: (r) => ( { header: 'Название', cell: (r) => (
<div> <div>