saleor-dashboard/src/webhooks/utils.tsx

76 lines
2.5 KiB
TypeScript
Raw Normal View History

import { MultiAutocompleteChoiceType } from "@saleor/components/MultiAutocompleteSelectField";
import PreviewPill from "@saleor/components/PreviewPill";
import {
WebhookEventTypeAsyncEnum,
Use graphql-codegen (#1874) * Use generated hooks in apps * Remove unused files * Use proper types in apps * Use generated hooks in attributes * Use generated hooks in auth module * Use generated hooks in categories * Use generated hooks in channels * Use generated types in collections * Remove legacy types from background tasks * Use generated hooks in customers * Use generated hooks in discounts * Use generated hook in file upload * Use generated types in gift cards * Use generated types in home * Use generated hooks in navigation * Use generated hooks in orders * Use generated hooks in pages * Use generated hooks in page types * Use generated hooks in permission groups * Use generated hooks in plugins * Use generated hooks in products * Use fragment to mark product variants * Improve code a bit * Use generated hooks in page types * Use generated types in searches * Use generated hooks in shipping * Use generated hooks in site settings * Use generated hooks in staff members * Use generated hooks in taxes * Place all gql generated files in one directory * Use generated hooks in translations * Use global types from new generated module * Use generated hooks in warehouses * Use generated hooks in webhooks * Use generated fragment types * Unclutter types * Remove hoc components * Split hooks and types * Fetch introspection file * Delete obsolete schema file * Fix rebase artifacts * Fix autoreplace * Fix auth provider tests * Fix urls * Remove leftover types * Fix rebase artifacts
2022-03-09 08:56:55 +00:00
WebhookEventTypeSyncEnum,
WebhookFragment,
Use graphql-codegen (#1874) * Use generated hooks in apps * Remove unused files * Use proper types in apps * Use generated hooks in attributes * Use generated hooks in auth module * Use generated hooks in categories * Use generated hooks in channels * Use generated types in collections * Remove legacy types from background tasks * Use generated hooks in customers * Use generated hooks in discounts * Use generated hook in file upload * Use generated types in gift cards * Use generated types in home * Use generated hooks in navigation * Use generated hooks in orders * Use generated hooks in pages * Use generated hooks in page types * Use generated hooks in permission groups * Use generated hooks in plugins * Use generated hooks in products * Use fragment to mark product variants * Improve code a bit * Use generated hooks in page types * Use generated types in searches * Use generated hooks in shipping * Use generated hooks in site settings * Use generated hooks in staff members * Use generated hooks in taxes * Place all gql generated files in one directory * Use generated hooks in translations * Use global types from new generated module * Use generated hooks in warehouses * Use generated hooks in webhooks * Use generated fragment types * Unclutter types * Remove hoc components * Split hooks and types * Fetch introspection file * Delete obsolete schema file * Fix rebase artifacts * Fix autoreplace * Fix auth provider tests * Fix urls * Remove leftover types * Fix rebase artifacts
2022-03-09 08:56:55 +00:00
} from "@saleor/graphql";
import React from "react";
2020-03-18 11:03:20 +00:00
export function isUnnamed(webhook: WebhookFragment | undefined): boolean {
return !webhook?.name;
2020-03-18 11:03:20 +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);
export function mapSyncEventsToChoices(
events: WebhookEventTypeSyncEnum[],
): MultiAutocompleteChoiceType[] {
return events.map(event => ({
label: event,
value: event,
badge: isWebhookInPreview(event) ? <PreviewPill /> : undefined,
}));
}
export function mapAsyncEventsToChoices(
events: WebhookEventTypeAsyncEnum[],
selectedEvents: WebhookEventTypeAsyncEnum[],
): MultiAutocompleteChoiceType[] {
const isAnyAsyncEventSelected = selectedEvents.includes(
WebhookEventTypeAsyncEnum.ANY_EVENTS,
);
return events.map(event => ({
label: event,
value: event,
2022-11-02 12:31:17 +00:00
badge: isAsyncWebhookInPreview(event) ? <PreviewPill /> : undefined,
disabled:
event !== WebhookEventTypeAsyncEnum.ANY_EVENTS && isAnyAsyncEventSelected,
}));
}
export const filterSelectedAsyncEvents = (
asyncEvents: WebhookEventTypeAsyncEnum[],
) => {
const anyEvent = asyncEvents.find(
event => event === WebhookEventTypeAsyncEnum.ANY_EVENTS,
);
if (anyEvent) {
return [anyEvent];
}
return asyncEvents;
};