🐛(frontend) close panel when unmount
When the panel is unmounted, the summary and version panel should be closed.
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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}>
|
||||||
|
|||||||
Reference in New Issue
Block a user