2020-01-17 17:20:27 +01:00
|
|
|
import React, { useEffect, useRef } from 'react';
|
2020-01-06 01:52:26 +01:00
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
import { useGlobalContext } from 'strapi-helper-plugin';
|
|
|
|
|
|
|
|
|
|
import Wrapper from './Wrapper';
|
|
|
|
|
import EventRow from './EventRow';
|
|
|
|
|
|
2020-01-17 13:37:21 +01:00
|
|
|
const EventInput = ({
|
|
|
|
|
onBlur,
|
|
|
|
|
onChange,
|
|
|
|
|
name: inputName,
|
|
|
|
|
value: inputValue,
|
|
|
|
|
}) => {
|
2020-01-06 01:52:26 +01:00
|
|
|
const { formatMessage } = useGlobalContext();
|
2020-01-17 17:20:27 +01:00
|
|
|
const onBlurRef = useRef();
|
|
|
|
|
onBlurRef.current = onBlur;
|
2020-01-06 01:52:26 +01:00
|
|
|
|
2020-01-17 13:37:21 +01:00
|
|
|
useEffect(() => {
|
2020-01-17 17:20:27 +01:00
|
|
|
onBlurRef.current();
|
|
|
|
|
}, [onBlurRef, inputValue]);
|
2020-01-17 13:37:21 +01:00
|
|
|
|
2020-01-06 01:52:26 +01:00
|
|
|
const headersName = [
|
|
|
|
|
formatMessage({ id: `Settings.webhooks.events.create` }),
|
|
|
|
|
formatMessage({ id: `Settings.webhooks.events.edit` }),
|
|
|
|
|
formatMessage({ id: `Settings.webhooks.events.delete` }),
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
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
|
|
|
};
|
|
|
|
|
|
2020-01-15 17:27:41 +01:00
|
|
|
const formatValue = inputValue.reduce((acc, curr) => {
|
|
|
|
|
const key = curr.split('.')[0];
|
|
|
|
|
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);
|
|
|
|
|
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);
|
|
|
|
|
if (value) {
|
|
|
|
|
events[name].map(event => set.add(event));
|
|
|
|
|
} else {
|
|
|
|
|
events[name].map(event => set.delete(event));
|
|
|
|
|
}
|
|
|
|
|
onChange({ target: { name: inputName, value: Array.from(set) } });
|
2020-01-06 01:52:26 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Wrapper>
|
|
|
|
|
<table>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<td></td>
|
|
|
|
|
{headersName.map(header => {
|
|
|
|
|
return <td key={header}>{header}</td>;
|
|
|
|
|
})}
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
{Object.keys(events).map(event => {
|
|
|
|
|
return (
|
|
|
|
|
<EventRow
|
|
|
|
|
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>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 13:37:21 +01:00
|
|
|
EventInput.defaultProps = {
|
|
|
|
|
onBlur: () => {},
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-06 01:52:26 +01:00
|
|
|
EventInput.propTypes = {
|
|
|
|
|
name: PropTypes.string.isRequired,
|
2020-01-17 13:37:21 +01:00
|
|
|
onBlur: PropTypes.func,
|
2020-01-06 01:52:26 +01:00
|
|
|
onChange: PropTypes.func.isRequired,
|
|
|
|
|
value: PropTypes.array,
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 17:20:27 +01:00
|
|
|
export default React.memo(EventInput);
|