From 06d854a7d24c90c15e0e23cf40c7d5c29db53936 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Fri, 31 May 2024 21:51:44 +0100 Subject: [PATCH] refactor layout * ui polishing * frontend and backend fixes --- apps/client/src/App.tsx | 38 +++-- .../components/icons/icon-people-circle.tsx | 4 - .../layouts/components/breadcrumb.module.css | 6 - .../layouts/dashboard/dashboard-layout.tsx | 17 --- .../layouts/dashboard/shell.module.css | 38 ----- .../components/layouts/dashboard/shell.tsx | 88 ----------- .../layouts/global/app-header.module.css | 23 +++ .../components/layouts/global/app-header.tsx | 70 +++++++++ .../layouts/global/app-shell.module.css | 16 ++ .../layouts/{dashboard => global}/aside.tsx | 2 +- .../layouts/global/global-app-shell.tsx | 77 ++++++++++ .../global/hooks/atoms/sidebar-atom.ts | 21 +++ .../global/hooks}/hooks/use-toggle-sidebar.ts | 0 .../src/components/layouts/global/layout.tsx | 13 ++ .../components/layouts/global/top-menu.tsx | 124 +++++++++++++++ .../layouts/settings/settings-layout.tsx | 17 --- .../layouts/settings/settings-shell.tsx | 36 ----- .../components/navbar/atoms/sidebar-atom.ts | 16 -- apps/client/src/components/navbar/navbar.tsx | 122 --------------- .../src/components/navbar/user-button.tsx | 32 ---- .../settings/settings-sidebar.tsx | 56 +++---- .../{layouts => }/settings/settings-title.tsx | 0 .../settings/settings.module.css | 17 +-- .../ui}/page-list-skeleton.tsx | 0 .../components/ui/sidebar-toggle-button.tsx | 34 +++++ .../src/features/auth/hooks/use-auth.ts | 11 +- .../comment/components/comment-dialog.tsx | 2 +- .../comment/components/comment-list.tsx | 5 +- .../src/features/editor/full-editor.tsx | 15 +- .../src/features/editor/page-editor.tsx | 2 +- .../src/features/editor/title-editor.tsx | 15 +- .../home/components/recent-changes.tsx | 56 +++---- .../breadcrumbs/breadcrumb.module.css | 23 +++ .../components/breadcrumbs}/breadcrumb.tsx | 97 +++++------- .../components/header/page-header-menu.tsx} | 42 ++++-- .../components/header/page-header.module.css | 11 ++ .../page/components/header/page-header.tsx | 18 +++ .../page/hooks/use-delete-page-modal.tsx | 26 ++++ apps/client/src/features/page/page.utils.ts | 20 ++- .../src/features/page/queries/page-query.ts | 38 +++-- .../features/page/services/page-service.ts | 21 ++- .../page/tree/components/space-content.tsx | 31 ---- .../page/tree/components/space-tree.tsx | 61 ++++---- .../page/tree/hooks/use-tree-mutation.ts | 21 ++- .../src/features/page/types/page.types.ts | 13 +- .../features/search/queries/search-query.ts | 9 +- .../src/features/search/search-spotlight.tsx | 121 +++++++++------ .../search/services/search-service.ts | 7 +- .../src/features/search/types/search.types.ts | 8 + .../space/components/settings-modal.tsx | 2 +- .../components/sidebar/space-name.module.css | 6 + .../space/components/sidebar/space-name.tsx | 19 +++ .../sidebar/space-sidebar.module.css} | 11 +- .../components/sidebar/space-sidebar.tsx | 142 ++++++++++++++++++ .../space/components/space-grid.module.css | 25 +++ .../features/space/components/space-grid.tsx | 46 ++++++ .../space/components/space-home-tabs.tsx | 23 +++ .../space/components/space-home.module.css} | 8 +- .../space/components/space-recent-changes.tsx | 53 +++++++ .../src/features/space/queries/space-query.ts | 10 ++ .../src/features/space/types/space.types.ts | 1 + apps/client/src/hooks/use-toggle-aside.tsx | 4 +- apps/client/src/lib/app-route.ts | 12 ++ apps/client/src/lib/config.ts | 8 + apps/client/src/lib/index.ts | 1 + apps/client/src/lib/utils.ts | 15 ++ apps/client/src/pages/dashboard/home.tsx | 12 +- apps/client/src/pages/page/page-redirect.tsx | 28 ++++ apps/client/src/pages/page/page.tsx | 20 ++- .../settings/account/account-preferences.tsx | 2 +- .../settings/account/account-settings.tsx | 2 +- .../src/pages/settings/group/group-info.tsx | 2 +- .../src/pages/settings/group/groups.tsx | 2 +- .../src/pages/settings/space/spaces.tsx | 2 +- .../settings/workspace/workspace-members.tsx | 2 +- .../settings/workspace/workspace-settings.tsx | 2 +- apps/client/src/pages/space/space-home.tsx | 15 ++ apps/client/src/theme.ts | 23 ++- .../casl/abilities/space-ability.factory.ts | 6 +- apps/server/src/core/page/dto/page.dto.ts | 15 +- .../src/core/page/dto/recent-page.dto.ts | 7 + apps/server/src/core/page/page.controller.ts | 37 +++-- .../src/core/page/services/page.service.ts | 20 ++- apps/server/src/core/search/dto/search.dto.ts | 12 +- .../src/core/search/search.controller.ts | 41 +++-- apps/server/src/core/search/search.service.ts | 11 +- .../server/src/core/space/dto/space-id.dto.ts | 2 +- .../space/services/space-member.service.ts | 15 +- .../server/src/core/space/space.controller.ts | 17 ++- .../migrations/20240324T085900-spaces.ts | 2 +- .../src/database/repos/page/page.repo.ts | 46 +++++- .../database/repos/space/space-member.repo.ts | 50 ++++++ .../src/database/repos/space/space.repo.ts | 15 +- .../src/database/repos/user/user.repo.ts | 33 +++- apps/server/src/helpers/nanoid.utils.ts | 2 +- 95 files changed, 1548 insertions(+), 821 deletions(-) delete mode 100644 apps/client/src/components/layouts/components/breadcrumb.module.css delete mode 100644 apps/client/src/components/layouts/dashboard/dashboard-layout.tsx delete mode 100644 apps/client/src/components/layouts/dashboard/shell.module.css delete mode 100644 apps/client/src/components/layouts/dashboard/shell.tsx create mode 100644 apps/client/src/components/layouts/global/app-header.module.css create mode 100644 apps/client/src/components/layouts/global/app-header.tsx create mode 100644 apps/client/src/components/layouts/global/app-shell.module.css rename apps/client/src/components/layouts/{dashboard => global}/aside.tsx (90%) create mode 100644 apps/client/src/components/layouts/global/global-app-shell.tsx create mode 100644 apps/client/src/components/layouts/global/hooks/atoms/sidebar-atom.ts rename apps/client/src/components/{navbar => layouts/global/hooks}/hooks/use-toggle-sidebar.ts (100%) create mode 100644 apps/client/src/components/layouts/global/layout.tsx create mode 100644 apps/client/src/components/layouts/global/top-menu.tsx delete mode 100644 apps/client/src/components/layouts/settings/settings-layout.tsx delete mode 100644 apps/client/src/components/layouts/settings/settings-shell.tsx delete mode 100644 apps/client/src/components/navbar/atoms/sidebar-atom.ts delete mode 100644 apps/client/src/components/navbar/navbar.tsx delete mode 100644 apps/client/src/components/navbar/user-button.tsx rename apps/client/src/components/{layouts => }/settings/settings-sidebar.tsx (62%) rename apps/client/src/components/{layouts => }/settings/settings-title.tsx (100%) rename apps/client/src/components/{layouts => }/settings/settings.module.css (74%) rename apps/client/src/{features/home/components => components/ui}/page-list-skeleton.tsx (100%) create mode 100644 apps/client/src/components/ui/sidebar-toggle-button.tsx create mode 100644 apps/client/src/features/page/components/breadcrumbs/breadcrumb.module.css rename apps/client/src/{components/layouts/components => features/page/components/breadcrumbs}/breadcrumb.tsx (50%) rename apps/client/src/{components/layouts/dashboard/header.tsx => features/page/components/header/page-header-menu.tsx} (68%) create mode 100644 apps/client/src/features/page/components/header/page-header.module.css create mode 100644 apps/client/src/features/page/components/header/page-header.tsx create mode 100644 apps/client/src/features/page/hooks/use-delete-page-modal.tsx delete mode 100644 apps/client/src/features/page/tree/components/space-content.tsx create mode 100644 apps/client/src/features/space/components/sidebar/space-name.module.css create mode 100644 apps/client/src/features/space/components/sidebar/space-name.tsx rename apps/client/src/{components/navbar/navbar.module.css => features/space/components/sidebar/space-sidebar.module.css} (85%) create mode 100644 apps/client/src/features/space/components/sidebar/space-sidebar.tsx create mode 100644 apps/client/src/features/space/components/space-grid.module.css create mode 100644 apps/client/src/features/space/components/space-grid.tsx create mode 100644 apps/client/src/features/space/components/space-home-tabs.tsx rename apps/client/src/{components/navbar/user-button.module.css => features/space/components/space-home.module.css} (62%) create mode 100644 apps/client/src/features/space/components/space-recent-changes.tsx create mode 100644 apps/client/src/lib/index.ts create mode 100644 apps/client/src/lib/utils.ts create mode 100644 apps/client/src/pages/page/page-redirect.tsx create mode 100644 apps/client/src/pages/space/space-home.tsx create mode 100644 apps/server/src/core/page/dto/recent-page.dto.ts diff --git a/apps/client/src/App.tsx b/apps/client/src/App.tsx index 649dd73..e9ea50c 100644 --- a/apps/client/src/App.tsx +++ b/apps/client/src/App.tsx @@ -2,12 +2,10 @@ import { Route, Routes } from "react-router-dom"; import { Welcome } from "@/pages/welcome"; import SignUpPage from "@/pages/auth/signup"; import LoginPage from "@/pages/auth/login"; -import DashboardLayout from "@/components/layouts/dashboard/dashboard-layout.tsx"; import Home from "@/pages/dashboard/home"; import Page from "@/pages/page/page"; import AccountSettings from "@/pages/settings/account/account-settings"; import WorkspaceMembers from "@/pages/settings/workspace/workspace-members"; -import SettingsLayout from "@/components/layouts/settings/settings-layout.tsx"; import WorkspaceSettings from "@/pages/settings/workspace/workspace-settings"; import Groups from "@/pages/settings/group/groups"; import GroupInfo from "./pages/settings/group/group-info"; @@ -23,6 +21,9 @@ import { authTokensAtom } from "@/features/auth/atoms/auth-tokens-atom.ts"; import { SOCKET_URL } from "@/features/websocket/types"; import AccountPreferences from "@/pages/settings/account/account-preferences.tsx"; import { InviteSignUpForm } from "@/features/auth/components/invite-sign-up-form.tsx"; +import SpaceHome from "@/pages/space/space-home.tsx"; +import PageRedirect from "@/pages/page/page-redirect.tsx"; +import Layout from "@/components/layouts/global/layout.tsx"; export default function App() { const [, setSocket] = useAtom(socketAtom); @@ -63,23 +64,28 @@ export default function App() { } /> } /> - }> + } /> + + }> } /> - } /> + + } /> + } /> + + + } /> + } + /> + } /> + } /> + } /> + } /> + } /> + - }> - } /> - } - /> - } /> - } /> - } /> - } /> - } /> - } /> diff --git a/apps/client/src/components/icons/icon-people-circle.tsx b/apps/client/src/components/icons/icon-people-circle.tsx index 860bf34..9969589 100644 --- a/apps/client/src/components/icons/icon-people-circle.tsx +++ b/apps/client/src/components/icons/icon-people-circle.tsx @@ -2,10 +2,6 @@ import { ActionIcon, rem } from "@mantine/core"; import React from "react"; import { IconUsersGroup } from "@tabler/icons-react"; -interface IconPeopleCircleProps extends React.ComponentPropsWithoutRef<"svg"> { - size?: number | string; -} - export function IconGroupCircle() { return ( diff --git a/apps/client/src/components/layouts/components/breadcrumb.module.css b/apps/client/src/components/layouts/components/breadcrumb.module.css deleted file mode 100644 index 6a58a26..0000000 --- a/apps/client/src/components/layouts/components/breadcrumb.module.css +++ /dev/null @@ -1,6 +0,0 @@ -.breadcrumb { - a { - color: var(--mantine-color-default-color); - text-overflow: ellipsis; - } -} diff --git a/apps/client/src/components/layouts/dashboard/dashboard-layout.tsx b/apps/client/src/components/layouts/dashboard/dashboard-layout.tsx deleted file mode 100644 index 29a297d..0000000 --- a/apps/client/src/components/layouts/dashboard/dashboard-layout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { UserProvider } from "@/features/user/user-provider.tsx"; -import Shell from "./shell.tsx"; -import { Outlet } from "react-router-dom"; -import { Helmet } from "react-helmet-async"; - -export default function DashboardLayout() { - return ( - - - - Home - - - - - ); -} diff --git a/apps/client/src/components/layouts/dashboard/shell.module.css b/apps/client/src/components/layouts/dashboard/shell.module.css deleted file mode 100644 index e39067f..0000000 --- a/apps/client/src/components/layouts/dashboard/shell.module.css +++ /dev/null @@ -1,38 +0,0 @@ -.header, -.footer { - @media (max-width: 992px) { - [data-layout="alt"] & { - --_section-right: var(--app-shell-aside-offset, 0px); - } - } -} - -.aside { - background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-8)); - - @media (min-width: 993px) { - [data-layout="alt"] & { - --_section-top: var(--_section-top, var(--app-shell-header-offset, 0px)); - --_section-height: var( - --_section-height, - calc( - 100dvh - var(--app-shell-header-offset, 0px) - - var(--app-shell-footer-offset, 0px) - ) - ); - } - } -} - -@media (max-width: 48em) { - .aside { - width: 350px; - } -} - -@media (max-width: 48em) { - .navbar { - width: 300px; - } -} - diff --git a/apps/client/src/components/layouts/dashboard/shell.tsx b/apps/client/src/components/layouts/dashboard/shell.tsx deleted file mode 100644 index a358f1f..0000000 --- a/apps/client/src/components/layouts/dashboard/shell.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { - asideStateAtom, - desktopSidebarAtom, -} from "@/components/navbar/atoms/sidebar-atom.ts"; -import { useToggleSidebar } from "@/components/navbar/hooks/use-toggle-sidebar.ts"; -import { Navbar } from "@/components/navbar/navbar.tsx"; -import { AppShell, Burger, Group } from "@mantine/core"; -import { useDisclosure } from "@mantine/hooks"; -import { useAtom } from "jotai"; -import classes from "./shell.module.css"; -import Header from "@/components/layouts/dashboard/header.tsx"; -import Breadcrumb from "@/components/layouts/components/breadcrumb.tsx"; -import Aside from "@/components/layouts/dashboard/aside.tsx"; -import { useMatchPath } from "@/hooks/use-match-path.tsx"; -import React from "react"; - -export default function Shell({ children }: { children: React.ReactNode }) { - const [mobileOpened, { toggle: toggleMobile, close: closeMobile }] = - useDisclosure(); - const [desktopOpened] = useAtom(desktopSidebarAtom); - const toggleDesktop = useToggleSidebar(desktopSidebarAtom); - const matchPath = useMatchPath(); - const isPageRoute = matchPath("/p/:pageId"); - const [{ isAsideOpen }] = useAtom(asideStateAtom); - - return ( - - - - - - - - {isPageRoute && } - - - {isPageRoute && ( - -
- - )} - - - - - - - - {children} - - {isPageRoute && ( - -