diff --git a/locale/defaultMessages.json b/locale/defaultMessages.json index 72edcbd34..b1768dffc 100644 --- a/locale/defaultMessages.json +++ b/locale/defaultMessages.json @@ -3683,6 +3683,10 @@ "context": "caption", "string": "If enabled, you’ll be able to use this attribute to filter products in product list." }, + "QAisk4": { + "context": "Webhook events header", + "string": "Webhook events" + }, "QBxN6z": { "context": "is filter range or value", "string": "between" diff --git a/src/custom-apps/components/WebhookDetailsPage/WebhookDetailsPage.tsx b/src/custom-apps/components/WebhookDetailsPage/WebhookDetailsPage.tsx index ae893b2f3..44292f743 100644 --- a/src/custom-apps/components/WebhookDetailsPage/WebhookDetailsPage.tsx +++ b/src/custom-apps/components/WebhookDetailsPage/WebhookDetailsPage.tsx @@ -124,13 +124,16 @@ const WebhookDetailsPage: React.FC = ({ errors={errors} onChange={change} /> - + + + + = ({ return ( <> - + + = ({ +
); diff --git a/src/custom-apps/components/WebhookEvents/messages.ts b/src/custom-apps/components/WebhookEvents/messages.ts index 68c0dc9c2..d98ecfa65 100644 --- a/src/custom-apps/components/WebhookEvents/messages.ts +++ b/src/custom-apps/components/WebhookEvents/messages.ts @@ -33,4 +33,9 @@ export const messages = defineMessages({ id: "F6LHyk", description: "Webhook details objects", }, + webhookEvents: { + id: "QAisk4", + defaultMessage: "Webhook events", + description: "Webhook events header", + }, }); diff --git a/src/custom-apps/components/WebhookEvents/styles.ts b/src/custom-apps/components/WebhookEvents/styles.ts index 3d1505951..87baa6503 100644 --- a/src/custom-apps/components/WebhookEvents/styles.ts +++ b/src/custom-apps/components/WebhookEvents/styles.ts @@ -25,6 +25,7 @@ export const useStyles = makeStyles( minHeight: 0, gap: 0, padding: theme.spacing(1), + cursor: "pointer", }, listItemCell: { paddingLeft: "0 !important", @@ -36,6 +37,9 @@ export const useStyles = makeStyles( card: { paddingLeft: 0, }, + cardHeader: { + padding: "2.4rem 3.2rem", + }, }), { name: "WebhookEvents" }, ); diff --git a/src/custom-apps/components/WebhookEvents/utils.ts b/src/custom-apps/components/WebhookEvents/utils.ts index cc9a8cbee..db2186e48 100644 --- a/src/custom-apps/components/WebhookEvents/utils.ts +++ b/src/custom-apps/components/WebhookEvents/utils.ts @@ -8,7 +8,7 @@ type Actions = string[]; export const getWebhookTypes = (webhookEvents: string[]) => { const multiWords = ["DRAFT_ORDER", "GIFT_CARD", "ANY_EVENTS"]; - return webhookEvents.reduce>((acc, key) => { + return webhookEvents.sort().reduce>((acc, key) => { const keywords = key.split("_"); const multiKeyword = keywords.slice(0, 2).join("_"); diff --git a/src/custom-apps/components/WebhookHeaders/WebhookHeaders.tsx b/src/custom-apps/components/WebhookHeaders/WebhookHeaders.tsx index 3693aedcc..b646ef1dd 100644 --- a/src/custom-apps/components/WebhookHeaders/WebhookHeaders.tsx +++ b/src/custom-apps/components/WebhookHeaders/WebhookHeaders.tsx @@ -20,7 +20,7 @@ import { FormattedMessage, useIntl } from "react-intl"; import { WebhookFormData } from "../WebhookDetailsPage"; import { messages } from "./messages"; import useStyles from "./styles"; -import { mapHeaders, stringifyHeaders } from "./utils"; +import { hasEmptyHeader, mapHeaders, stringifyHeaders } from "./utils"; import WebhookHeadersTableBody from "./WebhookHeadersTableBody"; export interface WebhookHeadersProps { @@ -143,6 +143,7 @@ const WebhookHeaders: React.FC = ({ variant="secondary" data-test-id="add-header" onClick={add} + disabled={hasEmptyHeader(headers)} > diff --git a/src/custom-apps/components/WebhookHeaders/styles.ts b/src/custom-apps/components/WebhookHeaders/styles.ts index 82bed0676..b4d4f35b3 100644 --- a/src/custom-apps/components/WebhookHeaders/styles.ts +++ b/src/custom-apps/components/WebhookHeaders/styles.ts @@ -46,6 +46,7 @@ const useStyles = makeStyles( "&&": { paddingBottom: theme.spacing(2), paddingTop: theme.spacing(2), + paddingLeft: theme.spacing(4), }, }, content: { diff --git a/src/custom-apps/components/WebhookHeaders/utils.ts b/src/custom-apps/components/WebhookHeaders/utils.ts index 511ce5f5c..c4d38f91f 100644 --- a/src/custom-apps/components/WebhookHeaders/utils.ts +++ b/src/custom-apps/components/WebhookHeaders/utils.ts @@ -12,7 +12,11 @@ export const stringifyHeaders = (headers: Header[]): string => const validateName = (name: string) => { if ( - name.toLowerCase().match("(^x$)|(^x-)|(^authorization$)|(^authorization-)") + name + .toLowerCase() + .match( + "(^x$)|(^x-)|^(a|$)(u|$)(t|$)(h|$)(o|$)(r|$)(i|$)(z|$)(a|$)(t|$)(i|$)(o|$)(n|$)(-|$)", + ) ) { return false; } @@ -33,3 +37,6 @@ export const mapHeaders = (customHeaders: string): Header[] => { error: validateName(key), })); }; + +export const hasEmptyHeader = (customHeaders: Header[]): boolean => + customHeaders.filter(header => header.name.length === 0).length > 0;