Skip to content

Commit a4abcac

Browse files
MichaelDeBoeyCompuIves
authored andcommitted
Refactor Advertisement to use useScript (codesandbox#1962)
* πŸ”¨ Add useScript Hook, Refactor Advertisement to use useScript Removed unused container styles and reorganized code to follow updated coding conventions (to be documented at a later date). Added a new useScript hook (based on https://usehooks.com/useScript) and a hooks directory. * Resolve discussions
1 parent b21c4f3 commit a4abcac

File tree

9 files changed

+89
-71
lines changed

9 files changed

+89
-71
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { useScript } from './useScript';
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// Based on https://usehooks.com/useScript/
2+
import { useEffect, useState } from 'react';
3+
4+
const cachedScripts = [];
5+
6+
export const useScript = (src: string) => {
7+
const [state, setState] = useState({
8+
loaded: false,
9+
error: false,
10+
});
11+
12+
useEffect(() => {
13+
if (cachedScripts.includes(src)) {
14+
setState({
15+
loaded: true,
16+
error: false,
17+
});
18+
} else {
19+
cachedScripts.push(src);
20+
21+
const script = document.createElement('script');
22+
script.src = src;
23+
script.async = true;
24+
25+
const onScriptLoad = () => {
26+
setState({
27+
loaded: true,
28+
error: false,
29+
});
30+
};
31+
32+
const onScriptError = () => {
33+
const index = cachedScripts.indexOf(src);
34+
35+
if (index >= 0) {
36+
cachedScripts.splice(index, 1);
37+
}
38+
39+
script.remove();
40+
41+
setState({
42+
loaded: true,
43+
error: true,
44+
});
45+
};
46+
47+
script.addEventListener('load', onScriptLoad);
48+
script.addEventListener('error', onScriptError);
49+
50+
document.body.appendChild(script);
51+
52+
return () => {
53+
script.removeEventListener('load', onScriptLoad);
54+
script.removeEventListener('error', onScriptError);
55+
};
56+
}
57+
58+
return undefined;
59+
}, [src]);
60+
61+
return [state.loaded, state.error];
62+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import React from 'react';
2+
3+
import { useScript } from 'app/hooks';
4+
5+
import { Container } from './elements';
6+
7+
export const Advertisement = () => {
8+
useScript(`https://codefund.app/properties/24/funder.js`);
9+
10+
return (
11+
<Container>
12+
<div id="codefund" />
13+
</Container>
14+
);
15+
};

β€Žpackages/app/src/app/pages/Sandbox/Editor/Workspace/Advertisement/CodeFund.jsβ€Ž

Lines changed: 0 additions & 36 deletions
This file was deleted.

β€Žpackages/app/src/app/pages/Sandbox/Editor/Workspace/Advertisement/elements.jsβ€Ž

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import styled, { css } from 'styled-components';
2+
3+
export const Container = styled.div`
4+
${({ theme }) => css`
5+
color: ${theme.light
6+
? css`rgba(0, 0, 0, 0.8)`
7+
: css`rgba(255, 255, 255, 0.8)`} !important;
8+
`};
9+
`;

β€Žpackages/app/src/app/pages/Sandbox/Editor/Workspace/Advertisement/index.jsβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { Advertisement } from './Advertisement';

β€Žpackages/app/src/app/pages/Sandbox/Editor/Workspace/index.tsxβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Deployment from './items/Deployment';
1616
import ConfigurationFiles from './items/ConfigurationFiles';
1717
import NotOwnedSandboxInfo from './items/NotOwnedSandboxInfo';
1818

19-
import Advertisement from './Advertisement';
19+
import { Advertisement } from './Advertisement';
2020
import Chat from './Chat';
2121
import { ConnectionNotice } from './ConnectionNotice';
2222
import { SSEDownNotice } from './SSEDownNotice';

0 commit comments

Comments
Β (0)