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

97 lines
2.7 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-09 06:01:52 +00:00
import React from "react";
import { useIntl } from "react-intl";
2019-10-09 20:50:03 +00:00
import { WebhookEventTypeEnum } from "../../../types/globalTypes";
2019-10-09 06:01:52 +00:00
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;
2019-10-10 11:40:31 +00:00
onChange: (event: React.ChangeEvent<any>, 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-10 11:40:31 +00:00
const handleAllEventsChange = (event: React.ChangeEvent<any>) =>
onChange(event, () =>
onChange({
target: {
name: "events",
2019-10-10 14:19:06 +00:00
value: WebhookEventTypeEnum.ALL_EVENTS
2019-10-10 11:40:31 +00:00
}
} as any)
);
const handleEventsChange = (event: React.ChangeEvent<any>) => {
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}
label={intl.formatMessage({
defaultMessage: "All events",
description: "checkbox label"
})}
name="allEvents"
onChange={handleAllEventsChange}
/>
<Hr />
{!data.allEvents &&
eventsEnum.map((event, index) => {
if (index !== 0) {
return (
<div key={index}>
<ControlledCheckbox
checked={data.events.includes(event)}
disabled={disabled}
label={event.replace(/\./, "")}
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;