mirror of
https://github.com/strapi/strapi.git
synced 2025-09-26 17:00:55 +00:00
ListView Select and unselect all
Signed-off-by: Ky <virginie.ky@gmail.com>
This commit is contained in:
parent
f9d924dd47
commit
3189cc656a
@ -1,13 +1,26 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import { Checkbox } from '@buffetjs/core';
|
import { Checkbox } from '@buffetjs/core';
|
||||||
import Wrapper from './Wrapper';
|
import Wrapper from './Wrapper';
|
||||||
|
|
||||||
const SelectAll = () => {
|
const SelectAll = ({ checked, onChange, someChecked }) => {
|
||||||
return (
|
return (
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
<Checkbox name="selectAll" />
|
<Checkbox name="selectAll" onChange={onChange} value={checked} someChecked={someChecked} />
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SelectAll.defaultProps = {
|
||||||
|
checked: false,
|
||||||
|
onChange: () => {},
|
||||||
|
someChecked: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
SelectAll.propTypes = {
|
||||||
|
checked: PropTypes.bool,
|
||||||
|
onChange: PropTypes.func,
|
||||||
|
someChecked: PropTypes.bool,
|
||||||
|
};
|
||||||
|
|
||||||
export default SelectAll;
|
export default SelectAll;
|
||||||
|
@ -139,6 +139,15 @@ const HomePage = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleSelectAll = () => {
|
||||||
|
const valueToSet = !areAllCheckboxesSelected;
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: 'TOGGLE_SELECT_ALL',
|
||||||
|
value: valueToSet,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const headerProps = {
|
const headerProps = {
|
||||||
title: {
|
title: {
|
||||||
label: pluginName,
|
label: pluginName,
|
||||||
@ -177,6 +186,9 @@ const HomePage = () => {
|
|||||||
_page: generatePageFromStart(start, limit),
|
_page: generatePageFromStart(start, limit),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const areAllCheckboxesSelected = data.length === dataToDelete.length;
|
||||||
|
const hasSomeCheckboxSelected = dataToDelete.length > 0;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Header {...headerProps} />
|
<Header {...headerProps} />
|
||||||
@ -189,7 +201,11 @@ const HomePage = () => {
|
|||||||
value={searchValue}
|
value={searchValue}
|
||||||
/>
|
/>
|
||||||
<ControlsWrapper>
|
<ControlsWrapper>
|
||||||
<SelectAll />
|
<SelectAll
|
||||||
|
onChange={handleSelectAll}
|
||||||
|
checked={areAllCheckboxesSelected}
|
||||||
|
someChecked={hasSomeCheckboxSelected && !areAllCheckboxesSelected}
|
||||||
|
/>
|
||||||
<SortPicker onChange={handleChangeParams} value={query.get('_sort') || null} />
|
<SortPicker onChange={handleChangeParams} value={query.get('_sort') || null} />
|
||||||
<Filters
|
<Filters
|
||||||
onChange={handleChangeParams}
|
onChange={handleChangeParams}
|
||||||
|
@ -1,7 +1,40 @@
|
|||||||
import { fromJS } from 'immutable';
|
import { fromJS } from 'immutable';
|
||||||
|
|
||||||
const initialState = fromJS({
|
const initialState = fromJS({
|
||||||
data: [],
|
areAllCheckboxesSelected: false,
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
name: 'Chat paysage',
|
||||||
|
size: 17329,
|
||||||
|
type: 'image/png',
|
||||||
|
url:
|
||||||
|
'https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '2',
|
||||||
|
name: 'Chat portrait',
|
||||||
|
size: 17329,
|
||||||
|
type: 'image/png',
|
||||||
|
url: 'https://emiliedammedumoulin.com/wp-content/uploads/2018/07/contact-chat-accueil.jpg',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '3',
|
||||||
|
name: 'Gif',
|
||||||
|
size: 17329,
|
||||||
|
type: 'image/png',
|
||||||
|
url:
|
||||||
|
'https://user-images.githubusercontent.com/879561/51321923-54024f00-1a64-11e9-8c37-3308350a59c4.gif',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '4',
|
||||||
|
name: 'Paysage',
|
||||||
|
size: 17329,
|
||||||
|
type: 'image/png',
|
||||||
|
url:
|
||||||
|
'https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSyHCXO8D0QQrPDuGstvH9dEwhhB7Qv-3mDMWGpLExyY1CF84cL',
|
||||||
|
},
|
||||||
|
],
|
||||||
dataToDelete: [],
|
dataToDelete: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -21,6 +54,15 @@ const reducer = (state, action) => {
|
|||||||
|
|
||||||
return state.removeIn(['dataToDelete', index]);
|
return state.removeIn(['dataToDelete', index]);
|
||||||
}
|
}
|
||||||
|
case 'TOGGLE_SELECT_ALL': {
|
||||||
|
const { value } = action;
|
||||||
|
|
||||||
|
if (!value) {
|
||||||
|
return state.update('dataToDelete', () => []);
|
||||||
|
}
|
||||||
|
|
||||||
|
return state.update('dataToDelete', () => state.get('data').map(item => item.get('id')));
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -16789,13 +16789,6 @@ stream-shift@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
|
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
|
||||||
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
|
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
|
||||||
|
|
||||||
stream-to-array@^2.3.0:
|
|
||||||
version "2.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353"
|
|
||||||
integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=
|
|
||||||
dependencies:
|
|
||||||
any-promise "^1.1.0"
|
|
||||||
|
|
||||||
stream-to-observable@^0.1.0:
|
stream-to-observable@^0.1.0:
|
||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"
|
resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user