From 8b8883bb0df87ac7b7c0dc81962d0cf55187fd8c Mon Sep 17 00:00:00 2001 From: Lanskikh Date: Tue, 17 Jun 2025 15:31:01 +0500 Subject: [PATCH] ui fixes --- public/images/sad_ghost.png | Bin 0 -> 16820 bytes src/components/Badge.tsx | 2 +- src/components/DesktopCard.tsx | 9 ++- src/components/SearchInput.tsx | 7 +- src/components/SessionCommentItem.tsx | 2 +- src/components/SessionComments.tsx | 39 ++++++--- src/components/icons/StartSessionIcon.tsx | 5 +- src/components/modals/CreateSessionModal.tsx | 36 ++++----- src/components/modals/EditTableModal.tsx | 2 +- src/pages/SessionsPage.tsx | 79 +++++++++++++------ src/types/{Comments.ts => Comment.ts} | 0 src/types/Session.ts | 2 +- src/utils/groupByCreatedAt.ts | 14 ++-- 13 files changed, 126 insertions(+), 71 deletions(-) create mode 100644 public/images/sad_ghost.png rename src/types/{Comments.ts => Comment.ts} (100%) diff --git a/public/images/sad_ghost.png b/public/images/sad_ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..553b7e120cc0e241f93fe70dd487ba44de57f32a GIT binary patch literal 16820 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 +
{count}
); diff --git a/src/components/DesktopCard.tsx b/src/components/DesktopCard.tsx index 30d70f5..b53d3c8 100644 --- a/src/components/DesktopCard.tsx +++ b/src/components/DesktopCard.tsx @@ -34,8 +34,8 @@ export default function DesktopCard({ server }: IDesktopCardProps) { > ) : server.status === "offline" ? ( - - {props.onEnter && ( + {/* {pr ops.onEnter && ( - )} + )} */} ); diff --git a/src/components/SessionCommentItem.tsx b/src/components/SessionCommentItem.tsx index d0a48ac..a256ab6 100644 --- a/src/components/SessionCommentItem.tsx +++ b/src/components/SessionCommentItem.tsx @@ -1,5 +1,5 @@ import { motion } from "motion/react"; -import { Comment } from "../types/Comments"; +import { Comment } from "../types/Comment"; import { format } from "date-fns"; function SessionCommentItem({ comment }: { comment: Comment }) { diff --git a/src/components/SessionComments.tsx b/src/components/SessionComments.tsx index e7b940f..c53106f 100644 --- a/src/components/SessionComments.tsx +++ b/src/components/SessionComments.tsx @@ -1,11 +1,14 @@ -import { useRef } from "react"; +import { useRef, useState } from "react"; import SendIcon from "./icons/SendIcon"; import Button from "./Button"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import api from "../utils/api"; -import { Comment } from "../types/Comments"; +import { Comment } from "../types/Comment"; import SessionCommentItem from "./SessionCommentItem"; -import { AnimatePresence } from "motion/react"; +import { AnimatePresence, motion } from "motion/react"; +import { groupByCreatedAt } from "../utils/groupByCreatedAt"; +import { format, isToday } from "date-fns"; +import { ru } from "date-fns/locale"; function SessionComments({ sessionId }: { sessionId: string }) { const textareaRef = useRef(null); @@ -49,9 +52,10 @@ function SessionComments({ sessionId }: { sessionId: string }) { const queryClient = useQueryClient(); - const { data: comments } = useQuery({ + const { data: grouppedComments } = useQuery({ queryKey: ["sessions", "comments", sessionId], queryFn: () => api.get(`comments/${sessionId}`).json(), + select: groupByCreatedAt, }); const { mutate: createComment } = useMutation({ @@ -76,6 +80,7 @@ function SessionComments({ sessionId }: { sessionId: string }) { createComment(textarea.value); textarea.value = ""; + setValue(""); handleTextareaInput(); }; @@ -86,13 +91,26 @@ function SessionComments({ sessionId }: { sessionId: string }) { } }; + const [value, setValue] = useState(""); + return (
- {comments && comments.length > 0 ? ( - comments.map((comment) => ( - + {grouppedComments && grouppedComments.length > 0 ? ( + grouppedComments.map(([timestamp, comments], index) => ( + +

+ {isToday(new Date(timestamp)) + ? "Сегодня" + : format(new Date(timestamp), "d MMMM", { locale: ru })} +

+
+ {comments.map((comment) => ( + + ))} +
+
)) ) : (
@@ -124,6 +142,9 @@ function SessionComments({ sessionId }: { sessionId: string }) { name="comment" className="w-[17.083vw] outline-none text-s resize-none self-center" placeholder="Расскажите, как все прошло" + onChange={(e) => { + setValue(e.target.value); + }} style={{ wordWrap: "break-word", overflowY: "hidden", @@ -131,8 +152,8 @@ function SessionComments({ sessionId }: { sessionId: string }) { onInput={handleTextareaInput} onKeyDown={handleKeyDown} /> - diff --git a/src/components/icons/StartSessionIcon.tsx b/src/components/icons/StartSessionIcon.tsx index 1ef415a..3c9cf7c 100644 --- a/src/components/icons/StartSessionIcon.tsx +++ b/src/components/icons/StartSessionIcon.tsx @@ -1,8 +1,9 @@ function StartSessionIcon() { return ( - + + diff --git a/src/components/modals/CreateSessionModal.tsx b/src/components/modals/CreateSessionModal.tsx index 1663e0a..d867127 100644 --- a/src/components/modals/CreateSessionModal.tsx +++ b/src/components/modals/CreateSessionModal.tsx @@ -226,26 +226,26 @@ export default function CreateSessionModal({ targetServerId }: Props) {
)} -
-

Запустить сеанс

- + Запустить сеанс + + ); diff --git a/src/components/modals/EditTableModal.tsx b/src/components/modals/EditTableModal.tsx index 20d656c..7d7274d 100644 --- a/src/components/modals/EditTableModal.tsx +++ b/src/components/modals/EditTableModal.tsx @@ -18,7 +18,7 @@ function EditTable({ table }: { table: Server }) { return api.put(`servers/${table.id}`, { json: { name: tableName, - location: tableDescription, + description: tableDescription, }, }); }, diff --git a/src/pages/SessionsPage.tsx b/src/pages/SessionsPage.tsx index e340e4f..429f26a 100644 --- a/src/pages/SessionsPage.tsx +++ b/src/pages/SessionsPage.tsx @@ -12,6 +12,7 @@ import { ru } from "date-fns/locale"; import MultySelect from "../components/MultySelect"; import Button from "../components/Button"; import SearchInput from "../components/SearchInput"; +import CloseIcon from "../components/icons/CloseIcon"; function SessionsPage() { const [limit, setLimit] = useState(10); @@ -69,6 +70,12 @@ function SessionsPage() { enabled: !!me, }); + function reset() { + setSearch(""); + setAppIds([]); + setManagerIds([]); + } + return (

Сеансы

@@ -103,40 +110,62 @@ function SessionsPage() { />
- {!!count && ( +

Найдено {count} сеансов

- )} + +
- {Object.entries(grouppedSessions || {}).map(([timestamp, sessions]) => ( -
-

- {isToday(new Date(timestamp)) - ? "Сегодня" - : format(new Date(timestamp), "d MMMM", { locale: ru })} -

-
- {sessions.map((session) => ( - - ))} + {grouppedSessions?.length ? ( + grouppedSessions?.map(([timestamp, sessions]) => ( +
+

+ {isToday(new Date(timestamp)) + ? "Сегодня" + : format(new Date(timestamp), "d MMMM", { locale: ru })} +

+
+ {sessions.map((session) => ( + + ))} +
+
+ )) + ) : ( +
+ +
+

Ничего не нашли

+

+ Попробуйте изменить параметры поиска +

- ))} + )}
- + {!!count && ( + + )}
); } diff --git a/src/types/Comments.ts b/src/types/Comment.ts similarity index 100% rename from src/types/Comments.ts rename to src/types/Comment.ts diff --git a/src/types/Session.ts b/src/types/Session.ts index 9e82ea5..6c8a420 100644 --- a/src/types/Session.ts +++ b/src/types/Session.ts @@ -1,5 +1,5 @@ import { IApp as App } from "./App"; -import { Comment } from "./Comments"; +import { Comment } from "./Comment"; import { IOwner as Owner } from "./Owner"; import { Server } from "./Server"; import { Client } from "./Client"; diff --git a/src/utils/groupByCreatedAt.ts b/src/utils/groupByCreatedAt.ts index a36f652..a1e9caf 100644 --- a/src/utils/groupByCreatedAt.ts +++ b/src/utils/groupByCreatedAt.ts @@ -1,8 +1,10 @@ export function groupByCreatedAt(items: T[]) { - return items.reduce((acc, session) => { - const date = session.createdAt.toString().split("T")[0]; - acc[date] = acc[date] || []; - acc[date].push(session); - return acc; - }, {} as Record); + return Object.entries( + items.reduce((acc, session) => { + const date = session.createdAt.toString().split("T")[0]; + acc[date] = acc[date] || []; + acc[date].push(session); + return acc; + }, {} as Record) + ); }