From 21347e6c4234386381b7974f10f39bfa1fa83a68 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Wed, 22 Nov 2023 17:04:00 +0000 Subject: [PATCH 1/2] reduce modal title size --- client/src/features/settings/modal/settings-modal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/features/settings/modal/settings-modal.tsx b/client/src/features/settings/modal/settings-modal.tsx index 9fb4448f..59a4581e 100644 --- a/client/src/features/settings/modal/settings-modal.tsx +++ b/client/src/features/settings/modal/settings-modal.tsx @@ -14,7 +14,7 @@ export default function SettingsModal() { - Settings + Settings From 3f9b6e1380254fa16e35d2e3e140c373cd0738c3 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:42:34 +0000 Subject: [PATCH 2/2] feat: page history --- client/package.json | 2 +- client/src/components/aside/aside.tsx | 42 ++++++- client/src/components/layouts/header.tsx | 40 +++--- client/src/components/layouts/shell.tsx | 36 ++++-- .../components/navbar/atoms/sidebar-atom.ts | 14 ++- client/src/components/ui/user-avatar.tsx | 34 +++++ .../src/features/editor/atoms/editorAtom.ts | 5 + .../components/bubble-menu/bubble-menu.tsx | 4 +- .../components/bubble-menu/node-selector.tsx | 6 +- .../components/slash-menu/command-list.tsx | 3 +- .../editor/components/slash-menu/types.ts | 4 +- client/src/features/editor/editor.tsx | 118 +++++------------- client/src/features/editor/extensions.ts | 6 + .../editor/extensions/comment/comment.ts | 1 + client/src/features/editor/full-editor.tsx | 20 +++ client/src/features/editor/title-editor.tsx | 75 +++++++++++ .../home/components/recent-changes.tsx | 4 +- .../page-history/atoms/history-atoms.ts | 4 + .../components/history-editor.tsx | 33 +++++ .../page-history/components/history-item.tsx | 40 ++++++ .../page-history/components/history-list.tsx | 85 +++++++++++++ .../components/history-modal-body.tsx | 27 ++++ .../page-history/components/history-modal.tsx | 27 ++++ .../page-history/components/history-view.tsx | 26 ++++ .../components/history.module.css | 37 ++++++ .../queries/page-history-query.ts | 20 +++ .../services/page-history-service.ts | 12 ++ .../features/page-history/types/page.types.ts | 21 ++++ .../src/features/page/queries/page-query.ts | 3 +- .../page/tree/hooks/use-persistence.ts | 2 +- .../settings/modal/settings-modal.tsx | 2 +- client/src/hooks/use-match-path.tsx | 16 +++ client/src/hooks/use-toggle-aside.tsx | 18 +++ client/src/pages/page/page.tsx | 18 ++- server/package.json | 5 +- .../collaboration/collaboration.gateway.ts | 8 +- .../src/collaboration/collaboration.module.ts | 2 + .../extensions/history.extension.ts | 64 ++++++++++ .../extensions/persistence.extension.ts | 3 +- server/src/core/page/dto/create-page.dto.ts | 4 - .../src/core/page/dto/history-details.dto.ts | 6 + server/src/core/page/dto/page-history.dto.ts | 6 + .../core/page/entities/page-history.entity.ts | 63 ++++++++++ server/src/core/page/entities/page.entity.ts | 4 + server/src/core/page/page.controller.ts | 18 ++- server/src/core/page/page.module.ts | 15 ++- .../repositories/page-history.repository.ts | 26 ++++ .../core/page/repositories/page.repository.ts | 62 +++++---- .../page/services/page-history.service.ts | 61 +++++++++ server/src/core/page/services/page.service.ts | 43 ++++--- 50 files changed, 995 insertions(+), 200 deletions(-) create mode 100644 client/src/components/ui/user-avatar.tsx create mode 100644 client/src/features/editor/full-editor.tsx create mode 100644 client/src/features/editor/title-editor.tsx create mode 100644 client/src/features/page-history/atoms/history-atoms.ts create mode 100644 client/src/features/page-history/components/history-editor.tsx create mode 100644 client/src/features/page-history/components/history-item.tsx create mode 100644 client/src/features/page-history/components/history-list.tsx create mode 100644 client/src/features/page-history/components/history-modal-body.tsx create mode 100644 client/src/features/page-history/components/history-modal.tsx create mode 100644 client/src/features/page-history/components/history-view.tsx create mode 100644 client/src/features/page-history/components/history.module.css create mode 100644 client/src/features/page-history/queries/page-history-query.ts create mode 100644 client/src/features/page-history/services/page-history-service.ts create mode 100644 client/src/features/page-history/types/page.types.ts create mode 100644 client/src/hooks/use-match-path.tsx create mode 100644 client/src/hooks/use-toggle-aside.tsx create mode 100644 server/src/collaboration/extensions/history.extension.ts create mode 100644 server/src/core/page/dto/history-details.dto.ts create mode 100644 server/src/core/page/dto/page-history.dto.ts create mode 100644 server/src/core/page/entities/page-history.entity.ts create mode 100644 server/src/core/page/repositories/page-history.repository.ts create mode 100644 server/src/core/page/services/page-history.service.ts diff --git a/client/package.json b/client/package.json index ae7c6682..38dbb018 100644 --- a/client/package.json +++ b/client/package.json @@ -9,7 +9,7 @@ "preview": "vite preview --port 3000" }, "dependencies": { - "@hocuspocus/provider": "^2.7.1", + "@hocuspocus/provider": "^2.8.1", "@mantine/core": "^7.2.2", "@mantine/form": "^7.2.2", "@mantine/hooks": "^7.2.2", diff --git a/client/src/components/aside/aside.tsx b/client/src/components/aside/aside.tsx index 3c8bfe87..04c3d1ae 100644 --- a/client/src/components/aside/aside.tsx +++ b/client/src/components/aside/aside.tsx @@ -1,11 +1,41 @@ -import React, { Suspense } from 'react'; - -const Comments = React.lazy(() => import('@/features/comment/comments')); +import { Box, ScrollArea, Text, useMantineTheme } from '@mantine/core'; +import CommentList from '@/features/comment/components/comment-list'; +import { useAtom } from 'jotai'; +import { asideStateAtom } from '@/components/navbar/atoms/sidebar-atom'; +import React from 'react'; export default function Aside() { + const theme = useMantineTheme(); + const [{ tab }] = useAtom(asideStateAtom); + + let title; + let component; + + switch (tab) { + case 'comments': + component = ; + title = 'Comments'; + break; + default: + component = null; + title = null; + } + + return ( - Loading comments...}> - - + + {component && ( + <> + {title} + + +
+ {component} + +
+
+ + )} +
); } diff --git a/client/src/components/layouts/header.tsx b/client/src/components/layouts/header.tsx index 5b173db9..e05cc82c 100644 --- a/client/src/components/layouts/header.tsx +++ b/client/src/components/layouts/header.tsx @@ -2,7 +2,6 @@ import { ActionIcon, Menu, Button, - rem, } from '@mantine/core'; import { IconDots, @@ -15,15 +14,20 @@ import { IconMessage, } from '@tabler/icons-react'; import React from 'react'; +import useToggleAside from '@/hooks/use-toggle-aside'; +import { useAtom } from 'jotai'; +import { historyAtoms } from '@/features/page-history/atoms/history-atoms'; export default function Header() { + const toggleAside = useToggleAside(); + return ( <> - + toggleAside('comments')}> @@ -33,6 +37,12 @@ export default function Header() { } function PageActionMenu() { + const [, setHistoryModalOpen] = useAtom(historyAtoms); + + const openHistoryModal = () => { + setHistoryModalOpen(true); + }; + return ( - } - > + leftSection={}> Page info } + leftSection={} > Copy link - } - > + leftSection={}> Share - } - > + leftSection={} + onClick={openHistoryModal}> Page history } - > + leftSection={}> Lock - } - > + leftSection={}> Delete diff --git a/client/src/components/layouts/shell.tsx b/client/src/components/layouts/shell.tsx index b6c83ea6..2a38862e 100644 --- a/client/src/components/layouts/shell.tsx +++ b/client/src/components/layouts/shell.tsx @@ -1,4 +1,4 @@ -import { desktopAsideAtom, desktopSidebarAtom } from '@/components/navbar/atoms/sidebar-atom'; +import { asideStateAtom, desktopSidebarAtom } from '@/components/navbar/atoms/sidebar-atom'; import { useToggleSidebar } from '@/components/navbar/hooks/use-toggle-sidebar'; import { Navbar } from '@/components/navbar/navbar'; import { AppShell, Burger, Group } from '@mantine/core'; @@ -8,12 +8,16 @@ import classes from './shell.module.css'; import Header from '@/components/layouts/header'; import Breadcrumb from '@/components/layouts/components/breadcrumb'; import Aside from '@/components/aside/aside'; +import { useMatchPath } from '@/hooks/use-match-path'; +import React from 'react'; export default function Shell({ children }: { children: React.ReactNode }) { const [mobileOpened, { toggle: toggleMobile }] = useDisclosure(); const [desktopOpened] = useAtom(desktopSidebarAtom); const toggleDesktop = useToggleSidebar(desktopSidebarAtom); - const [desktopAsideOpened] = useAtom(desktopAsideAtom); + const matchPath = useMatchPath(); + const isPageRoute = matchPath('/p/:pageId'); + const [{ isAsideOpen }] = useAtom(asideStateAtom); return ( - - - - -
+ {isPageRoute && } + { + isPageRoute && + +
+ + } @@ -66,9 +76,13 @@ export default function Shell({ children }: { children: React.ReactNode }) { {children} - -