You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@age.apache.org by hb...@apache.org on 2022/12/29 04:23:28 UTC
[age-viewer] branch main updated: Graphname metadata (#56)
This is an automated email from the ASF dual-hosted git repository.
hbshin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/age-viewer.git
The following commit(s) were added to refs/heads/main by this push:
new 19d6c1e Graphname metadata (#56)
19d6c1e is described below
commit 19d6c1e4480e3e8553f1c6d81572374bb74dc6c5
Author: MJinH <97...@users.noreply.github.com>
AuthorDate: Wed Dec 28 20:23:22 2022 -0800
Graphname metadata (#56)
* added hover effect on refresh/close buttons; added block element to have fixed size of select box and prevent text from taking more than 1 line when graph name is short; modified css of editor for auto-expanding textarea; removed white space in new line when pressing enter after copying and pasting
* changed max-height to 600px; resize grabber icon on the bottom right coner was missing
* select box which grap to show metadata information for
* Revert "select box which grap to show metadata information for"
This reverts commit 9e39d63f8cc0f77e3864a68528c5116caa929805.
* removed max-height; added scroll bar to editor div so that a user can move the content up and down when having a lot of text inside
* metadata for single graph
Co-authored-by: moon19960501@gmail.com <we...@gmail.com>
Co-authored-by: Hanbyeol Shin / David Shin / 신한별 <76...@users.noreply.github.com>
---
backend/src/controllers/databaseController.js | 2 +-
backend/src/routes/databaseRouter.js | 5 +-
backend/src/services/databaseService.js | 61 ++++++++++++++--------
.../src/components/contents/containers/Contents.js | 1 +
.../components/contents/presentations/Contents.jsx | 8 +--
.../frame/containers/ServerConnectContainer.js | 4 +-
.../frame/presentations/ServerConnectFrame.jsx | 4 +-
.../components/sidebar/containers/SidebarHome.js | 1 +
.../sidebar/presentations/SidebarHome.jsx | 4 +-
frontend/src/features/database/MetadataSlice.js | 20 ++++---
10 files changed, 71 insertions(+), 39 deletions(-)
diff --git a/backend/src/controllers/databaseController.js b/backend/src/controllers/databaseController.js
index 995f578..83cf077 100644
--- a/backend/src/controllers/databaseController.js
+++ b/backend/src/controllers/databaseController.js
@@ -58,7 +58,7 @@ class DatabaseController {
async getMetadata(req, res, next) {
let databaseService = sessionService.get(req.sessionID);
if (databaseService.isConnected()) {
- let metadata = await databaseService.getMetaData();
+ let metadata = await databaseService.getMetaData(req.body);
res.status(200).json(metadata).end();
} else {
throw new Error('Not connected');
diff --git a/backend/src/routes/databaseRouter.js b/backend/src/routes/databaseRouter.js
index e45668a..d53501b 100644
--- a/backend/src/routes/databaseRouter.js
+++ b/backend/src/routes/databaseRouter.js
@@ -26,7 +26,6 @@ const {wrap} = require('../common/Routes');
router.get("/", wrap(databaseController.getStatus));
router.post("/connect", wrap(databaseController.connectDatabase));
router.get("/disconnect", wrap(databaseController.disconnectDatabase));
-router.get("/meta", wrap(databaseController.getMetadata));
-// router.get("/metaChart", wrap(databaseController.getMetaChart));
-
+router.post("/meta", wrap(databaseController.getMetadata));
+router.get("/metaChart", wrap(databaseController.getMetaChart));
module.exports = router;
diff --git a/backend/src/services/databaseService.js b/backend/src/services/databaseService.js
index 8e63d60..7e35048 100644
--- a/backend/src/services/databaseService.js
+++ b/backend/src/services/databaseService.js
@@ -28,46 +28,61 @@ class DatabaseService {
}
async getMetaData(graphName) {
+ const { currentGraph } = graphName;
await this._graphRepository.initGraphNames();
const {graphs} = this._graphRepository.getConnectionInfo();
- if(graphName){
- if(graphs.includes(graphName)){
- return await this.getMetaDataSingle(graphName);
- }else{
- throw new Error('graph does not exist');
+
+ if(currentGraph){
+ if(graphs.includes(currentGraph)){
+ return await this.getMetaDataSingle(currentGraph,graphs);
}
-
- }else{
- return await this.getMetaDataMultiple(graphs);
+ } else if(graphs.length > 0) {
+ return await this.graphNameInitialize(graphs);
+ } else{
+ throw new Error('graph does not exist');
+ // return await this.getMetaDataMultiple(graphs);
}
}
- async getMetaDataMultiple(graphs){
- const metadata = {};
- await Promise.all(graphs.map(async(gname)=>{
- metadata[gname] = await this.getMetaDataSingle(gname);
- }))
- return metadata;
- }
+ // async getMetaDataMultiple(graphs){
+ // const metadata = {};
+ // await Promise.all(graphs.map(async(gname)=>{
+ // metadata[gname] = await this.getMetaDataSingle(gname);
+ // }))
+ // return metadata;
+ // }
- async getMetaDataSingle(curGraph){
+ async getMetaDataSingle(curGraph, graphs){
let metadata = {};
+ let data = {};
const {database} = this.getConnectionInfo();
try {
let {nodes, edges} = await this.readMetaData(curGraph);
- metadata.nodes = nodes;
- metadata.edges = edges;
- metadata.propertyKeys = await this.getPropertyKeys();
- metadata.graph = curGraph;
- metadata.database = database;
- metadata.role = await this.getRole();
+ data.nodes = nodes;
+ data.edges = edges;
+ data.propertyKeys = await this.getPropertyKeys();
+ data.graph = curGraph;
+ data.database = database;
+ data.role = await this.getRole();
+ metadata[curGraph] = data;
+ graphs.forEach((gname) => {
+ if(gname !== curGraph) metadata[gname] = {};
+ })
} catch (error) {
throw error;
}
return metadata;
}
- /*
+
+ async graphNameInitialize(graphs) {
+ let metadata = {};
+ graphs.forEach((gname) => {
+ metadata[gname] = {};
+ })
+ return metadata;
+ }
+
async getGraphLabels() {
let graphRepository = this._graphRepository;
let queryResult = {};
diff --git a/frontend/src/components/contents/containers/Contents.js b/frontend/src/components/contents/containers/Contents.js
index 8f70726..d14346d 100644
--- a/frontend/src/components/contents/containers/Contents.js
+++ b/frontend/src/components/contents/containers/Contents.js
@@ -25,6 +25,7 @@ import Contents from '../presentations/Contents';
const mapStateToProps = (state) => ({
database: state.database,
isActive: state.navigator.isActive,
+ currentGraph: state.metadata.currentGraph,
});
const mapDispatchToProps = { getConnectionStatus, getMetaData /* getMetaChartData */ };
diff --git a/frontend/src/components/contents/presentations/Contents.jsx b/frontend/src/components/contents/presentations/Contents.jsx
index d25d0a1..ebc0bde 100644
--- a/frontend/src/components/contents/presentations/Contents.jsx
+++ b/frontend/src/components/contents/presentations/Contents.jsx
@@ -24,7 +24,7 @@ import FramesContainer from '../containers/Frames';
import styles from './Contents.module.scss';
const Contents = ({
- database, isActive, getConnectionStatus, getMetaData, /* getMetaChartData, */
+ database, isActive, getConnectionStatus, getMetaData, getMetaChartData, currentGraph,
}) => {
const dispatch = useDispatch();
@@ -33,8 +33,9 @@ const Contents = ({
dispatch(() => {
getConnectionStatus().then((response) => {
if (response.type === 'database/getConnectionStatus/fulfilled') {
+ getMetaData({ currentGraph });
+ getMetaChartData();
getMetaData();
- /* getMetaChartData(); */
}
});
});
@@ -57,7 +58,8 @@ Contents.propTypes = {
isActive: PropTypes.bool.isRequired,
getConnectionStatus: PropTypes.func.isRequired,
getMetaData: PropTypes.func.isRequired,
- /* getMetaChartData: PropTypes.func.isRequired, */
+ getMetaChartData: PropTypes.func.isRequired,
+ currentGraph: PropTypes.string.isRequired,
};
export default Contents;
diff --git a/frontend/src/components/frame/containers/ServerConnectContainer.js b/frontend/src/components/frame/containers/ServerConnectContainer.js
index 50a16ae..9746f7c 100644
--- a/frontend/src/components/frame/containers/ServerConnectContainer.js
+++ b/frontend/src/components/frame/containers/ServerConnectContainer.js
@@ -26,7 +26,9 @@ import {
import { addAlert } from '../../../features/alert/AlertSlice';
import ServerConnectFrame from '../presentations/ServerConnectFrame';
-const mapStateToProps = () => ({});
+const mapStateToProps = (state) => ({
+ currentGraph: state.metadata.currentGraph,
+});
const mapDispatchToProps = {
connectToDatabase,
diff --git a/frontend/src/components/frame/presentations/ServerConnectFrame.jsx b/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
index f5bb3f6..514ac26 100644
--- a/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
+++ b/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
@@ -44,6 +44,7 @@ const ServerConnectFrame = ({
refKey,
isPinned,
reqString,
+ currentGraph,
}) => {
const dispatch = useDispatch();
@@ -51,7 +52,7 @@ const ServerConnectFrame = ({
if (response.type === 'database/connectToDatabase/fulfilled') {
dispatch(addAlert('NoticeServerConnected'));
dispatch(trimFrame('ServerConnect'));
- dispatch(getMetaData()).then((metadataResponse) => {
+ dispatch(getMetaData({ currentGraph })).then((metadataResponse) => {
if (metadataResponse.type === 'database/getMetaData/fulfilled') {
const graphName = Object.keys(metadataResponse.payload)[0];
/* dispatch(getMetaChartData()); */
@@ -116,6 +117,7 @@ ServerConnectFrame.propTypes = {
refKey: PropTypes.string.isRequired,
isPinned: PropTypes.bool.isRequired,
reqString: PropTypes.string.isRequired,
+ currentGraph: PropTypes.string.isRequired,
};
export default ServerConnectFrame;
diff --git a/frontend/src/components/sidebar/containers/SidebarHome.js b/frontend/src/components/sidebar/containers/SidebarHome.js
index 5336079..0445c29 100644
--- a/frontend/src/components/sidebar/containers/SidebarHome.js
+++ b/frontend/src/components/sidebar/containers/SidebarHome.js
@@ -36,6 +36,7 @@ const mapStateToProps = (state) => {
status: state.metadata.status,
role: currentGraphData.role,
command: state.editor.command,
+ currentGraph: state.metadata.currentGraph,
isLabel: state.layout.isLabel,
};
};
diff --git a/frontend/src/components/sidebar/presentations/SidebarHome.jsx b/frontend/src/components/sidebar/presentations/SidebarHome.jsx
index a96ee40..39e0b1e 100644
--- a/frontend/src/components/sidebar/presentations/SidebarHome.jsx
+++ b/frontend/src/components/sidebar/presentations/SidebarHome.jsx
@@ -363,6 +363,7 @@ const SidebarHome = ({
getMetaData,
changeCurrentGraph,
changeGraph,
+ currentGraph,
isLabel,
}) => {
const dispatch = useDispatch();
@@ -375,7 +376,7 @@ const SidebarHome = ({
};
const refreshSidebarHome = () => {
- getMetaData();
+ getMetaData({ currentGraph });
};
return (
@@ -503,6 +504,7 @@ SidebarHome.propTypes = {
currentGraph: PropTypes.string.isRequired,
graphs: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)).isRequired,
changeGraph: PropTypes.func.isRequired,
+ currentGraph: PropTypes.string.isRequired,
isLabel: PropTypes.bool.isRequired,
};
diff --git a/frontend/src/features/database/MetadataSlice.js b/frontend/src/features/database/MetadataSlice.js
index 92f35b6..67836f1 100644
--- a/frontend/src/features/database/MetadataSlice.js
+++ b/frontend/src/features/database/MetadataSlice.js
@@ -22,23 +22,31 @@ import uuid from 'react-uuid';
export const getMetaData = createAsyncThunk(
'database/getMetaData',
- async () => {
+ async (arg) => {
try {
- const response = await fetch('/api/v1/db/meta');
+ const response = await fetch('/api/v1/db/meta',
+ {
+ method: 'POST',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(arg),
+ });
if (response.ok) {
const ret = await response.json();
Object.keys(ret).forEach((gname) => {
let allCountEdge = 0;
let allCountNode = 0;
- ret[gname].nodes.forEach((item) => {
+ ret[gname].nodes?.forEach((item) => {
allCountNode += item.cnt;
});
- ret[gname].edges.forEach((item) => {
+ ret[gname].edges?.forEach((item) => {
allCountEdge += item.cnt;
});
- ret[gname].nodes.unshift({ label: '*', cnt: allCountNode });
- ret[gname].edges.unshift({ label: '*', cnt: allCountEdge });
+ ret[gname].nodes?.unshift({ label: '*', cnt: allCountNode });
+ ret[gname].edges?.unshift({ label: '*', cnt: allCountEdge });
ret[gname].id = uuid();
});
return ret;