d02ef7527a
Аватар нельзя было показать в списке друзей: файл без комнаты был доступен только загрузившему. Добавлено назначение файла (`files.purpose`: attachment | avatar | banner, миграция 00006): аватары и баннеры отдаются любому авторизованному пользователю, вложения по-прежнему проверяются по правам комнаты, а непривязанные загрузки остаются приватными.
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { useTranslation } from 'react-i18next';
|
|
|
|
import { InviteJoin } from '@/components/friends/InviteJoin';
|
|
import { Button, Card } from '@/components/ui/primitives';
|
|
import { useUiStore } from '@/stores/ui';
|
|
|
|
/**
|
|
* Экран пустого списка серверов. Главного сервера больше нет: новый
|
|
* пользователь видит пустую рейку, может создать свой сервер или
|
|
* присоединиться по приглашению. Иконки серверов появятся в рейке сразу
|
|
* после вступления.
|
|
*/
|
|
export default function NoGuildView() {
|
|
const { t } = useTranslation();
|
|
const openGuildCreate = useUiStore((state) => state.openGuildCreate);
|
|
|
|
return (
|
|
<section id="app-content" className="absolute inset-0 overflow-y-auto p-6">
|
|
<div className="flex min-h-full items-center justify-center">
|
|
<Card className="w-full max-w-lg">
|
|
<h2 className="text-lg font-semibold">{t('guilds.empty.title')}</h2>
|
|
<p className="mt-2 text-sm text-fg-muted">{t('guilds.empty.body')}</p>
|
|
|
|
<Button className="mt-4" onClick={openGuildCreate}>
|
|
{t('guilds.add')}
|
|
</Button>
|
|
|
|
<InviteJoin className="mt-6 border-t border-border/60 pt-4" />
|
|
</Card>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|