RSNewWebUI/webui-src/app/forums/forums.js
Sukhamjot Singh a6ea4c09c3 Create forums
2022-08-02 16:26:51 +05:30

101 lines
2.7 KiB
JavaScript

const m = require('mithril');
const widget = require('widgets');
const rs = require('rswebui');
const util = require('forums/forums_util');
const viewUtil = require('forums/forum_view');
const peopleUtil = require('people/people_util');
const getForums = {
All: [],
PopularForums: [],
SubscribedForums: [],
MyForums: [],
async load() {
const res = await rs.rsJsonApiRequest('/rsgxsforums/getForumsSummaries');
getForums.All = res.body.forums;
getForums.PopularForums = getForums.All;
getForums.SubscribedForums = getForums.All.filter(
(forum) =>
forum.mSubscribeFlags === util.GROUP_SUBSCRIBE_SUBSCRIBED ||
forum.mSubscribeFlags === util.GROUP_MY_FORUM
);
getForums.MyForums = getForums.All.filter(
(forum) => forum.mSubscribeFlags === util.GROUP_MY_FORUM
);
},
};
const sections = {
MyForums: require('forums/my_forums'),
SubscribedForums: require('forums/subscribed_forums'),
PopularForums: require('forums/popular_forums'),
OtherForums: require('forums/other_forums'),
};
const Layout = () => {
let ownId;
return {
oninit: () => {
rs.setBackgroundTask(getForums.load, 5000, () => {
// return m.route.get() === '/files/files';
});
peopleUtil.ownIds((data) => {
ownId = data;
for (let i = 0; i < ownId.length; i++) {
if (Number(ownId[i]) === 0) {
ownId.splice(i, 1);
}
}
ownId.unshift(0);
});
},
view: (vnode) =>
m('.tab-page', [
m(util.SearchBar, {
list: getForums.All,
}),
m(
'button',
{
style: {fontSize: '1.2em', width: '200px'},
onclick: () =>
util.popupmessage(
m(viewUtil.addpost, {
authorId: ownId,
})
),
},
'Create Forum'
),
m(widget.Sidebar, {
tabs: Object.keys(sections),
baseRoute: '/forums/',
}),
m(
'.forums-node-panel',
Object.prototype.hasOwnProperty.call(vnode.attrs.pathInfo, 'mMsgId')
? m(viewUtil.ThreadView, {
msgId: vnode.attrs.pathInfo.mMsgId,
forumId: vnode.attrs.pathInfo.mGroupId,
})
: Object.prototype.hasOwnProperty.call(vnode.attrs.pathInfo, 'mGroupId')
? m(viewUtil.ForumView, {
id: vnode.attrs.pathInfo.mGroupId,
})
: m(sections[vnode.attrs.pathInfo.tab], {
list: getForums[vnode.attrs.pathInfo.tab],
})
),
]),
};
};
module.exports = {
view: (vnode) => {
return m(Layout, {
pathInfo: vnode.attrs,
});
},
};