bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/note/service.js

128 lines
3.1 KiB
JavaScript
Raw Normal View History

import Users from '/imports/ui/local-collections/users-collection/users';
import Meetings from '/imports/ui/local-collections/meetings-collection/meetings';
import Note from '/imports/api/note';
import { makeCall } from '/imports/ui/services/api';
2018-12-13 04:10:27 +08:00
import Auth from '/imports/ui/services/auth';
import Settings from '/imports/ui/services/settings';
2019-06-01 04:02:33 +08:00
import { Session } from 'meteor/session';
2021-05-18 04:25:07 +08:00
import { ACTIONS, PANELS } from '../layout/enums';
2018-12-13 04:10:27 +08:00
const NOTE_CONFIG = Meteor.settings.public.note;
const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator;
2018-12-13 04:10:27 +08:00
const getLang = () => {
2019-05-09 04:34:19 +08:00
const { locale } = Settings.application;
return locale ? locale.toLowerCase() : '';
2018-12-13 04:10:27 +08:00
};
const getNoteParams = () => {
const config = {};
const User = Users.findOne({ userId: Auth.userID }, { fields: { name: 1 } });
2019-01-10 02:09:05 +08:00
config.userName = User.name;
2018-12-13 04:10:27 +08:00
config.lang = getLang();
config.rtl = document.documentElement.getAttribute('dir') === 'rtl';
2018-12-13 04:10:27 +08:00
const params = Object.keys(config)
.map((key) => `${key}=${encodeURIComponent(config[key])}`)
.join('&');
2021-05-18 04:25:07 +08:00
return params;
};
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 &&
user.locked
) {
return meeting.lockSettingsProps.disableNote;
}
return false;
};
const getNoteId = () => makeCall('getNoteId');
const buildNoteURL = (noteId) => {
if (noteId) {
const params = getNoteParams();
const url = Auth.authenticateURL(
`${NOTE_CONFIG.url}/p/${noteId}?${params}`
);
return url;
}
2018-12-13 04:10:27 +08:00
return null;
2018-12-13 04:10:27 +08:00
};
2019-06-01 04:02:33 +08:00
const getRevs = () => {
const note = Note.findOne(
{ meetingId: Auth.meetingID },
{ fields: { revs: 1 } }
);
2019-06-01 04:02:33 +08:00
return note ? note.revs : 0;
};
const getLastRevs = () => {
const lastRevs = Session.get('noteLastRevs');
if (!lastRevs) return -1;
return lastRevs;
};
const setLastRevs = () => {
const revs = getRevs();
2019-12-17 05:06:41 +08:00
const lastRevs = getLastRevs();
if (revs !== 0 && revs > lastRevs) {
Session.set('noteLastRevs', revs);
}
};
2021-05-18 04:25:07 +08:00
const hasUnreadNotes = (sidebarContentPanel) => {
if (sidebarContentPanel === PANELS.SHARED_NOTES) return false;
2019-12-17 05:06:41 +08:00
const revs = getRevs();
const lastRevs = getLastRevs();
return revs !== 0 && revs > lastRevs;
};
2019-12-17 05:06:41 +08:00
const isEnabled = () => {
const note = Note.findOne({ meetingId: Auth.meetingID });
return NOTE_CONFIG.enabled && note;
};
2021-08-05 19:03:24 +08:00
const toggleNotePanel = (sidebarContentPanel, layoutContextDispatch) => {
layoutContextDispatch({
2021-05-18 04:25:07 +08:00
type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN,
value: sidebarContentPanel !== PANELS.SHARED_NOTES,
});
2021-08-05 19:03:24 +08:00
layoutContextDispatch({
2021-05-18 04:25:07 +08:00
type: ACTIONS.SET_SIDEBAR_CONTENT_PANEL,
value:
sidebarContentPanel === PANELS.SHARED_NOTES
? PANELS.NONE
: PANELS.SHARED_NOTES,
2021-05-18 04:25:07 +08:00
});
2020-02-07 03:46:21 +08:00
};
2018-12-13 04:10:27 +08:00
export default {
getNoteId,
buildNoteURL,
2020-02-07 03:46:21 +08:00
toggleNotePanel,
isLocked,
isEnabled,
2019-06-01 04:02:33 +08:00
getRevs,
2019-12-17 05:06:41 +08:00
setLastRevs,
getLastRevs,
hasUnreadNotes,
2018-12-13 04:10:27 +08:00
};