🐛(frontend) close panel when unmount

When the panel is unmounted, the summary and
version panel should be closed.
This commit is contained in:
Anthony LC
2024-09-03 16:16:05 +02:00
committed by Anthony LC
parent 85044fd665
commit ddd93ab0c5
3 changed files with 27 additions and 4 deletions

View File

@@ -45,6 +45,13 @@ test.describe('Doc Version', () => {
await expect(page.getByText('Hello World')).toBeHidden(); await expect(page.getByText('Hello World')).toBeHidden();
await expect(page.getByText('It will create a version')).toBeVisible(); await expect(page.getByText('It will create a version')).toBeVisible();
await page.getByLabel('Open the document options').click();
await page
.getByRole('button', {
name: 'Version history',
})
.click();
await expect(panel.getByText('Current version')).toBeVisible(); await expect(panel.getByText('Current version')).toBeVisible();
expect(await panel.locator('li').count()).toBe(2); expect(await panel.locator('li').count()).toBe(2);

View File

@@ -1,10 +1,11 @@
import React, { useCallback, useState } from 'react'; import React, { useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Box, BoxButton, Text } from '@/components'; import { Box, BoxButton, Text } from '@/components';
import { useDocStore } from '../../doc-editor'; import { useDocStore } from '../../doc-editor';
import { Doc } from '../../doc-management'; import { Doc } from '../../doc-management';
import { useDocSummaryStore } from '../stores';
interface SummaryProps { interface SummaryProps {
doc: Doc; doc: Doc;
@@ -14,13 +15,20 @@ export const Summary = ({ doc }: SummaryProps) => {
const { docsStore } = useDocStore(); const { docsStore } = useDocStore();
const { t } = useTranslation(); const { t } = useTranslation();
const editor = docsStore?.[doc.id].editor; const editor = docsStore?.[doc.id]?.editor;
const headingFiltering = useCallback( const headingFiltering = useCallback(
() => editor?.document.filter((block) => block.type === 'heading'), () => editor?.document.filter((block) => block.type === 'heading'),
[editor?.document], [editor?.document],
); );
const [headings, setHeadings] = useState(headingFiltering()); const [headings, setHeadings] = useState(headingFiltering());
const { setIsPanelSummaryOpen } = useDocSummaryStore();
useEffect(() => {
return () => {
setIsPanelSummaryOpen(false);
};
}, [setIsPanelSummaryOpen]);
if (!editor) { if (!editor) {
return null; return null;
@@ -64,7 +72,7 @@ export const Summary = ({ doc }: SummaryProps) => {
<BoxButton <BoxButton
onClick={() => { onClick={() => {
editor.focus(); editor.focus();
document.querySelector(`[data-id="initialBlockId"]`)?.scrollIntoView({ document.querySelector(`.bn-editor`)?.scrollIntoView({
behavior: 'smooth', behavior: 'smooth',
block: 'start', block: 'start',
}); });

View File

@@ -1,6 +1,6 @@
import { Loader } from '@openfun/cunningham-react'; import { Loader } from '@openfun/cunningham-react';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useMemo, useRef } from 'react'; import React, { useEffect, useMemo, useRef } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { APIError } from '@/api'; import { APIError } from '@/api';
@@ -9,6 +9,7 @@ import { Doc } from '@/features/docs/doc-management';
import { useDate } from '@/hook'; import { useDate } from '@/hook';
import { useDocVersionsInfiniteQuery } from '../api/useDocVersions'; import { useDocVersionsInfiniteQuery } from '../api/useDocVersions';
import { useDocVersionStore } from '../stores';
import { Versions } from '../types'; import { Versions } from '../types';
import { VersionItem } from './VersionItem'; import { VersionItem } from './VersionItem';
@@ -104,6 +105,13 @@ export const VersionList = ({ doc }: VersionListProps) => {
return acc.concat(page.results); return acc.concat(page.results);
}, [] as Versions[]); }, [] as Versions[]);
}, [data?.pages]); }, [data?.pages]);
const { setIsPanelVersionOpen } = useDocVersionStore();
useEffect(() => {
return () => {
setIsPanelVersionOpen(false);
};
}, [setIsPanelVersionOpen]);
return ( return (
<Box $css="overflow-y: auto; overflow-x: hidden;" ref={containerRef}> <Box $css="overflow-y: auto; overflow-x: hidden;" ref={containerRef}>