104 lines
2.5 KiB
JavaScript
Raw Normal View History

import React from 'react';
2020-01-06 01:52:26 +01:00
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
2020-01-06 01:52:26 +01:00
import Wrapper from './Wrapper';
import EventRow from './EventRow';
const EventInput = ({ onChange, name: inputName, value: inputValue }) => {
2020-01-06 01:52:26 +01:00
const headersName = [
'Settings.webhooks.events.create',
'Settings.webhooks.events.edit',
'Settings.webhooks.events.delete',
2020-01-06 01:52:26 +01:00
];
const events = {
2020-01-06 16:01:42 +01:00
entry: ['entry.create', 'entry.update', 'entry.delete'],
media: ['media.create', 'media.update', 'media.delete'],
2020-01-06 01:52:26 +01:00
};
// Media update disabled for now - until the media libray is ready
const disabledEvents = ['media.update'];
2020-01-15 17:27:41 +01:00
const formatValue = inputValue.reduce((acc, curr) => {
const key = curr.split('.')[0];
2020-01-15 17:27:41 +01:00
if (!acc[key]) {
acc[key] = [];
2020-01-06 01:52:26 +01:00
}
2020-01-15 17:27:41 +01:00
acc[key].push(curr);
return acc;
}, {});
2020-01-06 01:52:26 +01:00
2020-01-10 15:17:36 +01:00
const handleChange = ({ target: { name, value } }) => {
2020-01-15 17:27:41 +01:00
let set = new Set(inputValue);
2020-01-15 17:27:41 +01:00
if (value) {
set.add(name);
} else {
set.delete(name);
}
onChange({ target: { name: inputName, value: Array.from(set) } });
2020-01-06 01:52:26 +01:00
};
const handleChangeAll = ({ target: { name, value } }) => {
2020-01-15 17:27:41 +01:00
let set = new Set(inputValue);
2020-01-15 17:27:41 +01:00
if (value) {
events[name].forEach(event => {
if (!disabledEvents.includes(event)) {
set.add(event);
}
});
2020-01-15 17:27:41 +01:00
} else {
events[name].forEach(event => set.delete(event));
2020-01-15 17:27:41 +01:00
}
onChange({ target: { name: inputName, value: Array.from(set) } });
2020-01-06 01:52:26 +01:00
};
return (
<Wrapper>
<table>
<thead>
<tr>
<td />
2020-01-06 01:52:26 +01:00
{headersName.map(header => {
return (
<td key={header}>
<FormattedMessage id={header} defaultMessage={header} />
</td>
);
2020-01-06 01:52:26 +01:00
})}
</tr>
</thead>
<tbody>
{Object.keys(events).map(event => {
return (
<EventRow
disabledEvents={disabledEvents}
2020-01-06 01:52:26 +01:00
key={event}
name={event}
events={events[event]}
2020-01-15 17:27:41 +01:00
inputValue={formatValue[event]}
2020-01-06 01:52:26 +01:00
handleChange={handleChange}
handleChangeAll={handleChangeAll}
/>
);
})}
</tbody>
</table>
</Wrapper>
);
};
EventInput.defaultProps = {};
2020-01-06 01:52:26 +01:00
EventInput.propTypes = {
name: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
value: PropTypes.array.isRequired,
2020-01-06 01:52:26 +01:00
};
export default EventInput;