mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
added route for contact screen
This commit is contained in:
parent
20ad55f252
commit
18ce5f311b
@ -5,6 +5,7 @@ import { Login } from './Login/Login';
|
|||||||
import { Create } from './Create/Create';
|
import { Create } from './Create/Create';
|
||||||
import { User } from './User/User';
|
import { User } from './User/User';
|
||||||
import { Profile } from './User/Profile/Profile';
|
import { Profile } from './User/Profile/Profile';
|
||||||
|
import { Contact } from './User/Contact/Contact';
|
||||||
import { HashRouter as Router, Routes, Route } from "react-router-dom";
|
import { HashRouter as Router, Routes, Route } from "react-router-dom";
|
||||||
import 'antd/dist/antd.min.css';
|
import 'antd/dist/antd.min.css';
|
||||||
|
|
||||||
@ -19,10 +20,11 @@ function App() {
|
|||||||
<Router>
|
<Router>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" element={ <Home /> } />
|
<Route path="/" element={ <Home /> } />
|
||||||
<Route path="/Login" element={ <Login /> } />
|
<Route path="/login" element={ <Login /> } />
|
||||||
<Route path="/Create" element={ <Create /> } />
|
<Route path="/create" element={ <Create /> } />
|
||||||
<Route path="/User" element={ <User /> }>
|
<Route path="/user" element={ <User /> }>
|
||||||
<Route path="profile" element={<Profile />} />
|
<Route path="profile" element={<Profile />} />
|
||||||
|
<Route path="contact/:guid" element={<Contact />} />
|
||||||
</Route>
|
</Route>
|
||||||
</Routes>
|
</Routes>
|
||||||
</Router>
|
</Router>
|
||||||
|
21
net/web/src/User/Contact/Contact.jsx
Normal file
21
net/web/src/User/Contact/Contact.jsx
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import React, { useState, useEffect, useRef } from 'react'
|
||||||
|
import { CloseOutlined } from '@ant-design/icons';
|
||||||
|
import { useContact } from './useContact.hook';
|
||||||
|
import { Button, Checkbox, Modal } from 'antd'
|
||||||
|
import { ContactWrapper, CloseButton } from './Contact.styled';
|
||||||
|
|
||||||
|
export function Contact({ match }) {
|
||||||
|
|
||||||
|
const { state, actions } = useContact();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ContactWrapper>
|
||||||
|
<div class="header">
|
||||||
|
<div class="title">{ state.handle }</div>
|
||||||
|
<CloseButton type="text" class="close" size={'large'} onClick={() => actions.close()} icon={<CloseOutlined />} />
|
||||||
|
</div>
|
||||||
|
<div class="container"></div>
|
||||||
|
</ContactWrapper>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
52
net/web/src/User/Contact/Contact.styled.js
Normal file
52
net/web/src/User/Contact/Contact.styled.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import styled from 'styled-components';
|
||||||
|
import { Button } from 'antd';
|
||||||
|
|
||||||
|
export const ContactWrapper = styled.div`
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #f6f5ed;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.header {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #dddddd;
|
||||||
|
height: 64px;
|
||||||
|
padding-right: 16px;
|
||||||
|
padding-left: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
height: 64px;
|
||||||
|
flex-grow: 1;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 2em;
|
||||||
|
font-weight: bold;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
font-size: 24px;
|
||||||
|
color: #aaaaaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
padding: 32px;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const CloseButton = styled(Button)`
|
||||||
|
font-size: 24px;
|
||||||
|
color: #aaaaaa;
|
||||||
|
`;
|
31
net/web/src/User/Contact/useContact.hook.js
Normal file
31
net/web/src/User/Contact/useContact.hook.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { useContext, useState, useEffect } from 'react';
|
||||||
|
import { AppContext } from '../../AppContext/AppContext';
|
||||||
|
import { useNavigate, useLocation, useParams } from "react-router-dom";
|
||||||
|
|
||||||
|
export function useContact() {
|
||||||
|
|
||||||
|
const [state, setState] = useState({});
|
||||||
|
|
||||||
|
const data = useLocation();
|
||||||
|
const { guid } = useParams();
|
||||||
|
const navigate = useNavigate();
|
||||||
|
const app = useContext(AppContext);
|
||||||
|
|
||||||
|
console.log(data.state);
|
||||||
|
console.log(guid);
|
||||||
|
|
||||||
|
const updateState = (value) => {
|
||||||
|
setState((s) => ({ ...s, ...value }));
|
||||||
|
}
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
close: () => {
|
||||||
|
navigate('/user')
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
}, [app])
|
||||||
|
|
||||||
|
return { state, actions };
|
||||||
|
}
|
@ -6,7 +6,6 @@ import { Registry } from './Registry/Registry';
|
|||||||
export function Cards({ showRegistry }) {
|
export function Cards({ showRegistry }) {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("HERE", showRegistry);
|
|
||||||
}, [showRegistry]);
|
}, [showRegistry]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -18,7 +17,7 @@ export function Cards({ showRegistry }) {
|
|||||||
visible={showRegistry}
|
visible={showRegistry}
|
||||||
getContainer={false}
|
getContainer={false}
|
||||||
contentWrapperStyle={{ width: '100%' }}
|
contentWrapperStyle={{ width: '100%' }}
|
||||||
bodyStyle={{ backgroundColor: '#f6f5ed', padding: 16 }}
|
bodyStyle={{ backgroundColor: '#f6f5ed', paddingLeft: 16, paddingRight: 16, paddingTop: 16, paddingBottom: 0 }}
|
||||||
style={{ position: 'absolute' }}
|
style={{ position: 'absolute' }}
|
||||||
>
|
>
|
||||||
<Registry />
|
<Registry />
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { RegistryWrapper } from './Registry.styled';
|
import { RegistryWrapper, RegistryItem } from './Registry.styled';
|
||||||
import { useRegistry } from './useRegistry.hook';
|
import { useRegistry } from './useRegistry.hook';
|
||||||
import { Button, Input, List } from 'antd';
|
import { Button, Input, List } from 'antd';
|
||||||
import { Logo } from '../../../../../Logo/Logo';
|
import { Logo } from '../../../../../Logo/Logo';
|
||||||
@ -9,6 +9,10 @@ export function Registry() {
|
|||||||
|
|
||||||
const { state, actions } = useRegistry();
|
const { state, actions } = useRegistry();
|
||||||
|
|
||||||
|
const onSelect = (item) => {
|
||||||
|
actions.select(item);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RegistryWrapper>
|
<RegistryWrapper>
|
||||||
<Input.Search placeholder="Server" value={state.server} onChange={(e) => actions.setServer(e.target.Value)}
|
<Input.Search placeholder="Server" value={state.server} onChange={(e) => actions.setServer(e.target.Value)}
|
||||||
@ -18,19 +22,20 @@ export function Registry() {
|
|||||||
locale={{ emptyText: '' }}
|
locale={{ emptyText: '' }}
|
||||||
itemLayout="horizontal"
|
itemLayout="horizontal"
|
||||||
dataSource={state.profiles}
|
dataSource={state.profiles}
|
||||||
|
gutter="0"
|
||||||
renderItem={item => (
|
renderItem={item => (
|
||||||
<List.Item>
|
<RegistryItem onClick={() => onSelect(item)}>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<Logo imageUrl={actions.getRegistryImageUrl(item.guid, item.revision)}
|
<Logo imageUrl={actions.getRegistryImageUrl(item.guid, item.revision)}
|
||||||
imageSet={item.imageSet} />
|
imageSet={item.imageSet} />
|
||||||
</div>
|
</div>
|
||||||
<div class="username">
|
<div class="username">
|
||||||
<span class="name">{ item.name }</span>
|
|
||||||
<span class="handle">{ item.handle }</span>
|
<span class="handle">{ item.handle }</span>
|
||||||
|
<span class="name">{ item.name }</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</List.Item>
|
</RegistryItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
|
import { List } from 'antd';
|
||||||
|
|
||||||
export const RegistryWrapper = styled.div`
|
export const RegistryWrapper = styled.div`
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -15,14 +16,13 @@ export const RegistryWrapper = styled.div`
|
|||||||
background-color: #fefefe;
|
background-color: #fefefe;
|
||||||
border-radius-bottom-right: 8px;
|
border-radius-bottom-right: 8px;
|
||||||
border-radius-bottom-left: 8px;
|
border-radius-bottom-left: 8px;
|
||||||
height: calc(100vh - 174px);
|
height: calc(100vh - 175px);
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
padding-left: 16px;
|
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ export const RegistryWrapper = styled.div`
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
text-align: left;
|
text-align: right;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,3 +51,14 @@ export const RegistryWrapper = styled.div`
|
|||||||
|
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const RegistryItem = styled(List.Item)`
|
||||||
|
padding-left: 16px;
|
||||||
|
padding-right: 16px;
|
||||||
|
padding-top: 4px;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
background-color: #eeeeee;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ export function useRegistry() {
|
|||||||
profiles: [],
|
profiles: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const navigate = useNavigate();
|
||||||
const app = useContext(AppContext);
|
const app = useContext(AppContext);
|
||||||
|
|
||||||
const updateState = (value) => {
|
const updateState = (value) => {
|
||||||
@ -33,7 +34,6 @@ export function useRegistry() {
|
|||||||
try {
|
try {
|
||||||
let profiles = await app.actions.getRegistry(state.server)
|
let profiles = await app.actions.getRegistry(state.server)
|
||||||
updateState({ profiles: profiles });
|
updateState({ profiles: profiles });
|
||||||
console.log(profiles);
|
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
window.alert(err)
|
window.alert(err)
|
||||||
@ -42,6 +42,9 @@ console.log(profiles);
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
getRegistryImageUrl: (guid, revision) => app.actions.getRegistryImageUrl(state.server, guid, revision),
|
getRegistryImageUrl: (guid, revision) => app.actions.getRegistryImageUrl(state.server, guid, revision),
|
||||||
|
select: (contact) => {
|
||||||
|
navigate(`/user/contact/${contact.guid}`, { state: contact });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return { state, actions };
|
return { state, actions };
|
||||||
|
@ -5,7 +5,7 @@ import { useContacts } from './useContacts.hook';
|
|||||||
import { Tabs, Button, Tooltip } from 'antd';
|
import { Tabs, Button, Tooltip } from 'antd';
|
||||||
import { Cards } from './Cards/Cards';
|
import { Cards } from './Cards/Cards';
|
||||||
import { Channels } from './Channels/Channels';
|
import { Channels } from './Channels/Channels';
|
||||||
import { UserAddOutlined, CommentOutlined } from '@ant-design/icons';
|
import { TeamOutlined, CommentOutlined } from '@ant-design/icons';
|
||||||
|
|
||||||
const { TabPane } = Tabs;
|
const { TabPane } = Tabs;
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ export function Contacts() {
|
|||||||
|
|
||||||
const addUser = (
|
const addUser = (
|
||||||
<Tooltip placement="right" title="Add Contact">
|
<Tooltip placement="right" title="Add Contact">
|
||||||
<AddButton type="primary" onClick={() => onShowRegistry()} icon={<UserAddOutlined />} />
|
<AddButton type="primary" onClick={() => onShowRegistry()} icon={<TeamOutlined />} />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user