♻️(frontend) move Panel component
We will have multiple Panel components in the future, so we move it to the root of the components folder. We refacto the Version Panel to use the new Panel component.
This commit is contained in:
@@ -19,7 +19,7 @@ test.describe('Doc Version', () => {
|
|||||||
})
|
})
|
||||||
.click();
|
.click();
|
||||||
|
|
||||||
const panel = page.getByLabel('Document version panel');
|
const panel = page.getByLabel('Document panel');
|
||||||
|
|
||||||
await expect(panel.getByText('Current version')).toBeVisible();
|
await expect(panel.getByText('Current version')).toBeVisible();
|
||||||
expect(await panel.locator('li').count()).toBe(1);
|
expect(await panel.locator('li').count()).toBe(1);
|
||||||
@@ -79,7 +79,7 @@ test.describe('Doc Version', () => {
|
|||||||
page.getByRole('button', { name: 'Version history' }),
|
page.getByRole('button', { name: 'Version history' }),
|
||||||
).toBeHidden();
|
).toBeHidden();
|
||||||
|
|
||||||
await expect(page.getByLabel('Document version panel')).toBeHidden();
|
await expect(page.getByLabel('Document panel')).toBeHidden();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('it restores the doc version', async ({ page, browserName }) => {
|
test('it restores the doc version', async ({ page, browserName }) => {
|
||||||
@@ -112,7 +112,7 @@ test.describe('Doc Version', () => {
|
|||||||
})
|
})
|
||||||
.click();
|
.click();
|
||||||
|
|
||||||
const panel = page.getByLabel('Document version panel');
|
const panel = page.getByLabel('Document panel');
|
||||||
await panel.locator('li').nth(1).click();
|
await panel.locator('li').nth(1).click();
|
||||||
await expect(page.getByText('World')).toBeHidden();
|
await expect(page.getByText('World')).toBeHidden();
|
||||||
|
|
||||||
@@ -167,7 +167,7 @@ test.describe('Doc Version', () => {
|
|||||||
})
|
})
|
||||||
.click();
|
.click();
|
||||||
|
|
||||||
const panel = page.getByLabel('Document version panel');
|
const panel = page.getByLabel('Document panel');
|
||||||
await panel.locator('li').nth(1).click();
|
await panel.locator('li').nth(1).click();
|
||||||
await expect(page.getByText('World')).toBeHidden();
|
await expect(page.getByText('World')).toBeHidden();
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,21 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { PropsWithChildren, useEffect, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { Box, Card, IconBG, Text } from '@/components';
|
import { Box, Card, IconBG, Text } from '@/components';
|
||||||
import { useCunninghamTheme } from '@/cunningham';
|
import { useCunninghamTheme } from '@/cunningham';
|
||||||
import { Doc } from '@/features/docs/doc-management';
|
|
||||||
|
|
||||||
import { useDocVersionStore } from '../stores';
|
|
||||||
|
|
||||||
import { VersionList } from './VersionList';
|
|
||||||
|
|
||||||
interface PanelProps {
|
interface PanelProps {
|
||||||
doc: Doc;
|
title: string;
|
||||||
|
setIsPanelOpen: (isOpen: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Panel = ({ doc }: PanelProps) => {
|
export const Panel = ({
|
||||||
|
children,
|
||||||
|
title,
|
||||||
|
setIsPanelOpen,
|
||||||
|
}: PropsWithChildren<PanelProps>) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { colorsTokens } = useCunninghamTheme();
|
const { colorsTokens } = useCunninghamTheme();
|
||||||
const { setIsPanelOpen } = useDocVersionStore();
|
|
||||||
|
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
@@ -50,7 +49,7 @@ export const Panel = ({ doc }: PanelProps) => {
|
|||||||
`
|
`
|
||||||
}
|
}
|
||||||
`}
|
`}
|
||||||
aria-label={t('Document version panel')}
|
aria-label={t('Document panel')}
|
||||||
{...closedOverridingStyles}
|
{...closedOverridingStyles}
|
||||||
>
|
>
|
||||||
<Box
|
<Box
|
||||||
@@ -69,11 +68,7 @@ export const Panel = ({ doc }: PanelProps) => {
|
|||||||
>
|
>
|
||||||
<IconBG
|
<IconBG
|
||||||
iconName="menu_open"
|
iconName="menu_open"
|
||||||
aria-label={
|
aria-label={isOpen ? t('Close the panel') : t('Open the panel')}
|
||||||
isOpen
|
|
||||||
? t('Close the document version panel')
|
|
||||||
: t('Open the document version panel')
|
|
||||||
}
|
|
||||||
$background="transparent"
|
$background="transparent"
|
||||||
$size="h2"
|
$size="h2"
|
||||||
$zIndex={1}
|
$zIndex={1}
|
||||||
@@ -96,10 +91,10 @@ export const Panel = ({ doc }: PanelProps) => {
|
|||||||
$radius="2px"
|
$radius="2px"
|
||||||
/>
|
/>
|
||||||
<Text $weight="bold" $size="l" $theme="primary">
|
<Text $weight="bold" $size="l" $theme="primary">
|
||||||
{t('VERSIONS')}
|
{title}
|
||||||
</Text>
|
</Text>
|
||||||
</Box>
|
</Box>
|
||||||
<VersionList doc={doc} />
|
{children}
|
||||||
</Box>
|
</Box>
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
@@ -5,11 +5,12 @@ import React from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { Box, Card, Text, TextErrors } from '@/components';
|
import { Box, Card, Text, TextErrors } from '@/components';
|
||||||
|
import { Panel } from '@/components/Panel';
|
||||||
import { useCunninghamTheme } from '@/cunningham';
|
import { useCunninghamTheme } from '@/cunningham';
|
||||||
import { DocHeader } from '@/features/docs/doc-header';
|
import { DocHeader } from '@/features/docs/doc-header';
|
||||||
import { Doc } from '@/features/docs/doc-management';
|
import { Doc } from '@/features/docs/doc-management';
|
||||||
import {
|
import {
|
||||||
Panel,
|
VersionList,
|
||||||
Versions,
|
Versions,
|
||||||
useDocVersion,
|
useDocVersion,
|
||||||
useDocVersionStore,
|
useDocVersionStore,
|
||||||
@@ -25,7 +26,7 @@ export const DocEditor = ({ doc }: DocEditorProps) => {
|
|||||||
const {
|
const {
|
||||||
query: { versionId },
|
query: { versionId },
|
||||||
} = useRouter();
|
} = useRouter();
|
||||||
const { isPanelOpen } = useDocVersionStore();
|
const { isPanelVersionOpen, setIsPanelVersionOpen } = useDocVersionStore();
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
@@ -64,7 +65,11 @@ export const DocEditor = ({ doc }: DocEditorProps) => {
|
|||||||
<BlockNoteEditor doc={doc} />
|
<BlockNoteEditor doc={doc} />
|
||||||
)}
|
)}
|
||||||
</Card>
|
</Card>
|
||||||
{doc.abilities.versions_list && isPanelOpen && <Panel doc={doc} />}
|
{doc.abilities.versions_list && isPanelVersionOpen && (
|
||||||
|
<Panel title={t('VERSIONS')} setIsPanelOpen={setIsPanelVersionOpen}>
|
||||||
|
<VersionList doc={doc} />
|
||||||
|
</Panel>
|
||||||
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => {
|
|||||||
const [isModalRemoveOpen, setIsModalRemoveOpen] = useState(false);
|
const [isModalRemoveOpen, setIsModalRemoveOpen] = useState(false);
|
||||||
const [isModalPDFOpen, setIsModalPDFOpen] = useState(false);
|
const [isModalPDFOpen, setIsModalPDFOpen] = useState(false);
|
||||||
const [isDropOpen, setIsDropOpen] = useState(false);
|
const [isDropOpen, setIsDropOpen] = useState(false);
|
||||||
const { setIsPanelOpen } = useDocVersionStore();
|
const { setIsPanelVersionOpen } = useDocVersionStore();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
@@ -82,7 +82,7 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => {
|
|||||||
{doc.abilities.versions_list && (
|
{doc.abilities.versions_list && (
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setIsPanelOpen(true);
|
setIsPanelVersionOpen(true);
|
||||||
setIsDropOpen(false);
|
setIsDropOpen(false);
|
||||||
}}
|
}}
|
||||||
color="primary-text"
|
color="primary-text"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export * from './ModalVersion';
|
export * from './ModalVersion';
|
||||||
export * from './Panel';
|
export * from './VersionList';
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
|
|
||||||
export interface UseDocVersionStore {
|
export interface UseDocVersionStore {
|
||||||
isPanelOpen: boolean;
|
isPanelVersionOpen: boolean;
|
||||||
setIsPanelOpen: (isOpen: boolean) => void;
|
setIsPanelVersionOpen: (isOpen: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useDocVersionStore = create<UseDocVersionStore>((set) => ({
|
export const useDocVersionStore = create<UseDocVersionStore>((set) => ({
|
||||||
isPanelOpen: false,
|
isPanelVersionOpen: false,
|
||||||
setIsPanelOpen: (isPanelOpen) => {
|
setIsPanelVersionOpen: (isPanelVersionOpen) => {
|
||||||
set(() => ({ isPanelOpen }));
|
set(() => ({ isPanelVersionOpen }));
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user