💄(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:
committed by
Anthony LC
parent
8eb2b60937
commit
49a3989977
@@ -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();
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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"
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user