132 lines
3.7 KiB
JavaScript
Raw Normal View History

import React from 'react';
import { PageFooter } from 'strapi-helper-plugin';
import { generatePageFromStart, generateStartFromPage } from '../../utils';
import Filters from '../Filters';
import Flex from '../Flex';
import List from '../List';
import ListEmpty from '../ListEmpty';
import Padded from '../Padded';
import SelectAll from '../SelectAll';
import SortPicker from '../SortPicker';
import useModalContext from '../../hooks/useModalContext';
import Wrapper from './Wrapper';
2020-03-25 17:55:06 +01:00
import CardControl from '../CardControl';
const BrowseAssets = () => {
const {
count,
files,
goTo,
handleAllFilesSelection,
handleFileSelection,
2020-03-25 17:55:06 +01:00
handleGoToEditFile,
multiple,
params,
removeFilter,
selectedFiles,
setParam,
} = useModalContext();
const handleChangeParams = ({ target: { name, value } }) => {
setParam({ name, value });
};
const handleChangeListParams = ({ target: { name, value } }) => {
if (name.includes('_page')) {
handleChangeParams({
target: { name: '_start', value: generateStartFromPage(value, params._limit) },
});
} else {
handleChangeParams({ target: { name: '_limit', value } });
}
};
const handleDeleteFilter = index => {
removeFilter(index);
};
const handleGoToUpload = () => {
goTo('browse');
};
const limit = parseInt(params._limit, 10) || 10;
const start = parseInt(params._start, 10) || 0;
2020-03-25 17:55:06 +01:00
const handleListCardClick = id => {
handleFileSelection({
target: { name: parseInt(id, 10), value: selectedFiles.findIndex(file => file.id === id) },
});
};
const paginationParams = {
_limit: parseInt(params._limit, 10) || 10,
_page: generatePageFromStart(start, limit),
};
2020-03-24 10:31:40 +01:00
const hasSomeCheckboxSelected = files.some(file =>
selectedFiles.find(selectedFile => file.id === selectedFile.id)
);
const areAllCheckboxesSelected =
files.every(file => selectedFiles.find(selectedFile => file.id === selectedFile.id)) &&
hasSomeCheckboxSelected;
const canSelectFile = multiple === true || (selectedFiles.length < 1 && !multiple);
return (
<Wrapper top size="sm">
<Padded top bottom>
<Flex flexWrap="wrap">
{multiple && (
<Padded right size="sm">
<SelectAll
checked={areAllCheckboxesSelected}
onChange={handleAllFilesSelection}
someChecked={hasSomeCheckboxSelected && !areAllCheckboxesSelected}
/>
</Padded>
)}
2020-03-25 17:55:06 +01:00
<SortPicker onChange={handleChangeParams} value={params._sort} />
<Padded left size="sm" />
<Filters
filters={params.filters}
onChange={handleChangeParams}
onClick={handleDeleteFilter}
/>
</Flex>
</Padded>
{!files || files.length === 0 ? (
<ListEmpty numberOfRows={2} onClick={handleGoToUpload} />
) : (
<>
<List
canSelect={canSelectFile}
data={files}
onChange={handleFileSelection}
selectedItems={selectedFiles}
2020-03-25 17:55:06 +01:00
onCardClick={handleListCardClick}
renderCardControl={id => (
<CardControl
small
color="#9EA7B8"
type="pencil"
onClick={() => handleGoToEditFile(id)}
/>
)}
/>
<Padded left right>
<PageFooter
context={{ emitEvent: () => {} }}
count={count}
onChangeParams={handleChangeListParams}
params={paginationParams}
/>
</Padded>
</>
)}
</Wrapper>
);
};
export default BrowseAssets;