💄(frontend) fix minor bugs and enhance DocTitle and DocShareModal

- Fixed minor bugs in the frontend codebase for improved stability.
- Enhanced DocTitle component to update title display dynamically using
useEffect.
- Refactored DocShareModal to improve modal content height calculation
for better responsiveness.
This commit is contained in:
Nathan Panchout
2025-01-10 15:32:39 +01:00
committed by Anthony LC
parent 8eb2b60937
commit 49a3989977
3 changed files with 19 additions and 7 deletions

View File

@@ -1,6 +1,12 @@
import { expect, test } from '@playwright/test'; import { expect, test } from '@playwright/test';
import { createDoc, goToGridDoc, keyCloakSignIn, randomName } from './common'; import {
createDoc,
goToGridDoc,
keyCloakSignIn,
randomName,
verifyDocName,
} from './common';
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
await page.goto('/'); await page.goto('/');
@@ -61,7 +67,7 @@ test.describe('Doc Create: Not loggued', () => {
await goToGridDoc(page, { title }); await goToGridDoc(page, { title });
await expect(page.getByRole('heading', { name: title })).toBeVisible(); await verifyDocName(page, title);
const editor = page.locator('.ProseMirror'); const editor = page.locator('.ProseMirror');
await expect(editor.getByText('This is a normal text')).toBeVisible(); await expect(editor.getByText('This is a normal text')).toBeVisible();

View File

@@ -5,7 +5,7 @@ import {
VariantType, VariantType,
useToastProvider, useToastProvider,
} from '@openfun/cunningham-react'; } from '@openfun/cunningham-react';
import React, { useCallback, useState } from 'react'; import React, { useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { css } from 'styled-components'; import { css } from 'styled-components';
@@ -100,6 +100,10 @@ const DocTitleInput = ({ doc }: DocTitleProps) => {
} }
}; };
useEffect(() => {
setTitleDisplay(doc.title);
}, [doc]);
return ( return (
<> <>
<Tooltip content={t('Rename')} placement="top"> <Tooltip content={t('Rename')} placement="top">

View File

@@ -42,12 +42,16 @@ type Props = {
doc: Doc; doc: Doc;
onClose: () => void; onClose: () => void;
}; };
export const DocShareModal = ({ doc, onClose }: Props) => { export const DocShareModal = ({ doc, onClose }: Props) => {
const { t } = useTranslation(); const { t } = useTranslation();
const selectedUsersRef = useRef<HTMLDivElement>(null); const selectedUsersRef = useRef<HTMLDivElement>(null);
const { isDesktop } = useResponsiveStore(); const { isDesktop } = useResponsiveStore();
const modalContentHeight = isDesktop
? 'min(690px, calc(100dvh - 2em - 12px - 34px))' // 100dvh - 2em - 12px is the max cunningham modal height. 690px is the height of the content in desktop ad 34px is the height of the modal title in mobile
: `calc(100dvh - 34px)`;
const [selectedUsers, setSelectedUsers] = useState<User[]>([]); const [selectedUsers, setSelectedUsers] = useState<User[]>([]);
const [userQuery, setUserQuery] = useState(''); const [userQuery, setUserQuery] = useState('');
const [inputValue, setInputValue] = useState(''); const [inputValue, setInputValue] = useState('');
@@ -164,13 +168,11 @@ export const DocShareModal = ({ doc, onClose }: Props) => {
}; };
const handleRef = (node: HTMLDivElement) => { const handleRef = (node: HTMLDivElement) => {
const contentHeight = isDesktop ? '690px' : '100dvh - 34px'; // 690px is the height of the content in desktop ad 34px is the height of the modal title in mobile
const inputHeight = canShare ? 70 : 0; const inputHeight = canShare ? 70 : 0;
const marginTop = 11; const marginTop = 11;
const footerHeight = node?.clientHeight ?? 0; const footerHeight = node?.clientHeight ?? 0;
const selectedUsersHeight = selectedUsersRef.current?.clientHeight ?? 0; const selectedUsersHeight = selectedUsersRef.current?.clientHeight ?? 0;
const height = `calc(${modalContentHeight} - ${footerHeight}px - ${selectedUsersHeight}px - ${inputHeight}px - ${marginTop}px)`;
const height = `calc(${contentHeight} - ${footerHeight}px - ${selectedUsersHeight}px - ${inputHeight}px - ${marginTop}px)`;
setListHeight(height); setListHeight(height);
}; };
@@ -189,7 +191,7 @@ export const DocShareModal = ({ doc, onClose }: Props) => {
<ShareModalStyle /> <ShareModalStyle />
<Box <Box
aria-label={t('Share modal')} aria-label={t('Share modal')}
$height={isDesktop ? '690px' : `calc(100dvh - 34px)`} $height={modalContentHeight}
$overflow="hidden" $overflow="hidden"
$justify="space-between" $justify="space-between"
> >