mirror of
https://github.com/strapi/strapi.git
synced 2025-09-22 14:59:07 +00:00
Merge pull request #11451 from strapi/cm/ml-sort
[v4] Add sort to ML compo in CM
This commit is contained in:
commit
97e556ff56
@ -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,
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
@ -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,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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 />}
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user