2021-12-13 14:43:30 +00:00
|
|
|
import { MultiAutocompleteChoiceType } from "@saleor/components/MultiAutocompleteSelectField";
|
2022-08-02 12:50:37 +00:00
|
|
|
import PreviewPill from "@saleor/components/PreviewPill";
|
2021-12-13 14:43:30 +00:00
|
|
|
import {
|
2021-12-23 12:42:10 +00:00
|
|
|
WebhookEventTypeAsyncEnum,
|
2022-03-09 08:56:55 +00:00
|
|
|
WebhookEventTypeSyncEnum,
|
2022-06-21 09:36:55 +00:00
|
|
|
WebhookFragment,
|
2022-03-09 08:56:55 +00:00
|
|
|
} from "@saleor/graphql";
|
2022-08-02 12:50:37 +00:00
|
|
|
import React from "react";
|
2020-03-18 11:03:20 +00:00
|
|
|
|
2022-12-01 13:42:18 +00:00
|
|
|
export function isUnnamed(webhook: WebhookFragment | undefined): boolean {
|
|
|
|
return !webhook?.name;
|
2020-03-18 11:03:20 +00:00
|
|
|
}
|
2021-12-13 14:43:30 +00:00
|
|
|
|
2022-08-02 12:50:37 +00:00
|
|
|
type WebhookEventType = WebhookEventTypeSyncEnum | WebhookEventTypeAsyncEnum;
|
|
|
|
|
|
|
|
const isWebhookInPreview = (webhook: WebhookEventType) =>
|
|
|
|
([
|
|
|
|
WebhookEventTypeSyncEnum.CHECKOUT_CALCULATE_TAXES,
|
|
|
|
WebhookEventTypeSyncEnum.ORDER_CALCULATE_TAXES,
|
|
|
|
] as WebhookEventType[]).includes(webhook);
|
|
|
|
|
2022-11-02 12:31:17 +00:00
|
|
|
const isAsyncWebhookInPreview = (webhook: WebhookEventType) =>
|
|
|
|
([
|
|
|
|
WebhookEventTypeAsyncEnum.GIFT_CARD_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.ORDER_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.CUSTOMER_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.COLLECTION_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.PRODUCT_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.PRODUCT_VARIANT_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.CHECKOUT_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.FULFILLMENT_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.SHIPPING_ZONE_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.TRANSACTION_ITEM_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.WAREHOUSE_METADATA_UPDATED,
|
|
|
|
WebhookEventTypeAsyncEnum.VOUCHER_METADATA_UPDATED,
|
|
|
|
] as WebhookEventType[]).includes(webhook);
|
|
|
|
|
2021-12-13 14:43:30 +00:00
|
|
|
export function mapSyncEventsToChoices(
|
2022-06-21 09:36:55 +00:00
|
|
|
events: WebhookEventTypeSyncEnum[],
|
2021-12-13 14:43:30 +00:00
|
|
|
): MultiAutocompleteChoiceType[] {
|
|
|
|
return events.map(event => ({
|
|
|
|
label: event,
|
2022-06-21 09:36:55 +00:00
|
|
|
value: event,
|
2022-08-02 12:50:37 +00:00
|
|
|
badge: isWebhookInPreview(event) ? <PreviewPill /> : undefined,
|
2021-12-13 14:43:30 +00:00
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
export function mapAsyncEventsToChoices(
|
2021-12-23 12:42:10 +00:00
|
|
|
events: WebhookEventTypeAsyncEnum[],
|
2022-06-21 09:36:55 +00:00
|
|
|
selectedEvents: WebhookEventTypeAsyncEnum[],
|
2021-12-13 14:43:30 +00:00
|
|
|
): MultiAutocompleteChoiceType[] {
|
|
|
|
const isAnyAsyncEventSelected = selectedEvents.includes(
|
2022-06-21 09:36:55 +00:00
|
|
|
WebhookEventTypeAsyncEnum.ANY_EVENTS,
|
2021-12-13 14:43:30 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
return events.map(event => ({
|
|
|
|
label: event,
|
|
|
|
value: event,
|
2022-11-02 12:31:17 +00:00
|
|
|
badge: isAsyncWebhookInPreview(event) ? <PreviewPill /> : undefined,
|
2021-12-13 14:43:30 +00:00
|
|
|
disabled:
|
2022-06-21 09:36:55 +00:00
|
|
|
event !== WebhookEventTypeAsyncEnum.ANY_EVENTS && isAnyAsyncEventSelected,
|
2021-12-13 14:43:30 +00:00
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
export const filterSelectedAsyncEvents = (
|
2022-06-21 09:36:55 +00:00
|
|
|
asyncEvents: WebhookEventTypeAsyncEnum[],
|
2021-12-13 14:43:30 +00:00
|
|
|
) => {
|
|
|
|
const anyEvent = asyncEvents.find(
|
2022-06-21 09:36:55 +00:00
|
|
|
event => event === WebhookEventTypeAsyncEnum.ANY_EVENTS,
|
2021-12-13 14:43:30 +00:00
|
|
|
);
|
|
|
|
if (anyEvent) {
|
|
|
|
return [anyEvent];
|
|
|
|
}
|
|
|
|
return asyncEvents;
|
|
|
|
};
|