overleaf/services/web/frontend/js/ide/review-panel/directives/resolvedCommentsDropdown.js

110 lines
3.1 KiB
JavaScript
Raw Normal View History

import _ from 'lodash'
/* eslint-disable
max-len,
no-return-assign,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS205: Consider reworking code to avoid use of IIFEs
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
import App from '../../../base'
export default App.directive('resolvedCommentsDropdown', () => ({
restrict: 'E',
templateUrl: 'resolvedCommentsDropdownTemplate',
scope: {
entries: '=',
threads: '=',
resolvedIds: '=',
docs: '=',
permissions: '=',
onOpen: '&',
onUnresolve: '&',
onDelete: '&',
isLoading: '=',
},
link(scope, element, attrs) {
let filterResolvedComments
scope.state = { isOpen: false }
scope.toggleOpenState = function () {
scope.state.isOpen = !scope.state.isOpen
if (scope.state.isOpen) {
return scope.onOpen().then(() => filterResolvedComments())
}
}
scope.resolvedComments = []
scope.handleUnresolve = function (threadId) {
scope.onUnresolve({ threadId })
return (scope.resolvedComments = scope.resolvedComments.filter(
c => c.threadId !== threadId
))
}
scope.handleDelete = function (entryId, docId, threadId) {
scope.onDelete({ entryId, docId, threadId })
return (scope.resolvedComments = scope.resolvedComments.filter(
c => c.threadId !== threadId
))
}
const getDocNameById = function (docId) {
const doc = _.find(scope.docs, doc => doc.doc.id === docId)
if (doc != null) {
return doc.path
} else {
return null
}
}
return (filterResolvedComments = function () {
scope.resolvedComments = []
return (() => {
const result = []
for (const docId in scope.entries) {
const docEntries = scope.entries[docId]
result.push(
(() => {
const result1 = []
for (const entryId in docEntries) {
const entry = docEntries[entryId]
if (
entry.type === 'comment' &&
(scope.threads[entry.thread_id] != null
? scope.threads[entry.thread_id].resolved
: undefined) != null
) {
const resolvedComment = angular.copy(
scope.threads[entry.thread_id]
)
resolvedComment.content = entry.content
resolvedComment.threadId = entry.thread_id
resolvedComment.entryId = entryId
resolvedComment.docId = docId
resolvedComment.docName = getDocNameById(docId)
result1.push(scope.resolvedComments.push(resolvedComment))
} else {
result1.push(undefined)
}
}
return result1
})()
)
}
return result
})()
})
},
}))