2020-08-04 15:59:19 +02:00
|
|
|
import React, { useEffect, useMemo, useReducer } from 'react';
|
2020-08-04 14:33:43 +02:00
|
|
|
import { useIntl } from 'react-intl';
|
2020-08-04 15:59:19 +02:00
|
|
|
import { Header, List } from '@buffetjs/custom';
|
|
|
|
import { Text } from '@buffetjs/core';
|
|
|
|
import { Pencil } from '@buffetjs/icons';
|
|
|
|
import { SettingsPageTitle, useUserPermissions, request } from 'strapi-helper-plugin';
|
|
|
|
import pluginPermissions from '../../permissions';
|
|
|
|
import { getRequestURL, getTrad } from '../../utils';
|
|
|
|
import ListBaselineAlignment from '../../components/ListBaselineAlignment';
|
|
|
|
import ListRow from '../../components/ListRow';
|
2020-08-04 16:27:07 +02:00
|
|
|
import createProvidersArray from './utils/createProvidersArray';
|
2020-08-04 15:59:19 +02:00
|
|
|
import reducer, { initialState } from './reducer';
|
2020-08-03 16:49:40 +02:00
|
|
|
|
|
|
|
const ProvidersPage = () => {
|
2020-08-04 14:33:43 +02:00
|
|
|
const { formatMessage } = useIntl();
|
|
|
|
const pageTitle = formatMessage({ id: getTrad('HeaderNav.link.providers') });
|
2020-08-04 15:59:19 +02:00
|
|
|
const updatePermissions = useMemo(() => {
|
|
|
|
return { update: pluginPermissions.updateProviders };
|
2020-08-04 16:35:16 +02:00
|
|
|
}, []);
|
2020-08-04 15:59:19 +02:00
|
|
|
const {
|
|
|
|
isLoading: isLoadingForPermissions,
|
|
|
|
allowedActions: { canUpdate },
|
|
|
|
} = useUserPermissions(updatePermissions);
|
2020-08-04 16:27:07 +02:00
|
|
|
const [{ isLoading, modifiedData }, dispatch] = useReducer(reducer, initialState);
|
|
|
|
const providers = useMemo(() => createProvidersArray(modifiedData), [modifiedData]);
|
2020-08-04 15:59:19 +02:00
|
|
|
const enabledProvidersCount = useMemo(
|
|
|
|
() => providers.filter(provider => provider.enabled).length,
|
|
|
|
[providers]
|
|
|
|
);
|
|
|
|
const disabledProvidersCount = useMemo(() => {
|
|
|
|
return providers.length - enabledProvidersCount;
|
|
|
|
}, [providers, enabledProvidersCount]);
|
|
|
|
|
|
|
|
const listTitle = useMemo(() => {
|
|
|
|
const enabledMessage = formatMessage(
|
|
|
|
{
|
|
|
|
id: getTrad(
|
|
|
|
`List.title.providers.enabled.${enabledProvidersCount > 1 ? 'plural' : 'singular'}`
|
|
|
|
),
|
|
|
|
},
|
|
|
|
{ number: enabledProvidersCount }
|
|
|
|
);
|
|
|
|
const disabledMessage = formatMessage(
|
|
|
|
{
|
|
|
|
id: getTrad(
|
|
|
|
`List.title.providers.disabled.${disabledProvidersCount > 1 ? 'plural' : 'singular'}`
|
|
|
|
),
|
|
|
|
},
|
|
|
|
{ number: disabledProvidersCount }
|
|
|
|
);
|
|
|
|
|
|
|
|
return `${enabledMessage} ${disabledMessage}`;
|
2020-08-04 16:35:16 +02:00
|
|
|
}, [formatMessage, enabledProvidersCount, disabledProvidersCount]);
|
2020-08-04 15:59:19 +02:00
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
const getData = async () => {
|
|
|
|
try {
|
|
|
|
dispatch({
|
|
|
|
type: 'GET_DATA',
|
|
|
|
});
|
|
|
|
|
|
|
|
const data = await request(getRequestURL('providers'), { method: 'GET' });
|
|
|
|
|
|
|
|
dispatch({
|
|
|
|
type: 'GET_DATA_SUCCEEDED',
|
|
|
|
data,
|
|
|
|
});
|
2020-08-04 16:27:07 +02:00
|
|
|
|
|
|
|
console.log({ data });
|
2020-08-04 15:59:19 +02:00
|
|
|
} catch (err) {
|
|
|
|
dispatch({
|
|
|
|
type: 'GET_DATA_ERROR',
|
|
|
|
});
|
|
|
|
console.error(err);
|
|
|
|
strapi.notification.error('notification.error');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
if (!isLoadingForPermissions) {
|
|
|
|
getData();
|
|
|
|
}
|
|
|
|
}, [isLoadingForPermissions]);
|
2020-08-04 14:33:43 +02:00
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<SettingsPageTitle name={pageTitle} />
|
2020-08-04 15:59:19 +02:00
|
|
|
<div>
|
|
|
|
<Header title={{ label: pageTitle }} isLoading={isLoadingForPermissions || isLoading} />
|
|
|
|
<ListBaselineAlignment />
|
|
|
|
<List
|
|
|
|
title={listTitle}
|
|
|
|
items={providers}
|
2020-08-04 17:48:23 +02:00
|
|
|
isLoading={isLoadingForPermissions || isLoading}
|
2020-08-04 15:59:19 +02:00
|
|
|
customRowComponent={provider => (
|
|
|
|
<ListRow
|
|
|
|
{...provider}
|
|
|
|
onClick={() => {
|
|
|
|
console.log(`Will edit ${provider.name}`);
|
|
|
|
}}
|
|
|
|
links={[
|
|
|
|
{
|
|
|
|
icon: canUpdate ? <Pencil fill="#0e1622" /> : null,
|
|
|
|
onClick: () => {
|
|
|
|
console.log(`Will edit ${provider.name}`);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]}
|
|
|
|
>
|
|
|
|
<td key="enabled">
|
|
|
|
<Text
|
|
|
|
fontWeight="semiBold"
|
|
|
|
lineHeight="18px"
|
|
|
|
color={provider.enabled ? 'green' : 'lightOrange'}
|
|
|
|
>
|
|
|
|
{provider.enabled ? 'Enabled' : 'Disabled'}
|
|
|
|
</Text>
|
|
|
|
</td>
|
|
|
|
</ListRow>
|
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</div>
|
2020-08-04 14:33:43 +02:00
|
|
|
</>
|
|
|
|
);
|
2020-08-03 16:49:40 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
export default ProvidersPage;
|