diff --git a/src/components/Errors/ErrorBoundary.jsx b/src/components/Errors/ErrorBoundary.jsx
index d7786c038..74c5d352f 100644
--- a/src/components/Errors/ErrorBoundary.jsx
+++ b/src/components/Errors/ErrorBoundary.jsx
@@ -4,6 +4,7 @@ import {FormattedMessage, useIntl} from 'react-intl';
import Body from 'components/Body';
import Card from 'components/Card';
+import FormUnavailable from 'components/Errors/FormUnavailable';
import FormMaximumSubmissions from 'components/FormMaximumSubmissions';
import Link from 'components/Link';
import MaintenanceMode from 'components/MaintenanceMode';
@@ -139,13 +140,9 @@ const UnprocessableEntityError = ({wrapper: Wrapper, error}) => {
UnprocessableEntityError.propTypes = GenericError.propTypes;
const ServiceUnavailableError = ({wrapper: Wrapper, error}) => {
- if (!['form-maintenance', 'form-maximum-submissions'].includes(error.code)) {
- return ;
- }
-
- // handle maintenance mode forms
- if (error.code === 'form-maintenance') {
- return (
+ const defaultComponent = ;
+ const componentMapping = {
+ 'form-maintenance': (
{
/>
}
/>
- );
- }
+ ),
+ 'form-maximum-submissions': ,
+ service_unavailable: ,
+ };
- // handle submission limit forms
- if (error.code === 'form-maximum-submissions') {
- return ;
- }
+ return componentMapping[error.code] || defaultComponent;
};
// map the error class to the component to render it
diff --git a/src/components/Errors/FormUnavailable.jsx b/src/components/Errors/FormUnavailable.jsx
new file mode 100644
index 000000000..17c9e6a18
--- /dev/null
+++ b/src/components/Errors/FormUnavailable.jsx
@@ -0,0 +1,24 @@
+import {FormattedMessage, useIntl} from 'react-intl';
+
+import ErrorMessage from 'components/Errors/ErrorMessage';
+
+const FormUnavailable = ({wrapper: Wrapper}) => {
+ const intl = useIntl();
+ // Wrapper may be a DOM element, which can't handle
+ const title = intl.formatMessage({
+ description: 'Open Forms service unavailable error title',
+ defaultMessage: 'Form unavailable',
+ });
+ return (
+
+
+
+
+
+ );
+};
+
+export default FormUnavailable;