fix(files): аватары и баннеры доступны авторизованным пользователям
Аватар нельзя было показать в списке друзей: файл без комнаты был доступен только загрузившему. Добавлено назначение файла (`files.purpose`: attachment | avatar | banner, миграция 00006): аватары и баннеры отдаются любому авторизованному пользователю, вложения по-прежнему проверяются по правам комнаты, а непривязанные загрузки остаются приватными.
This commit is contained in:
@@ -10,7 +10,10 @@ interface GuildRailProps {
|
||||
onCreate: () => void;
|
||||
}
|
||||
|
||||
/** Левая рейка: иконки серверов-инициалов и кнопка создания сервера. */
|
||||
/**
|
||||
* Левая рейка: первой иконкой — «Друзья», ниже — серверы и кнопка создания.
|
||||
* Личные беседы в рейку не попадают: они живут внутри раздела друзей.
|
||||
*/
|
||||
export function GuildRail({ guilds, selectedGuildId, canCreate, onCreate }: GuildRailProps) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -19,6 +22,38 @@ export function GuildRail({ guilds, selectedGuildId, canCreate, onCreate }: Guil
|
||||
aria-label={t('guilds.railLabel')}
|
||||
className="flex w-[72px] shrink-0 flex-col items-center gap-2 overflow-y-auto border-r border-border/40 bg-surface-2/60 py-3"
|
||||
>
|
||||
<NavLink
|
||||
to="/app/friends"
|
||||
title={t('friends.rail')}
|
||||
aria-label={t('friends.rail')}
|
||||
data-testid="friends-rail-link"
|
||||
className={({ isActive }) =>
|
||||
`relative flex h-14 w-14 items-center justify-center rounded-[var(--radius-md)] border text-2xl transition-[border-radius,border-color,background-color,color,transform] duration-[var(--duration-fast)] ${
|
||||
isActive
|
||||
? 'gl-ring rounded-[var(--radius-lg)] border-accent bg-surface-1 text-accent'
|
||||
: 'border-border bg-surface-1 text-fg-muted hover:-translate-y-0.5 hover:rounded-[var(--radius-lg)] hover:text-fg active:translate-y-0'
|
||||
}`
|
||||
}
|
||||
>
|
||||
{/* Облачко с двумя собеседниками: узнаваемая иконка личных бесед. */}
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.8"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
className="h-7 w-7"
|
||||
>
|
||||
<path d="M4 5.5h16v10H9l-5 4z" />
|
||||
<circle cx="9.5" cy="10.5" r="1.4" fill="currentColor" stroke="none" />
|
||||
<circle cx="14.5" cy="10.5" r="1.4" fill="currentColor" stroke="none" />
|
||||
</svg>
|
||||
</NavLink>
|
||||
|
||||
<div role="separator" aria-hidden="true" className="my-0.5 h-px w-8 bg-border/60" />
|
||||
|
||||
<ul className="gl-stagger flex flex-col items-center gap-2" data-testid="guild-rail">
|
||||
{guilds.map((guild) => {
|
||||
const active = guild.id === selectedGuildId;
|
||||
|
||||
Reference in New Issue
Block a user