diff --git a/src/components/ClientCard.tsx b/src/components/ClientCard.tsx index dc4f4a8..3c45c6d 100644 --- a/src/components/ClientCard.tsx +++ b/src/components/ClientCard.tsx @@ -1,4 +1,4 @@ -import { Client } from "../types/IClient"; +import { Client } from "../types/Client"; import ChevronRightIcon from "./icons/ChevronRightIcon"; import Button from "./Button"; diff --git a/src/components/CurrentSessionCard.tsx b/src/components/CurrentSessionCard.tsx index 909897e..9b0ec7b 100644 --- a/src/components/CurrentSessionCard.tsx +++ b/src/components/CurrentSessionCard.tsx @@ -1,5 +1,5 @@ import FlashIcon from "./icons/FlashIcon"; -import { Session } from "../types/ISession"; +import { Session } from "../types/Session"; import Button from "./Button"; import ChevronRightIcon from "./icons/ChevronRightIcon"; import { motion } from "motion/react"; diff --git a/src/components/DesktopCard.tsx b/src/components/DesktopCard.tsx index caad3d1..b9257c8 100644 --- a/src/components/DesktopCard.tsx +++ b/src/components/DesktopCard.tsx @@ -1,4 +1,4 @@ -import { Server } from "../types/IServer"; +import { Server } from "../types/Server"; import useModalStore from "../stores/useModalStore"; import CreateSessionModal from "./modals/CreateSessionModal"; import Button from "./Button"; diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 934d654..13558b2 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,6 +1,6 @@ import { useQueryClient } from "@tanstack/react-query"; import ChevronDownIcon from "./icons/ChevronDownIcon"; -import { IUser } from "../types/IUser"; +import { IUser } from "../types/User"; import SearchInput from "./SearchInput"; function Header() { diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 5e6ed82..bb34561 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -3,7 +3,7 @@ import Navbar from "./Navbar"; import { useQuery } from "@tanstack/react-query"; import api from "../utils/api"; import CurrentSessionCard from "./CurrentSessionCard"; -import { Session } from "../types/ISession"; +import { Session } from "../types/Session"; import { AnimatePresence } from "motion/react"; import Button from "./Button"; import PlusIcon from "./icons/PlusIcon"; diff --git a/src/components/NewSelect.tsx b/src/components/NewSelect.tsx index 32c67c0..45dedb0 100644 --- a/src/components/NewSelect.tsx +++ b/src/components/NewSelect.tsx @@ -3,6 +3,7 @@ import ChevronDownIcon from "./icons/ChevronDownIcon"; import ChevronUpIcon from "./icons/ChevronUpIcon"; import clsx from "clsx"; import CloseIcon from "./icons/CloseIcon"; +import Button from "./Button"; function NewSelect({ data, @@ -51,16 +52,9 @@ function NewSelect({ )} onClick={() => setIsSelectVisible(!isSelectVisible)} > -
+
{selectedValues.length > 0 - ? selectedValues.map((value, index) => { - return ( -
- {value.name + - (index !== selectedValues.length - 1 ? ", " : "")} -
- ); - }) + ? selectedValues.map(({ name }) => name).join(", ") : placeholder}
({ )} >
-
setSelectedValues([])} - > - - - - Выбрать всё +
+
{data.map((item, index) => ( diff --git a/src/components/ProjectSelector.tsx b/src/components/ProjectSelector.tsx index d509125..3649599 100644 --- a/src/components/ProjectSelector.tsx +++ b/src/components/ProjectSelector.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { IApp } from "../types/IApp"; +import { IApp } from "../types/App"; import ChevronLeftIcon from "./icons/ChevronLeftIcon"; import CloseIcon from "./icons/CloseIcon"; import LightningIcon from "./icons/LightningIcon"; diff --git a/src/components/SessionCard.tsx b/src/components/SessionCard.tsx index 50cbd01..df75db3 100644 --- a/src/components/SessionCard.tsx +++ b/src/components/SessionCard.tsx @@ -1,5 +1,5 @@ import useModalStore from "../stores/useModalStore"; -import { Session } from "../types/ISession"; +import { Session } from "../types/Session"; import SessionModal from "./modals/SessionModal"; function SessionCard({ session }: { session: Session }) { diff --git a/src/components/SessionCommentItem.tsx b/src/components/SessionCommentItem.tsx index 9c5122d..d0a48ac 100644 --- a/src/components/SessionCommentItem.tsx +++ b/src/components/SessionCommentItem.tsx @@ -1,5 +1,5 @@ import { motion } from "motion/react"; -import { Comment } from "../types/IComments"; +import { Comment } from "../types/Comments"; import { format } from "date-fns"; function SessionCommentItem({ comment }: { comment: Comment }) { diff --git a/src/components/SessionComments.tsx b/src/components/SessionComments.tsx index 79a4583..97fe66d 100644 --- a/src/components/SessionComments.tsx +++ b/src/components/SessionComments.tsx @@ -3,7 +3,7 @@ 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/IComments"; +import { Comment } from "../types/Comments"; import SessionCommentItem from "./SessionCommentItem"; import { AnimatePresence } from "motion/react"; diff --git a/src/components/SessionFiles.tsx b/src/components/SessionFiles.tsx new file mode 100644 index 0000000..2e60bad --- /dev/null +++ b/src/components/SessionFiles.tsx @@ -0,0 +1,57 @@ +import { Session } from "../types/Session"; +import ChevronRightIcon from "./icons/ChevronRightIcon"; +import FilledHomeIcon from "./icons/FilledHomeIcon"; + +interface SessionFilesProps { + files: { filename: string; size: number }[]; + session: Session; +} + +function SessionFiles({ files, session }: SessionFilesProps) { + return ( +
+ {files.map((file) => ( + + ))} +
+ ); +} + +export default SessionFiles; + +export function SessionFile({ + link, + filename, + size, +}: { + link: string; + filename: string; + size: number; +}) { + return ( + +
+ + + +
+
+

{filename}

+

{size}

+
+ + + +
+ ); +} diff --git a/src/components/TableSelector.tsx b/src/components/TableSelector.tsx index a58e984..e66a619 100644 --- a/src/components/TableSelector.tsx +++ b/src/components/TableSelector.tsx @@ -1,5 +1,5 @@ import clsx from "clsx"; -import { Server } from "../types/IServer"; +import { Server } from "../types/Server"; import LightningIcon from "./icons/LightningIcon"; interface TableSelectorProps { diff --git a/src/components/icons/FilledHomeIcon.tsx b/src/components/icons/FilledHomeIcon.tsx new file mode 100644 index 0000000..c4a99b5 --- /dev/null +++ b/src/components/icons/FilledHomeIcon.tsx @@ -0,0 +1,12 @@ +function FilledHomeIcon() { + return ( + + + + ); +} + +export default FilledHomeIcon; diff --git a/src/components/modals/CreateSessionModal.tsx b/src/components/modals/CreateSessionModal.tsx index d226ab1..068a6f8 100644 --- a/src/components/modals/CreateSessionModal.tsx +++ b/src/components/modals/CreateSessionModal.tsx @@ -1,9 +1,9 @@ -import { Server } from "../../types/IServer.ts"; +import { Server } from "../../types/Server.ts"; import { useEffect, useRef, useState } from "react"; -import { IApp } from "../../types/IApp.ts"; +import { IApp } from "../../types/App.ts"; import api from "../../utils/api.ts"; -import { Session } from "../../types/ISession.ts"; -import { Client } from "../../types/IClient.ts"; +import { Session } from "../../types/Session.ts"; +import { Client } from "../../types/Client.ts"; import useModalStore from "../../stores/useModalStore.ts"; import TableSelector from "../TableSelector.tsx"; import NewInput from "../NewInput.tsx"; diff --git a/src/components/modals/CurrentSessionModal.tsx b/src/components/modals/CurrentSessionModal.tsx index be241d5..020f7f0 100644 --- a/src/components/modals/CurrentSessionModal.tsx +++ b/src/components/modals/CurrentSessionModal.tsx @@ -3,7 +3,7 @@ import FlashIcon from "../icons/FlashIcon"; import Button from "../Button"; import ChevronRightIcon from "../icons/ChevronRightIcon"; import useModalStore from "../../stores/useModalStore"; -import { Session } from "../../types/ISession"; +import { Session } from "../../types/Session"; import { useEffect, useState } from "react"; import EndSessionModal from "./EndSessionModal"; diff --git a/src/components/modals/EditTableModal.tsx b/src/components/modals/EditTableModal.tsx index 0584573..4ed0abb 100644 --- a/src/components/modals/EditTableModal.tsx +++ b/src/components/modals/EditTableModal.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import NewInput from "../NewInput"; import Button from "../Button"; import useModalStore from "../../stores/useModalStore"; -import { Server } from "../../types/IServer"; +import { Server } from "../../types/Server"; import { useQueryClient } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query"; import api from "../../utils/api"; diff --git a/src/components/modals/EndSessionModal.tsx b/src/components/modals/EndSessionModal.tsx index 5063a10..c1f6d6d 100644 --- a/src/components/modals/EndSessionModal.tsx +++ b/src/components/modals/EndSessionModal.tsx @@ -1,7 +1,7 @@ import { useMutation } from "@tanstack/react-query"; import { useQueryClient } from "@tanstack/react-query"; import useModalStore from "../../stores/useModalStore"; -import { Session } from "../../types/ISession"; +import { Session } from "../../types/Session"; import Button from "../Button"; import CurrentSessionModal from "./CurrentSessionModal"; import api from "../../utils/api"; diff --git a/src/components/modals/SessionModal.tsx b/src/components/modals/SessionModal.tsx index 429d330..f490e45 100644 --- a/src/components/modals/SessionModal.tsx +++ b/src/components/modals/SessionModal.tsx @@ -1,4 +1,4 @@ -import { Session } from "../../types/ISession"; +import { Session } from "../../types/Session"; import { format } from "date-fns"; import { ru } from "date-fns/locale"; import getIntervalDuration from "../../utils/interval-duration"; @@ -7,11 +7,29 @@ import Button from "../Button"; import ChevronRightIcon from "../icons/ChevronRightIcon"; import Badge from "../Badge"; import ClientCard from "../ClientCard"; -import DownloadIcon from "../icons/DownloadIcon"; -import ShareIcon from "../icons/ShareIcon"; import SessionComments from "../SessionComments"; +import { useQuery } from "@tanstack/react-query"; +import api from "../../utils/api"; +import { useEffect } from "react"; +import SessionFiles from "../SessionFiles"; function SessionModal({ session }: { session: Session }) { + const { data } = useQuery({ + queryKey: ["file-list"], + queryFn: () => + api + .get("files", { + searchParams: { + sessionId: session.id, + }, + }) + .json(), + }); + + useEffect(() => { + console.log(data); + }, [data]); + return (
@@ -111,7 +129,7 @@ function SessionModal({ session }: { session: Session }) {

Документы по сеансу

-
+ {/*
-
+
*/} + {data && }
diff --git a/src/pages/DashboardPage.tsx b/src/pages/DashboardPage.tsx index 9edac6a..038ad86 100644 --- a/src/pages/DashboardPage.tsx +++ b/src/pages/DashboardPage.tsx @@ -1,10 +1,10 @@ import { useQuery } from "@tanstack/react-query"; -import { IUser } from "../types/IUser"; +import { IUser } from "../types/User"; import api from "../utils/api"; -import { Server } from "../types/IServer"; +import { Server } from "../types/Server"; import DesktopCard from "../components/DesktopCard"; import Badge from "../components/Badge"; -import { Session } from "../types/ISession"; +import { Session } from "../types/Session"; import SessionCard from "../components/SessionCard"; import Button from "../components/Button"; import ChevronRightIcon from "../components/icons/ChevronRightIcon"; diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx index 7b282ef..d9d0820 100644 --- a/src/pages/LoginPage.tsx +++ b/src/pages/LoginPage.tsx @@ -4,7 +4,7 @@ import useAuthStore from "../stores/useAuthStore"; import api from "../utils/api"; import { useState } from "react"; import { HTTPError } from "ky"; -import { IError } from "../types/IError"; +import { IError } from "../types/Error"; import { useNavigate } from "react-router"; import Button from "../components/Button"; diff --git a/src/pages/ProtectedPage.tsx b/src/pages/ProtectedPage.tsx index 63e8a5a..657a5d6 100644 --- a/src/pages/ProtectedPage.tsx +++ b/src/pages/ProtectedPage.tsx @@ -1,15 +1,15 @@ -import { Navigate, Outlet } from 'react-router'; -import useAuthStore from '../stores/useAuthStore'; -import api from '../utils/api'; -import { useQuery } from '@tanstack/react-query'; -import { IUser } from '../types/IUser'; +import { Navigate, Outlet } from "react-router"; +import useAuthStore from "../stores/useAuthStore"; +import api from "../utils/api"; +import { useQuery } from "@tanstack/react-query"; +import { IUser } from "../types/User"; function ProtectedPage() { const { token } = useAuthStore(); const { data: user, isLoading } = useQuery({ - queryKey: ['me'], - queryFn: () => api.get('auth/me').json(), + queryKey: ["me"], + queryFn: () => api.get("auth/me").json(), enabled: !!token, }); diff --git a/src/pages/SessionsPage.tsx b/src/pages/SessionsPage.tsx index 369c414..e694362 100644 --- a/src/pages/SessionsPage.tsx +++ b/src/pages/SessionsPage.tsx @@ -1,11 +1,11 @@ import { useQuery } from "@tanstack/react-query"; import api from "../utils/api"; -import { IUser } from "../types/IUser"; -import { Session } from "../types/ISession"; +import { IUser } from "../types/User"; +import { Session } from "../types/Session"; import Input from "../components/Input"; import Select from "../components/Select"; import { useState } from "react"; -import { IApp } from "../types/IApp"; +import { IApp } from "../types/App"; import { useDebounce } from "@uidotdev/usehooks"; import SessionCard from "../components/SessionCard"; import { groupByCreatedAt } from "../utils/groupByCreatedAt"; diff --git a/src/queries/useQueryApps.ts b/src/queries/useQueryApps.ts index 0751870..b2e42b5 100644 --- a/src/queries/useQueryApps.ts +++ b/src/queries/useQueryApps.ts @@ -1,4 +1,4 @@ -import { IApp } from "../types/IApp.ts"; +import { IApp } from "../types/App.ts"; import api from "../utils/api.ts"; import { useQuery } from "@tanstack/react-query"; diff --git a/src/queries/useQueryServers.ts b/src/queries/useQueryServers.ts index 385bde0..f8f33f5 100644 --- a/src/queries/useQueryServers.ts +++ b/src/queries/useQueryServers.ts @@ -1,4 +1,4 @@ -import { Server } from "../types/IServer.ts"; +import { Server } from "../types/Server.ts"; import api from "../utils/api.ts"; import { useQuery } from "@tanstack/react-query"; diff --git a/src/types/IApp.ts b/src/types/App.ts similarity index 100% rename from src/types/IApp.ts rename to src/types/App.ts diff --git a/src/types/IClient.ts b/src/types/Client.ts similarity index 100% rename from src/types/IClient.ts rename to src/types/Client.ts diff --git a/src/types/IComments.ts b/src/types/Comments.ts similarity index 100% rename from src/types/IComments.ts rename to src/types/Comments.ts diff --git a/src/types/ICompany.ts b/src/types/Company.ts similarity index 54% rename from src/types/ICompany.ts rename to src/types/Company.ts index 2e42d08..551b268 100644 --- a/src/types/ICompany.ts +++ b/src/types/Company.ts @@ -1,6 +1,6 @@ -import { IApp } from "./IApp"; -import { Server } from "./IServer"; -import { IUser } from "./IUser"; +import { IApp } from "./App"; +import { Server } from "./Server"; +import { IUser } from "./User"; export interface ICompany { id: string; diff --git a/src/types/IError.ts b/src/types/Error.ts similarity index 100% rename from src/types/IError.ts rename to src/types/Error.ts diff --git a/src/types/IOwner.ts b/src/types/Owner.ts similarity index 100% rename from src/types/IOwner.ts rename to src/types/Owner.ts diff --git a/src/types/IServer.ts b/src/types/Server.ts similarity index 66% rename from src/types/IServer.ts rename to src/types/Server.ts index 6c83b2a..a155dd4 100644 --- a/src/types/IServer.ts +++ b/src/types/Server.ts @@ -1,5 +1,5 @@ -import { IApp as App } from "./IApp"; -import { Session } from "./ISession"; +import { IApp as App } from "./App"; +import { Session } from "./Session"; export interface Server { id: string; @@ -10,4 +10,5 @@ export interface Server { sessions?: Session[]; apps?: App[]; status: "online" | "offline"; + ipAddress: string; } diff --git a/src/types/ISession.ts b/src/types/Session.ts similarity index 62% rename from src/types/ISession.ts rename to src/types/Session.ts index 1d6a146..9e82ea5 100644 --- a/src/types/ISession.ts +++ b/src/types/Session.ts @@ -1,8 +1,8 @@ -import { IApp as App } from "./IApp"; -import { Comment } from "./IComments"; -import { IOwner as Owner } from "./IOwner"; -import { Server } from "./IServer"; -import { Client } from "./IClient"; +import { IApp as App } from "./App"; +import { Comment } from "./Comments"; +import { IOwner as Owner } from "./Owner"; +import { Server } from "./Server"; +import { Client } from "./Client"; export interface Session { id: string; diff --git a/src/types/IUser.ts b/src/types/User.ts similarity index 75% rename from src/types/IUser.ts rename to src/types/User.ts index ad0b0c4..c70cb6e 100644 --- a/src/types/IUser.ts +++ b/src/types/User.ts @@ -1,4 +1,4 @@ -import { ICompany } from "./ICompany"; +import { ICompany } from "./Company"; export interface IUser { id: string;