You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.2 KiB
JavaScript

define('forum/groups/list', ['forum/infinitescroll', 'benchpress', 'api'], function (infinitescroll, Benchpress, api) {
var Groups = {};
Groups.init = function () {
infinitescroll.init(Groups.loadMoreGroups);
// Group creation
$('button[data-action="new"]').on('click', function () {
bootbox.prompt('[[groups:new-group.group_name]]', function (name) {
if (name && name.length) {
api.post('/groups', {
name: name,
}, (res) => {
ajaxify.go('groups/' + res.slug);
}, err => app.alertError(err.status.message));
}
});
});
var params = utils.params();
$('#search-sort').val(params.sort || 'alpha');
// Group searching
$('#search-text').on('keyup', Groups.search);
$('#search-button').on('click', Groups.search);
$('#search-sort').on('change', function () {
ajaxify.go('groups?sort=' + $('#search-sort').val());
});
};
Groups.loadMoreGroups = function (direction) {
if (direction < 0) {
return;
}
infinitescroll.loadMore('groups.loadMore', {
sort: $('#search-sort').val(),
after: $('[component="groups/container"]').attr('data-nextstart'),
}, function (data, done) {
if (data && data.groups.length) {
Benchpress.parse('partials/groups/list', {
groups: data.groups,
}, function (html) {
$('#groups-list').append(html);
done();
});
} else {
done();
}
if (data && data.nextStart) {
$('[component="groups/container"]').attr('data-nextstart', data.nextStart);
}
});
};
Groups.search = function () {
var groupsEl = $('#groups-list');
var queryEl = $('#search-text');
var sortEl = $('#search-sort');
socket.emit('groups.search', {
query: queryEl.val(),
options: {
sort: sortEl.val(),
filterHidden: true,
showMembers: true,
hideEphemeralGroups: true,
},
}, function (err, groups) {
if (err) {
return app.alertError(err.message);
}
groups = groups.filter(function (group) {
return group.name !== 'registered-users' && group.name !== 'guests';
});
Benchpress.parse('partials/groups/list', {
groups: groups,
}, function (html) {
groupsEl.empty().append(html);
});
});
return false;
};
return Groups;
});