From 2d01eca511d358f72578bba38e6baef0f0b50a77 Mon Sep 17 00:00:00 2001 From: Sukhamjot Singh Date: Thu, 9 Jun 2022 12:07:15 +0530 Subject: [PATCH] forums subscribe fix --- webui-src/app/channels/channel.css | 4 ++ webui-src/app/channels/channels_util.js | 4 +- webui-src/app/forums/forums.css | 9 ++- webui-src/app/forums/forums.js | 60 +++++++++++-------- webui-src/app/forums/forums_util.js | 70 +++++++++++++++++++++-- webui-src/app/forums/subscribed_forums.js | 36 ++++++++++-- 6 files changed, 144 insertions(+), 39 deletions(-) diff --git a/webui-src/app/channels/channel.css b/webui-src/app/channels/channel.css index 050396c..cf6765c 100644 --- a/webui-src/app/channels/channel.css +++ b/webui-src/app/channels/channel.css @@ -46,4 +46,8 @@ img.channelpic { } .p{ margin:0; +} +#toggleunsub{ + position: relative; + background: gray; } \ No newline at end of file diff --git a/webui-src/app/channels/channels_util.js b/webui-src/app/channels/channels_util.js index 0766f40..80b5f5f 100644 --- a/webui-src/app/channels/channels_util.js +++ b/webui-src/app/channels/channels_util.js @@ -86,7 +86,6 @@ const MessageView = () => { return { oninit: (v) => { if (Data.DisplayChannels[v.attrs.id]) { - console.log(Data.DisplayChannels[v.attrs.id].all); cname = Data.DisplayChannels[v.attrs.id].name; cimage = Data.DisplayChannels[v.attrs.id].image; if (rs.userList.userMap[Data.DisplayChannels[v.attrs.id].author]) { @@ -146,11 +145,12 @@ const MessageView = () => { csubscribed ? 'Subscribed' : 'Subscribe' ), m( - 'button', + 'button[id=toggleunsub]', { style: 'display:' + (toggleUnsubscribe ? 'block' : 'none'), onclick: () => { if (csubscribed) { + console.log(csubscribed); rs.rsJsonApiRequest( '/rsgxschannels/subscribeToChannel', { diff --git a/webui-src/app/forums/forums.css b/webui-src/app/forums/forums.css index 3fc614f..3b93d22 100644 --- a/webui-src/app/forums/forums.css +++ b/webui-src/app/forums/forums.css @@ -1,7 +1,7 @@ .forums-node-panel { position: relative; bottom: 100px; - margin-left: 200px; + margin-left: 300px; animation: fadein 0.5s; } @@ -36,8 +36,13 @@ table.forums tr.hidden{ #forumdetails{ position: relative; - margin-left: auto; + margin-left: 10px; + padding: 10px; } .p{ margin:0; +} +#toggleunsub{ + position: relative; + background: gray; } \ No newline at end of file diff --git a/webui-src/app/forums/forums.js b/webui-src/app/forums/forums.js index 9f3efef..402a597 100644 --- a/webui-src/app/forums/forums.js +++ b/webui-src/app/forums/forums.js @@ -3,16 +3,19 @@ const widget = require('widgets'); const rs = require('rswebui'); const util = require('forums/forums_util'); -const getForums = -{ - PopularForums : [], - load(){ - - rs.rsJsonApiRequest('/rsgxsforums/getForumsSummaries', {}, (data) => { - getForums.PopularForums = data.forums; - console.log(getForums.PopularForums); +const getForums = { + All: [], + PopularForums: [], + SubscribedForums: [], + async load() { + await rs.rsJsonApiRequest('/rsgxsforums/getForumsSummaries', {}, (data) => { + getForums.All = data.forums; + getForums.PopularForums = getForums.All; + getForums.SubscribedForums = getForums.All.filter( + (forum) => forum.mSubscribeFlags === util.GROUP_SUBSCRIBE_SUBSCRIBED + ); }); - } + }, }; const sections = { MyForums: require('forums/my_forums'), @@ -22,36 +25,43 @@ const sections = { }; const Layout = { - oninit: getForums.load, + // oninit : getForums.load, + onupdate: getForums.load, view: (vnode) => m('.tab-page', [ m(util.SearchBar, { - list: getForums.PopularForums + list: getForums.All, }), m(widget.Sidebar, { tabs: Object.keys(sections), baseRoute: '/forums/', }), - m('.forums-node-panel', vnode.children), + m( + '.forum-node-panel', + + vnode.attrs.check + ? m(util.MessageView, { + id: vnode.attrs.id, + }) + : m(sections[vnode.attrs.tab], { + list: getForums[vnode.attrs.tab], + }) + ), ]), }; module.exports = { view: (vnode) => { - const tab = vnode.attrs.tab; if (Object.prototype.hasOwnProperty.call(vnode.attrs, 'mGroupId')) { - return m( - Layout, - m(util.MessageView, { - id: vnode.attrs.mGroupId, - }) - ); + return m(Layout, { + check: true, // for forum description + id: vnode.attrs.mGroupId, + }); } - return m( - Layout, - m((sections[tab]), { - list: getForums.PopularForums, - }), - ); + return m(Layout, { + check: false, + tab: vnode.attrs.tab, + }); + // this check is implemented for Layout and helps to send in updated list each time. }, }; diff --git a/webui-src/app/forums/forums_util.js b/webui-src/app/forums/forums_util.js index 57d1d3a..27fb6b0 100644 --- a/webui-src/app/forums/forums_util.js +++ b/webui-src/app/forums/forums_util.js @@ -1,6 +1,11 @@ const m = require('mithril'); const rs = require('rswebui'); +const GROUP_SUBSCRIBE_ADMIN = 0x01; // means: you have the admin key for this group +const GROUP_SUBSCRIBE_PUBLISH = 0x02; // means: you have the publish key for thiss group. Typical use: publish key in forums are shared with specific friends. +const GROUP_SUBSCRIBE_SUBSCRIBED = 0x04; // means: you are subscribed to a group, which makes you a source for this group to your friend nodes. +const GROUP_SUBSCRIBE_NOT_SUBSCRIBED = 0x08; + const Data = { DisplayForums: {}, }; @@ -14,7 +19,6 @@ async function updateDisplayForums(keyid, details = {}) { }, (data) => { details = data.forumsInfo[0]; - // console.log(details); } ) .then(() => { @@ -23,6 +27,7 @@ async function updateDisplayForums(keyid, details = {}) { name: details.mMeta.mGroupName, isSearched: true, description: details.mDescription, + isSubscribed: details.mMeta.mSubscribeFlags === GROUP_SUBSCRIBE_SUBSCRIBED, }; } }); @@ -65,11 +70,14 @@ const ForumSummary = () => { }; const MessageView = () => { - let cname = ''; + let fname = ''; + let fsubscribed = {}; + let toggleUnsubscribe = false; return { oninit: (v) => { if (Data.DisplayForums[v.attrs.id]) { - cname = Data.DisplayForums[v.attrs.id].name; + fname = Data.DisplayForums[v.attrs.id].name; + fsubscribed = Data.DisplayForums[v.attrs.id].isSubscribed; } }, view: (v) => @@ -89,7 +97,57 @@ const MessageView = () => { }, m('i.fas.fa-arrow-left') ), - m('h3', cname), + m( + 'button', + { + onclick: () => { + if (!fsubscribed) { + rs.rsJsonApiRequest( + '/rsgxsforums/subscribeToForum', + { + forumId: v.attrs.id, + subscribe: true, + }, + (data) => { + console.log(data); + } + ).then(() => { + Data.DisplayForums[v.attrs.id].isSubscribed = true; + fsubscribed = true; + }); + } else { + toggleUnsubscribe = !toggleUnsubscribe; + } + }, + }, + fsubscribed ? 'Subscribed' : 'Subscribe' + ), + m( + 'button[id=toggleunsub]', + { + style: 'display:' + (toggleUnsubscribe ? 'block' : 'none'), + onclick: () => { + if (fsubscribed) { + rs.rsJsonApiRequest( + '/rsgxsforums/subscribeToForum', + { + forumId: v.attrs.id, + subscribe: false, + }, + (data) => { + console.log(data); + } + ).then(() => { + Data.DisplayForums[v.attrs.id].isSubscribed = false; + fsubscribed = false; + toggleUnsubscribe = false; + }); + } + }, + }, + 'Unsubscribe?' + ), + m('h3', fname), m('[id=forumdetails]', [ m('p', m('b', 'Posts: '), 'posts'), m('p', m('b', 'Date created: '), '1/1/11'), @@ -154,4 +212,8 @@ module.exports = { MessageView, DisplayForumsFromList, Table, + GROUP_SUBSCRIBE_ADMIN, + GROUP_SUBSCRIBE_NOT_SUBSCRIBED, + GROUP_SUBSCRIBE_PUBLISH, + GROUP_SUBSCRIBE_SUBSCRIBED, }; diff --git a/webui-src/app/forums/subscribed_forums.js b/webui-src/app/forums/subscribed_forums.js index 9a90f57..9d817d2 100644 --- a/webui-src/app/forums/subscribed_forums.js +++ b/webui-src/app/forums/subscribed_forums.js @@ -1,11 +1,35 @@ const m = require('mithril'); +const util = require('forums/forums_util'); const Layout = () => { - return{ - view: () => [ - m('.widget', [m('h2', 'Subscribed Forums'), m('hr'), ]) - ] - }; + return { + view: (v) => [ + m('.widget', [ + m('h3', 'Subscribed Forums'), + m('hr'), + m( + util.Table, + m( + 'tbody', + [v.attrs.list.map((forum) => + m(util.ForumSummary, { + details: forum, + category: 'SubscribedForums', + }), + ), + v.attrs.list.map((forum) => + m(util.DisplayForumsFromList, { + id: forum.mGroupId, + category: 'SubscribedForums', + }), + ), + ] + ) + ), + ]), + ], + }; }; -module.exports = Layout(); +module.exports = Layout; +