From f12d30cffa120e63fe60191ce0e8ecafbd5e0ae9 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 23 Apr 2025 17:18:57 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=9A(frontend)=20reduce=20features=20co?= =?UTF-8?q?upling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move some components and assets to `doc-management` to reduce coupling between features: - SimpleDocItem from `doc-grid` to `doc-management` - useCreateChildDoc from `doc-tree` to `doc-management` - isOwnerOrAdmin from `doc-tree` to `doc-management` --- .../features/docs/doc-management/api/index.ts | 1 + .../api/useCreateChildDoc.tsx} | 22 +++++++++---------- .../assets/pinned-document.svg | 0 .../assets/simple-document.svg | 0 .../components/SimpleDocItem.tsx | 0 .../docs/doc-management/components/index.ts | 1 + .../doc-search/components/DocSearchItem.tsx | 3 +-- .../src/features/docs/doc-tree/api/index.ts | 1 - .../docs/doc-tree/components/DocTree.tsx | 3 +-- .../components/DocTreeItemActions.tsx | 6 ++--- .../docs-grid/components/DocsGridItem.tsx | 5 +++-- .../docs/docs-grid/components/index.ts | 1 - .../components/LeftPanelFavoriteItem.tsx | 4 ++-- 13 files changed, 23 insertions(+), 24 deletions(-) rename src/frontend/apps/impress/src/features/docs/{doc-tree/api/useCreateChildren.tsx => doc-management/api/useCreateChildDoc.tsx} (57%) rename src/frontend/apps/impress/src/features/docs/{docs-grid => doc-management}/assets/pinned-document.svg (100%) rename src/frontend/apps/impress/src/features/docs/{docs-grid => doc-management}/assets/simple-document.svg (100%) rename src/frontend/apps/impress/src/features/docs/{docs-grid => doc-management}/components/SimpleDocItem.tsx (100%) diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/api/index.ts b/src/frontend/apps/impress/src/features/docs/doc-management/api/index.ts index 3a0f3437..6fcabd96 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/api/index.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-management/api/index.ts @@ -1,3 +1,4 @@ +export * from './useCreateChildDoc'; export * from './useCreateDoc'; export * from './useCreateFavoriteDoc'; export * from './useDeleteFavoriteDoc'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/api/useCreateChildren.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/api/useCreateChildDoc.tsx similarity index 57% rename from src/frontend/apps/impress/src/features/docs/doc-tree/api/useCreateChildren.tsx rename to src/frontend/apps/impress/src/features/docs/doc-management/api/useCreateChildDoc.tsx index b9f774a8..dd203783 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/api/useCreateChildren.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/api/useCreateChildDoc.tsx @@ -2,16 +2,16 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { APIError, errorCauses, fetchAPI } from '@/api'; -import { Doc, KEY_LIST_DOC } from '../../doc-management'; +import { Doc, KEY_LIST_DOC } from '..'; -export type CreateDocParam = Pick & { +export type CreateChildDocParam = Pick & { parentId: string; }; -export const createDocChildren = async ({ +export const createChildDoc = async ({ title, parentId, -}: CreateDocParam): Promise => { +}: CreateChildDocParam): Promise => { const response = await fetchAPI(`documents/${parentId}/children/`, { method: 'POST', body: JSON.stringify({ @@ -26,19 +26,19 @@ export const createDocChildren = async ({ return response.json() as Promise; }; -interface CreateDocProps { - onSuccess: (data: Doc) => void; +interface UseCreateChildDocProps { + onSuccess: (doc: Doc) => void; } -export function useCreateChildrenDoc({ onSuccess }: CreateDocProps) { +export function useCreateChildDoc({ onSuccess }: UseCreateChildDocProps) { const queryClient = useQueryClient(); - return useMutation({ - mutationFn: createDocChildren, - onSuccess: (data) => { + return useMutation({ + mutationFn: createChildDoc, + onSuccess: (doc) => { void queryClient.resetQueries({ queryKey: [KEY_LIST_DOC], }); - onSuccess(data); + onSuccess(doc); }, }); } diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/assets/pinned-document.svg b/src/frontend/apps/impress/src/features/docs/doc-management/assets/pinned-document.svg similarity index 100% rename from src/frontend/apps/impress/src/features/docs/docs-grid/assets/pinned-document.svg rename to src/frontend/apps/impress/src/features/docs/doc-management/assets/pinned-document.svg diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/assets/simple-document.svg b/src/frontend/apps/impress/src/features/docs/doc-management/assets/simple-document.svg similarity index 100% rename from src/frontend/apps/impress/src/features/docs/docs-grid/assets/simple-document.svg rename to src/frontend/apps/impress/src/features/docs/doc-management/assets/simple-document.svg diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/SimpleDocItem.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx similarity index 100% rename from src/frontend/apps/impress/src/features/docs/docs-grid/components/SimpleDocItem.tsx rename to src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/index.ts b/src/frontend/apps/impress/src/features/docs/doc-management/components/index.ts index 639460cd..50da09e9 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/index.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/index.ts @@ -1 +1,2 @@ export * from './ModalRemoveDoc'; +export * from './SimpleDocItem'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchItem.tsx b/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchItem.tsx index 7d741407..59b9b47b 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchItem.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchItem.tsx @@ -1,7 +1,6 @@ import { Box, Icon } from '@/components'; import { QuickSearchItemContent } from '@/components/quick-search/'; -import { Doc } from '@/docs/doc-management'; -import { SimpleDocItem } from '@/docs/docs-grid/'; +import { Doc, SimpleDocItem } from '@/docs/doc-management'; import { useResponsiveStore } from '@/stores'; type DocSearchItemProps = { diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts b/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts index 584ed898..44949aaa 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts @@ -1,4 +1,3 @@ -export * from './useCreateChildren'; export * from './useDocChildren'; export * from './useDocTree'; export * from './useMove'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTree.tsx b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTree.tsx index 72b72900..841e3f11 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTree.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTree.tsx @@ -11,8 +11,7 @@ import { css } from 'styled-components'; import { Box, StyledLink } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; -import { Doc } from '@/docs/doc-management'; -import { SimpleDocItem } from '@/docs/docs-grid'; +import { Doc, SimpleDocItem } from '@/docs/doc-management'; import { KEY_DOC_TREE, useDocTree } from '../api/useDocTree'; import { useMoveDoc } from '../api/useMove'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx index 6f301184..dc851b4e 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx @@ -14,10 +14,10 @@ import { ModalRemoveDoc, Role, useCopyDocLink, + useCreateChildDoc, useDuplicateDoc, } from '@/docs/doc-management'; -import { useCreateChildrenDoc } from '../api/useCreateChildren'; import { useDetachDoc } from '../api/useDetach'; import MoveDocIcon from '../assets/doc-extract-bold.svg'; @@ -118,7 +118,7 @@ export const DocTreeItemActions = ({ }, ]; - const { mutate: createChildrenDoc } = useCreateChildrenDoc({ + const { mutate: createChildDoc } = useCreateChildDoc({ onSuccess: (newDoc) => { onCreateSuccess?.(newDoc); void router.push(`/docs/${newDoc.id}`); @@ -174,7 +174,7 @@ export const DocTreeItemActions = ({ e.stopPropagation(); e.preventDefault(); - createChildrenDoc({ + createChildDoc({ parentId: doc.id, }); }} diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItem.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItem.tsx index 722d5e7a..e84c4a2b 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItem.tsx +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItem.tsx @@ -5,7 +5,7 @@ import { css } from 'styled-components'; import { Box, Icon, StyledLink, Text } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; -import { Doc, LinkReach } from '@/docs/doc-management'; +import { Doc, LinkReach, SimpleDocItem } from '@/docs/doc-management'; import { DocShareModal } from '@/docs/doc-share'; import { useResponsiveStore } from '@/stores'; @@ -13,11 +13,12 @@ import { useResponsiveDocGrid } from '../hooks/useResponsiveDocGrid'; import { DocsGridActions } from './DocsGridActions'; import { DocsGridItemSharedButton } from './DocsGridItemSharedButton'; -import { SimpleDocItem } from './SimpleDocItem'; + type DocsGridItemProps = { doc: Doc; dragMode?: boolean; }; + export const DocsGridItem = ({ doc, dragMode = false }: DocsGridItemProps) => { const { t } = useTranslation(); const { isDesktop } = useResponsiveStore(); diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/index.ts b/src/frontend/apps/impress/src/features/docs/docs-grid/components/index.ts index a017747f..540d636c 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/index.ts +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/index.ts @@ -1,4 +1,3 @@ export * from './DocsGrid'; export * from './DocsGridActions'; -export * from './SimpleDocItem'; export * from './DocsGridLoader'; diff --git a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx index 32c74d6e..dc424eb9 100644 --- a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx +++ b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx @@ -3,9 +3,9 @@ import { css } from 'styled-components'; import { Box, StyledLink } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; -import { Doc } from '@/docs/doc-management'; +import { Doc, SimpleDocItem } from '@/docs/doc-management'; import { DocShareModal } from '@/docs/doc-share'; -import { DocsGridActions, SimpleDocItem } from '@/docs/docs-grid'; +import { DocsGridActions } from '@/docs/docs-grid'; import { useResponsiveStore } from '@/stores'; type LeftPanelFavoriteItemProps = {