The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/user-status/client/admin/adminUserStatus.js

163 lines
4.2 KiB

import _ from 'underscore';
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
import { FlowRouter } from 'meteor/kadira:flow-router';
import { Tracker } from 'meteor/tracker';
import { TabBar, SideNav, RocketChatTabBar } from '../../../ui-utils';
import { t } from '../../../utils';
import { APIClient } from '../../../utils/client';
const LIST_SIZE = 50;
const DEBOUNCE_TIME_TO_SEARCH_IN_MS = 500;
Template.adminUserStatus.helpers({
searchText() {
const instance = Template.instance();
return instance.filter && instance.filter.get();
},
customUserStatus() {
return Template.instance().statuses.get().map((userStatus) => {
const { _id, name, statusType } = userStatus;
const localizedStatusType = statusType ? t(statusType) : '';
return {
_id,
name,
statusType,
localizedStatusType,
};
});
},
isLoading() {
return Template.instance().isLoading.get();
},
flexData() {
return {
tabBar: Template.instance().tabBar,
data: Template.instance().tabBarData.get(),
};
},
onTableScroll() {
const instance = Template.instance();
return function(currentTarget) {
if (currentTarget.offsetHeight + currentTarget.scrollTop < currentTarget.scrollHeight - 100) {
return;
}
const statuses = instance.statuses.get();
if (instance.total.get() > statuses.length) {
instance.offset.set(instance.offset.get() + LIST_SIZE);
}
};
},
onTableItemClick() {
const instance = Template.instance();
return function(item) {
instance.tabBarData.set({
status: instance.statuses.get().find((status) => status._id === item._id),
onSuccess: instance.onSuccessCallback,
});
instance.tabBar.showGroup('user-status-custom-selected');
instance.tabBar.open('admin-user-status-info');
};
},
});
Template.adminUserStatus.onCreated(function() {
const instance = this;
this.limit = new ReactiveVar(50);
this.filter = new ReactiveVar('');
this.ready = new ReactiveVar(false);
this.total = new ReactiveVar(0);
this.query = new ReactiveVar({});
this.statuses = new ReactiveVar([]);
this.isLoading = new ReactiveVar(false);
this.offset = new ReactiveVar(0);
this.tabBar = new RocketChatTabBar();
this.tabBar.showGroup(FlowRouter.current().route.name);
this.tabBarData = new ReactiveVar();
TabBar.addButton({
groups: ['user-status-custom', 'user-status-custom-selected'],
id: 'add-user-status',
i18nTitle: 'Custom_User_Status_Add',
icon: 'plus',
template: 'adminUserStatusEdit',
order: 1,
});
TabBar.addButton({
groups: ['user-status-custom-selected'],
id: 'admin-user-status-info',
i18nTitle: 'Custom_User_Status_Info',
icon: 'customize',
template: 'adminUserStatusInfo',
order: 2,
});
this.onSuccessCallback = () => {
this.offset.set(0);
return this.loadStatus(this.query.get(), this.offset.get());
};
this.tabBarData.set({
onSuccess: instance.onSuccessCallback,
});
this.loadStatus = _.debounce(async (query, offset) => {
this.isLoading.set(true);
const { statuses, total } = await APIClient.v1.get('custom-user-status.list', {
count: LIST_SIZE,
offset,
query: JSON.stringify(query),
});
this.total.set(total);
if (offset === 0) {
this.statuses.set(statuses);
} else {
this.statuses.set(this.statuses.get().concat(statuses));
}
this.isLoading.set(false);
}, DEBOUNCE_TIME_TO_SEARCH_IN_MS);
this.autorun(() => {
const filter = this.filter.get() && this.filter.get().trim();
const offset = this.offset.get();
if (filter) {
const regex = { $regex: filter, $options: 'i' };
return this.loadStatus({ name: regex }, offset);
}
return this.loadStatus({}, offset);
});
});
Template.adminUserStatus.onRendered(() =>
Tracker.afterFlush(function() {
SideNav.setFlex('adminFlex');
SideNav.openFlex();
}),
);
Template.adminUserStatus.events({
'keydown #user-status-filter'(e) {
// stop enter key
if (e.which === 13) {
e.stopPropagation();
e.preventDefault();
}
},
'keyup #user-status-filter'(e, t) {
e.stopPropagation();
e.preventDefault();
t.filter.set(e.currentTarget.value);
t.offset.set(0);
},
'click .load-more'(e, t) {
e.preventDefault();
e.stopPropagation();
t.limit.set(t.limit.get() + 50);
},
});