saleor-dashboard/src/webhooks/components/WebhookEvents/WebhookEvents.tsx

99 lines
2.8 KiB
TypeScript
Raw Normal View History

2019-10-09 06:01:52 +00:00
import Card from "@material-ui/core/Card";
import CardContent from "@material-ui/core/CardContent";
2019-10-09 20:50:03 +00:00
import Typography from "@material-ui/core/Typography";
2019-10-09 06:01:52 +00:00
import CardTitle from "@saleor/components/CardTitle";
import ControlledCheckbox from "@saleor/components/ControlledCheckbox";
2019-10-10 11:40:31 +00:00
import Hr from "@saleor/components/Hr";
2019-10-11 13:35:33 +00:00
import { ChangeEvent } from "@saleor/hooks/useForm";
2019-10-16 12:03:14 +00:00
import { translatedWebhookEvents } from "@saleor/misc";
2019-10-11 13:35:33 +00:00
import { WebhookEventTypeEnum } from "@saleor/types/globalTypes";
2019-10-09 06:01:52 +00:00
import React from "react";
import { useIntl } from "react-intl";
interface WebhookEventsProps {
2019-10-10 11:40:31 +00:00
data: {
allEvents: boolean;
events: string[];
};
2019-10-09 06:01:52 +00:00
disabled: boolean;
onChange: (event: ChangeEvent, cb?: () => void) => void;
2019-10-09 06:01:52 +00:00
}
const WebhookEvents: React.StatelessComponent<WebhookEventsProps> = ({
data,
disabled,
2019-10-09 20:50:03 +00:00
onChange
2019-10-09 06:01:52 +00:00
}) => {
const intl = useIntl();
2019-10-09 20:50:03 +00:00
const eventsEnum = Object.values(WebhookEventTypeEnum);
2019-10-16 12:03:14 +00:00
const translatedEvents = translatedWebhookEvents(intl);
2019-10-09 20:50:03 +00:00
const handleAllEventsChange = (event: ChangeEvent) =>
onChange(event, () =>
onChange({
target: {
name: "events",
2019-10-16 12:03:14 +00:00
value: event.target.value ? WebhookEventTypeEnum.ANY_EVENTS : []
}
} as any)
);
2019-10-11 13:35:33 +00:00
const handleEventsChange = (event: ChangeEvent) => {
2019-10-10 11:40:31 +00:00
onChange({
target: {
name: "events",
value: event.target.value
? data.events.concat([event.target.name])
: data.events.filter(events => events !== event.target.name)
}
} as any);
2019-10-09 20:50:03 +00:00
};
2019-10-09 06:01:52 +00:00
return (
<Card>
<CardTitle
title={intl.formatMessage({
defaultMessage: "Events",
description: "section header"
})}
/>
2019-10-09 20:50:03 +00:00
<CardContent>
<Typography>
{intl.formatMessage({
defaultMessage:
"Expand or restrict webhooks permissions to register certain events in Saleor system.",
description: "webhook events"
})}
</Typography>
2019-10-10 11:40:31 +00:00
<ControlledCheckbox
checked={data.allEvents}
disabled={disabled}
2019-10-16 12:09:10 +00:00
label={translatedEvents.ANY_EVENTS}
2019-10-10 11:40:31 +00:00
name="allEvents"
onChange={handleAllEventsChange}
/>
{!data.allEvents && (
<>
<Hr />
{eventsEnum.slice(1).map(event => {
return (
<div key={event}>
<ControlledCheckbox
checked={data.events.includes(event)}
disabled={disabled}
2019-10-16 12:03:14 +00:00
label={translatedEvents[event]}
name={event}
onChange={handleEventsChange}
/>
</div>
);
})}
</>
)}
2019-10-09 20:50:03 +00:00
</CardContent>
2019-10-09 06:01:52 +00:00
</Card>
);
};
WebhookEvents.displayName = "WebhookEvents";
export default WebhookEvents;