mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
refactor: client-side handlers for user invitations
DRY
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
define('admin/manage/users', [
|
define('admin/manage/users', [
|
||||||
'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox',
|
'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'accounts/invite',
|
||||||
], function (translator, Benchpress, autocomplete, api, slugify, bootbox) {
|
], function (translator, Benchpress, autocomplete, api, slugify, bootbox, AccountInvite) {
|
||||||
var Users = {};
|
var Users = {};
|
||||||
|
|
||||||
Users.init = function () {
|
Users.init = function () {
|
||||||
@@ -380,13 +380,10 @@ define('admin/manage/users', [
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleSearch();
|
handleSearch();
|
||||||
|
|
||||||
handleUserCreate();
|
handleUserCreate();
|
||||||
|
|
||||||
handleInvite();
|
|
||||||
|
|
||||||
handleSort();
|
handleSort();
|
||||||
handleFilter();
|
handleFilter();
|
||||||
|
AccountInvite.handle();
|
||||||
};
|
};
|
||||||
|
|
||||||
function handleSearch() {
|
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) {
|
function buildSearchQuery(params) {
|
||||||
if ($('#user-search').val()) {
|
if ($('#user-search').val()) {
|
||||||
params.query = $('#user-search').val();
|
params.query = $('#user-search').val();
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
|
|
||||||
define('forum/users', [
|
define('forum/users', [
|
||||||
'translator', 'benchpress', 'api', 'bootbox',
|
'translator', 'benchpress', 'api', 'accounts/invite',
|
||||||
], function (translator, Benchpress, api, bootbox) {
|
], function (translator, Benchpress, api, AccountInvite) {
|
||||||
var Users = {};
|
var Users = {};
|
||||||
|
|
||||||
var searchTimeoutID = 0;
|
var searchTimeoutID = 0;
|
||||||
@@ -25,7 +25,7 @@ define('forum/users', [
|
|||||||
|
|
||||||
Users.handleSearch();
|
Users.handleSearch();
|
||||||
|
|
||||||
handleInvite();
|
AccountInvite.handle();
|
||||||
|
|
||||||
socket.removeListener('event:user_status_change', onUserStatusChange);
|
socket.removeListener('event:user_status_change', onUserStatusChange);
|
||||||
socket.on('event:user_status_change', onUserStatusChange);
|
socket.on('event:user_status_change', onUserStatusChange);
|
||||||
@@ -135,58 +135,5 @@ define('forum/users', [
|
|||||||
return utils.params().section || '';
|
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;
|
return Users;
|
||||||
});
|
});
|
||||||
|
|||||||
64
public/src/modules/accounts/invite.js
Normal file
64
public/src/modules/accounts/invite.js
Normal file
@@ -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;
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user