/home/ivoiecob/email.hirewise-va.com/modules/MailNotesPlugin/js/manager.js
'use strict';
module.exports = function (oAppData) {
const
_ = require('underscore'),
ko = require('knockout'),
TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'),
App = require('%PathToCoreWebclientModule%/js/App.js'),
ModulesManager = require('%PathToCoreWebclientModule%/js/ModulesManager.js'),
Settings = require('modules/%ModuleName%/js/Settings.js'),
sNotesFolderName = 'Notes',
CHeaderItemView = require('%PathToCoreWebclientModule%/js/views/CHeaderItemView.js'),
headerItem = new CHeaderItemView(TextUtils.i18n('%MODULENAME%/LABEL_FOLDER_NOTES')),
notesFullHash = ko.observable(null),
mailFullHash = ko.observable(null),
headerItemData = {
item: headerItem,
name: Settings.HashModuleName,
}
;
let sNotesFullName = sNotesFolderName
Settings.init(oAppData)
function getHeaderItemHashes() {
try {
const { HashModuleName } = ModulesManager.run('MailWebclient', 'getSettings')
const accountHash = ModulesManager.run('MailWebclient', 'getAccountList').getCurrent().hash()
return {
'mail': `#${HashModuleName || 'mail'}/${accountHash}/INBOX`,
'notes': `#${HashModuleName || 'mail'}/${accountHash}/${sNotesFullName}`
}
} catch (error) {
return null
}
}
function setNotesFolder(koFolderList) {
const sNameSpace = koFolderList().sNamespaceFolder
const sDelimiter = koFolderList().sDelimiter
if (sNameSpace !== '') {
sNotesFullName = sNameSpace + sDelimiter + sNotesFolderName
} else {
sNotesFullName = sNotesFolderName
}
const oNotesFolder = koFolderList().getFolderByFullName(sNotesFullName)
if (oNotesFolder) {
oNotesFolder.displayName = ko.observable(TextUtils.i18n('%MODULENAME%/LABEL_FOLDER_NOTES'))
oNotesFolder.usedAs = ko.observable(TextUtils.i18n('%MODULENAME%/LABEL_USED_AS_NOTES'))
}
}
if (App.isUserNormalOrTenant()) {
const oModule = {
start: function (oModulesManager) {
$('html').addClass('MailNotesPlugin')
// If separate Notes button is enabled, then getting the Notes folder full hash for tabsbar
if (Settings.DisplayNotesButton) {
const mailCache = ModulesManager.run('MailWebclient', 'getMailCache')
setNotesFolder(mailCache.folderList)
// TODO: uncomment when module supports opening create form by direct link
// notesFullHash(getHeaderItemHashes());
mailCache.folderList.subscribe(() => {
const fullHashes = getHeaderItemHashes()
if (fullHashes?.notes) {
headerItem.hash(fullHashes.notes)
notesFullHash(fullHashes.notes)
mailFullHash(fullHashes.mail)
}
})
}
// attempt to register a Create Note button
App.broadcastEvent('RegisterNewItemElement', {
'title': TextUtils.i18n('%MODULENAME%/ACTION_NEW_NOTE'),
'handler': () => {
window.location.hash = '#mail'
if (notesFullHash()) {
window.location.hash = notesFullHash() + '/custom%3Acreate-note'
} else {
const notesFullPathSubscribtion = notesFullHash.subscribe(function () {
window.location.hash = notesFullHash() + '/custom%3Acreate-note'
notesFullPathSubscribtion.dispose()
})
}
},
'className': 'item_notes',
'order': 2,
'column': 1
})
App.subscribeEvent('MailWebclient::ConstructView::before', function (oParams) {
if (oParams.Name === 'CMailView')
{
const
koFolderList = oParams.MailCache.folderList,
koCurrentFolder = ko.computed(function () {
return oParams.MailCache.folderList().currentFolder()
}),
CMessagePaneView = require('modules/%ModuleName%/js/views/CMessagePaneView.js'),
oMessagePane = new CMessagePaneView(oParams.MailCache, _.bind(oParams.View.routeMessageView, oParams.View))
;
setNotesFolder(koFolderList)
koFolderList.subscribe(function () {
setNotesFolder(koFolderList)
});
koCurrentFolder.subscribe(function () {
const sFullName = koCurrentFolder() ? koCurrentFolder().fullName() : ''
if (sFullName === sNotesFullName) {
oParams.View.setCustomPreviewPane('%ModuleName%', oMessagePane)
oParams.View.setCustomBigButton('%ModuleName%', function () {
oModulesManager.run('MailWebclient', 'setCustomRouting', [sFullName, 1, '', '', '', 'create-note'])
}, TextUtils.i18n('%MODULENAME%/ACTION_NEW_NOTE'))
oParams.View.resetDisabledTools('%ModuleName%', ['spam', 'move', 'mark'])
} else {
oParams.View.removeCustomPreviewPane('%ModuleName%')
oParams.View.removeCustomBigButton('%ModuleName%')
oParams.View.resetDisabledTools('%ModuleName%', [])
}
})
}
})
App.subscribeEvent('MailWebclient::ConstructView::after', function (oParams) {
if (oParams.Name === 'CMessageListView' && oParams.MailCache) {
const koCurrentFolder = ko.computed(function () {
return oParams.MailCache.folderList().currentFolder();
})
koCurrentFolder.subscribe(function () {
const sFullName = koCurrentFolder() ? koCurrentFolder().fullName() : ''
if (sFullName === sNotesFullName) {
oParams.View.customMessageItemViewTemplate('%ModuleName%_MessageItemView')
} else {
oParams.View.customMessageItemViewTemplate('')
}
})
}
})
App.subscribeEvent('MailWebclient::MessageDblClick::before', _.bind(function (oParams) {
if (oParams.Message && oParams.Message.folder() === sNotesFullName) {
oParams.Cancel = true
}
}, this))
},
}
// Adding Notes button to tabsbar if it's needed
if (Settings.DisplayNotesButton) {
oModule.getHeaderItem = function () {
try {
const fullHashes = getHeaderItemHashes()
headerItem.baseHash(fullHashes?.notes)
return headerItemData
} catch (error) {
return null
}
}
// getting MailWebclient's HeaderItemView and overriding excludedHashes and mainHref properties
App.subscribeEvent('MailWebclient::GetHeaderItemView', function (params) {
const mailHeaderItem = require('modules/MailWebclient/js/views/HeaderItemView.js')
mailHeaderItem.excludedHashes = function () {
return notesFullHash() ? [notesFullHash()] : []
}
mailHeaderItem.mainHref = ko.computed(function () {
return mailHeaderItem.isCurrent() ? 'javascript: void(0);' : mailFullHash()
}, this)
params.HeaderItemView = mailHeaderItem
})
}
return oModule
}
return null
}