diff --git a/src/intl.ts b/src/intl.ts index 45839e65a..61345e3f6 100644 --- a/src/intl.ts +++ b/src/intl.ts @@ -47,6 +47,9 @@ export const commonMessages = defineMessages({ properties: { defaultMessage: "Properties" }, + readOnly: { + defaultMessage: "Saleor runs in read-only mode. Changes not saved." + }, requiredField: { defaultMessage: "This field is required" }, diff --git a/src/mutations.tsx b/src/mutations.tsx index 5fcda0308..4ee5e2e4e 100644 --- a/src/mutations.tsx +++ b/src/mutations.tsx @@ -6,6 +6,7 @@ import { useIntl } from "react-intl"; import useNotifier from "./hooks/useNotifier"; import { commonMessages } from "./intl"; +import { maybe } from "./misc"; export interface TypedMutationInnerProps { children: ( @@ -32,9 +33,21 @@ export function TypedMutation( mutation={mutation} onCompleted={onCompleted} onError={(err: ApolloError) => { - notify({ - text: intl.formatMessage(commonMessages.somethingWentWrong) - }); + if ( + maybe( + () => + err.graphQLErrors[0].extensions.exception.code === + "ReadOnlyException" + ) + ) { + notify({ + text: intl.formatMessage(commonMessages.readOnly) + }); + } else { + notify({ + text: intl.formatMessage(commonMessages.somethingWentWrong) + }); + } if (onError) { onError(err); } diff --git a/src/queries.tsx b/src/queries.tsx index 56a979ce8..172e1a6c1 100644 --- a/src/queries.tsx +++ b/src/queries.tsx @@ -82,7 +82,7 @@ export function TypedQuery( skip={skip} context={{ useBatching: true }} > - {queryData => { + {(queryData: QueryResult) => { if (queryData.error) { pushMessage({ text: intl.formatMessage(commonMessages.somethingWentWrong)