Added comments to news items

This commit is contained in:
mrfry 2021-03-04 21:31:42 +01:00
parent 7221068cf6
commit 65d4ef3223

View file

@ -1332,7 +1332,9 @@ function GetApp(): ModuleType {
news[newsKey].reacts = { [react]: [user.id] } news[newsKey].reacts = { [react]: [user.id] }
} else { } else {
if (Array.isArray(news[newsKey].reacts[react])) { if (Array.isArray(news[newsKey].reacts[react])) {
news[newsKey].reacts[react].push(user.id) if (!news[newsKey].reacts[react].includes(user.id)) {
news[newsKey].reacts[react].push(user.id)
}
} else { } else {
news[newsKey].reacts[react] = [user.id] news[newsKey].reacts[react] = [user.id]
} }
@ -1350,6 +1352,103 @@ function GetApp(): ModuleType {
res.json({ msg: 'done' }) res.json({ msg: 'done' })
}) })
function addComment(obj, path, comment) {
if (path.length === 0) {
obj.push(comment)
} else {
const i = path.pop()
if (!obj[i].subComments) {
obj[i].subComments = []
}
addComment(obj[i].subComments, path, comment)
}
}
function deleteComment(obj, path) {
if (path.length === 1) {
obj.splice(path[0], 1)
} else {
const i = path.pop()
deleteComment(obj[i].subComments, path)
}
}
function addReactionToComment(obj, path, { reaction, isDelete, uid }) {
if (path.length === 1) {
const index = path[0]
if (!obj[index].reacts) {
obj[index].reacts = {}
}
if (isDelete) {
if (obj[index].reacts[reaction]) {
obj[index].reacts[reaction] = obj[index].reacts[reaction].filter(
(uid) => {
return uid !== uid
}
)
if (obj[index].reacts[reaction].length === 0) {
delete obj[index].reacts[reaction]
}
}
} else {
if (!obj[index].reacts[reaction]) {
obj[index].reacts[reaction] = [uid]
} else {
if (!obj[index].reacts[reaction].includes(uid)) {
obj[index].reacts[reaction].push(uid)
}
}
}
} else {
const i = path.pop()
addReactionToComment(obj[i].subComments, path, {
reaction: reaction,
isDelete: isDelete,
uid: uid,
})
}
}
app.post('/comment', (req: Request, res) => {
logger.LogReq(req)
const user: User = req.session.user
const news: any = utils.ReadJSON(newsFile)
const { type, path, newsKey } = req.body
if (!type || !path || !newsKey) {
res.json({ status: 'fail', msg: ' type or path or newsKey is undefined' })
}
if (type === 'add') {
const { text } = req.body
const comment = {
date: new Date().toLocaleString(),
user: user.id,
text: text,
}
if (!news[newsKey].comments) {
news[newsKey].comments = []
}
addComment(news[newsKey].comments, path, comment)
} else if (type === 'delete') {
if (news[newsKey].comments) {
deleteComment(news[newsKey].comments, path)
}
} else if (type === 'reaction') {
const { reaction, isDelete } = req.body
addReactionToComment(news[newsKey].comments, path, {
reaction: reaction,
isDelete: isDelete,
uid: user.id,
})
} else {
res.json({ status: 'fail', msg: 'no such type' })
}
utils.WriteFile(JSON.stringify(news, null, 2), newsFile)
res.json({ status: 'ok', newNews: news })
})
app.post('/registerscript', function(req: Request, res) { app.post('/registerscript', function(req: Request, res) {
logger.LogReq(req) logger.LogReq(req)