MCPcopy
hub / github.com/getredash/redash / HelpTrigger

Class HelpTrigger

client/app/components/HelpTrigger.jsx:76–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

74
75export function helpTriggerWithTypes(types, allowedDomains = [], drawerClassName = null) {
76 return class HelpTrigger extends React.Component {
77 static propTypes = {
78 ...HelpTriggerPropTypes,
79 type: PropTypes.oneOf(Object.keys(types)),
80 };
81
82 static defaultProps = HelpTriggerDefaultProps;
83
84 iframeRef = React.createRef();
85
86 iframeLoadingTimeout = null;
87
88 state = {
89 visible: false,
90 loading: false,
91 error: false,
92 currentUrl: null,
93 };
94
95 componentDidMount() {
96 window.addEventListener("message", this.onPostMessageReceived, false);
97 }
98
99 componentWillUnmount() {
100 window.removeEventListener("message", this.onPostMessageReceived);
101 clearTimeout(this.iframeLoadingTimeout);
102 }
103
104 loadIframe = (url) => {
105 clearTimeout(this.iframeLoadingTimeout);
106 this.setState({ loading: true, error: false });
107
108 this.iframeRef.current.src = url;
109 this.iframeLoadingTimeout = setTimeout(() => {
110 this.setState({ error: url, loading: false });
111 }, IFRAME_TIMEOUT); // safety
112 };
113
114 onIframeLoaded = () => {
115 this.setState({ loading: false });
116 clearTimeout(this.iframeLoadingTimeout);
117 };
118
119 onPostMessageReceived = (event) => {
120 if (!some(allowedDomains, (domain) => startsWith(event.origin, domain))) {
121 return;
122 }
123
124 const { type, message: currentUrl } = event.data || {};
125 if (type !== IFRAME_URL_UPDATE_MESSAGE) {
126 return;
127 }
128
129 this.setState({ currentUrl });
130 };
131
132 getUrl = () => {
133 const helpTriggerType = get(types, this.props.type);

Callers

nothing calls this directly

Calls 3

getUrlMethod · 0.80
getFunction · 0.50
setStateMethod · 0.45

Tested by

no test coverage detected