mirror of
https://github.com/RetroShare/RSNewWebUI.git
synced 2026-09-14 11:05:47 +05:00
134 lines
4.8 KiB
JavaScript
134 lines
4.8 KiB
JavaScript
const m = require('mithril');
|
|
const Data = require('network/network_data');
|
|
const compose = require('mail/mail_compose');
|
|
const {
|
|
State,
|
|
loadOwnProfile,
|
|
loadGxsIdentities,
|
|
fetchIdDetails,
|
|
startDirectChat,
|
|
getOnlineSslId,
|
|
preloadNetworkChatHistory,
|
|
loadDirectChatMessages,
|
|
markDirectChatRead,
|
|
} = require('network/network_state');
|
|
const { OwnProfileCard, FriendsList } = require('network/network_friends_list');
|
|
const DetailsTab = require('network/network_details_tab');
|
|
const ChatTab = require('network/network_chat_tab');
|
|
const NetworkGraph = require('network/network_graph');
|
|
|
|
const NetworkLayout = () => {
|
|
return {
|
|
oninit: () => {
|
|
// Keep the active-chat list current even when no conversation is open.
|
|
loadDirectChatMessages();
|
|
Data.refreshGpgDetails().then(() => {
|
|
preloadNetworkChatHistory();
|
|
m.redraw();
|
|
});
|
|
loadOwnProfile();
|
|
loadGxsIdentities();
|
|
},
|
|
view: () => {
|
|
const selectedFriend = State.selectedFriendGpgId
|
|
? Data.gpgDetails[State.selectedFriendGpgId]
|
|
: null;
|
|
|
|
const selectedGxsId = State.selectedFriendGpgId
|
|
? State.gpgToGxsIdMap[State.selectedFriendGpgId.toLowerCase()]
|
|
: null;
|
|
|
|
if (State.selectedFriendGpgId && !selectedGxsId && State.gxsIdentities) {
|
|
State.gxsIdentities.forEach((gxsId) => fetchIdDetails(gxsId));
|
|
}
|
|
|
|
return m('.network-container' + (State.mobilePane === 'detail' ? '.mobile-detail-open' : ''), [
|
|
m('.network-left-pane', [m(OwnProfileCard), m(FriendsList)]),
|
|
m('.network-right-pane', [
|
|
m('.mobile-pane-header', [
|
|
m('button.mobile-back-button', {
|
|
type: 'button',
|
|
onclick: () => { State.mobilePane = 'list'; },
|
|
}, [m('i.fas.fa-chevron-left'), ' Network']),
|
|
m('strong', State.activeTab === 'graph' ? 'Network Graph' : (selectedFriend ? selectedFriend.name : 'Friend')),
|
|
]),
|
|
m('.network-tabs', [
|
|
m(
|
|
'button.tab-btn' + (State.activeTab === 'details' ? '.active' : ''),
|
|
{
|
|
onclick: () => {
|
|
State.activeTab = 'details';
|
|
State.mobilePane = 'detail';
|
|
},
|
|
},
|
|
'Details View'
|
|
),
|
|
m(
|
|
'button.tab-btn' + (State.activeTab === 'chat' ? '.active' : ''),
|
|
{
|
|
onclick: () => {
|
|
State.activeTab = 'chat';
|
|
State.mobilePane = 'detail';
|
|
markDirectChatRead(State.selectedFriendGpgId);
|
|
const sslId = getOnlineSslId(State.selectedFriendGpgId);
|
|
if (sslId && !State.currentChatPeerId) {
|
|
startDirectChat(sslId);
|
|
}
|
|
},
|
|
},
|
|
'Chat Conversation'
|
|
),
|
|
m(
|
|
'button.tab-btn' + (State.activeTab === 'graph' ? '.active' : ''),
|
|
{ onclick: () => { State.activeTab = 'graph'; State.mobilePane = 'detail'; } },
|
|
[m('i.fas.fa-project-diagram'), ' Network Graph']
|
|
),
|
|
]),
|
|
State.activeTab === 'graph'
|
|
? m('.network-tab-content.network-graph-tab', m(NetworkGraph))
|
|
: selectedFriend
|
|
? m('.network-tab-content' + (State.activeTab === 'chat' ? '.network-chat-tab-content' : ''), [
|
|
State.activeTab === 'details' ? m(DetailsTab) : m(ChatTab),
|
|
])
|
|
: m('.network-pane-placeholder', [
|
|
m('i.fas.fa-network-wired'),
|
|
m(
|
|
'p',
|
|
'Select a friend for details or chat, or open the Network Graph tab.'
|
|
),
|
|
]),
|
|
]),
|
|
State.showMailCompose &&
|
|
State.selectedFriendGpgId &&
|
|
m(
|
|
'.composePopupOverlay#mailComposerPopup',
|
|
{ style: { display: 'block' } },
|
|
m(
|
|
'.composePopup',
|
|
m(compose, {
|
|
msgType: 'compose',
|
|
toId: selectedGxsId || State.selectedFriendGpgId,
|
|
friendName: selectedFriend ? selectedFriend.name : 'Unknown Friend',
|
|
isDirectMail: true,
|
|
setShowCompose: (val) => {
|
|
State.showMailCompose = val;
|
|
},
|
|
}),
|
|
m(
|
|
'button.red.close-btn',
|
|
{
|
|
onclick: () => {
|
|
State.showMailCompose = false;
|
|
},
|
|
},
|
|
m('i.fas.fa-times')
|
|
)
|
|
)
|
|
),
|
|
]);
|
|
},
|
|
};
|
|
};
|
|
|
|
module.exports = NetworkLayout;
|