mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 11:56:00 +00:00
socket.io integration, reload connection list after change
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
import React from "react";
|
||||
import "./index.css";
|
||||
import Screen from "./Screen";
|
||||
import {CurrentWidgetProvider} from "./widgets/useCurrentWidget";
|
||||
import React from 'react';
|
||||
import './index.css';
|
||||
import Screen from './Screen';
|
||||
import { CurrentWidgetProvider } from './widgets/useCurrentWidget';
|
||||
import { SocketProvider } from './utility/SocketProvider';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<CurrentWidgetProvider>
|
||||
<Screen />
|
||||
<SocketProvider>
|
||||
<Screen />
|
||||
</SocketProvider>
|
||||
</CurrentWidgetProvider>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,18 +11,15 @@ export default function ConnectionModal({ modalState, connection }) {
|
||||
|
||||
const handleTest = async values => {
|
||||
const resp = await axios.post('connections/test', values);
|
||||
console.log('resp.data', resp.data);
|
||||
const { error, version } = resp.data;
|
||||
|
||||
setSqlConnectResult(error || version);
|
||||
|
||||
// modalState.close();
|
||||
};
|
||||
|
||||
const handleSubmit = async values => {
|
||||
const resp = await axios.post('connections/save', values);
|
||||
|
||||
// modalState.close();
|
||||
modalState.close();
|
||||
};
|
||||
return (
|
||||
<ModalBase modalState={modalState}>
|
||||
|
||||
18
web/src/utility/SocketProvider.js
Normal file
18
web/src/utility/SocketProvider.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import io from 'socket.io-client';
|
||||
import React from 'react';
|
||||
|
||||
const SocketContext = React.createContext();
|
||||
|
||||
export function SocketProvider({ children }) {
|
||||
const [socket, setSocket] = React.useState();
|
||||
React.useEffect(() => {
|
||||
// const newSocket = io('http://localhost:3000', { transports: ['websocket'] });
|
||||
const newSocket = io('http://localhost:3000');
|
||||
setSocket(newSocket);
|
||||
}, []);
|
||||
return <SocketContext.Provider value={socket}>{children}</SocketContext.Provider>;
|
||||
}
|
||||
|
||||
export default function useSocket() {
|
||||
return React.useContext(SocketContext);
|
||||
}
|
||||
@@ -1,16 +1,33 @@
|
||||
import React from 'react';
|
||||
import axios from './axios';
|
||||
import useSocket from './SocketProvider';
|
||||
|
||||
export default function useFetch(url, defValue) {
|
||||
const [value, setValue] = React.useState(defValue);
|
||||
export default function useFetch({ defaultValue, reloadTrigger, url, ...config }) {
|
||||
const [value, setValue] = React.useState(defaultValue);
|
||||
const [loadCounter, setLoadCounter] = React.useState(0);
|
||||
const socket = useSocket();
|
||||
|
||||
const handleReload = () => {
|
||||
setLoadCounter(loadCounter + 1);
|
||||
};
|
||||
|
||||
async function loadValue() {
|
||||
const resp = await axios.get(url);
|
||||
const resp = await axios.request({
|
||||
method: 'get',
|
||||
url,
|
||||
...config,
|
||||
});
|
||||
setValue(resp.data);
|
||||
}
|
||||
React.useEffect(() => {
|
||||
loadValue();
|
||||
}, [url]);
|
||||
if (reloadTrigger && socket) {
|
||||
socket.on(reloadTrigger, handleReload);
|
||||
return () => {
|
||||
socket.off(reloadTrigger, handleReload);
|
||||
};
|
||||
}
|
||||
}, [url, socket, loadCounter]);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import connectionAppObject from '../appobj/connectionAppObject';
|
||||
|
||||
export default function DatabaseWidget() {
|
||||
const modalState = useModalState();
|
||||
const connections = useFetch('connections/list', []);
|
||||
console.log(connections);
|
||||
const connections = useFetch({
|
||||
url: 'connections/list',
|
||||
reloadTrigger: 'connection-list-changed',
|
||||
});
|
||||
return (
|
||||
<>
|
||||
<ConnectionModal modalState={modalState} />
|
||||
|
||||
Reference in New Issue
Block a user