Skip to content

Commit f688ee1

Browse files
committed
feat(nodejs:website): Add phonix provider.
1 parent 09d823c commit f688ee1

File tree

3 files changed

+67
-16
lines changed

3 files changed

+67
-16
lines changed

nodejs/packages/website/package.json

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,32 @@
66
"build": "next build && next export -o build && touch build/.nojekyll",
77
"start": "next start"
88
},
9-
"dependencies": {},
10-
"publishConfig": {
11-
"access": "public"
12-
},
13-
"devDependencies": {
14-
"@types/node": "^16.10.3",
15-
"@types/react": "^17.0.27",
9+
"dependencies": {
1610
"@emotion/react": "^11.4.1",
1711
"@emotion/server": "^11.4.0",
1812
"@emotion/styled": "^11.3.0",
1913
"@mui/icons-material": "^5.0.3",
2014
"@mui/material": "^5.0.3",
2115
"@mui/styles": "^5.0.1",
22-
"axios": "^0.22.0",
2316
"next": "11.1.2",
17+
"phoenix-provider": "^1.0.0",
2418
"react": "17.0.2",
2519
"react-dnd": "^14.0.4",
2620
"react-dnd-html5-backend": "^14.0.2",
2721
"react-dnd-touch-backend": "^14.1.1",
2822
"react-dom": "17.0.2",
2923
"react-markdown": "^7.0.1",
3024
"remark-gfm": "^3.0.0",
31-
"rxjs": "^7.4.0",
25+
"rxjs": "^7.4.0"
26+
},
27+
"publishConfig": {
28+
"access": "public"
29+
},
30+
"devDependencies": {
31+
"@gsmlg/scripts": "^1.0.0",
32+
"@types/node": "^16.10.3",
33+
"@types/react": "^17.0.27",
34+
"axios": "^0.22.0",
3235
"typescript": "^4.4.3"
3336
}
3437
}

nodejs/packages/website/pages/_app.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Head from 'next/head';
44
import CssBaseline from '@mui/material/CssBaseline';
55
import { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';
66
import { CacheProvider, EmotionCache } from '@emotion/react';
7+
import { Provider as PhoenixProvider } from 'phoenix-provider';
78
import theme from '../src/theme';
89
import createEmotionCache from '../src/createEmotionCache';
910

@@ -28,12 +29,14 @@ export default function MyApp(props: MyAppProps) {
2829
content="minimum-scale=1, initial-scale=1, width=device-width"
2930
/>
3031
</Head>
31-
<StyledEngineProvider injectFirst>
32-
<ThemeProvider theme={theme}>
33-
<CssBaseline />
34-
<Component {...pageProps} />
35-
</ThemeProvider>
36-
</StyledEngineProvider>
32+
<PhoenixProvider url={'/socket'} params={{ token: 'anonymous' }}>
33+
<StyledEngineProvider injectFirst>
34+
<ThemeProvider theme={theme}>
35+
<CssBaseline />
36+
<Component {...pageProps} />
37+
</ThemeProvider>
38+
</StyledEngineProvider>
39+
</PhoenixProvider>
3740
</CacheProvider>
3841
);
3942
}

nodejs/packages/website/src/components/Layout/index.js

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import MenuIcon from '@mui/icons-material/Menu';
1616

1717
import Link from 'next/link';
1818

19+
import { useSocket } from 'phoenix-provider';
20+
1921
const RootSection = styled('section')((
2022
{
2123
theme
@@ -37,7 +39,7 @@ const ContainerSection = styled('section')((
3739
}));
3840
const Footer = styled('footer')((
3941
{
40-
theme
42+
theme,
4143
}
4244
) => ({
4345
// height: '2em',
@@ -47,6 +49,14 @@ const Footer = styled('footer')((
4749
color: theme.palette.getContrastText(theme.palette.primary.main),
4850
backgroundColor: theme.palette.primary.main,
4951
}));
52+
const SocketStatus = styled('div')(({ theme, status }) => ({
53+
display: 'inline-block',
54+
width: 16,
55+
height: 16,
56+
borderRadius: 8,
57+
margin: '0 8px',
58+
backgroundColor: status.color,
59+
}));
5060

5161
const menus = [
5262
{name: 'Home', href: '/'},
@@ -57,6 +67,40 @@ const menus = [
5767
];
5868

5969
const Layout = ({children}, ref) => {
70+
const socket = useSocket();
71+
const [socketStatus, setSocketStatus] = React.useState({ color: 'transperant' });
72+
React.useEffect(() => {
73+
if (socket.vsn) {
74+
const updateState = () => {
75+
console.log(socket);
76+
const state = '';//socket.connectionState();
77+
switch(state) {
78+
case "connecting":
79+
setSocketStatus({ color: 'blue' });
80+
break;
81+
case "open":
82+
setSocketStatus({ color: 'green' });
83+
break;
84+
case "closing":
85+
setSocketStatus({ color: 'orange' });
86+
break;
87+
default:
88+
// "closed"
89+
setSocketStatus({ color: 'gray' });
90+
}
91+
};
92+
updateState();
93+
const list = [
94+
socket.onOpen(updateState),
95+
socket.onClose(updateState),
96+
socket.onError(updateState),
97+
socket.onMessage(updateState),
98+
];
99+
return () => {
100+
socket.off(list);
101+
};
102+
}
103+
}, [socket]);
60104

61105
const requestPerm = React.useCallback(() => {
62106
Notification.requestPermission();
@@ -66,6 +110,7 @@ const Layout = ({children}, ref) => {
66110
<RootSection ref={ref}>
67111
<AppBar position="static">
68112
<Toolbar>
113+
<SocketStatus status={socketStatus} />
69114
<IconButton
70115
onClick={requestPerm}
71116
color="inherit"

0 commit comments

Comments
 (0)