Merge pull request #11451 from strapi/cm/ml-sort

[v4] Add sort to ML compo in CM
This commit is contained in:
cyril lopez 2021-11-03 10:46:16 +01:00 committed by GitHub
commit 97e556ff56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 15 deletions

View File

@ -8,11 +8,13 @@ import { AssetList } from '../../../AssetList';
import getTrad from '../../../../utils/getTrad'; import getTrad from '../../../../utils/getTrad';
import PaginationFooter from './PaginationFooter'; import PaginationFooter from './PaginationFooter';
import PageSize from './PageSize'; import PageSize from './PageSize';
import SortPicker from '../../../SortPicker';
export const BrowseStep = ({ export const BrowseStep = ({
assets, assets,
onChangePage, onChangePage,
onChangePageSize, onChangePageSize,
onChangeSort,
onEditAsset, onEditAsset,
onSelectAllAsset, onSelectAllAsset,
onSelectAsset, onSelectAsset,
@ -26,7 +28,7 @@ export const BrowseStep = ({
<> <>
<Stack size={4}> <Stack size={4}>
{onSelectAllAsset && ( {onSelectAllAsset && (
<Flex> <Stack horizontal size={2}>
<Flex <Flex
paddingLeft={2} paddingLeft={2}
paddingRight={2} paddingRight={2}
@ -44,7 +46,8 @@ export const BrowseStep = ({
onChange={onSelectAllAsset} onChange={onSelectAllAsset}
/> />
</Flex> </Flex>
</Flex> <SortPicker onChangeSort={onChangeSort} />
</Stack>
)} )}
<AssetList <AssetList
@ -75,6 +78,7 @@ BrowseStep.propTypes = {
assets: PropTypes.arrayOf(PropTypes.shape({})).isRequired, assets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,
onChangePage: PropTypes.func.isRequired, onChangePage: PropTypes.func.isRequired,
onChangePageSize: PropTypes.func.isRequired, onChangePageSize: PropTypes.func.isRequired,
onChangeSort: PropTypes.func.isRequired,
onEditAsset: PropTypes.func.isRequired, onEditAsset: PropTypes.func.isRequired,
onSelectAsset: PropTypes.func.isRequired, onSelectAsset: PropTypes.func.isRequired,
onSelectAllAsset: PropTypes.func, onSelectAllAsset: PropTypes.func,

View File

@ -29,7 +29,10 @@ export const AssetDialog = ({
}) => { }) => {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const { canRead, canCreate, isLoading: isLoadingPermissions } = useMediaLibraryPermissions(); const { canRead, canCreate, isLoading: isLoadingPermissions } = useMediaLibraryPermissions();
const [{ rawQuery, queryObject }, { onChangePage, onChangePageSize }] = useModalQueryParams(); const [
{ rawQuery, queryObject },
{ onChangePage, onChangePageSize, onChangeSort },
] = useModalQueryParams();
const { data, isLoading, error } = useModalAssets({ skipWhen: !canRead, rawQuery }); const { data, isLoading, error } = useModalAssets({ skipWhen: !canRead, rawQuery });
const [selectedAssets, { selectOne, selectAll, selectOnly }] = useSelectionState( const [selectedAssets, { selectOne, selectAll, selectOnly }] = useSelectionState(
@ -161,6 +164,7 @@ export const AssetDialog = ({
queryObject={queryObject} queryObject={queryObject}
onChangePage={onChangePage} onChangePage={onChangePage}
onChangePageSize={onChangePageSize} onChangePageSize={onChangePageSize}
onChangeSort={onChangeSort}
/> />
</ModalBody> </ModalBody>
</TabPanel> </TabPanel>

View File

@ -1,16 +1,11 @@
import React from 'react'; import React from 'react';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import PropTypes from 'prop-types';
import { SimpleMenu, MenuItem } from '@strapi/design-system/SimpleMenu'; import { SimpleMenu, MenuItem } from '@strapi/design-system/SimpleMenu';
import { useQueryParams } from '@strapi/helper-plugin'; import { getTrad } from '../../utils';
import { getTrad } from '../../../utils';
export const SortPicker = () => { const SortPicker = ({ onChangeSort }) => {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const [, setQuery] = useQueryParams();
const handleChange = value => {
setQuery({ sort: value });
};
const filters = [ const filters = [
{ key: 'sort.created_at_desc', value: `createdAt:DESC` }, { key: 'sort.created_at_desc', value: `createdAt:DESC` },
@ -30,10 +25,16 @@ export const SortPicker = () => {
})} })}
> >
{filters.map(filter => ( {filters.map(filter => (
<MenuItem key={filter.key} onClick={() => handleChange(filter.value)}> <MenuItem key={filter.key} onClick={() => onChangeSort(filter.value)}>
{formatMessage({ id: getTrad(filter.key) })} {formatMessage({ id: getTrad(filter.key) })}
</MenuItem> </MenuItem>
))} ))}
</SimpleMenu> </SimpleMenu>
); );
}; };
SortPicker.propTypes = {
onChangeSort: PropTypes.func.isRequired,
};
export default SortPicker;

View File

@ -17,9 +17,17 @@ const useModalQueryParams = () => {
setQueryObject(prev => ({ ...prev, page })); setQueryObject(prev => ({ ...prev, page }));
}; };
const handleChangeSort = sort => {
setQueryObject(prev => ({ ...prev, sort }));
};
return [ return [
{ queryObject, rawQuery: stringify(queryObject, { encode: false }) }, { queryObject, rawQuery: stringify(queryObject, { encode: false }) },
{ onChangePage: handeChangePage, onChangePageSize: handleChangePageSize }, {
onChangePage: handeChangePage,
onChangePageSize: handleChangePageSize,
onChangeSort: handleChangeSort,
},
]; ];
}; };

View File

@ -9,6 +9,7 @@ import {
AnErrorOccurred, AnErrorOccurred,
Search, Search,
useSelectionState, useSelectionState,
useQueryParams,
} from '@strapi/helper-plugin'; } from '@strapi/helper-plugin';
import { Layout, HeaderLayout, ContentLayout, ActionLayout } from '@strapi/design-system/Layout'; import { Layout, HeaderLayout, ContentLayout, ActionLayout } from '@strapi/design-system/Layout';
import { Main } from '@strapi/design-system/Main'; import { Main } from '@strapi/design-system/Main';
@ -19,10 +20,10 @@ import { BaseCheckbox } from '@strapi/design-system/BaseCheckbox';
import { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog'; import { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog';
import { EditAssetDialog } from '../../components/EditAssetDialog'; import { EditAssetDialog } from '../../components/EditAssetDialog';
import { AssetList } from '../../components/AssetList'; import { AssetList } from '../../components/AssetList';
import SortPicker from '../../components/SortPicker';
import { useAssets } from '../../hooks/useAssets'; import { useAssets } from '../../hooks/useAssets';
import { getTrad } from '../../utils'; import { getTrad } from '../../utils';
import { Filters } from './components/Filters'; import { Filters } from './components/Filters';
import { SortPicker } from './components/SortPicker';
import { PaginationFooter } from '../../components/PaginationFooter'; import { PaginationFooter } from '../../components/PaginationFooter';
import { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions'; import { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';
import { BulkDeleteButton } from './components/BulkDeleteButton'; import { BulkDeleteButton } from './components/BulkDeleteButton';
@ -42,12 +43,17 @@ export const MediaLibrary = () => {
canDownload, canDownload,
isLoading: isLoadingPermissions, isLoading: isLoadingPermissions,
} = useMediaLibraryPermissions(); } = useMediaLibraryPermissions();
const [, setQuery] = useQueryParams();
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const { data, isLoading, error } = useAssets({ const { data, isLoading, error } = useAssets({
skipWhen: !canRead, skipWhen: !canRead,
}); });
const handleChangeSort = value => {
setQuery({ sort: value });
};
const [showUploadAssetDialog, setShowUploadAssetDialog] = useState(false); const [showUploadAssetDialog, setShowUploadAssetDialog] = useState(false);
const [assetToEdit, setAssetToEdit] = useState(undefined); const [assetToEdit, setAssetToEdit] = useState(undefined);
const [selected, { selectOne, selectAll }] = useSelectionState('id', []); const [selected, { selectOne, selectAll }] = useSelectionState('id', []);
@ -113,7 +119,7 @@ export const MediaLibrary = () => {
/> />
</BoxWithHeight> </BoxWithHeight>
)} )}
{canRead && <SortPicker />} {canRead && <SortPicker onChangeSort={handleChangeSort} />}
{canRead && <Filters />} {canRead && <Filters />}
</> </>
} }