lbry.com/web/js/emailSettings.js
2018-09-21 16:02:45 -04:00

109 lines
3.6 KiB
JavaScript

lbry.emailSettingsForm = function (formSelector, tags, userAuthToken) {
var
form = $(formSelector),
emailSection = form.find('.email-section'),
tagSection = form.find('.tag-section'),
hasError = false,
isEmailSubmitPending = false,
tagMap = new Map(),
isTagSubmitPending = false;
$.each(tags, function(tag, enabled){
tagMap[tag] = enabled;
});
form.find(':input').change(submitForm);
function submitForm() {
form.find('.notice').hide();
hasError = false;
isEmailSubmitPending = true;
isTagSubmitPending = true;
var promiseMap = $.map(emailSection.find("input"), function (element) {
var url = 'https://api.lbry.io/user/email/edit?auth_token=' + userAuthToken
url = url + "&email=" + element.value + "&enabled=" + element.checked.toString();
return fetch(url).then(function (value) {
return value.json()
})
});
//Call api for each email a user will have linked - polyfill needed for IE for Promise.all
Promise.all(promiseMap)
.then(function (apiValues) {
isEmailSubmitPending = false;
showSuccess();
})
.catch(function (value) {
isEmailSubmitPending = false;
hasError = true;
var error = "get actual error message from value";
emailSection.find('.notice-error').html(error).show();
});
//do tag edit
var url = 'https://api.lbry.io/user/tag/edit?auth_token=' + userAuthToken
var addTags = new Array(),
removeTags = new Array();
tagSection.find('input').each(function () {
var tagName = this.value
var enabled = this.checked
if (enabled && !tagMap[tagName]) {
addTags.push(tagName)
} else if (!enabled && tagMap[tagName]) {
removeTags.push(tagName)
}
});
var hasChanges = addTags[0] || removeTags[0]
var addTagsParam = addTags[0]
for (var i = 1; i < addTags.length; i++) {
hasChanges = true
addTagsParam = addTagsParam + "," + addTags[i];
}
var removeTagsParam = removeTags[0]
for (var i = 1; i < removeTags.length; i++) {
hasChanges = true
removeTagsParam = removeTagsParam + "," + removeTags[i];
}
if (addTagsParam && addTagsParam.length > 0) {
url = url + "&add=" + addTagsParam
}
if (removeTagsParam && removeTagsParam.length > 0) {
url = url + "&remove=" + removeTagsParam
}
if (hasChanges) {
fetch(url).then(response => {return response.json()}
).
then(jsonResponse => {
isTagSubmitPending = false;
if (jsonResponse.success) {
showSuccess();
} else {
hasError = true;
tagSection.find('.notice-error').html(jsonResponse.error).show();
}
}).
catch(function (value) {
isTagSubmitPending = false;
hasError = true;
tagSection.find('.notice-error').html(value.error).show();
});
} else {
isTagSubmitPending = false;
}
}
function showSuccess() {
if (!isEmailSubmitPending && !isTagSubmitPending && !hasError)
{
form.find('.notice-success').show()
// .get(0).scrollIntoView();
}
}
form.show();
}