Skip to content

Commit 9555b59

Browse files
authored
Merge pull request #7 from Dobrunia/main
efef
2 parents 56e355d + 6a69676 commit 9555b59

15 files changed

Lines changed: 332 additions & 21 deletions

File tree

client/src/components/card/CardChecklist.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ const hasMore = computed(() => items.value.length > showLimit);
123123
</span>
124124
</div>
125125

126-
<div v-if="editableSummary" class="mt-1.5 flex items-start gap-1">
126+
<div v-if="editableSummary" class="mt-1.5 flex items-center gap-1">
127127
<p
128128
v-if="payload.summary"
129129
class="card-summary italic"

client/src/components/card/CardItem.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ async function updateSummary(newSummary: string) {
147147

148148
<div
149149
ref="titleContainerRef"
150-
class="flex-1 min-w-0 flex items-center cursor-text"
150+
class="flex-1 min-w-0 flex items-center cursor-text overflow-hidden"
151+
:title="card.title || '(без названия)'"
151152
@dblclick.prevent="startEditTitle()"
152153
>
153154
<template v-if="isEditingTitle">
@@ -162,7 +163,7 @@ async function updateSummary(newSummary: string) {
162163
</template>
163164
<p
164165
v-else
165-
class="text-sm font-medium text-fg min-w-0 truncate leading-none pointer-events-none"
166+
class="text-sm font-medium text-fg min-w-0 break-words line-clamp-2 leading-snug pointer-events-none"
166167
:class="{ 'line-through': card.done }"
167168
>
168169
{{ card.title || '(без названия)' }}

client/src/components/card/CardLink.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function closeSummaryModal() {
5252

5353
<template>
5454
<div class="p-3">
55-
<div v-if="editableSummary" class="mt-1.5 flex items-start gap-1">
55+
<div v-if="editableSummary" class="mt-1.5 flex items-center gap-1">
5656
<p
5757
v-if="payload.summary"
5858
class="card-summary"

client/src/components/card/CardNote.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ function closeSummaryModal() {
9090
</button>
9191
</div>
9292
</div>
93-
<div v-if="editableSummary" class="mt-1.5 flex items-start gap-1">
93+
<div v-if="editableSummary" class="mt-1.5 flex items-center gap-1">
9494
<div class="flex-1 min-w-0">
9595
<p
9696
v-if="payload.summary"

client/src/components/common/AppHeader.vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ function handleSignOut() {
2727
<div class="h-full max-w-7xl mx-auto px-4 flex-between">
2828
<!-- Logo -->
2929
<RouterLink to="/" class="flex items-center gap-2 text-xl font-semibold text-fg">
30-
<span class="w-8 h-8 rounded-lg flex-center bg-success text-on-primary pointer-events-none" aria-hidden="true">
30+
<span
31+
class="w-8 h-8 rounded-lg flex-center bg-success text-on-primary pointer-events-none"
32+
aria-hidden="true"
33+
>
3134
<span class="i-lucide-square-check text-lg" />
3235
</span>
3336
DayFlow
@@ -57,7 +60,7 @@ function handleSignOut() {
5760
alt=""
5861
class="w-8 h-8 rounded-full object-cover"
5962
@error="avatarLoadFailed = true"
60-
>
63+
/>
6164
<span v-else class="i-lucide-user text-lg" />
6265
</RouterLink>
6366

@@ -78,6 +81,13 @@ function handleSignOut() {
7881
<span class="i-lucide-user" />
7982
Профиль
8083
</RouterLink>
84+
<RouterLink
85+
:to="`/user/${authStore.user?.id}`"
86+
class="w-full flex items-center gap-2 px-3 py-2 text-sm text-fg hover:bg-muted rounded-md"
87+
>
88+
<span class="i-lucide-bar-chart-2" />
89+
Моя статистика
90+
</RouterLink>
8191
<button
8292
@click="handleSignOut"
8393
class="w-full flex items-center gap-2 px-3 py-2 text-sm text-fg hover:bg-muted rounded-md"

client/src/components/workspace/WorkspaceColumn.vue

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,21 +129,21 @@ async function deleteColumn() {
129129

130130
<div
131131
ref="cardsListRef"
132-
class="flex-1 overflow-y-auto px-2 pb-2 space-y-2 min-h-[2rem]"
132+
class="flex-1 overflow-y-auto px-2 pb-2 flex flex-col gap-2 min-h-[2rem]"
133133
:data-column-id="isBacklog ? undefined : column.id"
134134
:data-backlog="isBacklog ? true : undefined"
135135
>
136+
<button type="button" @click="showAddCard = true" class="btn-add-dashed sortable-no-drag flex-shrink-0 order-first">
137+
<span class="i-lucide-plus text-sm" />
138+
Добавить карточку
139+
</button>
136140
<template v-if="isBacklog">
137141
<CardItem
138142
v-for="c in backlogCards"
139143
:key="c.id"
140144
:card="c"
141145
:is-backlog="true"
142146
/>
143-
<button type="button" @click="showAddCard = true" class="btn-add-dashed sortable-no-drag">
144-
<span class="i-lucide-plus text-sm" />
145-
Добавить карточку
146-
</button>
147147
</template>
148148
<template v-else>
149149
<CardItem
@@ -152,10 +152,6 @@ async function deleteColumn() {
152152
:card="card"
153153
:column-id="column.id"
154154
/>
155-
<button type="button" @click="showAddCard = true" class="btn-add-dashed sortable-no-drag">
156-
<span class="i-lucide-plus text-sm" />
157-
Добавить карточку
158-
</button>
159155
</template>
160156
</div>
161157

client/src/graphql/queries.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,21 @@ export const CARD_QUERY = gql`
113113
}
114114
}
115115
`;
116+
117+
export const USER_STATS_QUERY = gql`
118+
query UserStats($userId: ID!) {
119+
userStats(userId: $userId) {
120+
id
121+
avatarUrl
122+
totalCompletedCards
123+
workspaceStats {
124+
id
125+
title
126+
description
127+
icon
128+
totalCards
129+
completedCards
130+
}
131+
}
132+
}
133+
`;

client/src/router/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ const router = createRouter({
3333
component: () => import('@/views/ProfileView.vue'),
3434
meta: { requiresAuth: true },
3535
},
36+
{
37+
path: '/user/:id',
38+
name: 'user-stats',
39+
component: () => import('@/views/UserStatsView.vue'),
40+
meta: { requiresAuth: true },
41+
},
3642
],
3743
});
3844

client/src/views/HomeView.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ function navigateToWorkspace(id: string) {
131131
</div>
132132

133133
<!-- Empty State -->
134-
<div v-else class="text-center py-16">
134+
<div v-else class="text-center py-16 flex flex-col items-center gap-4">
135135
<div class="empty-state-icon">
136136
<span class="i-lucide-folder text-2xl text-fg-muted" />
137137
</div>

client/src/views/ProfileView.vue

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,20 @@ async function save() {
4545
Настройки аккаунта
4646
</p>
4747
</div>
48-
<RouterLink to="/" class="btn-ghost text-sm text-fg-muted hover:text-fg">
49-
<span class="i-lucide-arrow-left mr-1" />
50-
На главную
51-
</RouterLink>
48+
<div class="flex items-center gap-3">
49+
<RouterLink to="/" class="btn-ghost text-sm text-fg-muted hover:text-fg">
50+
<span class="i-lucide-arrow-left mr-1" />
51+
На главную
52+
</RouterLink>
53+
<RouterLink
54+
v-if="user"
55+
:to="`/user/${user.id}`"
56+
class="btn-ghost text-sm text-fg-muted hover:text-fg"
57+
>
58+
<span class="i-lucide-bar-chart-2 mr-1" />
59+
Моя статистика
60+
</RouterLink>
61+
</div>
5262
</div>
5363

5464
<div v-if="user" class="space-y-6">

0 commit comments

Comments
 (0)