From 098df5c0b50a45e1c7e1d76d7700b995ad0cfae8 Mon Sep 17 00:00:00 2001 From: Nathan Panchout Date: Thu, 9 Jan 2025 09:14:20 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20enhance=20UI=20components?= =?UTF-8?q?=20and=20improve=20document=20management?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Updated DropdownMenu to include index-based styling for better visual consistency. - Refactored QuickSearchStyle to remove unnecessary transitions for smoother performance. - Adjusted modal styles in cunningham-style.css for improved layout. - Changed BlockNoteEditor to update block type from 'heading' to 'paragraph' for better content structure. - Enhanced DocHeader and DocToolBox components with updated color themes for improved visibility. - Modified ModalRemoveDoc to change size and clean up unnecessary props for better usability. - Improved Heading and TableContent components to handle empty states more gracefully. - Updated DocsGrid to conditionally render content based on document availability, enhancing user experience. - Refined LeftPanel components for better layout and visual hierarchy, including adjustments to padding and separators. --- src/frontend/apps/impress/public/favicon.ico | Bin 285478 -> 1969 bytes .../impress/src/components/DropdownMenu.tsx | 12 ++- .../quick-search/QuickSearchStyle.tsx | 2 - .../src/cunningham/cunningham-style.css | 4 +- .../doc-editor/components/BlockNoteEditor.tsx | 19 +--- .../docs/doc-header/components/DocHeader.tsx | 13 ++- .../docs/doc-header/components/DocToolBox.tsx | 1 + .../components/ModalRemoveDoc.tsx | 8 +- .../doc-table-content/components/Heading.tsx | 2 +- .../components/TableContent.tsx | 7 +- .../docs/docs-grid/components/DocsGrid.tsx | 84 +++++++++--------- .../docs/docs-grid/components/index.ts | 4 + .../src/features/docs/docs-grid/index.ts | 1 + .../apps/impress/src/features/docs/index.ts | 1 + .../components/LefPanelTargetFilters.tsx | 1 - .../components/LeftPanelContent.tsx | 2 +- .../components/LeftPanelDocContent.tsx | 16 +++- .../components/LeftPanelFavoriteItem.tsx | 52 +++++++++++ .../components/LeftPanelFavorites.tsx | 42 +++------ 19 files changed, 160 insertions(+), 111 deletions(-) create mode 100644 src/frontend/apps/impress/src/features/docs/docs-grid/components/index.ts create mode 100644 src/frontend/apps/impress/src/features/docs/docs-grid/index.ts create mode 100644 src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx diff --git a/src/frontend/apps/impress/public/favicon.ico b/src/frontend/apps/impress/public/favicon.ico index d881a76392711054ed32d99c516ccb3e2108eebb..ce7bc2c558f85e496df9c229334fb92cc2ac57b5 100644 GIT binary patch literal 1969 zcmV;i2Tu5jP)u$JcX06WE_9%Og@G`<;~yQ3gEUPC8mt=7BZMHpfPm@0 zv%I=~aB$@&%t>=GFc{qN`~AdElAgb?kor&pSub6haNC4Tt)rMT7xe1Hksh zhlf{QgICP}fd)vf;xZdp4YcGeAR){&TB0av*2YP(alD_mFTOn*eKexhUq4t2-unJ- z1XIX^Dd44ic~2?1jlco|N5Hu>QR4WRcFUY@vkxCfW!+Y82N(~`ykj}u{^kA4TW}Hv zlzO>Cx@#9!1u$Obb@Px!Z5;~64Wng-^|&V=yh zKEAvYs?_i99+O_S5Gv(*Ck6(CA*zp28&z7!-3bm*uU#JNGT`ocd2LRu47k!_MAC?{k3h!QA0xAmF=$1emyV8(Ac~^R_`-!Ds-SlW zSzHhWFd^!_cS(f|fXvG#(1`)s0e3B|-+%aUJ%kwu)i6GD#t1?&T)fPMB>3VyymVv0 z%wvgcK#ZEklElYjz?1<{@?sTtB*gbC2B;Yj6rKw#()8!iKhS=t?7PI0HLx?BRHV)yIRujeEMD2 z>lH4lC%Q5KB}QCuMz2kFS!eL%jd0|?=cxy{Tcm#YsGHcnZss)emm)E9qiseogAohh zIgSG^?JZN__qd`J?M=#D*ihNZeyRf?#2~v=vssF9Z0-x4Ag~q?K;IKfx{;z zcL_645DdwfDcyb-1#`{pm=RJ2+Hn|#9kkGlHel)*3*S9?vbhiKVDT_R-be;0X*$q^ zlZgymd(<}65F6wKvP?%oYsNN{4e&bZ@`q>7-p*aAMDOE~2RcU)7bS=%F!0A?nYm7l zNfz(glmQChtX45%Maf)OFGOw>!Bz~DPFz?YYJj4WZWzy$j|Ibs>nh!OwK_4dsa797 zreh@5Mkbs#p6}EJq}u31>Bc_(KBhp3#=1oZB(C6QhboI@M%>8@CHO9NR{?R!+Bl$r zQa*%b0{H-UD3Y=_dir!T;_t7ld`)i;dEBt^!C6GF1RWS~Gfv}DDFUlKY>9AU^gsfC z7ow%5**wz9$~Tx^s4eYUs&mawNgVYd2b-f>e^i{C#b+o@WhL(i|ps0CZzOnr+OduIUzF!X zbk7qweHAjVmy)@ON#+EczzbD%SQGhj7-^}g$B^YkiaZj6?xSsJZ{+(scphGQ1fXgT zHRWJNW#O7eMkK`^bY!5c!&+Cp-RI9g-GrH_kLd*g5EZZ)G?vIwU-k5-f7@t=NNmc5 z#46JC{jcye*28O<@jzep_EzblH%%paC%TbtyN+T0UX*hdFbAJ5hkEUW_<|;_kZa4! zU*I2t3Hg9$LLb!a2<7<`Y zlXS#X(-df?NGy070l==qZ9Z?onYL=~Z&C-tgs6$Wy~vb=#1wrh{5c}A>nfWJ%mgL( zlFFQY?QSU6uE#7bB_k8FC|eap5IDh+(g5Z`s3N#xNAk$;Ri)b$%-FCSaeO^`P^Zu<_f4}3KgL3U#;B9bna@e(VI`u+ZhgKeV2An+$C;4xEF&ly5(Ui>54 zh3*U(+M&eE1g{v14-VHOn3FQV6HN5*jtIRjsc2aF`k~cu@0~xRjkdYwV4yo8V2svj zC?tOL1~EVbMPZ1h&qin;m=vb4ck!=g$)D0Gy(0Pt^6iKNbt(B+00000NkvXXu0mjf DtX`eV literal 285478 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 diff --git a/src/frontend/apps/impress/src/components/DropdownMenu.tsx b/src/frontend/apps/impress/src/components/DropdownMenu.tsx index 82e80fc6..8c390c73 100644 --- a/src/frontend/apps/impress/src/components/DropdownMenu.tsx +++ b/src/frontend/apps/impress/src/components/DropdownMenu.tsx @@ -77,7 +77,7 @@ export const DropdownMenu = ({ {topMessage} )} - {options.map((option) => { + {options.map((option, index) => { if (option.show !== undefined && !option.show) { return; } @@ -104,6 +104,16 @@ export const DropdownMenu = ({ $gap={spacings['base']} $css={css` border: none; + ${index === 0 && + css` + border-top-left-radius: 4px; + border-top-right-radius: 4px; + `} + ${index === options.length - 1 && + css` + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + `} font-size: var(--c--theme--font--sizes--sm); color: var(--c--theme--colors--greyscale-1000); font-weight: 500; diff --git a/src/frontend/apps/impress/src/components/quick-search/QuickSearchStyle.tsx b/src/frontend/apps/impress/src/components/quick-search/QuickSearchStyle.tsx index 7738f2cb..27967b2f 100644 --- a/src/frontend/apps/impress/src/components/quick-search/QuickSearchStyle.tsx +++ b/src/frontend/apps/impress/src/components/quick-search/QuickSearchStyle.tsx @@ -71,8 +71,6 @@ export const QuickSearchStyle = createGlobalStyle` flex:1; overflow-y: auto; overscroll-behavior: contain; - transition: 100ms ease; - transition-property: height; } [cmdk-vercel-shortcuts] { diff --git a/src/frontend/apps/impress/src/cunningham/cunningham-style.css b/src/frontend/apps/impress/src/cunningham/cunningham-style.css index 4090f557..00d95617 100644 --- a/src/frontend/apps/impress/src/cunningham/cunningham-style.css +++ b/src/frontend/apps/impress/src/cunningham/cunningham-style.css @@ -545,8 +545,8 @@ input:-webkit-autofill:focus { color: var(--c--theme--colors--greyscale-600); } -.c__modal__footer { - margin-top: -1rem; +.c__modal__close .c__button { + padding: 0 !important; } .c__modal--full .c__modal__content { diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx index 08497bd2..8886562b 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx @@ -10,7 +10,7 @@ import * as Y from 'yjs'; import { Box, TextErrors } from '@/components'; import { useAuthStore } from '@/core/auth'; -import { Doc, Role, currentDocRole } from '@/features/docs/doc-management'; +import { Doc } from '@/features/docs/doc-management'; import { useUploadFile } from '../hook'; import { useHeadings } from '../hook/useHeadings'; @@ -167,23 +167,6 @@ export const BlockNoteEditor = ({ doc, provider }: BlockNoteEditorProps) => { ); useHeadings(editor); - /** - * With the collaboration it gets complicated to create the initial block - * better to let Blocknote manage, then we update the block with the content. - */ - useEffect(() => { - if (doc.content || currentDocRole(doc.abilities) !== Role.OWNER) { - return; - } - - setTimeout(() => { - editor.updateBlock(editor.document[0], { - type: 'heading', - content: '', - }); - }, 100); - }, [editor, doc.content, doc.abilities]); - useEffect(() => { setEditor(editor); diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocHeader.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocHeader.tsx index 977fe3a8..f40e7248 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocHeader.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocHeader.tsx @@ -42,7 +42,7 @@ export const DocHeader = ({ doc }: DocHeaderProps) => { {docIsPublic && ( { border: 1px solid var(--c--theme--colors--primary-300, #e3e3fd); `} > - - {t('Public document')} + + + {t('Public document')} + )} diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx index 5e7765d4..2144fa12 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx @@ -212,6 +212,7 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => { $theme="primary" $padding={{ all: 'xs' }} $css={css` + border-radius: 4px; &:hover { background-color: ${colors['greyscale-100']}; } diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx index 53a21997..6dab1516 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx @@ -46,7 +46,6 @@ export const ModalRemoveDoc = ({ onClose, doc }: ModalRemoveDocProps) => { onClose()} rightActions={ <> @@ -72,17 +71,14 @@ export const ModalRemoveDoc = ({ onClose, doc }: ModalRemoveDocProps) => { } - size={ModalSize.SMALL} + size={ModalSize.MEDIUM} title={ {t('Delete a doc')} } > - + {!isError && ( {t('Are you sure you want to delete the document "{{title}}"?', { diff --git a/src/frontend/apps/impress/src/features/docs/doc-table-content/components/Heading.tsx b/src/frontend/apps/impress/src/features/docs/doc-table-content/components/Heading.tsx index 4146db10..9a564f74 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-table-content/components/Heading.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-table-content/components/Heading.tsx @@ -65,7 +65,7 @@ export const Heading = ({ $width="100%" $padding={{ vertical: 'xtiny', left: leftPaddingMap[level] }} $variation={isActive ? '1000' : '700'} - $weight={isActive ? 'bold' : 'normal'} + $weight={isHighlight ? 'bold' : 'normal'} $css="overflow-wrap: break-word;" $hasTransition aria-selected={isHighlight} diff --git a/src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx b/src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx index a0a397c5..4ad01fa0 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx @@ -78,7 +78,12 @@ export const TableContent = () => { setIsHover(false); }; - if (!editor) { + if ( + !editor || + !headings || + headings.length === 0 || + (headings.length === 1 && !headings[0].contentText) + ) { return null; } diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx index c51ca99b..a62c7e41 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx @@ -1,4 +1,4 @@ -import { Button, Loader } from '@openfun/cunningham-react'; +import { Button } from '@openfun/cunningham-react'; import { useTranslation } from 'react-i18next'; import { InView } from 'react-intersection-observer'; import { css } from 'styled-components'; @@ -36,7 +36,7 @@ export const DocsGrid = ({ }), }); const loading = isFetching || isLoading; - + const hasDocs = data?.pages.some((page) => page.results.length > 0); const loadMore = (inView: boolean) => { if (!inView || loading) { return; @@ -63,7 +63,7 @@ export const DocsGrid = ({ overflow-y: auto; `} > - + - - - - - {t('Name')} - - - {isDesktop && ( - - - {t('Updated at')} - - - )} - - - - - {/* Body */} - {data?.pages.map((currentPage) => { - return currentPage.results.map((doc) => ( - - )); - })} - - - {loading && ( - - + {!hasDocs && ( + + + {t('No documents found')} + )} + {hasDocs && ( + + + + + {t('Name')} + + + {isDesktop && ( + + + {t('Updated at')} + + + )} + + + + + {/* Body */} + {data?.pages.map((currentPage) => { + return currentPage.results.map((doc) => ( + + )); + })} + + )} + {hasNextPage && !loading && ( { font-weight: ${isActive ? 700 : undefined}; &:hover { background-color: ${colors['greyscale-100']}; - font-weight: 700; } `} > diff --git a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelContent.tsx b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelContent.tsx index 2dd043b0..b621e1c5 100644 --- a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelContent.tsx +++ b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelContent.tsx @@ -22,7 +22,7 @@ export const LeftPanelContent = () => { flex: 0 0 auto; `} > - + diff --git a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelDocContent.tsx b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelDocContent.tsx index e2e615c1..d571b698 100644 --- a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelDocContent.tsx +++ b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelDocContent.tsx @@ -1,10 +1,14 @@ +import { css } from 'styled-components'; + import { Box, SeparatedSection } from '@/components'; +import { useCunninghamTheme } from '@/cunningham'; import { useDocStore } from '@/features/docs'; import { SimpleDocItem } from '@/features/docs/docs-grid/components/SimpleDocItem'; export const LeftPanelDocContent = () => { const { currentDoc } = useDocStore(); - + const { spacingsTokens } = useCunninghamTheme(); + const spacing = spacingsTokens(); if (!currentDoc) { return null; } @@ -17,7 +21,15 @@ export const LeftPanelDocContent = () => { > - + + + 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 new file mode 100644 index 00000000..374e67c6 --- /dev/null +++ b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx @@ -0,0 +1,52 @@ +import { useModal } from '@openfun/cunningham-react'; +import { css } from 'styled-components'; + +import { Box, StyledLink } from '@/components'; +import { useCunninghamTheme } from '@/cunningham'; +import { Doc, DocsGridActions, SimpleDocItem } from '@/features/docs'; +import { DocShareModal } from '@/features/docs/doc-share/component/DocShareModal'; +import { useResponsiveStore } from '@/stores'; + +type LeftPanelFavoriteItemProps = { + doc: Doc; +}; + +export const LeftPanelFavoriteItem = ({ doc }: LeftPanelFavoriteItemProps) => { + const shareModal = useModal(); + const { spacingsTokens } = useCunninghamTheme(); + const { isDesktop } = useResponsiveStore(); + const spacing = spacingsTokens(); + return ( + + + + +
+ +
+ {shareModal.isOpen && ( + + )} +
+ ); +}; diff --git a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavorites.tsx b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavorites.tsx index 3de5297e..8ab80bd7 100644 --- a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavorites.tsx +++ b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavorites.tsx @@ -1,16 +1,11 @@ import { useTranslation } from 'react-i18next'; -import { css } from 'styled-components'; -import { - Box, - InfiniteScroll, - SeparatedSection, - StyledLink, - Text, -} from '@/components'; +import { Box, InfiniteScroll, Text } from '@/components'; +import { HorizontalSeparator } from '@/components/separators/HorizontalSeparator'; import { useCunninghamTheme } from '@/cunningham'; import { useInfiniteDocs } from '@/features/docs'; -import { SimpleDocItem } from '@/features/docs/docs-grid/components/SimpleDocItem'; + +import { LeftPanelFavoriteItem } from './LeftPanelFavoriteItem'; export const LeftPanelFavorites = () => { const { t } = useTranslation(); @@ -23,17 +18,18 @@ export const LeftPanelFavorites = () => { is_favorite: true, }); - const invitations = docs.data?.pages.flatMap((page) => page.results) || []; + const favoriteDocs = docs.data?.pages.flatMap((page) => page.results) || []; - if (invitations.length === 0) { + if (favoriteDocs.length === 0) { return null; } return ( - + + { isLoading={docs.isFetchingNextPage} next={() => void docs.fetchNextPage()} > - {invitations.map((doc) => ( - - - - - + {favoriteDocs.map((doc) => ( + ))} - +
); };