UI: единый PlayerLink — ники игроков кликабельны во всех местах просмотра
Новый компонент PlayerLink (ссылка на /u/:id, кликабельно всё поле строки, stopPropagation для вложенности в кликабельные карточки). Применён: - Leaderboard и общая статистика (рефакторинг ручных Link); - страница партии: результаты и состав; - настройки группы: список участников; - список партий и незавершённые на главной (карточки button -> div, т.к. ссылки внутри button — невалидная разметка). «пригласил: X» в приглашениях остаётся текстом — в API нет id пригласившего. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import type { CSSProperties, ReactNode } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
|
||||
/**
|
||||
* Ссылка на профиль игрока (/u/:id). Оборачивает всё поле с ником (строку с аватаром,
|
||||
* местом, фракцией…), а не голый текст. stopPropagation — строки часто лежат внутри
|
||||
* кликабельных карточек (список партий, топ на главной), и клик по игроку должен
|
||||
* вести в профиль, а не срабатывать навигацией карточки.
|
||||
*/
|
||||
export function PlayerLink({
|
||||
userId,
|
||||
className,
|
||||
style,
|
||||
children,
|
||||
}: {
|
||||
userId: number;
|
||||
className?: string;
|
||||
style?: CSSProperties;
|
||||
children: ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<Link
|
||||
to={`/u/${userId}`}
|
||||
className={className}
|
||||
style={{ color: "inherit", ...style }}
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
{children}
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user