referrals: 1/2 generation routes, display route, partial frontend
route for generation/enabling of referral for user(s) done? the frontend is mostly done, but functionality is not there yet. Route for finding and displaying referral to user is done. Also the config option for referral is there, in user page settings.
This commit is contained in:
@@ -748,9 +748,14 @@ export class accountsList {
|
||||
private _modifySettings = document.getElementById("accounts-modify-user") as HTMLSpanElement;
|
||||
private _modifySettingsProfile = document.getElementById("radio-use-profile") as HTMLInputElement;
|
||||
private _modifySettingsUser = document.getElementById("radio-use-user") as HTMLInputElement;
|
||||
private _enableReferrals = document.getElementById("accounts-enable-referrals") as HTMLSpanElement;
|
||||
private _enableReferralsProfile = document.getElementById("radio-referrals-use-profile") as HTMLInputElement;
|
||||
private _enableReferralsInvite = document.getElementById("radio-referrals-use-invite") as HTMLInputElement;
|
||||
private _sendPWR = document.getElementById("accounts-send-pwr") as HTMLSpanElement;
|
||||
private _profileSelect = document.getElementById("modify-user-profiles") as HTMLSelectElement;
|
||||
private _userSelect = document.getElementById("modify-user-users") as HTMLSelectElement;
|
||||
private _referralsProfileSelect = document.getElementById("enable-referrals-user-profiles") as HTMLSelectElement;
|
||||
private _referralsInviteSelect = document.getElementById("enable-referrals-user-invites") as HTMLSelectElement;
|
||||
private _search = document.getElementById("accounts-search") as HTMLInputElement;
|
||||
|
||||
private _selectAll = document.getElementById("accounts-select-all") as HTMLInputElement;
|
||||
@@ -1154,6 +1159,9 @@ export class accountsList {
|
||||
this._selectAll.indeterminate = false;
|
||||
this._selectAll.checked = false;
|
||||
this._modifySettings.classList.add("unfocused");
|
||||
if (window.referralsEnabled) {
|
||||
this._enableReferrals.classList.add("unfocused");
|
||||
}
|
||||
this._deleteUser.classList.add("unfocused");
|
||||
if (window.emailEnabled || window.telegramEnabled) {
|
||||
this._announceButton.parentElement.classList.add("unfocused");
|
||||
@@ -1176,6 +1184,9 @@ export class accountsList {
|
||||
this._selectAll.indeterminate = true;
|
||||
}
|
||||
this._modifySettings.classList.remove("unfocused");
|
||||
if (window.referralsEnabled) {
|
||||
this._enableReferrals.classList.remove("unfocused");
|
||||
}
|
||||
this._deleteUser.classList.remove("unfocused");
|
||||
this._deleteUser.textContent = window.lang.quantity("deleteUser", list.length);
|
||||
if (window.emailEnabled || window.telegramEnabled) {
|
||||
@@ -1662,6 +1673,60 @@ export class accountsList {
|
||||
};
|
||||
window.modals.modifyUser.show();
|
||||
}
|
||||
|
||||
enableReferrals = () => {
|
||||
const modalHeader = document.getElementById("header-enable-referrals-user");
|
||||
modalHeader.textContent = window.lang.quantity("enableReferralsFor", this._collectUsers().length)
|
||||
let list = this._collectUsers();
|
||||
// FIXME: Collect Profiles, Invite
|
||||
(() => {
|
||||
let innerHTML = "";
|
||||
for (const profile of window.availableProfiles) {
|
||||
innerHTML += `<option value="${profile}">${profile}</option>`;
|
||||
}
|
||||
this._referralsProfileSelect.innerHTML = innerHTML;
|
||||
})();
|
||||
|
||||
(() => {
|
||||
let innerHTML = "";
|
||||
// for (let id in this._users) {
|
||||
// innerHTML += `<option value="${id}">${this._users[id].name}</option>`;
|
||||
// }
|
||||
this._referralsInviteSelect.innerHTML = innerHTML;
|
||||
})();
|
||||
|
||||
const form = document.getElementById("form-enable-referrals-user") as HTMLFormElement;
|
||||
const button = form.querySelector("span.submit") as HTMLSpanElement;
|
||||
this._enableReferralsProfile.checked = true;
|
||||
this._enableReferralsInvite.checked = false;
|
||||
form.onsubmit = (event: Event) => {
|
||||
event.preventDefault();
|
||||
toggleLoader(button);
|
||||
let send = {
|
||||
"users": list
|
||||
};
|
||||
if (this._enableReferralsProfile.checked && !this._enableReferralsInvite.checked) {
|
||||
send["from"] = "profile";
|
||||
send["profile"] = this._referralsProfileSelect.value;
|
||||
} else if (this._enableReferralsInvite.checked && !this._enableReferralsProfile.checked) {
|
||||
send["from"] = "invite";
|
||||
send["id"] = this._referralsInviteSelect.value;
|
||||
}
|
||||
_post("/users/referrals/" + send["from"] + "/" + send["id"], send, (req: XMLHttpRequest) => {
|
||||
if (req.readyState == 4) {
|
||||
toggleLoader(button);
|
||||
if (req.status == 400) {
|
||||
window.notifications.customError("unknownError", window.lang.notif("errorUnknown"));
|
||||
} else if (req.status == 200 || req.status == 204) {
|
||||
window.notifications.customSuccess("enableReferralsSuccess", window.lang.quantity("appliedSettings", this._collectUsers().length));
|
||||
}
|
||||
this.reload();
|
||||
window.modals.enableReferralsUser.close();
|
||||
}
|
||||
});
|
||||
};
|
||||
window.modals.enableReferralsUser.show();
|
||||
}
|
||||
|
||||
extendExpiry = (enableUser?: boolean) => {
|
||||
const list = this._collectUsers();
|
||||
@@ -1794,6 +1859,31 @@ export class accountsList {
|
||||
this._modifySettingsProfile.onchange = checkSource;
|
||||
this._modifySettingsUser.onchange = checkSource;
|
||||
|
||||
if (window.referralsEnabled) {
|
||||
this._enableReferrals.onclick = this.enableReferrals;
|
||||
const checkReferralSource = () => {
|
||||
const profileSpan = this._enableReferralsProfile.nextElementSibling as HTMLSpanElement;
|
||||
const inviteSpan = this._enableReferralsInvite.nextElementSibling as HTMLSpanElement;
|
||||
if (this._enableReferralsProfile.checked) {
|
||||
this._referralsInviteSelect.parentElement.classList.add("unfocused");
|
||||
this._referralsProfileSelect.parentElement.classList.remove("unfocused")
|
||||
profileSpan.classList.add("@high");
|
||||
profileSpan.classList.remove("@low");
|
||||
inviteSpan.classList.remove("@high");
|
||||
inviteSpan.classList.add("@low");
|
||||
} else {
|
||||
this._referralsInviteSelect.parentElement.classList.remove("unfocused");
|
||||
this._referralsProfileSelect.parentElement.classList.add("unfocused");
|
||||
inviteSpan.classList.add("@high");
|
||||
inviteSpan.classList.remove("@low");
|
||||
profileSpan.classList.remove("@high");
|
||||
profileSpan.classList.add("@low");
|
||||
}
|
||||
};
|
||||
this._enableReferralsProfile.onchange = checkReferralSource;
|
||||
this._enableReferralsInvite.onchange = checkReferralSource;
|
||||
}
|
||||
|
||||
this._deleteUser.onclick = this.deleteUsers;
|
||||
this._deleteUser.classList.add("unfocused");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user