refactor: client-side handlers for user invitations

DRY
v1.18.x
Julian Lam 4 years ago
parent 3ccebf112e
commit d83eb7f89e

@ -1,8 +1,8 @@
'use strict';
define('admin/manage/users', [
'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox',
], function (translator, Benchpress, autocomplete, api, slugify, bootbox) {
'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'accounts/invite',
], function (translator, Benchpress, autocomplete, api, slugify, bootbox, AccountInvite) {
var Users = {};
Users.init = function () {
@ -380,13 +380,10 @@ define('admin/manage/users', [
}
handleSearch();
handleUserCreate();
handleInvite();
handleSort();
handleFilter();
AccountInvite.handle();
};
function handleSearch() {
@ -453,59 +450,6 @@ define('admin/manage/users', [
});
}
function handleInvite() {
$('[component="user/invite"]').on('click', function (e) {
e.preventDefault();
api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => {
Benchpress.parse('modals/invite', { groups: groups }, function (html) {
bootbox.dialog({
message: html,
title: '[[admin/manage/users:invite]]',
onEscape: true,
buttons: {
cancel: {
label: '[[admin/manage/users:alerts.button-cancel]]',
className: 'btn-default',
},
invite: {
label: '[[admin/manage/users:invite]]',
className: 'btn-primary',
callback: sendInvites,
},
},
});
});
}).catch((err) => {
app.alertError(err.message);
});
});
}
function sendInvites() {
var $emails = $('#invite-modal-emails');
var $groups = $('#invite-modal-groups');
var data = {
emails: $emails.val()
.split(',')
.map(m => m.trim())
.filter(Boolean)
.filter((m, i, arr) => i === arr.indexOf(m))
.join(','),
groupsToJoin: $groups.val(),
};
if (!data.emails) {
return;
}
api.post(`/users/${app.user.uid}/invites`, data).then(() => {
app.alertSuccess('[[admin/manage/users:alerts.email-sent-to, ' + data.emails.replace(/,/g, ', ') + ']]');
}).catch((err) => {
app.alertError(err.message);
});
}
function buildSearchQuery(params) {
if ($('#user-search').val()) {
params.query = $('#user-search').val();

@ -2,8 +2,8 @@
define('forum/users', [
'translator', 'benchpress', 'api', 'bootbox',
], function (translator, Benchpress, api, bootbox) {
'translator', 'benchpress', 'api', 'accounts/invite',
], function (translator, Benchpress, api, AccountInvite) {
var Users = {};
var searchTimeoutID = 0;
@ -25,7 +25,7 @@ define('forum/users', [
Users.handleSearch();
handleInvite();
AccountInvite.handle();
socket.removeListener('event:user_status_change', onUserStatusChange);
socket.on('event:user_status_change', onUserStatusChange);
@ -135,58 +135,5 @@ define('forum/users', [
return utils.params().section || '';
}
function handleInvite() {
$('[component="user/invite"]').on('click', function (e) {
e.preventDefault();
api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => {
Benchpress.parse('modals/invite', { groups: groups }, function (html) {
bootbox.dialog({
message: html,
title: '[[users:invite]]',
onEscape: true,
buttons: {
cancel: {
label: '[[modules:bootbox.cancel]]',
className: 'btn-default',
},
invite: {
label: '[[users:invite]]',
className: 'btn-primary',
callback: sendInvites,
},
},
});
});
}).catch((err) => {
app.alertError(err.message);
});
});
}
function sendInvites() {
var $emails = $('#invite-modal-emails');
var $groups = $('#invite-modal-groups');
var data = {
emails: $emails.val()
.split(',')
.map(m => m.trim())
.filter(Boolean)
.filter((m, i, arr) => i === arr.indexOf(m))
.join(','),
groupsToJoin: $groups.val(),
};
if (!data.emails) {
return;
}
api.post(`/users/${app.user.uid}/invites`, data).then(() => {
app.alertSuccess('[[users:invitation-email-sent, ' + data.emails.replace(/,/g, ', ') + ']]');
}).catch((err) => {
app.alertError(err.message);
});
}
return Users;
});

@ -0,0 +1,64 @@
'use strict';
define('accounts/invite', ['api', 'benchpress', 'bootbox'], function (api, Benchpress, bootbox) {
const Invite = {};
function isACP() {
return ajaxify.data.template.name.startsWith('admin/');
}
Invite.handle = function () {
$('[component="user/invite"]').on('click', function (e) {
e.preventDefault();
api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => {
Benchpress.parse('modals/invite', { groups: groups }, function (html) {
bootbox.dialog({
message: html,
title: `[[${isACP ? 'admin/manage/users:invite' : 'users:invite'}]]`,
onEscape: true,
buttons: {
cancel: {
label: `[[${isACP ? 'admin/manage/users:alerts.button-cancel' : 'modules:bootbox.cancel'}]]`,
className: 'btn-default',
},
invite: {
label: `[[${isACP ? 'admin/manage/users:invite' : 'users:invite'}]]`,
className: 'btn-primary',
callback: Invite.send,
},
},
});
});
}).catch((err) => {
app.alertError(err.message);
});
});
};
Invite.send = function () {
var $emails = $('#invite-modal-emails');
var $groups = $('#invite-modal-groups');
var data = {
emails: $emails.val()
.split(',')
.map(m => m.trim())
.filter(Boolean)
.filter((m, i, arr) => i === arr.indexOf(m))
.join(','),
groupsToJoin: $groups.val(),
};
if (!data.emails) {
return;
}
api.post(`/users/${app.user.uid}/invites`, data).then(() => {
app.alertSuccess(`[[${isACP ? 'admin/manage/users:alerts.email-sent-to' : 'users:invitation-email-sent'}, ${data.emails.replace(/,/g, ', ')}]]`);
}).catch((err) => {
app.alertError(err.message);
});
};
return Invite;
});
Loading…
Cancel
Save