mirror of
https://github.com/strapi/strapi.git
synced 2025-08-01 05:17:14 +00:00
added onRowClick and folder link
This commit is contained in:
parent
632ccb3c63
commit
cb516f83cd
@ -1,18 +1,29 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import { getFileExtension } from '@strapi/helper-plugin';
|
import { useHistory, useLocation, Link } from 'react-router-dom';
|
||||||
|
import {
|
||||||
|
getFileExtension,
|
||||||
|
onRowClick,
|
||||||
|
stopPropagation,
|
||||||
|
useQueryParams,
|
||||||
|
} from '@strapi/helper-plugin';
|
||||||
import { BaseCheckbox } from '@strapi/design-system/BaseCheckbox';
|
import { BaseCheckbox } from '@strapi/design-system/BaseCheckbox';
|
||||||
|
import { Flex } from '@strapi/design-system/Flex';
|
||||||
import { IconButton } from '@strapi/design-system/IconButton';
|
import { IconButton } from '@strapi/design-system/IconButton';
|
||||||
import { Tbody, Td, Tr } from '@strapi/design-system/Table';
|
import { Tbody, Td, Tr } from '@strapi/design-system/Table';
|
||||||
import Pencil from '@strapi/icons/Pencil';
|
import Pencil from '@strapi/icons/Pencil';
|
||||||
|
import Eye from '@strapi/icons/Eye';
|
||||||
|
|
||||||
import { CellContent } from './CellContent';
|
import { CellContent } from './CellContent';
|
||||||
import { AssetDefinition, FolderDefinition, tableHeaders as cells } from '../../constants';
|
import { AssetDefinition, FolderDefinition, tableHeaders as cells } from '../../constants';
|
||||||
import { getTrad } from '../../utils';
|
import { getFolderURL, getTrad } from '../../utils';
|
||||||
|
|
||||||
export const TableRows = ({ onEditAsset, onEditFolder, onSelectOne, rows, selected }) => {
|
export const TableRows = ({ onEditAsset, onEditFolder, onSelectOne, rows, selected }) => {
|
||||||
const { formatMessage } = useIntl();
|
const { formatMessage } = useIntl();
|
||||||
|
const { pathname } = useLocation();
|
||||||
|
const [{ query }] = useQueryParams();
|
||||||
|
const { push } = useHistory();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Tbody>
|
<Tbody>
|
||||||
@ -22,7 +33,15 @@ export const TableRows = ({ onEditAsset, onEditFolder, onSelectOne, rows, select
|
|||||||
const isSelected = !!selected.find((currentRow) => currentRow.id === id);
|
const isSelected = !!selected.find((currentRow) => currentRow.id === id);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Tr key={id}>
|
<Tr
|
||||||
|
key={id}
|
||||||
|
{...onRowClick({
|
||||||
|
fn: () =>
|
||||||
|
elementType === 'asset'
|
||||||
|
? onEditAsset(element)
|
||||||
|
: push(getFolderURL(pathname, query, element)),
|
||||||
|
})}
|
||||||
|
>
|
||||||
<Td>
|
<Td>
|
||||||
<BaseCheckbox
|
<BaseCheckbox
|
||||||
aria-label={formatMessage(
|
aria-label={formatMessage(
|
||||||
@ -33,7 +52,7 @@ export const TableRows = ({ onEditAsset, onEditFolder, onSelectOne, rows, select
|
|||||||
},
|
},
|
||||||
{ name }
|
{ name }
|
||||||
)}
|
)}
|
||||||
onValueChange={() => onSelectOne({ ...element, elementType })}
|
onValueChange={() => onSelectOne(element)}
|
||||||
checked={isSelected}
|
checked={isSelected}
|
||||||
/>
|
/>
|
||||||
</Td>
|
</Td>
|
||||||
@ -53,23 +72,40 @@ export const TableRows = ({ onEditAsset, onEditFolder, onSelectOne, rows, select
|
|||||||
</Td>
|
</Td>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
{((elementType === 'asset' && onEditAsset) ||
|
|
||||||
(elementType === 'folder' && onEditFolder)) && (
|
<Td {...stopPropagation}>
|
||||||
<Td>
|
<Flex justifyContent="flex-end">
|
||||||
<IconButton
|
{elementType === 'folder' && (
|
||||||
label={formatMessage({
|
<IconButton
|
||||||
id: getTrad('control-card.edit'),
|
forwardedAs={Link}
|
||||||
defaultMessage: 'Edit',
|
label={formatMessage({
|
||||||
})}
|
// TODO: fix trad
|
||||||
onClick={() =>
|
id: getTrad('app'),
|
||||||
elementType === 'asset' ? onEditAsset(element) : onEditFolder(element)
|
defaultMessage: 'Access folder',
|
||||||
}
|
})}
|
||||||
noBorder
|
to={getFolderURL(pathname, query, element)}
|
||||||
>
|
noBorder
|
||||||
<Pencil />
|
>
|
||||||
</IconButton>
|
<Eye />
|
||||||
</Td>
|
</IconButton>
|
||||||
)}
|
)}
|
||||||
|
{((elementType === 'asset' && onEditAsset) ||
|
||||||
|
(elementType === 'folder' && onEditFolder)) && (
|
||||||
|
<IconButton
|
||||||
|
label={formatMessage({
|
||||||
|
id: getTrad('control-card.edit'),
|
||||||
|
defaultMessage: 'Edit',
|
||||||
|
})}
|
||||||
|
onClick={() =>
|
||||||
|
elementType === 'asset' ? onEditAsset(element) : onEditFolder(element)
|
||||||
|
}
|
||||||
|
noBorder
|
||||||
|
>
|
||||||
|
<Pencil />
|
||||||
|
</IconButton>
|
||||||
|
)}
|
||||||
|
</Flex>
|
||||||
|
</Td>
|
||||||
</Tr>
|
</Tr>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { IntlProvider } from 'react-intl';
|
import { IntlProvider } from 'react-intl';
|
||||||
|
import { MemoryRouter } from 'react-router-dom';
|
||||||
import { render } from '@testing-library/react';
|
import { render } from '@testing-library/react';
|
||||||
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
||||||
|
|
||||||
@ -8,6 +9,7 @@ import { TableList } from '..';
|
|||||||
jest.mock('@strapi/helper-plugin', () => ({
|
jest.mock('@strapi/helper-plugin', () => ({
|
||||||
...jest.requireActual('@strapi/helper-plugin'),
|
...jest.requireActual('@strapi/helper-plugin'),
|
||||||
useTracking: jest.fn(() => ({ trackUsage: jest.fn() })),
|
useTracking: jest.fn(() => ({ trackUsage: jest.fn() })),
|
||||||
|
useQueryParams: jest.fn(() => [{ query: {} }]),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const PROPS_FIXTURE = {
|
const PROPS_FIXTURE = {
|
||||||
@ -43,11 +45,13 @@ const ComponentFixture = (props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IntlProvider locale="en" messages={{}}>
|
<MemoryRouter>
|
||||||
<ThemeProvider theme={lightTheme}>
|
<IntlProvider locale="en" messages={{}}>
|
||||||
<TableList {...customProps} />
|
<ThemeProvider theme={lightTheme}>
|
||||||
</ThemeProvider>
|
<TableList {...customProps} />
|
||||||
</IntlProvider>
|
</ThemeProvider>
|
||||||
|
</IntlProvider>
|
||||||
|
</MemoryRouter>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { IntlProvider } from 'react-intl';
|
import { IntlProvider } from 'react-intl';
|
||||||
|
import { MemoryRouter } from 'react-router-dom';
|
||||||
import { render, fireEvent } from '@testing-library/react';
|
import { render, fireEvent } from '@testing-library/react';
|
||||||
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
||||||
|
|
||||||
import { TableRows } from '../TableRows';
|
import { TableRows } from '../TableRows';
|
||||||
|
|
||||||
|
jest.mock('@strapi/helper-plugin', () => ({
|
||||||
|
...jest.requireActual('@strapi/helper-plugin'),
|
||||||
|
useQueryParams: jest.fn(() => [{ query: {} }]),
|
||||||
|
}));
|
||||||
|
|
||||||
const PROPS_FIXTURE = {
|
const PROPS_FIXTURE = {
|
||||||
rows: [
|
rows: [
|
||||||
{
|
{
|
||||||
@ -46,13 +52,15 @@ const ComponentFixture = (props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IntlProvider locale="en" messages={{}}>
|
<MemoryRouter>
|
||||||
<ThemeProvider theme={lightTheme}>
|
<IntlProvider locale="en" messages={{}}>
|
||||||
<table>
|
<ThemeProvider theme={lightTheme}>
|
||||||
<TableRows {...customProps} />
|
<table>
|
||||||
</table>
|
<TableRows {...customProps} />
|
||||||
</ThemeProvider>
|
</table>
|
||||||
</IntlProvider>
|
</ThemeProvider>
|
||||||
|
</IntlProvider>
|
||||||
|
</MemoryRouter>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -97,7 +105,7 @@ describe('TableList | TableRows', () => {
|
|||||||
const onEditAssetSpy = jest.fn();
|
const onEditAssetSpy = jest.fn();
|
||||||
const { getByRole } = setup({ onEditAsset: onEditAssetSpy });
|
const { getByRole } = setup({ onEditAsset: onEditAssetSpy });
|
||||||
|
|
||||||
fireEvent.click(getByRole('button', { name: 'Edit' }));
|
fireEvent.click(getByRole('button', { name: 'Edit', hidden: true }));
|
||||||
|
|
||||||
expect(onEditAssetSpy).toHaveBeenCalledTimes(1);
|
expect(onEditAssetSpy).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
@ -119,11 +127,17 @@ describe('TableList | TableRows', () => {
|
|||||||
onEditFolder: onEditFolderSpy,
|
onEditFolder: onEditFolderSpy,
|
||||||
});
|
});
|
||||||
|
|
||||||
fireEvent.click(getByRole('button', { name: 'Edit' }));
|
fireEvent.click(getByRole('button', { name: 'Edit', hidden: true }));
|
||||||
|
|
||||||
expect(onEditFolderSpy).toHaveBeenCalledTimes(1);
|
expect(onEditFolderSpy).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should display folder link', () => {
|
||||||
|
const { getByRole } = setup({ rows: [FOLDER_FIXTURE] });
|
||||||
|
|
||||||
|
expect(getByRole('link', { name: 'Access folder', hidden: true })).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
it('should reflect non selected folder state', () => {
|
it('should reflect non selected folder state', () => {
|
||||||
const { getByRole } = setup({ rows: [FOLDER_FIXTURE] });
|
const { getByRole } = setup({ rows: [FOLDER_FIXTURE] });
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user