bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/note/service.js
2021-04-26 20:04:34 -03:00

122 lines
3.1 KiB
JavaScript

import Users from '/imports/api/users';
import Meetings from '/imports/api/meetings';
import Note from '/imports/api/note';
import Auth from '/imports/ui/services/auth';
import Settings from '/imports/ui/services/settings';
import { Session } from 'meteor/session';
const NOTE_CONFIG = Meteor.settings.public.note;
const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator;
const getNoteId = () => {
const note = Note.findOne({ meetingId: Auth.meetingID }, { fields: { noteId: 1 } });
return note ? note.noteId : '';
};
const getReadOnlyNoteId = () => {
const note = Note.findOne({ meetingId: Auth.meetingID }, { fields: { readOnlyNoteId: 1 } });
return note ? note.readOnlyNoteId : '';
};
const getLang = () => {
const { locale } = Settings.application;
return locale ? locale.toLowerCase() : '';
};
const getNoteParams = () => {
const config = {};
const User = Users.findOne({ userId: Auth.userID }, { fields: { name: 1 } });
config.userName = User.name;
config.lang = getLang();
config.rtl = document.documentElement.getAttribute('dir') === 'rtl';
const params = [];
Object.keys(config).forEach((k) => {
params.push(`${k}=${encodeURIComponent(config[k])}`);
});
return params.join('&');
};
const isLocked = () => {
const meeting = Meetings.findOne({ meetingId: Auth.meetingID }, { fields: { 'lockSettingsProps.disableNote': 1 } });
const user = Users.findOne({ userId: Auth.userID }, { fields: { locked: 1, role: 1 } });
if (meeting.lockSettingsProps && user.role !== ROLE_MODERATOR) {
return meeting.lockSettingsProps.disableNote;
}
return false;
};
const getReadOnlyURL = () => {
const readOnlyNoteId = getReadOnlyNoteId();
const params = getNoteParams();
const url = Auth.authenticateURL(`${NOTE_CONFIG.url}/p/${readOnlyNoteId}?${params}`);
return url;
};
const getNoteURL = () => {
const noteId = getNoteId();
const params = getNoteParams();
const url = Auth.authenticateURL(`${NOTE_CONFIG.url}/p/${noteId}?${params}`);
return url;
};
const getRevs = () => {
const note = Note.findOne({ meetingId: Auth.meetingID }, { fields: { revs: 1 } });
return note ? note.revs : 0;
};
const getLastRevs = () => {
const lastRevs = Session.get('noteLastRevs');
if (!lastRevs) return -1;
return lastRevs;
};
const setLastRevs = (revs) => {
const lastRevs = getLastRevs();
if (revs !== 0 && revs > lastRevs) {
Session.set('noteLastRevs', revs);
}
};
const isPanelOpened = () => Session.get('openPanel') === 'note';
const hasUnreadNotes = () => {
const opened = isPanelOpened();
if (opened) return false;
const revs = getRevs();
const lastRevs = getLastRevs();
return (revs !== 0 && revs > lastRevs);
};
const isEnabled = () => {
const note = Note.findOne({ meetingId: Auth.meetingID });
return NOTE_CONFIG.enabled && note;
};
const toggleNotePanel = () => {
Session.set(
'openPanel',
isPanelOpened() ? 'userlist' : 'note',
);
window.dispatchEvent(new Event('panelChanged'));
};
export default {
getNoteURL,
getReadOnlyURL,
toggleNotePanel,
isLocked,
isEnabled,
isPanelOpened,
getRevs,
setLastRevs,
getLastRevs,
hasUnreadNotes,
};