CM display fields

This commit is contained in:
Virginie Ky 2019-10-16 19:59:00 +02:00 committed by Alexandre Bodin
parent 8ba7bee43d
commit f47ef79e53
5 changed files with 115 additions and 81 deletions

View File

@ -1,48 +1,49 @@
import styled from 'styled-components'; import styled from 'styled-components';
import PropTypes from 'prop-types';
const centered = `
display: flex;
flex-direction: column;
justify-content: center;
height: 28px;
`;
const Wrapper = styled.div` const Wrapper = styled.div`
display: table-cell;
height: 30px; height: 30px;
padding: 0 5px; padding: 0 10px 0 0;
margin-right: 4px; margin-right: 4px;
flex-basis: calc(100% / ${props => props.count});
flex-shrink: 1;
min-width: 130px;
.sub_wrapper { .sub_wrapper {
display: flex; position: relative;
height: 30px; height: 30px;
padding-left: 10px;
line-height: 30px; line-height: 30px;
background: #fafafb; background: #fafafb;
border: 1px solid #e3e9f3; border: 1px solid #e3e9f3;
border-radius: 2px; border-radius: 2px;
.name { .name {
flex-grow: 2; position: relative;
padding-left: 38px;
padding-right: 38px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
word-break: nowrap; white-space: nowrap;
cursor: pointer; cursor: pointer;
} }
.grab { .grab {
${centered};
margin-right: 10px; margin-right: 10px;
border-right: 1px solid #e9eaeb; border-right: 1px solid #e9eaeb;
position: absolute;
top: 0;
left: 0;
padding-left: 10px;
} }
.remove { .remove {
${centered};
width: 30px; width: 30px;
text-align: center; text-align: center;
background-color: #e9eaeb; background-color: #e9eaeb;
cursor: pointer; cursor: pointer;
position: absolute;
top: 0;
right: 0;
svg { svg {
align-self: center; align-self: center;
} }
@ -50,4 +51,12 @@ const Wrapper = styled.div`
} }
`; `;
Wrapper.defaultProps = {
count: 1,
};
Wrapper.propTypes = {
count: PropTypes.number,
};
export default Wrapper; export default Wrapper;

View File

@ -4,9 +4,9 @@ import GrabIcon from '../../icons/GrabIcon';
import RemoveIcon from '../../icons/RemoveIcon'; import RemoveIcon from '../../icons/RemoveIcon';
import Wrapper from './Wrapper'; import Wrapper from './Wrapper';
const DraggedField = ({ name, onRemove }) => { const DraggedField = ({ count, name, onRemove }) => {
return ( return (
<Wrapper> <Wrapper count={count}>
<div className="sub_wrapper"> <div className="sub_wrapper">
<div className="grab"> <div className="grab">
<GrabIcon style={{ marginRight: 10, cursor: 'move' }} /> <GrabIcon style={{ marginRight: 10, cursor: 'move' }} />
@ -20,7 +20,12 @@ const DraggedField = ({ name, onRemove }) => {
); );
}; };
DraggedField.defaultProps = {
count: 1,
};
DraggedField.propTypes = { DraggedField.propTypes = {
count: PropTypes.number,
name: PropTypes.string.isRequired, name: PropTypes.string.isRequired,
onRemove: PropTypes.func.isRequired, onRemove: PropTypes.func.isRequired,
}; };

View File

@ -1,12 +1,6 @@
import styled from 'styled-components'; import styled from 'styled-components';
const SortWrapper = styled.div` const SortWrapper = styled.div`
margin-top: 7px;
margin-bottom: 10px;
padding-top: 11px;
border: 1px dashed #e3e9f3;
border-radius: 2px;
// &:after { // &:after {
// content: ''; // content: '';
// clear: both; // clear: both;

View File

@ -0,0 +1,21 @@
import styled from 'styled-components';
const DragWrapper = styled.div`
position: relative;
padding: 11px 40px 11px 11px;
margin-top: 7px;
margin-bottom: 10px;
border: 1px dashed #e3e9f3;
border-radius: 2px;
> div,
> div > div {
margin: 0;
padding: 0;
}
> div > div {
overflow-x: auto;
overflow-y: hidden;
}
`;
export default DragWrapper;

View File

@ -15,6 +15,7 @@ import SettingsViewWrapper from '../../components/SettingsViewWrapper';
import SortWrapper from '../../components/SortWrapper'; import SortWrapper from '../../components/SortWrapper';
import MenuDropdown from './MenuDropdown'; import MenuDropdown from './MenuDropdown';
import DropdownButton from './DropdownButton'; import DropdownButton from './DropdownButton';
import DragWrapper from './DragWrapper';
import Toggle from './Toggle'; import Toggle from './Toggle';
import reducer, { initialState } from './reducer'; import reducer, { initialState } from './reducer';
import forms from './forms.json'; import forms from './forms.json';
@ -187,67 +188,71 @@ const ListSettingsView = ({
}, },
}} }}
> >
<div className="row"> <DragWrapper>
<div className="col-12"> <div className="row">
<SortWrapper <div className="col-12">
style={{ <SortWrapper
display: 'table', style={{
paddingLeft: 5, display: 'flex',
paddingRight: 5, width: '100%',
paddingBottom: 11,
width: '100%',
overflow: 'auto',
}}
>
{getListDisplayedFields().map((item, index) => {
return (
<DraggedField
key={item}
name={item}
onRemove={() => {
if (getListDisplayedFields().length === 1) {
strapi.notification.info(
`${pluginId}.notification.info.minimumFields`
);
} else {
dispatch({
type: 'REMOVE_FIELD',
index,
});
}
}}
/>
);
})}
<DropdownButton
isOpen={isOpen}
toggle={() => {
if (getListRemainingFields().length > 0) {
setIsOpen(prevState => !prevState);
}
}} }}
direction="down"
> >
<Toggle disabled={getListRemainingFields().length === 0} /> {getListDisplayedFields().map((item, index) => {
<MenuDropdown> return (
{getListRemainingFields().map(item => ( <DraggedField
<DropdownItem count={getListDisplayedFields().length}
key={item} key={item}
onClick={() => { name={item}
dispatch({ onRemove={() => {
type: 'ADD_FIELD', if (getListDisplayedFields().length === 1) {
item, strapi.notification.info(
}); `${pluginId}.notification.info.minimumFields`
);
} else {
dispatch({
type: 'REMOVE_FIELD',
index,
});
}
}} }}
> />
{item} );
</DropdownItem> })}
))} </SortWrapper>
</MenuDropdown> </div>
</DropdownButton>
</SortWrapper>
</div> </div>
</div> <DropdownButton
isOpen={isOpen}
toggle={() => {
if (getListRemainingFields().length > 0) {
setIsOpen(prevState => !prevState);
}
}}
direction="down"
style={{
position: 'absolute',
top: 11,
right: 10,
}}
>
<Toggle disabled={getListRemainingFields().length === 0} />
<MenuDropdown>
{getListRemainingFields().map(item => (
<DropdownItem
key={item}
onClick={() => {
dispatch({
type: 'ADD_FIELD',
item,
});
}}
>
{item}
</DropdownItem>
))}
</MenuDropdown>
</DropdownButton>
</DragWrapper>
</SettingsViewWrapper> </SettingsViewWrapper>
<PopUpWarning <PopUpWarning
isOpen={showWarningCancel} isOpen={showWarningCancel}