diff --git a/frontend/linktree-frontend/src/app/[username]/page.tsx b/frontend/linktree-frontend/src/app/[username]/page.tsx index 4f4b62b..b218add 100644 --- a/frontend/linktree-frontend/src/app/[username]/page.tsx +++ b/frontend/linktree-frontend/src/app/[username]/page.tsx @@ -4,7 +4,7 @@ import { notFound } from 'next/navigation' import Image from 'next/image' import Link from 'next/link' -import { useEffect, useState } from 'react' +import { useEffect, useState, Fragment } from 'react' interface LinkItem { id: number @@ -144,273 +144,262 @@ export default function UserPage({ // Базовый список (по умолчанию) const renderListLayout = () => ( -
- {data!.groups.map((group) => { - const isExpanded = expandedGroups.has(group.id) - return ( -
-
-
toggleGroup(group.id)} - style={{ - backgroundColor: group.header_color || designSettings.theme_color + '20', - borderColor: group.header_color || designSettings.theme_color, - cursor: 'pointer' - }} - > -
- {designSettings.show_group_icons && group.icon && ( +
+
+
Группы ссылок
+
+
+ {data!.groups.map((group) => { + const isExpanded = expandedGroups.has(group.id) + return ( + +
+
toggleGroup(group.id)} + > + {group.icon_url && designSettings.show_group_icons && ( )} -
+ {group.name} -
-
- {group.is_favorite && ( - - )} - - {group.links.length} - -
-
- -
- - {isExpanded && ( -
- {group.description && ( -

{group.description}

+
+ + {group.links.length} + + {group.is_favorite && ( + )} - {group.links.length > 0 ? ( -
- {group.links.map((link) => ( -
- + +
+ + {isExpanded && group.links.length > 0 && ( +
+
+ {group.links.map((link) => ( +
+ +
-
-
- {designSettings.show_link_icons && link.icon_url && ( - +
+ {designSettings.show_link_icons && link.icon_url && ( + {link.title} + )} +
+
+ {link.title} +
+ {link.description && ( + {link.description} )} -
-
- {link.title} -
- {link.description && ( -

{link.description}

- )} -
- -
- ))} -
- ) : ( -

- В этой группе пока нет ссылок. -

- )} +
+ +
+ ))} +
)} -
-
- ) - })} +
+ ) + })} +
) // Сетка групп const renderGridLayout = () => ( -
- {data!.groups.map((group) => ( -
-
-
- {designSettings.show_group_icons && group.icon && ( - - )} -
- {group.name} -
- {group.is_favorite && ( - - )} -
-
- {group.description && ( -

{group.description}

- )} -
- {group.links.map((link) => ( - - {designSettings.show_link_icons && link.icon && ( - - )} - {link.title} - - ))} +
+
+
Группы ссылок
+
+
+ {data!.groups.map((group) => ( +
+
+
+
+ {group.icon_url && designSettings.show_group_icons && ( + {group.name} + )} +
+ {group.name} +
+ {group.is_favorite && ( + + )} +
+ + {group.links.length} +
-
-
-
- ))} -
- ) - - // Карточки (большие карточки с описанием) - const renderCardsLayout = () => ( -
- {data!.groups.map((group) => ( -
-
-
- {designSettings.show_group_icons && group.icon && ( - - )} -
-
- {group.name} -
+
{group.description && ( -

{group.description}

+

{group.description}

)} -
- {group.is_favorite && ( - - )} -
-
-
- {group.links.map((link) => ( -
+
+ {group.links.slice(0, 5).map((link) => ( - {designSettings.show_link_icons && link.icon && ( + {designSettings.show_link_icons && link.icon_url && ( )} -
-
- {link.title} -
- {link.description && ( - {link.description} - )} -
+ {link.title} -
- ))} + ))} + {group.links.length > 5 && ( + +{group.links.length - 5} еще... + )} +
-
- ))} + ))} +
+
+ ) + + // Карточки (большие карточки с описанием) + const renderCardsLayout = () => ( +
+
+
Группы ссылок
+
+
+ {data!.groups.map((group) => ( +
+
+
+
+
+
+ {group.icon_url && designSettings.show_group_icons && ( + {group.name} + )} +
+
+ {group.name} +
+
+ {group.links.length} ссылок + {group.is_favorite && ( + + )} +
+
+
+
+
+
+
+ {group.description && ( +

{group.description}

+ )} +
+ {group.links.map((link) => ( +
+ +
+
+ {link.icon_url && designSettings.show_link_icons && ( + {link.title} + )} +
+ {link.title} +
+
+ {link.description && ( + {link.description} + )} +
+ +
+ ))} +
+
+
+
+ ))} +
) @@ -636,18 +625,59 @@ export default function UserPage({ return (
+
+ {/* Обложка пользователя - растягиваем на всю ширину экрана */} + {data.cover && ( +
+ Обложка + {/* Cover overlay если включен */} + {designSettings.cover_overlay_enabled && ( +
+ )} +
+ )} + + {/* Если обложки нет, показываем плашку */} + {!data.cover && ( +
+

Обложка

+
+ )} +
+
- {/* Профиль пользователя */} -
+ {/* Профиль пользователя - полупрозрачный */} +
{/* Аватар пользователя */} - {data.avatar && ( + {data.avatar ? (
+ ) : ( +
+
+ {(data.full_name || data.username).charAt(0).toUpperCase()} +
+
+
)} {/* Имя пользователя */} @@ -707,37 +761,8 @@ export default function UserPage({
- {/* Обложка пользователя если есть */} - {data.cover && ( -
-
-
- Обложка - {/* Cover overlay если включен */} - {designSettings.cover_overlay_enabled && ( -
- )} -
-
-
- )} - {/* Группы ссылок */} -
+
{renderGroupsLayout()}