2017-11-06 17:03:20 +01:00
|
|
|
/**
|
2019-04-16 16:55:53 +02:00
|
|
|
*
|
|
|
|
* List
|
|
|
|
*
|
|
|
|
*/
|
2017-11-06 17:03:20 +01:00
|
|
|
|
|
|
|
import React from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { FormattedMessage } from 'react-intl';
|
2018-01-26 17:31:52 +01:00
|
|
|
import { map, omitBy, size } from 'lodash';
|
2018-06-14 12:33:57 +02:00
|
|
|
|
2019-04-16 16:55:53 +02:00
|
|
|
import { Button, LoadingBar, LoadingIndicator } from 'strapi-helper-plugin';
|
2019-09-18 17:39:54 +02:00
|
|
|
import { Flex, ListWrapper, Title, Wrapper } from './Components';
|
2017-11-06 17:03:20 +01:00
|
|
|
|
2019-02-22 11:16:42 +01:00
|
|
|
import ListRow from '../ListRow';
|
2017-11-06 17:03:20 +01:00
|
|
|
|
|
|
|
const generateListTitle = (data, settingType) => {
|
|
|
|
switch (settingType) {
|
2017-11-08 16:06:21 +01:00
|
|
|
case 'roles': {
|
2019-04-16 16:55:53 +02:00
|
|
|
const title =
|
|
|
|
size(data) < 2 ? (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.roles.singular"
|
|
|
|
values={{ number: size(data) }}
|
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.roles.plural"
|
|
|
|
values={{ number: size(data) }}
|
|
|
|
/>
|
|
|
|
);
|
2017-11-08 16:06:21 +01:00
|
|
|
|
2017-11-06 17:03:20 +01:00
|
|
|
return title;
|
2017-11-08 16:06:21 +01:00
|
|
|
}
|
|
|
|
case 'providers': {
|
2017-11-06 17:03:20 +01:00
|
|
|
const enabledProvidersSize = data.filter(o => o.enabled).length;
|
|
|
|
|
2019-04-16 16:55:53 +02:00
|
|
|
const enabledProviders =
|
|
|
|
enabledProvidersSize > 1 ? (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.providers.enabled.plural"
|
|
|
|
values={{ number: enabledProvidersSize }}
|
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.providers.enabled.singular"
|
|
|
|
values={{ number: enabledProvidersSize }}
|
|
|
|
/>
|
|
|
|
);
|
2017-11-06 17:03:20 +01:00
|
|
|
|
2019-04-16 16:55:53 +02:00
|
|
|
const disabledProviders =
|
|
|
|
size(data) - enabledProvidersSize > 1 ? (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.providers.disabled.plural"
|
|
|
|
values={{ number: size(data) - enabledProvidersSize }}
|
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.providers.disabled.singular"
|
|
|
|
values={{ number: size(data) - enabledProvidersSize }}
|
|
|
|
/>
|
|
|
|
);
|
2017-11-06 17:03:20 +01:00
|
|
|
|
2019-04-16 16:55:53 +02:00
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
{enabledProviders} {disabledProviders}
|
|
|
|
</div>
|
|
|
|
);
|
2017-11-08 16:06:21 +01:00
|
|
|
}
|
|
|
|
case 'email-templates': {
|
2019-04-16 16:55:53 +02:00
|
|
|
return size(data) > 1 ? (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.emailTemplates.plural"
|
|
|
|
values={{ number: size(data) }}
|
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
<FormattedMessage
|
|
|
|
id="users-permissions.List.title.emailTemplates.singular"
|
|
|
|
values={{ number: size(data) }}
|
|
|
|
/>
|
|
|
|
);
|
2017-11-08 16:06:21 +01:00
|
|
|
}
|
2017-11-06 17:03:20 +01:00
|
|
|
default:
|
|
|
|
return '';
|
|
|
|
}
|
2017-11-08 16:06:21 +01:00
|
|
|
};
|
2017-11-06 17:03:20 +01:00
|
|
|
|
2019-04-16 16:55:53 +02:00
|
|
|
function List({
|
|
|
|
data,
|
|
|
|
deleteData,
|
|
|
|
noButton,
|
|
|
|
onButtonClick,
|
|
|
|
settingType,
|
|
|
|
showLoaders,
|
|
|
|
values,
|
|
|
|
}) {
|
|
|
|
const object = omitBy(data, v => v.name === 'server'); // Remove the server key when displaying providers
|
2018-01-26 17:31:52 +01:00
|
|
|
|
2017-11-06 17:03:20 +01:00
|
|
|
return (
|
2019-09-13 15:17:24 +02:00
|
|
|
<Wrapper>
|
|
|
|
<Flex>
|
|
|
|
<Title>
|
2019-04-16 16:55:53 +02:00
|
|
|
{showLoaders ? (
|
|
|
|
<LoadingBar style={{ marginTop: '0' }} />
|
|
|
|
) : (
|
|
|
|
generateListTitle(data, settingType)
|
|
|
|
)}
|
2019-09-13 15:17:24 +02:00
|
|
|
</Title>
|
|
|
|
<div>
|
2017-11-06 17:03:20 +01:00
|
|
|
{noButton ? (
|
|
|
|
''
|
|
|
|
) : (
|
|
|
|
<Button onClick={onButtonClick} secondaryHotlineAdd>
|
2019-04-16 16:55:53 +02:00
|
|
|
<FormattedMessage
|
|
|
|
id={`users-permissions.List.button.${settingType}`}
|
|
|
|
/>
|
2017-11-06 17:03:20 +01:00
|
|
|
</Button>
|
|
|
|
)}
|
|
|
|
</div>
|
2019-09-13 15:17:24 +02:00
|
|
|
</Flex>
|
|
|
|
|
|
|
|
<ListWrapper
|
|
|
|
className={`${showLoaders ? 'loading-container' : ''}${
|
|
|
|
showLoaders && settingType === 'roles-container' ? ' role' : ''
|
|
|
|
}`}
|
2019-04-16 16:55:53 +02:00
|
|
|
>
|
|
|
|
{showLoaders ? (
|
|
|
|
<LoadingIndicator />
|
|
|
|
) : (
|
2019-09-13 15:17:24 +02:00
|
|
|
<ul className={noButton ? 'padded-list' : ''}>
|
2018-06-14 12:33:57 +02:00
|
|
|
{map(object, item => (
|
|
|
|
<ListRow
|
|
|
|
deleteData={deleteData}
|
|
|
|
item={item}
|
|
|
|
key={item.name}
|
|
|
|
settingType={settingType}
|
|
|
|
values={values}
|
|
|
|
/>
|
|
|
|
))}
|
|
|
|
</ul>
|
|
|
|
)}
|
2019-09-13 15:17:24 +02:00
|
|
|
</ListWrapper>
|
|
|
|
</Wrapper>
|
2017-11-06 17:03:20 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
List.defaultProps = {
|
|
|
|
noButton: false,
|
|
|
|
onButtonClick: () => {},
|
2018-06-14 12:33:57 +02:00
|
|
|
showLoaders: true,
|
2017-11-06 17:03:20 +01:00
|
|
|
};
|
|
|
|
|
2017-11-08 16:06:21 +01:00
|
|
|
List.propTypes = {
|
|
|
|
data: PropTypes.array.isRequired,
|
2017-11-07 14:32:31 +01:00
|
|
|
deleteData: PropTypes.func.isRequired,
|
2017-11-06 17:03:20 +01:00
|
|
|
noButton: PropTypes.bool,
|
|
|
|
onButtonClick: PropTypes.func,
|
2017-11-08 16:06:21 +01:00
|
|
|
settingType: PropTypes.string.isRequired,
|
2018-06-14 12:33:57 +02:00
|
|
|
showLoaders: PropTypes.bool,
|
2018-01-22 11:00:41 +01:00
|
|
|
values: PropTypes.object.isRequired,
|
2017-11-06 17:03:20 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
export default List;
|