168 lines
4.2 KiB
JavaScript
Raw Normal View History

/**
2019-04-16 16:55:53 +02:00
*
* List
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { map, omitBy, size } from 'lodash';
2018-06-14 12:33:57 +02:00
import cn from 'classnames';
// Components from strapi-helper-plugin
2019-04-16 16:55:53 +02:00
import { Button, LoadingBar, LoadingIndicator } from 'strapi-helper-plugin';
2019-02-22 11:16:42 +01:00
import ListRow from '../ListRow';
import styles from './styles.scss';
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
return title;
2017-11-08 16:06:21 +01:00
}
case 'providers': {
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 }}
/>
);
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 }}
/>
);
2019-04-16 16:55:53 +02:00
return (
<div>
{enabledProviders}&nbsp;{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
}
default:
return '';
}
2017-11-08 16:06:21 +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
return (
<div className={styles.list}>
<div className={styles.flex}>
<div className={styles.titleContainer}>
2019-04-16 16:55:53 +02:00
{showLoaders ? (
<LoadingBar style={{ marginTop: '0' }} />
) : (
generateListTitle(data, settingType)
)}
</div>
<div className={styles.buttonContainer}>
{noButton ? (
''
) : (
<Button onClick={onButtonClick} secondaryHotlineAdd>
2019-04-16 16:55:53 +02:00
<FormattedMessage
id={`users-permissions.List.button.${settingType}`}
/>
</Button>
)}
</div>
</div>
2019-04-16 16:55:53 +02:00
<div
className={cn(
styles.ulContainer,
showLoaders && styles.loadingContainer,
showLoaders && settingType === 'roles' && styles.loadingContainerRole,
)}
>
{showLoaders ? (
<LoadingIndicator />
) : (
2018-06-14 12:33:57 +02:00
<ul className={noButton ? styles.listPadded : ''}>
{map(object, item => (
<ListRow
deleteData={deleteData}
item={item}
key={item.name}
settingType={settingType}
values={values}
/>
))}
</ul>
)}
</div>
</div>
);
}
List.defaultProps = {
noButton: false,
onButtonClick: () => {},
2018-06-14 12:33:57 +02:00
showLoaders: true,
};
2017-11-08 16:06:21 +01:00
List.propTypes = {
data: PropTypes.array.isRequired,
deleteData: PropTypes.func.isRequired,
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,
};
export default List;