RSNewWebUI/webui-src/app/network/network.js
Avinash Kumar 53fa5aeec4
UI improvement && logic code for people Webpage (#33)
* fix checkout alignmnet

* fixed create identity issue

* added logic for edit identity as well as create identity

* final changes

* UX changes

* minor fixes

* Signed Create identity is working now

* minor changes

* friend node profile pic is aligned now

* People->Edit && create identity popup responsive

* updated & refactor code

* changes added

* Update people_ownids.js

* Update people_util.js

* feat: people Web page  UI

* minor-fix

* fix prettier & eslint issue

* updated changes

* updated changes

* minor fix

* update changes
2021-04-27 00:08:15 +05:30

150 lines
3.6 KiB
JavaScript

const m = require('mithril');
const rs = require('rswebui');
const widget = require('widgets');
const Data = require('network/network_data');
const ConfirmRemove = () => {
return {
view: (vnode) => [
m('h3', 'Remove Friend'),
m('hr'),
m('p', 'Are you sure you want to end connections with this node?'),
m(
'button',
{
onclick: () => {
rs.rsJsonApiRequest('/rsPeers/removeFriend', {
pgpId: vnode.attrs.gpg_id,
});
m.redraw();
},
},
'Confirm'
),
],
};
};
const Locations = () => {
return {
view: (v) => [
m('h4', 'Locations'),
v.attrs.locations.map((loc) =>
m('.location', [
m('i.fas.fa-user-tag', { style: 'margin-top:3px' }),
m('span', { style: 'margin-top:1px' }, loc.name),
m('p', 'ID :'),
m('p', loc.id),
m('p', 'Last contacted :'),
m('p', new Date(loc.lastSeen * 1000).toDateString()),
m('p', 'Online :'),
m('i.fas', {
class: loc.isOnline ? 'fa-check-circle' : 'fa-times-circle',
}),
m(
'button.red',
{
onclick: () =>
widget.popupMessage(
m(ConfirmRemove, {
gpg: loc.gpg_id,
})
),
},
'Remove node'
),
])
),
],
};
};
const Friend = () => {
return {
isExpanded: false,
view: (vnode) =>
m(
'.friend',
{
key: vnode.attrs.id,
class: Data.gpgDetails[vnode.attrs.id].isSearched ? '' : 'hidden',
},
[
m('i.fas.fa-angle-right', {
class: 'fa-rotate-' + (vnode.state.isExpanded ? '90' : '0'),
style: 'margin-top:12px',
onclick: () => (vnode.state.isExpanded = !vnode.state.isExpanded),
}),
m('.brief-info', { class: Data.gpgDetails[vnode.attrs.id].isOnline ? 'online' : '' }, [
m('i.fas.fa-2x.fa-user-circle'),
m('span', Data.gpgDetails[vnode.attrs.id].name),
]),
m(
'.details',
{
style: 'display:' + (vnode.state.isExpanded ? 'block' : 'none'),
},
[
m(Locations, {
locations: Data.gpgDetails[vnode.attrs.id].locations,
}),
]
),
]
),
};
};
const SearchBar = () => {
let searchString = '';
return {
view: () =>
m('input.searchbar', {
type: 'text',
placeholder: 'search',
value: searchString,
oninput: (e) => {
searchString = e.target.value.toLowerCase();
for (const id in Data.gpgDetails) {
if (Data.gpgDetails[id].name.toLowerCase().indexOf(searchString) > -1) {
Data.gpgDetails[id].isSearched = true;
} else {
Data.gpgDetails[id].isSearched = false;
}
}
},
}),
};
};
const FriendsList = () => {
return {
oninit: () => {
Data.refreshGpgDetails();
},
view: () =>
m('.widget', [
m('h3', 'Friend nodes'),
m('hr'),
Object.entries(Data.gpgDetails)
.sort((a, b) => {
return a[1].isOnline === b[1].isOnline ? 0 : a[1].isOnline ? -1 : 1;
})
.map((item) => {
const id = item[0];
return m(Friend, { id });
}),
]),
};
};
const Layout = () => {
return {
view: () => m('.tab-page', [m(SearchBar), m(FriendsList)]),
};
};
module.exports = Layout;