interface: added /~graph route with joining logic and partial redirect logic

This commit is contained in:
Logan Allen 2020-09-21 13:55:39 -05:00
parent 6503bb9164
commit 2b4df724f7
4 changed files with 79 additions and 20 deletions

View File

@ -0,0 +1,66 @@
import React, { Component } from 'react';
import { Switch, Route } from 'react-router-dom';
export default class GraphApp extends Component {
render() {
const { props } = this;
const contacts = props.contacts ? props.contacts : {};
const groups = props.groups ? props.groups : {};
const associations =
props.associations ? props.associations : { graph: {}, contacts: {} };
const graphKeys = props.graphKeys || new Set([]);
const graphs = props.graphs || {};
const { api, sidebarShown, hideAvatars, hideNicknames, s3, remoteContentPolicy } = this.props;
return (
<>
<Switch>
<Route exact path="/~graph/join/ship/:ship/:name"
render={ (props) => {
const resource =
`${props.match.params.ship}/${props.match.params.name}`;
const autoJoin = () => {
try {
api.graph.joinGraph(
`~${props.match.params.ship}`,
props.match.params.name
);
props.history.push(`/~graph/${resource}`);
} catch(err) {
setTimeout(autoJoin, 2000);
}
};
autoJoin();
}}
/>
<Route exact path="/~graph/(popout)?/:ship/:name"
render={ (props) => {
const resourcePath =
`${props.match.params.ship}/${props.match.params.name}`;
const resource =
associations.graph[resourcePath] ?
associations.graph[resourcePath] : { metadata: {} };
const contactDetails = contacts[resource['group-path']] || {};
const popout = props.match.url.includes('/popout/');
const graph = graphs[resourcePath] || null;
if ('app-name' in resource) {
// TODO: add proper tags to graph-store's tag-queries,
// then push the proper path to history
props.history.push();
}
return (
<div>Redirecting...</div>
);
}}
/>
</Switch>
</>
);
}
}

View File

@ -92,25 +92,6 @@ export class LinksApp extends Component {
); );
}} }}
/> />
<Route exact path="/~link/join/:ship/:name"
render={ (props) => {
const resource =
`${props.match.params.ship}/${props.match.params.name}`;
const autoJoin = () => {
try {
api.graph.joinGraph(
`~${props.match.params.ship}`,
props.match.params.name
);
props.history.push(`/~link/${resource}`);
} catch(err) {
setTimeout(autoJoin, 2000);
}
};
autoJoin();
}}
/>
<Route exact path="/~link/(popout)?/:ship/:name/settings" <Route exact path="/~link/(popout)?/:ship/:name/settings"
render={ (props) => { render={ (props) => {
const resourcePath = const resourcePath =

View File

@ -54,7 +54,8 @@ export const Content = (props) => {
path={[ path={[
'/~chat', '/~chat',
'/~publish', '/~publish',
'/~link' '/~link',
'/~graph'
]} ]}
render={ p => ( render={ p => (
<TwoPaneApp <TwoPaneApp

View File

@ -4,6 +4,7 @@ import { Route, Switch } from 'react-router-dom';
import LinksApp from '../apps/links/app'; import LinksApp from '../apps/links/app';
import PublishApp from '../apps/publish/app'; import PublishApp from '../apps/publish/app';
import ChatApp from '../apps/chat/app'; import ChatApp from '../apps/chat/app';
import GraphApp from '../apps/graph/app';
export const TwoPaneApp = (props) => { export const TwoPaneApp = (props) => {
@ -39,6 +40,16 @@ export const TwoPaneApp = (props) => {
{...props} /> {...props} />
)} )}
/> />
<Route
path='/~graph'
render={p => (
<GraphApp
location={p.location}
match={p.match}
history={p.history}
{...props} />
)}
/>
</Switch> </Switch>
); );
} }