diff --git a/src/DefaultTemplate.stories.ts b/src/DefaultTemplate.stories.ts index ce84cfc..946cafe 100644 --- a/src/DefaultTemplate.stories.ts +++ b/src/DefaultTemplate.stories.ts @@ -1,4 +1,5 @@ -import { DefaultTemplate } from "./DefaultTemplate"; +import React from "react"; +import { DefaultTemplate, ConnectionFailureTemplate } from "./DefaultTemplate"; export default { title: "DefaultTemplate", @@ -25,3 +26,15 @@ export const NonEditableValue = { }, }, }; + +export const ConnectionFailure = { + name: "Connection Failure (OpenCerts only)", + render: ConnectionFailureTemplate, + decorators: [ + (Story: any) => + React.createElement("div", { style: { padding: "4rem 0", textAlign: "center" } }, React.createElement(Story)), + ], + args: { + source: "http://localhost:3000", + }, +}; diff --git a/src/DefaultTemplate.tsx b/src/DefaultTemplate.tsx index 34b2b3b..6f178ad 100644 --- a/src/DefaultTemplate.tsx +++ b/src/DefaultTemplate.tsx @@ -11,6 +11,29 @@ const container = { const textColor = `#333`; const paddingBox = `.75rem 1.25rem`; +export interface ConnectionFailureProps { + source?: string; +} + +export const ConnectionFailureTemplate: React.FunctionComponent = (props) => { + return ( +
+
+

+ This document might be having loading issues +

+

+ Try refreshing the page or check your internet connection. If the issue continues, please contact the issuer + with the information below: +
+
+ Template URL: "{props.source}" +

+
+
+ ); +}; + export const DefaultTemplate: React.FunctionComponent> = (props) => { return (
diff --git a/src/components/frame/FrameConnector.tsx b/src/components/frame/FrameConnector.tsx index 1f93a28..e10e36d 100644 --- a/src/components/frame/FrameConnector.tsx +++ b/src/components/frame/FrameConnector.tsx @@ -1,6 +1,7 @@ import React, { CSSProperties, FunctionComponent, useEffect, useMemo, useRef, useState } from "react"; import { useChildFrame } from "./useFrame"; import { HostActions, HostActionsHandler, LegacyHostActions } from "./host.actions"; +import { ConnectionFailureTemplate } from "../../DefaultTemplate"; import { FrameActions, LegacyFrameActions, @@ -85,6 +86,8 @@ export const FrameConnector: FunctionComponent = ({ }; }, [dispatchProxy]); + const hostname = typeof window !== "undefined" ? window.location.hostname : ""; + const isOpenCerts = hostname === "opencerts.io" || hostname.endsWith(".opencerts.io"); const DEFAULT_RENDERER_URL = `https://generic-templates.tradetrust.io`; const originalIframe = useRef(null); const fallbackIframe = useRef(null); @@ -170,10 +173,14 @@ export const FrameConnector: FunctionComponent = ({ <> {!useFallbackSource ? ( timeout ? ( - <> -

Connection timeout on renderer

-

Please contact the administrator of {source}.

- + isOpenCerts ? ( + + ) : ( + <> +

Connection timeout on renderer

+

Please contact the administrator of {source}.

+ + ) ) : (